@hellocoop/api
Version:
Client API for Hellō https://hello.dev
128 lines (127 loc) • 5.37 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getApiRoute = exports.getAuthApiRoute = exports.getLogoutApiRoute = exports.getLoginApiRoute = exports.getConfig = exports.configure = exports.isConfigured = void 0;
const helper_server_1 = require("@hellocoop/helper-server");
const HELLO_DOMAIN = process.env.HELLO_DOMAIN || 'hello.coop';
const HOST = process.env.HOST || process.env.HELLO_HOST || undefined;
const _configuration = {
production: process.env.NODE_ENV === 'production',
routes: {
loggedIn: 'not-configured',
loggedOut: 'not-configured',
},
cookies: {
authName: 'hellocoop_auth',
oidcName: 'hellocoop_oidc',
},
apiRoute: 'not-configured',
authApiRoute: 'not-configured',
loginApiRoute: 'not-configured',
logoutApiRoute: 'not-configured',
redirectURI: 'not-configured',
// configured only by process.env or .env
clientId: '',
secret: process.env.COOKIE_SECRET || process.env.HELLO_COOKIE_SECRET,
host: HOST,
// for internal testing
helloDomain: HELLO_DOMAIN,
helloWallet: process.env.HELLO_WALLET
|| 'https://wallet.' + HELLO_DOMAIN,
};
exports.isConfigured = false;
const pendingConfigurations = [];
const confirmPath = (label, path) => {
if (!path)
return undefined;
if (!path.startsWith('/')) {
console.error(`${label}=${path} ignored, must start with /`);
return undefined;
}
return path;
};
const configure = function (config) {
_configuration.clientId = process.env.CLIENT_ID || process.env.HELLO_CLIENT_ID || config.client_id;
if (config.routes) {
_configuration.routes = {
..._configuration.routes,
...config.routes
};
}
const apiRoute = process.env.HELLO_API_ROUTE || config.apiRoute || '/api/hellocoop';
_configuration.apiRoute = apiRoute;
_configuration.authApiRoute = apiRoute + '?op=auth';
_configuration.loginApiRoute = apiRoute + '?op=login';
_configuration.logoutApiRoute = apiRoute + '?op=logout';
_configuration.routes = {
loggedIn: confirmPath('process.env.HELLO_LOGGED_IN', process.env.HELLO_LOGGED_IN)
|| confirmPath('config routes.loggedIn', config.routes?.loggedIn)
|| '/',
loggedOut: confirmPath('process.env.HELLO_LOGGED_OUT', process.env.HELLO_LOGGED_OUT)
|| confirmPath('config routes.loggedOut', config.routes?.loggedOut)
|| '/',
error: confirmPath('process.env.HELLO_ERROR', process.env.HELLO_ERROR)
|| confirmPath('config routes.error', config.routes?.error)
};
_configuration.redirectURI = HOST
? `https://${HOST}${apiRoute}`
: undefined,
_configuration.loginSync = config.loginSync;
_configuration.logoutSync = config.logoutSync;
if (process.env.HELLO_SCOPES)
_configuration.scope = process.env.HELLO_SCOPES.split(' ');
else
_configuration.scope = config.scope;
if (process.env.HELLO_PROVIDER_HINT)
_configuration.provider_hint = process.env.HELLO_PROVIDER_HINT.split(' ');
else
_configuration.provider_hint = config.provider_hint;
if (process.env.HELLO_DEBUG)
_configuration.logDebug = true;
_configuration.sameSiteStrict = !!process.env.HELLO_SAME_SITE_STRICT || config.sameSiteStrict;
_configuration.cookieToken = !!process.env.HELLO_COOKIE_TOKEN || config.cookieToken;
exports.isConfigured = true;
if (!_configuration.clientId) {
const message = 'No CLIENT_ID or HELLO_CLIENT_ID was in environment or client_id in hello.config';
_configuration.error = [message];
console.error(message);
exports.isConfigured = false;
}
if (!_configuration.secret) {
const message = 'No COOKIE_SECRET or HELLO_COOKIE_SECRET was in environment';
_configuration.error = [message];
console.error(message);
exports.isConfigured = false;
}
if (_configuration.secret && !(0, helper_server_1.checkSecret)(_configuration.secret)) {
const message = 'HELLO_COOKIE_SECRET is not 32 hex digits';
_configuration.error = [message];
console.error(message);
exports.isConfigured = false;
}
while (pendingConfigurations.length > 0) {
const resolve = pendingConfigurations.pop();
if (resolve)
resolve(_configuration);
}
if (config.logConfig)
console.log('\n@hellocoop/api config:\n', JSON.stringify({ config: _configuration }, null, 2));
};
exports.configure = configure;
const getConfig = function () {
if (!exports.isConfigured) {
return new Promise((resolve) => {
pendingConfigurations.push(() => resolve(_configuration));
});
}
return Promise.resolve(_configuration);
};
exports.getConfig = getConfig;
const getLoginApiRoute = () => { return _configuration.loginApiRoute; };
exports.getLoginApiRoute = getLoginApiRoute;
const getLogoutApiRoute = () => { return _configuration.logoutApiRoute; };
exports.getLogoutApiRoute = getLogoutApiRoute;
const getAuthApiRoute = () => { return _configuration.authApiRoute; };
exports.getAuthApiRoute = getAuthApiRoute;
const getApiRoute = () => { return _configuration.apiRoute; };
exports.getApiRoute = getApiRoute;
exports.default = _configuration;
;