Bluesky app fork with some witchin' additions 馃挮
at post-text-option 101 lines 2.8 kB view raw
1import {envBool, envInt, envList, envStr} from '@atproto/common' 2 3export type Config = { 4 service: ServiceConfig 5 db: DbConfig 6} 7 8export type ServiceConfig = { 9 port: number 10 version?: string 11 hostnames: string[] 12 hostnamesSet: Set<string> 13 appHostname: string 14 safelinkEnabled: boolean 15 safelinkPdsUrl?: string 16 safelinkAgentIdentifier?: string 17 safelinkAgentPass?: string 18} 19 20export type DbConfig = { 21 url: string 22 migrationUrl?: string 23 pool: DbPoolConfig 24 schema?: string 25} 26 27export type DbPoolConfig = { 28 size: number 29 maxUses: number 30 idleTimeoutMs: number 31} 32 33export type Environment = { 34 port?: number 35 version?: string 36 hostnames: string[] 37 appHostname?: string 38 dbPostgresUrl?: string 39 dbPostgresMigrationUrl?: string 40 dbPostgresSchema?: string 41 dbPostgresPoolSize?: number 42 dbPostgresPoolMaxUses?: number 43 dbPostgresPoolIdleTimeoutMs?: number 44 safelinkEnabled?: boolean 45 safelinkPdsUrl?: string 46 safelinkAgentIdentifier?: string 47 safelinkAgentPass?: string 48} 49 50export const readEnv = (): Environment => { 51 return { 52 port: envInt('LINK_PORT'), 53 version: envStr('LINK_VERSION'), 54 hostnames: envList('LINK_HOSTNAMES'), 55 appHostname: envStr('LINK_APP_HOSTNAME'), 56 dbPostgresUrl: envStr('LINK_DB_POSTGRES_URL'), 57 dbPostgresMigrationUrl: envStr('LINK_DB_POSTGRES_MIGRATION_URL'), 58 dbPostgresSchema: envStr('LINK_DB_POSTGRES_SCHEMA'), 59 dbPostgresPoolSize: envInt('LINK_DB_POSTGRES_POOL_SIZE'), 60 dbPostgresPoolMaxUses: envInt('LINK_DB_POSTGRES_POOL_MAX_USES'), 61 dbPostgresPoolIdleTimeoutMs: envInt( 62 'LINK_DB_POSTGRES_POOL_IDLE_TIMEOUT_MS', 63 ), 64 safelinkEnabled: envBool('LINK_SAFELINK_ENABLED'), 65 safelinkPdsUrl: envStr('LINK_SAFELINK_PDS_URL'), 66 safelinkAgentIdentifier: envStr('LINK_SAFELINK_AGENT_IDENTIFIER'), 67 safelinkAgentPass: envStr('LINK_SAFELINK_AGENT_PASS'), 68 } 69} 70 71export const envToCfg = (env: Environment): Config => { 72 const serviceCfg: ServiceConfig = { 73 port: env.port ?? 3000, 74 version: env.version, 75 hostnames: env.hostnames, 76 hostnamesSet: new Set(env.hostnames), 77 appHostname: env.appHostname ?? 'bsky.app', 78 safelinkEnabled: env.safelinkEnabled ?? false, 79 safelinkPdsUrl: env.safelinkPdsUrl, 80 safelinkAgentIdentifier: env.safelinkAgentIdentifier, 81 safelinkAgentPass: env.safelinkAgentPass, 82 } 83 if (!env.dbPostgresUrl) { 84 throw new Error('Must configure postgres url (LINK_DB_POSTGRES_URL)') 85 } 86 const dbCfg: DbConfig = { 87 url: env.dbPostgresUrl, 88 migrationUrl: env.dbPostgresMigrationUrl, 89 schema: env.dbPostgresSchema, 90 pool: { 91 idleTimeoutMs: env.dbPostgresPoolIdleTimeoutMs ?? 10000, 92 maxUses: env.dbPostgresPoolMaxUses ?? Infinity, 93 size: env.dbPostgresPoolSize ?? 10, 94 }, 95 } 96 97 return { 98 service: serviceCfg, 99 db: dbCfg, 100 } 101}