83 lines
2.0 KiB
TypeScript
83 lines
2.0 KiB
TypeScript
import {envInt, envList, envStr} from '@atproto/common'
|
|
|
|
export type Config = {
|
|
service: ServiceConfig
|
|
db: DbConfig
|
|
}
|
|
|
|
export type ServiceConfig = {
|
|
port: number
|
|
version?: string
|
|
hostnames: string[]
|
|
appHostname: string
|
|
}
|
|
|
|
export type DbConfig = {
|
|
url: string
|
|
migrationUrl?: string
|
|
pool: DbPoolConfig
|
|
schema?: string
|
|
}
|
|
|
|
export type DbPoolConfig = {
|
|
size: number
|
|
maxUses: number
|
|
idleTimeoutMs: number
|
|
}
|
|
|
|
export type Environment = {
|
|
port?: number
|
|
version?: string
|
|
hostnames: string[]
|
|
appHostname?: string
|
|
dbPostgresUrl?: string
|
|
dbPostgresMigrationUrl?: string
|
|
dbPostgresSchema?: string
|
|
dbPostgresPoolSize?: number
|
|
dbPostgresPoolMaxUses?: number
|
|
dbPostgresPoolIdleTimeoutMs?: number
|
|
}
|
|
|
|
export const readEnv = (): Environment => {
|
|
return {
|
|
port: envInt('LINK_PORT'),
|
|
version: envStr('LINK_VERSION'),
|
|
hostnames: envList('LINK_HOSTNAMES'),
|
|
appHostname: envStr('LINK_APP_HOSTNAME'),
|
|
dbPostgresUrl: envStr('LINK_DB_POSTGRES_URL'),
|
|
dbPostgresMigrationUrl: envStr('LINK_DB_POSTGRES_MIGRATION_URL'),
|
|
dbPostgresSchema: envStr('LINK_DB_POSTGRES_SCHEMA'),
|
|
dbPostgresPoolSize: envInt('LINK_DB_POSTGRES_POOL_SIZE'),
|
|
dbPostgresPoolMaxUses: envInt('LINK_DB_POSTGRES_POOL_MAX_USES'),
|
|
dbPostgresPoolIdleTimeoutMs: envInt(
|
|
'LINK_DB_POSTGRES_POOL_IDLE_TIMEOUT_MS',
|
|
),
|
|
}
|
|
}
|
|
|
|
export const envToCfg = (env: Environment): Config => {
|
|
const serviceCfg: ServiceConfig = {
|
|
port: env.port ?? 3000,
|
|
version: env.version,
|
|
hostnames: env.hostnames,
|
|
appHostname: env.appHostname || 'bsky.app',
|
|
}
|
|
if (!env.dbPostgresUrl) {
|
|
throw new Error('Must configure postgres url (LINK_DB_POSTGRES_URL)')
|
|
}
|
|
const dbCfg: DbConfig = {
|
|
url: env.dbPostgresUrl,
|
|
migrationUrl: env.dbPostgresMigrationUrl,
|
|
schema: env.dbPostgresSchema,
|
|
pool: {
|
|
idleTimeoutMs: env.dbPostgresPoolIdleTimeoutMs ?? 10000,
|
|
maxUses: env.dbPostgresPoolMaxUses ?? Infinity,
|
|
size: env.dbPostgresPoolSize ?? 10,
|
|
},
|
|
}
|
|
return {
|
|
service: serviceCfg,
|
|
db: dbCfg,
|
|
}
|
|
}
|