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()