@scrypted/server 0.7.71 → 0.7.73
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,7 +125,9 @@ 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');
|
128
|
+
const clusterPeerPort = socket.address().port;
|
117
129
|
const ret = (0, rpc_serializer_1.createDuplexRpcPeer)(peer.selfName, 'cluster-server', socket, socket);
|
130
|
+
ret.onProxySerialization = (value, proxyId) => onProxySerialization(value, proxyId, clusterPeerPort);
|
118
131
|
return ret;
|
119
132
|
}
|
120
133
|
catch (e) {
|
@@ -124,19 +137,23 @@ function startPluginRemote(mainFilename, pluginId, peerSend, startPluginRemoteOp
|
|
124
137
|
}
|
125
138
|
})();
|
126
139
|
}
|
140
|
+
return clusterPeerPromise;
|
141
|
+
};
|
142
|
+
scrypted.connectRPCObject = async (value) => {
|
143
|
+
const clusterObject = value?.__cluster;
|
144
|
+
if (clusterObject?.id !== clusterId)
|
145
|
+
return value;
|
146
|
+
const { port, proxyId, source } = clusterObject;
|
147
|
+
if (port === clusterPort)
|
148
|
+
return resolveObject(proxyId, source);
|
127
149
|
try {
|
150
|
+
const clusterPeerPromise = ensureClusterPeer(port);
|
128
151
|
const clusterPeer = await clusterPeerPromise;
|
129
152
|
const connectRPCObject = await clusterPeer.getParam('connectRPCObject');
|
130
153
|
const portSecret = crypto_1.default.createHash('sha256').update(`${port}${clusterSecret}`).digest().toString('hex');
|
131
|
-
const newValue = await connectRPCObject(proxyId, portSecret);
|
154
|
+
const newValue = await connectRPCObject(proxyId, portSecret, source);
|
132
155
|
if (!newValue)
|
133
156
|
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
157
|
return newValue;
|
141
158
|
}
|
142
159
|
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,72 @@ 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
|
peer, peerReadLoop = await rpc_reader.prepare_peer_readloop(self.loop, rpcTransport)
|
353
|
+
peer.onProxySerialization = lambda value, proxyId: onProxySerialization(value, proxyId, clusterPeerPort)
|
354
|
+
|
334
355
|
async def run_loop():
|
335
356
|
try:
|
336
357
|
await peerReadLoop()
|
@@ -342,6 +363,23 @@ class PluginRemote:
|
|
342
363
|
return peer
|
343
364
|
clusterPeerPromise = self.loop.create_task(connectClusterPeer())
|
344
365
|
clusterPeers[port] = clusterPeerPromise
|
366
|
+
return clusterPeerPromise
|
367
|
+
|
368
|
+
async def connectRPCObject(value):
|
369
|
+
clusterObject = getattr(value, '__cluster')
|
370
|
+
if type(clusterObject) is not dict:
|
371
|
+
return value
|
372
|
+
|
373
|
+
if clusterObject.get('id', None) != clusterId:
|
374
|
+
return value
|
375
|
+
|
376
|
+
port = clusterObject['port']
|
377
|
+
proxyId = clusterObject['proxyId']
|
378
|
+
source = clusterObject.get('source', None)
|
379
|
+
if port == clusterPort:
|
380
|
+
return await resolveObject(proxyId, source)
|
381
|
+
|
382
|
+
clusterPeerPromise = ensureClusterPeer(port)
|
345
383
|
|
346
384
|
try:
|
347
385
|
clusterPeer = await clusterPeerPromise
|
@@ -349,7 +387,7 @@ class PluginRemote:
|
|
349
387
|
m = hashlib.sha256()
|
350
388
|
m.update(bytes('%s%s' % (port, clusterSecret), 'utf8'))
|
351
389
|
portSecret = m.hexdigest()
|
352
|
-
newValue = await c(proxyId, portSecret)
|
390
|
+
newValue = await c(proxyId, portSecret, source)
|
353
391
|
if not newValue:
|
354
392
|
raise Exception('ipc object not found?')
|
355
393
|
return newValue
|
@@ -358,18 +396,6 @@ class PluginRemote:
|
|
358
396
|
|
359
397
|
sdk.connectRPCObject = connectRPCObject
|
360
398
|
|
361
|
-
def onProxySerialization(value: Any, proxyId: str):
|
362
|
-
properties: dict = rpc.RpcPeer.prepareProxyProperties(value) or {}
|
363
|
-
if not properties.get('__cluster', None):
|
364
|
-
properties['__cluster'] = {
|
365
|
-
'id': clusterId,
|
366
|
-
'proxyId': proxyId,
|
367
|
-
'port': clusterPort,
|
368
|
-
}
|
369
|
-
return properties
|
370
|
-
|
371
|
-
self.peer.onProxySerialization = onProxySerialization
|
372
|
-
|
373
399
|
forkMain = options and options.get('fork')
|
374
400
|
|
375
401
|
if not forkMain:
|
@@ -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,7 +149,11 @@ export function startPluginRemote(mainFilename: string, pluginId: string, peerSe
|
|
127
149
|
|
128
150
|
try {
|
129
151
|
await once(socket, 'connect');
|
152
|
+
const clusterPeerPort = (socket.address() as net.AddressInfo).port;
|
153
|
+
|
130
154
|
const ret = createDuplexRpcPeer(peer.selfName, 'cluster-server', socket, socket);
|
155
|
+
ret.onProxySerialization = (value, proxyId) => onProxySerialization(value, proxyId, clusterPeerPort);
|
156
|
+
|
131
157
|
return ret;
|
132
158
|
}
|
133
159
|
catch (e) {
|
@@ -137,20 +163,25 @@ 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
|
-
const connectRPCObject = await clusterPeer.getParam('connectRPCObject');
|
180
|
+
const connectRPCObject: ConnectRPCObject = await clusterPeer.getParam('connectRPCObject');
|
144
181
|
const portSecret = crypto.createHash('sha256').update(`${port}${clusterSecret}`).digest().toString('hex');
|
145
|
-
const newValue = await connectRPCObject(proxyId, portSecret);
|
182
|
+
const newValue = await connectRPCObject(proxyId, portSecret, source);
|
146
183
|
if (!newValue)
|
147
184
|
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
185
|
return newValue;
|
155
186
|
}
|
156
187
|
catch (e) {
|