hide info

This commit is contained in:
2019-09-18 02:24:40 +02:00
parent 2f32d7c9cd
commit 17dc58c5b3
4 changed files with 23 additions and 47 deletions
+2 -3
View File
@@ -66,7 +66,6 @@ export declare type ExtendedRpcInfo = RpcInfo & {
uniqueName: string; uniqueName: string;
}; };
export declare const rpcToRpcinfo: (rpc: socketioRPC, owner: string) => RpcInfo; export declare const rpcToRpcinfo: (rpc: socketioRPC, owner: string) => RpcInfo;
export declare const rpcHooker: (socket: Socket, owner: string, RPCs: socketioRPC[], makeUnique?: boolean) => ExtendedRpcInfo[];
declare type OnFunction = (type: 'error' | 'close', f: (e?: any) => void) => Socket; declare type OnFunction = (type: 'error' | 'close', f: (e?: any) => void) => Socket;
export interface Socket { export interface Socket {
port: number; port: number;
@@ -92,7 +91,7 @@ export declare class RPCSocketServer {
private wsServer; private wsServer;
constructor(port: number, rpcExporters?: RPCExporter[], visibility?: Visibility, conf?: RPCSocketConf); constructor(port: number, rpcExporters?: RPCExporter[], visibility?: Visibility, conf?: RPCSocketConf);
private startWebsocket; private startWebsocket;
protected initApis(socket: Socket): void; protected initRPCs(socket: Socket): void;
protected initPublicApis(socket: Socket): void; protected initPublicRPCs(socket: Socket): void;
} }
export {}; export {};
+12 -24
View File
@@ -61,7 +61,9 @@ exports.rpcToRpcinfo = (rpc, owner) => {
}; };
} }
}; };
exports.rpcHooker = (socket, owner, RPCs, makeUnique = true) => { function rpcHooker(socket, exporter, makeUnique = true) {
const owner = exporter.name;
const RPCs = [...exporter.exportPublicRPCs(), ...exporter.exportRPCs()];
const suffix = makeUnique ? "-" + uuid().substr(0, 4) : ""; const suffix = makeUnique ? "-" + uuid().substr(0, 4) : "";
return RPCs.map(rpc => exports.rpcToRpcinfo(rpc, owner)) return RPCs.map(rpc => exports.rpcToRpcinfo(rpc, owner))
.map(info => { .map(info => {
@@ -77,7 +79,7 @@ exports.rpcHooker = (socket, owner, RPCs, makeUnique = true) => {
socket.on('close', () => socket.unhook(info.name)); socket.on('close', () => socket.unhook(info.name));
return ret; return ret;
}); });
}; }
const hookGenerator = (rpc) => { const hookGenerator = (rpc) => {
const argsArr = extractArgs(rpc.func); const argsArr = extractArgs(rpc.func);
argsArr.pop(); argsArr.pop();
@@ -124,9 +126,9 @@ class RPCSocketServer {
socket.on('error', this.conf.errorHandler(socket)); socket.on('error', this.conf.errorHandler(socket));
socket.on('close', this.conf.closeHandler(socket)); socket.on('close', this.conf.closeHandler(socket));
if (this.visibility === "127.0.0.1") if (this.visibility === "127.0.0.1")
this.initApis(socket); this.initRPCs(socket);
else else
this.initPublicApis(socket); this.initPublicRPCs(socket);
}); });
this.wsServer.listen(this.port, this.visibility); this.wsServer.listen(this.port, this.visibility);
} }
@@ -135,30 +137,16 @@ class RPCSocketServer {
this.errorHandler(undefined)("Unable to connect to socket"); this.errorHandler(undefined)("Unable to connect to socket");
} }
} }
initApis(socket) { initRPCs(socket) {
const adminRPCs = [ socket.hook('info', () => rpcInfos);
{
name: 'info',
type: 'call',
func: async () => rpcInfos
}
];
const rpcInfos = [ const rpcInfos = [
...exports.rpcHooker(socket, "Admin", adminRPCs, false), ...this.rpcExporters.flatMap(exporter => rpcHooker(socket, exporter))
...this.rpcExporters.flatMap(exporter => exports.rpcHooker(socket, exporter.name, [...exporter.exportPublicRPCs(), ...exporter.exportRPCs()]))
]; ];
} }
initPublicApis(socket) { initPublicRPCs(socket) {
const adminRPCs = [ socket.hook('info', () => rpcInfos);
{
name: 'info',
type: 'call',
func: async () => rpcInfos
}
];
const rpcInfos = [ const rpcInfos = [
...exports.rpcHooker(socket, "Admin", adminRPCs, false), ...this.rpcExporters.flatMap(exporter => rpcHooker(socket, exporter))
...this.rpcExporters.flatMap(exporter => exports.rpcHooker(socket, exporter.name, exporter.exportPublicRPCs()))
]; ];
} }
} }
+1 -1
View File
@@ -11,7 +11,7 @@ new RPCSocketServer_1.RPCSocketServer(20000, [{
name: 'echo', name: 'echo',
func: async (s) => s, func: async (s) => s,
}], }],
}], "0.0.0.0"); }]);
const caller = new RPCSocket_1.RPCSocket(20000, 'localhost'); const caller = new RPCSocket_1.RPCSocket(20000, 'localhost');
caller.connect().then(_ => { caller.connect().then(_ => {
caller.info().then(console.log); caller.info().then(console.log);
+8 -19
View File
@@ -132,7 +132,10 @@ export const rpcToRpcinfo = (rpc : socketioRPC, owner: string):RpcInfo => {
} }
} }
export const rpcHooker = (socket: Socket, owner:string, RPCs: socketioRPC[], makeUnique = true):ExtendedRpcInfo[] => {
function rpcHooker(socket: Socket, exporter:RPCExporter, makeUnique = true):ExtendedRpcInfo[]{
const owner = exporter.name
const RPCs = [...exporter.exportPublicRPCs(), ...exporter.exportRPCs()]
const suffix = makeUnique?"-"+uuid().substr(0,4):"" const suffix = makeUnique?"-"+uuid().substr(0,4):""
return RPCs.map(rpc => rpcToRpcinfo(rpc, owner)) return RPCs.map(rpc => rpcToRpcinfo(rpc, owner))
.map(info => { .map(info => {
@@ -236,32 +239,18 @@ export class RPCSocketServer{
} }
protected initRPCs(socket:Socket){ protected initRPCs(socket:Socket){
const infoRPC:socketioRPC[] = [ socket.hook('info', () => rpcInfos)
{
name: 'info',
type: 'call',
func: async () => rpcInfos
}
]
const rpcInfos:ExtendedRpcInfo[] = [ const rpcInfos:ExtendedRpcInfo[] = [
...rpcHooker(socket, "RPC", infoRPC, false), ...this.rpcExporters.flatMap(exporter => rpcHooker(socket, exporter))
...this.rpcExporters.flatMap(exporter => rpcHooker(socket, exporter.name, [...exporter.exportPublicRPCs(), ...exporter.exportRPCs()]))
] ]
} }
protected initPublicRPCs(socket:Socket){ protected initPublicRPCs(socket:Socket){
const adminRPCs:socketioRPC[] = [ socket.hook('info', () => rpcInfos)
{
name: 'info',
type: 'call',
func: async () => rpcInfos
}
]
const rpcInfos:ExtendedRpcInfo[] = [ const rpcInfos:ExtendedRpcInfo[] = [
...rpcHooker(socket, "Admin", adminRPCs, false), ...this.rpcExporters.flatMap(exporter => rpcHooker(socket, exporter))
...this.rpcExporters.flatMap(exporter => rpcHooker(socket, exporter.name, exporter.exportPublicRPCs()))
] ]
} }
} }