import * as Hapi from 'hapi' import * as HapiNats from '@oyst/hapi-nats' import * as Replies from '@oyst/utils/lib/replies' import { I18N_CONFIG, NATS_URL, PREFIX_URL, HOST as host, PORT as port, } from './lib/constants' import Plugins from './plugins' import { i18n } from '@oyst/utils' import { makeError } from '@oyst/utils' import namespace from 'hapi-namespace' import routes from './routes' import snake from 'param-case' import triggerError from './lib/trigger_error' const server = new Hapi.Server() i18n.setConfig(I18N_CONFIG) server.connection({ host, port, routes: { cors: { additionalHeaders: [ 'oyst', 'oyst-authorization', 'oyst-user', 'oyst-session' ], credentials: true, origin: ['*'] } } }) server.register(Plugins, triggerError) const routesWithTag = routes.map(route => { if (!route.config) { route.config = {} } if (!route.config.tags) { route.config.tags = [] } if (route.config.tags.indexOf('api') === -1) { route.config.tags.push('api') } return route }) const { name } = require('../package.json') server.register({ options: { application: name, nats_url: NATS_URL, prefix: PREFIX_URL, project: 'CLICK', routes: routesWithTag, worker: name }, register: HapiNats.register }, err => { triggerError(err) }) server.ext('onPostAuth', (request: any, reply) => { i18n.i18n = request.i18n return reply.continue() }) server.ext('onPreResponse', (request, reply) => { if (request.response.isBoom === true) { const message = snake(request.response.output.payload.message || request.response.output.payload.error) request.response.source = '' return Replies.error(makeError(`CLICK-${request.response.output.statusCode}`, message), reply) } return reply.continue() }) server.start(err => { triggerError(err) console.info(`Server started at [${server.info.uri}]`) }) export default server