Fork of github.com/did-method-plc/did-method-plc

Add config for Postgres pool (#57)

* pass cfg to postgres pool

* Update packages/server/service/index.js

Co-authored-by: devin ivy <devinivy@gmail.com>

* Add missing index on (did, createdAt) (#58)

* Add index on (did, createdAt)

* rename

* style

---------

Co-authored-by: devin ivy <devinivy@gmail.com>

Changed files
+27 -4
packages
server
service
src
+11 -1
packages/server/service/index.js
···
await migrateDb.migrateToLatestOrThrow()
await migrateDb.close()
}
// Use lower-credentialed user to run the app
const db = Database.postgres({
url: pgUrl(dbCreds),
schema: dbSchema,
})
-
const port = parseInt(process.env.PORT)
const plc = PlcServer.create({ db, port, version })
const server = await plc.start()
server.keepAliveTimeout = 90000
···
const pgUrl = ({ username = "postgres", password = "postgres", host = "localhost", port = "5432", database = "postgres", sslmode }) => {
const enc = encodeURIComponent
return `postgresql://${username}:${enc(password)}@${host}:${port}/${database}${sslmode ? `?sslmode=${enc(sslmode)}` : ''}`
}
main()
···
await migrateDb.migrateToLatestOrThrow()
await migrateDb.close()
}
+
const dbPoolSize = parseMaybeInt(process.env.DB_POOL_SIZE)
+
const dbPoolMaxUses = parseMaybeInt(process.env.DB_POOL_MAX_USES)
+
const dbPoolIdleTimeoutMs = parseMaybeInt(process.env.PDS_DB_POOL_IDLE_TIMEOUT_MS)
// Use lower-credentialed user to run the app
const db = Database.postgres({
url: pgUrl(dbCreds),
schema: dbSchema,
+
poolSize: dbPoolSize,
+
poolMaxUses: dbPoolMaxUses,
+
poolIdleTimeoutMs: dbPoolIdleTimeoutMs,
})
+
const port = parseMaybeInt(process.env.PORT)
const plc = PlcServer.create({ db, port, version })
const server = await plc.start()
server.keepAliveTimeout = 90000
···
const pgUrl = ({ username = "postgres", password = "postgres", host = "localhost", port = "5432", database = "postgres", sslmode }) => {
const enc = encodeURIComponent
return `postgresql://${username}:${enc(password)}@${host}:${port}/${database}${sslmode ? `?sslmode=${enc(sslmode)}` : ''}`
+
}
+
+
const parseMaybeInt = (str) => {
+
return str ? parseInt(str, 10) : undefined
}
main()
+16 -3
packages/server/src/db/index.ts
···
})
}
-
static postgres(opts: { url: string; schema?: string }): Database {
-
const { url, schema } = opts
-
const pool = new PgPool({ connectionString: url })
// Select count(*) and other pg bigints as js integer
pgTypes.setTypeParser(pgTypes.builtins.INT8, (n) => parseInt(n, 10))
···
createdAt: row.createdAt.toISOString(),
}))
}
}
export default Database
···
})
}
+
static postgres(opts: PgOptions): Database {
+
const { schema } = opts
+
const pool = new PgPool({
+
connectionString: opts.url,
+
max: opts.poolSize,
+
maxUses: opts.poolMaxUses,
+
idleTimeoutMillis: opts.poolIdleTimeoutMs,
+
})
// Select count(*) and other pg bigints as js integer
pgTypes.setTypeParser(pgTypes.builtins.INT8, (n) => parseInt(n, 10))
···
createdAt: row.createdAt.toISOString(),
}))
}
+
}
+
+
export type PgOptions = {
+
url: string
+
schema?: string
+
poolSize?: number
+
poolMaxUses?: number
+
poolIdleTimeoutMs?: number
}
export default Database