Fork of github.com/did-method-plc/did-method-plc
1'use strict' /* eslint-disable */ 2 3require('dd-trace/init') // Only works with commonjs 4const { Database, PlcServer } = require('..') 5 6const main = async () => { 7 const version = process.env.PLC_VERSION 8 const dbCreds = JSON.parse(process.env.DB_CREDS_JSON) 9 const dbSchema = process.env.DB_SCHEMA || undefined 10 const enableMigrations = process.env.ENABLE_MIGRATIONS === 'true' 11 if (enableMigrations) { 12 const dbMigrateCreds = JSON.parse(process.env.DB_MIGRATE_CREDS_JSON) 13 // Migrate using credentialed user 14 const migrateDb = Database.postgres({ 15 url: pgUrl(dbMigrateCreds), 16 schema: dbSchema, 17 }) 18 await migrateDb.migrateToLatestOrThrow() 19 await migrateDb.close() 20 } 21 const dbPoolSize = parseMaybeInt(process.env.DB_POOL_SIZE) 22 const dbPoolMaxUses = parseMaybeInt(process.env.DB_POOL_MAX_USES) 23 const dbPoolIdleTimeoutMs = parseMaybeInt(process.env.DB_POOL_IDLE_TIMEOUT_MS) 24 // Use lower-credentialed user to run the app 25 const db = Database.postgres({ 26 url: pgUrl(dbCreds), 27 schema: dbSchema, 28 poolSize: dbPoolSize, 29 poolMaxUses: dbPoolMaxUses, 30 poolIdleTimeoutMs: dbPoolIdleTimeoutMs, 31 }) 32 const port = parseMaybeInt(process.env.PORT) 33 const plc = PlcServer.create({ db, port, version }) 34 const server = await plc.start() 35 server.keepAliveTimeout = 90000 36 // Graceful shutdown (see also https://aws.amazon.com/blogs/containers/graceful-shutdowns-with-ecs/) 37 process.on('SIGTERM', async () => { 38 await plc.destroy() 39 }) 40} 41 42const pgUrl = ({ username = "postgres", password = "postgres", host = "localhost", port = "5432", database = "postgres", sslmode }) => { 43 const enc = encodeURIComponent 44 return `postgresql://${username}:${enc(password)}@${host}:${port}/${database}${sslmode ? `?sslmode=${enc(sslmode)}` : ''}` 45} 46 47const parseMaybeInt = (str) => { 48 return str ? parseInt(str, 10) : undefined 49} 50 51main()