@scrypted/server 0.7.72 → 0.7.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @scrypted/server might be problematic. Click here for more details.
@@ -68,45 +68,56 @@ function startPluginRemote(mainFilename, pluginId, peerSend, startPluginRemoteOp
|
|
68
68
|
},
|
69
69
|
async onLoadZip(scrypted, params, packageJson, zipData, zipOptions) {
|
70
70
|
const { clusterId, clusterSecret } = zipOptions;
|
71
|
+
const onProxySerialization = (value, proxyId, source) => {
|
72
|
+
const properties = rpc_1.RpcPeer.prepareProxyProperties(value) || {};
|
73
|
+
let clusterEntry = properties.__cluster;
|
74
|
+
// set the cluster identity if it does not exist.
|
75
|
+
if (!clusterEntry) {
|
76
|
+
clusterEntry = {
|
77
|
+
id: clusterId,
|
78
|
+
port: clusterPort,
|
79
|
+
proxyId,
|
80
|
+
source,
|
81
|
+
};
|
82
|
+
properties.__cluster = clusterEntry;
|
83
|
+
}
|
84
|
+
// always reassign the id and source.
|
85
|
+
// if this is already a p2p object, and is passed to a different peer,
|
86
|
+
// a future p2p object must be routed to the correct p2p peer to find the object.
|
87
|
+
// clusterEntry.proxyId = proxyId;
|
88
|
+
// clusterEntry.source = source;
|
89
|
+
return properties;
|
90
|
+
};
|
91
|
+
peer.onProxySerialization = onProxySerialization;
|
92
|
+
const resolveObject = async (id, sourcePeerPort) => {
|
93
|
+
const sourcePeer = sourcePeerPort ? await clusterPeers.get(sourcePeerPort) : peer;
|
94
|
+
return sourcePeer?.localProxyMap.get(id);
|
95
|
+
};
|
96
|
+
// all cluster clients, incoming and outgoing, connect with random ports which can be used as peer ids
|
97
|
+
// on the cluster server that is listening on the actual port/
|
98
|
+
// incoming connections: use the remote random/unique port
|
99
|
+
// outgoing connections: use the local random/unique port
|
100
|
+
const clusterPeers = new Map();
|
71
101
|
const clusterRpcServer = net_1.default.createServer(client => {
|
72
102
|
const clusterPeer = (0, rpc_serializer_1.createDuplexRpcPeer)(peer.selfName, 'cluster-client', client, client);
|
103
|
+
const clusterPeerPort = client.remotePort;
|
104
|
+
clusterPeer.onProxySerialization = (value, proxyId) => onProxySerialization(value, proxyId, clusterPeerPort);
|
105
|
+
clusterPeers.set(clusterPeerPort, Promise.resolve(clusterPeer));
|
73
106
|
startPluginRemoteOptions?.onClusterPeer?.(clusterPeer);
|
74
107
|
const portSecret = crypto_1.default.createHash('sha256').update(`${clusterPort}${clusterSecret}`).digest().toString('hex');
|
75
|
-
|
108
|
+
const connectRPCObject = async (id, secret, sourcePeerPort) => {
|
76
109
|
if (secret !== portSecret)
|
77
110
|
throw new Error('secret incorrect');
|
78
|
-
return
|
111
|
+
return resolveObject(id, sourcePeerPort);
|
79
112
|
};
|
80
|
-
|
113
|
+
clusterPeer.params['connectRPCObject'] = connectRPCObject;
|
114
|
+
client.on('close', () => {
|
115
|
+
clusterPeers.delete(clusterPeerPort);
|
116
|
+
clusterPeer.kill('cluster socket closed');
|
117
|
+
});
|
81
118
|
});
|
82
119
|
const clusterPort = await (0, listen_zero_1.listenZero)(clusterRpcServer);
|
83
|
-
const
|
84
|
-
id: clusterId,
|
85
|
-
port: clusterPort,
|
86
|
-
};
|
87
|
-
peer.onProxySerialization = (value, proxyId) => {
|
88
|
-
const properties = rpc_1.RpcPeer.prepareProxyProperties(value) || {};
|
89
|
-
if (!properties.__cluster) {
|
90
|
-
properties.__cluster = {
|
91
|
-
...clusterEntry,
|
92
|
-
proxyId,
|
93
|
-
};
|
94
|
-
}
|
95
|
-
return properties;
|
96
|
-
};
|
97
|
-
const clusterPeers = new Map();
|
98
|
-
scrypted.connectRPCObject = async (value) => {
|
99
|
-
const clusterObject = value?.__cluster;
|
100
|
-
if (clusterObject?.id !== clusterId)
|
101
|
-
return value;
|
102
|
-
const { port, proxyId } = clusterObject;
|
103
|
-
if (port === clusterPort) {
|
104
|
-
// this is a local object.
|
105
|
-
const newValue = peer.localProxyMap.get(proxyId);
|
106
|
-
if (!newValue)
|
107
|
-
throw new Error('ipc object not found?');
|
108
|
-
return newValue;
|
109
|
-
}
|
120
|
+
const ensureClusterPeer = (port) => {
|
110
121
|
let clusterPeerPromise = clusterPeers.get(port);
|
111
122
|
if (!clusterPeerPromise) {
|
112
123
|
clusterPeerPromise = (async () => {
|
@@ -114,8 +125,11 @@ function startPluginRemote(mainFilename, pluginId, peerSend, startPluginRemoteOp
|
|
114
125
|
socket.on('close', () => clusterPeers.delete(port));
|
115
126
|
try {
|
116
127
|
await (0, events_1.once)(socket, 'connect');
|
117
|
-
const
|
118
|
-
|
128
|
+
const clusterPeerPort = socket.address().port;
|
129
|
+
const clusterPeer = (0, rpc_serializer_1.createDuplexRpcPeer)(peer.selfName, 'cluster-server', socket, socket);
|
130
|
+
clusterPeer.tags.localPort = clusterPeerPort;
|
131
|
+
clusterPeer.onProxySerialization = (value, proxyId) => onProxySerialization(value, proxyId, clusterPeerPort);
|
132
|
+
return clusterPeer;
|
119
133
|
}
|
120
134
|
catch (e) {
|
121
135
|
console.error('failure ipc connect', e);
|
@@ -124,19 +138,26 @@ function startPluginRemote(mainFilename, pluginId, peerSend, startPluginRemoteOp
|
|
124
138
|
}
|
125
139
|
})();
|
126
140
|
}
|
141
|
+
return clusterPeerPromise;
|
142
|
+
};
|
143
|
+
scrypted.connectRPCObject = async (value) => {
|
144
|
+
const clusterObject = value?.__cluster;
|
145
|
+
if (clusterObject?.id !== clusterId)
|
146
|
+
return value;
|
147
|
+
const { port, proxyId, source } = clusterObject;
|
148
|
+
if (port === clusterPort)
|
149
|
+
return resolveObject(proxyId, source);
|
127
150
|
try {
|
151
|
+
const clusterPeerPromise = ensureClusterPeer(port);
|
128
152
|
const clusterPeer = await clusterPeerPromise;
|
153
|
+
// this object is already connected
|
154
|
+
if (clusterPeer.tags.localPort === source)
|
155
|
+
return value;
|
129
156
|
const connectRPCObject = await clusterPeer.getParam('connectRPCObject');
|
130
157
|
const portSecret = crypto_1.default.createHash('sha256').update(`${port}${clusterSecret}`).digest().toString('hex');
|
131
|
-
const newValue = await connectRPCObject(proxyId, portSecret);
|
158
|
+
const newValue = await connectRPCObject(proxyId, portSecret, source);
|
132
159
|
if (!newValue)
|
133
160
|
throw new Error('ipc object not found?');
|
134
|
-
// reassign the cluster identity in case this object gets passed back into the cluster.
|
135
|
-
newValue.__cluster = {
|
136
|
-
id: clusterId,
|
137
|
-
port,
|
138
|
-
proxyId,
|
139
|
-
};
|
140
161
|
return newValue;
|
141
162
|
}
|
142
163
|
catch (e) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"plugin-remote-worker.js","sourceRoot":"","sources":["../../src/plugin/plugin-remote-worker.ts"],"names":[],"mappings":";;;;;;AACA,sDAA6B;AAC7B,mCAA8B;AAC9B,4CAAoB;AACpB,iCAA+B;AAC/B,8CAAsB;AACtB,gDAAwB;AACxB,2DAAwE;AACxE,gDAA4C;AAC5C,gCAA6C;AAC7C,sDAAwD;AACxD,mCAA2C;AAC3C,6CAAmG;AACnG,qDAAmD;AACnD,uEAA2F;AAC3F,mDAAyG;AACzG,+DAAuE;AACvE,+CAAiD;AACjD,qEAAgE;AAChE,oDAA4B;AAC5B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEnC,MAAM,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;AAM5D,SAAgB,iBAAiB,CAAC,YAAoB,EAAE,QAAgB,EAAE,QAAgG,EAAE,wBAAmD;IAC3N,MAAM,IAAI,GAAG,IAAI,aAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEtD,IAAI,aAA4B,CAAC;IACjC,IAAI,aAAgC,CAAC;IACrC,IAAI,GAAc,CAAC;IAGnB,IAAI,cAA4B,CAAC;IACjC,SAAS,UAAU;QACf,IAAI,CAAC,cAAc;YACf,cAAc,GAAG,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACjD,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,IAAA,gCAAe,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAEzI,IAAI,QAAyB,CAAC;IAE9B,IAAI,cAAuB,CAAC;IAC5B,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,cAAc;YACf,cAAc,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACjD,OAAO,cAAc,CAAC;IAC1B,CAAC,CAAA;IAED,IAAI,2BAA+D,CAAC;IAEpE,IAAA,kCAAkB,EAAC,IAAI,EAAE;QACrB,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACjC,aAAa,GAAG,EAAE,CAAC;YACnB,aAAa,GAAG,EAAE,CAAA;YAClB,OAAO,IAAI,wBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;YACnC,GAAG,GAAG,IAAI,CAAC;YACX,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,CAAC;QACD,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;QACf,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,IAAW;YACrC,IAAI,IAAI,KAAK,MAAM,EAAE;gBACjB,IAAI,CAAC,QAAQ;oBACT,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;gBAC3D,OAAO,QAAQ,CAAC;aACnB;YACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,QAAwB,EAAE,MAAW,EAAE,WAAgB,EAAE,OAAwB,EAAE,UAAsC;YACrI,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC;YAChD,MAAM,gBAAgB,GAAG,aAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;gBAC/C,MAAM,WAAW,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBACzF,wBAAwB,EAAE,aAAa,EAAE,CAAC,WAAW,CAAC,CAAC;gBACvD,MAAM,UAAU,GAAG,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,WAAW,GAAG,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACjH,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,EAAE,EAAU,EAAE,MAAc,EAAE,EAAE;oBAC1E,IAAI,MAAM,KAAK,UAAU;wBACrB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;oBACxC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACtC,CAAC,CAAA;gBACD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACxE,CAAC,CAAC,CAAA;YACF,MAAM,WAAW,GAAG,MAAM,IAAA,wBAAU,EAAC,gBAAgB,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG;gBACjB,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,WAAW;aACpB,CAAC;YAEF,IAAI,CAAC,oBAAoB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC3C,MAAM,UAAU,GAAG,aAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC/D,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;oBACvB,UAAU,CAAC,SAAS,GAAG;wBACnB,GAAG,YAAY;wBACf,OAAO;qBACV,CAAA;iBACJ;gBACD,OAAO,UAAU,CAAC;YACtB,CAAC,CAAA;YAED,MAAM,YAAY,GAAG,IAAI,GAAG,EAA4B,CAAC;YACzD,QAAQ,CAAC,gBAAgB,GAAG,KAAK,EAAE,KAAU,EAAE,EAAE;gBAC7C,MAAM,aAAa,GAAG,KAAK,EAAE,SAAS,CAAC;gBACvC,IAAI,aAAa,EAAE,EAAE,KAAK,SAAS;oBAC/B,OAAO,KAAK,CAAC;gBACjB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC;gBACxC,IAAI,IAAI,KAAK,WAAW,EAAE;oBACtB,0BAA0B;oBAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACjD,IAAI,CAAC,QAAQ;wBACT,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBAC7C,OAAO,QAAQ,CAAC;iBACnB;gBAED,IAAI,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,kBAAkB,EAAE;oBACrB,kBAAkB,GAAG,CAAC,KAAK,IAAI,EAAE;wBAC7B,MAAM,MAAM,GAAG,aAAG,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;wBAC9C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBAEpD,IAAI;4BACA,MAAM,IAAA,aAAI,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;4BAC9B,MAAM,GAAG,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;4BACjF,OAAO,GAAG,CAAC;yBACd;wBACD,OAAO,CAAC,EAAE;4BACN,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;4BACxC,MAAM,CAAC,OAAO,EAAE,CAAC;4BACjB,MAAM,CAAC,CAAC;yBACX;oBACL,CAAC,CAAC,EAAE,CAAC;iBACR;gBAED,IAAI;oBACA,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC;oBAC7C,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;oBACxE,MAAM,UAAU,GAAG,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC1G,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;oBAC7D,IAAI,CAAC,QAAQ;wBACT,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBAC7C,uFAAuF;oBACvF,QAAQ,CAAC,SAAS,GAAG;wBACjB,EAAE,EAAE,SAAS;wBACb,IAAI;wBACJ,OAAO;qBACV,CAAC;oBACF,OAAO,QAAQ,CAAC;iBACnB;gBACD,OAAO,CAAC,EAAE;oBACN,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;oBAChC,OAAO,KAAK,CAAC;iBAChB;YACL,CAAC,CAAA;YAED,IAAI,MAAW,CAAC;YAChB,IAAI,YAA0B,CAAC;YAC/B,IAAI,UAAU,EAAE,YAAY,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE;gBACrE,MAAM,GAAG,IAAI,CAAC,YAAE,EAAE,CAAC,EAAE,EAAE,cAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClE,YAAY,GAAG,IAAI,CAAC,EAAE;oBAClB,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oBAC1D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACxB,OAAO;oBACX,OAAO,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACrC,CAAC,CAAC;aACL;iBACI;gBACD,MAAM,MAAM,GAAG,IAAI,iBAAM,CAAC,OAAO,CAAC,CAAC;gBACnC,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;gBACtB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE;oBACrC,IAAI,KAAK,CAAC,WAAW;wBACjB,SAAS;oBACb,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;wBAClC,SAAS;oBACb,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACrD,MAAM,CAAC,UAAU,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC7B,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBACpC;gBAED,YAAY,GAAG,IAAI,CAAC,EAAE;oBAClB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC,KAAK;wBACN,OAAO;oBACX,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC3B,CAAC,CAAA;aACJ;YACD,OAAO,GAAG,SAAS,CAAC;YAEpB,MAAM,aAAa,GAAG,gBAAgB,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAA,2CAAiB,EAAC,QAAQ,CAAC,CAAC;YACxC,aAAa,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;gBAC9B,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBACtE,OAAO,MAAM,CAAC;iBACjB;gBACD,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACnB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;iBACxB;gBACD,IAAI;oBACA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC7B,OAAO,MAAM,CAAC;iBACjB;gBACD,OAAO,CAAC,EAAE;oBACN,MAAM,CAAC,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;oBAC/C,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;iBACrB;YACL,CAAC,CAAC;YACF,0BAA0B;YAC1B,MAAM,OAAO,GAAQ,EAAE,CAAC;YACxB,4BAA4B;YAC5B,0BAA0B;YAC1B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;YAEzB,MAAM,KAAK,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAA;YAChD,MAAM,GAAG,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC;YAE9B,qEAAqE;YACrE,8DAA8D;YAC9D,2BAA2B,GAAG,CAAC,QAAQ,EAAE,EAAE;gBACvC,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;gBAChD,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;gBAEjD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE;oBAChC,gBAAgB,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;oBACjD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACzD,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE;oBACjC,gBAAgB,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;oBAClD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC1D,CAAC,CAAC,CAAC;gBAEH,IAAA,4BAAuB,EAAC;oBACpB,WAAW,EAAE,MAAM;oBACnB,iBAAiB,CAAC,MAAM;wBACpB,IAAI,MAAM,KAAK,wBAAwB,IAAI,MAAM,KAAK,IAAI,QAAQ,iBAAiB,EAAE;4BACjF,IAAI,CAAC,GAAG;gCACJ,OAAO,IAAI,CAAC;4BAChB,OAAO;gCACH,GAAG,EAAE,wBAAwB;gCAC7B,GAAG;6BACN,CAAA;yBACJ;wBACD,OAAO,IAAI,CAAC;oBAChB,CAAC;iBACJ,CAAC,CAAC;YACP,CAAC,CAAC;YAEF,MAAM,IAAA,qDAA2B,EAAC,gBAAgB,EAAE,EAAE,WAAW,CAAC,CAAC;YAEnE,8CAA8C;YAC9C,qCAAqC;YACrC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAwC,CAAC;YACvE,gGAAgG;YAChG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAA,uCAAiB,EAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;YAEjG,MAAM,IAAI,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;YAC5C,YAAY,GAAG,SAAS,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE/B,QAAQ,CAAC,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;gBACnC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;YAEtC,QAAQ,CAAC,IAAI,GAAG,GAAG,EAAE;gBACjB,MAAM,GAAG,GAAG,IAAI,qCAAgB,CAAC,YAAY,EAAE,QAAQ,EAAE;oBACrD,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,WAAW,EAAE,SAAS;iBACzB,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;oBACvB,MAAM,UAAU,GAAG,IAAI,aAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;oBACjG,UAAU,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,KAAkB,EAAE,EAAE;wBACnD,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC/C,CAAC,CAAA;oBACD,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBAE7B,MAAM,aAAc,SAAQ,2BAAc;wBACtC,CAAC,aAAO,CAAC,6BAA6B,CAAC,GAAI,GAAW,CAAC,aAAO,CAAC,6BAA6B,CAAC,CAAC;wBAE9F,UAAU,CAAC,QAAgB,EAAE,OAAgC;4BACzD,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;4BACnD,QAAQ,CAAC,eAAgC,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;4BAC9E,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;gCACnB,IAAI,CAAC,KAAK,MAAM;oCACZ,SAAS;gCACb,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;6BACxC;4BACD,OAAO,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;wBAC/C,CAAC;qBACJ;oBACD,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;oBAEvC,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAiB,EAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;oBAC/H,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAClB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;wBACvB,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBACjC,OAAO,CAAC,eAAe,EAAE,CAAC;wBAC1B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACrB,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC/B,CAAC,CAAC,CAAC;oBAEH,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;wBAC7D,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;qBAC3D;oBAED,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;oBAClD,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;oBACxB,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;gBAC5D,CAAC,CAAC,EAAE,CAAC;gBAEL,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBAE/B,OAAO;oBACH,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,MAAM;iBACT,CAAA;YACL,CAAC,CAAA;YAED,IAAI;gBACA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,CAAC,CAAC;gBAEjF,IAAI,UAAU,EAAE,IAAI,EAAE;oBAClB,uCAAuC;oBACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;oBAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;oBAC5B,MAAM,CAAC,aAAO,CAAC,mCAAmC,CAAC,GAAG,IAAI,CAAC;oBAC3D,OAAO,MAAM,CAAC;iBACjB;gBAED,aAAa,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;gBACpC,IAAI,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;gBACrC,0DAA0D;gBAC1D,uBAAuB;gBACvB,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAC9C,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;gBAC1C,IAAI,OAAO,cAAc,KAAK,UAAU;oBACpC,cAAc,GAAG,MAAM,cAAc,EAAE,CAAC;gBAE5C,QAAQ,GAAG,IAAA,8BAAgB,EAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;gBAC9D,2BAA2B,CAAC,QAAQ,CAAC,CAAC;gBAEtC,OAAO,cAAc,CAAC;aACzB;YACD,OAAO,CAAC,EAAE;gBACN,aAAa,EAAE,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;gBAClD,MAAM,CAAC,CAAC;aACX;QACL,CAAC;KACJ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACf,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;QACvC,aAAa,GAAG,QAAQ,CAAC,aAAkC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AAChB,CAAC;AAhVD,8CAgVC"}
|
1
|
+
{"version":3,"file":"plugin-remote-worker.js","sourceRoot":"","sources":["../../src/plugin/plugin-remote-worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/python/plugin_remote.py
CHANGED
@@ -286,51 +286,73 @@ class PluginRemote:
|
|
286
286
|
clusterId = options['clusterId']
|
287
287
|
clusterSecret = options['clusterSecret']
|
288
288
|
|
289
|
+
def onProxySerialization(value: Any, proxyId: str, source: int = None):
|
290
|
+
properties: dict = rpc.RpcPeer.prepareProxyProperties(value) or {}
|
291
|
+
clusterEntry = properties.get('__cluster', None)
|
292
|
+
if not properties.get('__cluster', None):
|
293
|
+
clusterEntry = {
|
294
|
+
'id': clusterId,
|
295
|
+
'proxyId': proxyId,
|
296
|
+
'port': clusterPort,
|
297
|
+
'source': source,
|
298
|
+
}
|
299
|
+
properties['__cluster'] = clusterEntry
|
300
|
+
|
301
|
+
# clusterEntry['proxyId'] = proxyId
|
302
|
+
# clusterEntry['source'] = source
|
303
|
+
return properties
|
304
|
+
|
305
|
+
self.peer.onProxySerialization = onProxySerialization
|
306
|
+
|
307
|
+
async def resolveObject(id: str, sourcePeerPort: int):
|
308
|
+
sourcePeer: rpc.RpcPeer = self.peer if not sourcePeerPort else await rpc.maybe_await(clusterPeers.get(sourcePeerPort))
|
309
|
+
if not sourcePeer:
|
310
|
+
return
|
311
|
+
return sourcePeer.localProxyMap.get(id, None)
|
312
|
+
|
313
|
+
clusterPeers: Mapping[int, asyncio.Future[rpc.RpcPeer]] = {}
|
289
314
|
async def handleClusterClient(reader: asyncio.StreamReader, writer: asyncio.StreamWriter):
|
315
|
+
_, clusterPeerPort = writer.get_extra_info('peername')
|
290
316
|
rpcTransport = rpc_reader.RpcStreamTransport(reader, writer)
|
291
317
|
peer: rpc.RpcPeer
|
292
318
|
peer, peerReadLoop = await rpc_reader.prepare_peer_readloop(self.loop, rpcTransport)
|
293
|
-
|
319
|
+
peer.onProxySerialization = lambda value, proxyId: onProxySerialization(value, proxyId, clusterPeerPort)
|
320
|
+
future = asyncio.Future[rpc.RpcPeer]()
|
321
|
+
future.set_result(peer)
|
322
|
+
clusterPeers[clusterPeerPort] = future
|
323
|
+
async def connectRPCObject(id: str, secret: str, sourcePeerPort: int = None):
|
294
324
|
m = hashlib.sha256()
|
295
325
|
m.update(bytes('%s%s' % (clusterPort, clusterSecret), 'utf8'))
|
296
326
|
portSecret = m.hexdigest()
|
297
327
|
if secret != portSecret:
|
298
328
|
raise Exception('secret incorrect')
|
299
|
-
return
|
329
|
+
return await resolveObject(id, sourcePeerPort)
|
300
330
|
|
301
331
|
peer.params['connectRPCObject'] = connectRPCObject
|
302
332
|
try:
|
303
333
|
await peerReadLoop()
|
304
334
|
except:
|
335
|
+
pass
|
336
|
+
finally:
|
337
|
+
clusterPeers.pop(clusterPeerPort)
|
338
|
+
peer.kill('cluster client killed')
|
305
339
|
writer.close()
|
306
340
|
|
307
341
|
clusterRpcServer = await asyncio.start_server(handleClusterClient, '127.0.0.1', 0)
|
308
342
|
clusterPort = clusterRpcServer.sockets[0].getsockname()[1]
|
309
343
|
|
310
|
-
|
311
|
-
async def connectRPCObject(value):
|
312
|
-
clusterObject = getattr(value, '__cluster')
|
313
|
-
if type(clusterObject) is not dict:
|
314
|
-
return value
|
315
|
-
|
316
|
-
if clusterObject.get('id', None) != clusterId:
|
317
|
-
return value
|
318
|
-
|
319
|
-
port = clusterObject['port']
|
320
|
-
proxyId = clusterObject['proxyId']
|
321
|
-
if port == clusterPort:
|
322
|
-
newValue = self.peer.localProxyMap.get(id, None)
|
323
|
-
if not newValue:
|
324
|
-
raise Exception('ipc object not found?')
|
325
|
-
return newValue
|
326
|
-
|
344
|
+
def ensureClusterPeer(port: int):
|
327
345
|
clusterPeerPromise = clusterPeers.get(port)
|
328
346
|
if not clusterPeerPromise:
|
329
347
|
async def connectClusterPeer():
|
330
348
|
reader, writer = await asyncio.open_connection(
|
331
349
|
'127.0.0.1', port)
|
350
|
+
_, clusterPeerPort = writer.get_extra_info('sockname')
|
332
351
|
rpcTransport = rpc_reader.RpcStreamTransport(reader, writer)
|
333
|
-
|
352
|
+
clusterPeer, peerReadLoop = await rpc_reader.prepare_peer_readloop(self.loop, rpcTransport)
|
353
|
+
clusterPeer.tags['localPort'] = clusterPeerPort
|
354
|
+
clusterPeer.onProxySerialization = lambda value, proxyId: onProxySerialization(value, proxyId, clusterPeerPort)
|
355
|
+
|
334
356
|
async def run_loop():
|
335
357
|
try:
|
336
358
|
await peerReadLoop()
|
@@ -339,47 +361,44 @@ class PluginRemote:
|
|
339
361
|
finally:
|
340
362
|
clusterPeers.pop(port)
|
341
363
|
asyncio.run_coroutine_threadsafe(run_loop(), self.loop)
|
342
|
-
return
|
364
|
+
return clusterPeer
|
343
365
|
clusterPeerPromise = self.loop.create_task(connectClusterPeer())
|
344
366
|
clusterPeers[port] = clusterPeerPromise
|
367
|
+
return clusterPeerPromise
|
368
|
+
|
369
|
+
async def connectRPCObject(value):
|
370
|
+
clusterObject = getattr(value, '__cluster')
|
371
|
+
if type(clusterObject) is not dict:
|
372
|
+
return value
|
373
|
+
|
374
|
+
if clusterObject.get('id', None) != clusterId:
|
375
|
+
return value
|
376
|
+
|
377
|
+
port = clusterObject['port']
|
378
|
+
proxyId = clusterObject['proxyId']
|
379
|
+
source = clusterObject.get('source', None)
|
380
|
+
if port == clusterPort:
|
381
|
+
return await resolveObject(proxyId, source)
|
382
|
+
|
383
|
+
clusterPeerPromise = ensureClusterPeer(port)
|
345
384
|
|
346
385
|
try:
|
347
386
|
clusterPeer = await clusterPeerPromise
|
387
|
+
if clusterPeer.tags.get('localPort') == source:
|
388
|
+
return value
|
348
389
|
c = await clusterPeer.getParam('connectRPCObject')
|
349
390
|
m = hashlib.sha256()
|
350
391
|
m.update(bytes('%s%s' % (port, clusterSecret), 'utf8'))
|
351
392
|
portSecret = m.hexdigest()
|
352
|
-
newValue = await c(proxyId, portSecret)
|
393
|
+
newValue = await c(proxyId, portSecret, source)
|
353
394
|
if not newValue:
|
354
395
|
raise Exception('ipc object not found?')
|
355
|
-
properties = getattr(value, rpc.RpcPeer.PROPERTY_PROXY_PROPERTIES)
|
356
|
-
if not properties:
|
357
|
-
properties = {}
|
358
|
-
setattr(value, rpc.RpcPeer.PROPERTY_PROXY_PROPERTIES, properties)
|
359
|
-
# reassign the cluster identity in case this object gets passed back into the cluster.
|
360
|
-
properties['__cluster'] = {
|
361
|
-
'id': clusterId,
|
362
|
-
'proxyId': proxyId,
|
363
|
-
'port': clusterPort,
|
364
|
-
}
|
365
396
|
return newValue
|
366
397
|
except Exception as e:
|
367
398
|
return value
|
368
399
|
|
369
400
|
sdk.connectRPCObject = connectRPCObject
|
370
401
|
|
371
|
-
def onProxySerialization(value: Any, proxyId: str):
|
372
|
-
properties: dict = rpc.RpcPeer.prepareProxyProperties(value) or {}
|
373
|
-
if not properties.get('__cluster', None):
|
374
|
-
properties['__cluster'] = {
|
375
|
-
'id': clusterId,
|
376
|
-
'proxyId': proxyId,
|
377
|
-
'port': clusterPort,
|
378
|
-
}
|
379
|
-
return properties
|
380
|
-
|
381
|
-
self.peer.onProxySerialization = onProxySerialization
|
382
|
-
|
383
402
|
forkMain = options and options.get('fork')
|
384
403
|
|
385
404
|
if not forkMain:
|
package/python/rpc.py
CHANGED
@@ -134,6 +134,7 @@ class RpcPeer:
|
|
134
134
|
self.nameDeserializerMap: Mapping[str, RpcSerializer] = {}
|
135
135
|
self.onProxySerialization: Callable[[Any, str], Any] = None
|
136
136
|
self.killed = False
|
137
|
+
self.tags = {}
|
137
138
|
|
138
139
|
def __apply__(self, proxyId: str, oneWayMethods: List[str], method: str, args: list):
|
139
140
|
oneway = oneWayMethods and method in oneWayMethods
|
@@ -26,6 +26,15 @@ export interface StartPluginRemoteOptions {
|
|
26
26
|
onClusterPeer(peer: RpcPeer): void;
|
27
27
|
}
|
28
28
|
|
29
|
+
interface ClusterObject {
|
30
|
+
id: string;
|
31
|
+
port: number;
|
32
|
+
proxyId: string;
|
33
|
+
source: number;
|
34
|
+
}
|
35
|
+
|
36
|
+
type ConnectRPCObject = (id: string, secret: string, sourcePeerPort: number) => Promise<any>;
|
37
|
+
|
29
38
|
export function startPluginRemote(mainFilename: string, pluginId: string, peerSend: (message: RpcMessage, reject?: (e: Error) => void, serializationContext?: any) => void, startPluginRemoteOptions?: StartPluginRemoteOptions) {
|
30
39
|
const peer = new RpcPeer('unknown', 'host', peerSend);
|
31
40
|
|
@@ -77,48 +86,61 @@ export function startPluginRemote(mainFilename: string, pluginId: string, peerSe
|
|
77
86
|
},
|
78
87
|
async onLoadZip(scrypted: ScryptedStatic, params: any, packageJson: any, zipData: Buffer | string, zipOptions: PluginRemoteLoadZipOptions) {
|
79
88
|
const { clusterId, clusterSecret } = zipOptions;
|
80
|
-
const clusterRpcServer = net.createServer(client => {
|
81
|
-
const clusterPeer = createDuplexRpcPeer(peer.selfName, 'cluster-client', client, client);
|
82
|
-
startPluginRemoteOptions?.onClusterPeer?.(clusterPeer);
|
83
|
-
const portSecret = crypto.createHash('sha256').update(`${clusterPort}${clusterSecret}`).digest().toString('hex');
|
84
|
-
clusterPeer.params['connectRPCObject'] = async (id: string, secret: string) => {
|
85
|
-
if (secret !== portSecret)
|
86
|
-
throw new Error('secret incorrect');
|
87
|
-
return peer.localProxyMap.get(id);
|
88
|
-
}
|
89
|
-
client.on('close', () => clusterPeer.kill('cluster socket closed'));
|
90
|
-
})
|
91
|
-
const clusterPort = await listenZero(clusterRpcServer);
|
92
|
-
const clusterEntry = {
|
93
|
-
id: clusterId,
|
94
|
-
port: clusterPort,
|
95
|
-
};
|
96
89
|
|
97
|
-
|
90
|
+
const onProxySerialization = (value: any, proxyId: string, source?: number) => {
|
98
91
|
const properties = RpcPeer.prepareProxyProperties(value) || {};
|
99
|
-
|
100
|
-
|
101
|
-
|
92
|
+
let clusterEntry: ClusterObject = properties.__cluster;
|
93
|
+
|
94
|
+
// set the cluster identity if it does not exist.
|
95
|
+
if (!clusterEntry) {
|
96
|
+
clusterEntry = {
|
97
|
+
id: clusterId,
|
98
|
+
port: clusterPort,
|
102
99
|
proxyId,
|
103
|
-
|
100
|
+
source,
|
101
|
+
};
|
102
|
+
properties.__cluster = clusterEntry;
|
104
103
|
}
|
104
|
+
// always reassign the id and source.
|
105
|
+
// if this is already a p2p object, and is passed to a different peer,
|
106
|
+
// a future p2p object must be routed to the correct p2p peer to find the object.
|
107
|
+
// clusterEntry.proxyId = proxyId;
|
108
|
+
// clusterEntry.source = source;
|
105
109
|
return properties;
|
106
110
|
}
|
111
|
+
peer.onProxySerialization = onProxySerialization;
|
107
112
|
|
113
|
+
const resolveObject = async (id: string, sourcePeerPort: number) => {
|
114
|
+
const sourcePeer = sourcePeerPort ? await clusterPeers.get(sourcePeerPort) : peer;
|
115
|
+
return sourcePeer?.localProxyMap.get(id);
|
116
|
+
}
|
117
|
+
|
118
|
+
// all cluster clients, incoming and outgoing, connect with random ports which can be used as peer ids
|
119
|
+
// on the cluster server that is listening on the actual port/
|
120
|
+
// incoming connections: use the remote random/unique port
|
121
|
+
// outgoing connections: use the local random/unique port
|
108
122
|
const clusterPeers = new Map<number, Promise<RpcPeer>>();
|
109
|
-
|
110
|
-
const
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
if (
|
118
|
-
throw new Error('
|
119
|
-
return
|
123
|
+
const clusterRpcServer = net.createServer(client => {
|
124
|
+
const clusterPeer = createDuplexRpcPeer(peer.selfName, 'cluster-client', client, client);
|
125
|
+
const clusterPeerPort = client.remotePort;
|
126
|
+
clusterPeer.onProxySerialization = (value, proxyId) => onProxySerialization(value, proxyId, clusterPeerPort);
|
127
|
+
clusterPeers.set(clusterPeerPort, Promise.resolve(clusterPeer));
|
128
|
+
startPluginRemoteOptions?.onClusterPeer?.(clusterPeer);
|
129
|
+
const portSecret = crypto.createHash('sha256').update(`${clusterPort}${clusterSecret}`).digest().toString('hex');
|
130
|
+
const connectRPCObject: ConnectRPCObject = async (id, secret, sourcePeerPort) => {
|
131
|
+
if (secret !== portSecret)
|
132
|
+
throw new Error('secret incorrect');
|
133
|
+
return resolveObject(id, sourcePeerPort);
|
120
134
|
}
|
135
|
+
clusterPeer.params['connectRPCObject'] = connectRPCObject;
|
136
|
+
client.on('close', () => {
|
137
|
+
clusterPeers.delete(clusterPeerPort);
|
138
|
+
clusterPeer.kill('cluster socket closed');
|
139
|
+
});
|
140
|
+
})
|
141
|
+
const clusterPort = await listenZero(clusterRpcServer);
|
121
142
|
|
143
|
+
const ensureClusterPeer = (port: number) => {
|
122
144
|
let clusterPeerPromise = clusterPeers.get(port);
|
123
145
|
if (!clusterPeerPromise) {
|
124
146
|
clusterPeerPromise = (async () => {
|
@@ -127,8 +149,12 @@ export function startPluginRemote(mainFilename: string, pluginId: string, peerSe
|
|
127
149
|
|
128
150
|
try {
|
129
151
|
await once(socket, 'connect');
|
130
|
-
const
|
131
|
-
|
152
|
+
const clusterPeerPort = (socket.address() as net.AddressInfo).port;
|
153
|
+
|
154
|
+
const clusterPeer = createDuplexRpcPeer(peer.selfName, 'cluster-server', socket, socket);
|
155
|
+
clusterPeer.tags.localPort = clusterPeerPort;
|
156
|
+
clusterPeer.onProxySerialization = (value, proxyId) => onProxySerialization(value, proxyId, clusterPeerPort);
|
157
|
+
return clusterPeer;
|
132
158
|
}
|
133
159
|
catch (e) {
|
134
160
|
console.error('failure ipc connect', e);
|
@@ -137,20 +163,28 @@ export function startPluginRemote(mainFilename: string, pluginId: string, peerSe
|
|
137
163
|
}
|
138
164
|
})();
|
139
165
|
}
|
166
|
+
return clusterPeerPromise;
|
167
|
+
};
|
168
|
+
|
169
|
+
scrypted.connectRPCObject = async (value: any) => {
|
170
|
+
const clusterObject: ClusterObject = value?.__cluster;
|
171
|
+
if (clusterObject?.id !== clusterId)
|
172
|
+
return value;
|
173
|
+
const { port, proxyId, source } = clusterObject;
|
174
|
+
if (port === clusterPort)
|
175
|
+
return resolveObject(proxyId, source);
|
140
176
|
|
141
177
|
try {
|
178
|
+
const clusterPeerPromise = ensureClusterPeer(port);
|
142
179
|
const clusterPeer = await clusterPeerPromise;
|
143
|
-
|
180
|
+
// this object is already connected
|
181
|
+
if (clusterPeer.tags.localPort === source)
|
182
|
+
return value;
|
183
|
+
const connectRPCObject: ConnectRPCObject = await clusterPeer.getParam('connectRPCObject');
|
144
184
|
const portSecret = crypto.createHash('sha256').update(`${port}${clusterSecret}`).digest().toString('hex');
|
145
|
-
const newValue = await connectRPCObject(proxyId, portSecret);
|
185
|
+
const newValue = await connectRPCObject(proxyId, portSecret, source);
|
146
186
|
if (!newValue)
|
147
187
|
throw new Error('ipc object not found?');
|
148
|
-
// reassign the cluster identity in case this object gets passed back into the cluster.
|
149
|
-
newValue.__cluster = {
|
150
|
-
id: clusterId,
|
151
|
-
port,
|
152
|
-
proxyId,
|
153
|
-
};
|
154
188
|
return newValue;
|
155
189
|
}
|
156
190
|
catch (e) {
|