From 791d5d3fa36b2af5c965a4753539e062f050de96 Mon Sep 17 00:00:00 2001 From: Faisal Ahammad Date: Wed, 2 Nov 2022 15:21:03 +0600 Subject: [PATCH 01/45] Translate - Fixed minor tone issue from Bangla translation. --- i18n/README.bn.md | 66 +++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/i18n/README.bn.md b/i18n/README.bn.md index b9455141903..ef6c1836891 100644 --- a/i18n/README.bn.md +++ b/i18n/README.bn.md @@ -11,7 +11,7 @@ - [x] হোস্ট করা পোস্টগ্রেস ডাটাবেস. [ডক্স](https://supabase.com/docs/guides/database) - [x] অথেনটিকেশন এবং অথরাইজড . [ডক্স](https://supabase.com/docs/guides/auth) -- [x] স্বয়ংক্রিয়ভাবে তৈরি APIs. +- [x] স্বয়ংক্রিয়ভাবে তৈরি এপিআই. - [x] রেস্ট. [ডক্স](https://supabase.com/docs/guides/api#rest-api) - [x] রিয়েলটাইম সাবস্ক্রিপশন. [ডক্স](https://supabase.com/docs/guides/api#realtime-api) - [x] গ্রাফকিউএল (বেটা). [ডক্স](https://supabase.com/docs/guides/api#graphql-api) @@ -31,10 +31,10 @@ ## কমিউনিটি ও সাপোর্ট -- [কমিউনিটি ফোরাম](https://github.com/supabase/supabase/discussions). এর জন্য সর্বোত্তম: তৈরিতে সহায়তা, ডাটাবেস সেরা অনুশীলন সম্পর্কে আলোচনা। -- [গিঠাব ইস্যু](https://github.com/supabase/supabase/issues). এর জন্য সেরা: সুপাবেস ব্যবহার করে আপনি যে বাগ এবং ত্রুটির সম্মুখীন হন। -- [ইমেইল সাপোর্ট](https://supabase.com/docs/support#business-support). এর জন্য সেরা: আপনার ডাটাবেস বা অবকাঠামো নিয়ে সমস্যা। -- [ডিসকোর্ড](https://discord.supabase.com). এর জন্য সর্বোত্তম: আপনার অ্যাপ্লিকেশনগুলি ভাগ করা এবং সম্প্রদায়ের সাথে হ্যাঙ্গআউট করা৷ +- [কমিউনিটি ফোরাম](https://github.com/supabase/supabase/discussions)। সর্বোত্তম: তৈরি করতে সহায়তা, ডাটাবেস সেরা অনুশীলন সম্পর্কে আলোচনা। +- [গিটহাব ইস্যু](https://github.com/supabase/supabase/issues)। সর্বোত্তম: সুপাবেস ব্যবহার করতে আপনি যে বাগ এবং ত্রুটির সম্মুখীন হন। +- [ইমেইল সাপোর্ট](https://supabase.com/docs/support#business-support)। সর্বোত্তম: আপনার ডাটাবেস বা অবকাঠামো নিয়ে সমস্যা। +- [ডিসকোর্ড](https://discord.supabase.com)। সর্বোত্তম: আপনার অ্যাপ্লিকেশনগুলি শেয়ার করা এবং কমিউনিটির সাথে দেখা সাক্ষাৎ করা৷ ## স্ট্যাটাস @@ -43,30 +43,30 @@ - [x] পাবলিক বেটা: বেশিরভাগ নন-এন্টারপ্রাইজ ব্যবহারের ক্ষেত্রে যথেষ্ট স্থিতিশীল - [ ] পাবলিক: প্রোডাকশন রেডি -আমরা বর্তমানে পাবলিক বেটাতে আছি। বড় আপডেটের বিজ্ঞপ্তি পেতে এই রেপোর "রিলিজ" দেখুন। +আমরা বর্তমানে পাবলিক বেটাতে আছি। বড় আপডেটের বিজ্ঞপ্তি পেতে এই রিপুর "রিলিজ" দেখুন। -এই রেপো দেখুন +এই রিপু দেখুন --- ## কিভাবে এটা কাজ করে -Supabase হল ওপেন সোর্স টুলের সংমিশ্রণ। আমরা এন্টারপ্রাইজ-গ্রেড, ওপেন সোর্স পণ্য ব্যবহার করে Firebase-এর বৈশিষ্ট্য তৈরি করছি। যদি MIT, Apache 2, বা সমতুল্য ওপেন লাইসেন্স সহ টুল এবং সম্প্রদায়গুলি বিদ্যমান থাকে, আমরা সেই টুলটি ব্যবহার করব এবং সমর্থন করব। যদি টুলটি বিদ্যমান না থাকে, তাহলে আমরা নিজেরাই এটি তৈরি এবং ওপেন সোর্স করি। Supabase Firebase-এর 1-থেকে-1 ম্যাপিং নয়। ওপেন সোর্স টুল ব্যবহার করে ডেভেলপারদের ফায়ারবেসের মতো ডেভেলপার অভিজ্ঞতা দেওয়াই আমাদের লক্ষ্য। +Supabase হল ওপেন সোর্স টুলের সংমিশ্রণ। আমরা এন্টারপ্রাইজ-গ্রেড, ওপেন সোর্স পণ্য ব্যবহার করে Firebase-এর ফিচারসমুহ তৈরি করছি। যদি MIT, Apache 2, বা সমতুল্য ওপেন লাইসেন্স সহ টুল এবং সম্প্রদায়গুলি বিদ্যমান থাকে, আমরা সেই টুলটি ব্যবহার করব এবং সমর্থন করব। যদি টুলটি বিদ্যমান না থাকে, তাহলে আমরা নিজেরাই এটি তৈরি এবং ওপেন সোর্স করি। Supabase Firebase-এর 1-থেকে-1 ম্যাপিং নয়। ওপেন সোর্স টুল ব্যবহার করে ডেভেলপারদের ফায়ারবেসের মতো ডেভেলপার অভিজ্ঞতা দেওয়াই আমাদের লক্ষ্য। **স্থাপত্য** -সুপাবেস হল একটি [হোস্ট করা প্ল্যাটফর্ম](https://app.supabase.com)। আপনি সাইন আপ করতে পারেন এবং কিছু ইনস্টল না করে সুপাবেস ব্যবহার শুরু করতে পারেন। +সুপাবেস হল একটি [হোস্ট করা প্ল্যাটফর্ম](https://app.supabase.com)। আপনি সাইন আপ করে এবং কিছু ইনস্টল না করে সুপাবেস ব্যবহার শুরু করতে পারেন। এছাড়াও আপনি [স্ব-হোস্ট](https://supabase.com/docs/guides/hosting/overview) এবং [ডেভেলপ লোকালি](https://supabase.com/docs/guides/local-development) করতে পারেন। ![আর্কিটেকচার](https://user-images.githubusercontent.com/70828596/187547862-ffa9d058-0c3a-4851-a3e7-92ccfca4b596.png) - [PostgreSQL](https://www.postgresql.org/) হল একটি অবজেক্ট-রিলেশনাল ডাটাবেস সিস্টেম যার 30 বছরের বেশি সক্রিয় বিকাশ রয়েছে যা এটিকে নির্ভরযোগ্যতা, বৈশিষ্ট্যের দৃঢ়তা এবং কর্মক্ষমতার জন্য একটি শক্তিশালী খ্যাতি অর্জন করেছে। - [রিয়েলটাইম](https://github.com/supabase/realtime) হল একটি Elixir সার্ভার যা আপনাকে ওয়েবসকেট ব্যবহার করে PostgreSQL সন্নিবেশ, আপডেট এবং মুছে ফেলা শুনতে দেয়। ডাটাবেস পরিবর্তনের জন্য রিয়েলটাইম পোল পোস্টগ্রেসের অন্তর্নির্মিত প্রতিলিপি কার্যকারিতা, পরিবর্তনগুলিকে JSON-এ রূপান্তরিত করে, তারপর অনুমোদিত ক্লায়েন্টদের কাছে ওয়েবসকেটের মাধ্যমে JSON সম্প্রচার করে। -- [PostgREST](http://postgrest.org/) একটি ওয়েব সার্ভার যা আপনার PostgreSQL ডাটাবেসকে সরাসরি একটি RESTful API-তে পরিণত করে -- [স্টোরেজ](https://github.com/supabase/storage-api) অনুমতিগুলি পরিচালনা করতে Postgres ব্যবহার করে S3-এ সঞ্চিত ফাইলগুলি পরিচালনা করার জন্য একটি RESTful ইন্টারফেস প্রদান করে। -- [postgres-meta](https://github.com/supabase/postgres-meta) হল আপনার পোস্টগ্রেস পরিচালনা করার জন্য একটি RESTful API, যা আপনাকে টেবিল আনতে, ভূমিকা যোগ করতে এবং কোয়েরি চালানোর অনুমতি দেয়। -- [GoTrue](https://github.com/netlify/gotrue) ব্যবহারকারীদের পরিচালনা এবং SWT টোকেন ইস্যু করার জন্য একটি SWT ভিত্তিক API। -- [কং](https://github.com/Kong/kong) হল একটি ক্লাউড-নেটিভ API গেটওয়ে। +- [PostgREST](http://postgrest.org/) একটি ওয়েব সার্ভার যা আপনার PostgreSQL ডাটাবেসকে সরাসরি একটি রেস্টফুল এপিআইতে পরিণত করে। +- [স্টোরেজ](https://github.com/supabase/storage-api) অনুমতিগুলি পরিচালনা করতে পোস্টগ্রেস ব্যবহার করে S3-এ সঞ্চিত ফাইলগুলি পরিচালনা করার জন্য একটি রেস্টফুল ইন্টারফেস প্রদান করে। +- [পোস্টগ্রেস-মেটা](https://github.com/supabase/postgres-meta) হল আপনার পোস্টগ্রেস পরিচালনা করার জন্য একটি রেস্টফুল এপিআই, যা আপনাকে টেবিল আনতে, ভূমিকা যোগ করতে এবং কোয়েরি চালানোর অনুমতি দেয়। +- [গোট্রু](https://github.com/netlify/gotrue) ব্যবহারকারীদের পরিচালনা এবং SWT টোকেন ইস্যু করার জন্য একটি SWT ভিত্তিক এপিআই +- [কং](https://github.com/Kong/kong) হল একটি ক্লাউড-নেটিভ এপিআই গেটওয়ে। #### ক্লায়েন্ট লাইব্রেরি @@ -82,7 +82,7 @@ Supabase হল ওপেন সোর্স টুলের সংমিশ্ Supabase PostgREST - GoTrue + গোট্রু রিয়েলটাইম স্টোরেজ @@ -100,28 +100,28 @@ Supabase হল ওপেন সোর্স টুলের সংমিশ্ ⚡️ অফিসিয়াল ⚡️ জাভাস্ক্রিপ্ট (টাইপস্ক্রিপ্ট) - supabase-js + সুপাবেস-জেএস postgrest-js - gotrue-js + গোট্রু-জেএস রিয়েলটাইম-জেএস - storage-js + স্টোরেজ-জেএস 💚 সম্প্রদায় 💚 C# supabase-csharp postgrest-csharp - gotrue-csharp + গোট্রু-csharp রিয়েলটাইম-csharp - ডার্ট (ফ্লাটার) - supabase-dart - postgrest-dart - gotrue-dart + সুপাবেস-ডার্ট + postgrest-ডার্ট + গোট্রু-ডার্ট রিয়েলটাইম-ডার্ট - storage-dart + স্টোরেজ-ডার্ট গো @@ -135,7 +135,7 @@ Supabase হল ওপেন সোর্স টুলের সংমিশ্ জাভা - - - gotrue-java + গোট্রু-জাভা - - @@ -143,7 +143,7 @@ Supabase হল ওপেন সোর্স টুলের সংমিশ্ কোটলিন - postgrest-kt - gotrue-kt + গোট্রু-kt - - @@ -151,13 +151,13 @@ Supabase হল ওপেন সোর্স টুলের সংমিশ্ পাইথন supabase-py postgrest-py - gotrue-py - realtime-py + গোট্রু-py + রিয়েলটাইম-py - রুবি - supabase-rb + সুপাবেস-rb postgrest-rb - - @@ -173,9 +173,9 @@ Supabase হল ওপেন সোর্স টুলের সংমিশ্ সুইফট - supabase-swift - postgrest-swift - gotrue-swift + সুপাবেস-সুইফট + postgrest-সুইফট + গোট্রু-সুইফট রিয়েলটাইম-সুইফট স্টোরেজ-সুইফট @@ -185,6 +185,6 @@ Supabase হল ওপেন সোর্স টুলের সংমিশ্ - [অনুবাদের তালিকা](/i18n/languages.md) -## স্পনসর +## পৃষ্ঠপোষক -[![নতুন স্পনসর](https://user-images.githubusercontent.com/10214025/90518111-e74bbb00-e198-11ea-8f88-c9e3c1aa4b5b.png)](https://github.com/sponsors/supabase) +[![নতুন পৃষ্ঠপোষক](https://user-images.githubusercontent.com/10214025/90518111-e74bbb00-e198-11ea-8f88-c9e3c1aa4b5b.png)](https://github.com/sponsors/supabase) From 86de3bb26c27adb15c5709d2bc741093f1c33048 Mon Sep 17 00:00:00 2001 From: Ollie Halliday <22655069+Hallidayo@users.noreply.github.com> Date: Mon, 7 Nov 2022 14:46:56 +0000 Subject: [PATCH 02/45] changed code block on edge functions page --- apps/www/pages/edge-functions/edge-functions.tsx | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/apps/www/pages/edge-functions/edge-functions.tsx b/apps/www/pages/edge-functions/edge-functions.tsx index a1d9cd65678..c572c51526d 100644 --- a/apps/www/pages/edge-functions/edge-functions.tsx +++ b/apps/www/pages/edge-functions/edge-functions.tsx @@ -223,20 +223,17 @@ import { Customer } from 'types' serve(async (req) => { try { - // create a supabase client + // create a supabase client with Auth context of the user that called the function const supabaseClient = createClient( Deno.env.get('SUPABASE_URL') ?? '', - Deno.env.get('SUPABASE_ANON_KEY') ?? '' + Deno.env.get('SUPABASE_ANON_KEY') ?? '', + { global: { headers: { Authorization: req.headers.get('Authorization')! } } } ) // create a stripe client const stripe = Stripe(Deno.env.get('STRIPE_SECRET_KEY')) - // Get the authorization header from the request. - const authHeader = req.headers.get('Authorization').replace("Bearer ","") - // Client now respects auth policies for this user - supabaseClient.auth.setAuth(authHeader) - // set the user profile - const user = supabase.auth.user() + // get the current logged in user + const {data: { user },} = supabase.auth.getUser() // Retrieve user metadata that only the user is allowed to select const { data, error } = await supabaseClient From 2ed8c52af376726146217c9513fe23c44b1bffab Mon Sep 17 00:00:00 2001 From: cjdomacena Date: Thu, 24 Nov 2022 16:42:27 -0500 Subject: [PATCH 03/45] fix: update quickstart presence example --- apps/docs/pages/guides/realtime/quickstart.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/realtime/quickstart.mdx b/apps/docs/pages/guides/realtime/quickstart.mdx index 02bc5b9177b..4e7c08a6641 100644 --- a/apps/docs/pages/guides/realtime/quickstart.mdx +++ b/apps/docs/pages/guides/realtime/quickstart.mdx @@ -147,7 +147,7 @@ channel.on('presence', { event: 'join' }, ({ newPresences }) => { }) channel.on('presence', { event: 'leave' }, ({ leftPresences }) => { - console.log('Users have left: ', newPresences) + console.log('Users have left: ', leftPresences) }) channel.subscribe(async (status) => { From 5d4f4431d626aae88d73b26dbef44c53e78bd166 Mon Sep 17 00:00:00 2001 From: gitstart Date: Wed, 30 Nov 2022 15:57:04 +0000 Subject: [PATCH 04/45] fix: Action toggle icon disappears on focus in dashboard storage table --- studio/styles/storage.scss | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/studio/styles/storage.scss b/studio/styles/storage.scss index 103f60b8412..92c6789701f 100644 --- a/studio/styles/storage.scss +++ b/studio/styles/storage.scss @@ -40,7 +40,9 @@ // scroll-behavior: smooth; // } -.storage-row:hover { +.storage-row:hover, +button[aria-haspopup='menu'][data-state='open'], +button[aria-haspopup='menu']:focus-visible { .storage-row-menu { @apply opacity-100; } From faf9252253c5c4223da616456bd9146a000d3459 Mon Sep 17 00:00:00 2001 From: gitstart Date: Wed, 7 Dec 2022 08:18:06 +0000 Subject: [PATCH 05/45] fix: row click event trigger on menu item click --- .../to-be-cleaned/Storage/StorageExplorer/FileExplorerRow.js | 4 ++++ studio/localStores/storageExplorer/StorageExplorerStore.js | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerRow.js b/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerRow.js index ebf400f1ea1..efc6aa48d98 100644 --- a/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerRow.js +++ b/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerRow.js @@ -307,6 +307,10 @@ const FileExplorerRow = ({ className={`flex items-center justify-end ${ view === STORAGE_VIEWS.LIST ? 'flex-grow' : 'w-[10%]' }`} + onClick={(event) => + // Stops click event from this div, to resolve an issue with menu item's click event triggering unexpected row select + event.stopPropagation() + } > {item.status === STORAGE_ROW_STATUS.LOADING ? ( Date: Wed, 7 Dec 2022 16:50:03 -0300 Subject: [PATCH 06/45] remove storm icon --- apps/www/_blog/2022-12-07-supabase-beta-november-2022.mdx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/www/_blog/2022-12-07-supabase-beta-november-2022.mdx b/apps/www/_blog/2022-12-07-supabase-beta-november-2022.mdx index d1387baddc8..0588df7195c 100644 --- a/apps/www/_blog/2022-12-07-supabase-beta-november-2022.mdx +++ b/apps/www/_blog/2022-12-07-supabase-beta-november-2022.mdx @@ -46,7 +46,7 @@ Plus, we published three new functions examples: [Generate OG Images](https://gi - Conda support (`conda install -c conda-forge supabase` and everything else in py) -## Content storm ⛈ +## Content storm ![The Supabase Content Storm](/images/blog/2022-12-07-november-beta-update/content-storm.jpg) @@ -93,8 +93,6 @@ Discover other great projects: [Made with Supabase](https://www.madewithsupabas - ReactJS + Supabase Fullstack CRUD Application Development. [Youtube Playlist](https://youtube.com/playlist?list=PLl6EcvA_AoxEFqwT_rNs1uZnnf7LSEoji) - How to connect a ESP8266 to a Streamlit App using Supabase database. [Video](https://www.youtube.com/watch?v=wI209WK3-VM) - - ## Meme Zone This month’s meme comes courtesy of Fireship. [Follow us on Twitter](https://twitter.com/supabase) for more. From 84e7f96ee7d908137b08fe665ae534ee0b8b7152 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Thu, 15 Dec 2022 01:13:09 +0800 Subject: [PATCH 07/45] add initlaizing sections --- .../docs/docs/ref/javascript/initializing.mdx | 136 ++++++++++++++++++ .../docs/ref/javascript/v1/initializing.mdx | 136 ++++++++++++++++++ 2 files changed, 272 insertions(+) create mode 100644 apps/docs/docs/ref/javascript/initializing.mdx create mode 100644 apps/docs/docs/ref/javascript/v1/initializing.mdx diff --git a/apps/docs/docs/ref/javascript/initializing.mdx b/apps/docs/docs/ref/javascript/initializing.mdx new file mode 100644 index 00000000000..7ea5f5cf164 --- /dev/null +++ b/apps/docs/docs/ref/javascript/initializing.mdx @@ -0,0 +1,136 @@ +--- +id: initializing +title: 'Initializing' +slug: initializing +custom_edit_url: https://github.com/supabase/supabase/edit/master/spec/supabase_js_v1.yml +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +You can initialize a new Supabase client using the `createClient()` method. + +The Supabase client is your entrypoint to the rest of the Supabase functionality +and is the easiest way to interact with everything we offer within the Supabase ecosystem. + +## Parameters + +
    + +
  • +

    + + supabaseUrl + + + required + + + string + +

    +
    + +The unique Supabase URL which is supplied when you create a new project in your project dashboard. + +
    + +
  • + +
  • +

    + + supabaseKey + + + required + + + string + +

    +
    + +The unique Supabase Key which is supplied when you create a new project in your project dashboard. + +
    + +
  • + +
  • +

    + + options + + + optional + + + SupabaseClientOptions + +

    +
    + +No description provided. + +
    + +
  • + +
+ +## Examples + +### createClient() + +```js +import { createClient } from '@supabase/supabase-js' + +// Create a single supabase client for interacting with your database +const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') +``` + +### With additional parameters + +```js +import { createClient } from '@supabase/supabase-js' + +const options = { + schema: 'public', + headers: { 'x-my-custom-header': 'my-app-name' }, + autoRefreshToken: true, + persistSession: true, + detectSessionInUrl: true, +} +const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', options) +``` + +### API schemas + +```js +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', +}) +``` + +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. You also need to grant `USAGE` on your new schema with the grants you desire, such as `SELECT, INSERT, UPDATE, DELETE`. + +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. + +### Custom `fetch` implementation + +```js +import { createClient } from '@supabase/supabase-js' + +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. +This is most useful in environments where `cross-fetch` is not compatible (for instance Cloudflare Workers). diff --git a/apps/docs/docs/ref/javascript/v1/initializing.mdx b/apps/docs/docs/ref/javascript/v1/initializing.mdx new file mode 100644 index 00000000000..7ea5f5cf164 --- /dev/null +++ b/apps/docs/docs/ref/javascript/v1/initializing.mdx @@ -0,0 +1,136 @@ +--- +id: initializing +title: 'Initializing' +slug: initializing +custom_edit_url: https://github.com/supabase/supabase/edit/master/spec/supabase_js_v1.yml +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +You can initialize a new Supabase client using the `createClient()` method. + +The Supabase client is your entrypoint to the rest of the Supabase functionality +and is the easiest way to interact with everything we offer within the Supabase ecosystem. + +## Parameters + +
    + +
  • +

    + + supabaseUrl + + + required + + + string + +

    +
    + +The unique Supabase URL which is supplied when you create a new project in your project dashboard. + +
    + +
  • + +
  • +

    + + supabaseKey + + + required + + + string + +

    +
    + +The unique Supabase Key which is supplied when you create a new project in your project dashboard. + +
    + +
  • + +
  • +

    + + options + + + optional + + + SupabaseClientOptions + +

    +
    + +No description provided. + +
    + +
  • + +
+ +## Examples + +### createClient() + +```js +import { createClient } from '@supabase/supabase-js' + +// Create a single supabase client for interacting with your database +const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') +``` + +### With additional parameters + +```js +import { createClient } from '@supabase/supabase-js' + +const options = { + schema: 'public', + headers: { 'x-my-custom-header': 'my-app-name' }, + autoRefreshToken: true, + persistSession: true, + detectSessionInUrl: true, +} +const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', options) +``` + +### API schemas + +```js +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', +}) +``` + +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. You also need to grant `USAGE` on your new schema with the grants you desire, such as `SELECT, INSERT, UPDATE, DELETE`. + +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. + +### Custom `fetch` implementation + +```js +import { createClient } from '@supabase/supabase-js' + +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. +This is most useful in environments where `cross-fetch` is not compatible (for instance Cloudflare Workers). From c67a0688a5a99f1b0f8a02c4edf17b78bf2a91fd Mon Sep 17 00:00:00 2001 From: Isaiah Hamilton Date: Wed, 14 Dec 2022 19:03:38 -0500 Subject: [PATCH 08/45] chore: turn bold word to italic --- .../www/_blog/2022-12-14-mfa-auth-via-rls.mdx | 2 +- apps/www/public/rss.xml | 291 +++++++++--------- 2 files changed, 150 insertions(+), 143 deletions(-) diff --git a/apps/www/_blog/2022-12-14-mfa-auth-via-rls.mdx b/apps/www/_blog/2022-12-14-mfa-auth-via-rls.mdx index 0e013169035..7e3fe2b2dd9 100644 --- a/apps/www/_blog/2022-12-14-mfa-auth-via-rls.mdx +++ b/apps/www/_blog/2022-12-14-mfa-auth-via-rls.mdx @@ -38,7 +38,7 @@ In the event that the user faces difficulties entering a QR code the user can al An MFA flow can be broken into two key steps: Enrollment and Verification. During the *Enrollment* process Supabase Auth exchanges a randomly generated secret with the user’s authenticator application. During the *Verification* process, the device makes use of the timestamp together with the secret to produce a six digit code that the server can verify. ![Flowchart of an MFA flow](/images/blog/lw6-auth/mfa-flow.png) -**Enrollment** +*Enrollment* To generate a QR code, call the `/enroll` endpoint which returns an SVG encoded QR and the secret. Thereafter, create a challenge by calling the `/challenge` endpoint. Once the user has entered the six digit TOTP code generated by their authenticator app, call the`/verify` endpoint with the corresponding factor and challenge details. diff --git a/apps/www/public/rss.xml b/apps/www/public/rss.xml index d5f1e387aca..b08649ddd31 100644 --- a/apps/www/public/rss.xml +++ b/apps/www/public/rss.xml @@ -5,994 +5,1001 @@ https://supabase.com Latest news from Supabase en - Mon, 12 Dec 2022 16:04:00 +0000 + Tue, 13 Dec 2022 05:05:00 +0000 + https://supabase.com/blog/mfa-auth-via-rls + Multi-factor Authentication via Row Level Security Enforcement + https://supabase.com/blog/mfa-auth-via-rls + MFA Auth with enforcement via RLS + Tue, 13 Dec 2022 05:05:00 +0000 + + https://supabase.com/blog/storage-image-resizing-smart-cdn Supabase Storage v2: Image resizing and Smart CDN https://supabase.com/blog/storage-image-resizing-smart-cdn We're introducing new features for Supabase Storage: Image resizing and a Smart CDN. - Mon, 12 Dec 2022 16:04:00 +0000 + Mon, 12 Dec 2022 05:05:00 +0000 https://supabase.com/blog/new-supabase-docs-built-with-nextjs New Supabase Docs, built with Next.js https://supabase.com/blog/new-supabase-docs-built-with-nextjs We've redesignd our Docs and migrated to Next.js - Sun, 11 Dec 2022 16:04:00 +0000 + Sun, 11 Dec 2022 05:05:00 +0000 https://supabase.com/blog/postgres-crdt pg_crdt - an experimental CRDT extension for Postgres https://supabase.com/blog/postgres-crdt Embedding Yjs and Automerge into Postgres for collaborative applications. - Fri, 09 Dec 2022 16:04:00 +0000 + Fri, 09 Dec 2022 05:05:00 +0000 https://supabase.com/blog/who-we-hire Who We Hire at Supabase https://supabase.com/blog/who-we-hire Traits we look for to maintain a culture of shipping fast and often - Thu, 08 Dec 2022 16:04:00 +0000 + Thu, 08 Dec 2022 05:05:00 +0000 https://supabase.com/blog/launch-week-6-hackathon Launch Week 6 Hackathon https://supabase.com/blog/launch-week-6-hackathon Build an Open Source Project, Win $1500 and the Supabase Darkmode Keyboard - Thu, 08 Dec 2022 16:04:00 +0000 + Thu, 08 Dec 2022 05:05:00 +0000 https://supabase.com/blog/supabase-beta-november-2022 Supabase Beta November 2022 https://supabase.com/blog/supabase-beta-november-2022 We are preparing everything for Launch Week 6, but we still had time to ship some goodies this month! - Tue, 06 Dec 2022 16:04:00 +0000 + Tue, 06 Dec 2022 05:05:00 +0000 https://supabase.com/blog/the-supabase-content-storm The Supabase Content Storm https://supabase.com/blog/the-supabase-content-storm We worked with +30 content creators to drop a mountain of content simultaneously. - Mon, 05 Dec 2022 16:04:00 +0000 + Mon, 05 Dec 2022 05:05:00 +0000 https://supabase.com/blog/transparent-column-encryption-with-postgres Transparent Column Encryption with Postgres https://supabase.com/blog/transparent-column-encryption-with-postgres Using pgsodium's Transparent Column Encryption to encrypt data and provide your users with row-level encryption. - Wed, 30 Nov 2022 16:04:00 +0000 + Wed, 30 Nov 2022 05:05:00 +0000 https://supabase.com/blog/sql-or-nosql-both-with-postgresql SQL or NoSQL? Why not use both (with PostgreSQL)? https://supabase.com/blog/sql-or-nosql-both-with-postgresql How to turn Postgres into an easy-to-use NoSQL database that retains all the power of SQL - Wed, 23 Nov 2022 16:04:00 +0000 + Wed, 23 Nov 2022 05:05:00 +0000 https://supabase.com/blog/flutter-authentication-and-authorization-with-rls Flutter Authentication and Authorization with RLS https://supabase.com/blog/flutter-authentication-and-authorization-with-rls Learn how you can secure your Flutter app using Supabase Row Level Security. - Mon, 21 Nov 2022 16:04:00 +0000 + Mon, 21 Nov 2022 05:05:00 +0000 https://supabase.com/blog/fetching-and-caching-supabase-data-in-next-js-server-components Fetching and caching Supabase data in Next.js 13 Server Components https://supabase.com/blog/fetching-and-caching-supabase-data-in-next-js-server-components Next.js 13 introduces new data fetching and caching methods to enable React Server Components and Suspense. - Wed, 16 Nov 2022 16:04:00 +0000 + Wed, 16 Nov 2022 05:05:00 +0000 https://supabase.com/blog/authentication-in-ionic-angular Authentication in Ionic Angular with Supabase https://supabase.com/blog/authentication-in-ionic-angular Learn how to build an Ionic Angular app with authentication, Row Level Security, and Magic Link auth. - Mon, 07 Nov 2022 16:04:00 +0000 + Mon, 07 Nov 2022 05:05:00 +0000 https://supabase.com/blog/supabase-beta-update-october-2022 Supabase Beta October 2022 https://supabase.com/blog/supabase-beta-update-october-2022 New SDKs, quickstarts, Functions tricks, and more. But, more importantly, Launch Week 6️ has a date! - Tue, 01 Nov 2022 16:04:00 +0000 + Tue, 01 Nov 2022 04:04:00 +0000 https://supabase.com/blog/postgresql-commitfest What is PostgreSQL commitfest and how to contribute https://supabase.com/blog/postgresql-commitfest A time-tested method for contributing to the core Postgres code - Wed, 26 Oct 2022 16:04:00 +0000 + Wed, 26 Oct 2022 04:04:00 +0000 https://supabase.com/blog/supabase-flutter-sdk-v1-released supabase-flutter v1 Released https://supabase.com/blog/supabase-flutter-sdk-v1-released We've released supabase-flutter v1. More intuitive way of accessing Supabase from your Flutter application. - Thu, 20 Oct 2022 16:04:00 +0000 + Thu, 20 Oct 2022 04:04:00 +0000 https://supabase.com/blog/supabase-js-v2-released supabase-js v2 Released https://supabase.com/blog/supabase-js-v2-released We've released supabase-js v2. Updated examples, quickstarts, and an improved experience. - Wed, 19 Oct 2022 16:04:00 +0000 + Wed, 19 Oct 2022 04:04:00 +0000 https://supabase.com/blog/postgres-full-text-search-vs-the-rest Postgres Full Text Search vs the rest https://supabase.com/blog/postgres-full-text-search-vs-the-rest Comparing one of the most popular Postgres features against alternatives - Thu, 13 Oct 2022 16:04:00 +0000 + Thu, 13 Oct 2022 04:04:00 +0000 https://supabase.com/blog/supabase-beta-update-september-2022 Supabase Beta September 2022 https://supabase.com/blog/supabase-beta-update-september-2022 We were too focused on clearing out the backlog so we didn't ship anything new last month... or did we?! - Tue, 04 Oct 2022 16:04:00 +0000 + Tue, 04 Oct 2022 04:04:00 +0000 https://supabase.com/blog/postgres-wasm Postgres WASM by Snaplet and Supabase https://supabase.com/blog/postgres-wasm We're open sourcing postgres-wasm, a PostgresQL server that runs inside a browser, with our friends at Snaplet. - Sun, 02 Oct 2022 16:04:00 +0000 + Sun, 02 Oct 2022 04:04:00 +0000 https://supabase.com/blog/choosing-a-postgres-primary-key Choosing a Postgres Primary Key https://supabase.com/blog/choosing-a-postgres-primary-key Turns out the question of which identifier to use as a Primary Key is complicated -- we're going to dive into some of the complexity and inherent trade-offs, and figure things out - Wed, 07 Sep 2022 16:04:00 +0000 + Wed, 07 Sep 2022 04:04:00 +0000 https://supabase.com/blog/supabase-beta-update-august-2022 Supabase Beta August 2022 https://supabase.com/blog/supabase-beta-update-august-2022 Launch Week Special. See everything we shipped, plus winners of the Hackathon and the extended Community Highlights - Tue, 06 Sep 2022 16:04:00 +0000 + Tue, 06 Sep 2022 04:04:00 +0000 https://supabase.com/blog/launch-week-5-hackathon-winners Launch Week 5 Hackathon Winners https://supabase.com/blog/launch-week-5-hackathon-winners Announcing the winners of the Launch Week 5 Hackathon! - Wed, 24 Aug 2022 16:04:00 +0000 + Wed, 24 Aug 2022 04:04:00 +0000 https://supabase.com/blog/building-a-realtime-trello-board-with-supabase-and-angular Building a Realtime Trello Board with Supabase and Angular https://supabase.com/blog/building-a-realtime-trello-board-with-supabase-and-angular Go beyond the hello world example with this real world project. - Tue, 23 Aug 2022 16:04:00 +0000 + Tue, 23 Aug 2022 04:04:00 +0000 https://supabase.com/blog/supabase-vault Supabase Vault https://supabase.com/blog/supabase-vault Today we're announcing Vault, a Postgres extension for managing secrets and encryption inside your database. - Thu, 18 Aug 2022 16:04:00 +0000 + Thu, 18 Aug 2022 04:04:00 +0000 https://supabase.com/blog/postgrest-v10 PostgREST v10: EXPLAIN and Improved Relationship Detection https://supabase.com/blog/postgrest-v10 Today, PostgREST 10 was released. Let's take a look at some of the new features that go hand in hand with supabase-js v2. - Thu, 18 Aug 2022 16:04:00 +0000 + Thu, 18 Aug 2022 04:04:00 +0000 https://supabase.com/blog/pg-jsonschema-a-postgres-extension-for-json-validation pg_jsonschema: JSON Schema support for Postgres https://supabase.com/blog/pg-jsonschema-a-postgres-extension-for-json-validation Today we're releasing pg_jsonschema, a Postgres extension for JSON validation. - Thu, 18 Aug 2022 16:04:00 +0000 + Thu, 18 Aug 2022 04:04:00 +0000 https://supabase.com/blog/launch-week-5-one-more-thing One more thing https://supabase.com/blog/launch-week-5-one-more-thing Let's be honest, it's never just one more thing. - Thu, 18 Aug 2022 16:04:00 +0000 + Thu, 18 Aug 2022 04:04:00 +0000 https://supabase.com/blog/launch-week-5-community-day Community Day https://supabase.com/blog/launch-week-5-community-day Wrapping up Launch Week 5 with contributors, partners, and friends. - Thu, 18 Aug 2022 16:04:00 +0000 + Thu, 18 Aug 2022 04:04:00 +0000 https://supabase.com/blog/supabase-realtime-multiplayer-general-availability Realtime: Multiplayer Edition https://supabase.com/blog/supabase-realtime-multiplayer-general-availability Announcing the general availability of Realtime's Broadcast and Presence. - Wed, 17 Aug 2022 16:04:00 +0000 + Wed, 17 Aug 2022 04:04:00 +0000 https://supabase.com/blog/supabase-soc2 Supabase is SOC2 compliant https://supabase.com/blog/supabase-soc2 Supabase is now SOC2 compliant. Learn how we got here and what it means for our customers. - Tue, 16 Aug 2022 16:04:00 +0000 + Tue, 16 Aug 2022 04:04:00 +0000 https://supabase.com/blog/supabase-js-v2 supabase-js v2 https://supabase.com/blog/supabase-js-v2 A look at supabase-js v2, which brings type support and focuses on quality-of-life improvements for developers. - Mon, 15 Aug 2022 16:04:00 +0000 + Mon, 15 Aug 2022 04:04:00 +0000 https://supabase.com/blog/supabase-cli-v1-and-admin-api-beta Supabase CLI v1 and Management API Beta https://supabase.com/blog/supabase-cli-v1-and-admin-api-beta We are moving Supabase CLI v1 out of beta, and releasing Management API beta. - Sun, 14 Aug 2022 16:04:00 +0000 + Sun, 14 Aug 2022 04:04:00 +0000 https://supabase.com/blog/supabase-series-b Supabase Series B https://supabase.com/blog/supabase-series-b Supabase raised $80M in May, bringing our total funding to $116M. - Thu, 11 Aug 2022 16:04:00 +0000 + Thu, 11 Aug 2022 04:04:00 +0000 https://supabase.com/blog/launch-week-5-hackathon Launch Week 5 Hackathon https://supabase.com/blog/launch-week-5-hackathon Build to win $1500 - Friday 12th to Monday 21st August 2022 - Tue, 09 Aug 2022 16:04:00 +0000 + Tue, 09 Aug 2022 04:04:00 +0000 https://supabase.com/blog/slack-consolidate-slackbot-to-consolidate-messages Slack Consolidate: a slackbot built with Python and Supabase https://supabase.com/blog/slack-consolidate-slackbot-to-consolidate-messages A slackbot to consolidate messages from different channels using Supabase, Slack SDK and Python - Mon, 08 Aug 2022 16:04:00 +0000 + Mon, 08 Aug 2022 04:04:00 +0000 https://supabase.com/blog/supabase-beta-update-july-2022 Supabase Beta July 2022 https://supabase.com/blog/supabase-beta-update-july-2022 Launch Week Golden Tickets, Flutter SDK 1.0 Developer Preview and more... - Tue, 02 Aug 2022 16:04:00 +0000 + Tue, 02 Aug 2022 04:04:00 +0000 https://supabase.com/blog/supabase-flutter-sdk-1-developer-preview Supabase Flutter SDK 1.0 Developer Preview https://supabase.com/blog/supabase-flutter-sdk-1-developer-preview Supabase Flutter SDK is getting a major update and we need your help making it better. - Mon, 01 Aug 2022 16:04:00 +0000 + Mon, 01 Aug 2022 04:04:00 +0000 https://supabase.com/blog/seen-by-in-postgresql Implementing "seen by" functionality with Postgres https://supabase.com/blog/seen-by-in-postgresql Different approaches for tracking visitor counts with PostgreSQL. - Sun, 17 Jul 2022 16:04:00 +0000 + Sun, 17 Jul 2022 04:04:00 +0000 https://supabase.com/blog/supabase-auth-helpers-with-sveltekit-support Revamped Auth Helpers for Supabase (with SvelteKit support) https://supabase.com/blog/supabase-auth-helpers-with-sveltekit-support Supabase Auth Helpers now have improved developer experience, Sveltekit support, and more. - Tue, 12 Jul 2022 16:04:00 +0000 + Tue, 12 Jul 2022 04:04:00 +0000 https://supabase.com/blog/beta-update-june-2022 Supabase Beta June 2022 https://supabase.com/blog/beta-update-june-2022 Auth Helpers, Unlimited Free Projects, CLI and more... - Tue, 05 Jul 2022 16:04:00 +0000 + Tue, 05 Jul 2022 04:04:00 +0000 https://supabase.com/blog/flutter-tutorial-building-a-chat-app Flutter Tutorial: building a Flutter chat app https://supabase.com/blog/flutter-tutorial-building-a-chat-app Learn how to build a Flutter chat app with open source and scalable backend (inc. auth, realtime, database, and more). - Wed, 29 Jun 2022 16:04:00 +0000 + Wed, 29 Jun 2022 04:04:00 +0000 https://supabase.com/blog/visualizing-supabase-data-using-metabase Visualizing Supabase Data using Metabase https://supabase.com/blog/visualizing-supabase-data-using-metabase How to create different kinds of charts out of data stored in Supabase using Metabase. - Tue, 28 Jun 2022 16:04:00 +0000 + Tue, 28 Jun 2022 04:04:00 +0000 https://supabase.com/blog/partial-postgresql-data-dumps-with-rls Partial data dumps using Postgres Row Level Security https://supabase.com/blog/partial-postgresql-data-dumps-with-rls Using RLS to create seed files for local PostgreSQL testing. - Mon, 27 Jun 2022 16:04:00 +0000 + Mon, 27 Jun 2022 04:04:00 +0000 https://supabase.com/blog/loading-data-supabase-python Python data loading with Supabase https://supabase.com/blog/loading-data-supabase-python An example of how to load data into Supabase using supabase-py - Thu, 16 Jun 2022 16:04:00 +0000 + Thu, 16 Jun 2022 04:04:00 +0000 https://supabase.com/blog/beta-update-may-2022 Supabase Beta May 2022 https://supabase.com/blog/beta-update-may-2022 Product and community updates including wildcard auth redirects, edge functions with webhooks, and Prometheus endpoints for everybody. - Tue, 31 May 2022 16:04:00 +0000 + Tue, 31 May 2022 04:04:00 +0000 https://supabase.com/blog/how-supabase-accelerates-development-of-all-pull-together How Mike Lyndon is using Supabase to accelerate development of AllPullTogether https://supabase.com/blog/how-supabase-accelerates-development-of-all-pull-together Mike Lyndon is learning web development as he builds AllPullTogether, and Supabase is helping him accelerate what he can accomplish. - Wed, 25 May 2022 16:04:00 +0000 + Wed, 25 May 2022 04:04:00 +0000 https://supabase.com/blog/partner-gallery-works-with-supabase Works With Supabase - announcing our Partner Gallery https://supabase.com/blog/partner-gallery-works-with-supabase Introducing our Partner Gallery - open source and made with Supabase. - Tue, 19 Apr 2022 16:04:00 +0000 + Tue, 19 Apr 2022 04:04:00 +0000 https://supabase.com/blog/bring-the-func-hackathon-winners Bring the Func Hackathon Winners 2022 https://supabase.com/blog/bring-the-func-hackathon-winners Celebrating many amazing OSS Hackathon projects using GraphQL and Edge Functions. - Sun, 17 Apr 2022 16:04:00 +0000 + Sun, 17 Apr 2022 04:04:00 +0000 https://supabase.com/blog/beta-update-march-2022 Supabase Beta March 2022 https://supabase.com/blog/beta-update-march-2022 Functions, GraphQL, and much more. - Thu, 14 Apr 2022 16:04:00 +0000 + Thu, 14 Apr 2022 04:04:00 +0000 https://supabase.com/blog/supabrew Supabrew - Never Code Thirsty https://supabase.com/blog/supabrew A light and refreshing non-alcoholic beer for devs. - Thu, 31 Mar 2022 16:04:00 +0000 + Fri, 01 Apr 2022 04:04:00 +0000 https://supabase.com/blog/supabase-realtime-with-multiplayer-features Supabase Realtime, with Multiplayer Features https://supabase.com/blog/supabase-realtime-with-multiplayer-features Today we're announced Realtime, with multiplayer features. Realtime enables broadcast, presence, and listening to database changes delivered over WebSockets. - Thu, 31 Mar 2022 16:04:00 +0000 + Fri, 01 Apr 2022 04:04:00 +0000 https://supabase.com/blog/hackathon-bring-the-func Hackathon: Bring the Func(🕺) https://supabase.com/blog/hackathon-bring-the-func Build open-source projects with our latest features, win limited edition swag and plant a tree! - Thu, 31 Mar 2022 16:04:00 +0000 + Fri, 01 Apr 2022 04:04:00 +0000 https://supabase.com/blog/supabase-edge-functions Edge Functions are now available in Supabase https://supabase.com/blog/supabase-edge-functions Today we're launching Edge Functions. Edge Functions let you execute Typescript code close to your users, no matter where they're located. - Wed, 30 Mar 2022 16:04:00 +0000 + Wed, 30 Mar 2022 04:04:00 +0000 https://supabase.com/blog/supabase-enterprise Introducing Supabase Enterprise https://supabase.com/blog/supabase-enterprise Today we are releasing Supabase Enterprise, a suite of features to scale your project. - Tue, 29 Mar 2022 16:04:00 +0000 + Tue, 29 Mar 2022 04:04:00 +0000 https://supabase.com/blog/graphql-now-available GraphQL is now available in Supabase https://supabase.com/blog/graphql-now-available GraphQL support is now in general availability on the Supabase platform via our open source PostgreSQL extension, pg_graphql (beta). - Mon, 28 Mar 2022 16:04:00 +0000 + Mon, 28 Mar 2022 04:04:00 +0000 https://supabase.com/blog/community-day-lw4 Community Day https://supabase.com/blog/community-day-lw4 Kicking off Launch Week 4 with contributors, partners, and friends. - Sun, 27 Mar 2022 16:04:00 +0000 + Sun, 27 Mar 2022 04:04:00 +0000 https://supabase.com/blog/supabase-launch-week-four Supabase Launch Week 4 https://supabase.com/blog/supabase-launch-week-four Launch Week 4: One new feature every day for an entire week. Starting Monday 28th March. - Thu, 24 Mar 2022 16:04:00 +0000 + Thu, 24 Mar 2022 04:04:00 +0000 https://supabase.com/blog/should-i-open-source-my-company Should I Open Source my Company? https://supabase.com/blog/should-i-open-source-my-company The unexpected upsides of building in public - Thu, 24 Mar 2022 16:04:00 +0000 + Thu, 24 Mar 2022 04:04:00 +0000 https://supabase.com/blog/audit Postgres Auditing in 150 lines of SQL https://supabase.com/blog/audit PostgreSQL has a robust set of features which we can leverage to create a generic auditing solution in 150 lines of SQL. - Mon, 07 Mar 2022 16:04:00 +0000 + Mon, 07 Mar 2022 05:05:00 +0000 https://supabase.com/blog/supabase-beta-january-2022 Supabase Beta January 2022 https://supabase.com/blog/supabase-beta-january-2022 New auth providers, SMS providers, and new videos. - Mon, 21 Feb 2022 16:04:00 +0000 + Mon, 21 Feb 2022 05:05:00 +0000 https://supabase.com/blog/supabase-beta-december-2021 Supabase Beta December 2021 https://supabase.com/blog/supabase-beta-december-2021 New crypto extension, Postgres videos, and a bunch of cool integrations. - Wed, 19 Jan 2022 16:04:00 +0000 + Wed, 19 Jan 2022 05:05:00 +0000 https://supabase.com/blog/product-hunt-golden-kitty-awards-2021 Golden Kitty Awards Ceremony Watch Party with Supabase https://supabase.com/blog/product-hunt-golden-kitty-awards-2021 Hang out with us while watching the Product Hunt Golden Kitty Awards Ceremony - Wed, 19 Jan 2022 16:04:00 +0000 + Wed, 19 Jan 2022 05:05:00 +0000 https://supabase.com/blog/holiday-hackdays-winners-2021 Holiday Hackdays Winners 2021 https://supabase.com/blog/holiday-hackdays-winners-2021 Celebrating many amazing projects submitted to our Holiday Hackdays Hackathon. - Thu, 16 Dec 2021 16:04:00 +0000 + Thu, 16 Dec 2021 05:05:00 +0000 https://supabase.com/blog/beta-november-2021-launch-week-recap Supabase Beta November 2021: Launch Week Recap https://supabase.com/blog/beta-november-2021-launch-week-recap We wrapped up November with Supabase's third Launch Week. Here's all the awesome stuff that got shipped ... - Tue, 14 Dec 2021 16:04:00 +0000 + Tue, 14 Dec 2021 05:05:00 +0000 https://supabase.com/blog/supabase-holiday-hackdays-hackathon Kicking off the Holiday Hackdays https://supabase.com/blog/supabase-holiday-hackdays-hackathon Build cool stuff and celebrate open-source software with us during the Holiday Hackdays! - Thu, 02 Dec 2021 16:04:00 +0000 + Thu, 02 Dec 2021 05:05:00 +0000 https://supabase.com/blog/pg-graphql pg_graphql: A GraphQL extension for PostgreSQL https://supabase.com/blog/pg-graphql GraphQL support is in development for PostgreSQL + Supabase. - Thu, 02 Dec 2021 16:04:00 +0000 + Thu, 02 Dec 2021 05:05:00 +0000 https://supabase.com/blog/launch-week-three-friday-five-more-things Five more things https://supabase.com/blog/launch-week-three-friday-five-more-things It's never just one more thing! - Thu, 02 Dec 2021 16:04:00 +0000 + Thu, 02 Dec 2021 05:05:00 +0000 https://supabase.com/blog/supabase-acquires-logflare Supabase acquires Logflare https://supabase.com/blog/supabase-acquires-logflare Today, we're ecstatic to announce that Logflare is joining Supabase. - Wed, 01 Dec 2021 16:04:00 +0000 + Wed, 01 Dec 2021 05:05:00 +0000 https://supabase.com/blog/realtime-row-level-security-in-postgresql Realtime Postgres RLS now available on Supabase https://supabase.com/blog/realtime-row-level-security-in-postgresql Realtime database changes are now broadcast to authenticated users, respecting the same PostgreSQL policies that you use for Row Level Security. - Tue, 30 Nov 2021 16:04:00 +0000 + Tue, 30 Nov 2021 05:05:00 +0000 https://supabase.com/blog/supabase-studio Supabase Studio https://supabase.com/blog/supabase-studio The same Dashboard that you're using on our Platform is now available for local development and Self-Hosting. - Mon, 29 Nov 2021 16:04:00 +0000 + Mon, 29 Nov 2021 05:05:00 +0000 https://supabase.com/blog/community-day-lw3 Community Day https://supabase.com/blog/community-day-lw3 Kicking off launch week by highlighting the communities around Supabase. - Sun, 28 Nov 2021 16:04:00 +0000 + Sun, 28 Nov 2021 05:05:00 +0000 https://supabase.com/blog/whats-new-in-postgres-14 New in PostgreSQL 14: What every developer should know https://supabase.com/blog/whats-new-in-postgres-14 A quick look at some new features and functionality in PostgreSQL 14. - Sat, 27 Nov 2021 16:04:00 +0000 + Sat, 27 Nov 2021 05:05:00 +0000 https://supabase.com/blog/postgrest-9 PostgREST 9 https://supabase.com/blog/postgrest-9 New features and updates in PostgREST version 9. - Fri, 26 Nov 2021 16:04:00 +0000 + Fri, 26 Nov 2021 05:05:00 +0000 https://supabase.com/blog/supabase-launch-week-the-trilogy Supabase Launch Week III: Holiday Special https://supabase.com/blog/supabase-launch-week-the-trilogy Tis the season to be shipping. - Thu, 25 Nov 2021 16:04:00 +0000 + Thu, 25 Nov 2021 05:05:00 +0000 https://supabase.com/blog/supabase-how-we-launch How we launch at Supabase https://supabase.com/blog/supabase-how-we-launch The history and methodology of Supabase Launch Week. - Thu, 25 Nov 2021 16:04:00 +0000 + Thu, 25 Nov 2021 05:05:00 +0000 https://supabase.com/blog/supabase-beta-october-2021 Supabase Beta October 2021 https://supabase.com/blog/supabase-beta-october-2021 Three new Auth providers, multi-schema support, and we're gearing up for another Launch Week. - Sat, 06 Nov 2021 16:04:00 +0000 + Sat, 06 Nov 2021 04:04:00 +0000 https://supabase.com/blog/supabase-series-a Supabase $30m Series A https://supabase.com/blog/supabase-series-a Supabase just raised $30M, bringing our total funding to $36M. - Wed, 27 Oct 2021 16:04:00 +0000 + Wed, 27 Oct 2021 04:04:00 +0000 https://supabase.com/blog/replenysh-time-to-value-in-less-than-24-hours Replenysh uses Supabase to implement OTP in less than 24-hours https://supabase.com/blog/replenysh-time-to-value-in-less-than-24-hours Learn how Replenysh uses Supabase to power the circular economy, redefining how brands interact with their customers and products. - Mon, 18 Oct 2021 16:04:00 +0000 + Mon, 18 Oct 2021 04:04:00 +0000 https://supabase.com/blog/hacktoberfest-hackathon-winners-2021 Hacktoberfest Hackathon Winners 2021 https://supabase.com/blog/hacktoberfest-hackathon-winners-2021 Celebrating many amazing projects submitted to our Hacktoberfest Hackathon. - Wed, 13 Oct 2021 16:04:00 +0000 + Wed, 13 Oct 2021 04:04:00 +0000 https://supabase.com/blog/supabase-beta-sept-2021 Supabase Beta Sept 2021 https://supabase.com/blog/supabase-beta-sept-2021 Hackathon, Aborting request, UI updates, and now Hiring. - Sun, 03 Oct 2021 16:04:00 +0000 + Sun, 03 Oct 2021 04:04:00 +0000 https://supabase.com/blog/supabase-hacktoberfest-hackathon-2021 Supabase Hacktoberfest Hackathon 2021 https://supabase.com/blog/supabase-hacktoberfest-hackathon-2021 We're running another Supabase Hackathon during Hacktoberfest! - Mon, 27 Sep 2021 16:04:00 +0000 + Mon, 27 Sep 2021 04:04:00 +0000 https://supabase.com/blog/supabase-beta-august-2021 Supabase Beta August 2021 https://supabase.com/blog/supabase-beta-august-2021 Fundraising, Realtime Security, custom SMS templates, and deployments in South Korea. - Thu, 09 Sep 2021 16:04:00 +0000 + Thu, 09 Sep 2021 04:04:00 +0000 https://supabase.com/blog/supabase-beta-july-2021 Supabase Beta July 2021 https://supabase.com/blog/supabase-beta-july-2021 Discord Logins, Vercel Integration, Full text search, and OAuth guides. - Wed, 11 Aug 2021 16:04:00 +0000 + Wed, 11 Aug 2021 04:04:00 +0000 https://supabase.com/blog/hackathon-winners Open Source Hackathon Winners https://supabase.com/blog/hackathon-winners Let the medal ceremony begin for the best projects submitted during the Supabase Hackathon. - Sun, 08 Aug 2021 16:04:00 +0000 + Sun, 08 Aug 2021 04:04:00 +0000 https://supabase.com/blog/supabase-swag-store Supabase Swag Store https://supabase.com/blog/supabase-swag-store Today we are officially launching the Supabase Swag Store. - Thu, 29 Jul 2021 16:04:00 +0000 + Thu, 29 Jul 2021 04:04:00 +0000 https://supabase.com/blog/supabase-functions-updates Updates for Supabase Functions https://supabase.com/blog/supabase-functions-updates The question on everyone's mind - are we launching Supabase Functions? Well, it's complicated. - Thu, 29 Jul 2021 16:04:00 +0000 + Thu, 29 Jul 2021 04:04:00 +0000 https://supabase.com/blog/1-the-supabase-hackathon The Supabase Hackathon https://supabase.com/blog/1-the-supabase-hackathon A whole week of Hacking for Fun and Prizes. - Thu, 29 Jul 2021 16:04:00 +0000 + Thu, 29 Jul 2021 04:04:00 +0000 https://supabase.com/blog/supabase-reports-and-metrics Supabase Reports and Metrics https://supabase.com/blog/supabase-reports-and-metrics We're exposing a full set of metrics in your projects, so that you can build better (and faster) products for your users. - Wed, 28 Jul 2021 16:04:00 +0000 + Wed, 28 Jul 2021 04:04:00 +0000 https://supabase.com/blog/supabase-auth-passwordless-sms-login Supabase Auth v2: Phone Auth now available https://supabase.com/blog/supabase-auth-passwordless-sms-login Phone Auth is available today on all new and existing Supabase projects. - Tue, 27 Jul 2021 16:04:00 +0000 + Tue, 27 Jul 2021 04:04:00 +0000 https://supabase.com/blog/mobbin-supabase-200000-users Mobbin uses Supabase to authenticate 200,000 users https://supabase.com/blog/mobbin-supabase-200000-users Learn how Mobbin migrated 200,000 users from Firebase for a better authentication experience. - Tue, 27 Jul 2021 16:04:00 +0000 + Tue, 27 Jul 2021 04:04:00 +0000 https://supabase.com/blog/storage-beta Supabase Storage now in Beta https://supabase.com/blog/storage-beta Supabase Storage moves into Beta. - Mon, 26 Jul 2021 16:04:00 +0000 + Mon, 26 Jul 2021 04:04:00 +0000 https://supabase.com/blog/spot-flutter-with-postgres Spot: a video sharing app built with Flutter https://supabase.com/blog/spot-flutter-with-postgres Spot is a geolocation-based video-sharing app with some social networking features. - Mon, 26 Jul 2021 16:04:00 +0000 + Mon, 26 Jul 2021 04:04:00 +0000 https://supabase.com/blog/supabase-postgres-13 Supabase is now on Postgres 13.3 https://supabase.com/blog/supabase-postgres-13 From today, new Supabase projects will be on a version of Supabase Postgres that runs on Postgres 13.3. - Sun, 25 Jul 2021 16:04:00 +0000 + Sun, 25 Jul 2021 04:04:00 +0000 https://supabase.com/blog/supabase-community-day Supabase Community Day https://supabase.com/blog/supabase-community-day Community Day - Sun, 25 Jul 2021 16:04:00 +0000 + Sun, 25 Jul 2021 04:04:00 +0000 https://supabase.com/blog/epsilon3-self-hosting Epsilon3 Self-Host Supabase To Revolutionize Space Operations https://supabase.com/blog/epsilon3-self-hosting Learn how the team at Epsilon3 use Supabase to help teams execute secure and reliable operations in an industry that project spend runs into the billions. - Sun, 25 Jul 2021 16:04:00 +0000 + Sun, 25 Jul 2021 04:04:00 +0000 https://supabase.com/blog/supabase-launch-week-sql Supabase Launch Week II: The SQL https://supabase.com/blog/supabase-launch-week-sql Five days of Supabase. Again. - Wed, 21 Jul 2021 16:04:00 +0000 + Wed, 21 Jul 2021 04:04:00 +0000 https://supabase.com/blog/roles-postgres-hooks Protecting reserved roles with PostgreSQL Hooks https://supabase.com/blog/roles-postgres-hooks Using Postgres Hooks to protect functionality in your Postgres database. - Thu, 01 Jul 2021 16:04:00 +0000 + Thu, 01 Jul 2021 04:04:00 +0000 https://supabase.com/blog/supabase-beta-june-2021 Supabase Beta June 2021 https://supabase.com/blog/supabase-beta-june-2021 Discord Logins, Vercel Integration, Full text search, and OAuth guides. - Tue, 01 Jun 2021 16:04:00 +0000 + Tue, 01 Jun 2021 04:04:00 +0000 https://supabase.com/blog/supabase-beta-may-2021 Supabase Beta May 2021 https://supabase.com/blog/supabase-beta-may-2021 Apple & Twitter Logins, Supabase Grid, Go & Swift Libraries. - Tue, 01 Jun 2021 16:04:00 +0000 + Tue, 01 Jun 2021 04:04:00 +0000 https://supabase.com/blog/supabase-beta-april-2021 Supabase Beta April 2021 https://supabase.com/blog/supabase-beta-april-2021 Supabase "gardening" - stability, security, and community support. - Tue, 04 May 2021 16:04:00 +0000 + Tue, 04 May 2021 04:04:00 +0000 https://supabase.com/blog/supabase-beta-march-2021 Supabase Beta March 2021 https://supabase.com/blog/supabase-beta-march-2021 Launch week, Storage, Supabase CLI, Connection Pooling, Supabase UI, and Pricing. - Mon, 05 Apr 2021 16:04:00 +0000 + Mon, 05 Apr 2021 04:04:00 +0000 https://supabase.com/blog/supabase-workflows Workflows are coming to Supabase https://supabase.com/blog/supabase-workflows Functions are great, but you know what's better? - Thu, 01 Apr 2021 16:04:00 +0000 + Thu, 01 Apr 2021 04:04:00 +0000 https://supabase.com/blog/supabase-pgbouncer PgBouncer is now available in Supabase https://supabase.com/blog/supabase-pgbouncer Better support for Serverless and Postgres. - Thu, 01 Apr 2021 16:04:00 +0000 + Thu, 01 Apr 2021 04:04:00 +0000 https://supabase.com/blog/supabase-dot-com Supabase Dot Com https://supabase.com/blog/supabase-dot-com The Supabase Domain name is changing. - Thu, 01 Apr 2021 16:04:00 +0000 + Thu, 01 Apr 2021 04:04:00 +0000 https://supabase.com/blog/supabase-nft-marketplace Supabase Launches NFT Marketplace https://supabase.com/blog/supabase-nft-marketplace A fully encrypted NFT platform to protect and transact your digital assets - Wed, 31 Mar 2021 16:04:00 +0000 + Thu, 01 Apr 2021 04:04:00 +0000 https://supabase.com/blog/supabase-cli Supabase CLI https://supabase.com/blog/supabase-cli Local development, database migrations, and self-hosting. - Tue, 30 Mar 2021 16:04:00 +0000 + Wed, 31 Mar 2021 04:04:00 +0000 https://supabase.com/blog/supabase-storage Storage is now available in Supabase https://supabase.com/blog/supabase-storage Launching Supabase Storage and how you can use it in your apps - Mon, 29 Mar 2021 16:04:00 +0000 + Tue, 30 Mar 2021 04:04:00 +0000 https://supabase.com/blog/pricing Supabase Beta Pricing https://supabase.com/blog/pricing Supabase launches Beta pricing structure - Sun, 28 Mar 2021 16:04:00 +0000 + Mon, 29 Mar 2021 04:04:00 +0000 https://supabase.com/blog/launch-week Launch week https://supabase.com/blog/launch-week Five days of Supabase. - Wed, 24 Mar 2021 16:04:00 +0000 + Wed, 24 Mar 2021 04:04:00 +0000 https://supabase.com/blog/angels-of-supabase Angels of Supabase https://supabase.com/blog/angels-of-supabase Meet the investors of Supabase. - Wed, 24 Mar 2021 16:04:00 +0000 + Wed, 24 Mar 2021 04:04:00 +0000 https://supabase.com/blog/In-The-Loop Developers stay up to date with intheloop.dev https://supabase.com/blog/In-The-Loop Learn why Kevin is building intheloop.dev with Supabase - Sun, 21 Mar 2021 16:04:00 +0000 + Mon, 22 Mar 2021 04:04:00 +0000 https://supabase.com/blog/using-supabase-replit Using Supabase in Replit https://supabase.com/blog/using-supabase-replit Free hosted relational database from within your node.js repl - Wed, 10 Mar 2021 16:04:00 +0000 + Thu, 11 Mar 2021 05:05:00 +0000 https://supabase.com/blog/toad-a-link-shortener-with-simple-apis-for-low-coders Toad, a link shortener with simple APIs for low-coders https://supabase.com/blog/toad-a-link-shortener-with-simple-apis-for-low-coders An easy-to-use link shortening tool with simple APIs - Sun, 07 Mar 2021 16:04:00 +0000 + Mon, 08 Mar 2021 05:05:00 +0000 https://supabase.com/blog/postgres-as-a-cron-server Postgres as a CRON Server https://supabase.com/blog/postgres-as-a-cron-server Running repetitive tasks with your Postgres database. - Thu, 04 Mar 2021 16:04:00 +0000 + Fri, 05 Mar 2021 05:05:00 +0000 https://supabase.com/blog/supabase-beta-february-2021 Supabase Beta February 2021 https://supabase.com/blog/supabase-beta-february-2021 One year of building. - Mon, 01 Mar 2021 16:04:00 +0000 + Tue, 02 Mar 2021 05:05:00 +0000 https://supabase.com/blog/cracking-postgres-interview Cracking PostgreSQL Interview Questions https://supabase.com/blog/cracking-postgres-interview Understand the top PostgreSQL Interview Questions - Fri, 26 Feb 2021 16:04:00 +0000 + Sat, 27 Feb 2021 05:05:00 +0000 https://supabase.com/blog/case-study-roboflow Roboflow.com choose Supabase to power Paint.wtf leaderboard https://supabase.com/blog/case-study-roboflow Learn how Roboflow.com used Supabase to build their Paint.wtf leaderboard - Mon, 08 Feb 2021 16:04:00 +0000 + Tue, 09 Feb 2021 05:05:00 +0000 https://supabase.com/blog/supabase-beta-january-2021 Supabase Beta January 2021 https://supabase.com/blog/supabase-beta-january-2021 Eleven months of building. - Mon, 01 Feb 2021 16:04:00 +0000 + Tue, 02 Feb 2021 05:05:00 +0000 https://supabase.com/blog/supabase-beta-december-2020 Supabase Beta December 2020 https://supabase.com/blog/supabase-beta-december-2020 Ten months of building. - Fri, 01 Jan 2021 16:04:00 +0000 + Sat, 02 Jan 2021 05:05:00 +0000 https://supabase.com/blog/supabase-dashboard-performance Making the Supabase Dashboard Supa-fast https://supabase.com/blog/supabase-dashboard-performance Improving the performance of the Supabase dashboard - Sat, 12 Dec 2020 16:04:00 +0000 + Sun, 13 Dec 2020 05:05:00 +0000 https://supabase.com/blog/supabase-striveschool Supabase Partners With Strive School To Help Teach Open Source https://supabase.com/blog/supabase-striveschool Supabase Partners With Strive School To Help Teach Open Source To The Next Generation Of Developers - Tue, 01 Dec 2020 16:04:00 +0000 + Wed, 02 Dec 2020 05:05:00 +0000 https://supabase.com/blog/case-study-xendit Xendit Built a Counter-Fraud Watchlist for the Fintech Industry https://supabase.com/blog/case-study-xendit See how Xendit use Supabase to build a full-text search engine. - Tue, 01 Dec 2020 16:04:00 +0000 + Wed, 02 Dec 2020 05:05:00 +0000 https://supabase.com/blog/case-study-tayfa TAYFA Built a No-Code Website Builder in Seven Days https://supabase.com/blog/case-study-tayfa See how Tayfa went from idea to paying customer in less than 30 days. - Tue, 01 Dec 2020 16:04:00 +0000 + Wed, 02 Dec 2020 05:05:00 +0000 https://supabase.com/blog/case-study-monitoro Monitoro Built a Web Crawler Handling Millions of API Requests https://supabase.com/blog/case-study-monitoro See how Monitoro built an automated scraping platform using Supabase. - Tue, 01 Dec 2020 16:04:00 +0000 + Wed, 02 Dec 2020 05:05:00 +0000 https://supabase.com/blog/supabase-alpha-november-2020 Supabase Alpha November 2020 https://supabase.com/blog/supabase-alpha-november-2020 Nine months of building. - Mon, 30 Nov 2020 16:04:00 +0000 + Tue, 01 Dec 2020 05:05:00 +0000 https://supabase.com/blog/postgresql-views Postgres Views https://supabase.com/blog/postgresql-views Creating and using a view in PostgreSQL. - Tue, 17 Nov 2020 16:04:00 +0000 + Wed, 18 Nov 2020 05:05:00 +0000 https://supabase.com/blog/supabase-alpha-october-2020 Supabase Alpha October 2020 https://supabase.com/blog/supabase-alpha-october-2020 Eight months of building. - Sun, 01 Nov 2020 16:04:00 +0000 + Mon, 02 Nov 2020 05:05:00 +0000 https://supabase.com/blog/improved-dx Supabase.js 1.0 https://supabase.com/blog/improved-dx We're releasing a new version of our Supabase client with some awesome new improvements. - Thu, 29 Oct 2020 16:04:00 +0000 + Fri, 30 Oct 2020 04:04:00 +0000 https://supabase.com/blog/supabase-alpha-september-2020 Supabase Alpha September 2020 https://supabase.com/blog/supabase-alpha-september-2020 Seven months of building. - Fri, 02 Oct 2020 16:04:00 +0000 + Sat, 03 Oct 2020 04:04:00 +0000 https://supabase.com/blog/supabase-hacktoberfest-2020 Supabase Hacktoberfest 2020 https://supabase.com/blog/supabase-hacktoberfest-2020 Join us for a celebration of open source software and learn how to contribute to Supabase. - Thu, 10 Sep 2020 16:04:00 +0000 + Fri, 11 Sep 2020 04:04:00 +0000 https://supabase.com/blog/supabase-alpha-august-2020 Supabase Alpha August 2020 https://supabase.com/blog/supabase-alpha-august-2020 Six months of building - Wed, 02 Sep 2020 16:04:00 +0000 + Thu, 03 Sep 2020 04:04:00 +0000 https://supabase.com/blog/supabase-auth Supabase Auth https://supabase.com/blog/supabase-auth Authenticate and authorize your users with Supabase Auth - Tue, 04 Aug 2020 16:04:00 +0000 + Wed, 05 Aug 2020 04:04:00 +0000 https://supabase.com/blog/supabase-alpha-july-2020 Supabase Alpha July 2020 https://supabase.com/blog/supabase-alpha-july-2020 Five months of building - Sat, 01 Aug 2020 16:04:00 +0000 + Sun, 02 Aug 2020 04:04:00 +0000 https://supabase.com/blog/continuous-postgresql-backup-walg Continuous PostgreSQL Backups using WAL-G https://supabase.com/blog/continuous-postgresql-backup-walg Have you ever wanted to restore your database's state to a particular moment in time? This post explains how, using WAL-G. - Sat, 01 Aug 2020 16:04:00 +0000 + Sun, 02 Aug 2020 04:04:00 +0000 https://supabase.com/blog/alpha-launch-postmortem Alpha Launch Postmortem https://supabase.com/blog/alpha-launch-postmortem Everything that went wrong with Supabase's launch - Thu, 09 Jul 2020 16:04:00 +0000 + Fri, 10 Jul 2020 04:04:00 +0000 https://supabase.com/blog/postgresql-templates What are PostgreSQL Templates? https://supabase.com/blog/postgresql-templates What are PostgreSQL templates and what are they used for? - Wed, 08 Jul 2020 16:04:00 +0000 + Thu, 09 Jul 2020 04:04:00 +0000 https://supabase.com/blog/postgresql-physical-logical-backups Physical vs Logical Backups in PostgreSQL https://supabase.com/blog/postgresql-physical-logical-backups What are physical and logical backups in Postgres? - Mon, 06 Jul 2020 16:04:00 +0000 + Tue, 07 Jul 2020 04:04:00 +0000 https://supabase.com/blog/supabase-alpha-june-2020 Supabase Alpha June 2020 https://supabase.com/blog/supabase-alpha-june-2020 Four months of building - Tue, 30 Jun 2020 16:04:00 +0000 + Wed, 01 Jul 2020 04:04:00 +0000 https://supabase.com/blog/supabase-steve-chavez Steve Chavez has joined Supabase https://supabase.com/blog/supabase-steve-chavez Steve joins Supabase to help build Auth. - Sun, 14 Jun 2020 16:04:00 +0000 + Mon, 15 Jun 2020 04:04:00 +0000 https://supabase.com/blog/supabase-alpha-may-2020 Supabase Alpha May 2020 https://supabase.com/blog/supabase-alpha-may-2020 Three months of building - Sun, 31 May 2020 16:04:00 +0000 + Mon, 01 Jun 2020 04:04:00 +0000 https://supabase.com/blog/supabase-alpha-april-2020 Supabase Alpha April 2020 https://supabase.com/blog/supabase-alpha-april-2020 Two months of building - Sun, 31 May 2020 16:04:00 +0000 + Mon, 01 Jun 2020 04:04:00 +0000 From 90245cd58a09e0a8c494e63fec46c1ec0a7f45c2 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 16 Dec 2022 16:57:47 +0800 Subject: [PATCH 09/45] add initialzing to list of common functions --- apps/docs/components/index.tsx | 5 + .../docs/ref/javascript/v1/initializing.mdx | 136 ------------------ .../initializinggg.mdx} | 8 +- apps/docs/lib/refGenerator/helpers.ts | 1 + spec/common-client-libs-sections.json | 13 +- 5 files changed, 13 insertions(+), 150 deletions(-) delete mode 100644 apps/docs/docs/ref/javascript/v1/initializing.mdx rename apps/docs/docs/ref/javascript/{initializing.mdx => v1/initializinggg.mdx} (94%) diff --git a/apps/docs/components/index.tsx b/apps/docs/components/index.tsx index 4351050cbf0..c5a5aa3752a 100644 --- a/apps/docs/components/index.tsx +++ b/apps/docs/components/index.tsx @@ -27,6 +27,9 @@ import RefHeaderSection from './reference/RefHeaderSection' // Ref version specific import CliGlobalFlagsHandler from '~/components/reference/enrichments/cli/CliGlobalFlagsHandler' +import Options from '~/components/Options' +import Param from '~/components/Params' + const components = { Admonition, Button, @@ -68,6 +71,8 @@ const components = { code: (props: any) => , RefHeaderSection: (props: any) => , CliGlobalFlagsHandler: () => , + Options, + Param, } export default components diff --git a/apps/docs/docs/ref/javascript/v1/initializing.mdx b/apps/docs/docs/ref/javascript/v1/initializing.mdx deleted file mode 100644 index 7ea5f5cf164..00000000000 --- a/apps/docs/docs/ref/javascript/v1/initializing.mdx +++ /dev/null @@ -1,136 +0,0 @@ ---- -id: initializing -title: 'Initializing' -slug: initializing -custom_edit_url: https://github.com/supabase/supabase/edit/master/spec/supabase_js_v1.yml ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - -You can initialize a new Supabase client using the `createClient()` method. - -The Supabase client is your entrypoint to the rest of the Supabase functionality -and is the easiest way to interact with everything we offer within the Supabase ecosystem. - -## Parameters - -
    - -
  • -

    - - supabaseUrl - - - required - - - string - -

    -
    - -The unique Supabase URL which is supplied when you create a new project in your project dashboard. - -
    - -
  • - -
  • -

    - - supabaseKey - - - required - - - string - -

    -
    - -The unique Supabase Key which is supplied when you create a new project in your project dashboard. - -
    - -
  • - -
  • -

    - - options - - - optional - - - SupabaseClientOptions - -

    -
    - -No description provided. - -
    - -
  • - -
- -## Examples - -### createClient() - -```js -import { createClient } from '@supabase/supabase-js' - -// Create a single supabase client for interacting with your database -const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') -``` - -### With additional parameters - -```js -import { createClient } from '@supabase/supabase-js' - -const options = { - schema: 'public', - headers: { 'x-my-custom-header': 'my-app-name' }, - autoRefreshToken: true, - persistSession: true, - detectSessionInUrl: true, -} -const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', options) -``` - -### API schemas - -```js -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', -}) -``` - -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. You also need to grant `USAGE` on your new schema with the grants you desire, such as `SELECT, INSERT, UPDATE, DELETE`. - -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. - -### Custom `fetch` implementation - -```js -import { createClient } from '@supabase/supabase-js' - -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. -This is most useful in environments where `cross-fetch` is not compatible (for instance Cloudflare Workers). diff --git a/apps/docs/docs/ref/javascript/initializing.mdx b/apps/docs/docs/ref/javascript/v1/initializinggg.mdx similarity index 94% rename from apps/docs/docs/ref/javascript/initializing.mdx rename to apps/docs/docs/ref/javascript/v1/initializinggg.mdx index 7ea5f5cf164..a4dc650a969 100644 --- a/apps/docs/docs/ref/javascript/initializing.mdx +++ b/apps/docs/docs/ref/javascript/v1/initializinggg.mdx @@ -1,13 +1,7 @@ --- -id: initializing title: 'Initializing' -slug: initializing -custom_edit_url: https://github.com/supabase/supabase/edit/master/spec/supabase_js_v1.yml --- -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - You can initialize a new Supabase client using the `createClient()` method. The Supabase client is your entrypoint to the rest of the Supabase functionality @@ -117,7 +111,7 @@ const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key ``` 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. You also need to grant `USAGE` on your new schema with the grants you desire, such as `SELECT, INSERT, UPDATE, DELETE`. +Go to `Settings > API > Schema` and add the schema which you want to expose to the API. You also need to grant `USAGE` on your new schema with the grants you desire, such as `SELECT, INSERT, UPDATE, DELETE`. 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. diff --git a/apps/docs/lib/refGenerator/helpers.ts b/apps/docs/lib/refGenerator/helpers.ts index ed8f18f5e4e..ed93760b293 100644 --- a/apps/docs/lib/refGenerator/helpers.ts +++ b/apps/docs/lib/refGenerator/helpers.ts @@ -65,6 +65,7 @@ function recurseThroughParams(paramDefinition: any) { } else if (Object.keys(dereferenced).length === 0) { // skip: {} have no children } else { + console.warn('param', param) throw new Error('unexpected case for dereferenced param type') } } else if (param.type?.type === 'reflection') { diff --git a/spec/common-client-libs-sections.json b/spec/common-client-libs-sections.json index 7aa270c1eaa..03d1559bc35 100644 --- a/spec/common-client-libs-sections.json +++ b/spec/common-client-libs-sections.json @@ -13,13 +13,6 @@ "type": "markdown", "libs": ["js", "js_v1", "dart", "dart_v0"] }, - { - "title": "Initializing", - "id": "initializing", - "slug": "initializing", - "type": "markdown", - "libs": ["dart", "dart_v0"] - }, { "title": "Typescript Support", "id": "typescript-support", @@ -27,6 +20,12 @@ "type": "markdown", "libs": ["js", "js_v1"] }, + { + "title": "Initializing", + "id": "initializing", + "slug": "initializing", + "type": "function" + }, { "title": "Database", "libs": ["js", "js_v1", "dart", "dart_v0"], From f83078858f59dedac4f3202bdce39de0b44e90e4 Mon Sep 17 00:00:00 2001 From: Bobbie Soedirgo Date: Fri, 16 Dec 2022 17:10:10 +0800 Subject: [PATCH 10/45] ignore types created from typeof --- apps/docs/lib/refGenerator/helpers.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/docs/lib/refGenerator/helpers.ts b/apps/docs/lib/refGenerator/helpers.ts index ed93760b293..02df4d128b3 100644 --- a/apps/docs/lib/refGenerator/helpers.ts +++ b/apps/docs/lib/refGenerator/helpers.ts @@ -60,6 +60,8 @@ function recurseThroughParams(paramDefinition: any) { children = dereferenced.children } else if (dereferenced.type?.declaration?.children) { children = dereferenced.type.declaration.children + } else if (dereferenced.type?.type === 'query') { + // skip: ignore types created from `typeof` for now, like `type Fetch = typeof fetch` } else if (dereferenced.type?.type === 'union') { // skip: we don't want to show unions as nested parameters } else if (Object.keys(dereferenced).length === 0) { From 73b0c16057c80dc4ce2805fe56773c1947230fad Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Fri, 16 Dec 2022 10:16:26 -0330 Subject: [PATCH 11/45] Cleanup and add social icons --- .../docs/components/Footer/DarkModeToggle.tsx | 45 --- apps/docs/components/Footer/index.tsx | 133 -------- apps/docs/components/FooterHelpCallout.tsx | 14 +- apps/docs/components/Navigation/Footer.tsx | 31 ++ .../NavigationMenu/TopNavBarRef.tsx | 28 +- .../reference/RefSectionHandler.tsx | 14 +- apps/docs/layouts/Default.tsx | 94 ----- apps/docs/layouts/SiteLayout.tsx | 32 +- apps/docs/layouts/SiteRefLayout.tsx | 321 ------------------ apps/docs/layouts/guides/index.tsx | 2 +- apps/docs/pages/[...slug].tsx | 74 ---- 11 files changed, 60 insertions(+), 728 deletions(-) delete mode 100644 apps/docs/components/Footer/DarkModeToggle.tsx delete mode 100644 apps/docs/components/Footer/index.tsx create mode 100644 apps/docs/components/Navigation/Footer.tsx delete mode 100644 apps/docs/layouts/Default.tsx delete mode 100644 apps/docs/layouts/SiteRefLayout.tsx delete mode 100644 apps/docs/pages/[...slug].tsx diff --git a/apps/docs/components/Footer/DarkModeToggle.tsx b/apps/docs/components/Footer/DarkModeToggle.tsx deleted file mode 100644 index 04f9d225854..00000000000 --- a/apps/docs/components/Footer/DarkModeToggle.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { useTheme } from 'common/Providers' -import { IconSun, IconMoon } from '@supabase/ui' - -function DarkModeToggle() { - const { isDarkMode, toggleTheme } = useTheme() - - const toggleDarkMode = () => { - localStorage.setItem('supabaseDarkMode', (!isDarkMode).toString()) - toggleTheme() - - const key = localStorage.getItem('supabaseDarkMode') - document.documentElement.className = key === 'true' ? 'dark' : '' - } - - return ( -
- - - -
- ) -} - -export default DarkModeToggle diff --git a/apps/docs/components/Footer/index.tsx b/apps/docs/components/Footer/index.tsx deleted file mode 100644 index 01424c906f5..00000000000 --- a/apps/docs/components/Footer/index.tsx +++ /dev/null @@ -1,133 +0,0 @@ -import { Badge } from 'ui' -import Link from 'next/link' -import Image from 'next/image' -import FooterLinks from 'data/footer.json' -import DarkModeToggle from './DarkModeToggle' -import { useTheme } from 'common/Providers' -import * as supabaseLogoWordmarkDark from 'common/assets/images/supabase-logo-wordmark--dark.png' -import * as supabaseLogoWordmarkLight from 'common/assets/images/supabase-logo-wordmark--light.png' - -const Footer = () => { - const { isDarkMode } = useTheme() - - return ( - - ) -} - -export default Footer diff --git a/apps/docs/components/FooterHelpCallout.tsx b/apps/docs/components/FooterHelpCallout.tsx index 82f1a03c683..2eb6421dc4c 100644 --- a/apps/docs/components/FooterHelpCallout.tsx +++ b/apps/docs/components/FooterHelpCallout.tsx @@ -1,11 +1,13 @@ const FooterHelpCallout = () => { return ( -
-
Need some help?
-

- Not to worry, our specialist engineers are here to help. Submit a support ticket through the{' '} - Dashboard. -

+
+
+
Need some help?
+

+ Not to worry, our specialist engineers are here to help. Submit a support ticket through + the Dashboard. +

+
) } diff --git a/apps/docs/components/Navigation/Footer.tsx b/apps/docs/components/Navigation/Footer.tsx new file mode 100644 index 00000000000..1c91cef7360 --- /dev/null +++ b/apps/docs/components/Navigation/Footer.tsx @@ -0,0 +1,31 @@ +import Link from 'next/link' + +const Footer = () => { + return ( +
+
+
+ Supabase 2022 + — + + Contributing + + + Changelog + + + + Author Styleguide + + + Open Source + + + SupaSquad + +
+
+ ) +} + +export default Footer diff --git a/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx b/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx index 6fcae17712d..d5a706d6cb2 100644 --- a/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx @@ -2,19 +2,7 @@ import Image from 'next/image' import Link from 'next/link' import { useRouter } from 'next/router' import { FC, useEffect, useState } from 'react' -import { - Badge, - Button, - Dropdown, - IconCommand, - IconMenu, - IconMessageSquare, - IconMoon, - IconSearch, - IconSun, - Input, - Listbox, -} from 'ui' +import { Button, IconCommand, IconGitHub, IconMoon, IconSearch, IconSun } from 'ui' import { SearchButton } from '~/components/DocSearch' import { REFERENCES } from '~/components/Navigation/Navigation.constants' import { useTheme } from 'common/Providers' @@ -134,7 +122,7 @@ const TopNavBarRef: FC = () => { target="_blank" rel="noreferrer noopener" > - Main site + Supabase.com +
    + +
  • diff --git a/apps/docs/components/reference/RefSectionHandler.tsx b/apps/docs/components/reference/RefSectionHandler.tsx index cca2e834ac9..75476287461 100644 --- a/apps/docs/components/reference/RefSectionHandler.tsx +++ b/apps/docs/components/reference/RefSectionHandler.tsx @@ -5,7 +5,7 @@ import { useEffect } from 'react' import components from '~/components' import RefEducationSection from '~/components/reference/RefEducationSection' import RefFunctionSection from '~/components/reference/RefFunctionSection' -import OldLayout from '~/layouts/Default' + import RefSubLayout from '~/layouts/ref/RefSubLayout' import ApiOperationSection from './ApiOperationSection' import CliCommandSection from './CLICommandSection' @@ -34,18 +34,6 @@ const RefSectionHandler = (props) => { } }) - /* - * handle old ref pages - */ - if (!isNewDocs) { - return ( - // @ts-ignore - - - - ) - } - return ( {props.sections.map((x) => { diff --git a/apps/docs/layouts/Default.tsx b/apps/docs/layouts/Default.tsx deleted file mode 100644 index 515f73b89ac..00000000000 --- a/apps/docs/layouts/Default.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { useEffect, FC } from 'react' -import { NextSeo } from 'next-seo' -import NavBar from '../components/Navigation/NavBar' -import SideBar from '../components/Navigation/SideBar' -import Footer from '../components/Footer' -import TableOfContents from '~/components/TableOfContents' -import { menuItems } from '~/components/Navigation/Navigation.constants' -import { useRouter } from 'next/router' -import { getPageType } from '~/lib/helpers' - -interface Props { - meta: { title: string; description?: string; hide_table_of_contents?: boolean } - children: any - toc?: any - menuItems?: any - currentPage?: string -} - -const Layout: FC = ({ meta, children, toc }) => { - const { asPath } = useRouter() - - useEffect(() => { - const key = localStorage.getItem('supabaseDarkMode') - if (!key) { - // Default to dark mode if no preference config - document.documentElement.className = 'dark' - } else { - document.documentElement.className = key === 'true' ? 'dark' : '' - } - }, []) - - const hasTableOfContents = - toc !== undefined && toc.json.filter((item) => item.lvl !== 1 && item.lvl <= 3).length > 0 - - const pageType = getPageType(asPath) - - console.log('Default, pageType', pageType) - - return ( - <> - - -
    - -
    - -
    -
    -
    - {children} -
    -
    - {hasTableOfContents && !meta?.hide_table_of_contents && ( - - )} -
    -
    -
    -
    - - ) -} - -export default Layout diff --git a/apps/docs/layouts/SiteLayout.tsx b/apps/docs/layouts/SiteLayout.tsx index 9feac530869..ff33da8f987 100644 --- a/apps/docs/layouts/SiteLayout.tsx +++ b/apps/docs/layouts/SiteLayout.tsx @@ -9,8 +9,9 @@ import FooterHelpCallout from '~/components/FooterHelpCallout' import { menuState, useMenuLevelId, useMenuMobileOpen } from '~/hooks/useMenuState' import { useEffect } from 'react' +import Footer from '~/components/Navigation/Footer' -const SiteRefLayout = ({ children }) => { +const SiteLayout = ({ children }) => { const { isDarkMode } = useTheme() useEffect(() => { @@ -270,31 +271,8 @@ const SiteRefLayout = ({ children }) => {
    {children} - -
    - -
    -
    -
    - Supabase 2022 - — - - Contributing - - - Changelog - - - - Author Styleguide - - - Open Source - - - SupaSquad - -
    + +
    { ) } -export default SiteRefLayout +export default SiteLayout diff --git a/apps/docs/layouts/SiteRefLayout.tsx b/apps/docs/layouts/SiteRefLayout.tsx deleted file mode 100644 index 930daa4d684..00000000000 --- a/apps/docs/layouts/SiteRefLayout.tsx +++ /dev/null @@ -1,321 +0,0 @@ -import { useTheme } from 'common/Providers' -import Image from 'next/image' -import Link from 'next/link' -import { useRouter } from 'next/router' -import NavigationMenu from '~/components/Navigation/NavigationMenu/NavigationMenu' -import TopNavBarRef from '~/components/Navigation/NavigationMenu/TopNavBarRef' - -import FooterHelpCallout from '~/components/FooterHelpCallout' - -import { menuState } from '~/hooks/useMenuState' -import { useEffect } from 'react' - -const SiteRefLayout = ({ children }) => { - const { isDarkMode } = useTheme() - - useEffect(() => { - const key = localStorage.getItem('supabaseDarkMode') - if (!key) { - // Default to dark mode if no preference config - document.documentElement.className = 'dark' - } else { - document.documentElement.className = key === 'true' ? 'dark' : '' - } - }, []) - - const menuLevel = 'home' - // useMenuLevelId() - const mobileMenuOpen = false - - const levelsData = { - home: { - icon: '/docs/img/icons/menu/home', - name: 'Home', - }, - gettingstarted: { - icon: '/docs/img/icons/menu/getting-started', - name: 'Getting Started', - }, - database: { - icon: '/docs/img/icons/menu/database', - name: 'Database', - }, - auth: { - icon: '/docs/img/icons/menu/auth', - name: 'Auth', - }, - functions: { - icon: '/docs/img/icons/menu/functions', - name: 'Functions', - }, - realtime: { - icon: '/docs/img/icons/menu/realtime', - name: 'Realtime', - }, - storage: { - icon: '/docs/img/icons/menu/storage', - name: 'Storage', - }, - platform: { - icon: '/docs/img/icons/menu/platform', - name: 'Platform', - }, - resources: { - icon: '/docs/img/icons/menu/resources', - name: 'Resources', - }, - integrations: { - icon: '/docs/img/icons/menu/integrations', - name: 'Integrations', - }, - reference_javascript_v1: { - icon: '/docs/img/icons/menu/reference-javascript', - name: 'Javascript Reference v1.0', - }, - reference_javascript_v2: { - icon: '/docs/img/icons/menu/reference-javascript', - name: 'Javascript Reference v2.0', - }, - reference_dart_v0: { - icon: '/docs/img/icons/menu/reference-dart', - name: 'Dart Reference v0.0', - }, - reference_dart_v1: { - icon: '/docs/img/icons/menu/reference-dart', - name: 'Dart Reference v0.0', - }, - reference_cli: { - icon: '/docs/img/icons/menu/reference-cli', - name: 'CLI Reference', - }, - reference_api: { - icon: '/docs/img/icons/menu/reference-api', - name: 'Management API Reference', - }, - reference_self_hosting_auth: { - icon: '/docs/img/icons/menu/reference-auth', - name: 'Auth Server Reference', - }, - reference_self_hosting_storage: { - icon: '/docs/img/icons/menu/reference-storage', - name: 'Storage Server Reference', - }, - reference_self_hosting_realtime: { - icon: '/docs/img/icons/menu/reference-realtime', - name: 'Realtime Server Reference', - }, - } - - return ( -
    - {/* */} - -
    - -
    -
    - {/* */} -
    - -
    -
    -
    -
    - -
    - -
    - - {mobileMenuOpen - ? 'Close' - : menuLevel - ? levelsData[menuLevel].name - : levelsData['home'].name} - -
    -
    - -
    -
    -
    -
    - {children} - -
    - -
    -
    -
    - Supabase 2022 - — - - Contributing - - - Changelog - - - - Author Styleguide - - - Open Source - - - SupaSquad - -
    -
    - - -
    -
    -
    -
    - ) -} - -export default SiteRefLayout diff --git a/apps/docs/layouts/guides/index.tsx b/apps/docs/layouts/guides/index.tsx index 10ccfed870d..25b26b3fec7 100644 --- a/apps/docs/layouts/guides/index.tsx +++ b/apps/docs/layouts/guides/index.tsx @@ -76,7 +76,7 @@ const Layout: FC = (props) => { }} /> -
    +
    - {Object.entries(meta).length > 0 || !isNewDocs ? ( - - - - ) : ( - - - - )} - - ) -} - -export async function getStaticProps({ params }: { params: { slug: string[] } }) { - let slug - if (params.slug.length > 1) { - slug = `docs/${params.slug.join('/')}` - } else { - slug = `docs/${params.slug[0]}` - } - - let doc = getDocsBySlug(slug) - const content = await serialize(doc.content || '') - - return { - props: { - ...doc, - content, - toc: toc(doc.content, { maxdepth: 1, firsth1: false }), - }, - } -} - -export function getStaticPaths() { - let docs = getAllDocs() - - return { - paths: docs.map(() => { - return { - params: { - slug: docs.map((d) => d.slug), - }, - } - }), - fallback: 'blocking', - } -} From ada65274973f4b2f8508e8a14f13839ee03611d4 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Fri, 16 Dec 2022 10:53:01 -0330 Subject: [PATCH 12/45] Add footer icons --- apps/docs/components/Navigation/Footer.tsx | 59 ++++--- apps/docs/data/footer.json | 152 +----------------- .../public/img/icons/discord-icon-outline.svg | 1 + apps/docs/public/img/icons/discord-icon.svg | 19 ++- 4 files changed, 56 insertions(+), 175 deletions(-) create mode 100644 apps/docs/public/img/icons/discord-icon-outline.svg diff --git a/apps/docs/components/Navigation/Footer.tsx b/apps/docs/components/Navigation/Footer.tsx index 1c91cef7360..808faca43d3 100644 --- a/apps/docs/components/Navigation/Footer.tsx +++ b/apps/docs/components/Navigation/Footer.tsx @@ -1,28 +1,49 @@ +import Image from 'next/image' import Link from 'next/link' +import { Button, IconGitHub, IconTwitter } from '~/../../packages/ui' +import footerData from '~/data/footer.json' const Footer = () => { return (

    -
    - Supabase 2022 - — - - Contributing - - - Changelog - - - - Author Styleguide - - - Open Source - - - SupaSquad - +
    +
    + Supabase 2022 + — + {footerData.map((item) => ( + + {item.title} + + ))} +
    +
    + + +
    ) diff --git a/apps/docs/data/footer.json b/apps/docs/data/footer.json index 3d3286890c4..1a703f19a96 100644 --- a/apps/docs/data/footer.json +++ b/apps/docs/data/footer.json @@ -1,150 +1,10 @@ [ + { "title": "Contributing", "url": "/handbook/contributing" }, + { "title": "Changelog", "url": "https://supabase.com/changelog" }, { - "title": "Product", - "links": [ - { - "text": "Database", - "url": "/database" - }, - { - "text": "Auth", - "url": "/auth" - }, - { - "text": "Functions", - "url": "/edge-functions" - }, - { - "text": "Realtime", - "url": "/realtime" - }, - { - "text": "Storage", - "url": "/storage" - }, - { - "text": "Pricing", - "url": "/pricing" - }, - { - "text": "Beta", - "url": "/beta" - } - ] + "title": "Author Styleguide", + "url": "https://github.com/supabase/supabase/blob/master/DEVELOPERS.md" }, - { - "title": "Resources", - "links": [ - { - "text": "Support", - "url": "/support" - }, - { - "text": "System Status", - "url": "https://status.supabase.com/" - }, - { - "text": "Integrations", - "url": "/partners/integrations" - }, - { - "text": "Experts", - "url": "/partners/experts" - }, - { - "text": "Brand Assets / Logos", - "url": "/brand-assets" - }, - { - "text": "DPA", - "url": "/legal/dpa" - }, - { - "text": "SOC2", - "url": "/legal/soc2" - } - ] - }, - { - "title": "Developers", - "links": [ - { - "text": "Documentation", - "url": "/docs" - }, - { - "text": "API Reference", - "url": "/docs/reference" - }, - { - "text": "Changelog", - "url": "/changelog" - }, - { - "text": "Contributing", - "url": "/docs/handbook/contributing" - }, - { - "text": "Open Source", - "url": "/docs/oss" - }, - { - "text": "SupaSquad", - "url": "/supasquad" - }, - { - "text": "DevTo", - "url": "https://dev.to/supabase" - }, - { - "text": "RSS", - "url": "/rss.xml" - } - ] - }, - { - "title": "Company", - "links": [ - { - "text": "Blog", - "url": "/blog" - }, - { - "text": "Careers", - "url": "https://about.supabase.com/careers" - }, - { - "text": "Company", - "url": "/company" - }, - { - "text": "Terms of Service", - "url": "/docs/company/terms" - }, - { - "text": "Privacy Policy", - "url": "/docs/company/privacy" - }, - { - "text": "Acceptable Use Policy", - "url": "/docs/company/aup" - }, - { - "text": "Service Level Agreement", - "url": "/docs/company/sla" - }, - { - "text": "Humans.txt", - "url": "/humans.txt" - }, - { - "text": "Lawyers.txt", - "url": "/lawyers.txt" - }, - { - "text": "Security.txt", - "url": "/.well-known/security.txt" - } - ] - } + { "title": "Open Source", "url": "https://supabase.com/docs/oss" }, + { "title": "SupaSquad", "url": "https://supabase.com/supasquad" } ] diff --git a/apps/docs/public/img/icons/discord-icon-outline.svg b/apps/docs/public/img/icons/discord-icon-outline.svg new file mode 100644 index 00000000000..be8b9d4efcb --- /dev/null +++ b/apps/docs/public/img/icons/discord-icon-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/icons/discord-icon.svg b/apps/docs/public/img/icons/discord-icon.svg index 3efe1ec110f..f8f9cebc2ee 100644 --- a/apps/docs/public/img/icons/discord-icon.svg +++ b/apps/docs/public/img/icons/discord-icon.svg @@ -1,10 +1,9 @@ - - - - - - - - - - + + + discord-icon + + + + + + \ No newline at end of file From c3976eddce431b77a365468387381c86392909f7 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Fri, 16 Dec 2022 10:57:09 -0330 Subject: [PATCH 13/45] Fix build error --- .../docs/layouts/tutorials/TutorialLayout.tsx | 1 - apps/docs/public/sitemap.xml | 386 +++++++++--------- 2 files changed, 193 insertions(+), 194 deletions(-) diff --git a/apps/docs/layouts/tutorials/TutorialLayout.tsx b/apps/docs/layouts/tutorials/TutorialLayout.tsx index b49391425b2..fc1a2fa8ea9 100644 --- a/apps/docs/layouts/tutorials/TutorialLayout.tsx +++ b/apps/docs/layouts/tutorials/TutorialLayout.tsx @@ -2,7 +2,6 @@ import { MDXProvider } from '@mdx-js/react' import Head from 'next/head' import { FC, useEffect, useState } from 'react' import components from '~/components' -import Footer from '~/components/Footer' import SideBar from '~/components/Navigation/SideBar' import TableOfContents from '~/components/TableOfContents' diff --git a/apps/docs/public/sitemap.xml b/apps/docs/public/sitemap.xml index 8989c166fdb..3c10bb5889d 100644 --- a/apps/docs/public/sitemap.xml +++ b/apps/docs/public/sitemap.xml @@ -24,30 +24,6 @@ 0.5 - - https://supabase.com/docs/handbook/contributing - weekly - 0.5 - - - - https://supabase.com/docs/handbook/introduction - weekly - 0.5 - - - - https://supabase.com/docs/reference/index - weekly - 0.5 - - - - https://supabase.com/docs/tutorials/nextjs - weekly - 0.5 - - https://supabase.com/docs/guides/api weekly @@ -114,6 +90,18 @@ 0.5 + + https://supabase.com/docs/handbook/contributing + weekly + 0.5 + + + + https://supabase.com/docs/handbook/introduction + weekly + 0.5 + + https://supabase.com/docs/new/auth weekly @@ -121,31 +109,13 @@ - https://supabase.com/docs/learn/auth-deep-dive/auth-deep-dive-jwts + https://supabase.com/docs/reference/index weekly 0.5 - https://supabase.com/docs/learn/auth-deep-dive/auth-google-oauth - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-gotrue - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-policies - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-row-level-security + https://supabase.com/docs/tutorials/nextjs weekly 0.5 @@ -156,6 +126,78 @@ 0.5 + + https://supabase.com/docs/guides/auth/auth-captcha + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/auth-email-templates + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/auth-email + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/auth-helpers + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/auth-magic-link + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/auth-mfa + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/managing-user-data + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/overview + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/phone-login + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/row-level-security + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/server-side-rendering + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login + weekly + 0.5 + + https://supabase.com/docs/guides/database/arrays weekly @@ -246,78 +288,6 @@ 0.5 - - https://supabase.com/docs/guides/auth/auth-captcha - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-email-templates - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-email - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-magic-link - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-mfa - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/managing-user-data - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/overview - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/phone-login - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/row-level-security - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/server-side-rendering - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login - weekly - 0.5 - - https://supabase.com/docs/guides/functions/auth weekly @@ -588,6 +558,24 @@ 0.5 + + https://supabase.com/docs/guides/resources/glossary + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/self-hosting + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/supabase-cli + weekly + 0.5 + + https://supabase.com/docs/guides/storage/access-control weekly @@ -619,55 +607,31 @@ - https://supabase.com/docs/guides/resources/glossary + https://supabase.com/docs/learn/auth-deep-dive/auth-deep-dive-jwts weekly 0.5 - https://supabase.com/docs/guides/resources/self-hosting + https://supabase.com/docs/learn/auth-deep-dive/auth-google-oauth weekly 0.5 - https://supabase.com/docs/guides/resources/supabase-cli + https://supabase.com/docs/learn/auth-deep-dive/auth-gotrue weekly 0.5 - https://supabase.com/docs/guides/database/extensions/http + https://supabase.com/docs/learn/auth-deep-dive/auth-policies weekly 0.5 - https://supabase.com/docs/guides/database/extensions/pgcron - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgnet - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgtap - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/plv8 - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/uuid-ossp + https://supabase.com/docs/learn/auth-deep-dive/auth-row-level-security weekly 0.5 @@ -720,30 +684,6 @@ 0.5 - - https://supabase.com/docs/guides/getting-started/quickstarts/nextjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/nuxtjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/reactjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/og-image - weekly - 0.5 - - https://supabase.com/docs/guides/auth/social-login/auth-apple weekly @@ -846,6 +786,66 @@ 0.5 + + https://supabase.com/docs/guides/database/extensions/http + weekly + 0.5 + + + + https://supabase.com/docs/guides/database/extensions/pgcron + weekly + 0.5 + + + + https://supabase.com/docs/guides/database/extensions/pgnet + weekly + 0.5 + + + + https://supabase.com/docs/guides/database/extensions/pgtap + weekly + 0.5 + + + + https://supabase.com/docs/guides/database/extensions/plv8 + weekly + 0.5 + + + + https://supabase.com/docs/guides/database/extensions/uuid-ossp + weekly + 0.5 + + + + https://supabase.com/docs/guides/functions/examples/og-image + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/quickstarts/nextjs + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/quickstarts/nuxtjs + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/quickstarts/reactjs + weekly + 0.5 + + https://supabase.com/docs/guides/getting-started/tutorials/with-angular weekly @@ -930,24 +930,6 @@ 0.5 - - https://supabase.com/docs/guides/platform/sso/azure - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso/gsuite - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso/okta - weekly - 0.5 - - https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-auth weekly @@ -972,6 +954,30 @@ 0.5 + + https://supabase.com/docs/guides/platform/sso/azure + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/sso/gsuite + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/sso/okta + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/self-hosting/docker + weekly + 0.5 + + https://supabase.com/docs/guides/resources/supabase-cli/local-development weekly @@ -984,12 +990,6 @@ 0.5 - - https://supabase.com/docs/guides/resources/self-hosting/docker - weekly - 0.5 - - https://supabase.com/docs/reference/javascript/initializing weekly From b18cb383d999f81d9b0d1dea6fa093bfb10d9f0d Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Fri, 16 Dec 2022 11:09:47 -0330 Subject: [PATCH 14/45] Add theme switcher to icon --- apps/docs/components/Navigation/Footer.tsx | 16 +-- .../public/img/icons/discord-icon-outline.svg | 1 - apps/docs/public/sitemap.xml | 100 +++++++++--------- 3 files changed, 60 insertions(+), 57 deletions(-) delete mode 100644 apps/docs/public/img/icons/discord-icon-outline.svg diff --git a/apps/docs/components/Navigation/Footer.tsx b/apps/docs/components/Navigation/Footer.tsx index 808faca43d3..3d85d66b3cb 100644 --- a/apps/docs/components/Navigation/Footer.tsx +++ b/apps/docs/components/Navigation/Footer.tsx @@ -2,8 +2,10 @@ import Image from 'next/image' import Link from 'next/link' import { Button, IconGitHub, IconTwitter } from '~/../../packages/ui' import footerData from '~/data/footer.json' +import { useTheme } from 'common/Providers' const Footer = () => { + const { isDarkMode } = useTheme() return (

    @@ -36,12 +38,14 @@ const Footer = () => { target="_blank" rel="noreferrer noopener" > - Discord + + +
    diff --git a/apps/docs/public/img/icons/discord-icon-outline.svg b/apps/docs/public/img/icons/discord-icon-outline.svg deleted file mode 100644 index be8b9d4efcb..00000000000 --- a/apps/docs/public/img/icons/discord-icon-outline.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/sitemap.xml b/apps/docs/public/sitemap.xml index 3c10bb5889d..f189599255f 100644 --- a/apps/docs/public/sitemap.xml +++ b/apps/docs/public/sitemap.xml @@ -103,13 +103,13 @@ - https://supabase.com/docs/new/auth + https://supabase.com/docs/reference/index weekly 0.5 - https://supabase.com/docs/reference/index + https://supabase.com/docs/new/auth weekly 0.5 @@ -822,12 +822,6 @@ 0.5 - - https://supabase.com/docs/guides/functions/examples/og-image - weekly - 0.5 - - https://supabase.com/docs/guides/getting-started/quickstarts/nextjs weekly @@ -846,6 +840,54 @@ 0.5 + + https://supabase.com/docs/guides/functions/examples/og-image + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/sso/azure + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/sso/gsuite + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/sso/okta + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-auth + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-storage + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/migrating-to-supabase/firestore-data + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/migrating-to-supabase/heroku + weekly + 0.5 + + https://supabase.com/docs/guides/getting-started/tutorials/with-angular weekly @@ -930,48 +972,6 @@ 0.5 - - https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-auth - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-storage - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/firestore-data - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/heroku - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso/azure - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso/gsuite - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso/okta - weekly - 0.5 - - https://supabase.com/docs/guides/resources/self-hosting/docker weekly From e4e56045837d91be6a8dbdf701cce4179b421add Mon Sep 17 00:00:00 2001 From: Ollie Halliday <22655069+Hallidayo@users.noreply.github.com> Date: Fri, 16 Dec 2022 16:06:49 +0000 Subject: [PATCH 15/45] made columns appear only on large devices --- apps/docs/pages/guides/getting-started.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/getting-started.mdx b/apps/docs/pages/guides/getting-started.mdx index aa58bb10dd9..77d6c6c998d 100644 --- a/apps/docs/pages/guides/getting-started.mdx +++ b/apps/docs/pages/guides/getting-started.mdx @@ -38,7 +38,7 @@ export const meta = { ### Tutorials -
    +
    {webapps.map((item) => { return ( From bd2bd2c52f00caa0d9d7ab1c7029aa2684556c4a Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Fri, 16 Dec 2022 15:35:47 -0330 Subject: [PATCH 16/45] Add NextSEO to refdocs crawler files --- apps/docs/components/reference/RefSEO.tsx | 25 +++++++++++++ apps/docs/layouts/ref/RefSubLayout.tsx | 36 ++++++++++++------- .../reference/dart/crawlers/[...slug].tsx | 21 +++++++---- .../reference/dart/v0/crawlers/[...slug].tsx | 20 +++++++---- .../javascript/crawlers/[...slug].tsx | 21 +++++++---- .../javascript/v1/crawlers/[...slug].tsx | 22 ++++++++---- 6 files changed, 107 insertions(+), 38 deletions(-) create mode 100644 apps/docs/components/reference/RefSEO.tsx diff --git a/apps/docs/components/reference/RefSEO.tsx b/apps/docs/components/reference/RefSEO.tsx new file mode 100644 index 00000000000..237ecec3f15 --- /dev/null +++ b/apps/docs/components/reference/RefSEO.tsx @@ -0,0 +1,25 @@ +import { NextSeo } from 'next-seo' +import { useRouter } from 'next/router' + +function RefSEO({ title }) { + const router = useRouter() + + const path = router.asPath.replace('crawlers/', '') + + return ( + + ) +} + +export default RefSEO diff --git a/apps/docs/layouts/ref/RefSubLayout.tsx b/apps/docs/layouts/ref/RefSubLayout.tsx index 26e1c612515..3357e427ed1 100644 --- a/apps/docs/layouts/ref/RefSubLayout.tsx +++ b/apps/docs/layouts/ref/RefSubLayout.tsx @@ -4,6 +4,7 @@ import { highlightSelectedNavItem } from '~/components/CustomHTMLElements/Custom import { useRouter } from 'next/router' import { useNavigationMenuContext } from '~/components/Navigation/NavigationMenu/NavigationMenu.Context' import { menuState } from '~/hooks/useMenuState' +import Image from 'next/image' interface ISectionContainer { id: string @@ -77,8 +78,13 @@ const Section: FC = (props) => { const StickyHeader: FC = ({ icon, ...props }) => { const router = useRouter() + const { setActiveRefItem } = useNavigationMenuContext() + // we're serving search bots a different file (/crawlers/[...slug]) + // and need to modify content to suit that + const isCrawlerPage = router.route.includes('/crawlers/[...slug]') + const { ref } = useInView({ threshold: 1, rootMargin: '30% 0% -35% 0px', @@ -99,21 +105,25 @@ const StickyHeader: FC = ({ icon, ...props }) => {
    {icon && (
    - + {icon}
    )} -

    - {props.title && {props.title}} -

    + {isCrawlerPage ? ( +

    {props.title}

    + ) : ( +

    + {props.title && {props.title}} +

    + )}
    ) } diff --git a/apps/docs/pages/reference/dart/crawlers/[...slug].tsx b/apps/docs/pages/reference/dart/crawlers/[...slug].tsx index afdc202a05f..c12f3cabbf2 100644 --- a/apps/docs/pages/reference/dart/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/dart/crawlers/[...slug].tsx @@ -7,6 +7,7 @@ import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { useRouter } from 'next/router' +import RefSEO from '~/components/reference/RefSEO' const sections = flattenSections(clientLibsCommonSections) @@ -15,13 +16,21 @@ export default function JSReference(props) { const slug = router.query.slug[0] const filteredSection = sections.filter((section) => section.id === slug) + const pageTitle = filteredSection[0]?.title + ? `${filteredSection[0]?.title} | Supabase` + : 'Supabase' + return ( - + <> + + + + ) } diff --git a/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx b/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx index 3ef20b302fe..2e67a5b5c8e 100644 --- a/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx @@ -7,6 +7,7 @@ import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { useRouter } from 'next/router' +import RefSEO from '~/components/reference/RefSEO' const sections = flattenSections(clientLibsCommonSections) @@ -15,13 +16,20 @@ export default function JSReference(props) { const slug = router.query.slug[0] const filteredSection = sections.filter((section) => section.id === slug) + const pageTitle = filteredSection[0]?.title + ? `${filteredSection[0]?.title} | Supabase` + : 'Supabase' return ( - + <> + + + + ) } diff --git a/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx b/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx index bd631d0e07e..2e6e0b271a9 100644 --- a/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx @@ -7,6 +7,7 @@ import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { useRouter } from 'next/router' +import RefSEO from '~/components/reference/RefSEO' const sections = flattenSections(clientLibsCommonSections) @@ -15,13 +16,21 @@ export default function JSReference(props) { const slug = router.query.slug[0] const filteredSection = sections.filter((section) => section.id === slug) + const pageTitle = filteredSection[0]?.title + ? `${filteredSection[0]?.title} | Supabase` + : 'Supabase' + return ( - + <> + + + + ) } diff --git a/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx b/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx index d1aa3ec92ee..bbb38f4598a 100644 --- a/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx @@ -7,7 +7,7 @@ import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { useRouter } from 'next/router' - +import RefSEO from '~/components/reference/RefSEO' const sections = flattenSections(clientLibsCommonSections) export default function JSReference(props) { @@ -15,13 +15,21 @@ export default function JSReference(props) { const slug = router.query.slug[0] const filteredSection = sections.filter((section) => section.id === slug) + const pageTitle = filteredSection[0]?.title + ? `${filteredSection[0]?.title} | Supabase` + : 'Supabase' + return ( - + <> + + + + ) } From c9bf1deb21f4207bc201ae7c507a3313593df535 Mon Sep 17 00:00:00 2001 From: dannykng Date: Fri, 16 Dec 2022 17:01:54 -0800 Subject: [PATCH 17/45] Update Dashboard Access Control doc --- .../pages/guides/platform/access-control.mdx | 100 ++++++++---------- 1 file changed, 45 insertions(+), 55 deletions(-) diff --git a/apps/docs/pages/guides/platform/access-control.mdx b/apps/docs/pages/guides/platform/access-control.mdx index f470d14af9a..9cba90faee5 100644 --- a/apps/docs/pages/guides/platform/access-control.mdx +++ b/apps/docs/pages/guides/platform/access-control.mdx @@ -1,84 +1,74 @@ import Layout from '~/layouts/DefaultGuideLayout' +import { IconCheck } from 'ui' export const meta = { title: 'Access Control', description: 'Roles and permissions at the organization level', } -Supabase provides granular access control features that let you manage permissions across your organizations. - -Within a Supabase organization, a member can have one of the following roles: +Supabase provides granular access controls to manage permissions across your organizations. +For each organization, a member can have one of the following roles: - Owner - Administrator - Developer -A default organization is created for a user when they first sign-in and -assigned the **Owner** role. If the user wants to invite others -to collaborate within the organization, they can visit the organization team -settings (`https://app.supabase.com/org//settings#team`) to send an -invite link to another user's email. The invite expires after 24 hours. - -Invites sent from a SSO account can only be accepted by another SSO account -coming from the same identity provider. This is a security measure that -prevents accidental invites to accounts not managed by your company's -enterprise systems. - -Project level invites are not available at this time. A member of the -organization will be able to access all projects under the organization. If you -wish to restrict access to certain projects, please create another organization -to manage this. +A default organization is created when you first sign in and +you'll be assigned the **Owner** role. +Each member can access all projects under the organization. +Project level invites are not available at this time. +Create a separate organization if you need to restrict access to certain projects. ## Manage team members -You can invite your team members into your organizations to collaborate on projects. - - +To invite others to collaborate, visit your organization's team settings in the +[Dashboard](https://app.supabase.com/projects) to send an invite link to +another user's email. The invite expires after 24 hours. ### Permissions across roles [#permission-across-roles] The table below shows the corresponding permissions for each available role you can assign a team member in the Dashboard. -| Permissions | Owner | Administrator | Developer | -| ------------------------ | ----- | ------------- | --------- | +| Permissions | Owner | Administrator | Developer | +| ------------------------ | ----------------------- | ----------------------- | ----------------------- | | **Organization** | -| Change organization name | ✅ | | | -| Delete organization | ✅ | | | +| Change organization name | | | | +| Delete organization | | | | | **Members** | -| Add an Owner | ✅ | | | -| Remove an Owner | ✅ | | | -| Add an Administrator | ✅ | ✅ | | -| Remove an Administrator | ✅ | ✅ | | -| Add a Developer | ✅ | ✅ | | -| Remove a Developer | ✅ | ✅ | | -| Revoke an invite | ✅ | ✅ | | -| Resend an invite | ✅ | ✅ | | -| Accept an invite[^1] | ✅ | ✅ | ✅ | +| Add an Owner | | | | +| Remove an Owner | | | | +| Add an Administrator | | | | +| Remove an Administrator | | | | +| Add a Developer | | | | +| Remove a Developer | | | | +| Revoke an invite | | | | +| Resend an invite | | | | +| Accept an invite[^1] | | | | | **Billing** | -| Read invoices | ✅ | ✅ | ✅ | -| Read billing email | ✅ | ✅ | ✅ | -| Change billing email | ✅ | | | -| View subscription | ✅ | ✅ | ✅ | -| Update subscription | ✅ | ✅ | | -| Read billing address | ✅ | ✅ | ✅ | -| Update billing address | ✅ | ✅ | | -| Read tax codes | ✅ | ✅ | ✅ | -| Update tax codes | ✅ | ✅ | | -| Read payment methods | ✅ | ✅ | ✅ | -| Update payment methods | ✅ | ✅ | | +| Read invoices | | | | +| Read billing email | | | | +| Change billing email | | | | +| View subscription | | | | +| Update subscription | | | | +| Read billing address | | | | +| Update billing address | | | | +| Read tax codes | | | | +| Update tax codes | | | | +| Read payment methods | | | | +| Update payment methods | | | | | **Projects** | -| Create a project | ✅ | ✅ | | -| Delete a project | ✅ | ✅ | | -| Update a project | ✅ | ✅ | | -| Pause a project | ✅ | ✅ | | -| Resume a project | ✅ | ✅ | | -| Restart a project | ✅ | ✅ | ✅ | +| Create a project | | | | +| Delete a project | | | | +| Update a project | | | | +| Pause a project | | | | +| Resume a project | | | | +| Restart a project | | | | [^1]: - If the invite was sent from a SSO account, it can only be accepted from - a user signed in via the same identity provider. + Invites sent from a SSO account can only be accepted by another SSO account + coming from the same identity provider. This is a security measure that + prevents accidental invites to accounts not managed by your company's + enterprise systems. export const Page = ({ children }) => From 4b0b68f79b081ab01d4d0fa4ebb61625ec239547 Mon Sep 17 00:00:00 2001 From: dannykng Date: Fri, 16 Dec 2022 17:03:13 -0800 Subject: [PATCH 18/45] Update links --- apps/docs/pages/guides/platform/network-restrictions.mdx | 2 +- apps/www/_blog/2022-08-19-launch-week-5-one-more-thing.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/docs/pages/guides/platform/network-restrictions.mdx b/apps/docs/pages/guides/platform/network-restrictions.mdx index 7dfde6433cd..c2286c6a4f5 100644 --- a/apps/docs/pages/guides/platform/network-restrictions.mdx +++ b/apps/docs/pages/guides/platform/network-restrictions.mdx @@ -20,7 +20,7 @@ To get started: 1. [Install](/docs/guides/cli) the Supabase CLI 1.22.0+. 1. [Log in](/docs/guides/cli/local-development#log-in-to-the-supabase-cli) to your Supabase account using the CLI. -1. Ensure that you have [Owner or Admin permissions](/docs/guides/hosting/platform#manage-team-members) for the project that you are enabling network restrictions. +1. Ensure that you have [Owner or Admin permissions](/docs/guides/hosting/platform/access-control#manage-team-members) for the project that you are enabling network restrictions. ## Check restrictions diff --git a/apps/www/_blog/2022-08-19-launch-week-5-one-more-thing.mdx b/apps/www/_blog/2022-08-19-launch-week-5-one-more-thing.mdx index 1ad675b6b76..0fa2013bc44 100644 --- a/apps/www/_blog/2022-08-19-launch-week-5-one-more-thing.mdx +++ b/apps/www/_blog/2022-08-19-launch-week-5-one-more-thing.mdx @@ -70,7 +70,7 @@ We've released granular permissions for the Supabase Dashboard. Dashboard permis We're starting with 3 roles—Owner, Administrator, and Developer—which you can edit in the Org settings of the Dashboard. There's a tooltip in the header of the members table, which elaborates on the individual permissions available for each role. -[Read more](/docs/guides/platform#manage-team-members). +[Read more](/docs/guides/platform/access-control#manage-team-members). --- From 5fd51f0f0c6aff630c0e031b508b579fca68466a Mon Sep 17 00:00:00 2001 From: Brad Crump <36259214+breadcrumbbuilds@users.noreply.github.com> Date: Fri, 16 Dec 2022 19:21:24 -0800 Subject: [PATCH 19/45] Point to android manifest and plist files Point users to location of files to be edited. --- .../guides/getting-started/tutorials/with-flutter.mdx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx index db3e028ad30..8200990d837 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx @@ -50,7 +50,9 @@ Add `io.supabase.flutterquickstart://login-callback/` as a new [redirect URL](ht That is it on Supabase's end and the rest are platform specific settings: -For Android, add an intent-filter to enable deep linking: +For Android, edit the android/app/src/main/AndroidManifest.xml file. + +Add an intent-filter to enable deep linking: ```xml title=android/app/src/main/AndroidManifest.xml @@ -75,7 +77,9 @@ For Android, add an intent-filter to enable deep linking: ``` -For iOS add CFBundleURLTypes to enable deep linking: +For iOS, edit the ios/Runner/Info.plist file. + +Add CFBundleURLTypes to enable deep linking: ```xml title=ios/Runner/Info.plist" From f8f0998cea42c7fe176a35ce48ef3f18db3bc565 Mon Sep 17 00:00:00 2001 From: Div Arora Date: Sat, 17 Dec 2022 14:48:24 +0800 Subject: [PATCH 20/45] Update custom-domains.mdx --- apps/docs/pages/guides/platform/custom-domains.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/docs/pages/guides/platform/custom-domains.mdx b/apps/docs/pages/guides/platform/custom-domains.mdx index 01249cf5455..5c0023dff2c 100644 --- a/apps/docs/pages/guides/platform/custom-domains.mdx +++ b/apps/docs/pages/guides/platform/custom-domains.mdx @@ -145,6 +145,8 @@ As with the final activation stage of the process for setting up a vanity subdom Edge functions do not honor the custom domain or the vanity subdomain setting and they still have to be invoked via the `foobarbaz.supabase.co` domain. +A Supabase project can-at this time-use either a Custom Domain, or a Vanity Subdomain, but not both. + export const Page = ({ children }) => export default Page From dd4001f8ecb63264c2dab0ba22742e5b983931a3 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sat, 17 Dec 2022 19:28:55 +0800 Subject: [PATCH 21/45] add initializing to supabase v1 --- .../docs/ref/javascript/v1/initializinggg.mdx | 130 ------------------ spec/supabase_js_v1.yml | 62 +++++++++ 2 files changed, 62 insertions(+), 130 deletions(-) delete mode 100644 apps/docs/docs/ref/javascript/v1/initializinggg.mdx diff --git a/apps/docs/docs/ref/javascript/v1/initializinggg.mdx b/apps/docs/docs/ref/javascript/v1/initializinggg.mdx deleted file mode 100644 index a4dc650a969..00000000000 --- a/apps/docs/docs/ref/javascript/v1/initializinggg.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: 'Initializing' ---- - -You can initialize a new Supabase client using the `createClient()` method. - -The Supabase client is your entrypoint to the rest of the Supabase functionality -and is the easiest way to interact with everything we offer within the Supabase ecosystem. - -## Parameters - -
      - -
    • -

      - - supabaseUrl - - - required - - - string - -

      -
      - -The unique Supabase URL which is supplied when you create a new project in your project dashboard. - -
      - -
    • - -
    • -

      - - supabaseKey - - - required - - - string - -

      -
      - -The unique Supabase Key which is supplied when you create a new project in your project dashboard. - -
      - -
    • - -
    • -

      - - options - - - optional - - - SupabaseClientOptions - -

      -
      - -No description provided. - -
      - -
    • - -
    - -## Examples - -### createClient() - -```js -import { createClient } from '@supabase/supabase-js' - -// Create a single supabase client for interacting with your database -const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') -``` - -### With additional parameters - -```js -import { createClient } from '@supabase/supabase-js' - -const options = { - schema: 'public', - headers: { 'x-my-custom-header': 'my-app-name' }, - autoRefreshToken: true, - persistSession: true, - detectSessionInUrl: true, -} -const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', options) -``` - -### API schemas - -```js -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', -}) -``` - -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. You also need to grant `USAGE` on your new schema with the grants you desire, such as `SELECT, INSERT, UPDATE, DELETE`. - -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. - -### Custom `fetch` implementation - -```js -import { createClient } from '@supabase/supabase-js' - -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. -This is most useful in environments where `cross-fetch` is not compatible (for instance Cloudflare Workers). diff --git a/spec/supabase_js_v1.yml b/spec/supabase_js_v1.yml index c61976c9743..16593d0f202 100644 --- a/spec/supabase_js_v1.yml +++ b/spec/supabase_js_v1.yml @@ -16,6 +16,68 @@ info: version: '0.0.1' functions: + - id: initializing + title: 'Initializing' + $ref: '@supabase/supabase-js.index.SupabaseClient.constructor' + examples: + - id: create-client + name: Create Client + code: | + ```js + import { createClient } from '@supabase/supabase-js' + + // Create a single supabase client for interacting with your database + const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') + ``` + - id: with-additional-parameters + name: With Additional Parameters + code: | + ```js + import { createClient } from '@supabase/supabase-js' + + const options = { + schema: 'public', + headers: { 'x-my-custom-header': 'my-app-name' }, + autoRefreshToken: true, + persistSession: true, + detectSessionInUrl: true, + } + const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', options) + ``` + - id: api-schemas + name: API schemas + code: | + ```js + import { createClient } from '@supabase/supabase-js' + + const options = { + schema: 'public', + headers: { 'x-my-custom-header': 'my-app-name' }, + autoRefreshToken: true, + persistSession: true, + detectSessionInUrl: true, + } + const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', options) + ``` + description: | + 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. You also need to grant `USAGE` on your new schema with the grants you desire, such as `SELECT, INSERT, UPDATE, DELETE`. + + Note: each client connection can only access a single schema, so the code above can access the `other_schema` schema but cannot access the `public` schema. + - id: custom-fetch-implementation + name: Custom Fetch Implementation + code: | + ```js + import { createClient } from '@supabase/supabase-js' + + const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', { + fetch: fetch.bind(globalThis), + }) + ``` + 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. + This is most useful in environments where `cross-fetch` is not compatible (for instance Cloudflare Workers). - id: sign-up title: 'signUp()' $ref: '@supabase/gotrue-js.GoTrueClient.signUp' From 5554f4c92a61f5cb870319468ea46f4b42563dbb Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sat, 17 Dec 2022 19:29:47 +0800 Subject: [PATCH 22/45] Update helpers.ts --- apps/docs/lib/refGenerator/helpers.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/docs/lib/refGenerator/helpers.ts b/apps/docs/lib/refGenerator/helpers.ts index 02df4d128b3..a3b3da1e943 100644 --- a/apps/docs/lib/refGenerator/helpers.ts +++ b/apps/docs/lib/refGenerator/helpers.ts @@ -67,7 +67,6 @@ function recurseThroughParams(paramDefinition: any) { } else if (Object.keys(dereferenced).length === 0) { // skip: {} have no children } else { - console.warn('param', param) throw new Error('unexpected case for dereferenced param type') } } else if (param.type?.type === 'reflection') { From f21947bbc9aff316bbc9d2af8667a85dd702e55b Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sat, 17 Dec 2022 19:30:11 +0800 Subject: [PATCH 23/45] Update common-client-libs-sections.json --- spec/common-client-libs-sections.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/common-client-libs-sections.json b/spec/common-client-libs-sections.json index 03d1559bc35..f1afe0b46b5 100644 --- a/spec/common-client-libs-sections.json +++ b/spec/common-client-libs-sections.json @@ -13,6 +13,12 @@ "type": "markdown", "libs": ["js", "js_v1", "dart", "dart_v0"] }, + { + "title": "Initializing", + "id": "initializing", + "slug": "initializing", + "type": "function" + }, { "title": "Typescript Support", "id": "typescript-support", @@ -20,12 +26,6 @@ "type": "markdown", "libs": ["js", "js_v1"] }, - { - "title": "Initializing", - "id": "initializing", - "slug": "initializing", - "type": "function" - }, { "title": "Database", "libs": ["js", "js_v1", "dart", "dart_v0"], From 514ed91d5500cd6e42db14084fdd1c2b345de274 Mon Sep 17 00:00:00 2001 From: Zan Cerne <57217296+cernezan@users.noreply.github.com> Date: Sat, 17 Dec 2022 21:43:06 +0100 Subject: [PATCH 24/45] Closed
    --- .../pages/guides/getting-started/tutorials/with-angular.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx index b0d5fc21c93..8f2754453f9 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx @@ -205,7 +205,7 @@ export class AuthComponent implements OnInit {
    -
    ``` ### Account page From ee3cbc512703d4e19cc444fcdd2cb27551677046 Mon Sep 17 00:00:00 2001 From: Magnus Jensen Date: Sun, 18 Dec 2022 11:56:59 +0000 Subject: [PATCH 25/45] docs(readme): add storage-java to library list --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c35921e1a5..4a6e2f223da 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ Our approach for client libraries is modular. Each sub-library is a standalone i - gotrue-java - - - + storage-java - From b440c99431446dcc0e3891ed4f0f5791dd1f6f7e Mon Sep 17 00:00:00 2001 From: dshukertjr <18113850+dshukertjr@users.noreply.github.com> Date: Sun, 18 Dec 2022 22:28:40 +0900 Subject: [PATCH 26/45] add the required brackets to turn on security invoker view --- apps/www/_blog/2022-12-16-new-in-postgres-15.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/_blog/2022-12-16-new-in-postgres-15.mdx b/apps/www/_blog/2022-12-16-new-in-postgres-15.mdx index da45e32becf..d1b158b5a47 100644 --- a/apps/www/_blog/2022-12-16-new-in-postgres-15.mdx +++ b/apps/www/_blog/2022-12-16-new-in-postgres-15.mdx @@ -17,7 +17,7 @@ The PostgreSQL community [released](https://www.postgresql.org/docs/current/rele `CREATE` permission is revoked from all users except the database owner. It makes permission assigning more tunable ([details](https://www.postgresql.org/docs/15/ddl-schemas.html#DDL-SCHEMAS-PATTERNS)). And for the migrated database don't forget to revoke `CREATE` permission on the public schema manually to fit the new policy. -There is a useful option `CREATE VIEW .. WITH security_invoker=on` to create a view that uses permissions of a view caller rather than a view creator to access underlying tables. With this, you should not worry that a user that doesn't have access to a table could see its data through a view. +There is a useful option `CREATE VIEW .. WITH (security_invoker=on)` to create a view that uses permissions of a view caller rather than a view creator to access underlying tables. With this, you should not worry that a user that doesn't have access to a table could see its data through a view. ## **Performance speed-up** From 8775bb8fbe7a11483bd8a7eb848302d79d6d5565 Mon Sep 17 00:00:00 2001 From: Danilo Herrera Date: Sun, 18 Dec 2022 13:09:51 -0500 Subject: [PATCH 27/45] docs: update server components doc --- .../auth/auth-helpers/nextjs-server-components.mdx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx b/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx index 346c8d7f3bc..815073394da 100644 --- a/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx @@ -95,7 +95,7 @@ Create a new file at `/utils/supabase-browser.ts` and populate with the followin ```ts import { createBrowserSupabaseClient } from '@supabase/auth-helpers-nextjs' -import { Database } from '../db_types' +import { Database } from '../lib/database.types' export default createBrowserSupabaseClient() ``` @@ -109,7 +109,7 @@ Create a new file at `/utils/supabase-server.ts` and populate with the following ```ts title="/utils/supabase-server.ts" import { headers, cookies } from 'next/headers' import { createServerComponentSupabaseClient } from '@supabase/auth-helpers-nextjs' -import { Database } from '../db_types' +import { Database } from '../lib/database.types' export default () => createServerComponentSupabaseClient({ @@ -139,6 +139,8 @@ Middleware runs before every route declared in the `matcher` array. Since we don > +Create a new file at `/pages/middleware.js` and populate with the following: + ```jsx title="middleware.js" import { createMiddlewareSupabaseClient } from '@supabase/auth-helpers-nextjs' import { NextResponse } from 'next/server' @@ -164,6 +166,8 @@ export const config = { +Create a new file at `/pages/middleware.ts` and populate with the following: + ```tsx title="middleware.ts" import { createMiddlewareSupabaseClient } from '@supabase/auth-helpers-nextjs' import { NextResponse } from 'next/server' @@ -254,7 +258,7 @@ export default async function RootLayout({ children }) { } ``` -We don't want Next.js to cache this `session` value, so we need to export a `revalidate` value of `0`. +We don't want Next.js to cache this `session` value, so we need to export a `revalidate` value of `0` in the layout file. ```jsx export const revalidate = 0 @@ -641,7 +645,7 @@ Create a new file at `/app/realtime/posts.tsx` and populate with the following: 'use client' import { useEffect, useState } from 'react' -import { Database } from '../../db_types' +import { Database } from '../lib/database.types' import supabase from '../../utils/supabase-browser' type Post = Database['public']['Tables']['posts']['Row'] From 5eaefe0dd5b5d93321749471cd4b816fbc7d8eef Mon Sep 17 00:00:00 2001 From: Clay Mitchell Date: Sun, 18 Dec 2022 17:57:29 -0500 Subject: [PATCH 28/45] Update with-react.mdx - Changed instructions to use .env to .env.local (.env is not in .gitignore by default, whereas .env.local is. process still starts properly with .env.local. - updated a couple of "edit this filename.js" to "edit this src/filename.js" - added instructions to specify which files to update for Account.js and supabaseClient.js - updated the "Add the new widget" src/Account.js sample code to better show where to add Avatar code and fit into existing code --- .../getting-started/tutorials/with-react.mdx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx index 1f7804f15ab..7d1418b7146 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx @@ -37,7 +37,7 @@ Then let's install the only additional dependency: [supabase-js](https://github. npm install @supabase/supabase-js ``` -And finally we want to save the environment variables in a `.env`. +And finally we want to save the environment variables in a `.env.local` file. All we need are the API URL and the `anon` key that you copied [earlier](#get-the-api-keys). ```bash title=.env @@ -48,6 +48,8 @@ REACT_APP_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY Now that we have the API credentials in place, let's create a helper file to initialize the Supabase client. These variables will be exposed on the browser, and that's completely fine since we have [Row Level Security](/docs/guides/auth#row-level-security) enabled on our Database. +Create and edit `src/supabaseClient.js`: + ```js title=src/supabaseClient.js import { createClient } from '@supabase/supabase-js' @@ -64,6 +66,8 @@ You can find the full contents of this file [here](https://raw.githubusercontent Let's set up a React component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords. +Create and edit `src/Auth.js`: + ```jsx title=src/Auth.js import { useState } from 'react' import { supabase } from './supabaseClient' @@ -120,7 +124,7 @@ export default function Auth() { After a user is signed in we can allow them to edit their profile details and manage their account. -Let's create a new component for that called `Account.js`. +Let's create a new component for that called `src/Account.js`. ```jsx title=src/Account.js import { useState, useEffect } from 'react' @@ -234,7 +238,7 @@ export default Account ### Launch! -Now that we have all the components in place, let's update `App.js`: +Now that we have all the components in place, let's update `src/App.js`: ```jsx title=src/App.js import './index.css' @@ -282,6 +286,8 @@ Every Supabase project is configured with [Storage](/docs/guides/storage) for ma Let's create an avatar for the user so that they can upload a profile photo. We can start by creating a new component: +Create and edit `src/Avatar.js`: + ```jsx title=src/Avatar.js import { useEffect, useState } from 'react' import { supabase } from './supabaseClient' @@ -367,7 +373,7 @@ export default function Avatar({ url, size, onUpload }) { ### Add the new widget -And then we can add the widget to the Account page: +And then we can add the widget to the Account page at `src/Account.js`: ```jsx title=src/Account.js // Import the new component @@ -376,7 +382,7 @@ import Avatar from './Avatar' // ... return ( -
    +
    {/* Add to the body */} Date: Fri, 16 Dec 2022 13:39:37 +0800 Subject: [PATCH 29/45] fix: Allow an owner to leave their own team if another owner exists --- .../TeamSettings/MemberActions.tsx | 49 ++++--------------- .../Organization/TeamSettings/MembersView.tsx | 6 ++- .../TeamSettings/TeamSettings.tsx | 7 ++- studio/stores/UiStore.ts | 38 +++++++++++++- 4 files changed, 57 insertions(+), 43 deletions(-) diff --git a/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx b/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx index 86c4bbc51e0..326e1de0ae2 100644 --- a/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx +++ b/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx @@ -1,18 +1,17 @@ -import { FC, useState, useContext } from 'react' -import { observer } from 'mobx-react-lite' import * as Tooltip from '@radix-ui/react-tooltip' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { Button, Dropdown, IconTrash, IconMoreHorizontal } from 'ui' +import { observer } from 'mobx-react-lite' +import { FC, useContext, useState } from 'react' +import { Button, Dropdown, IconMoreHorizontal, IconTrash } from 'ui' -import { Member, Role } from 'types' -import { useStore, useOrganizationDetail, checkPermissions } from 'hooks' +import { confirmAlert } from 'components/to-be-cleaned/ModalsDeprecated/ConfirmModal' +import { checkPermissions, useOrganizationDetail, useStore } from 'hooks' import { delete_, post } from 'lib/common/fetch' import { API_URL } from 'lib/constants' -import TextConfirmModal from 'components/ui/Modals/TextConfirmModal' -import { confirmAlert } from 'components/to-be-cleaned/ModalsDeprecated/ConfirmModal' +import { Member, Role } from 'types' import { PageContext } from 'pages/org/[slug]/settings' -import { getUserDisplayName, isInviteExpired } from '../Organization.utils' +import { isInviteExpired } from '../Organization.utils' import { getRolesManagementPermissions } from './TeamSettings.utils' interface Props { @@ -30,7 +29,6 @@ const MemberActions: FC = ({ members, member, roles }) => { const { mutateOrgMembers } = useOrganizationDetail(ui.selectedOrganization?.slug || '') const [loading, setLoading] = useState(false) - const [ownerTransferIsVisible, setOwnerTransferIsVisible] = useState(false) const isExpired = isInviteExpired(member?.invited_at ?? '') const isPendingInviteAcceptance = member.invited_id @@ -96,7 +94,7 @@ const MemberActions: FC = ({ members, member, roles }) => { }) mutateOrgMembers(updatedMembers) - setOwnerTransferIsVisible(false) + ui.setNotification({ category: 'success', message: 'Successfully transferred organization' }) } @@ -180,19 +178,9 @@ const MemberActions: FC = ({ members, member, roles }) => { - {!isPendingInviteAcceptance && ( - <> - setOwnerTransferIsVisible(!ownerTransferIsVisible)}> -
    -

    Make owner

    -

    Transfer ownership of "{orgName}"

    -
    -
    - - - )} {isPendingInviteAcceptance ? ( <> {canRevokeInvite && ( @@ -231,25 +219,6 @@ const MemberActions: FC = ({ members, member, roles }) => { icon={} />
    - - setOwnerTransferIsVisible(!ownerTransferIsVisible)} - onConfirm={handleTransferOwnership} - alert="Payment methods such as credit cards will also be transferred. You may want to delete credit card information first before transferring." - text={ - - By transferring this organization, it will be solely owned by{' '} - {getUserDisplayName(member)}, they - will also be able to remove you from the organization as a member - - } - />
    ) } diff --git a/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx b/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx index 530bc2073e7..57dfe7b9e20 100644 --- a/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx +++ b/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx @@ -126,13 +126,17 @@ const MembersView = () => { - ) : ( + ) : !x?.username?.includes('@') ? ( + ) : ( +
    + +
    )}
    diff --git a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx index f5df041e974..bf3d5ed1392 100644 --- a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx +++ b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx @@ -24,6 +24,11 @@ const TeamSettings = observer(() => { const [isLeaving, setIsLeaving] = useState(false) const canAddMembers = rolesAddable.length > 0 + const canLeave = (isOwner && ui.isOwnerAndCanLeaveOrg(members)) || !isOwner + + console.log(rolesAddable) + console.log(PageState) + function onFilterMemberChange(e: any) { PageState.membersFilterString = e.target.value } @@ -77,7 +82,7 @@ const TeamSettings = observer(() => { />
    )} - {!isOwner && ( + {canLeave && (
    diff --git a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx index bf3d5ed1392..67e07afe918 100644 --- a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx +++ b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx @@ -1,6 +1,7 @@ import { useState, useContext } from 'react' import { observer } from 'mobx-react-lite' import { Button, Input, IconSearch } from 'ui' +import * as Tooltip from '@radix-ui/react-tooltip' import { useStore } from 'hooks' import { post } from 'lib/common/fetch' @@ -24,10 +25,7 @@ const TeamSettings = observer(() => { const [isLeaving, setIsLeaving] = useState(false) const canAddMembers = rolesAddable.length > 0 - const canLeave = (isOwner && ui.isOwnerAndCanLeaveOrg(members)) || !isOwner - - console.log(rolesAddable) - console.log(PageState) + const canLeave = !isOwner || ui.isOwnerAndCanLeaveOrg(members) function onFilterMemberChange(e: any) { PageState.membersFilterString = e.target.value @@ -82,13 +80,35 @@ const TeamSettings = observer(() => { />
    )} - {canLeave && ( -
    - -
    - )} +
    + + + + + {!canLeave && ( + + +
    + + An organization requires at least 1 owner + +
    +
    + )} +
    +
diff --git a/studio/stores/UiStore.ts b/studio/stores/UiStore.ts index bddde29b6b6..b5191207285 100644 --- a/studio/stores/UiStore.ts +++ b/studio/stores/UiStore.ts @@ -36,7 +36,7 @@ export interface IUiStore { setNotification: (notification: Notification) => string setProfile: (value?: User) => void setPermissions: (permissions?: Permission[]) => void - isOwnerAndCanLeaveOrg: (members: Member[]) => void + isOwnerAndCanLeaveOrg: (members: Member[]) => boolean } export default class UiStore implements IUiStore { rootStore: IRootStore @@ -170,27 +170,21 @@ export default class UiStore implements IUiStore { } /* - * Check wether the owner is allowed to leave a project + * Check whether the owner is allowed to leave a project * the conditions for this is that they are an owner, and there is also 1 other owner in the org. */ isOwnerAndCanLeaveOrg(members: Member[]) { const selectedOrg = this.selectedOrganization + if (!selectedOrg?.is_owner) return false const roles: { roles: Role[] } = useOrganizationRoles(this.selectedOrganization?.slug) const membersWhoAreOwners = members.filter((member) => { const [memberRoleId] = member.role_ids ?? [] const role = (roles.roles || []).find((role: Role) => role.id === memberRoleId) - // dangerous use of string here - // to do, refactor so that changing the role name does not fail this check - // if role name does change, then user will simply not be able to leave project as a 'owner' regardless - return role && role.name === 'Owner' && !member.invited_at + return role?.name === 'Owner' && !member.invited_at }) - console.log('membersWhoAreOwners', membersWhoAreOwners) - - return selectedOrg?.is_owner && membersWhoAreOwners && membersWhoAreOwners.length > 1 - ? true - : false + return membersWhoAreOwners.length > 1 } } From 4e67e905262c405f330c518424977442b440b78a Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 19 Dec 2022 15:42:27 +0700 Subject: [PATCH 35/45] Extract isOwnerAndCanLeaveOrg into utils file instead of store and refactor --- .../TeamSettings/TeamSettings.tsx | 4 +-- .../TeamSettings/TeamSettings.utils.ts | 11 ++++++- studio/stores/UiStore.ts | 32 +------------------ 3 files changed, 13 insertions(+), 34 deletions(-) diff --git a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx index 67e07afe918..8cd64a7e5b8 100644 --- a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx +++ b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx @@ -8,7 +8,7 @@ import { post } from 'lib/common/fetch' import { API_URL } from 'lib/constants' import InviteMemberButton from './InviteMemberButton' import MembersView from './MembersView' -import { getRolesManagementPermissions } from './TeamSettings.utils' +import { getRolesManagementPermissions, hasMultipleOwners } from './TeamSettings.utils' import { confirmAlert } from 'components/to-be-cleaned/ModalsDeprecated/ConfirmModal' import { PageContext } from 'pages/org/[slug]/settings' @@ -25,7 +25,7 @@ const TeamSettings = observer(() => { const [isLeaving, setIsLeaving] = useState(false) const canAddMembers = rolesAddable.length > 0 - const canLeave = !isOwner || ui.isOwnerAndCanLeaveOrg(members) + const canLeave = !isOwner || (isOwner && hasMultipleOwners(members, roles)) function onFilterMemberChange(e: any) { PageState.membersFilterString = e.target.value diff --git a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.utils.ts b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.utils.ts index 37ea52a0822..600e98cf4be 100644 --- a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.utils.ts +++ b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.utils.ts @@ -1,4 +1,4 @@ -import { Role } from 'types' +import { Member, Role } from 'types' import { checkPermissions } from 'hooks' import { PermissionAction } from '@supabase/shared-types/out/constants' @@ -23,3 +23,12 @@ export const getRolesManagementPermissions = ( return { rolesAddable, rolesRemovable } } + +export const hasMultipleOwners = (members: Member[], roles: Role[]) => { + const membersWhoAreOwners = members.filter((member) => { + const [memberRoleId] = member.role_ids ?? [] + const role = roles.find((role: Role) => role.id === memberRoleId) + return role?.name === 'Owner' && !member.invited_at + }) + return membersWhoAreOwners.length > 1 +} diff --git a/studio/stores/UiStore.ts b/studio/stores/UiStore.ts index b5191207285..d751e77b580 100644 --- a/studio/stores/UiStore.ts +++ b/studio/stores/UiStore.ts @@ -1,18 +1,8 @@ import { uuidv4 } from 'lib/helpers' import { action, makeAutoObservable } from 'mobx' -import { - Project, - Notification, - User, - Organization, - ProjectBase, - Permission, - Member, - Role, -} from 'types' +import { Project, Notification, User, Organization, ProjectBase, Permission } from 'types' import { IRootStore } from './RootStore' import Telemetry from 'lib/telemetry' -import { useOrganizationRoles } from 'hooks' export interface IUiStore { language: 'en_US' @@ -36,7 +26,6 @@ export interface IUiStore { setNotification: (notification: Notification) => string setProfile: (value?: User) => void setPermissions: (permissions?: Permission[]) => void - isOwnerAndCanLeaveOrg: (members: Member[]) => boolean } export default class UiStore implements IUiStore { rootStore: IRootStore @@ -168,23 +157,4 @@ export default class UiStore implements IUiStore { setPermissions(permissions?: any) { this.permissions = permissions } - - /* - * Check whether the owner is allowed to leave a project - * the conditions for this is that they are an owner, and there is also 1 other owner in the org. - */ - isOwnerAndCanLeaveOrg(members: Member[]) { - const selectedOrg = this.selectedOrganization - if (!selectedOrg?.is_owner) return false - - const roles: { roles: Role[] } = useOrganizationRoles(this.selectedOrganization?.slug) - - const membersWhoAreOwners = members.filter((member) => { - const [memberRoleId] = member.role_ids ?? [] - const role = (roles.roles || []).find((role: Role) => role.id === memberRoleId) - return role?.name === 'Owner' && !member.invited_at - }) - - return membersWhoAreOwners.length > 1 - } } From 38a986cb16d84acb8a8581caa7bf91992a60583e Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 19 Dec 2022 16:27:21 +0700 Subject: [PATCH 36/45] Fix --- .../interfaces/Organization/TeamSettings/TeamSettings.utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.utils.ts b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.utils.ts index 600e98cf4be..9651dacc86c 100644 --- a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.utils.ts +++ b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.utils.ts @@ -24,7 +24,7 @@ export const getRolesManagementPermissions = ( return { rolesAddable, rolesRemovable } } -export const hasMultipleOwners = (members: Member[], roles: Role[]) => { +export const hasMultipleOwners = (members: Member[] = [], roles: Role[] = []) => { const membersWhoAreOwners = members.filter((member) => { const [memberRoleId] = member.role_ids ?? [] const role = roles.find((role: Role) => role.id === memberRoleId) From 0dcb4910599f09116ea21335f8ced77c3d4382c0 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Mon, 19 Dec 2022 11:50:42 -0330 Subject: [PATCH 37/45] Update apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx --- .../pages/guides/auth/auth-helpers/nextjs-server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx b/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx index 815073394da..10fa7f73f31 100644 --- a/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx @@ -166,7 +166,7 @@ export const config = { -Create a new file at `/pages/middleware.ts` and populate with the following: +Create a new file at `/middleware.ts` (a sibling of /pages) and populate with the following: ```tsx title="middleware.ts" import { createMiddlewareSupabaseClient } from '@supabase/auth-helpers-nextjs' From 3596082500e3e63c12009df7bda47b1b7161fbc0 Mon Sep 17 00:00:00 2001 From: Sean McPherson Date: Mon, 19 Dec 2022 11:16:01 -0500 Subject: [PATCH 38/45] fix spelling --- .../pages/guides/resources/supabase-cli/local-development.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/resources/supabase-cli/local-development.mdx b/apps/docs/pages/guides/resources/supabase-cli/local-development.mdx index 4586927a3f4..3ff1cb1c82a 100644 --- a/apps/docs/pages/guides/resources/supabase-cli/local-development.mdx +++ b/apps/docs/pages/guides/resources/supabase-cli/local-development.mdx @@ -173,7 +173,7 @@ Use the seed script in `supabase/seed.sql` (created with [`supabase init`](/docs -- in supabase/seed.sql insert into public.employees (name) values - ('Erlich Backman'), + ('Erlich Bachman'), ('Richard Hendricks'), ('Monica Hall'); ``` From 8ce88814df720e64f93df7cc57c2d0a2c31e6f68 Mon Sep 17 00:00:00 2001 From: Chensokheng <52232579+Chensokheng@users.noreply.github.com> Date: Tue, 20 Dec 2022 02:39:04 +0700 Subject: [PATCH 39/45] chore(studio): update color scheme navbar (#9465) update color scheme Co-authored-by: Francisco Mazzoni --- studio/styles/main.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/studio/styles/main.scss b/studio/styles/main.scss index 1629e225f20..e3d187c24c4 100644 --- a/studio/styles/main.scss +++ b/studio/styles/main.scss @@ -216,6 +216,12 @@ div.fixed.inset-0 { } } +@media (prefers-color-scheme: dark) { + html { + color-scheme: dark; + } +} + .text-area-resize-none { textarea { @apply resize-none; From 114800d62d848c00e43779bf5c439542228e4de0 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Mon, 19 Dec 2022 16:16:36 -0330 Subject: [PATCH 40/45] Update apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx --- .../pages/guides/getting-started/tutorials/with-flutter.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx index 8200990d837..6a73c7aa8ab 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx @@ -50,7 +50,7 @@ Add `io.supabase.flutterquickstart://login-callback/` as a new [redirect URL](ht That is it on Supabase's end and the rest are platform specific settings: -For Android, edit the android/app/src/main/AndroidManifest.xml file. +For Android, edit the `android/app/src/main/AndroidManifest.xml` file. Add an intent-filter to enable deep linking: From bb930ca451b42cc2644bca44f28ec0d31a37dea5 Mon Sep 17 00:00:00 2001 From: dng Date: Mon, 19 Dec 2022 12:57:55 -0800 Subject: [PATCH 41/45] Update apps/docs/pages/guides/platform/custom-domains.mdx --- apps/docs/pages/guides/platform/custom-domains.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/platform/custom-domains.mdx b/apps/docs/pages/guides/platform/custom-domains.mdx index 5c0023dff2c..d44be132976 100644 --- a/apps/docs/pages/guides/platform/custom-domains.mdx +++ b/apps/docs/pages/guides/platform/custom-domains.mdx @@ -145,7 +145,7 @@ As with the final activation stage of the process for setting up a vanity subdom Edge functions do not honor the custom domain or the vanity subdomain setting and they still have to be invoked via the `foobarbaz.supabase.co` domain. -A Supabase project can-at this time-use either a Custom Domain, or a Vanity Subdomain, but not both. +A Supabase project can-at this time-use either a Custom Domain or a Vanity Subdomain, but not both. export const Page = ({ children }) => From 9948463e894b2e4b7d5327adc0ba5d32f37a4136 Mon Sep 17 00:00:00 2001 From: dng Date: Mon, 19 Dec 2022 13:06:26 -0800 Subject: [PATCH 42/45] Update apps/docs/pages/guides/platform/custom-domains.mdx --- apps/docs/pages/guides/platform/custom-domains.mdx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/docs/pages/guides/platform/custom-domains.mdx b/apps/docs/pages/guides/platform/custom-domains.mdx index d44be132976..13fedb8e525 100644 --- a/apps/docs/pages/guides/platform/custom-domains.mdx +++ b/apps/docs/pages/guides/platform/custom-domains.mdx @@ -143,9 +143,8 @@ As with the final activation stage of the process for setting up a vanity subdom ## Limitations -Edge functions do not honor the custom domain or the vanity subdomain setting and they still have to be invoked via the `foobarbaz.supabase.co` domain. - -A Supabase project can-at this time-use either a Custom Domain or a Vanity Subdomain, but not both. +- Edge functions do not honor the custom domain or the vanity subdomain setting and they still have to be invoked via the `foobarbaz.supabase.co` domain. +- A Supabase project can—at this time—use either a Custom Domain or a Vanity Subdomain, but not both. export const Page = ({ children }) => From 6bfe68890f58be54f4b982ba0af7d7aa70c4514c Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Mon, 19 Dec 2022 23:06:37 +0000 Subject: [PATCH 43/45] Update video link for flutter flow getting started --- apps/www/_blog/2022-12-16-launch-week-6-community-day.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/_blog/2022-12-16-launch-week-6-community-day.mdx b/apps/www/_blog/2022-12-16-launch-week-6-community-day.mdx index 7e84894bfb6..b0c7f395dc8 100644 --- a/apps/www/_blog/2022-12-16-launch-week-6-community-day.mdx +++ b/apps/www/_blog/2022-12-16-launch-week-6-community-day.mdx @@ -36,7 +36,7 @@ An integration between FlutterFlow and Supabase has been long awaited by the com This is just the beginning of our integration with FlutterFlow. We're working closely with the FlutterFlow team to deliver more features! -Watch John from the FlutterFlow team demonstrate how you can [get started with FlutterFlow and Supabase](https://youtu.be/TmViZsWEBY0). +Watch John from the FlutterFlow team demonstrate how you can [get started with FlutterFlow and Supabase](https://youtu.be/hw9Q-NjASbU). ### OneSignal From c040366fdce6ad2bf35c4a42f3ac221c977ac3f0 Mon Sep 17 00:00:00 2001 From: Bo Lu Date: Tue, 20 Dec 2022 10:59:16 +1100 Subject: [PATCH 44/45] fix broken links --- apps/docs/pages/guides/resources/self-hosting/docker.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/docs/pages/guides/resources/self-hosting/docker.mdx b/apps/docs/pages/guides/resources/self-hosting/docker.mdx index ab14e78b0eb..e3dfed50ca7 100644 --- a/apps/docs/pages/guides/resources/self-hosting/docker.mdx +++ b/apps/docs/pages/guides/resources/self-hosting/docker.mdx @@ -42,11 +42,11 @@ Now visit [http://localhost:3000](http://localhost:3000) to start using Supabase While we provided you with some example secrets for getting started, you should NEVER deploy your Supabase setup using the defaults we have provided. -Please follow these steps to secure your Docker setup. We [strongly recommend](../../guides/hosting/overview#managing-your-secrets) using a secrets manager when deploying to production. +Please follow these steps to secure your Docker setup. We [strongly recommend](../self-hosting#managing-your-secrets) using a secrets manager when deploying to production. ### Generate API Keys -Use your `JWT_SECRET` to generate a `anon` and `service` API keys using the [JWT generator](../../guides/hosting/overview#api-keys). +Use your `JWT_SECRET` to generate a `anon` and `service` API keys using the [JWT generator](../self-hosting#api-keys). Replace the values in these files: @@ -72,7 +72,7 @@ The Docker setup doesn't include a management database for managing users and lo ## Configuration -Each system can be [configured](../../guides/hosting/overview#configuration) to suit your particular use-case. +Each system can be [configured](../self-hosting#configuration) to suit your particular use-case. To keep the setup simple, we made some choices that may not be optimal for production: @@ -82,7 +82,7 @@ To keep the setup simple, we made some choices that may not be optimal for produ ### Using an external database -We strongly [recommend](../../guides/hosting/overview#managing-your-database) that you decouple your database from `docker-compose` before deploying. +We strongly [recommend](../self-hosting#managing-your-database) that you decouple your database from `docker-compose` before deploying. The middleware will run with any PostgreSQL database that has logical replication enabled. The following environment variables should be updated in the `.env` file to point to your external database: From eaf0a39c2a3724fb8f8192c43ef63df9f609a98a Mon Sep 17 00:00:00 2001 From: dng Date: Mon, 19 Dec 2022 16:21:10 -0800 Subject: [PATCH 45/45] Apply suggestions from code review --- apps/docs/pages/guides/resources/self-hosting/docker.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/docs/pages/guides/resources/self-hosting/docker.mdx b/apps/docs/pages/guides/resources/self-hosting/docker.mdx index e3dfed50ca7..066e8ae0efd 100644 --- a/apps/docs/pages/guides/resources/self-hosting/docker.mdx +++ b/apps/docs/pages/guides/resources/self-hosting/docker.mdx @@ -42,7 +42,7 @@ Now visit [http://localhost:3000](http://localhost:3000) to start using Supabase While we provided you with some example secrets for getting started, you should NEVER deploy your Supabase setup using the defaults we have provided. -Please follow these steps to secure your Docker setup. We [strongly recommend](../self-hosting#managing-your-secrets) using a secrets manager when deploying to production. +Follow these steps to secure your Docker setup. We strongly recommend using a [secrets manager](../self-hosting#managing-your-secrets) when deploying to production. ### Generate API Keys @@ -82,7 +82,7 @@ To keep the setup simple, we made some choices that may not be optimal for produ ### Using an external database -We strongly [recommend](../self-hosting#managing-your-database) that you decouple your database from `docker-compose` before deploying. +We strongly recommend [decoupling your database](../self-hosting#managing-your-database) from `docker-compose` before deploying. The middleware will run with any PostgreSQL database that has logical replication enabled. The following environment variables should be updated in the `.env` file to point to your external database: