mirror of
https://github.com/supabase/supabase.git
synced 2026-05-09 10:19:50 -04:00
3c2206fddd
update wording to match docs
389 lines
13 KiB
TypeScript
389 lines
13 KiB
TypeScript
type ConnectionStrings = {
|
|
psql: string
|
|
uri: string
|
|
golang: string
|
|
jdbc: string
|
|
dotnet: string
|
|
nodejs: string
|
|
php: string
|
|
python: string
|
|
sqlalchemy: string
|
|
}
|
|
|
|
export const getConnectionStrings = ({
|
|
connectionInfo,
|
|
poolingInfo,
|
|
metadata,
|
|
}: {
|
|
connectionInfo: {
|
|
db_user: string
|
|
db_port: number
|
|
db_host: string
|
|
db_name: string
|
|
}
|
|
poolingInfo?: {
|
|
connectionString: string
|
|
db_user: string
|
|
db_port: number
|
|
db_host: string
|
|
db_name: string
|
|
}
|
|
metadata: {
|
|
projectRef?: string
|
|
pgVersion?: string
|
|
}
|
|
}): {
|
|
direct: ConnectionStrings
|
|
pooler: ConnectionStrings
|
|
} => {
|
|
const isMd5 = poolingInfo?.connectionString.includes('options=reference')
|
|
const { projectRef } = metadata
|
|
const password = '[YOUR-PASSWORD]'
|
|
|
|
// Direct connection variables
|
|
const directUser = connectionInfo.db_user
|
|
const directPort = connectionInfo.db_port
|
|
const directHost = connectionInfo.db_host
|
|
const directName = connectionInfo.db_name
|
|
|
|
// Pooler connection variables
|
|
const poolerUser = poolingInfo?.db_user
|
|
const poolerPort = poolingInfo?.db_port
|
|
const poolerHost = poolingInfo?.db_host
|
|
const poolerName = poolingInfo?.db_name
|
|
|
|
// Direct connection strings
|
|
const directPsqlString = isMd5
|
|
? `psql "postgresql://${directUser}:${password}@${directHost}:${directPort}/${directName}"`
|
|
: `psql -h ${directHost} -p ${directPort} -d ${directName} -U ${directUser}`
|
|
|
|
const directUriString = `postgresql://${directUser}:${password}@${directHost}:${directPort}/${directName}`
|
|
|
|
const directGolangString = `DATABASE_URL=${directUriString}`
|
|
|
|
const directJdbcString = `jdbc:postgresql://${directHost}:${directPort}/${directName}?user=${directUser}&password=${password}`
|
|
|
|
// User Id=${directUser};Password=${password};Server=${directHost};Port=${directPort};Database=${directName}`
|
|
const directDotNetString = `{
|
|
"ConnectionStrings": {
|
|
"DefaultConnection": "Host=${directHost};Database=${directName};Username=${directUser};Password=${password};SSL Mode=Require;Trust Server Certificate=true"
|
|
}
|
|
}`
|
|
|
|
// `User Id=${poolerUser};Password=${password};Server=${poolerHost};Port=${poolerPort};Database=${poolerName}${isMd5 ? `;Options='reference=${projectRef}'` : ''}`
|
|
const poolerDotNetString = `{
|
|
"ConnectionStrings": {
|
|
"DefaultConnection": "User Id=${poolerUser};Password=${password};Server=${poolerHost};Port=${poolerPort};Database=${poolerName}${isMd5 ? `;Options='reference=${projectRef}'` : ''}"
|
|
}
|
|
}`
|
|
|
|
const directNodejsString = `DATABASE_URL=${directUriString}`
|
|
|
|
// Pooler connection strings
|
|
const poolerPsqlString = isMd5
|
|
? `psql "postgresql://${poolerUser}:${password}@${poolerHost}:${poolerPort}/${poolerName}?options=reference%3D${projectRef}"`
|
|
: `psql -h ${poolerHost} -p ${poolerPort} -d ${poolerName} -U ${poolerUser}`
|
|
|
|
const poolerUriString = poolingInfo?.connectionString ?? ''
|
|
|
|
const nodejsPoolerUriString = `DATABASE_URL=${poolingInfo?.connectionString}`
|
|
|
|
const poolerGolangString = `user=${poolerUser}
|
|
password=${password}
|
|
host=${poolerHost}
|
|
port=${poolerPort}
|
|
dbname=${poolerName}${isMd5 ? `options=reference=${projectRef}` : ''}`
|
|
|
|
const poolerJdbcString = `jdbc:postgresql://${poolerHost}:${poolerPort}/${poolerName}?user=${poolerUser}${isMd5 ? `&options=reference%3D${projectRef}` : ''}&password=${password}`
|
|
|
|
const sqlalchemyString = `user=${directUser}
|
|
password=${password}
|
|
host=${directHost}
|
|
port=${directPort}
|
|
dbname=${directName}`
|
|
|
|
const poolerSqlalchemyString = `user=${poolerUser}
|
|
password=${password}
|
|
host=${poolerHost}
|
|
port=${poolerPort}
|
|
dbname=${poolerName}`
|
|
|
|
return {
|
|
direct: {
|
|
psql: directPsqlString,
|
|
uri: directUriString,
|
|
golang: directGolangString,
|
|
jdbc: directJdbcString,
|
|
dotnet: directDotNetString,
|
|
nodejs: directNodejsString,
|
|
php: directGolangString,
|
|
python: directGolangString,
|
|
sqlalchemy: sqlalchemyString,
|
|
},
|
|
pooler: {
|
|
psql: poolerPsqlString,
|
|
uri: poolerUriString,
|
|
golang: poolerGolangString,
|
|
jdbc: poolerJdbcString,
|
|
dotnet: poolerDotNetString,
|
|
nodejs: nodejsPoolerUriString,
|
|
php: poolerGolangString,
|
|
python: poolerGolangString,
|
|
sqlalchemy: poolerSqlalchemyString,
|
|
},
|
|
}
|
|
}
|
|
|
|
const DB_USER_DESC = 'Database user (e.g postgres)'
|
|
const DB_PASS_DESC = 'Database password'
|
|
const DB_NAME_DESC = 'Database name (e.g postgres)'
|
|
const PROJECT_REF_DESC = "Project's reference ID"
|
|
const PORT_NUMBER_DESC = 'Port number (Use 5432 if using prepared statements)'
|
|
|
|
// [Joshen] This is to the best of interpreting the syntax from the API response
|
|
// // There's different format for PG13 (depending on authentication method being md5) and PG14
|
|
export const constructConnStringSyntax = (
|
|
connString: string,
|
|
{
|
|
selectedTab,
|
|
usePoolerConnection,
|
|
ref,
|
|
cloudProvider,
|
|
region,
|
|
tld,
|
|
portNumber,
|
|
}: {
|
|
selectedTab: 'uri' | 'psql' | 'golang' | 'jdbc' | 'dotnet' | 'nodejs' | 'php' | 'python'
|
|
usePoolerConnection: boolean
|
|
ref: string
|
|
cloudProvider: string
|
|
region: string
|
|
tld: string
|
|
portNumber: string
|
|
}
|
|
) => {
|
|
const isMd5 = connString.includes('options=reference')
|
|
const poolerHostDetails = [
|
|
{ value: cloudProvider.toLocaleLowerCase(), tooltip: 'Cloud provider' },
|
|
{ value: '-0-', tooltip: undefined },
|
|
{ value: region, tooltip: "Project's region" },
|
|
{ value: `.pooler.supabase.${tld}`, tooltip: undefined },
|
|
]
|
|
const dbHostDetails = [
|
|
{ value: 'db.', tooltip: undefined },
|
|
{ value: ref, tooltip: PROJECT_REF_DESC },
|
|
{ value: `.supabase.${tld}`, tooltip: undefined },
|
|
]
|
|
|
|
if (selectedTab === 'uri' || selectedTab === 'nodejs') {
|
|
if (isMd5) {
|
|
return [
|
|
{ value: 'postgresql://', tooltip: undefined },
|
|
{ value: '[user]', tooltip: DB_USER_DESC },
|
|
{ value: ':', tooltip: undefined },
|
|
{ value: '[password]', tooltip: DB_PASS_DESC },
|
|
{ value: '@', tooltip: undefined },
|
|
...(usePoolerConnection ? poolerHostDetails : dbHostDetails),
|
|
{ value: ':', tooltip: undefined },
|
|
{ value: portNumber, tooltip: PORT_NUMBER_DESC },
|
|
{ value: '/', tooltip: undefined },
|
|
{ value: '[db-name]', tooltip: DB_NAME_DESC },
|
|
...(usePoolerConnection
|
|
? [
|
|
{ value: `?options=reference%3D`, tooltip: undefined },
|
|
{ value: ref, tooltip: PROJECT_REF_DESC },
|
|
]
|
|
: []),
|
|
]
|
|
} else {
|
|
return [
|
|
{ value: 'postgresql://', tooltip: undefined },
|
|
{ value: '[user]', tooltip: DB_USER_DESC },
|
|
...(usePoolerConnection
|
|
? [
|
|
{ value: '.', tooltip: undefined },
|
|
{ value: ref, tooltip: PROJECT_REF_DESC },
|
|
]
|
|
: []),
|
|
{ value: ':', tooltip: undefined },
|
|
{ value: '[password]', tooltip: DB_PASS_DESC },
|
|
{ value: '@', tooltip: undefined },
|
|
...(usePoolerConnection ? poolerHostDetails : dbHostDetails),
|
|
{ value: ':', tooltip: undefined },
|
|
{ value: portNumber, tooltip: PORT_NUMBER_DESC },
|
|
{ value: '/', tooltip: undefined },
|
|
{ value: '[db-name]', tooltip: DB_NAME_DESC },
|
|
]
|
|
}
|
|
}
|
|
|
|
if (selectedTab === 'psql') {
|
|
if (isMd5) {
|
|
return [
|
|
{ value: 'psql "postgresql://', tooltip: undefined },
|
|
{ value: '[user]', tooltip: DB_USER_DESC },
|
|
{ value: ':', tooltip: undefined },
|
|
{ value: '[password]', tooltip: DB_PASS_DESC },
|
|
{ value: '@', tooltip: undefined },
|
|
...(usePoolerConnection ? poolerHostDetails : dbHostDetails),
|
|
{ value: ':', tooltip: undefined },
|
|
{ value: portNumber, tooltip: PORT_NUMBER_DESC },
|
|
{ value: '/', tooltip: undefined },
|
|
{ value: '[db-name]', tooltip: DB_NAME_DESC },
|
|
...(usePoolerConnection
|
|
? [
|
|
{ value: '?options=reference%3D', tooltip: undefined },
|
|
{ value: ref, tooltip: PROJECT_REF_DESC },
|
|
]
|
|
: []),
|
|
]
|
|
} else {
|
|
return [
|
|
{ value: 'psql -h ', tooltip: undefined },
|
|
...(usePoolerConnection ? poolerHostDetails : dbHostDetails),
|
|
{ value: ' -p ', tooltip: undefined },
|
|
{ value: portNumber, tooltip: PORT_NUMBER_DESC },
|
|
{ value: ' -d ', tooltip: undefined },
|
|
{ value: '[db-name]', tooltip: DB_NAME_DESC },
|
|
{ value: ' -U ', tooltip: undefined },
|
|
{ value: '[user]', tooltip: DB_USER_DESC },
|
|
...(usePoolerConnection
|
|
? [
|
|
{ value: '.', tooltip: undefined },
|
|
{ value: ref, tooltip: PROJECT_REF_DESC },
|
|
]
|
|
: []),
|
|
]
|
|
}
|
|
}
|
|
|
|
if (selectedTab === 'golang' || selectedTab === 'php' || selectedTab === 'python') {
|
|
if (isMd5) {
|
|
return [
|
|
{ value: 'user=', tooltip: undefined },
|
|
{ value: '[user]', tooltip: DB_USER_DESC },
|
|
{ value: ' password=', tooltip: undefined },
|
|
{ value: '[password]', tooltip: DB_PASS_DESC },
|
|
{ value: ' host=', tooltip: undefined },
|
|
...(usePoolerConnection ? poolerHostDetails : dbHostDetails),
|
|
{ value: ' port=', tooltip: undefined },
|
|
{ value: portNumber, tooltip: PORT_NUMBER_DESC },
|
|
{ value: ' dbname=', tooltip: undefined },
|
|
{ value: '[db-name]', tooltip: DB_NAME_DESC },
|
|
...(usePoolerConnection
|
|
? [
|
|
{ value: ' options=reference=', tooltip: undefined },
|
|
{ value: ref, tooltip: PROJECT_REF_DESC },
|
|
]
|
|
: []),
|
|
]
|
|
} else {
|
|
return [
|
|
{ value: 'user=', tooltip: undefined },
|
|
{ value: '[user]', tooltip: DB_USER_DESC },
|
|
...(usePoolerConnection
|
|
? [
|
|
{ value: '.', tooltip: undefined },
|
|
{ value: ref, tooltip: PROJECT_REF_DESC },
|
|
]
|
|
: []),
|
|
{ value: ' password=', tooltip: undefined },
|
|
{ value: '[password]', tooltip: DB_PASS_DESC },
|
|
{ value: ' host=', tooltip: undefined },
|
|
...(usePoolerConnection ? poolerHostDetails : dbHostDetails),
|
|
{ value: ' port=', tooltip: undefined },
|
|
{ value: portNumber, tooltip: PORT_NUMBER_DESC },
|
|
{ value: ' dbname=', tooltip: undefined },
|
|
{ value: '[db-name]', tooltip: DB_NAME_DESC },
|
|
]
|
|
}
|
|
}
|
|
|
|
if (selectedTab === 'jdbc') {
|
|
if (isMd5) {
|
|
return [
|
|
{ value: 'jdbc:postgresql://', tooltip: undefined },
|
|
...(usePoolerConnection ? poolerHostDetails : dbHostDetails),
|
|
{ value: ':', tooltip: undefined },
|
|
{ value: portNumber, tooltip: PORT_NUMBER_DESC },
|
|
{ value: '/', tooltip: undefined },
|
|
{ value: '[db-name]', tooltip: DB_NAME_DESC },
|
|
{ value: '?user=', tooltip: undefined },
|
|
{ value: '[user]', tooltip: DB_USER_DESC },
|
|
{ value: '&password=', tooltip: undefined },
|
|
{ value: '[password]', tooltip: DB_PASS_DESC },
|
|
...(usePoolerConnection
|
|
? [
|
|
{ value: '&options=reference%3D', tooltip: undefined },
|
|
{ value: ref, tooltip: PROJECT_REF_DESC },
|
|
]
|
|
: []),
|
|
]
|
|
} else {
|
|
return [
|
|
{ value: 'jdbc:postgresql://', tooltip: undefined },
|
|
...(usePoolerConnection ? poolerHostDetails : dbHostDetails),
|
|
{ value: `:`, tooltip: undefined },
|
|
{ value: portNumber, tooltip: PORT_NUMBER_DESC },
|
|
{ value: '/', tooltip: undefined },
|
|
{ value: '[db-name]', tooltip: DB_NAME_DESC },
|
|
{ value: '?user=', tooltip: undefined },
|
|
{ value: '[user]', tooltip: DB_USER_DESC },
|
|
...(usePoolerConnection
|
|
? [
|
|
{ value: '.', tooltip: undefined },
|
|
{ value: ref, tooltip: PROJECT_REF_DESC },
|
|
]
|
|
: []),
|
|
{ value: '&password=', tooltip: undefined },
|
|
{ value: '[password]', tooltip: DB_PASS_DESC },
|
|
]
|
|
}
|
|
}
|
|
|
|
if (selectedTab === 'dotnet') {
|
|
if (isMd5) {
|
|
return [
|
|
{ value: 'User Id=', tooltip: undefined },
|
|
{ value: '[user]', tooltip: DB_USER_DESC },
|
|
{ value: ';Password=', tooltip: undefined },
|
|
{ value: '[password]', tooltip: DB_PASS_DESC },
|
|
{ value: ';Server=', tooltip: undefined },
|
|
...(usePoolerConnection ? poolerHostDetails : dbHostDetails),
|
|
{ value: ';Port=', tooltip: undefined },
|
|
{ value: portNumber, tooltip: PORT_NUMBER_DESC },
|
|
{ value: ';Database=', tooltip: undefined },
|
|
{ value: '[db-name]', tooltip: DB_NAME_DESC },
|
|
...(usePoolerConnection
|
|
? [
|
|
{ value: ";Options='reference=", tooltip: undefined },
|
|
{ value: ref, tooltip: PROJECT_REF_DESC },
|
|
{ value: "'", tooltip: undefined },
|
|
]
|
|
: []),
|
|
]
|
|
} else {
|
|
return [
|
|
{ value: 'User Id=', tooltip: undefined },
|
|
{ value: '[user]', tooltip: DB_USER_DESC },
|
|
...(usePoolerConnection
|
|
? [
|
|
{ value: '.', tooltip: undefined },
|
|
{ value: ref, tooltip: PROJECT_REF_DESC },
|
|
]
|
|
: []),
|
|
{ value: ';Password=', tooltip: undefined },
|
|
{ value: '[password]', tooltip: DB_PASS_DESC },
|
|
{ value: ';Server=', tooltip: undefined },
|
|
...(usePoolerConnection ? poolerHostDetails : dbHostDetails),
|
|
{ value: ';Port=', tooltip: undefined },
|
|
{ value: portNumber, tooltip: PORT_NUMBER_DESC },
|
|
{ value: ';Database=', tooltip: undefined },
|
|
{ value: '[db-name]', tooltip: DB_NAME_DESC },
|
|
]
|
|
}
|
|
}
|
|
|
|
return []
|
|
}
|