| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import type { ConnectionStringMethod } from './Connect.constants'
- import type { ConnectionStringPooler } from './Connect.types'
- export const DEFAULT_PORT = '5432'
- export const PASSWORD_PLACEHOLDER = '[YOUR-PASSWORD]'
- export type ConnectionParams = {
- host: string
- port: string
- user: string
- database: string
- }
- export const resolveConnectionString = ({
- connectionMethod,
- useSharedPooler,
- connectionStringPooler,
- }: {
- connectionMethod: ConnectionStringMethod
- useSharedPooler: boolean
- connectionStringPooler: ConnectionStringPooler | undefined
- }) => {
- if (!connectionStringPooler) return ''
- if (connectionMethod === 'direct') {
- return connectionStringPooler.direct ?? ''
- }
- if (connectionMethod === 'session') {
- return connectionStringPooler.sessionShared ?? ''
- }
- if (useSharedPooler || !connectionStringPooler.transactionDedicated) {
- return connectionStringPooler.transactionShared ?? ''
- }
- return connectionStringPooler.transactionDedicated ?? ''
- }
- export const parseConnectionParams = (connectionString: string): ConnectionParams => {
- if (!connectionString) {
- return {
- host: 'hidden',
- port: DEFAULT_PORT,
- user: 'hidden',
- database: 'hidden',
- }
- }
- try {
- const parsed = new URL(connectionString)
- return {
- host: parsed.hostname || 'hidden',
- port: parsed.port || DEFAULT_PORT,
- user: parsed.username || 'hidden',
- database: parsed.pathname?.replace(/^\//, '') || 'hidden',
- }
- } catch (error) {
- return {
- host: 'hidden',
- port: DEFAULT_PORT,
- user: 'hidden',
- database: 'hidden',
- }
- }
- }
- export const buildSafeConnectionString = (
- connectionString: string,
- params: ConnectionParams
- ): string => {
- if (!connectionString) return ''
- const search = (() => {
- try {
- return new URL(connectionString).search
- } catch (error) {
- return ''
- }
- })()
- return `postgresql://${params.user}:${PASSWORD_PLACEHOLDER}@${params.host}:${params.port}/${params.database}${search}`
- }
- export const buildConnectionParameters = (params: ConnectionParams) => [
- { key: 'host', value: params.host },
- { key: 'port', value: params.port },
- { key: 'database', value: params.database },
- { key: 'user', value: params.user },
- ]
|