@scrypted/server 0.7.74 → 0.7.75

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.

@@ -154,14 +154,19 @@ class SystemManagerImpl {
154
154
  getDeviceById(idOrPluginId, nativeId) {
155
155
  let id;
156
156
  if (this.state[idOrPluginId]) {
157
+ // don't allow invalid input on nativeId, must be nullish if there is an exact id match.
158
+ if (nativeId != null)
159
+ return;
157
160
  id = idOrPluginId;
158
161
  }
159
162
  else {
160
163
  for (const check of Object.keys(this.state)) {
161
164
  const state = this.state[check];
162
- if (state[types_1.ScryptedInterfaceProperty.pluginId].value === idOrPluginId) {
165
+ if (!state)
166
+ continue;
167
+ if (state[types_1.ScryptedInterfaceProperty.pluginId]?.value === idOrPluginId) {
163
168
  // null and undefined should match here.
164
- if (nativeId == state[types_1.ScryptedInterfaceProperty.nativeId]?.value) {
169
+ if (state[types_1.ScryptedInterfaceProperty.nativeId]?.value == nativeId) {
165
170
  id = check;
166
171
  break;
167
172
  }
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/plugin/system.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/plugin/system.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@scrypted/server",
3
- "version": "0.7.74",
3
+ "version": "0.7.75",
4
4
  "description": "",
5
5
  "dependencies": {
6
6
  "@mapbox/node-pre-gyp": "^1.0.10",
7
- "@scrypted/types": "^0.2.80",
7
+ "@scrypted/types": "^0.2.87",
8
8
  "adm-zip": "^0.5.10",
9
9
  "axios": "^0.21.4",
10
10
  "body-parser": "^1.20.2",
@@ -23,6 +23,7 @@ import scrypted_python.scrypted_sdk.types
23
23
  from scrypted_python.scrypted_sdk import PluginFork, ScryptedStatic
24
24
  from scrypted_python.scrypted_sdk.types import (Device, DeviceManifest,
25
25
  EventDetails,
26
+ ScryptedInterfaceMethods,
26
27
  ScryptedInterfaceProperty,
27
28
  Storage)
28
29
 
@@ -38,20 +39,121 @@ import multiprocessing.connection
38
39
  import rpc
39
40
  import rpc_reader
40
41
 
42
+
41
43
  class SystemDeviceState(TypedDict):
42
44
  lastEventTime: int
43
45
  stateTime: int
44
46
  value: any
45
47
 
48
+
49
+ class DeviceProxy(object):
50
+ device: asyncio.Future[rpc.RpcPeer]
51
+
52
+ def __init__(self, systemManager: SystemManager, id: str):
53
+ self.systemManager = systemManager
54
+ self.id = id
55
+ self.device = None
56
+
57
+ def __getattr__(self, name):
58
+ if name == 'id':
59
+ return self.id
60
+
61
+ if hasattr(ScryptedInterfaceProperty, name):
62
+ state = self.systemManager.systemState.get(self.id)
63
+ if not state:
64
+ return
65
+ p = state.get(name)
66
+ if not p:
67
+ return
68
+ return p.get('value', None)
69
+ if hasattr(ScryptedInterfaceMethods, name):
70
+ return rpc.RpcProxyMethod(self, name)
71
+
72
+ def __setattr__(self, name: str, value: Any) -> None:
73
+ if name == '__proxy_finalizer_id':
74
+ self.__dict__['__proxy_entry']['finalizerId'] = value
75
+
76
+ return super().__setattr__(name, value)
77
+
78
+ def __apply__(self, method: str, args: list):
79
+ if not self.device:
80
+ self.device = self.systemManager.api.getDeviceById(self.id)
81
+
82
+ async def apply():
83
+ device = await self.device
84
+ return await device.__apply__(method, args)
85
+ return apply()
86
+
87
+
46
88
  class SystemManager(scrypted_python.scrypted_sdk.types.SystemManager):
89
+ deviceProxies: Mapping[str, DeviceProxy]
90
+
47
91
  def __init__(self, api: Any, systemState: Mapping[str, Mapping[str, SystemDeviceState]]) -> None:
48
92
  super().__init__()
49
93
  self.api = api
50
94
  self.systemState = systemState
95
+ self.deviceProxies = {}
51
96
 
52
97
  async def getComponent(self, id: str) -> Any:
53
98
  return await self.api.getComponent(id)
54
99
 
100
+ def getSystemState(self) -> Any:
101
+ return self.systemState
102
+
103
+ def getDeviceById(self, idOrPluginId: str, nativeId: str = None) -> scrypted_python.scrypted_sdk.ScryptedDevice:
104
+ id: str = None
105
+ if self.systemState.get(idOrPluginId, None):
106
+ if nativeId is not None:
107
+ return
108
+ id = idOrPluginId
109
+ else:
110
+ for check in self.systemState:
111
+ state = self.systemState.get(check, None)
112
+ if not state:
113
+ continue
114
+ pluginId = state.get('pluginId', None)
115
+ if not pluginId:
116
+ continue
117
+ pluginId = pluginId.get('value', None)
118
+ if pluginId == idOrPluginId:
119
+ checkNativeId = state.get('nativeId', None)
120
+ if not checkNativeId:
121
+ continue
122
+ checkNativeId = checkNativeId.get('value', None)
123
+ if nativeId == checkNativeId:
124
+ id = idOrPluginId
125
+ break
126
+
127
+ if not id:
128
+ return
129
+ ret = self.deviceProxies.get(id)
130
+ if not ret:
131
+ ret = DeviceProxy(self, id)
132
+ self.deviceProxies[id] = ret
133
+ return ret
134
+
135
+ def getDeviceByName(self, name: str) -> scrypted_python.scrypted_sdk.ScryptedDevice:
136
+ for check in self.systemState:
137
+ state = self.systemState.get(check, None)
138
+ if not state:
139
+ continue
140
+ checkName = state.get('name', None)
141
+ if not checkName:
142
+ continue
143
+ if checkName.get('value', None) == name:
144
+ return self.getDeviceById(check)
145
+
146
+ # TODO
147
+ async def listen(self, callback: scrypted_python.scrypted_sdk.EventListener) -> scrypted_python.scrypted_sdk.EventListenerRegister:
148
+ return super().listen(callback)
149
+
150
+ # TODO
151
+ async def listenDevice(self, id: str, event: str | scrypted_python.scrypted_sdk.EventListenerOptions, callback: scrypted_python.scrypted_sdk.EventListener) -> scrypted_python.scrypted_sdk.EventListenerRegister:
152
+ return super().listenDevice(id, event, callback)
153
+
154
+ async def removeDevice(self, id: str) -> None:
155
+ return await self.api.removeDevice(id)
156
+
55
157
 
56
158
  class MediaObject(scrypted_python.scrypted_sdk.types.MediaObject):
57
159
  def __init__(self, data, mimeType, options):
@@ -216,6 +318,7 @@ class DeviceManager(scrypted_python.scrypted_sdk.types.DeviceManager):
216
318
  def getDeviceStorage(self, nativeId: str = None) -> Storage:
217
319
  return self.nativeIds.get(nativeId, None)
218
320
 
321
+
219
322
  class PluginRemote:
220
323
  systemState: Mapping[str, Mapping[str, SystemDeviceState]] = {}
221
324
  nativeIds: Mapping[str, DeviceStorage] = {}
@@ -272,7 +375,7 @@ class PluginRemote:
272
375
  asyncio.run_coroutine_threadsafe(self.print_async(
273
376
  nativeId, *values, sep=sep, end=end, flush=flush), self.loop)
274
377
 
275
- async def loadZip(self, packageJson, zipData, options: dict=None):
378
+ async def loadZip(self, packageJson, zipData, options: dict = None):
276
379
  try:
277
380
  return await self.loadZipWrapped(packageJson, zipData, options)
278
381
  except:
@@ -280,7 +383,7 @@ class PluginRemote:
280
383
  traceback.print_exc()
281
384
  raise
282
385
 
283
- async def loadZipWrapped(self, packageJson, zipData, options: dict=None):
386
+ async def loadZipWrapped(self, packageJson, zipData, options: dict = None):
284
387
  sdk = ScryptedStatic()
285
388
 
286
389
  clusterId = options['clusterId']
@@ -311,15 +414,18 @@ class PluginRemote:
311
414
  return sourcePeer.localProxyMap.get(id, None)
312
415
 
313
416
  clusterPeers: Mapping[int, asyncio.Future[rpc.RpcPeer]] = {}
417
+
314
418
  async def handleClusterClient(reader: asyncio.StreamReader, writer: asyncio.StreamWriter):
315
419
  _, clusterPeerPort = writer.get_extra_info('peername')
316
420
  rpcTransport = rpc_reader.RpcStreamTransport(reader, writer)
317
421
  peer: rpc.RpcPeer
318
422
  peer, peerReadLoop = await rpc_reader.prepare_peer_readloop(self.loop, rpcTransport)
319
- peer.onProxySerialization = lambda value, proxyId: onProxySerialization(value, proxyId, clusterPeerPort)
423
+ peer.onProxySerialization = lambda value, proxyId: onProxySerialization(
424
+ value, proxyId, clusterPeerPort)
320
425
  future = asyncio.Future[rpc.RpcPeer]()
321
426
  future.set_result(peer)
322
427
  clusterPeers[clusterPeerPort] = future
428
+
323
429
  async def connectRPCObject(id: str, secret: str, sourcePeerPort: int = None):
324
430
  m = hashlib.sha256()
325
431
  m.update(bytes('%s%s' % (clusterPort, clusterSecret), 'utf8'))
@@ -348,10 +454,12 @@ class PluginRemote:
348
454
  reader, writer = await asyncio.open_connection(
349
455
  '127.0.0.1', port)
350
456
  _, clusterPeerPort = writer.get_extra_info('sockname')
351
- rpcTransport = rpc_reader.RpcStreamTransport(reader, writer)
457
+ rpcTransport = rpc_reader.RpcStreamTransport(
458
+ reader, writer)
352
459
  clusterPeer, peerReadLoop = await rpc_reader.prepare_peer_readloop(self.loop, rpcTransport)
353
460
  clusterPeer.tags['localPort'] = clusterPeerPort
354
- clusterPeer.onProxySerialization = lambda value, proxyId: onProxySerialization(value, proxyId, clusterPeerPort)
461
+ clusterPeer.onProxySerialization = lambda value, proxyId: onProxySerialization(
462
+ value, proxyId, clusterPeerPort)
355
463
 
356
464
  async def run_loop():
357
465
  try:
@@ -362,7 +470,8 @@ class PluginRemote:
362
470
  clusterPeers.pop(port)
363
471
  asyncio.run_coroutine_threadsafe(run_loop(), self.loop)
364
472
  return clusterPeer
365
- clusterPeerPromise = self.loop.create_task(connectClusterPeer())
473
+ clusterPeerPromise = self.loop.create_task(
474
+ connectClusterPeer())
366
475
  clusterPeers[port] = clusterPeerPromise
367
476
  return clusterPeerPromise
368
477
 
@@ -373,7 +482,7 @@ class PluginRemote:
373
482
 
374
483
  if clusterObject.get('id', None) != clusterId:
375
484
  return value
376
-
485
+
377
486
  port = clusterObject['port']
378
487
  proxyId = clusterObject['proxyId']
379
488
  source = clusterObject.get('source', None)
@@ -407,7 +516,8 @@ class PluginRemote:
407
516
  zipPath: str
408
517
 
409
518
  if isinstance(zipData, str):
410
- zipPath = (options and options.get('filename', None)) or zipData
519
+ zipPath = (options and options.get(
520
+ 'filename', None)) or zipData
411
521
  if zipPath != zipData:
412
522
  shutil.copyfile(zipData, zipPath)
413
523
  else:
@@ -427,9 +537,12 @@ class PluginRemote:
427
537
  # this will cause prebuilt wheel installation to fail.
428
538
  if platform.machine() == 'aarch64' and platform.architecture()[0] == '32bit':
429
539
  print('=============================================')
430
- print('Python machine vs architecture mismatch detected. Plugin installation may fail.')
431
- print('This issue occurs if a 32bit system was upgraded to a 64bit kernel.')
432
- print('Reverting to the 32bit kernel (or reflashing as native 64 bit is recommended.')
540
+ print(
541
+ 'Python machine vs architecture mismatch detected. Plugin installation may fail.')
542
+ print(
543
+ 'This issue occurs if a 32bit system was upgraded to a 64bit kernel.')
544
+ print(
545
+ 'Reverting to the 32bit kernel (or reflashing as native 64 bit is recommended.')
433
546
  print('https://github.com/koush/scrypted/issues/678')
434
547
  print('=============================================')
435
548
 
@@ -437,7 +550,8 @@ class PluginRemote:
437
550
  sys.version_info[0])+"."+str(sys.version_info[1])
438
551
  print('python version:', python_version)
439
552
 
440
- python_versioned_directory = '%s-%s-%s' % (python_version, platform.system(), platform.machine())
553
+ python_versioned_directory = '%s-%s-%s' % (
554
+ python_version, platform.system(), platform.machine())
441
555
  SCRYPTED_BASE_VERSION = os.environ.get('SCRYPTED_BASE_VERSION')
442
556
  if SCRYPTED_BASE_VERSION:
443
557
  python_versioned_directory += '-' + SCRYPTED_BASE_VERSION
@@ -454,7 +568,8 @@ class PluginRemote:
454
568
  requirements = zip.open('requirements.txt').read()
455
569
  str_requirements = requirements.decode('utf8')
456
570
 
457
- requirementstxt = os.path.join(python_prefix, 'requirements.txt')
571
+ requirementstxt = os.path.join(
572
+ python_prefix, 'requirements.txt')
458
573
  installed_requirementstxt = os.path.join(
459
574
  python_prefix, 'requirements.installed.txt')
460
575
 
@@ -470,7 +585,8 @@ class PluginRemote:
470
585
  for de in os.listdir(plugin_volume):
471
586
  if de.startswith('linux') or de.startswith('darwin') or de.startswith('win32') or de.startswith('python') or de.startswith('node'):
472
587
  filePath = os.path.join(plugin_volume, de)
473
- print('Removing old dependencies: %s' % filePath)
588
+ print('Removing old dependencies: %s' %
589
+ filePath)
474
590
  try:
475
591
  shutil.rmtree(filePath)
476
592
  except:
@@ -488,7 +604,7 @@ class PluginRemote:
488
604
  f.close()
489
605
 
490
606
  p = subprocess.Popen([sys.executable, '-m', 'pip', 'install', '-r', requirementstxt,
491
- '--prefix', python_prefix], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
607
+ '--prefix', python_prefix], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
492
608
  while True:
493
609
  line = p.stdout.readline()
494
610
  if not line:
@@ -539,7 +655,8 @@ class PluginRemote:
539
655
  parent_conn, child_conn = multiprocessing.Pipe()
540
656
  pluginFork = PluginFork()
541
657
  print('new fork')
542
- pluginFork.worker = multiprocessing.Process(target=plugin_fork, args=(child_conn,), daemon=True)
658
+ pluginFork.worker = multiprocessing.Process(
659
+ target=plugin_fork, args=(child_conn,), daemon=True)
543
660
  pluginFork.worker.start()
544
661
 
545
662
  def schedule_exit_check():
@@ -553,7 +670,8 @@ class PluginRemote:
553
670
  schedule_exit_check()
554
671
 
555
672
  async def getFork():
556
- rpcTransport = rpc_reader.RpcConnectionTransport(parent_conn)
673
+ rpcTransport = rpc_reader.RpcConnectionTransport(
674
+ parent_conn)
557
675
  forkPeer, readLoop = await rpc_reader.prepare_peer_readloop(self.loop, rpcTransport)
558
676
  forkPeer.peerName = 'thread'
559
677
 
@@ -573,7 +691,8 @@ class PluginRemote:
573
691
  parent_conn.close()
574
692
  rpcTransport.executor.shutdown()
575
693
  pluginFork.worker.kill()
576
- asyncio.run_coroutine_threadsafe(forkReadLoop(), loop=self.loop)
694
+ asyncio.run_coroutine_threadsafe(
695
+ forkReadLoop(), loop=self.loop)
577
696
  getRemote = await forkPeer.getParam('getRemote')
578
697
  remote: PluginRemote = await getRemote(self.api, self.pluginId, self.hostInfo)
579
698
  await remote.setSystemState(self.systemManager.getSystemState())
@@ -688,16 +807,19 @@ class PluginRemote:
688
807
 
689
808
  stats_runner()
690
809
 
810
+
691
811
  async def plugin_async_main(loop: AbstractEventLoop, rpcTransport: rpc_reader.RpcTransport):
692
812
  peer, readLoop = await rpc_reader.prepare_peer_readloop(loop, rpcTransport)
693
813
  peer.params['print'] = print
694
- peer.params['getRemote'] = lambda api, pluginId, hostInfo: PluginRemote(peer, api, pluginId, hostInfo, loop)
814
+ peer.params['getRemote'] = lambda api, pluginId, hostInfo: PluginRemote(
815
+ peer, api, pluginId, hostInfo, loop)
695
816
 
696
817
  try:
697
818
  await readLoop()
698
819
  finally:
699
820
  os._exit(0)
700
821
 
822
+
701
823
  def main(rpcTransport: rpc_reader.RpcTransport):
702
824
  loop = asyncio.new_event_loop()
703
825
 
@@ -709,6 +831,7 @@ def main(rpcTransport: rpc_reader.RpcTransport):
709
831
  loop.run_until_complete(plugin_async_main(loop, rpcTransport))
710
832
  loop.close()
711
833
 
834
+
712
835
  def plugin_main(rpcTransport: rpc_reader.RpcTransport):
713
836
  # gi import will fail on windows (and posisbly elsewhere)
714
837
  # if it does, try starting without it.
@@ -723,7 +846,8 @@ def plugin_main(rpcTransport: rpc_reader.RpcTransport):
723
846
  # seems optional on other platforms.
724
847
  loop = GLib.MainLoop()
725
848
 
726
- worker = threading.Thread(target=main, args=(rpcTransport,), name="asyncio-main")
849
+ worker = threading.Thread(target=main, args=(
850
+ rpcTransport,), name="asyncio-main")
727
851
  worker.start()
728
852
 
729
853
  loop.run()
@@ -731,12 +855,13 @@ def plugin_main(rpcTransport: rpc_reader.RpcTransport):
731
855
  except:
732
856
  pass
733
857
 
734
- # reattempt without gi outside of the exception handler in case the plugin fails.
858
+ # reattempt without gi outside of the exception handler in case the plugin fails.
735
859
  main(rpcTransport)
736
860
 
737
861
 
738
862
  def plugin_fork(conn: multiprocessing.connection.Connection):
739
863
  plugin_main(rpc_reader.RpcConnectionTransport(conn))
740
864
 
865
+
741
866
  if __name__ == "__main__":
742
867
  plugin_main(rpc_reader.RpcFileTransport(3, 4))
@@ -178,14 +178,19 @@ export class SystemManagerImpl implements SystemManager {
178
178
  getDeviceById(idOrPluginId: string, nativeId?: ScryptedNativeId): any {
179
179
  let id: string;
180
180
  if (this.state[idOrPluginId]) {
181
+ // don't allow invalid input on nativeId, must be nullish if there is an exact id match.
182
+ if (nativeId != null)
183
+ return;
181
184
  id = idOrPluginId;
182
185
  }
183
186
  else {
184
187
  for (const check of Object.keys(this.state)) {
185
188
  const state = this.state[check];
186
- if (state[ScryptedInterfaceProperty.pluginId].value === idOrPluginId) {
189
+ if (!state)
190
+ continue;
191
+ if (state[ScryptedInterfaceProperty.pluginId]?.value === idOrPluginId) {
187
192
  // null and undefined should match here.
188
- if (nativeId == state[ScryptedInterfaceProperty.nativeId]?.value) {
193
+ if (state[ScryptedInterfaceProperty.nativeId]?.value == nativeId) {
189
194
  id = check;
190
195
  break;
191
196
  }