@mantris/appify
Version:
Very opinionated Node.js API boilerplate as module.
70 lines (66 loc) • 2.14 kB
JavaScript
const config = require('@mantris/config')
const defaultsdeep = require('lodash.defaultsdeep')
const env = require('sugar-env')
const { format } = require('util')
/**
* @param {Object} options Custom config options factory.
* @param {String} environment Environment name.
* @param {Object} logger Logger instance.
* @returns {Object} Config object.
*/
module.exports = (options, environment, logger) => {
const name = env.get([ 'APPIFY_APP_NAME', 'npm_package_name' ], 'app')
return config(defaultsdeep(options, {
app: {
name,
version: env.get('GIT_RELEASE')
},
bugsnag: {
apiKey: env.get('BUGSNAG_API_KEY'),
appCommit: env.get('GIT_COMMIT'),
appVersion: env.get('GIT_RELEASE'),
appType: env.get('BUGSNAG_APP_TYPE', 'api'),
autoBreadcrumbs: env.get.boolean('BUGSNAG_AUTO_BREADCRUMBS', true),
autoNotify: env.get.boolean('BUGSNAG_AUTO_NOTIFY', true),
collectUserIp: env.get.boolean('BUGSNAG_COLLECT_USER_IP', true),
filters: [
/^password$/i,
/Authorization/i
],
logger,
notifyReleaseStages: [
'production',
'staging',
'review',
'test'
],
releaseStage: environment
},
deeptrace: {
dsn: env.get.url([ 'APPIFY_DEEPTRACE_DSN', 'DEEPTRACE_DSN' ]),
timeout: env.get.int([ 'APPIFY_DEEPTRACE_TIMEOUT', 'DEEPTRACE_TIMEOUT' ], 3000),
shouldSendCallback: (trace) => true,
tags: {
environment,
service: name,
commit: env.get('GIT_COMMIT'),
release: env.get('GIT_RELEASE')
}
},
morgan: {
format: env.get('APPIFY_MORGAN_FORMAT', ':method :url :status :: :response-time ms :: :res[deeptrace-id]')
},
sentry: {
environment,
attachStacktrace: true,
dsn: env.get([ 'APPIFY_SENTRY_DSN', 'SENTRY_DSN' ]),
tags: {
relese: env.get('GIT_RELEASE'),
commit: env.get('GIT_COMMIT')
},
beforeSend: (event) => environment !== env.DEVELOPMENT ? event : null,
release: format('%s@%s', name, env.get('GIT_RELEASE', 'development'))
}
}))
}