pgfy
Version:
A Node.js Toolbox for API and Microservices development.
195 lines (193 loc) • 6.36 kB
JavaScript
/* eslint-disable max-len */
const path = require('path');
module.exports = {
api: {
name: process.env.PGFY_API_NAME || 'API',
host: process.env.PGFY_API_HOST || '127.0.0.1',
port: process.env.PGFY_API_PORT || 3000,
componentsPath: process.env.PGFY_API_COMPONENTS_PATH || '/src/components',
modules: ['health-check'],
},
service: {
api: process.env.PGFY_API_NAME || 'API',
servicePath: process.env.PGFY_SERVICE_PATH || '/src/services',
modules: ['health-check'],
},
cote: {
helloInterval: 2000, // How often to broadcast a hello packet in milliseconds.
checkInterval: 4000, // How often to to check for missing nodes in milliseconds.
nodeTimeout: 5000, // Consider a node dead if not seen in this many milliseconds.
masterTimeout: 6000, // Consider a master node dead if not seen in this many milliseconds.
monitor: false, // Skips key equality checks when logging.
log: false, // If false, disables `helloLogsEnabled` and `statusLogsEnabled` no matter what value they have, and also own hello log.
helloLogsEnabled: true, // Notifies when another service goes online.
statusLogsEnabled: true, // Notifies when another service goes online or offline. If false, disables `helloLogsEnabled` as well.
ignoreProcess: false, // Ignores messages from other services within the same process.
environment: process.env.NODE_ENV, // Services will communicate only with services in the same environment
},
databases: {
postgres: {
host: process.env.PGFY_DATABASE_PG_HOST || '127.0.0.1',
port: process.env.PGFY_DATABASE_PG_PORT || 5432,
database: process.env.PGFY_DATABASE_PG_DATABASE || 'postgres',
user: process.env.PGFY_DATABASE_PG_USER || 'postgres',
password: process.env.PGFY_DATABASE_PG_PWS || '',
softDelete: process.env.PGFY_DATABASE_PG_SOFTDELETE || false,
},
mongodb: {
url: process.env.PGFY_DATABASE_MONGODB_URL,
database: process.env.DATABASE_MONGODB_DATABASE,
},
},
cache: {
redis: {
host: process.env.PGFY_CACHE_REDIS_HOST,
port: process.env.PGFY_CACHE_REDIS_PORT,
georedis: process.env.PGFY_CACHE_REDIS_GEOREDIS,
expireTime: process.env.PGFY_CACHE_REDIS_EXPIRE_TIME || 1,
},
},
email: {
sendgrid: {
apiKey: process.env.PGFY_EMAIL_SENDGRID_API_KEY,
from: process.env.PGFY_EMAIL_SENDGRID_FROM,
},
nodemailer: {
service: process.env.PGFY_EMAIL_NODEMAILER_SERVICE,
from: process.env.PGFY_EMAIL_NODEMAILER_FROM,
auth: {
user: process.env.PGFY_EMAIL_NODEMAILER_USER,
pass: process.env.PGFY_EMAIL_NODEMAILER_PASS,
},
},
},
apm: {
sentry: {
dsn: process.env.PGFY_APM_SENTRY_DSN,
},
},
logger: {
timber: {
key: process.env.PGFY_LOGGER_TIMBER_KEY,
},
},
payments: {
gerencianet: {
client_id: process.env.PGFY_PAYMENTS_GERENCIANET_CLIENT_ID,
client_secret: process.env.PGFY_PAYMENTS_GERENCIANET_CLIENT_SECRET,
},
},
uploaders: {
storage: {
memory: process.env.PGFY_UPLOAD_MEMORY_STORAGE || false,
},
s3: {
accessKeyId: process.env.PGFY_AWS_ACCESS_KEY,
secretAccessKey: process.env.PGFY_AWS_SECRET_ACCESS,
thumbWidth: process.env.PGFY_AWS_S3_THUMB_WIDTH || 200,
},
},
pushNotification: {
apns: {
keyFile: process.env.PGFY_PUSH_NOTIFICATION_APNS_KEY_PATH || path.join(process.cwd(), 'apns_key.pem'),
certFile: process.env.PGFY_PUSH_NOTIFICATION_APNS_CERT_PATH || path.join(process.cwd(), 'apns_cert.pem'),
},
gcm: {
apiKey: process.env.PGFY_PPUSH_NOTIFICATION_GCM_API_KEY || '',
},
},
modules: [
{ variable: '_', name: 'lodash', options: {} },
{ variable: 'moment', name: 'moment', options: {} },
{ variable: 'bcrypt', name: 'bcryptjs', options: {} },
{ variable: 'nanoid', name: 'nanoid', options: {} },
{ variable: 'md5', name: 'md5-nodejs', options: {} },
{ variable: 'Collection', name: 'massive-collections', options: {} },
{ variable: 'GerenciaNet', name: 'gn-api-sdk-node', options: {} },
],
plugins: [
{
name: 'fastify-rate-limit',
options: {
max: 100,
timeWindow: '1 minute',
},
},
{
name: 'fastify-oas',
options: {},
},
{
name: 'fastify-helmet',
options: {},
},
{
name: 'fastify-multer',
options: {},
},
{
name: 'fastify-cors',
options: {
origin: '*',
},
},
{
name: 'fastify-tls-keygen',
options: {
key: process.env.PGFY_TLS_KEY_PATH || path.join(process.cwd(), 'api_key.pem'),
cert: process.env.PGFY_TLS_CERT_PATH || path.join(process.cwd(), 'api_cert.pem'),
},
env: 'production',
},
{
name: 'fastify-metrics',
options: { endpoint: '/metrics' },
},
{
name: 'fastify-session-sets',
options: { secret: process.env.PGFY_AUTH_SESSION_SECRET },
},
{
name: 'fastify-jwt',
options: {
secret: process.env.PGFY_AUTH_JWT_SECRET,
expiresIn: process.env.PGFY_AUTH_JWT_EXPIRES_IN || '10h',
},
},
{
name: 'fastify-oauth2',
options: {
startRedirectPath: process.env.PGFY_OAUTH2_FACEBOOK_START_PATH || '/login/facebook',
callbackUri: process.env.PGFY_OAUTH2_FACEBOOK_CALLBACK_URI || 'https://localhost:3000/login/facebook/callback',
},
},
],
swagger: {
routePrefix: process.env.PGFY_SWAGGER_ROUTE_PREFIX || '/documentation',
addModels: true,
exposeRoute: true,
swagger: {
info: {
title: process.env.PGFY_SWAGGER_INFO_TITLE || 'Swagger UI',
description: process.env.PGFY_SWAGGER_INFO_DESCRIPTION || 'Swagger UI - API Documentation',
version: process.env.PGFY_SWAGGER_INFO_VERSION || '1.0.0',
},
host: process.env.PGFY_SWAGGER_HOST_PORT || `127.0.0.1:${process.env.PGFY_API_PORT || 3000}`,
schemes: ['http'],
consumes: ['application/json'],
produces: ['application/json'],
securityDefinitions: {
Bearer: {
type: 'apiKey',
name: 'authorization',
in: 'header',
},
cookieAuth: {
type: 'apiKey',
in: 'header',
name: 'session-id',
},
},
},
},
};