@m-ld/gateway
Version:
m-ld gateway for services
38 lines • 4.26 kB
JavaScript
import { CloneFactory, Env, resolveGateway } from '../index.js';
import { IoRemotes } from '@m-ld/m-ld/ext/socket.io';
import LOG from 'loglevel';
export class IoCloneFactory extends CloneFactory {
async clone(config, dataDir, principal) {
const ioConfig = await this.ioConfig(config);
LOG.info('IO connecting to', ioConfig.io.uri, 'for', config['@domain']);
return super.clone(Env.mergeConfig(config, ioConfig), dataDir, principal);
}
initialise(address) {
this.address = address;
}
remotes() {
return IoRemotes;
}
async reusableConfig(config, remotesAuth, who) {
return Env.mergeConfig(super.reusableConfig(config, remotesAuth, who), await this.ioConfig(config, { remotesAuth, who }));
}
async ioConfig(config, reusable) {
// Reusable config always doles out public gateway address
const uri = !reusable && this.address ? this.address :
(await resolveGateway(config.gateway)).toString();
const io = { uri };
// When using Socket.io, the authorisation key is sent to the server
// See https://socket.io/docs/v4/middlewares/#sending-credentials
if (!reusable || !reusable.remotesAuth.length || reusable.remotesAuth.includes('key')) {
const key = reusable ? '≪your-auth-key≫' : config.auth.key;
// The user may be undefined, if this is a Gateway
const user = reusable ? reusable.who?.acc.name ?? '≪your-account-name≫' : config.user;
io.opts = { auth: { key, user } };
}
else if (reusable.remotesAuth.includes('jwt')) {
io.opts = { auth: { jwt: '≪your-token≫' } };
}
return { io };
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW9DbG9uZUZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc29ja2V0LmlvL0lvQ2xvbmVGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDYyxZQUFZLEVBQUUsR0FBRyxFQUFvQixjQUFjLEVBQ3ZFLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBSTNCLE1BQU0sT0FBTyxjQUFlLFNBQVEsWUFBWTtJQU85QyxLQUFLLENBQUMsS0FBSyxDQUNULE1BQXlCLEVBQ3pCLE9BQWUsRUFDZixTQUE0QjtRQUU1QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWU7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FDbEIsTUFBeUIsRUFDekIsV0FBOEIsRUFDOUIsR0FBUztRQUVULE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQ25FLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxLQUFLLENBQUMsUUFBUSxDQUNwQixNQUF5QixFQUN6QixRQUF3RDtRQUV4RCwwREFBMEQ7UUFDMUQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELENBQUMsTUFBTSxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEQsTUFBTSxFQUFFLEdBQXVCLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDdkMsb0VBQW9FO1FBQ3BFLGlFQUFpRTtRQUNqRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckYsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDM0Qsa0RBQWtEO1lBQ2xELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3RGLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztTQUNuQzthQUFNLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDL0MsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFBO1NBQzVDO1FBQ0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiJ9