@actorize/core
Version:
Actorize helps building scalable js apps with a messaging system
64 lines • 1.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createRouter = exports.createNetworkInterface = void 0;
const createNetworkInterface = () => {
const callbacks = [];
let localCallback = () => { };
return {
sendLocal: (msg) => {
localCallback(msg);
},
sendOutbound: (msg) => {
callbacks.forEach((cb) => {
cb(msg);
});
},
handleLocalIncomingMessages: (cb) => {
callbacks.push(cb);
},
setLocalCallback: (cb) => {
localCallback = cb;
},
};
};
exports.createNetworkInterface = createNetworkInterface;
const createRouter = (args) => {
const interfaces = [];
Object.keys(args.domains).forEach((key) => {
const i = args.domains[key];
// prevent duplication
if (interfaces.indexOf(i) === -1) {
interfaces.push(i);
}
});
const handleIncomingMessage = (msg, store) => {
if (msg.domain === args.ownDomain) {
store.pushMessage(msg.payload.recipient, msg.payload.payload, msg.payload.sender);
return true;
}
if (!args.domains[msg.domain]) {
return false;
}
const senderParts = msg.payload.sender.split('.');
const isLocalSender = senderParts.length === 1;
let { sender } = msg.payload;
if (isLocalSender) {
sender = `${args.ownDomain}.${sender}`;
}
args.domains[msg.domain].sendOutbound({
...msg,
payload: {
...msg.payload,
sender,
},
});
return true;
};
return {
handleIncomingMessage,
interfaces,
ownDomain: args.ownDomain,
};
};
exports.createRouter = createRouter;
//# sourceMappingURL=network.js.map