Skip to content

Instantly share code, notes, and snippets.

@beeman
Last active June 17, 2020 19:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save beeman/4c99f5c506d8025efc07640470c25aae to your computer and use it in GitHub Desktop.
Save beeman/4c99f5c506d8025efc07640470c25aae to your computer and use it in GitHub Desktop.
api-core.config.ts
import * as dotenv from 'dotenv'
import * as Redis from 'ioredis'
import { join } from 'path'
dotenv.config()
const int = (i: string) => parseInt(i, 10)
const bool = (val: string) => val && val === 'true'
const array = (val: string) =>
val && val.trim().length && val.includes(',') ? val.split(',') : [val]
const production = process.env.NODE_ENV !== 'development'
const apiHost = process.env.HOST || 'localhost'
const apiPort = int(process.env.PORT)
const proto = process.env.PROTO || production ? 'https' : 'http'
const wsProto = process.env.WS_PROTO || production ? 'wss' : 'ws'
const apiUrl = process.env.URL || `${proto}://${apiHost}:${apiPort}`
const apiWsUrl = process.env.WS_URL || `${wsProto}://${apiHost}:${apiPort}`
const siteHost = process.env.SITE_HOST || 'localhost'
const sitePort = int(process.env.SITE_PORT) || 4200
const siteUrl = process.env.SITE_URL || `${proto}://${siteHost}:${sitePort}`
const siteWsUrl = process.env.SITE_WS_URL || `${wsProto}://${siteHost}:${sitePort}`
export class ApiCoreConfig {
static production = process.env.NODE_ENV !== 'development'
static api = {
port: apiPort,
host: apiHost,
url: apiUrl,
root: `${apiUrl}/api`,
wsUrl: apiWsUrl,
webRoot: process.env.API_WEB_ROOT || join(__dirname, '..', 'web'),
}
static webConfig = {
production,
configUrl: siteUrl + '/api/web-config.js',
apiCoursesUrl: siteUrl + '/api/courses/',
apiRoot: siteUrl + '/graphql',
apiUrl: siteUrl + '/graphql',
apiWsUrl: siteWsUrl + '/graphql',
siteUrl,
}
static site = {
port: sitePort,
host: siteHost,
url: siteUrl,
graphqlUrl: process.env.GRAPHQL_URL || apiUrl + '/graphql',
graphqlWsUrl: process.env.GRAPHQL_WS_URL || apiUrl.replace('http', 'ws') + '/graphql',
}
static redis = {
url: process.env.REDIS_URL,
host: process.env.REDIS_HOST || 'localhost',
port: parseInt(process.env.REDIS_PORT, 10) || 6379,
}
static prisma = {
protocol: process.env.PRISMA_PROTOCOL,
endpoint: process.env.PRISMA_ENDPOINT,
port: process.env.PRISMA_PORT,
serviceName: process.env.PRISMA_SERVICE_NAME,
serviceStage: process.env.PRISMA_SERVICE_STAGE,
secret: process.env.PRISMA_SECRET,
debug: bool(process.env.PRISMA_DEBUG) || false,
}
// Concat the values above to a URI
static prismaEndpoint = [
[ApiCoreConfig.prisma.protocol, ApiCoreConfig.prisma.endpoint].join(''),
[
ApiCoreConfig.prisma.port,
ApiCoreConfig.prisma.serviceName,
ApiCoreConfig.prisma.serviceStage,
].join('/'),
].join(':')
static auth = {
adminEmails: array(process.env.AUTH_ADMIN_EMAILS || ''),
developerEmails: array(process.env.AUTH_DEVELOPER_EMAILS || ''),
bcrypt: {
saltRounds: 10,
},
cookies: {
enabled: process.env.AUTH_COOKIES_ENABLED || true,
name: process.env.AUTH_COOKIES_NAME || 'id',
options: {
domain: process.env.APP_DOMAIN || 'local.kikstart.one',
httpOnly: false,
},
},
jwt: {
secret: process.env.AUTH_JWT_SECRET || 'JWT SECRET',
},
password: {
bcryptSaltRounds: int(process.env.AUTH_JWT_SECRET) || 10,
minLength: int(process.env.AUTH_JWT_SECRET) || 8,
},
providers: {
facebook: {
clientId: process.env.FACEBOOK_CLIENT_ID || '',
clientSecret: process.env.FACEBOOK_CLIENT_SECRET || '',
},
github: {
clientId: process.env.GITHUB_CLIENT_ID || '',
clientSecret: process.env.GITHUB_CLIENT_SECRET || '',
},
google: {
clientId: process.env.GOOGLE_CLIENT_ID || '',
clientSecret: process.env.GOOGLE_CLIENT_SECRET || '',
},
heroku: {
clientId: process.env.HEROKU_CLIENT_ID || '',
clientSecret: process.env.HEROKU_CLIENT_SECRET || '',
},
infusionsoft: {
clientId: process.env.INFUSIONSOFT_CLIENT_ID || '',
clientSecret: process.env.INFUSIONSOFT_CLIENT_SECRET || '',
},
},
}
static mail = {
from: process.env.MAIL_DEFAULT_FROM || 'no reply <no-reply@example.com>',
transport: process.env.MAIL_SERVICE || 'smtp',
gmail: {
user: process.env.MAIL_GMAIL_USER || '',
pass: process.env.MAIL_GMAIL_PASS || '',
},
smtp: {
host: process.env.MAIL_SMTP_HOST || 'localhost',
port: int(process.env.MAIL_SMTP_PORT) || 25,
secure: bool(process.env.MAIL_SMTP_SECURE) || false,
},
}
static admin = {
paging: {
limit: 25,
},
}
static agent = {
defaultAgentId: process.env.DEFAULT_AGENT_ID || 'agent.local.kikstart.one',
}
static project = {
fileRoot: process.env.PROJECT_FILE_ROOT || join(process.cwd(), 'tmp'),
}
static paypal = {
clientId: process.env.PAYPAL_CLIENT_ID,
clientSecret: process.env.PAYPAL_CLIENT_SECRET,
sandbox: process.env.PAYPAL_SANDBOX,
}
static stripe = {
key: process.env.STRIPE_KEY,
secret: process.env.STRIPE_SECRET,
}
static unsplash = {
accessKey: process.env.UNSPLASH_ACCESS_KEY,
secretKey: process.env.UNSPLASH_SECRET_KEY,
}
static isAdminEmail(email: string) {
return !!ApiCoreConfig.auth.adminEmails.find(admin => admin === email)
}
static isDeveloperEmail(email: string) {
return !!ApiCoreConfig.auth.developerEmails.find(developer => developer === email)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment