const Confidence = require('@hapipal/confidence') const Inert = require('@hapi/inert') const Vision = require('@hapi/vision') const Schwifty = require('@hapipal/schwifty') const HapiSwagger = require('hapi-swagger') const confs = { local: { db: process.env.DB_NAME, host: process.env.DB_HOST, port: process.env.DB_PORT, ssl: false, user: process.env.DB_USER, pw: process.env.DB_ROOT_PASSWORD, }, prod: { db: process.env.PSCALE_DB_NAME, host: process.env.PSCALE_DB_HOST, port: process.env.PSCALE_DB_PORT, branch: process.env.PSCALE_DB_BRANCH, ssl: true, user: process.env.PSCALE_DB_USER, pw: process.env.PSCALE_DB_PASSWORD, }, dbFlavor: process.env.DB_TYPE, useLocalDb: () => { return process.env.USE_LOCAL_DB == 'true' }, } const _current = { ssl: confs.useLocalDb() ? confs.local.ssl : confs.prod.ssl, host: confs.useLocalDb() ? confs.local.host : confs.prod.host, port: confs.useLocalDb() ? confs.local.port : confs.prod.port, database: confs.useLocalDb() ? confs.local.db : confs.prod.db, user: confs.useLocalDb() ? confs.local.user : confs.prod.user, password: confs.useLocalDb() ? confs.local.pw : confs.prod.pw, } /** Glue manifest as a confidence store */ module.exports = new Confidence.Store({ server: { host: process.env.API_HOST, port: { $filter: 'NODE_ENV', $default: { $param: 'API_PORT', $coerce: 'number', $default: process.env.API_PORT, }, test: { $value: undefined }, // Let the server find an open port }, debug: { $filter: 'NODE_ENV', $default: { log: ['error', 'start'], request: ['error'], }, production: { request: ['implementation'], }, }, }, register: { plugins: [ /** Main app */ { plugin: '../lib', routes: { prefix: '/api', }, options: { jwtKey: { $filter: 'NODE_ENV', $default: { $param: 'APP_SECRET', $default: 'app-secret', }, // Use .env file in production production: { $param: 'APP_SECRET', }, }, }, }, /** Documentaion plugins */ Inert, Vision, { plugin: HapiSwagger, options: { info: { title: 'Test API Documentation' }, }, }, /** Model and knex integration */ { plugin: Schwifty, options: { $filter: 'NODE_ENV', $default: {}, $base: { migrateOnStart: true, knex: { client: confs.dbFlavor, useNullAsDefault: true, connection: { database: _current.database, host: _current.host, port: _current.port, ssl: _current.ssl, user: _current.user, password: _current.password, }, }, }, production: { migrateOnStart: false, }, }, }, ], }, })