(null)
- const columns = ['timestamp', 'event_message'].map((v) => ({
+ const columnNames = Object.keys(data[0] || {})
+ // whether the data structure is LogData format.
+ const hasLogDataFormat =
+ columnNames.includes('timestamp') &&
+ columnNames.includes('event_message') &&
+ columnNames.length === 4
+
+ const columns = (hasLogDataFormat ? ['timestamp', 'event_message'] : columnNames).map((v) => ({
key: v,
name: v,
- width: v === 'timestamp' ? 210 : undefined,
+ width: hasLogDataFormat && v === 'timestamp' ? 210 : undefined,
resizable: true,
headerRenderer: () => {
return {v}
},
formatter: ({ row }: any) => {
let value = row[v]
- if (v === 'timestamp') {
+ if (hasLogDataFormat && v === 'timestamp') {
value = dayjs(Number(row['timestamp']) / 1000).toISOString()
}
return (
{value}
@@ -44,20 +54,23 @@ const LogTable = ({ isCustomQuery, data }: Props) => {
},
}))
- const logMap: { [id: string]: LogData } = useMemo(() => {
- return (data || []).reduce((acc: any, d) => {
+ const logMap = useMemo(() => {
+ if (!hasLogDataFormat) return {} as LogMap
+ const logData = data as LogData[]
+ return logData.reduce((acc: LogMap, d: LogData) => {
acc[d.id] = d
return acc
- }, {})
+ }, {}) as LogMap
}, [JSON.stringify(data)])
- const strLogMap = JSON.stringify(logMap)
+ const stringData = JSON.stringify(data)
useEffect(() => {
+ if (!hasLogDataFormat) return
if (isNil(data)) return
if (focusedLog && !(focusedLog.id in logMap)) {
setFocusedLog(null)
}
- }, [strLogMap])
+ }, [stringData])
if (!data) return null
@@ -65,15 +78,18 @@ const LogTable = ({ isCustomQuery, data }: Props) => {
const maxHeight = isCustomQuery ? 'calc(100vh - 42px - 10rem)' : 'calc(100vh - 42px - 3rem)'
const logDataRows = useMemo(() => {
- // sort in timestamp descending order
+ if (!hasLogDataFormat) return data
return Object.values(logMap).sort((a, b) => b.timestamp - a.timestamp)
- }, [strLogMap])
+ }, [stringData])
return (
setFocusedLog(data[rowIdx])}
+ onSelectedCellChange={({ idx, rowIdx }) => {
+ if (!hasLogDataFormat) return
+ setFocusedLog(data[rowIdx] as LogData)
+ }}
noRowsFallback={
@@ -82,10 +98,22 @@ const LogTable = ({ isCustomQuery, data }: Props) => {
}
columns={columns as any}
- rowClass={(r) => `${r.id === focusedLog?.id ? 'bg-green-800' : 'cursor-pointer'}`}
+ rowClass={(r) => {
+ if (!hasLogDataFormat) return 'cursor-pointer'
+ const row = r as LogData
+ return `${row.id === focusedLog?.id ? 'bg-green-800' : 'cursor-pointer'}`
+ }}
rows={logDataRows}
- rowKeyGetter={(r) => r.id}
- onRowClick={(r) => setFocusedLog(logMap[r.id])}
+ rowKeyGetter={(r) => {
+ if (!hasLogDataFormat) return Object.keys(r)[0]
+ const row = r as LogData
+ return row.id
+ }}
+ onRowClick={(r) => {
+ if (!hasLogDataFormat) return
+ const row = r as LogData
+ setFocusedLog(logMap[row.id])
+ }}
/>
{focusedLog && (
diff --git a/studio/components/layouts/AccountLayout/AccountLayout.tsx b/studio/components/layouts/AccountLayout/AccountLayout.tsx
index 48bf14c7900..3099c8e54b4 100644
--- a/studio/components/layouts/AccountLayout/AccountLayout.tsx
+++ b/studio/components/layouts/AccountLayout/AccountLayout.tsx
@@ -5,7 +5,7 @@ import { observer } from 'mobx-react-lite'
import { API_URL, IS_PLATFORM } from 'lib/constants'
import { useStore } from 'hooks'
import WithSidebar from './WithSidebar'
-import { auth, GOTRUE_ENABLED } from 'lib/gotrue'
+import { auth } from 'lib/gotrue'
/**
* layout for dashboard homepage, account and org settings
@@ -25,16 +25,14 @@ const AccountLayout = ({ children, title, breadcrumbs }: any) => {
router.reload()
}
- let baseLogoutLink = {
+ const baseLogoutLink = {
icon: '/icons/feather/power.svg',
label: 'Logout',
href: `${API_URL}/logout`,
key: `${API_URL}/logout`,
}
- let logoutLink = GOTRUE_ENABLED
- ? { ...baseLogoutLink, href: undefined, onClick: onClickLogout }
- : baseLogoutLink
+ const logoutLink = { ...baseLogoutLink, href: undefined, onClick: onClickLogout }
const organizationsLinks = app.organizations
.list()
diff --git a/studio/components/ui/PasswordStrengthBar.tsx b/studio/components/ui/PasswordStrengthBar.tsx
new file mode 100644
index 00000000000..25d4729a994
--- /dev/null
+++ b/studio/components/ui/PasswordStrengthBar.tsx
@@ -0,0 +1,53 @@
+import {
+ DEFAULT_MINIMUM_PASSWORD_STRENGTH,
+ PASSWORD_STRENGTH_COLOR,
+ PASSWORD_STRENGTH_PERCENTAGE,
+} from 'lib/constants'
+import { Typography } from '@supabase/ui'
+
+interface Props {
+ passwordStrengthScore: number
+ passwordStrengthMessage: string
+ password: string
+}
+
+const PasswordStrengthBar = ({
+ passwordStrengthScore = 0,
+ passwordStrengthMessage = '',
+ password = '',
+}: Props) => {
+ return (
+ <>
+ {password && (
+
+ )}
+
= DEFAULT_MINIMUM_PASSWORD_STRENGTH ? 'text-green-600' : ''
+ }
+ >
+ {passwordStrengthMessage
+ ? passwordStrengthMessage
+ : 'This is the password to your postgres database, so it must be a strong password and hard to guess.'}
+
+ >
+ )
+}
+
+export default PasswordStrengthBar
diff --git a/studio/lib/api/apiAuthenticate.ts b/studio/lib/api/apiAuthenticate.ts
index 54a3c5b52a2..b3f195d2983 100644
--- a/studio/lib/api/apiAuthenticate.ts
+++ b/studio/lib/api/apiAuthenticate.ts
@@ -1,11 +1,7 @@
import type { NextApiRequest, NextApiResponse } from 'next'
-import { Claims } from '@auth0/nextjs-auth0'
import { readOnly } from './supabaseClient'
import { SupaResponse, User } from 'types'
-import { auth0 } from './auth0'
-import { flattenNamespaceOnUser } from './apiHelpers'
-import { config } from 'process'
-import { getAuth0Id, getAuthUser, getIdentity, GOTRUE_ENABLED } from 'lib/gotrue'
+import { getAuth0Id, getAuthUser, getIdentity } from 'lib/gotrue'
/**
* Use this method on api routes to check if user is authenticated and having required permissions.
@@ -32,10 +28,6 @@ export async function apiAuthenticate(
const { slug: orgSlug, ref: projectRef } = req.query
try {
- // Check that they are logged in
- // If no error throw from getAccessToken. That's good, we can continue
- if (!(GOTRUE_ENABLED)) await auth0.getAccessToken(req, res)
-
const user = await fetchUser(req, res)
if (!user) {
return { error: new Error('The user does not exist') } as unknown as SupaResponse
@@ -59,35 +51,24 @@ async function fetchUser(req: NextApiRequest, res: NextApiResponse): Promise {
- fn(req, res, (result: any) => {
- if (result instanceof Error) {
- return reject(result)
- }
-
- return resolve(result)
- })
- })
-}
diff --git a/studio/lib/common/fetch/base.ts b/studio/lib/common/fetch/base.ts
index e78b452e198..7206fdbab4c 100644
--- a/studio/lib/common/fetch/base.ts
+++ b/studio/lib/common/fetch/base.ts
@@ -1,4 +1,3 @@
-import { GOTRUE_ENABLED } from 'lib/gotrue'
import { tryParseJson } from 'lib/helpers'
import { isUndefined } from 'lodash'
import { SupaResponse } from 'types/base'
@@ -110,7 +109,7 @@ export function constructHeaders(requestId: string, optionHeaders?: { [prop: str
}
const hasAuthHeader = !isUndefined(optionHeaders) && 'Authorization' in optionHeaders
- if (GOTRUE_ENABLED && !hasAuthHeader) {
+ if (!hasAuthHeader) {
const accessToken = getAccessToken()
if (accessToken) headers.Authorization = `Bearer ${accessToken}`
}
diff --git a/studio/lib/constants/infrastructure.ts b/studio/lib/constants/infrastructure.ts
index 0baa0f5063d..5c138eb240a 100644
--- a/studio/lib/constants/infrastructure.ts
+++ b/studio/lib/constants/infrastructure.ts
@@ -117,7 +117,7 @@ export const PASSWORD_STRENGTH = {
export const PASSWORD_STRENGTH_COLOR = {
0: 'bg-red-500',
- 1: 'bg-red-400',
+ 1: 'bg-red-500',
2: 'bg-yellow-500',
3: 'bg-yellow-500',
4: 'bg-green-500',
diff --git a/studio/lib/gotrue.ts b/studio/lib/gotrue.ts
index a4766f3ebbb..cbdfdf1772b 100644
--- a/studio/lib/gotrue.ts
+++ b/studio/lib/gotrue.ts
@@ -1,6 +1,5 @@
import { GoTrueClient, User } from '@supabase/gotrue-js'
-export const GOTRUE_ENABLED = (process.env.NEXT_PUBLIC_GOTRUE_ENABLED === 'true') || false
export const GOTRUE_URL = process.env.NEXT_PUBLIC_GOTRUE_URL || 'http://localhost:8000/auth/v1'
export const auth = new GoTrueClient({
@@ -8,7 +7,7 @@ export const auth = new GoTrueClient({
autoRefreshToken: true,
})
-export const getAuthUser = async (token: String): Promise => {
+export const getAuthUser = async (token: String): Promise => {
try {
const { data: user, error } = await auth.api.getUser(token.replace('Bearer ', ''))
if (error) throw error
diff --git a/studio/lib/helpers.ts b/studio/lib/helpers.ts
index 9570b1d1f67..286697320bf 100644
--- a/studio/lib/helpers.ts
+++ b/studio/lib/helpers.ts
@@ -1,3 +1,6 @@
+import { post } from 'lib/common/fetch'
+import { PASSWORD_STRENGTH, DEFAULT_MINIMUM_PASSWORD_STRENGTH, API_URL } from 'lib/constants'
+
export const tryParseJson = (jsonString: any) => {
try {
let parsed = JSON.parse(jsonString)
@@ -161,3 +164,37 @@ export const copyToClipboard = (str: string, callback = () => {}) => {
console.warn('Unable to copy to clipboard')
}
}
+
+export async function passwordStrength(value: string) {
+ let message = ''
+ let warning = ''
+ let strength = 0
+
+ if (value && value !== '') {
+ const response = await post(`${API_URL}/profile/password-check`, { password: value })
+ if (!response.error) {
+ const { result } = response
+ const score = (PASSWORD_STRENGTH as any)[result.score]
+ const suggestions = result.feedback?.suggestions ? result.feedback.suggestions.join(' ') : ''
+
+ // set message :string
+ message = `${score} ${suggestions}`
+
+ // set strength :number
+ strength = result.score
+
+ // warning message for anything below 4 strength :string
+ if (result.score < DEFAULT_MINIMUM_PASSWORD_STRENGTH) {
+ warning = `${
+ result?.feedback?.warning ? result?.feedback?.warning + '.' : ''
+ } You need a stronger password.`
+ }
+ }
+ }
+
+ return {
+ message,
+ warning,
+ strength,
+ }
+}
diff --git a/studio/package-lock.json b/studio/package-lock.json
index 86f5b809ac1..234174592e5 100644
--- a/studio/package-lock.json
+++ b/studio/package-lock.json
@@ -8,7 +8,6 @@
"name": "studio",
"version": "0.0.8",
"dependencies": {
- "@auth0/nextjs-auth0": "^1.6.1",
"@headlessui/react": "^1.4.1",
"@monaco-editor/react": "^4.3.1",
"@next/bundle-analyzer": "^12.0.4",
@@ -19,7 +18,7 @@
"@supabase/grid": "^2.3.9",
"@supabase/postgres-meta": "^0.26.1",
"@supabase/react-data-grid": "^7.1.0-beta.7",
- "@supabase/supabase-js": "^1.28.0",
+ "@supabase/supabase-js": "^1.29.1",
"@supabase/ui": "^0.35.0",
"ajv": "^8.6.3",
"analytics-node": "^3.5.0",
@@ -87,79 +86,6 @@
"typescript": "4.3.4"
}
},
- "node_modules/@auth0/nextjs-auth0": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/@auth0/nextjs-auth0/-/nextjs-auth0-1.6.1.tgz",
- "integrity": "sha512-xecYNjI1KvFerzarMUS6p7coWWAI7/JeJ9iMxj+ztIo+VJfR9CkYV2b/Fu3A2iy+UYbIoG78YV2plOynAIUOwQ==",
- "dependencies": {
- "base64url": "^3.0.1",
- "cookie": "^0.4.1",
- "debug": "^4.3.2",
- "futoin-hkdf": "^1.4.2",
- "http-errors": "^1.8.0",
- "joi": "^17.4.1",
- "jose": "^2.0.5",
- "on-headers": "^1.0.2",
- "openid-client": "^4.9.0",
- "tslib": "^2.3.1",
- "url-join": "^4.0.1"
- },
- "engines": {
- "node": "^10.13.0 || >=12.0.0"
- },
- "peerDependencies": {
- "next": ">=10"
- }
- },
- "node_modules/@auth0/nextjs-auth0/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@auth0/nextjs-auth0/node_modules/http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/@auth0/nextjs-auth0/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/@auth0/nextjs-auth0/node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
- },
- "node_modules/@auth0/nextjs-auth0/node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "engines": {
- "node": ">=0.6"
- }
- },
"node_modules/@babel/code-frame": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
@@ -948,14 +874,6 @@
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
"integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug=="
},
- "node_modules/@hapi/topo": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
- "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
- "dependencies": {
- "@hapi/hoek": "^9.0.0"
- }
- },
"node_modules/@headlessui/react": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.4.1.tgz",
@@ -2178,14 +2096,6 @@
"node": ">= 8"
}
},
- "node_modules/@panva/asn1.js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz",
- "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==",
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/@polka/url": {
"version": "1.0.0-next.21",
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz",
@@ -2737,40 +2647,11 @@
"node": ">= 8"
}
},
- "node_modules/@sideway/address": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz",
- "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==",
- "dependencies": {
- "@hapi/hoek": "^9.0.0"
- }
- },
- "node_modules/@sideway/formula": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz",
- "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg=="
- },
- "node_modules/@sideway/pinpoint": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
- "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
- },
"node_modules/@sinclair/typebox": {
"version": "0.19.2",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.19.2.tgz",
"integrity": "sha512-0U/RVPZQw1QxhrbKV0o281ZWI1Ve3osJnyEYnwOp3slydIQHyXumbJANJeNv9BqABDiHWlmzsxSVopPHMvt3Aw=="
},
- "node_modules/@sindresorhus/is": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz",
- "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/is?sponsor=1"
- }
- },
"node_modules/@sinonjs/commons": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
@@ -2858,9 +2739,9 @@
}
},
"node_modules/@supabase/realtime-js": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-1.3.3.tgz",
- "integrity": "sha512-9D79jlo/56VQf/U7TWhu24epCoj0vWJ7ALkGcqci8Luk/iOcdCxY1NJ76BbS1UnpXEIvQxQGb1R5NSexriKcUA==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-1.3.4.tgz",
+ "integrity": "sha512-N9xerTleMp6OKgsqYp0WujYJvKplMxhSJ9agTvAL6vc/+4hh5uxak4wLpgqigy3ZBzpRUSYty7hDyS017+waiw==",
"dependencies": {
"@types/websocket": "^1.0.3",
"websocket": "^1.0.34"
@@ -2875,13 +2756,13 @@
}
},
"node_modules/@supabase/supabase-js": {
- "version": "1.28.5",
- "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-1.28.5.tgz",
- "integrity": "sha512-RZFSkj0tC6YppUVOBDldLLko4BgV8ASY+OiXC1ZxpcwmNInPgGiDkv59kVPN1UC96vnRQ/1fbFngPcwTtb1Qjw==",
+ "version": "1.29.1",
+ "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-1.29.1.tgz",
+ "integrity": "sha512-5UPgB93XCzALTpbuwvEGH+Y7i3YBY3y3y96uNnzAWYerGWlqx2kIVmV++GAiEPp/tp+QRsv103AoLKiP3dP2DA==",
"dependencies": {
"@supabase/gotrue-js": "^1.21.7",
"@supabase/postgrest-js": "^0.35.0",
- "@supabase/realtime-js": "^1.3.3",
+ "@supabase/realtime-js": "^1.3.4",
"@supabase/storage-js": "^1.5.0"
}
},
@@ -2901,17 +2782,6 @@
"react-dom": "^16.13.1 || ^17.0.1"
}
},
- "node_modules/@szmarczak/http-timer": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
- "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
- "dependencies": {
- "defer-to-connect": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@testing-library/dom": {
"version": "8.11.1",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.1.tgz",
@@ -3090,17 +2960,6 @@
"@babel/types": "^7.3.0"
}
},
- "node_modules/@types/cacheable-request": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
- "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==",
- "dependencies": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "*",
- "@types/node": "*",
- "@types/responselike": "*"
- }
- },
"node_modules/@types/crypto-js": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz",
@@ -3169,11 +3028,6 @@
"hoist-non-react-statics": "^3.3.0"
}
},
- "node_modules/@types/http-cache-semantics": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
- "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ=="
- },
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
@@ -3209,14 +3063,6 @@
"@types/tough-cookie": "*"
}
},
- "node_modules/@types/keyv": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz",
- "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/lodash": {
"version": "4.14.173",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.173.tgz",
@@ -3360,14 +3206,6 @@
"resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.6.tgz",
"integrity": "sha512-61IfTac0s9jvNtBCpyo86QeaN8qqpMGHdK0uGKCCIy2dt5/Yk84VduHIdWAcmkC5QvdkPL0p5eWYgUZtHKKUVg=="
},
- "node_modules/@types/responselike": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/scheduler": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
@@ -3506,18 +3344,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/ajv": {
"version": "8.6.3",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
@@ -4014,14 +3840,6 @@
}
]
},
- "node_modules/base64url": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
- "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -4243,31 +4061,6 @@
"node": ">= 0.8"
}
},
- "node_modules/cacheable-lookup": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
- "engines": {
- "node": ">=10.6.0"
- }
- },
- "node_modules/cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
- "dependencies": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -4392,14 +4185,6 @@
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
"integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
},
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/clipboard": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz",
@@ -4456,14 +4241,6 @@
"node": ">=8"
}
},
- "node_modules/clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dependencies": {
- "mimic-response": "^1.0.0"
- }
- },
"node_modules/clsx": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
@@ -4989,31 +4766,6 @@
"resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
"integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
},
- "node_modules/decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "dependencies": {
- "mimic-response": "^3.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decompress-response/node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/dedent": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
@@ -5035,14 +4787,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/defer-to-connect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
- "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -5285,14 +5029,6 @@
"iconv-lite": "^0.6.2"
}
},
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -5772,14 +5508,6 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
- "node_modules/futoin-hkdf": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz",
- "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
@@ -5861,20 +5589,6 @@
"node": ">=8.0.0"
}
},
- "node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/get-symbol-description": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
@@ -5942,30 +5656,6 @@
"delegate": "^3.1.2"
}
},
- "node_modules/got": {
- "version": "11.8.2",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz",
- "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==",
- "dependencies": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.1",
- "decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
- },
- "engines": {
- "node": ">=10.19.0"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/got?sponsor=1"
- }
- },
"node_modules/graceful-fs": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
@@ -6140,11 +5830,6 @@
"node": ">=8"
}
},
- "node_modules/http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
- },
"node_modules/http-errors": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
@@ -6197,18 +5882,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
- "dependencies": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
- },
- "engines": {
- "node": ">=10.19.0"
- }
- },
"node_modules/https-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
@@ -6384,14 +6057,6 @@
"node": ">=0.8.19"
}
},
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -9460,37 +9125,11 @@
"node": ">=8"
}
},
- "node_modules/joi": {
- "version": "17.4.2",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.2.tgz",
- "integrity": "sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw==",
- "dependencies": {
- "@hapi/hoek": "^9.0.0",
- "@hapi/topo": "^5.0.0",
- "@sideway/address": "^4.1.0",
- "@sideway/formula": "^3.0.0",
- "@sideway/pinpoint": "^2.0.0"
- }
- },
"node_modules/join-component": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz",
"integrity": "sha1-uEF7dQZho5K+4sJTfGiyqdSXfNU="
},
- "node_modules/jose": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz",
- "integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==",
- "dependencies": {
- "@panva/asn1.js": "^1.0.0"
- },
- "engines": {
- "node": ">=10.13.0 < 13 || >=13.7.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/panva"
- }
- },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -9613,11 +9252,6 @@
"node": ">=4"
}
},
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
- },
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -9655,14 +9289,6 @@
"graceful-fs": "^4.1.6"
}
},
- "node_modules/keyv": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz",
- "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
"node_modules/kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -9831,14 +9457,6 @@
"resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.7.14.tgz",
"integrity": "sha512-J+QEPse7Rws0XvTqRJNtcE8cszb5FWYFHubEK6bgDJtw64/AQJ40aazbWXsWGBM4sm/PgLBLgmmhDU4QpLiieg=="
},
- "node_modules/lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/lru_map": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
@@ -9848,6 +9466,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -9881,7 +9500,8 @@
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
},
"node_modules/makeerror": {
"version": "1.0.12",
@@ -10014,14 +9634,6 @@
"node": ">=6"
}
},
- "node_modules/mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -10537,17 +10149,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -10597,6 +10198,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
"integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
+ "dev": true,
"engines": {
"node": ">= 6"
}
@@ -10649,26 +10251,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/oidc-token-hash": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz",
- "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==",
- "engines": {
- "node": "^10.13.0 || >=12.0.0"
- }
- },
- "node_modules/on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
"dependencies": {
"wrappy": "1"
}
@@ -10701,26 +10288,6 @@
"opener": "bin/opener-bin.js"
}
},
- "node_modules/openid-client": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.9.1.tgz",
- "integrity": "sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w==",
- "dependencies": {
- "aggregate-error": "^3.1.0",
- "got": "^11.8.0",
- "jose": "^2.0.5",
- "lru-cache": "^6.0.0",
- "make-error": "^1.3.6",
- "object-hash": "^2.0.1",
- "oidc-token-hash": "^5.0.1"
- },
- "engines": {
- "node": "^10.19.0 || >=12.0.0 < 13 || >=13.7.0 < 14 || >= 14.2.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/panva"
- }
- },
"node_modules/optionator": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
@@ -10743,14 +10310,6 @@
"resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
},
- "node_modules/p-cancelable": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@@ -11378,15 +10937,6 @@
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
},
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"node_modules/punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -11459,6 +11009,7 @@
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true,
"engines": {
"node": ">=10"
},
@@ -12024,11 +11575,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/resolve-alpn": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
- },
"node_modules/resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
@@ -12068,14 +11614,6 @@
"node": ">=10"
}
},
- "node_modules/responselike": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
- "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
- "dependencies": {
- "lowercase-keys": "^2.0.0"
- }
- },
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -13244,11 +12782,6 @@
"querystring": "0.2.0"
}
},
- "node_modules/url-join": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
- "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="
- },
"node_modules/url/node_modules/punycode": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
@@ -13735,7 +13268,8 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
},
"node_modules/write-file-atomic": {
"version": "3.0.3",
@@ -13809,7 +13343,8 @@
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
},
"node_modules/yaml": {
"version": "1.10.2",
@@ -13900,61 +13435,6 @@
}
},
"dependencies": {
- "@auth0/nextjs-auth0": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/@auth0/nextjs-auth0/-/nextjs-auth0-1.6.1.tgz",
- "integrity": "sha512-xecYNjI1KvFerzarMUS6p7coWWAI7/JeJ9iMxj+ztIo+VJfR9CkYV2b/Fu3A2iy+UYbIoG78YV2plOynAIUOwQ==",
- "requires": {
- "base64url": "^3.0.1",
- "cookie": "^0.4.1",
- "debug": "^4.3.2",
- "futoin-hkdf": "^1.4.2",
- "http-errors": "^1.8.0",
- "joi": "^17.4.1",
- "jose": "^2.0.5",
- "on-headers": "^1.0.2",
- "openid-client": "^4.9.0",
- "tslib": "^2.3.1",
- "url-join": "^4.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
- },
- "toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
- }
- }
- },
"@babel/code-frame": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
@@ -14564,14 +14044,6 @@
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
"integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug=="
},
- "@hapi/topo": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
- "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
- "requires": {
- "@hapi/hoek": "^9.0.0"
- }
- },
"@headlessui/react": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.4.1.tgz",
@@ -15477,11 +14949,6 @@
"fastq": "^1.6.0"
}
},
- "@panva/asn1.js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz",
- "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw=="
- },
"@polka/url": {
"version": "1.0.0-next.21",
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz",
@@ -15945,34 +15412,11 @@
"@sentry/cli": "^1.70.1"
}
},
- "@sideway/address": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz",
- "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==",
- "requires": {
- "@hapi/hoek": "^9.0.0"
- }
- },
- "@sideway/formula": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz",
- "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg=="
- },
- "@sideway/pinpoint": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
- "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
- },
"@sinclair/typebox": {
"version": "0.19.2",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.19.2.tgz",
"integrity": "sha512-0U/RVPZQw1QxhrbKV0o281ZWI1Ve3osJnyEYnwOp3slydIQHyXumbJANJeNv9BqABDiHWlmzsxSVopPHMvt3Aw=="
},
- "@sindresorhus/is": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz",
- "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw=="
- },
"@sinonjs/commons": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
@@ -16046,9 +15490,9 @@
}
},
"@supabase/realtime-js": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-1.3.3.tgz",
- "integrity": "sha512-9D79jlo/56VQf/U7TWhu24epCoj0vWJ7ALkGcqci8Luk/iOcdCxY1NJ76BbS1UnpXEIvQxQGb1R5NSexriKcUA==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-1.3.4.tgz",
+ "integrity": "sha512-N9xerTleMp6OKgsqYp0WujYJvKplMxhSJ9agTvAL6vc/+4hh5uxak4wLpgqigy3ZBzpRUSYty7hDyS017+waiw==",
"requires": {
"@types/websocket": "^1.0.3",
"websocket": "^1.0.34"
@@ -16063,13 +15507,13 @@
}
},
"@supabase/supabase-js": {
- "version": "1.28.5",
- "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-1.28.5.tgz",
- "integrity": "sha512-RZFSkj0tC6YppUVOBDldLLko4BgV8ASY+OiXC1ZxpcwmNInPgGiDkv59kVPN1UC96vnRQ/1fbFngPcwTtb1Qjw==",
+ "version": "1.29.1",
+ "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-1.29.1.tgz",
+ "integrity": "sha512-5UPgB93XCzALTpbuwvEGH+Y7i3YBY3y3y96uNnzAWYerGWlqx2kIVmV++GAiEPp/tp+QRsv103AoLKiP3dP2DA==",
"requires": {
"@supabase/gotrue-js": "^1.21.7",
"@supabase/postgrest-js": "^0.35.0",
- "@supabase/realtime-js": "^1.3.3",
+ "@supabase/realtime-js": "^1.3.4",
"@supabase/storage-js": "^1.5.0"
}
},
@@ -16083,14 +15527,6 @@
"prop-types": "^15.7.2"
}
},
- "@szmarczak/http-timer": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
- "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
- "requires": {
- "defer-to-connect": "^2.0.0"
- }
- },
"@testing-library/dom": {
"version": "8.11.1",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.1.tgz",
@@ -16230,17 +15666,6 @@
"@babel/types": "^7.3.0"
}
},
- "@types/cacheable-request": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
- "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==",
- "requires": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "*",
- "@types/node": "*",
- "@types/responselike": "*"
- }
- },
"@types/crypto-js": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz",
@@ -16309,11 +15734,6 @@
"hoist-non-react-statics": "^3.3.0"
}
},
- "@types/http-cache-semantics": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
- "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ=="
- },
"@types/istanbul-lib-coverage": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
@@ -16349,14 +15769,6 @@
"@types/tough-cookie": "*"
}
},
- "@types/keyv": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz",
- "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==",
- "requires": {
- "@types/node": "*"
- }
- },
"@types/lodash": {
"version": "4.14.173",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.173.tgz",
@@ -16499,14 +15911,6 @@
"resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.6.tgz",
"integrity": "sha512-61IfTac0s9jvNtBCpyo86QeaN8qqpMGHdK0uGKCCIy2dt5/Yk84VduHIdWAcmkC5QvdkPL0p5eWYgUZtHKKUVg=="
},
- "@types/responselike": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
- "requires": {
- "@types/node": "*"
- }
- },
"@types/scheduler": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
@@ -16627,15 +16031,6 @@
}
}
},
- "aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- }
- },
"ajv": {
"version": "8.6.3",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
@@ -17018,11 +16413,6 @@
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
- "base64url": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
- "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A=="
- },
"big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -17214,25 +16604,6 @@
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
- "cacheable-lookup": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="
- },
- "cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
- }
- },
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -17327,11 +16698,6 @@
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
"integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
},
- "clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
- },
"clipboard": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz",
@@ -17383,14 +16749,6 @@
}
}
},
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
"clsx": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
@@ -17865,21 +17223,6 @@
"resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
"integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
},
- "decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "requires": {
- "mimic-response": "^3.1.0"
- },
- "dependencies": {
- "mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="
- }
- }
- },
"dedent": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
@@ -17898,11 +17241,6 @@
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
"dev": true
},
- "defer-to-connect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
- "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="
- },
"define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -18106,14 +17444,6 @@
"iconv-lite": "^0.6.2"
}
},
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "requires": {
- "once": "^1.4.0"
- }
- },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -18479,11 +17809,6 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
- "futoin-hkdf": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz",
- "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ=="
- },
"gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
@@ -18549,14 +17874,6 @@
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true
},
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
"get-symbol-description": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
@@ -18606,24 +17923,6 @@
"delegate": "^3.1.2"
}
},
- "got": {
- "version": "11.8.2",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz",
- "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==",
- "requires": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.1",
- "decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
- }
- },
"graceful-fs": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
@@ -18761,11 +18060,6 @@
"integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==",
"dev": true
},
- "http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
- },
"http-errors": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
@@ -18806,15 +18100,6 @@
}
}
},
- "http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
- "requires": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
- }
- },
"https-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
@@ -18933,11 +18218,6 @@
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
- },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -21230,31 +20510,11 @@
}
}
},
- "joi": {
- "version": "17.4.2",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.2.tgz",
- "integrity": "sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw==",
- "requires": {
- "@hapi/hoek": "^9.0.0",
- "@hapi/topo": "^5.0.0",
- "@sideway/address": "^4.1.0",
- "@sideway/formula": "^3.0.0",
- "@sideway/pinpoint": "^2.0.0"
- }
- },
"join-component": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz",
"integrity": "sha1-uEF7dQZho5K+4sJTfGiyqdSXfNU="
},
- "jose": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz",
- "integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==",
- "requires": {
- "@panva/asn1.js": "^1.0.0"
- }
- },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -21344,11 +20604,6 @@
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
},
- "json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
- },
"json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -21378,14 +20633,6 @@
"universalify": "^2.0.0"
}
},
- "keyv": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz",
- "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==",
- "requires": {
- "json-buffer": "3.0.1"
- }
- },
"kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -21527,11 +20774,6 @@
"resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.7.14.tgz",
"integrity": "sha512-J+QEPse7Rws0XvTqRJNtcE8cszb5FWYFHubEK6bgDJtw64/AQJ40aazbWXsWGBM4sm/PgLBLgmmhDU4QpLiieg=="
},
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
- },
"lru_map": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
@@ -21541,6 +20783,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
"requires": {
"yallist": "^4.0.0"
}
@@ -21562,7 +20805,8 @@
"make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
},
"makeerror": {
"version": "1.0.12",
@@ -21669,11 +20913,6 @@
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
- },
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -22084,11 +21323,6 @@
"integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
"dev": true
},
- "normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="
- },
"npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -22128,7 +21362,8 @@
"object-hash": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
- "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
+ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
+ "dev": true
},
"object-inspect": {
"version": "1.11.0",
@@ -22160,20 +21395,11 @@
"object-keys": "^1.1.1"
}
},
- "oidc-token-hash": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz",
- "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ=="
- },
- "on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
- },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
"requires": {
"wrappy": "1"
}
@@ -22197,20 +21423,6 @@
"resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
"integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A=="
},
- "openid-client": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.9.1.tgz",
- "integrity": "sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w==",
- "requires": {
- "aggregate-error": "^3.1.0",
- "got": "^11.8.0",
- "jose": "^2.0.5",
- "lru-cache": "^6.0.0",
- "make-error": "^1.3.6",
- "object-hash": "^2.0.1",
- "oidc-token-hash": "^5.0.1"
- }
- },
"optionator": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
@@ -22230,11 +21442,6 @@
"resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
},
- "p-cancelable": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="
- },
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@@ -22699,15 +21906,6 @@
}
}
},
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -22752,7 +21950,8 @@
"quick-lru": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true
},
"raf": {
"version": "3.4.1",
@@ -23169,11 +22368,6 @@
"path-parse": "^1.0.6"
}
},
- "resolve-alpn": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
- },
"resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
@@ -23203,14 +22397,6 @@
"integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==",
"dev": true
},
- "responselike": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
- "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
- "requires": {
- "lowercase-keys": "^2.0.0"
- }
- },
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -24104,11 +23290,6 @@
}
}
},
- "url-join": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
- "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="
- },
"use-context-selector": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/use-context-selector/-/use-context-selector-1.3.7.tgz",
@@ -24469,7 +23650,8 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
},
"write-file-atomic": {
"version": "3.0.3",
@@ -24520,7 +23702,8 @@
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
},
"yaml": {
"version": "1.10.2",
diff --git a/studio/package.json b/studio/package.json
index 1414f0a89a1..a8bf92423e7 100644
--- a/studio/package.json
+++ b/studio/package.json
@@ -10,7 +10,6 @@
"deploy:staging": "VERCEL_ORG_ID=team_E6KJ1W561hMTjon1QSwOh0WO VERCEL_PROJECT_ID=QmcmhbiAtCMFTAHCuGgQscNbke4TzgWULECctNcKmxWCoT vercel --prod -A .vercel/staging.json"
},
"dependencies": {
- "@auth0/nextjs-auth0": "^1.6.1",
"@headlessui/react": "^1.4.1",
"@monaco-editor/react": "^4.3.1",
"@next/bundle-analyzer": "^12.0.4",
@@ -21,7 +20,7 @@
"@supabase/grid": "^2.3.9",
"@supabase/postgres-meta": "^0.26.1",
"@supabase/react-data-grid": "^7.1.0-beta.7",
- "@supabase/supabase-js": "^1.28.0",
+ "@supabase/supabase-js": "^1.29.1",
"@supabase/ui": "^0.35.0",
"ajv": "^8.6.3",
"analytics-node": "^3.5.0",
diff --git a/studio/pages/_app.tsx b/studio/pages/_app.tsx
index f328cbdb5f9..9b73864c7b5 100644
--- a/studio/pages/_app.tsx
+++ b/studio/pages/_app.tsx
@@ -10,18 +10,20 @@ import 'styles/contextMenu.scss'
import Head from 'next/head'
import dynamic from 'next/dynamic'
-import { useRouter } from 'next/router'
-import { useEffect, useState } from 'react'
import type { AppProps } from 'next/app'
+import { useRouter } from 'next/router'
+import { FC, useEffect, useState } from 'react'
+import { Subscription } from '@supabase/gotrue-js'
import { Toaster, ToastBar, toast } from 'react-hot-toast'
import { Button, IconX } from '@supabase/ui'
-
import { RootStore } from 'stores'
import { StoreProvider } from 'hooks'
import { getParameterByName } from 'lib/common/fetch'
import { GOTRUE_ERRORS } from 'lib/constants'
+import { auth } from 'lib/gotrue'
import PageTelemetry from 'components/ui/PageTelemetry'
import FlagProvider from 'components/ui/Flag/FlagProvider'
+import Connecting from 'components/ui/Loading'
const PortalRootWithNoSSR = dynamic(
// @ts-ignore
@@ -69,6 +71,59 @@ const PortalToast = () => (
)
+function doesTokenDataExist() {
+ // ignore if server-side
+ if (typeof window === 'undefined') return false
+ // check tokenData on localstorage
+ const tokenData = window?.localStorage['supabase.auth.token']
+ return tokenData != undefined && typeof tokenData === 'string'
+}
+
+/**
+ * On app first load, gotrue client may take a while to refresh access token
+ * We have to wait for that process to complete before showing children components
+ */
+const GotrueWrapper: FC = ({ children }) => {
+ const [loading, setLoading] = useState(doesTokenDataExist())
+
+ useEffect(() => {
+ let subscription: Subscription | null
+ let timer: any
+ const currentSession = auth.session()
+
+ function tokenRefreshed() {
+ setLoading(false)
+ // clean subscription
+ if (subscription) subscription.unsubscribe()
+ // clean timer
+ if (timer) clearTimeout(timer)
+ }
+
+ if (currentSession != undefined && currentSession != null) {
+ // if there is an active session, go ahead
+ setLoading(false)
+ } else {
+ // else wait for TOKEN_REFRESHED event before continue
+ const response = auth.onAuthStateChange((_event, session) => {
+ if (loading && _event === 'TOKEN_REFRESHED') {
+ tokenRefreshed()
+ }
+ })
+ subscription = response.data ?? null
+
+ // we need a timeout here, in case token refresh fails
+ timer = setTimeout(() => setLoading(false), 5 * 1000)
+ }
+
+ return () => {
+ if (subscription) subscription.unsubscribe()
+ if (timer) clearTimeout(timer)
+ }
+ }, [])
+
+ return <>{loading ? : children}>
+}
+
function MyApp({ Component, pageProps }: AppProps) {
const [rootStore] = useState(() => new RootStore())
const router = useRouter()
@@ -92,9 +147,11 @@ function MyApp({ Component, pageProps }: AppProps) {
-
-
-
+
+
+
+
+
diff --git a/studio/pages/new/[slug].tsx b/studio/pages/new/[slug].tsx
index 6927b5634d0..3bcf9db40a1 100644
--- a/studio/pages/new/[slug].tsx
+++ b/studio/pages/new/[slug].tsx
@@ -7,14 +7,7 @@ import { useRef, useState, useEffect } from 'react'
import { debounce, isUndefined, values } from 'lodash'
import { toJS } from 'mobx'
import { observer } from 'mobx-react-lite'
-import {
- Button,
- Typography,
- Listbox,
- IconUsers,
- IconAlertCircle,
- IconDollarSign,
-} from '@supabase/ui'
+import { Button, Typography, Listbox, IconUsers, IconAlertCircle } from '@supabase/ui'
import { API_URL } from 'lib/constants'
import { post } from 'lib/common/fetch'
@@ -23,9 +16,6 @@ import {
REGIONS,
REGIONS_DEFAULT,
DEFAULT_MINIMUM_PASSWORD_STRENGTH,
- PASSWORD_STRENGTH,
- PASSWORD_STRENGTH_COLOR,
- PASSWORD_STRENGTH_PERCENTAGE,
PRICING_PLANS,
PRICING_PLANS_DEFAULT,
DEFAULT_FREE_PROJECTS_LIMIT,
@@ -38,6 +28,8 @@ import { getURL } from 'lib/helpers'
import FormField from 'components/to-be-cleaned/forms/FormField'
import Panel from 'components/to-be-cleaned/Panel'
import InformationBox from 'components/ui/InformationBox'
+import { passwordStrength } from 'lib/helpers'
+import PasswordStrengthBar from 'components/ui/PasswordStrengthBar'
interface StripeCustomer {
paymentMethods: any
@@ -164,22 +156,10 @@ export const Wizard = observer(() => {
}
async function checkPasswordStrength(value: any) {
- let passwordStrength = ''
- if (value && value !== '') {
- const response = await post(`${API_URL}/profile/password-check`, { password: value })
- if (!response.error) {
- const { result } = response
- const score = (PASSWORD_STRENGTH as any)[result.score]
- const suggestions = result.feedback?.suggestions
- ? result.feedback.suggestions.join(' ')
- : ''
- passwordStrength = `${score} ${suggestions}`
- setPasswordStrengthScore(result.score)
- setPasswordStrengthWarning(result.feedback.warning ? result.feedback.warning : '')
- }
- }
-
- setPasswordStrengthMessage(passwordStrength)
+ const { message, warning, strength } = await passwordStrength(value)
+ setPasswordStrengthScore(strength)
+ setPasswordStrengthWarning(warning)
+ setPasswordStrengthMessage(message)
}
const onClickNext = async () => {
@@ -265,11 +245,7 @@ export const Wizard = observer(() => {
))}
- {!currentOrg?.is_owner ? (
-
- ) : (
- <>{isSelectFreeTier && isOverFreeProjectLimit && }>
- )}
+ {!currentOrg?.is_owner && }
{canCreateProject && (
@@ -295,48 +271,13 @@ export const Wizard = observer(() => {
value={dbPass}
onChange={onDbPassChange}
description={
- <>
- {dbPass && (
-
- )}
- = DEFAULT_MINIMUM_PASSWORD_STRENGTH
- ? 'text-green-600'
- : ''
- }
- >
- {passwordStrengthMessage
- ? passwordStrengthMessage
- : 'This is the password to your postgres database, so it must be a strong password and hard to guess.'}
-
- >
- }
- errorMessage={
- passwordStrengthWarning
- ? `${passwordStrengthWarning}. ${passwordErrorMessage}.`
- : passwordErrorMessage
+
}
+ errorMessage={passwordStrengthWarning}
/>
@@ -351,36 +292,39 @@ export const Wizard = observer(() => {
description="Select a region close to you for the best performance."
/>
-
-
-
- Select a plan that suits your needs.
-
- More details
-
- >
- }
- >
- {Object.entries(PRICING_PLANS).map(([k, v]) => (
-
- {`${v}${v === PRICING_PLANS.PRO ? ' - $25/month' : ''}`}
-
- ))}
-
-
- {!isSelectFreeTier && isEmptyPaymentMethod && (
-
- )}
-
>
)}
+
+ {currentOrg?.is_owner && (
+
+
+ Select a plan that suits your needs.
+
+ More details
+
+ >
+ }
+ >
+ {Object.entries(PRICING_PLANS).map(([k, v]) => (
+
+ {`${v}${v === PRICING_PLANS.PRO ? ' - $25/month' : ''}`}
+
+ ))}
+
+
+ {isSelectFreeTier && isOverFreeProjectLimit && }
+ {!isSelectFreeTier && isEmptyPaymentMethod && (
+
+ )}
+
+ )}
>
diff --git a/studio/pages/project/[ref]/settings/database.tsx b/studio/pages/project/[ref]/settings/database.tsx
index 03841ec2687..fc8f8a0d39b 100644
--- a/studio/pages/project/[ref]/settings/database.tsx
+++ b/studio/pages/project/[ref]/settings/database.tsx
@@ -1,25 +1,26 @@
-import useSWR from 'swr'
import dayjs from 'dayjs'
import customParseFormat from 'dayjs/plugin/customParseFormat'
import timezone from 'dayjs/plugin/timezone'
import utc from 'dayjs/plugin/utc'
-import { FC, useState } from 'react'
-import { isUndefined } from 'lodash'
-import { useRouter } from 'next/router'
+import useSWR from 'swr'
+import { FC, useState, useRef, useEffect } from 'react'
import { toJS } from 'mobx'
import { observer } from 'mobx-react-lite'
-import { Typography, Input, Button, IconDownload, IconArrowRight, Tabs } from '@supabase/ui'
+import { useRouter } from 'next/router'
+import { debounce } from 'lodash'
+import { Typography, Input, Button, IconDownload, IconArrowRight, Tabs, Modal } from '@supabase/ui'
-import { API_URL } from 'lib/constants'
import { useStore, withAuth } from 'hooks'
-import { get } from 'lib/common/fetch'
-import { TIME_PERIODS_INFRA } from 'lib/constants'
-import { pluckObjectFields } from 'lib/helpers'
+import { get, patch } from 'lib/common/fetch'
+import { pluckObjectFields, passwordStrength } from 'lib/helpers'
+import { API_URL, DEFAULT_MINIMUM_PASSWORD_STRENGTH, TIME_PERIODS_INFRA } from 'lib/constants'
+
import { SettingsLayout } from 'components/layouts'
+import PasswordStrengthBar from 'components/ui/PasswordStrengthBar'
import Panel from 'components/to-be-cleaned/Panel'
+import { ProjectUsageMinimal } from 'components/to-be-cleaned/Usage'
import DateRangePicker from 'components/to-be-cleaned/DateRangePicker'
import ChartHandler from 'components/to-be-cleaned/Charts/ChartHandler'
-import { ProjectUsageMinimal } from 'components/to-be-cleaned/Usage'
dayjs.extend(customParseFormat)
dayjs.extend(timezone)
@@ -135,6 +136,114 @@ const Usage: FC = ({ project }) => {
)
}
+const ResetDbPassword: FC = () => {
+ const { ui } = useStore()
+ const projectRef = ui.selectedProject?.ref
+
+ const [showResetDbPass, setShowResetDbPass] = useState(false)
+ const [isUpdatingPassword, setIsUpdatingPassword] = useState(false)
+
+ const [password, setPassword] = useState('')
+ const [passwordStrengthMessage, setPasswordStrengthMessage] = useState('')
+ const [passwordStrengthWarning, setPasswordStrengthWarning] = useState('')
+ const [passwordStrengthScore, setPasswordStrengthScore] = useState(0)
+
+ useEffect(() => {
+ if (showResetDbPass) {
+ setIsUpdatingPassword(false)
+ setPassword('')
+ setPasswordStrengthMessage('')
+ setPasswordStrengthWarning('')
+ setPasswordStrengthScore(0)
+ }
+ }, [showResetDbPass])
+
+ async function checkPasswordStrength(value: any) {
+ const { message, warning, strength } = await passwordStrength(value)
+ setPasswordStrengthScore(strength)
+ setPasswordStrengthWarning(warning)
+ setPasswordStrengthMessage(message)
+ }
+
+ const delayedCheckPasswordStrength = useRef(
+ debounce((value) => checkPasswordStrength(value), 300)
+ ).current
+
+ const onDbPassChange = (e: any) => {
+ const value = e.target.value
+ setPassword(value)
+ if (value == '') {
+ setPasswordStrengthScore(-1)
+ setPasswordStrengthMessage('')
+ } else delayedCheckPasswordStrength(value)
+ }
+
+ const confirmResetDbPass = async () => {
+ if (passwordStrengthScore >= DEFAULT_MINIMUM_PASSWORD_STRENGTH) {
+ setIsUpdatingPassword(true)
+ const res = await patch(`${API_URL}/projects/${projectRef}/db-password`, { password })
+ if (!res.error) {
+ ui.setNotification({ category: 'success', message: res.message })
+ setShowResetDbPass(false)
+ } else {
+ ui.setNotification({ category: 'error', message: 'Failed to reset password' })
+ }
+ }
+ }
+
+ return (
+ <>
+
+
+
+
+
Database password
+
+
+
+ You can use this password to connect directly to your Postgres database.
+
+
+
+
+
+
+
+
+
+
+ setShowResetDbPass(false)}
+ onConfirm={() => confirmResetDbPass()}
+ >
+
+
+ }
+ />
+
+
+ >
+ )
+}
+
const DownloadCertificate: FC = ({ createdAt }) => {
// instances before 3 : 08 pm sgt 29th April don't have certs installed
if (new Date(createdAt) < new Date('2021-04-30')) return null
@@ -142,10 +251,10 @@ const DownloadCertificate: FC = ({ createdAt }) => {
return (
-
+
SSL Connection
-
+
Use this cert when connecting to your database to prevent snooping and
@@ -154,13 +263,15 @@ const DownloadCertificate: FC = ({ createdAt }) => {
-
}>
-
- Download Certificate
-
-
+
@@ -168,6 +279,9 @@ const DownloadCertificate: FC
= ({ createdAt }) => {
}
const GeneralSettings: FC = ({ projectRef }) => {
+ const { ui } = useStore()
+ const isOwner = ui.selectedOrganization?.is_owner
+
const { data, error }: any = useSWR(`${API_URL}/props/project/${projectRef}/settings`, get)
if (data?.error || error) {
@@ -264,6 +378,7 @@ const GeneralSettings: FC = ({ projectRef }) => {
+ {isOwner && }
diff --git a/studio/pages/project/[ref]/settings/logs/[type].tsx b/studio/pages/project/[ref]/settings/logs/[type].tsx
index 5300d2f976d..d60a83f83b5 100644
--- a/studio/pages/project/[ref]/settings/logs/[type].tsx
+++ b/studio/pages/project/[ref]/settings/logs/[type].tsx
@@ -3,7 +3,7 @@ import React, { useEffect, useRef, useState } from 'react'
import { NextPage } from 'next'
import { useRouter } from 'next/router'
import { observer } from 'mobx-react-lite'
-import { Typography, IconLoader, IconAlertCircle, IconRewind, Button } from '@supabase/ui'
+import { Typography, IconLoader, IconAlertCircle, IconRewind, Button, IconInfo } from '@supabase/ui'
import { withAuth } from 'hooks'
import { get } from 'lib/common/fetch'
@@ -23,6 +23,7 @@ import { uuidv4 } from 'lib/helpers'
import useSWRInfinite from 'swr/infinite'
import { isUndefined } from 'lodash'
import Flag from 'components/ui/Flag/Flag'
+import { useFlag } from 'hooks'
/**
* Acts as a container component for the entire log display
@@ -30,6 +31,7 @@ import Flag from 'components/ui/Flag/Flag'
*
*/
export const LogPage: NextPage = () => {
+ const logsCustomSql = useFlag('logsCustomSql')
const router = useRouter()
const { ref, type } = router.query
@@ -40,11 +42,13 @@ export const LogPage: NextPage = () => {
const [params, setParams] = useState({
type: '',
search_query: '',
+ sql: '',
where: '',
timestamp_start: '',
timestamp_end: '',
})
const title = `Logs - ${LOG_TYPE_LABEL_MAPPING[type as string]}`
+ const isSelectQuery = logsCustomSql && editorValue.toLowerCase().includes('select') ? true : false
useEffect(() => {
setParams({ ...params, type: type as string })
@@ -124,15 +128,24 @@ export const LogPage: NextPage = () => {
const onSelectTemplate = (template: LogTemplate) => {
setMode(template.mode)
if (template.mode === 'simple') {
- setParams((prev) => ({ ...prev, search_query: template.searchString, where: '' }))
+ setParams((prev) => ({ ...prev, search_query: template.searchString, sql: '', where: '' }))
} else {
setEditorValue(template.searchString)
- setParams((prev) => ({ ...prev, where: template.searchString, search_query: '' }))
+ setParams((prev) => ({
+ ...prev,
+ where: isSelectQuery ? '' : template.searchString,
+ sql: isSelectQuery ? template.searchString : '',
+ search_query: '',
+ }))
setEditorId(uuidv4())
}
}
const handleEditorSubmit = () => {
- setParams((prev) => ({ ...prev, where: editorValue }))
+ setParams((prev) => ({
+ ...prev,
+ where: isSelectQuery ? '' : editorValue,
+ sql: isSelectQuery ? editorValue : '',
+ }))
}
const handleSearch = (v: string) => {
setParams((prev) => ({ ...prev, search_query: v || '' }))
@@ -163,21 +176,35 @@ export const LogPage: NextPage = () => {
onInputRun={handleRefresh}
/>
-
- {editorValue && (
-
diff --git a/studio/pages/vercel/setupProject.tsx b/studio/pages/vercel/setupProject.tsx
index cbf63928e64..867e48b269c 100644
--- a/studio/pages/vercel/setupProject.tsx
+++ b/studio/pages/vercel/setupProject.tsx
@@ -9,6 +9,7 @@ import { Dictionary } from '@supabase/grid'
import { useStore } from 'hooks'
import { post } from 'lib/common/fetch'
+import { passwordStrength } from 'lib/helpers'
import {
PROVIDERS,
REGIONS,
@@ -22,8 +23,9 @@ import {
fetchVercelProject,
prepareVercelEvns,
} from 'components/to-be-cleaned/Integration/Vercel.utils'
-import Loading from 'components/ui/Loading'
import VercelIntegrationLayout from 'components/layouts/VercelIntegrationLayout'
+import Loading from 'components/ui/Loading'
+import PasswordStrengthBar from 'components/ui/PasswordStrengthBar'
const PASSWORD_STRENGTH = {
0: "That's terrible.",
@@ -165,6 +167,7 @@ const CreateProject = observer(() => {
const delayedCheckPasswordStrength = useRef(
debounce((value: string) => checkPasswordStrength(value), 300)
).current
+
const canSubmit =
projectName != '' &&
passwordStrengthScore >= DEFAULT_MINIMUM_PASSWORD_STRENGTH &&
@@ -189,22 +192,9 @@ const CreateProject = observer(() => {
}
async function checkPasswordStrength(value: string) {
- let passwordStrength = ''
- if (value && value !== '') {
- const response = await post(`${API_URL}/profile/password-check`, { password: value })
- if (!response.error) {
- const { result } = response
- const score = (PASSWORD_STRENGTH as any)[result.score]
- const warning = result.feedback.warning ? `${result.feedback.warning}.` : ''
- const suggestions = result.feedback?.suggestions
- ? result.feedback.suggestions.join(' ')
- : ''
- passwordStrength = `${score} ${warning} ${suggestions}`
- setPasswordStrengthScore(result.score)
- }
- }
-
- setPasswordStrengthMessage(passwordStrength)
+ const { message, strength } = await passwordStrength(value)
+ setPasswordStrengthScore(strength)
+ setPasswordStrengthMessage(message)
}
async function createSupabaseProject(dbSql: string) {
@@ -294,7 +284,7 @@ const CreateProject = observer(() => {
-
+
{
placeholder="· · · · · · · · · · · · ·"
className="shadow-sm focus:ring-green-500 focus:border-green-500 block w-full sm:text-sm border-gray-300 rounded-md"
/>
- {passwordStrengthMessage && (
-
- {passwordStrengthMessage}
-
- )}
- {passwordStrengthScore >= 0 && passwordStrengthScore < DEFAULT_MINIMUM_PASSWORD_STRENGTH && (
-
- You need a stronger password
-
- )}
+
diff --git a/studio/tests/pages/projects/LogTable.test.js b/studio/tests/pages/projects/LogTable.test.js
index 0bdcefa489d..02b4a52d681 100644
--- a/studio/tests/pages/projects/LogTable.test.js
+++ b/studio/tests/pages/projects/LogTable.test.js
@@ -1,14 +1,20 @@
import LogTable from 'components/interfaces/Settings/Logs/LogTable'
import { render, fireEvent, waitFor, screen } from '@testing-library/react'
test('can display log data', async () => {
- render(
)
+ render(
+
+ )
await waitFor(() => screen.getByText(/happened/))
const row = screen.getByText(/happened/)
@@ -17,17 +23,35 @@ test('can display log data', async () => {
await waitFor(() => screen.getByText(/something_value/))
})
-test ("dedupes log lines with exact id", async ()=>{
- render(
)
+test('dedupes log lines with exact id', async () => {
+ // chronological mode requires 4 columns
+ render(
+
+ )
// should only have one element, this line will fail if there are >1 element
await waitFor(() => screen.getByText(/happened/))
-})
\ No newline at end of file
+})
+
+test('can display custom columns and headers based on data input', async () => {
+ render(
)
+ await waitFor(() => screen.getByText(/some_header/))
+ await waitFor(() => screen.getByText(/some_data/))
+ await waitFor(() => screen.getByText(/kinda/))
+ await waitFor(() => screen.getByText(/123456/))
+})
diff --git a/studio/tests/pages/projects/logs.test.js b/studio/tests/pages/projects/logs.test.js
index bb9107a467e..c98b3fd856d 100644
--- a/studio/tests/pages/projects/logs.test.js
+++ b/studio/tests/pages/projects/logs.test.js
@@ -31,6 +31,9 @@ useMonaco.mockImplementation((v) => v)
jest.mock('components/ui/Flag/Flag')
import Flag from 'components/ui/Flag/Flag'
Flag.mockImplementation(({ children }) => <>{children}>)
+jest.mock('hooks')
+import { useFlag } from 'hooks'
+useFlag.mockReturnValue(true)
import { SWRConfig } from 'swr'
jest.mock('pages/project/[ref]/settings/logs/[type]')
@@ -202,6 +205,60 @@ test('where clause will trigger a log refresh', async () => {
await waitFor(() => screen.getByText(/happened/))
})
+test('custom sql querying', async () => {
+ get.mockImplementation((url) => {
+ if (url.includes('sql=') && url.includes('select')) {
+ return {
+ data: [
+ {
+ my_count: 12345,
+ },
+ ],
+ }
+ }
+ return { data: [] }
+ })
+ const { container } = render(
)
+ let editor = container.querySelector('.monaco-editor')
+ expect(editor).toBeFalsy()
+ // TODO: abstract this out into a toggle selection helper
+ const toggle = getToggleByText(/via query/)
+ expect(toggle).toBeTruthy()
+ userEvent.click(toggle)
+
+ // type into the query editor
+ await waitFor(() => {
+ editor = container.querySelector('.monaco-editor')
+ expect(editor).toBeTruthy()
+ })
+ editor = container.querySelector('.monaco-editor')
+ userEvent.type(editor, 'select count(*) as my_count from edge_logs')
+ // should show sandbox warning alert
+ await waitFor(() => screen.getByText(/restricted to a 7 day querying window/))
+
+ // should trigger query
+ userEvent.click(screen.getByText('Run'))
+ await waitFor(
+ () => {
+ expect(get).toHaveBeenCalledWith(expect.stringContaining('sql='))
+ expect(get).toHaveBeenCalledWith(expect.stringContaining('select'))
+ expect(get).toHaveBeenCalledWith(expect.stringContaining('edge_logs'))
+ expect(get).not.toHaveBeenCalledWith(expect.stringContaining('where'))
+ },
+ { timeout: 1000 }
+ )
+
+ await waitFor(() => screen.getByText(/my_count/)) //column header
+ await waitFor(() => screen.getByText(/12345/)) // row value
+
+ // clicking on the row value should not show log selection panel
+ userEvent.click(screen.getByText(/12345/))
+ await waitFor(() => expect(() => screen.getByText(/Metadata/)).toThrow())
+
+ // should not see chronological features
+ await waitFor(() => screen.queryByText(/Load older/)) //column header
+})
+
test('load older btn will fetch older logs', async () => {
get.mockImplementation((url) => {
if (url.includes('count')) {
diff --git a/web/docs/guides/auth/auth-apple.mdx b/web/docs/guides/auth/auth-apple.mdx
index bf6955dbe6e..4c29a3e3f11 100644
--- a/web/docs/guides/auth/auth-apple.mdx
+++ b/web/docs/guides/auth/auth-apple.mdx
@@ -17,7 +17,7 @@ Apple OAuth consists of six broad steps:
- Obtaining a `Services Id` - this will serve as the `client_id`.
- Obtaining a `secret key` that will be used to get our `client_secret`.
- Generating the `client_secret` using the `secret key`.
-- Add your `client id` and `client secret` keys to your [Supabase Project](https://supabase.com).
+- Add your `client id` and `client secret` keys to your [Supabase Project](https://app.supabase.io).
- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js).
## Steps
@@ -64,7 +64,7 @@ The next step requires a callback URL, which looks like this:
`https://
.supabase.co/auth/v1/callback`
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- Click on the `Settings` icon at the bottom of the left sidebar.
- Click on `API` in the list.
- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard.
@@ -170,7 +170,7 @@ puts token
### Add your OAuth credentials to Supabase
-- Go to your [Supabase Dashboard](https://supabase.com).
+- Go to your [Supabase Dashboard](https://app.supabase.io).
- In the left sidebar, click the `Authentication` icon (near the top).
- Click `Settings` from the list to go to the `Authentication Settings` page.
- Enter the final (hosted) URL of your app under `Site URL` (this is important).
diff --git a/web/docs/guides/auth/auth-bitbucket.mdx b/web/docs/guides/auth/auth-bitbucket.mdx
index 5d59e92cc3a..7959269a5e6 100644
--- a/web/docs/guides/auth/auth-bitbucket.mdx
+++ b/web/docs/guides/auth/auth-bitbucket.mdx
@@ -14,7 +14,7 @@ To enable Bitbucket Auth for your project, you need to set up a BitBucket OAuth
Setting up Bitbucket logins for your application consists of 3 parts:
- Create and configure a Bitbucket OAuth Consumer on [Bitbucket](https://bitbucket.org)
-- Add your Bitbucket OAuth Consumer keys to your [Supabase Project](https://supabase.com)
+- Add your Bitbucket OAuth Consumer keys to your [Supabase Project](https://app.supabase.io)
- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js)
## Steps
@@ -32,7 +32,7 @@ The next step requires a callback URL, which looks like this:
`https://.supabase.co/auth/v1/callback`
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- Click on the `Settings` icon at the bottom of the left sidebar.
- Click on `API` in the list.
- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard.
@@ -59,7 +59,7 @@ The next step requires a callback URL, which looks like this:
### Add your Bitbucket credentials into your Supabase Project
-- Go to your [Supabase Project Dashboard](https://supabase.com)
+- Go to your [Supabase Project Dashboard](https://app.supabase.io)
- In the left sidebar, click the `Authentication` icon (near the top)
- Click `Settings` from the list to go to the `Authentication Settings` page
- Enter the final (hosted) URL of your app under `Site URL` (this is important)
diff --git a/web/docs/guides/auth/auth-discord.mdx b/web/docs/guides/auth/auth-discord.mdx
index 70f66b7b9ab..84660b3f731 100644
--- a/web/docs/guides/auth/auth-discord.mdx
+++ b/web/docs/guides/auth/auth-discord.mdx
@@ -14,7 +14,7 @@ To enable Discord Auth for your project, you need to set up a Discord Applicatio
Setting up Discord logins for your application consists of 3 parts:
- Create and configure a Discord Application [Discord Developer Portal](https://discord.com/developers)
-- Add your Discord OAuth Consumer keys to your [Supabase Project](https://supabase.com)
+- Add your Discord OAuth Consumer keys to your [Supabase Project](https://app.supabase.io)
- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js)
## Steps
@@ -36,7 +36,7 @@ In the next step you require a callback URL, which looks like this:
`https://.supabase.co/auth/v1/callback`
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- Click on the `Settings` icon at the bottom of the left sidebar.
- Click on `API` in the list.
- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard.
@@ -58,7 +58,7 @@ In the next step you require a callback URL, which looks like this:
### Add your Discord credentials into your Supabase Project
-- Go to your [Supabase Project Dashboard](https://supabase.com)
+- Go to your [Supabase Project Dashboard](https://app.supabase.io)
- In the left sidebar, click the `Authentication` icon (near the top)
- Click `Settings` from the list to go to the `Authentication Settings` page
- Enter the final (hosted) URL of your app under `Site URL` (this is important)
diff --git a/web/docs/guides/auth/auth-facebook.mdx b/web/docs/guides/auth/auth-facebook.mdx
index a9b2afd9ef5..c7fc632ae1b 100644
--- a/web/docs/guides/auth/auth-facebook.mdx
+++ b/web/docs/guides/auth/auth-facebook.mdx
@@ -14,7 +14,7 @@ To enable Facebook Auth for your project, you need to set up a Facebook OAuth ap
Setting up Facebook logins for your application consists of 3 parts:
- Create and configure a Facebook Application on the [Facebook Developers Site](https://developers.facebook.com)
-- Add your Facebook keys to your [Supabase Project](https://supabase.com)
+- Add your Facebook keys to your [Supabase Project](https://app.supabase.io)
- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js)
## Steps
@@ -40,7 +40,7 @@ The next step requires a callback URI, which looks like this:
`https://.supabase.co/auth/v1/callback`
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- Click on the `Settings` icon at the bottom of the left sidebar.
- Click on `API` in the list.
- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard.
@@ -76,7 +76,7 @@ You can read more about access levels [here](https://developers.facebook.com/doc
### Enter your Facebook App ID and Secret into your Supabase Project
-- Go to your [Supabase Project Dashboard](https://supabase.com)
+- Go to your [Supabase Project Dashboard](https://app.supabase.io)
- In the left sidebar, click the `Authentication` icon (near the top)
- Click `Settings` from the list to go to the `Authentication Settings` page
- Enter the final (hosted) URL of your app under `Site URL` (this is important)
diff --git a/web/docs/guides/auth/auth-github.mdx b/web/docs/guides/auth/auth-github.mdx
index 4a8a1c83870..b20f747f700 100644
--- a/web/docs/guides/auth/auth-github.mdx
+++ b/web/docs/guides/auth/auth-github.mdx
@@ -14,7 +14,7 @@ To enable GitHub Auth for your project, you need to set up a GitHub OAuth applic
Setting up GitHub logins for your application consists of 3 parts:
- Create and configure a GitHub OAuth App on [GitHub](https://github.com)
-- Add your GitHub OAuth keys to your [Supabase Project](https://supabase.com)
+- Add your GitHub OAuth keys to your [Supabase Project](https://app.supabase.io)
- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js)
## Steps
@@ -41,7 +41,7 @@ The next step requires a callback URL, which looks like this:
`https://.supabase.co/auth/v1/callback`
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- Click on the `Settings` icon at the bottom of the left sidebar.
- Click on `API` in the list.
- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard.
@@ -69,7 +69,7 @@ Copy your new OAuth credentials
### Enter your GitHub credentials into your Supabase Project
-- Go to your [Supabase Project Dashboard](https://supabase.com)
+- Go to your [Supabase Project Dashboard](https://app.supabase.io)
- In the left sidebar, click the `Authentication` icon (near the top)
- Click `Settings` from the list to go to the `Authentication Settings` page
- Enter the final (hosted) URL of your app under `Site URL` (this is important)
diff --git a/web/docs/guides/auth/auth-gitlab.mdx b/web/docs/guides/auth/auth-gitlab.mdx
index d1e56153a1f..f18051366b9 100644
--- a/web/docs/guides/auth/auth-gitlab.mdx
+++ b/web/docs/guides/auth/auth-gitlab.mdx
@@ -14,7 +14,7 @@ To enable GitLab Auth for your project, you need to set up a GitLab OAuth applic
Setting up GitLab logins for your application consists of 3 parts:
- Create and configure a GitLab Application on [GitLab](https://gitlab.com)
-- Add your GitLab Application keys to your [Supabase Project](https://supabase.com)
+- Add your GitLab Application keys to your [Supabase Project](https://app.supabase.io)
- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js)
## Steps
@@ -32,7 +32,7 @@ The next step requires a callback URL, which looks like this:
`https://.supabase.co/auth/v1/callback`
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- Click on the `Settings` icon at the bottom of the left sidebar.
- Click on `API` in the list.
- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard.
@@ -56,7 +56,7 @@ The next step requires a callback URL, which looks like this:
### Add your GitLab credentials into your Supabase Project
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- In the left sidebar, click the `Authentication` icon (near the top).
- Click `Settings` from the list to go to the `Authentication Settings` page.
- Enter the final (hosted) URL of your app under `Site URL` (this is important).
diff --git a/web/docs/guides/auth/auth-google.mdx b/web/docs/guides/auth/auth-google.mdx
index 65bd42dd5fa..3e7c0d68400 100644
--- a/web/docs/guides/auth/auth-google.mdx
+++ b/web/docs/guides/auth/auth-google.mdx
@@ -14,7 +14,7 @@ To enable Google Auth for your project, you need to set up a Google OAuth applic
Setting up Google logins for your application consists of 3 parts:
- Create and configure a Google Project on the [Google Cloud Platform Console](https://console.cloud.google.com/home/dashboard)
-- Add your Google OAuth keys to your [Supabase Project](https://supabase.com)
+- Add your Google OAuth keys to your [Supabase Project](https://app.supabase.io)
- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js)
## Steps
@@ -55,7 +55,7 @@ The next step requires a callback URL, which looks like this:
`https://.supabase.co/auth/v1/callback`
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- Click on the `Settings` icon at the bottom of the left sidebar.
- Click on `API` in the list.
- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard.
@@ -84,7 +84,7 @@ Copy your new OAuth credentials
### Enter your Google credentials into your Supabase Project
-- Go to your [Supabase Project Dashboard](https://supabase.com)
+- Go to your [Supabase Project Dashboard](https://app.supabase.io)
- In the left sidebar, click the `Authentication` icon (near the top)
- Click `Settings` from the list to go to the `Authentication Settings` page
- Enter the final (hosted) URL of your app under `Site URL` (this is important)
diff --git a/web/docs/guides/auth/auth-slack.mdx b/web/docs/guides/auth/auth-slack.mdx
index cc2a2acab15..5350262dd4b 100644
--- a/web/docs/guides/auth/auth-slack.mdx
+++ b/web/docs/guides/auth/auth-slack.mdx
@@ -14,7 +14,7 @@ To enable Slack Auth for your project, you need to set up a Slack OAuth applicat
Setting up Slack logins for your application consists of 3 parts:
- Create and configure a Slack Project and App on the [Slack Developer Dashboard](https://api.slack.com/apps).
-- Add your Slack `API Key` and `API Secret Key` to your [Supabase Project](https://supabase.com).
+- Add your Slack `API Key` and `API Secret Key` to your [Supabase Project](https://app.supabase.io).
- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js).
## Steps
@@ -32,7 +32,7 @@ The next step requires a callback URL, which looks like this:
`https://.supabase.co/auth/v1/callback`
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- Click on the `Settings` icon at the bottom of the left sidebar.
- Click on `API` in the list.
- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard.
@@ -68,7 +68,7 @@ Under `Redirect URLs`:
### Enter your Slack credentials into your Supabase Project
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- In the left sidebar, click the `Authentication` icon (near the top).
- Click `Settings` from the list to go to the `Authentication Settings` page.
- Enter the final (hosted) URL of your app under `Site URL` (this is important).
diff --git a/web/docs/guides/auth/auth-spotify.mdx b/web/docs/guides/auth/auth-spotify.mdx
index f0982817004..b98422b2e1e 100644
--- a/web/docs/guides/auth/auth-spotify.mdx
+++ b/web/docs/guides/auth/auth-spotify.mdx
@@ -14,7 +14,7 @@ To enable Spotify Auth for your project, you need to set up a Spotify OAuth appl
Setting up Spotify logins for your application consists of 3 parts:
- Create and configure a Spotify Project and App on the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard/).
-- Add your Spotify `API Key` and `API Secret Key` to your [Supabase Project](https://supabase.com).
+- Add your Spotify `API Key` and `API Secret Key` to your [Supabase Project](https://app.supabase.io).
- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js).
## Steps
@@ -32,7 +32,7 @@ The next step requires a callback URL, which looks like this:
`https://.supabase.co/auth/v1/callback`
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- Click on the `Settings` icon at the bottom of the left sidebar.
- Click on `API` in the list.
- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard.
@@ -63,7 +63,7 @@ Under `Redirect URIs`:
### Enter your Spotify credentials into your Supabase Project
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- In the left sidebar, click the `Authentication` icon (near the top).
- Click `Settings` from the list to go to the `Authentication Settings` page.
- Enter the final (hosted) URL of your app under `Site URL` (this is important).
diff --git a/web/docs/guides/auth/auth-twitch.mdx b/web/docs/guides/auth/auth-twitch.mdx
index d45cc056c19..d395957500f 100644
--- a/web/docs/guides/auth/auth-twitch.mdx
+++ b/web/docs/guides/auth/auth-twitch.mdx
@@ -14,7 +14,7 @@ To enable Twitch Auth for your project, you need to set up a Twitch Application
Setting up Twitch logins for your application consists of 3 parts:
- Create and configure a Twitch Application [Twitch Developer Console](https://dev.twitch.tv/console)
-- Add your Twitch OAuth Consumer keys to your [Supabase Project](https://supabase.com)
+- Add your Twitch OAuth Consumer keys to your [Supabase Project](https://app.supabase.io)
- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js)
## Steps
@@ -37,7 +37,7 @@ In the next step you require a callback URL, which looks like this:
`https://.supabase.co/auth/v1/callback`
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- Click on the `Settings` icon at the bottom of the left sidebar.
- Click on `API` in the list.
- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard.
@@ -74,7 +74,7 @@ In the next step you require a callback URL, which looks like this:
### Add your Twitch credentials into your Supabase Project
-- Go to your [Supabase Project Dashboard](https://supabase.com)
+- Go to your [Supabase Project Dashboard](https://app.supabase.io)
- In the left sidebar, click the `Authentication` icon (near the top)
- Click `Settings` from the list to go to the `Authentication Settings` page
- Enter the final (hosted) URL of your app under `Site URL` (this is important)
diff --git a/web/docs/guides/auth/auth-twitter.mdx b/web/docs/guides/auth/auth-twitter.mdx
index 1db02aa52a3..ebf95d5d155 100644
--- a/web/docs/guides/auth/auth-twitter.mdx
+++ b/web/docs/guides/auth/auth-twitter.mdx
@@ -14,7 +14,7 @@ To enable Twitter Auth for your project, you need to set up a Twitter OAuth appl
Setting up Twitter logins for your application consists of 3 parts:
- Create and configure a Twitter Project and App on the [Twitter Developer Dashboard](https://developer.twitter.com/en/portal/dashboard).
-- Add your Twitter `API Key` and `API Secret Key` to your [Supabase Project](https://supabase.com).
+- Add your Twitter `API Key` and `API Secret Key` to your [Supabase Project](https://app.supabase.io).
- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js).
## Steps
@@ -32,7 +32,7 @@ The next step requires a callback URL, which looks like this:
`https://.supabase.co/auth/v1/callback`
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- Click on the `Settings` icon at the bottom of the left sidebar.
- Click on `API` in the list.
- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard.
@@ -64,7 +64,7 @@ The next step requires a callback URL, which looks like this:
### Enter your Twitter credentials into your Supabase Project
-- Go to your [Supabase Project Dashboard](https://supabase.com).
+- Go to your [Supabase Project Dashboard](https://app.supabase.io).
- In the left sidebar, click the `Authentication` icon (near the top).
- Click `Settings` from the list to go to the `Authentication Settings` page.
- Enter the final (hosted) URL of your app under `Site URL` (this is important).
diff --git a/www/pages/pricing/index.tsx b/www/pages/pricing/index.tsx
index eddbe017055..e6b33d3515b 100644
--- a/www/pages/pricing/index.tsx
+++ b/www/pages/pricing/index.tsx
@@ -392,6 +392,22 @@ export default function IndexPage() {
Frequently asked questions
+
+ Can't find the answer to your question, ask someone in the community either on our
+ Discord or Github.
+
+
+
+
+ Discord
+
+
+
+
+
+ Github
+
+
{pricingFaq.map((faq) => {