UNPKG

@m-ld/gateway

Version:

m-ld gateway for services

94 lines 9.05 kB
import { Gateway, SubdomainCache } from './server/index.js'; import LOG from 'loglevel'; import { setupGatewayHttp } from './http/index.js'; import gracefulShutdown from 'http-graceful-shutdown'; import { as, asLogLevel, AuthKey, DomainKeyStore, Env, resolveDomain, validate } from './lib/index.js'; import { logNotifier, SmtpNotifier } from './server/Notifier.js'; import { uuid } from '@m-ld/m-ld'; import { Liquid } from 'liquidjs'; import { fileURLToPath } from 'url'; /** * Note environment variables required for Gateway node startup. * @see ../doc/self-host.md */ (async function () { const env = new Env('m-ld-gateway', { // Default is a volume mount, see fly.toml data: process.env.M_LD_GATEWAY_DATA_PATH || '/data' }); // Parse command line, environment variables & configuration const argv = (await env.yargs()).parseSync(); const config = validate(argv, as.object({ '@id': as.string().default(uuid), // Set the m-ld domain from the gateway if not declared '@domain': as.string().domain().default(config => resolveDomain(config.gateway)), '@context': as.forbidden(), gateway: as.string().required(), genesis: as.boolean().default(false), auth: as.object({ key: as.string().required() }).required(), key: as.object({ type: as.equal('rsa').default('rsa'), public: as.string().base64().required(), private: as.string().base64().required() }).required(), address: as.object({ port: as.number().default(3000), host: as.string().optional() }).default(3000), subdomainCacheSize: as.number().optional(), logLevel: asLogLevel.default('INFO') }).unknown()); LOG.setLevel(config.logLevel ?? 'INFO'); // TODO: Tidy up with dependency injection const setupType = 'ably' in config ? 'ably' : 'io'; let keyStore, cloneFactory; if (setupType === 'ably') { const { AblyCloneFactory, AblyKeyStore } = await import('./ably/index.js'); keyStore = new AblyKeyStore(config); cloneFactory = new AblyCloneFactory(); } else { const { IoCloneFactory } = await import('./socket.io/index.js'); keyStore = new DomainKeyStore(AuthKey.fromString(config.auth.key).appId); cloneFactory = new IoCloneFactory(); } const subdomainCache = new SubdomainCache(config); const gateway = new Gateway(env, config, cloneFactory, keyStore, subdomainCache); const server = setupGatewayHttp({ gateway, notifier: config.smtp != null ? new SmtpNotifier(config) : logNotifier, liquid: new Liquid({ root: fileURLToPath(new URL('../_site/', import.meta.url)), cache: true }) }); if (setupType === 'io') { const { IoService } = await import('./socket.io/index.js'); const io = new IoService(gateway, server.server); io.on('error', LOG.error); io.on('debug', (...args) => LOG.debug(JSON.stringify(args))); } server.listen(config.address, async () => { // noinspection JSUnresolvedVariable LOG.info('%s listening at %s', server.name, server.url); await cloneFactory.initialise(server.url); try { await gateway.initialise(); LOG.info('Gateway initialised'); } catch (e) { LOG.error('Gateway failed to initialise', e); server.close(); } }); gracefulShutdown(server, { async onShutdown() { LOG.info('Gateway shutting down...'); await gateway.close(); LOG.info('Gateway shut down'); } }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBaUIsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBQzNCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sZ0JBQWdCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUNMLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFnQixjQUFjLEVBQUUsR0FBRyxFQUFZLGFBQWEsRUFBRSxRQUFRLEVBQzlGLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUVwQzs7O0dBR0c7QUFFSCxDQUFDLEtBQUs7SUFDSixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUU7UUFDbEMsMENBQTBDO1FBQzFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJLE9BQU87S0FDcEQsQ0FBQyxDQUFDO0lBQ0wsNERBQTREO0lBQzFELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBa0IsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3JELEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFD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