@scrypted/server 0.123.20 → 0.123.22
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.
- package/dist/cluster/cluster-setup.js +5 -3
- package/dist/cluster/cluster-setup.js.map +1 -1
- package/dist/scrypted-cluster-main.js +19 -2
- package/dist/scrypted-cluster-main.js.map +1 -1
- package/package.json +1 -1
- package/python/cluster_setup.py +227 -0
- package/python/plugin_remote.py +8 -230
- package/src/cluster/cluster-setup.ts +5 -3
- package/src/scrypted-cluster-main.ts +22 -2
@@ -353,10 +353,12 @@ function getScryptedClusterMode() {
|
|
353
353
|
const port = parseInt(sport) || 10556;
|
354
354
|
const address = process.env.SCRYPTED_CLUSTER_ADDRESS;
|
355
355
|
if (mode === 'client') {
|
356
|
-
|
356
|
+
// server may be a hostname so no IP check is necessary
|
357
|
+
if (!server)
|
357
358
|
throw new Error('SCRYPTED_CLUSTER_SERVER is not a valid IP address:port.');
|
358
|
-
|
359
|
-
|
359
|
+
// the address can be determined by checking the socket.localAddress after connection.
|
360
|
+
// if (!net.isIP(address))
|
361
|
+
// throw new Error('SCRYPTED_CLUSTER_ADDRESS is not set to a valid IP address.');
|
360
362
|
}
|
361
363
|
else {
|
362
364
|
// the cluster address may come from the server:port combo or address variable but not both.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cluster-setup.js","sourceRoot":"","sources":["../../src/cluster/cluster-setup.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"cluster-setup.js","sourceRoot":"","sources":["../../src/cluster/cluster-setup.ts"],"names":[],"mappings":";;;;;AAeA,4CAEC;AAYD,oCAuVC;AAID,wDAmDC;AA3aD,mCAA8B;AAC9B,8CAAsB;AACtB,oEAA4C;AAC5C,0CAAuC;AACvC,gDAA4C;AAC5C,6EAAwE;AACxE,gCAAiC;AACjC,sDAAwD;AACxD,iDAA0D;AAG1D,SAAS,iBAAiB,CAAC,OAAe,EAAE,IAAY;IACpD,OAAO,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAe;IAC5C,OAAO,CAAC,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAa,EAAE,CAAgB;IAC/D,IAAI,oBAAoB,GAA8B,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACpF,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACxB,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,oBAAoB,CAAC;IACzD,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC;IAC5C,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,SAAgB,YAAY,CAAC,IAAa;IACtC,MAAM,wBAAwB,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACtE,IAAI,SAAiB,CAAC;IACtB,IAAI,aAAqB,CAAC;IAC1B,IAAI,WAAmB,CAAC;IAExB,sGAAsG;IACtG,8DAA8D;IAC9D,0DAA0D;IAC1D,yDAAyD;IACzD,MAAM,YAAY,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEzD,MAAM,aAAa,GAAG,KAAK,EAAE,EAAU,EAAE,SAAiB,EAAE,EAAE;QAC1D,MAAM,UAAU,GAAG,SAAS;YACxB,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC;QACX,IAAI,CAAC,UAAU;YACX,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACrD,OAAO;QACX,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,KAAK,EAAE,CAAgB,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,IAAA,uCAAwB,EAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAC1D,IAAI,MAAM,KAAK,CAAC,CAAC,MAAM;YACnB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,OAAO,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,CAAA;IAED,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,WAAmB,EAAE,EAAE;QAC/D,IAAI,gBAAgB,CAAC,OAAO,CAAC;YACzB,OAAO,GAAG,WAAW,CAAC;QAE1B,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC/D,IAAI,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,kBAAkB;YAClB,OAAO,kBAAkB,CAAC;QAE9B,kBAAkB,GAAG,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,MAAM,GAAG,aAAG,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAE9D,IAAI,CAAC;gBACD,MAAM,IAAA,aAAI,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC9B,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAI,MAAM,CAAC,OAAO,EAAsB,CAAC;gBACzE,IAAI,aAAa,KAAK,wBAAwB,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;oBAC9E,+DAA+D;oBAC/D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAC7B,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,aAAa,CAAC,CAAC;gBAC/D,CAAC;gBAED,MAAM,WAAW,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvF,8EAA8E;gBAC9E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/C,WAAW,CAAC,oBAAoB,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;gBACvG,OAAO,WAAW,CAAC;YACvB,CAAC;YACD,OAAO,CAAC,EAAE,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;gBACxC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,CAAC,CAAC;YACZ,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;QAEL,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACrD,OAAO,kBAAkB,CAAC;IAC9B,CAAC,CAAC;IAGF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgD,CAAC;IAC5E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IAErD,SAAS,cAAc,CAAC,GAAW;QAC/B,IAAI,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,WAAW;YACX,OAAO,WAAW,CAAC;QACvB,IAAI,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,oDAAoD;QACpD,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,WAAW,GAAG,IAAI,mBAAQ,EAA8B,CAAC;YACzD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAElC,IAAI,cAAc,EAAE,CAAC;gBACjB,6CAA6C;gBAC7C,cAAc,CAAC,WAAW,CAAC;oBACvB,QAAQ,EAAE,GAAG;iBAChB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,MAAM,aAAa,GAAG,UAAU,GAAG,EAAE,CAAC;QACtC,SAAS,WAAW;YAChB,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;QACD,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1C,MAAM,UAAU,GAAG,qCAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;YACtF,8EAA8E;YAC9E,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9C,UAAU,CAAC,oBAAoB,GAAG,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;YAElG,UAAU,CAAC,MAAM,CAAC,gBAAgB,GAAG,oBAAoB,CAAC;YAE1D,SAAS,OAAO,CAAC,OAAe;gBAC5B,WAAW,EAAE,CAAC;gBACd,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACzD,OAAO,UAAU,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACvC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAC7C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAE/B,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,MAAM,cAAc,GAA+B,wBAAc,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAc,CAAC,UAAU,CAAC,cAAc,CAAC;IACtI,IAAI,CAAC,wBAAc,CAAC,YAAY,EAAE,CAAC;QAC/B,2GAA2G;QAC3G,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAA+D,EAAE,EAAE;YACnG,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;YACnC,IAAI,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,WAAW,GAAG,IAAI,mBAAQ,EAA8B,CAAC;gBACzD,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC3C,CAAC;YACD,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,UAAU,gBAAgB,CAAC,aAA4B,EAAE,GAAW;QACrE,wDAAwD;QACxD,0EAA0E;QAC1E,uDAAuD;QACvD,IAAI,wBAAc,CAAC,YAAY;YAC3B,uBAAuB,CAAC,GAAG,EAAE,wBAAc,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;QAC/E,IAAI,QAAQ;YACR,OAAO,QAAQ,CAAC;QACpB,OAAO,oBAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsC,CAAC;IAC9D,SAAS,uBAAuB,CAAC,QAAgB,EAAE,eAAuB;QACtE,IAAI,wBAAc,CAAC,YAAY,IAAI,QAAQ,KAAK,wBAAc,CAAC,QAAQ,EAAE,CAAC;YACtE,MAAM,GAAG,GAAG,mDAAmD,CAAC;YAChE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,2EAA2E;QAC3E,8BAA8B;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;YAC5B,OAAO;QAEX,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,wBAAc,CAAC,cAAc,EAAE,CAAC;QAEpD,MAAM,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,OAAO,CAAC,KAAK;YACnB,QAAQ,EAAE,eAAe;SAC5B,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAEpB,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,WAAW,CAAC;gBAChB,IAAI,EAAE,OAAO,CAAC,KAAK;gBACnB,QAAQ;aACX,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACxB,CAAC;aACI,IAAI,eAAe,KAAK,wBAAc,CAAC,QAAQ,EAAE,CAAC;YACnD,cAAc,CAAC,QAAQ,CAAC,CAAC;YACzB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3C,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;aACI,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,SAAS,wBAAwB,CAAC,UAAsC,EAAE,QAAgB;QACtF,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAElC,gJAAgJ;QAChJ,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAA+D,EAAE,EAAE;YAC/F,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;YAEpD,IAAI,IAAI,EAAE,CAAC;gBACP,wBAAwB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACpD,CAAC;iBACI,CAAC;gBACF,uBAAuB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;YACvD,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,EAAE,KAAU,EAAE,EAAE;QAC1C,MAAM,aAAa,GAAkB,KAAK,EAAE,SAAS,CAAC;QACtD,IAAI,aAAa,EAAE,EAAE,KAAK,SAAS;YAC/B,OAAO,KAAK,CAAC;QACjB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC;QACjD,+EAA+E;QAC/E,6EAA6E;QAC7E,IAAI,IAAI,KAAK,WAAW;YACpB,OAAO,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAE/C,sFAAsF;QACtF,IAAI,OAAO,KAAK,wBAAwB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG;gBACnB,OAAO,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,CAAC;YACD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC;YAC7C,8CAA8C;YAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;YACjE,IAAI,QAAQ;gBACR,OAAO,QAAQ,CAAC;YACpB,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YACxE,IAAI,CAAC,QAAQ;gBACT,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC7C,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,CAAC,IAAa,EAAE,KAAU,EAAE,SAAiB,EAAE,EAAE;QAC1E,MAAM,UAAU,GAAG,aAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/D,IAAI,YAAY,GAAkB,UAAU,CAAC,SAAS,CAAC;QAEvD,mCAAmC;QACnC,0FAA0F;QAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,YAAY,EAAE,OAAO,IAAI,KAAK,OAAO,CAAC,GAAG,IAAI,wBAAc,CAAC,QAAQ,IAAI,aAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QAEnJ,yEAAyE;QACzE,oEAAoE;QACpE,4EAA4E;QAC5E,IAAI,YAAY,EAAE,CAAC;YACf,IAAI,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,WAAW,KAAK,YAAY,CAAC,IAAI,IAAI,SAAS,KAAK,YAAY,CAAC,SAAS;gBACpH,YAAY,GAAG,SAAS,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,YAAY,GAAG;gBACX,EAAE,EAAE,SAAS;gBACb,OAAO,EAAE,wBAAwB;gBACjC,IAAI,EAAE,WAAW;gBACjB,OAAO;gBACP,SAAS;gBACT,MAAM,EAAE,IAAI;aACf,CAAC;YACF,YAAY,CAAC,MAAM,GAAG,IAAA,uCAAwB,EAAC,YAAY,EAAE,aAAa,CAAC,CAAC;YAC5E,UAAU,CAAC,SAAS,GAAG,YAAY,CAAC;QACxC,CAAC;QAED,OAAO;YACH,OAAO;YACP,UAAU;SACb,CAAC;IACN,CAAC,CAAA;IACD,MAAM,iBAAiB,GAAsB,KAAK,EAAE,OAGnD,EAAE,EAAE;QACD,IAAI,WAAW;YACX,OAAO;QAEX,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,CAAC;QAGzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAc,CAAC;QAEtC,MAAM,gBAAgB,GAAG,aAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;YAC/C,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAa,CAAC;YAChD,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC;YAC1C,MAAM,cAAc,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;YAC9E,MAAM,WAAW,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACvF,8EAA8E;YAC9E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/C,4FAA4F;YAC5F,qEAAqE;YACrE,WAAW,CAAC,oBAAoB,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;YACvG,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YAC/D,WAAW,CAAC,MAAM,CAAC,gBAAgB,GAAG,oBAAoB,CAAC;YAC3D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACpC,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBAC1C,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,wBAAwB;YAC1C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,WAAW,CAAC;QAElB,WAAW,GAAG,MAAM,IAAA,wBAAU,EAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QAChE,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAErC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACnC,qCAAqC;YACrC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,CAAC;YACD,OAAO,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC,CAAA;IAED,OAAO;QACH,iBAAiB;QACjB,IAAI,WAAW;YACX,OAAO,WAAW,CAAC;QACvB,CAAC;QACD,wBAAwB;QACxB,YAAY;QACZ,oBAAoB;QACpB,oBAAoB;QACpB,iBAAiB;QACjB,cAAc;QACd,wBAAwB;QACxB,gBAAgB;KACnB,CAAA;AACL,CAAC;AAID,SAAgB,sBAAsB;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,qBAA4C,CAAC;IAEtE,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAC;YAC9G,OAAO,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,8FAA8F,CAAC,CAAC;YAC7G,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAA;QAC9C,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,8FAA8F,CAAC,CAAC;YAC7G,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC/C,CAAC;QACD,OAAO;IACX,CAAC;IAED,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IAEzF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB;QACpC,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAE5F,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9E,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAErD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpB,uDAAuD;QACvD,IAAI,CAAC,MAAM;YACP,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAE/E,sFAAsF;QACtF,0BAA0B;QAC1B,qFAAqF;IACzF,CAAC;SACI,CAAC;QACF,4FAA4F;QAC5F,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,KAAK,OAAO;YACvC,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;QAEnG,MAAM,aAAa,GAAG,OAAO,IAAI,MAAM,CAAC;QACxC,IAAI,CAAC,aAAG,CAAC,IAAI,CAAC,aAAa,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,aAAa,CAAC;QACrD,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC"}
|
@@ -7,6 +7,7 @@ exports.ClusterForkResult = exports.PeerLiveness = void 0;
|
|
7
7
|
exports.startClusterClient = startClusterClient;
|
8
8
|
exports.createClusterServer = createClusterServer;
|
9
9
|
const events_1 = require("events");
|
10
|
+
const net_1 = __importDefault(require("net"));
|
10
11
|
const source_map_support_1 = require("source-map-support");
|
11
12
|
const tls_1 = __importDefault(require("tls"));
|
12
13
|
const cluster_hash_1 = require("./cluster/cluster-hash");
|
@@ -74,6 +75,7 @@ class ClusterForkResult extends PeerLiveness {
|
|
74
75
|
}
|
75
76
|
exports.ClusterForkResult = ClusterForkResult;
|
76
77
|
function startClusterClient(mainFilename) {
|
78
|
+
const originalClusterAddress = process.env.SCRYPTED_CLUSTER_ADDRESS;
|
77
79
|
const labels = (0, cluster_labels_1.getClusterLabels)();
|
78
80
|
const clusterSecret = process.env.SCRYPTED_CLUSTER_SECRET;
|
79
81
|
const clusterMode = (0, cluster_setup_1.getScryptedClusterMode)();
|
@@ -84,10 +86,21 @@ function startClusterClient(mainFilename) {
|
|
84
86
|
// furthermore, the mac desktop app needs to pop a privacy warning
|
85
87
|
// for local network, and having the immediate socket connection seems
|
86
88
|
// to hang the app since no window is created yet.
|
87
|
-
await (0, sleep_1.sleep)(
|
88
|
-
const
|
89
|
+
await (0, sleep_1.sleep)(1000);
|
90
|
+
const rawSocket = net_1.default.connect({
|
89
91
|
host,
|
90
92
|
port,
|
93
|
+
// require ipv4 to normalize cluster address.
|
94
|
+
family: 4,
|
95
|
+
});
|
96
|
+
try {
|
97
|
+
await (0, events_1.once)(rawSocket, 'connect');
|
98
|
+
}
|
99
|
+
catch (e) {
|
100
|
+
continue;
|
101
|
+
}
|
102
|
+
const socket = tls_1.default.connect({
|
103
|
+
socket: rawSocket,
|
91
104
|
rejectUnauthorized: false,
|
92
105
|
});
|
93
106
|
try {
|
@@ -96,6 +109,10 @@ function startClusterClient(mainFilename) {
|
|
96
109
|
catch (e) {
|
97
110
|
continue;
|
98
111
|
}
|
112
|
+
if (originalClusterAddress && originalClusterAddress !== socket.localAddress)
|
113
|
+
console.warn('SCRYPTED_CLUSTER_ADDRESS mismatch? Ignoring auto detected address and using the user specified setting.', originalClusterAddress, socket.localAddress);
|
114
|
+
else
|
115
|
+
process.env.SCRYPTED_CLUSTER_ADDRESS = socket.localAddress;
|
99
116
|
const peer = preparePeer(socket, 'client');
|
100
117
|
const { localAddress, localPort } = socket;
|
101
118
|
console.log('Cluster server connected.', localAddress, localPort);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scrypted-cluster-main.js","sourceRoot":"","sources":["../src/scrypted-cluster-main.ts"],"names":[],"mappings":";;;;;;
|
1
|
+
{"version":3,"file":"scrypted-cluster-main.js","sourceRoot":"","sources":["../src/scrypted-cluster-main.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -0,0 +1,227 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import asyncio
|
4
|
+
import base64
|
5
|
+
import hashlib
|
6
|
+
import os
|
7
|
+
from asyncio.events import AbstractEventLoop
|
8
|
+
from collections.abc import Mapping
|
9
|
+
from typing import Any
|
10
|
+
|
11
|
+
import rpc
|
12
|
+
import rpc_reader
|
13
|
+
from typing import TypedDict
|
14
|
+
|
15
|
+
class ClusterObject(TypedDict):
|
16
|
+
id: str
|
17
|
+
address: str
|
18
|
+
port: int
|
19
|
+
proxyId: str
|
20
|
+
sourceKey: str
|
21
|
+
sha256: str
|
22
|
+
|
23
|
+
def isClusterAddress(address: str):
|
24
|
+
return not address or address == os.environ.get("SCRYPTED_CLUSTER_ADDRESS", None)
|
25
|
+
|
26
|
+
def getClusterPeerKey(address: str, port: int):
|
27
|
+
return f"{address}:{port}"
|
28
|
+
class ClusterSetup():
|
29
|
+
def __init__(self, loop: AbstractEventLoop, peer: rpc.RpcPeer):
|
30
|
+
self.loop = loop
|
31
|
+
self.peer = peer
|
32
|
+
self.clusterId: str = None
|
33
|
+
self.clusterSecret: str = None
|
34
|
+
self.clusterAddress: str = None
|
35
|
+
self.clusterPort: int = None
|
36
|
+
self.SCRYPTED_CLUSTER_ADDRESS: str = None
|
37
|
+
self.clusterPeers: Mapping[str, asyncio.Future[rpc.RpcPeer]] = {}
|
38
|
+
|
39
|
+
async def resolveObject(self, id: str, sourceKey: str):
|
40
|
+
sourcePeer: rpc.RpcPeer = (
|
41
|
+
self.peer
|
42
|
+
if not sourceKey
|
43
|
+
else await rpc.maybe_await(self.clusterPeers.get(sourceKey, None))
|
44
|
+
)
|
45
|
+
if not sourcePeer:
|
46
|
+
return
|
47
|
+
return sourcePeer.localProxyMap.get(id, None)
|
48
|
+
|
49
|
+
async def connectClusterObject(self, o: ClusterObject):
|
50
|
+
sha256 = self.computeClusterObjectHash(o)
|
51
|
+
if sha256 != o["sha256"]:
|
52
|
+
raise Exception("secret incorrect")
|
53
|
+
return await self.resolveObject(o.get('proxyId', None), o.get('sourceKey', None))
|
54
|
+
|
55
|
+
def onProxySerialization(self, peer: rpc.RpcPeer, value: Any, sourceKey: str = None):
|
56
|
+
properties: dict = rpc.RpcPeer.prepareProxyProperties(value) or {}
|
57
|
+
clusterEntry = properties.get("__cluster", None)
|
58
|
+
proxyId: str
|
59
|
+
existing = peer.localProxied.get(value, None)
|
60
|
+
if existing:
|
61
|
+
proxyId = existing["id"]
|
62
|
+
else:
|
63
|
+
proxyId = (
|
64
|
+
clusterEntry and clusterEntry.get("proxyId", None)
|
65
|
+
) or rpc.RpcPeer.generateId()
|
66
|
+
|
67
|
+
if clusterEntry:
|
68
|
+
if (
|
69
|
+
isClusterAddress(clusterEntry.get("address", None))
|
70
|
+
and self.clusterPort == clusterEntry["port"]
|
71
|
+
and sourceKey != clusterEntry.get("sourceKey", None)
|
72
|
+
):
|
73
|
+
clusterEntry = None
|
74
|
+
|
75
|
+
if not clusterEntry:
|
76
|
+
clusterEntry: ClusterObject = {
|
77
|
+
"id": self.clusterId,
|
78
|
+
"proxyId": proxyId,
|
79
|
+
"address": self.SCRYPTED_CLUSTER_ADDRESS,
|
80
|
+
"port": self.clusterPort,
|
81
|
+
"sourceKey": sourceKey,
|
82
|
+
}
|
83
|
+
clusterEntry["sha256"] = self.computeClusterObjectHash(clusterEntry)
|
84
|
+
properties["__cluster"] = clusterEntry
|
85
|
+
|
86
|
+
return proxyId, properties
|
87
|
+
|
88
|
+
async def initializeCluster(self, options: dict):
|
89
|
+
if self.clusterPort:
|
90
|
+
return
|
91
|
+
self.clusterId = options["clusterId"]
|
92
|
+
self.clusterSecret = options["clusterSecret"]
|
93
|
+
self.SCRYPTED_CLUSTER_ADDRESS = os.environ.get("SCRYPTED_CLUSTER_ADDRESS", None)
|
94
|
+
|
95
|
+
async def handleClusterClient(
|
96
|
+
reader: asyncio.StreamReader, writer: asyncio.StreamWriter
|
97
|
+
):
|
98
|
+
clusterPeerAddress, clusterPeerPort = writer.get_extra_info("peername")
|
99
|
+
clusterPeerKey = getClusterPeerKey(clusterPeerAddress, clusterPeerPort)
|
100
|
+
rpcTransport = rpc_reader.RpcStreamTransport(reader, writer)
|
101
|
+
peer: rpc.RpcPeer
|
102
|
+
peer, peerReadLoop = await rpc_reader.prepare_peer_readloop(
|
103
|
+
self.loop, rpcTransport
|
104
|
+
)
|
105
|
+
# set all params from self.peer
|
106
|
+
for key, value in self.peer.params.items():
|
107
|
+
peer.params[key] = value
|
108
|
+
peer.onProxySerialization = lambda value: self.onProxySerialization(
|
109
|
+
peer, value, clusterPeerKey
|
110
|
+
)
|
111
|
+
future: asyncio.Future[rpc.RpcPeer] = asyncio.Future()
|
112
|
+
future.set_result(peer)
|
113
|
+
self.clusterPeers[clusterPeerKey] = future
|
114
|
+
peer.params["connectRPCObject"] = lambda o: self.connectClusterObject(o)
|
115
|
+
try:
|
116
|
+
await peerReadLoop()
|
117
|
+
except:
|
118
|
+
pass
|
119
|
+
finally:
|
120
|
+
self.clusterPeers.pop(clusterPeerKey)
|
121
|
+
peer.kill("cluster client killed")
|
122
|
+
writer.close()
|
123
|
+
|
124
|
+
listenAddress = "0.0.0.0" if self.SCRYPTED_CLUSTER_ADDRESS else "127.0.0.1"
|
125
|
+
clusterRpcServer = await asyncio.start_server(
|
126
|
+
handleClusterClient, listenAddress, 0
|
127
|
+
)
|
128
|
+
self.clusterPort = clusterRpcServer.sockets[0].getsockname()[1]
|
129
|
+
self.peer.onProxySerialization = lambda value: self.onProxySerialization(self.peer, value, None)
|
130
|
+
del self.peer.params["initializeCluster"]
|
131
|
+
|
132
|
+
def computeClusterObjectHash(self, o: ClusterObject) -> str:
|
133
|
+
m = hashlib.sha256()
|
134
|
+
m.update(
|
135
|
+
bytes(
|
136
|
+
f"{o['id']}{o.get('address') or ''}{o['port']}{o.get('sourceKey', None) or ''}{o['proxyId']}{self.clusterSecret}",
|
137
|
+
"utf8",
|
138
|
+
)
|
139
|
+
)
|
140
|
+
return base64.b64encode(m.digest()).decode("utf-8")
|
141
|
+
|
142
|
+
def ensureClusterPeer(self, address: str, port: int):
|
143
|
+
if isClusterAddress(address):
|
144
|
+
address = "127.0.0.1"
|
145
|
+
clusterPeerKey = getClusterPeerKey(address, port)
|
146
|
+
clusterPeerPromise = self.clusterPeers.get(clusterPeerKey)
|
147
|
+
if clusterPeerPromise:
|
148
|
+
return clusterPeerPromise
|
149
|
+
|
150
|
+
async def connectClusterPeer():
|
151
|
+
try:
|
152
|
+
reader, writer = await asyncio.open_connection(address, port)
|
153
|
+
sourceAddress, sourcePort = writer.get_extra_info("sockname")
|
154
|
+
if (
|
155
|
+
sourceAddress != self.SCRYPTED_CLUSTER_ADDRESS
|
156
|
+
and sourceAddress != "127.0.0.1"
|
157
|
+
):
|
158
|
+
print("source address mismatch", sourceAddress)
|
159
|
+
rpcTransport = rpc_reader.RpcStreamTransport(reader, writer)
|
160
|
+
clusterPeer, peerReadLoop = await rpc_reader.prepare_peer_readloop(
|
161
|
+
self.loop, rpcTransport
|
162
|
+
)
|
163
|
+
# set all params from self.peer
|
164
|
+
for key, value in self.peer.params.items():
|
165
|
+
clusterPeer.params[key] = value
|
166
|
+
clusterPeer.onProxySerialization = (
|
167
|
+
lambda value: self.clusterSetup.onProxySerialization(
|
168
|
+
clusterPeer, value, clusterPeerKey
|
169
|
+
)
|
170
|
+
)
|
171
|
+
except:
|
172
|
+
self.clusterPeers.pop(clusterPeerKey)
|
173
|
+
raise
|
174
|
+
|
175
|
+
async def run_loop():
|
176
|
+
try:
|
177
|
+
await peerReadLoop()
|
178
|
+
except:
|
179
|
+
pass
|
180
|
+
finally:
|
181
|
+
self.clusterPeers.pop(clusterPeerKey)
|
182
|
+
|
183
|
+
asyncio.run_coroutine_threadsafe(run_loop(), self.loop)
|
184
|
+
return clusterPeer
|
185
|
+
|
186
|
+
clusterPeerPromise = self.loop.create_task(connectClusterPeer())
|
187
|
+
|
188
|
+
self.clusterPeers[clusterPeerKey] = clusterPeerPromise
|
189
|
+
return clusterPeerPromise
|
190
|
+
|
191
|
+
async def connectRPCObject(self, value):
|
192
|
+
__cluster = getattr(value, "__cluster")
|
193
|
+
if type(__cluster) is not dict:
|
194
|
+
return value
|
195
|
+
|
196
|
+
clusterObject: ClusterObject = __cluster
|
197
|
+
|
198
|
+
if clusterObject.get("id", None) != self.clusterId:
|
199
|
+
return value
|
200
|
+
|
201
|
+
address = clusterObject.get("address", None)
|
202
|
+
port = clusterObject["port"]
|
203
|
+
proxyId = clusterObject["proxyId"]
|
204
|
+
if port == self.clusterPort:
|
205
|
+
return await self.connectRPCObject(clusterObject)
|
206
|
+
|
207
|
+
clusterPeerPromise = self.ensureClusterPeer(address, port)
|
208
|
+
|
209
|
+
try:
|
210
|
+
clusterPeer = await clusterPeerPromise
|
211
|
+
weakref = clusterPeer.remoteWeakProxies.get(proxyId, None)
|
212
|
+
existing = weakref() if weakref else None
|
213
|
+
if existing:
|
214
|
+
return existing
|
215
|
+
|
216
|
+
peerConnectRPCObject = clusterPeer.tags.get("connectRPCObject")
|
217
|
+
if not peerConnectRPCObject:
|
218
|
+
peerConnectRPCObject = await clusterPeer.getParam(
|
219
|
+
"connectRPCObject"
|
220
|
+
)
|
221
|
+
clusterPeer.tags["connectRPCObject"] = peerConnectRPCObject
|
222
|
+
newValue = await peerConnectRPCObject(clusterObject)
|
223
|
+
if not newValue:
|
224
|
+
raise Exception("rpc object not found?")
|
225
|
+
return newValue
|
226
|
+
except Exception as e:
|
227
|
+
return value
|
package/python/plugin_remote.py
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import asyncio
|
4
|
-
import base64
|
5
4
|
import gc
|
6
|
-
import hashlib
|
7
5
|
import inspect
|
8
6
|
import multiprocessing
|
9
7
|
import multiprocessing.connection
|
@@ -19,39 +17,27 @@ from asyncio.futures import Future
|
|
19
17
|
from asyncio.streams import StreamReader, StreamWriter
|
20
18
|
from collections.abc import Mapping
|
21
19
|
from io import StringIO
|
22
|
-
from typing import Any, Optional, Set, Tuple, TypedDict
|
20
|
+
from typing import Any, Callable, Coroutine, Optional, Set, Tuple, TypedDict
|
23
21
|
|
24
22
|
import plugin_volume as pv
|
25
23
|
import rpc
|
26
24
|
import rpc_reader
|
27
25
|
import scrypted_python.scrypted_sdk.types
|
26
|
+
from cluster_setup import ClusterSetup
|
28
27
|
from plugin_pip import install_with_pip, need_requirements, remove_pip_dirs
|
29
28
|
from scrypted_python.scrypted_sdk import PluginFork, ScryptedStatic
|
30
|
-
from scrypted_python.scrypted_sdk.types import (
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
ScryptedInterfaceProperty,
|
37
|
-
Storage,
|
38
|
-
)
|
29
|
+
from scrypted_python.scrypted_sdk.types import (Device, DeviceManifest,
|
30
|
+
EventDetails,
|
31
|
+
ScryptedInterface,
|
32
|
+
ScryptedInterfaceMethods,
|
33
|
+
ScryptedInterfaceProperty,
|
34
|
+
Storage)
|
39
35
|
|
40
36
|
SCRYPTED_REQUIREMENTS = """
|
41
37
|
ptpython
|
42
38
|
wheel
|
43
39
|
""".strip()
|
44
40
|
|
45
|
-
|
46
|
-
class ClusterObject(TypedDict):
|
47
|
-
id: str
|
48
|
-
address: str
|
49
|
-
port: int
|
50
|
-
proxyId: str
|
51
|
-
sourceKey: str
|
52
|
-
sha256: str
|
53
|
-
|
54
|
-
|
55
41
|
class SystemDeviceState(TypedDict):
|
56
42
|
lastEventTime: int
|
57
43
|
stateTime: int
|
@@ -553,214 +539,6 @@ class DeviceManager(scrypted_python.scrypted_sdk.types.DeviceManager):
|
|
553
539
|
def getDeviceStorage(self, nativeId: str = None) -> Storage:
|
554
540
|
return self.nativeIds.get(nativeId, None)
|
555
541
|
|
556
|
-
|
557
|
-
def isClusterAddress(address: str):
|
558
|
-
return not address or address == os.environ.get("SCRYPTED_CLUSTER_ADDRESS", None)
|
559
|
-
|
560
|
-
def getClusterPeerKey(address: str, port: int):
|
561
|
-
return f"{address}:{port}"
|
562
|
-
|
563
|
-
class ClusterSetup():
|
564
|
-
def __init__(self, loop: AbstractEventLoop, peer: rpc.RpcPeer):
|
565
|
-
self.loop = loop
|
566
|
-
self.peer = peer
|
567
|
-
self.clusterId: str = None
|
568
|
-
self.clusterSecret: str = None
|
569
|
-
self.clusterAddress: str = None
|
570
|
-
self.clusterPort: int = None
|
571
|
-
self.SCRYPTED_CLUSTER_ADDRESS: str = None
|
572
|
-
self.clusterPeers: Mapping[str, asyncio.Future[rpc.RpcPeer]] = {}
|
573
|
-
|
574
|
-
async def resolveObject(self, id: str, sourceKey: str):
|
575
|
-
sourcePeer: rpc.RpcPeer = (
|
576
|
-
self.peer
|
577
|
-
if not sourceKey
|
578
|
-
else await rpc.maybe_await(self.clusterPeers.get(sourceKey, None))
|
579
|
-
)
|
580
|
-
if not sourcePeer:
|
581
|
-
return
|
582
|
-
return sourcePeer.localProxyMap.get(id, None)
|
583
|
-
|
584
|
-
async def connectClusterObject(self, o: ClusterObject):
|
585
|
-
sha256 = self.computeClusterObjectHash(o)
|
586
|
-
if sha256 != o["sha256"]:
|
587
|
-
raise Exception("secret incorrect")
|
588
|
-
return await self.resolveObject(o.get('proxyId', None), o.get('sourceKey', None))
|
589
|
-
|
590
|
-
def onProxySerialization(self, peer: rpc.RpcPeer, value: Any, sourceKey: str = None):
|
591
|
-
properties: dict = rpc.RpcPeer.prepareProxyProperties(value) or {}
|
592
|
-
clusterEntry = properties.get("__cluster", None)
|
593
|
-
proxyId: str
|
594
|
-
existing = peer.localProxied.get(value, None)
|
595
|
-
if existing:
|
596
|
-
proxyId = existing["id"]
|
597
|
-
else:
|
598
|
-
proxyId = (
|
599
|
-
clusterEntry and clusterEntry.get("proxyId", None)
|
600
|
-
) or rpc.RpcPeer.generateId()
|
601
|
-
|
602
|
-
if clusterEntry:
|
603
|
-
if (
|
604
|
-
isClusterAddress(clusterEntry.get("address", None))
|
605
|
-
and self.clusterPort == clusterEntry["port"]
|
606
|
-
and sourceKey != clusterEntry.get("sourceKey", None)
|
607
|
-
):
|
608
|
-
clusterEntry = None
|
609
|
-
|
610
|
-
if not clusterEntry:
|
611
|
-
clusterEntry: ClusterObject = {
|
612
|
-
"id": self.clusterId,
|
613
|
-
"proxyId": proxyId,
|
614
|
-
"address": self.SCRYPTED_CLUSTER_ADDRESS,
|
615
|
-
"port": self.clusterPort,
|
616
|
-
"sourceKey": sourceKey,
|
617
|
-
}
|
618
|
-
clusterEntry["sha256"] = self.computeClusterObjectHash(clusterEntry)
|
619
|
-
properties["__cluster"] = clusterEntry
|
620
|
-
|
621
|
-
return proxyId, properties
|
622
|
-
|
623
|
-
async def initializeCluster(self, options: dict):
|
624
|
-
if self.clusterPort:
|
625
|
-
return
|
626
|
-
self.clusterId = options["clusterId"]
|
627
|
-
self.clusterSecret = options["clusterSecret"]
|
628
|
-
self.SCRYPTED_CLUSTER_ADDRESS = os.environ.get("SCRYPTED_CLUSTER_ADDRESS", None)
|
629
|
-
|
630
|
-
async def handleClusterClient(
|
631
|
-
reader: asyncio.StreamReader, writer: asyncio.StreamWriter
|
632
|
-
):
|
633
|
-
clusterPeerAddress, clusterPeerPort = writer.get_extra_info("peername")
|
634
|
-
clusterPeerKey = getClusterPeerKey(clusterPeerAddress, clusterPeerPort)
|
635
|
-
rpcTransport = rpc_reader.RpcStreamTransport(reader, writer)
|
636
|
-
peer: rpc.RpcPeer
|
637
|
-
peer, peerReadLoop = await rpc_reader.prepare_peer_readloop(
|
638
|
-
self.loop, rpcTransport
|
639
|
-
)
|
640
|
-
# set all params from self.peer
|
641
|
-
for key, value in self.peer.params.items():
|
642
|
-
peer.params[key] = value
|
643
|
-
peer.onProxySerialization = lambda value: self.onProxySerialization(
|
644
|
-
peer, value, clusterPeerKey
|
645
|
-
)
|
646
|
-
future: asyncio.Future[rpc.RpcPeer] = asyncio.Future()
|
647
|
-
future.set_result(peer)
|
648
|
-
self.clusterPeers[clusterPeerKey] = future
|
649
|
-
peer.params["connectRPCObject"] = lambda o: self.connectClusterObject(o)
|
650
|
-
try:
|
651
|
-
await peerReadLoop()
|
652
|
-
except:
|
653
|
-
pass
|
654
|
-
finally:
|
655
|
-
self.clusterPeers.pop(clusterPeerKey)
|
656
|
-
peer.kill("cluster client killed")
|
657
|
-
writer.close()
|
658
|
-
|
659
|
-
listenAddress = "0.0.0.0" if self.SCRYPTED_CLUSTER_ADDRESS else "127.0.0.1"
|
660
|
-
clusterRpcServer = await asyncio.start_server(
|
661
|
-
handleClusterClient, listenAddress, 0
|
662
|
-
)
|
663
|
-
self.clusterPort = clusterRpcServer.sockets[0].getsockname()[1]
|
664
|
-
self.peer.onProxySerialization = lambda value: self.onProxySerialization(self.peer, value, None)
|
665
|
-
del self.peer.params["initializeCluster"]
|
666
|
-
|
667
|
-
def computeClusterObjectHash(self, o: ClusterObject) -> str:
|
668
|
-
m = hashlib.sha256()
|
669
|
-
m.update(
|
670
|
-
bytes(
|
671
|
-
f"{o['id']}{o.get('address') or ''}{o['port']}{o.get('sourceKey', None) or ''}{o['proxyId']}{self.clusterSecret}",
|
672
|
-
"utf8",
|
673
|
-
)
|
674
|
-
)
|
675
|
-
return base64.b64encode(m.digest()).decode("utf-8")
|
676
|
-
|
677
|
-
def ensureClusterPeer(self, address: str, port: int):
|
678
|
-
if isClusterAddress(address):
|
679
|
-
address = "127.0.0.1"
|
680
|
-
clusterPeerKey = getClusterPeerKey(address, port)
|
681
|
-
clusterPeerPromise = self.clusterPeers.get(clusterPeerKey)
|
682
|
-
if clusterPeerPromise:
|
683
|
-
return clusterPeerPromise
|
684
|
-
|
685
|
-
async def connectClusterPeer():
|
686
|
-
try:
|
687
|
-
reader, writer = await asyncio.open_connection(address, port)
|
688
|
-
sourceAddress, sourcePort = writer.get_extra_info("sockname")
|
689
|
-
if (
|
690
|
-
sourceAddress != self.SCRYPTED_CLUSTER_ADDRESS
|
691
|
-
and sourceAddress != "127.0.0.1"
|
692
|
-
):
|
693
|
-
print("source address mismatch", sourceAddress)
|
694
|
-
rpcTransport = rpc_reader.RpcStreamTransport(reader, writer)
|
695
|
-
clusterPeer, peerReadLoop = await rpc_reader.prepare_peer_readloop(
|
696
|
-
self.loop, rpcTransport
|
697
|
-
)
|
698
|
-
# set all params from self.peer
|
699
|
-
for key, value in self.peer.params.items():
|
700
|
-
clusterPeer.params[key] = value
|
701
|
-
clusterPeer.onProxySerialization = (
|
702
|
-
lambda value: self.clusterSetup.onProxySerialization(
|
703
|
-
clusterPeer, value, clusterPeerKey
|
704
|
-
)
|
705
|
-
)
|
706
|
-
except:
|
707
|
-
self.clusterPeers.pop(clusterPeerKey)
|
708
|
-
raise
|
709
|
-
|
710
|
-
async def run_loop():
|
711
|
-
try:
|
712
|
-
await peerReadLoop()
|
713
|
-
except:
|
714
|
-
pass
|
715
|
-
finally:
|
716
|
-
self.clusterPeers.pop(clusterPeerKey)
|
717
|
-
|
718
|
-
asyncio.run_coroutine_threadsafe(run_loop(), self.loop)
|
719
|
-
return clusterPeer
|
720
|
-
|
721
|
-
clusterPeerPromise = self.loop.create_task(connectClusterPeer())
|
722
|
-
|
723
|
-
self.clusterPeers[clusterPeerKey] = clusterPeerPromise
|
724
|
-
return clusterPeerPromise
|
725
|
-
|
726
|
-
async def connectRPCObject(self, value):
|
727
|
-
__cluster = getattr(value, "__cluster")
|
728
|
-
if type(__cluster) is not dict:
|
729
|
-
return value
|
730
|
-
|
731
|
-
clusterObject: ClusterObject = __cluster
|
732
|
-
|
733
|
-
if clusterObject.get("id", None) != self.clusterId:
|
734
|
-
return value
|
735
|
-
|
736
|
-
address = clusterObject.get("address", None)
|
737
|
-
port = clusterObject["port"]
|
738
|
-
proxyId = clusterObject["proxyId"]
|
739
|
-
if port == self.clusterPort:
|
740
|
-
return await self.connectRPCObject(clusterObject)
|
741
|
-
|
742
|
-
clusterPeerPromise = self.ensureClusterPeer(address, port)
|
743
|
-
|
744
|
-
try:
|
745
|
-
clusterPeer = await clusterPeerPromise
|
746
|
-
weakref = clusterPeer.remoteWeakProxies.get(proxyId, None)
|
747
|
-
existing = weakref() if weakref else None
|
748
|
-
if existing:
|
749
|
-
return existing
|
750
|
-
|
751
|
-
peerConnectRPCObject = clusterPeer.tags.get("connectRPCObject")
|
752
|
-
if not peerConnectRPCObject:
|
753
|
-
peerConnectRPCObject = await clusterPeer.getParam(
|
754
|
-
"connectRPCObject"
|
755
|
-
)
|
756
|
-
clusterPeer.tags["connectRPCObject"] = peerConnectRPCObject
|
757
|
-
newValue = await peerConnectRPCObject(clusterObject)
|
758
|
-
if not newValue:
|
759
|
-
raise Exception("rpc object not found?")
|
760
|
-
return newValue
|
761
|
-
except Exception as e:
|
762
|
-
return value
|
763
|
-
|
764
542
|
class PluginRemote:
|
765
543
|
def __init__(
|
766
544
|
self, clusterSetup: ClusterSetup, api, pluginId: str, hostInfo, loop: AbstractEventLoop
|
@@ -404,11 +404,13 @@ export function getScryptedClusterMode(): ['server' | 'client', string, number]
|
|
404
404
|
const address = process.env.SCRYPTED_CLUSTER_ADDRESS;
|
405
405
|
|
406
406
|
if (mode === 'client') {
|
407
|
-
|
407
|
+
// server may be a hostname so no IP check is necessary
|
408
|
+
if (!server)
|
408
409
|
throw new Error('SCRYPTED_CLUSTER_SERVER is not a valid IP address:port.');
|
409
410
|
|
410
|
-
|
411
|
-
|
411
|
+
// the address can be determined by checking the socket.localAddress after connection.
|
412
|
+
// if (!net.isIP(address))
|
413
|
+
// throw new Error('SCRYPTED_CLUSTER_ADDRESS is not set to a valid IP address.');
|
412
414
|
}
|
413
415
|
else {
|
414
416
|
// the cluster address may come from the server:port combo or address variable but not both.
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import type { ForkOptions } from '@scrypted/types';
|
2
2
|
import { once } from 'events';
|
3
|
+
import net from 'net';
|
3
4
|
import { install as installSourceMapSupport } from 'source-map-support';
|
4
5
|
import type { Readable } from 'stream';
|
5
6
|
import tls from 'tls';
|
@@ -95,6 +96,7 @@ export class ClusterForkResult extends PeerLiveness {
|
|
95
96
|
export type ClusterForkParam = (peerLiveness: PeerLiveness, runtime: string, packageJson: any, zipHash: string, getZip: () => Promise<Buffer>) => Promise<ClusterForkResult>;
|
96
97
|
|
97
98
|
export function startClusterClient(mainFilename: string) {
|
99
|
+
const originalClusterAddress = process.env.SCRYPTED_CLUSTER_ADDRESS;
|
98
100
|
const labels = getClusterLabels();
|
99
101
|
|
100
102
|
const clusterSecret = process.env.SCRYPTED_CLUSTER_SECRET;
|
@@ -106,11 +108,24 @@ export function startClusterClient(mainFilename: string) {
|
|
106
108
|
// furthermore, the mac desktop app needs to pop a privacy warning
|
107
109
|
// for local network, and having the immediate socket connection seems
|
108
110
|
// to hang the app since no window is created yet.
|
109
|
-
await sleep(
|
111
|
+
await sleep(1000);
|
110
112
|
|
111
|
-
const
|
113
|
+
const rawSocket = net.connect({
|
112
114
|
host,
|
113
115
|
port,
|
116
|
+
// require ipv4 to normalize cluster address.
|
117
|
+
family: 4,
|
118
|
+
});
|
119
|
+
|
120
|
+
try {
|
121
|
+
await once(rawSocket, 'connect');
|
122
|
+
}
|
123
|
+
catch( e) {
|
124
|
+
continue;
|
125
|
+
}
|
126
|
+
|
127
|
+
const socket = tls.connect({
|
128
|
+
socket: rawSocket,
|
114
129
|
rejectUnauthorized: false,
|
115
130
|
});
|
116
131
|
|
@@ -121,6 +136,11 @@ export function startClusterClient(mainFilename: string) {
|
|
121
136
|
continue;
|
122
137
|
}
|
123
138
|
|
139
|
+
if (originalClusterAddress && originalClusterAddress !== socket.localAddress)
|
140
|
+
console.warn('SCRYPTED_CLUSTER_ADDRESS mismatch? Ignoring auto detected address and using the user specified setting.', originalClusterAddress, socket.localAddress);
|
141
|
+
else
|
142
|
+
process.env.SCRYPTED_CLUSTER_ADDRESS = socket.localAddress;
|
143
|
+
|
124
144
|
const peer = preparePeer(socket, 'client');
|
125
145
|
const { localAddress, localPort } = socket;
|
126
146
|
console.log('Cluster server connected.', localAddress, localPort);
|