From c1e251bae47cabbdba118e7159b87cde9803ddd6 Mon Sep 17 00:00:00 2001 From: Isaiah Hamilton Date: Fri, 7 Jan 2022 18:57:35 -0500 Subject: [PATCH 1/4] update start your project link --- www/components/Nav/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/components/Nav/index.tsx b/www/components/Nav/index.tsx index 2b7984e661d..4d92d7ca914 100644 --- a/www/components/Nav/index.tsx +++ b/www/components/Nav/index.tsx @@ -253,7 +253,7 @@ const Nav = (props: Props) => { - + From b580a07c58c9c21d28dffb819a166340194a0d94 Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Sun, 9 Jan 2022 20:58:53 +0100 Subject: [PATCH 2/4] docs: adds all auth events to the doc --- web/spec/supabase.yml | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/web/spec/supabase.yml b/web/spec/supabase.yml index 31c5b301490..25c6d0bb9d4 100644 --- a/web/spec/supabase.yml +++ b/web/spec/supabase.yml @@ -716,6 +716,48 @@ pages: console.log(event, session) }) ``` + - name: Listen to sign in + js: | + ```js + supabase.auth.onAuthStateChange((event, session) => { + if (event == 'SIGNED_IN') console.log('SIGNED_IN', session) + }) + ``` + - name: Listen to sign out + js: | + ```js + supabase.auth.onAuthStateChange((event, session) => { + if (event == 'SIGNED_OUT') console.log('SIGNED_OUT', session) + }) + ``` + - name: Listen to token refresh + js: | + ```js + supabase.auth.onAuthStateChange((event, session) => { + if (event == 'TOKEN_REFRESHED') console.log('TOKEN_REFRESHED', session) + }) + ``` + - name: Listen to user updates + js: | + ```js + supabase.auth.onAuthStateChange((event, session) => { + if (event == 'USER_UPDATED') console.log('USER_UPDATED', session) + }) + ``` + - name: Listen to user deleted + js: | + ```js + supabase.auth.onAuthStateChange((event, session) => { + if (event == 'USER_DELETED') console.log('USER_DELETED', session) + }) + ``` + - name: Listen to password recovery events + js: | + ```js + supabase.auth.onAuthStateChange((event, session) => { + if (event == 'PASSWORD_RECOVERY') console.log('PASSWORD_RECOVERY', session) + }) + ``` auth.api.getUser(): title: 'getUser()' $ref: '@supabase/gotrue-js.GoTrueApi.getUser' From 3cea779b7fc5ac384eeec4e73a8eb84bcca3db05 Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Mon, 10 Jan 2022 17:59:32 +0100 Subject: [PATCH 3/4] changes the issuer to supabase-demo --- docker/.env.example | 4 ++-- docker/volumes/api/kong.yml | 4 ++-- studio/.env | 4 ++-- tests/jest-env.js | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docker/.env.example b/docker/.env.example index 8a12be00005..81009f30577 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -3,8 +3,8 @@ POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password JWT_SECRET=your-super-secret-jwt-token-with-at-least-32-characters-long -ANON_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYyNzIwODU0MCwiZXhwIjoxOTc0MzYzNzQwfQ.zcaQfHd3VA7XgJmdGfmV86OLVJT9s2MTmSy-e69BpUY -SERVICE_ROLE_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaWF0IjoxNjI3MjA4NTQwLCJleHAiOjE5NzQzNjM3NDB9.pkT3PNpO4DtO45Ac5HK_TKCx8sGLgNtV__pr_ZrRSAU +ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE +SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q # Auth diff --git a/docker/volumes/api/kong.yml b/docker/volumes/api/kong.yml index 13a2caa42be..aab2fe55aa0 100644 --- a/docker/volumes/api/kong.yml +++ b/docker/volumes/api/kong.yml @@ -6,10 +6,10 @@ _format_version: "1.1" consumers: - username: anon keyauth_credentials: - - key: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYyNzIwODU0MCwiZXhwIjoxOTc0MzYzNzQwfQ.zcaQfHd3VA7XgJmdGfmV86OLVJT9s2MTmSy-e69BpUY + - key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE - username: service_role keyauth_credentials: - - key: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaWF0IjoxNjI3MjA4NTQwLCJleHAiOjE5NzQzNjM3NDB9.pkT3PNpO4DtO45Ac5HK_TKCx8sGLgNtV__pr_ZrRSAU + - key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q ### ### Access Control List diff --git a/studio/.env b/studio/.env index 6b71a62226e..65f8221f719 100644 --- a/studio/.env +++ b/studio/.env @@ -2,5 +2,5 @@ STUDIO_PG_META_URL=http://localhost:8000/pg POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password SUPABASE_URL=http://localhost:8000 -SUPABASE_ANON_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYyNzIwODU0MCwiZXhwIjoxOTc0MzYzNzQwfQ.zcaQfHd3VA7XgJmdGfmV86OLVJT9s2MTmSy-e69BpUY -SUPABASE_SERVICE_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaWF0IjoxNjI3MjA4NTQwLCJleHAiOjE5NzQzNjM3NDB9.pkT3PNpO4DtO45Ac5HK_TKCx8sGLgNtV__pr_ZrRSAU \ No newline at end of file +SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE +SUPABASE_SERVICE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q \ No newline at end of file diff --git a/tests/jest-env.js b/tests/jest-env.js index 04916049a19..66cd730acd9 100644 --- a/tests/jest-env.js +++ b/tests/jest-env.js @@ -1,5 +1,5 @@ process.env.SUPABASE_URL = 'http://localhost:8000' process.env.SUPABASE_KEY_ANON = - 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYyNzIwODU0MCwiZXhwIjoxOTc0MzYzNzQwfQ.zcaQfHd3VA7XgJmdGfmV86OLVJT9s2MTmSy-e69BpUY' + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE' process.env.SUPABASE_KEY_ADMIN = - 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaWF0IjoxNjI3MjA4NTQwLCJleHAiOjE5NzQzNjM3NDB9.pkT3PNpO4DtO45Ac5HK_TKCx8sGLgNtV__pr_ZrRSAU' \ No newline at end of file + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q' \ No newline at end of file From d6deeb3916be7d8d9960782b8e8f14ab1ea7c93e Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 11 Jan 2022 16:27:42 +0800 Subject: [PATCH 4/4] Fix not org owner error when creating project after creating a new org --- studio/pages/new/index.tsx | 12 +++++------- studio/stores/app/AppStore.ts | 18 +++++++++++------- studio/types/base.ts | 8 ++++++-- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/studio/pages/new/index.tsx b/studio/pages/new/index.tsx index e095e1b1648..8d2cf5477e1 100644 --- a/studio/pages/new/index.tsx +++ b/studio/pages/new/index.tsx @@ -1,7 +1,7 @@ import { useState } from 'react' import { observer } from 'mobx-react-lite' import { Button, Typography } from '@supabase/ui' -import Router from 'next/router' +import { useRouter } from 'next/router' import { API_URL } from 'lib/constants' import { useStore, withAuth } from 'hooks' @@ -15,6 +15,8 @@ import Panel from 'components/to-be-cleaned/Panel' */ const Wizard = () => { const { ui, app } = useStore() + const router = useRouter() + const [orgName, setOrgName] = useState('') const [newOrgLoading, setNewOrgLoading] = useState(false) @@ -49,11 +51,7 @@ const Wizard = () => { } else { const org = response app.onOrgAdded(org) - - // Router.push('/new/[slug]', `/new/${org.slug}`) - // Using window.location.href for now as organization metadata needs to refresh - // We do not get is_owner nor stripe_customer_id from the response here - window.location.href = `/new/${org.slug}` + router.push(`/new/${org.slug}`) } } @@ -70,7 +68,7 @@ const Wizard = () => { ]} footer={[
-
diff --git a/studio/stores/app/AppStore.ts b/studio/stores/app/AppStore.ts index b50a0bebfd0..4ce562ef5b8 100644 --- a/studio/stores/app/AppStore.ts +++ b/studio/stores/app/AppStore.ts @@ -1,6 +1,6 @@ import { cloneDeep } from 'lodash' import { values } from 'mobx' -import { Project } from 'types' +import { Organization, Project } from 'types' import { API_URL, STRIPE_PRODUCT_IDS } from 'lib/constants' import { IRootStore } from '../RootStore' @@ -71,19 +71,23 @@ export default class AppStore implements IAppStore { } } - onOrgUpdated(org: any) { - if (org && org.id) { - this.organizations.data[org.id] = { ...org } + onOrgUpdated(updatedOrg: Organization) { + if (updatedOrg && updatedOrg.id) { + const originalOrg = this.organizations.data[updatedOrg.id] + this.organizations.data[updatedOrg.id] = { + ...originalOrg, + ...updatedOrg, + } } } - onOrgAdded(org: any) { + onOrgAdded(org: Organization) { if (org && org.id) { - this.organizations.data[org.id] = { ...org } + this.organizations.data[org.id] = org } } - onOrgDeleted(org: any) { + onOrgDeleted(org: Organization) { if (org && org.id) { const projects = values(this.projects.data) // cleanup projects saved queries diff --git a/studio/types/base.ts b/studio/types/base.ts index 08799a0c9c0..f4ebb0b542f 100644 --- a/studio/types/base.ts +++ b/studio/types/base.ts @@ -4,9 +4,13 @@ export interface Organization { name: string billing_email: string project_limit: number - stripe_customer_id?: string - total_free_projects?: number + members: any[] + projects: any[] is_owner?: boolean + stripe_customer_id?: string + stripe_customer_object?: any + total_free_projects?: number + total_paid_projects?: number } export interface Project {