src/config.js
import { merge, keys, each, isString } from 'lodash'
let defaultConfig = {
accountId: process.env.AUTHROCKET_ACCOUNT_ID,
apiKey: process.env.AUTHROCKET_API_KEY,
realmId: process.env.AUTHROCKET_REALM_ID,
jwtSecret: process.env.AUTHROCKET_JWT_SECRET,
apiUrl: process.env.AUTHROCKET_API_URL || 'https://api-e1.authrocket.com/v1/',
jsUrl: process.env.AUTHROCKET_JS_URL
}
let envName = 'prod'
let configInstance = null // Singleton variable
class Config {
constructor () {
if (!configInstance) {
configInstance = this
}
return merge(configInstance, defaultConfig)
}
set envName (newEnv) {
envName = newEnv
}
get env () {
return defaultConfig.envs[envName]
}
applySettings (settingsData) {
each(keys(settingsData), key => {
this[key] = settingsData[key]
})
}
// Map getters that handle removing trailing slash of urls
get urls () {
let jsUrl = this.jsUrl
let apiUrl = this.apiUrl
return {
get api () {
return apiUrl ? removeTrailingSlash(apiUrl) : null
},
get js () {
return jsUrl ? removeTrailingSlash(jsUrl) : null
}
}
}
}
let config = new Config()
export default config
function removeTrailingSlash (url) {
if (!isString(url)) {
console.error({
description: 'Slash can only be removed from strings.',
func: 'removeTrailingSlash', file: 'config'
})
return url
}
return url.replace(/\/$/, '')
}