@scrypted/server 0.7.93 → 0.7.95

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.

Files changed (185) hide show
  1. package/dist/asynciterable-utils.d.ts +2 -0
  2. package/dist/asynciterable-utils.js +24 -0
  3. package/dist/asynciterable-utils.js.map +1 -0
  4. package/dist/cert.d.ts +6 -0
  5. package/dist/cert.js +75 -0
  6. package/dist/cert.js.map +1 -0
  7. package/dist/collection.d.ts +1 -0
  8. package/dist/collection.js +16 -0
  9. package/dist/collection.js.map +1 -0
  10. package/dist/db-types.d.ts +38 -0
  11. package/dist/db-types.js +45 -0
  12. package/dist/db-types.js.map +1 -0
  13. package/dist/event-registry.d.ts +19 -0
  14. package/dist/event-registry.js +92 -0
  15. package/dist/event-registry.js.map +1 -0
  16. package/dist/http-interfaces.d.ts +3 -0
  17. package/dist/http-interfaces.js +73 -0
  18. package/dist/http-interfaces.js.map +1 -0
  19. package/dist/infer-defaults.d.ts +11 -0
  20. package/dist/infer-defaults.js +119 -0
  21. package/dist/infer-defaults.js.map +1 -0
  22. package/dist/io.d.ts +22 -0
  23. package/dist/io.js +3 -0
  24. package/dist/io.js.map +1 -0
  25. package/dist/level.d.ts +110 -0
  26. package/dist/level.js +135 -0
  27. package/dist/level.js.map +1 -0
  28. package/dist/listen-zero.d.ts +13 -0
  29. package/dist/listen-zero.js +48 -0
  30. package/dist/listen-zero.js.map +1 -0
  31. package/dist/logger.d.ts +29 -0
  32. package/dist/logger.js +78 -0
  33. package/dist/logger.js.map +1 -0
  34. package/dist/media-helpers.d.ts +5 -0
  35. package/dist/media-helpers.js +89 -0
  36. package/dist/media-helpers.js.map +1 -0
  37. package/dist/mixin/mixin-cycle.d.ts +3 -0
  38. package/dist/mixin/mixin-cycle.js +32 -0
  39. package/dist/mixin/mixin-cycle.js.map +1 -0
  40. package/dist/plugin/acl.d.ts +16 -0
  41. package/dist/plugin/acl.js +83 -0
  42. package/dist/plugin/acl.js.map +1 -0
  43. package/dist/plugin/descriptor.d.ts +22 -0
  44. package/dist/plugin/descriptor.js +35 -0
  45. package/dist/plugin/descriptor.js.map +1 -0
  46. package/dist/plugin/media.d.ts +71 -0
  47. package/dist/plugin/media.js +420 -0
  48. package/dist/plugin/media.js.map +1 -0
  49. package/dist/plugin/mediaobject.d.ts +10 -0
  50. package/dist/plugin/mediaobject.js +26 -0
  51. package/dist/plugin/mediaobject.js.map +1 -0
  52. package/dist/plugin/plugin-api.d.ts +106 -0
  53. package/dist/plugin/plugin-api.js +120 -0
  54. package/dist/plugin/plugin-api.js.map +1 -0
  55. package/dist/plugin/plugin-console.d.ts +28 -0
  56. package/dist/plugin/plugin-console.js +291 -0
  57. package/dist/plugin/plugin-console.js.map +1 -0
  58. package/dist/plugin/plugin-debug.d.ts +4 -0
  59. package/dist/plugin/plugin-debug.js +3 -0
  60. package/dist/plugin/plugin-debug.js.map +1 -0
  61. package/dist/plugin/plugin-device.d.ts +54 -0
  62. package/dist/plugin/plugin-device.js +413 -0
  63. package/dist/plugin/plugin-device.js.map +1 -0
  64. package/dist/plugin/plugin-error.d.ts +2 -0
  65. package/dist/plugin/plugin-error.js +7 -0
  66. package/dist/plugin/plugin-error.js.map +1 -0
  67. package/dist/plugin/plugin-host-api.d.ts +43 -0
  68. package/dist/plugin/plugin-host-api.js +179 -0
  69. package/dist/plugin/plugin-host-api.js.map +1 -0
  70. package/dist/plugin/plugin-host.d.ts +45 -0
  71. package/dist/plugin/plugin-host.js +398 -0
  72. package/dist/plugin/plugin-host.js.map +1 -0
  73. package/dist/plugin/plugin-http.d.ts +18 -0
  74. package/dist/plugin/plugin-http.js +120 -0
  75. package/dist/plugin/plugin-http.js.map +1 -0
  76. package/dist/plugin/plugin-lazy-remote.d.ts +31 -0
  77. package/dist/plugin/plugin-lazy-remote.js +75 -0
  78. package/dist/plugin/plugin-lazy-remote.js.map +1 -0
  79. package/dist/plugin/plugin-npm-dependencies.d.ts +8 -0
  80. package/dist/plugin/plugin-npm-dependencies.js +103 -0
  81. package/dist/plugin/plugin-npm-dependencies.js.map +1 -0
  82. package/dist/plugin/plugin-remote-stats.d.ts +8 -0
  83. package/dist/plugin/plugin-remote-stats.js +30 -0
  84. package/dist/plugin/plugin-remote-stats.js.map +1 -0
  85. package/dist/plugin/plugin-remote-websocket.d.ts +29 -0
  86. package/dist/plugin/plugin-remote-websocket.js +152 -0
  87. package/dist/plugin/plugin-remote-websocket.js.map +1 -0
  88. package/dist/plugin/plugin-remote-worker.d.ts +5 -0
  89. package/dist/plugin/plugin-remote-worker.js +348 -0
  90. package/dist/plugin/plugin-remote-worker.js.map +1 -0
  91. package/dist/plugin/plugin-remote.d.ts +75 -0
  92. package/dist/plugin/plugin-remote.js +598 -0
  93. package/dist/plugin/plugin-remote.js.map +1 -0
  94. package/dist/plugin/plugin-repl.d.ts +2 -0
  95. package/dist/plugin/plugin-repl.js +74 -0
  96. package/dist/plugin/plugin-repl.js.map +1 -0
  97. package/dist/plugin/plugin-state-check.d.ts +1 -0
  98. package/dist/plugin/plugin-state-check.js +27 -0
  99. package/dist/plugin/plugin-state-check.js.map +1 -0
  100. package/dist/plugin/plugin-volume.d.ts +3 -0
  101. package/dist/plugin/plugin-volume.js +31 -0
  102. package/dist/plugin/plugin-volume.js.map +1 -0
  103. package/dist/plugin/runtime/child-process-worker.d.ts +20 -0
  104. package/dist/plugin/runtime/child-process-worker.js +42 -0
  105. package/dist/plugin/runtime/child-process-worker.js.map +1 -0
  106. package/dist/plugin/runtime/node-fork-worker.d.ts +9 -0
  107. package/dist/plugin/runtime/node-fork-worker.js +67 -0
  108. package/dist/plugin/runtime/node-fork-worker.js.map +1 -0
  109. package/dist/plugin/runtime/node-thread-worker.d.ts +20 -0
  110. package/dist/plugin/runtime/node-thread-worker.js +73 -0
  111. package/dist/plugin/runtime/node-thread-worker.js.map +1 -0
  112. package/dist/plugin/runtime/python-worker.d.ts +10 -0
  113. package/dist/plugin/runtime/python-worker.js +91 -0
  114. package/dist/plugin/runtime/python-worker.js.map +1 -0
  115. package/dist/plugin/runtime/runtime-worker.d.ts +26 -0
  116. package/dist/plugin/runtime/runtime-worker.js +3 -0
  117. package/dist/plugin/runtime/runtime-worker.js.map +1 -0
  118. package/dist/plugin/socket-serializer.d.ts +5 -0
  119. package/dist/plugin/socket-serializer.js +17 -0
  120. package/dist/plugin/socket-serializer.js.map +1 -0
  121. package/dist/plugin/system.d.ts +39 -0
  122. package/dist/plugin/system.js +216 -0
  123. package/dist/plugin/system.js.map +1 -0
  124. package/dist/rpc-buffer-serializer.d.ts +11 -0
  125. package/dist/rpc-buffer-serializer.js +30 -0
  126. package/dist/rpc-buffer-serializer.js.map +1 -0
  127. package/dist/rpc-serializer.d.ts +24 -0
  128. package/dist/rpc-serializer.js +144 -0
  129. package/dist/rpc-serializer.js.map +1 -0
  130. package/dist/rpc.d.ts +147 -0
  131. package/dist/rpc.js +689 -0
  132. package/dist/rpc.js.map +1 -0
  133. package/dist/runtime.d.ts +103 -0
  134. package/dist/runtime.js +815 -0
  135. package/dist/runtime.js.map +1 -0
  136. package/dist/scrypted-main-exports.d.ts +6 -0
  137. package/dist/scrypted-main-exports.js +57 -0
  138. package/dist/scrypted-main-exports.js.map +1 -0
  139. package/dist/scrypted-main.d.ts +1 -0
  140. package/dist/scrypted-main.js +8 -0
  141. package/dist/scrypted-main.js.map +1 -0
  142. package/dist/scrypted-plugin-main.d.ts +2 -0
  143. package/dist/scrypted-plugin-main.js +43 -0
  144. package/dist/scrypted-plugin-main.js.map +1 -0
  145. package/dist/scrypted-server-main.d.ts +6 -0
  146. package/dist/scrypted-server-main.js +559 -0
  147. package/dist/scrypted-server-main.js.map +1 -0
  148. package/dist/server-settings.d.ts +5 -0
  149. package/dist/server-settings.js +91 -0
  150. package/dist/server-settings.js.map +1 -0
  151. package/dist/services/addresses.d.ts +7 -0
  152. package/dist/services/addresses.js +43 -0
  153. package/dist/services/addresses.js.map +1 -0
  154. package/dist/services/alerts.d.ts +9 -0
  155. package/dist/services/alerts.js +27 -0
  156. package/dist/services/alerts.js.map +1 -0
  157. package/dist/services/cors.d.ts +18 -0
  158. package/dist/services/cors.js +18 -0
  159. package/dist/services/cors.js.map +1 -0
  160. package/dist/services/info.d.ts +5 -0
  161. package/dist/services/info.js +18 -0
  162. package/dist/services/info.js.map +1 -0
  163. package/dist/services/plugin.d.ts +46 -0
  164. package/dist/services/plugin.js +172 -0
  165. package/dist/services/plugin.js.map +1 -0
  166. package/dist/services/service-control.d.ts +8 -0
  167. package/dist/services/service-control.js +39 -0
  168. package/dist/services/service-control.js.map +1 -0
  169. package/dist/services/users.d.ts +19 -0
  170. package/dist/services/users.js +75 -0
  171. package/dist/services/users.js.map +1 -0
  172. package/dist/sleep.d.ts +1 -0
  173. package/dist/sleep.js +8 -0
  174. package/dist/sleep.js.map +1 -0
  175. package/dist/state.d.ts +39 -0
  176. package/dist/state.js +247 -0
  177. package/dist/state.js.map +1 -0
  178. package/dist/threading.d.ts +3 -0
  179. package/dist/threading.js +93 -0
  180. package/dist/threading.js.map +1 -0
  181. package/dist/usertoken.d.ts +11 -0
  182. package/dist/usertoken.js +52 -0
  183. package/dist/usertoken.js.map +1 -0
  184. package/package.json +2 -2
  185. package/src/plugin/plugin-host-api.ts +3 -1
@@ -0,0 +1,2 @@
1
+ export declare function asyncFilter<T>(asyncIterable: AsyncIterable<T>, predicate: (t: T) => Promise<boolean>): AsyncIterable<T>;
2
+ export declare function asyncFind<T>(asyncIterable: AsyncIterable<T>, predicate: (t: T) => Promise<boolean>): Promise<T>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.asyncFind = exports.asyncFilter = void 0;
4
+ function asyncFilter(asyncIterable, predicate) {
5
+ return {
6
+ async *[Symbol.asyncIterator]() {
7
+ for await (const value of asyncIterable) {
8
+ if (await predicate(value)) {
9
+ yield value;
10
+ }
11
+ }
12
+ }
13
+ };
14
+ }
15
+ exports.asyncFilter = asyncFilter;
16
+ async function asyncFind(asyncIterable, predicate) {
17
+ for await (const value of asyncIterable) {
18
+ if (await predicate(value)) {
19
+ return value;
20
+ }
21
+ }
22
+ }
23
+ exports.asyncFind = asyncFind;
24
+ //# sourceMappingURL=asynciterable-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asynciterable-utils.js","sourceRoot":"","sources":["../src/asynciterable-utils.ts"],"names":[],"mappings":";;;AAAA,SAAgB,WAAW,CAAI,aAA+B,EAAE,SAAqC;IACjG,OAAO;QACH,KAAK,CAAA,CAAE,CAAC,MAAM,CAAC,aAAa,CAAC;YACzB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,aAAa,EAAE;gBACrC,IAAI,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE;oBACxB,MAAM,KAAK,CAAC;iBACf;aACJ;QACL,CAAC;KACJ,CAAA;AACL,CAAC;AAVD,kCAUC;AAEM,KAAK,UAAU,SAAS,CAAI,aAA+B,EAAE,SAAqC;IACrG,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,aAAa,EAAE;QACrC,IAAI,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC;SAChB;KACJ;AACL,CAAC;AAND,8BAMC"}
package/dist/cert.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare const CURRENT_SELF_SIGNED_CERTIFICATE_VERSION = "v2";
2
+ export declare function createSelfSignedCertificate(): {
3
+ serviceKey: string;
4
+ certificate: string;
5
+ version: string;
6
+ };
package/dist/cert.js ADDED
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createSelfSignedCertificate = exports.CURRENT_SELF_SIGNED_CERTIFICATE_VERSION = void 0;
7
+ // import libraries
8
+ const node_forge_1 = __importDefault(require("node-forge"));
9
+ const crypto_1 = __importDefault(require("crypto"));
10
+ const { pki } = node_forge_1.default;
11
+ exports.CURRENT_SELF_SIGNED_CERTIFICATE_VERSION = 'v2';
12
+ function createSelfSignedCertificate() {
13
+ // generate a keypair and create an X.509v3 certificate
14
+ const keys = pki.rsa.generateKeyPair(2048);
15
+ const cert = pki.createCertificate();
16
+ cert.publicKey = keys.publicKey;
17
+ // NOTE: serialNumber is the hex encoded value of an ASN.1 INTEGER.
18
+ // Conforming CAs should ensure serialNumber is:
19
+ // - no more than 20 octets
20
+ // - non-negative (prefix a '00' if your value starts with a '1' bit)
21
+ cert.serialNumber = '01' + crypto_1.default.randomBytes(19).toString("hex"); // 1 octet = 8 bits = 1 byte = 2 hex chars
22
+ cert.validity.notBefore = new Date();
23
+ cert.validity.notAfter = new Date();
24
+ cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1); // adding 1 year of validity from now
25
+ const attrs = [{
26
+ name: 'commonName',
27
+ value: 'localhost'
28
+ }];
29
+ cert.setSubject(attrs);
30
+ cert.setIssuer(attrs);
31
+ cert.setExtensions([{
32
+ name: 'basicConstraints',
33
+ cA: true
34
+ }, {
35
+ name: 'keyUsage',
36
+ keyCertSign: true,
37
+ digitalSignature: true,
38
+ nonRepudiation: true,
39
+ keyEncipherment: true,
40
+ dataEncipherment: true
41
+ }, {
42
+ name: 'extKeyUsage',
43
+ serverAuth: true,
44
+ clientAuth: true,
45
+ codeSigning: true,
46
+ emailProtection: true,
47
+ timeStamping: true
48
+ }, {
49
+ name: 'nsCertType',
50
+ client: true,
51
+ server: true,
52
+ email: true,
53
+ objsign: true,
54
+ sslCA: true,
55
+ emailCA: true,
56
+ objCA: true
57
+ }, {
58
+ name: 'subjectAltName',
59
+ altNames: [{
60
+ type: 7,
61
+ ip: '127.0.0.1'
62
+ }]
63
+ }, {
64
+ name: 'subjectKeyIdentifier'
65
+ }]);
66
+ // self-sign certificate
67
+ cert.sign(keys.privateKey);
68
+ return {
69
+ serviceKey: pki.privateKeyToPem(keys.privateKey),
70
+ certificate: pki.certificateToPem(cert),
71
+ version: exports.CURRENT_SELF_SIGNED_CERTIFICATE_VERSION,
72
+ };
73
+ }
74
+ exports.createSelfSignedCertificate = createSelfSignedCertificate;
75
+ //# sourceMappingURL=cert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cert.js","sourceRoot":"","sources":["../src/cert.ts"],"names":[],"mappings":";;;;;;AAAA,mBAAmB;AACnB,4DAA+B;AAC/B,oDAA4B;AAE5B,MAAM,EAAE,GAAG,EAAE,GAAG,oBAAK,CAAC;AAGT,QAAA,uCAAuC,GAAG,IAAI,CAAC;AAE5D,SAAgB,2BAA2B;IAEvC,uDAAuD;IACvD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC;IACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAEhC,mEAAmE;IACnE,gDAAgD;IAChD,2BAA2B;IAC3B,qEAAqE;IACrE,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,0CAA0C;IAC7G,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,qCAAqC;IACpH,MAAM,KAAK,GAAG,CAAC;YACX,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,WAAW;SACrB,CAAC,CAAC;IACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,CAAC,aAAa,CAAC,CAAC;YAChB,IAAI,EAAE,kBAAkB;YACxB,EAAE,EAAE,IAAI;SACX,EAAE;YACC,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,IAAI;YACpB,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,IAAI;SACzB,EAAE;YACC,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;SACrB,EAAE;YACC,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI;SACd,EAAE;YACC,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,CAAC;oBACP,IAAI,EAAE,CAAC;oBACP,EAAE,EAAE,WAAW;iBAClB,CAAC;SACL,EAAE;YACC,IAAI,EAAE,sBAAsB;SAC/B,CAAC,CAAC,CAAC;IAEJ,wBAAwB;IACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO;QACH,UAAU,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;QAChD,WAAW,EAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC;QACvC,OAAO,EAAE,+CAAuC;KACnD,CAAC;AACN,CAAC;AAhED,kEAgEC"}
@@ -0,0 +1 @@
1
+ export declare function hasSameElements<T>(a: T[], b: T[]): boolean;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasSameElements = void 0;
4
+ function hasSameElements(a, b) {
5
+ const s1 = new Set(a);
6
+ const s2 = new Set(b);
7
+ if (s1.size != s2.size)
8
+ return false;
9
+ for (const e of s1) {
10
+ if (!s2.has(e))
11
+ return false;
12
+ }
13
+ return true;
14
+ }
15
+ exports.hasSameElements = hasSameElements;
16
+ //# sourceMappingURL=collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":";;;AAAA,SAAgB,eAAe,CAAI,CAAM,EAAE,CAAM;IAC7C,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI;QAClB,OAAO,KAAK,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;QAChB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACV,OAAO,KAAK,CAAC;KACpB;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAXD,0CAWC"}
@@ -0,0 +1,38 @@
1
+ import { LevelDocument } from "./level";
2
+ import { ScryptedNativeId, SystemDeviceState } from "@scrypted/types";
3
+ export declare class ScryptedDocument implements LevelDocument {
4
+ _id?: string;
5
+ _documentType?: string;
6
+ }
7
+ export declare class Settings extends ScryptedDocument {
8
+ value?: any;
9
+ }
10
+ export declare class Plugin extends ScryptedDocument {
11
+ packageJson?: any;
12
+ zip?: string;
13
+ }
14
+ export declare class ScryptedUser extends ScryptedDocument {
15
+ passwordDate: number;
16
+ passwordHash: string;
17
+ token: string;
18
+ salt: string;
19
+ aclId: string;
20
+ }
21
+ export declare class ScryptedAlert extends ScryptedDocument {
22
+ timestamp: number;
23
+ title: string;
24
+ path: string;
25
+ message: string;
26
+ }
27
+ export declare class PluginDevice extends ScryptedDocument {
28
+ constructor(id?: string);
29
+ nativeId: ScryptedNativeId;
30
+ pluginId: string;
31
+ state: {
32
+ [property: string]: SystemDeviceState;
33
+ };
34
+ stateVersion: number;
35
+ storage: {
36
+ [key: string]: string;
37
+ };
38
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PluginDevice = exports.ScryptedAlert = exports.ScryptedUser = exports.Plugin = exports.Settings = exports.ScryptedDocument = void 0;
4
+ class ScryptedDocument {
5
+ _id;
6
+ _documentType;
7
+ }
8
+ exports.ScryptedDocument = ScryptedDocument;
9
+ class Settings extends ScryptedDocument {
10
+ value;
11
+ }
12
+ exports.Settings = Settings;
13
+ class Plugin extends ScryptedDocument {
14
+ packageJson;
15
+ zip;
16
+ }
17
+ exports.Plugin = Plugin;
18
+ class ScryptedUser extends ScryptedDocument {
19
+ passwordDate;
20
+ passwordHash;
21
+ token;
22
+ salt;
23
+ aclId;
24
+ }
25
+ exports.ScryptedUser = ScryptedUser;
26
+ class ScryptedAlert extends ScryptedDocument {
27
+ timestamp;
28
+ title;
29
+ path;
30
+ message;
31
+ }
32
+ exports.ScryptedAlert = ScryptedAlert;
33
+ class PluginDevice extends ScryptedDocument {
34
+ constructor(id) {
35
+ super();
36
+ this._id = id;
37
+ }
38
+ nativeId;
39
+ pluginId;
40
+ state;
41
+ stateVersion;
42
+ storage;
43
+ }
44
+ exports.PluginDevice = PluginDevice;
45
+ //# sourceMappingURL=db-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-types.js","sourceRoot":"","sources":["../src/db-types.ts"],"names":[],"mappings":";;;AAGA,MAAa,gBAAgB;IACzB,GAAG,CAAU;IACb,aAAa,CAAU;CAC1B;AAHD,4CAGC;AAED,MAAa,QAAS,SAAQ,gBAAgB;IAC1C,KAAK,CAAO;CACf;AAFD,4BAEC;AAED,MAAa,MAAO,SAAQ,gBAAgB;IACxC,WAAW,CAAO;IAClB,GAAG,CAAU;CAChB;AAHD,wBAGC;AAED,MAAa,YAAa,SAAQ,gBAAgB;IAC9C,YAAY,CAAS;IACrB,YAAY,CAAS;IACrB,KAAK,CAAS;IACd,IAAI,CAAS;IACb,KAAK,CAAS;CACjB;AAND,oCAMC;AAED,MAAa,aAAc,SAAQ,gBAAgB;IAC/C,SAAS,CAAS;IAClB,KAAK,CAAS;IACd,IAAI,CAAS;IACb,OAAO,CAAS;CACnB;AALD,sCAKC;AAED,MAAa,YAAa,SAAQ,gBAAgB;IAC9C,YAAY,EAAW;QACnB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IAClB,CAAC;IACD,QAAQ,CAAmB;IAC3B,QAAQ,CAAS;IACjB,KAAK,CAA4C;IACjD,YAAY,CAAS;IACrB,OAAO,CAA4B;CACtC;AAVD,oCAUC"}
@@ -0,0 +1,19 @@
1
+ import { EventDetails, EventListenerOptions, EventListenerRegister } from "@scrypted/types";
2
+ export declare class EventListenerRegisterImpl implements EventListenerRegister {
3
+ removeListener: () => void;
4
+ constructor(removeListener: () => void);
5
+ }
6
+ export declare function getMixinEventName(options: string | EventListenerOptions): string;
7
+ export declare class EventRegistry {
8
+ systemListeners: Set<(id: string, eventDetails: EventDetails, eventData: any) => void>;
9
+ listeners: {
10
+ [token: string]: Set<(eventDetails: EventDetails, eventData: any) => void>;
11
+ };
12
+ listen(callback: (id: string, eventDetails: EventDetails, eventData: any) => void): EventListenerRegister;
13
+ listenDevice(id: string, options: string | EventListenerOptions, callback: (eventDetails: EventDetails, eventData: any) => void): EventListenerRegister;
14
+ notify(id: string | undefined, eventTime: number, eventInterface: string, property: string | undefined, value: any, options?: {
15
+ changed?: boolean;
16
+ mixinId?: string;
17
+ }): boolean;
18
+ notifyEventDetails(id: string | undefined, eventDetails: EventDetails, value: any, eventInterface?: string): boolean;
19
+ }
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventRegistry = exports.getMixinEventName = exports.EventListenerRegisterImpl = void 0;
4
+ const types_1 = require("@scrypted/types");
5
+ class EventListenerRegisterImpl {
6
+ removeListener;
7
+ constructor(removeListener) {
8
+ this.removeListener = removeListener;
9
+ }
10
+ }
11
+ exports.EventListenerRegisterImpl = EventListenerRegisterImpl;
12
+ function getMixinEventName(options) {
13
+ let { event, mixinId } = (options || {});
14
+ if (!event && typeof options === 'string')
15
+ event = options;
16
+ if (!event)
17
+ event = undefined;
18
+ if (!mixinId)
19
+ return event;
20
+ let ret = `${event}-mixin-${mixinId}`;
21
+ return ret;
22
+ }
23
+ exports.getMixinEventName = getMixinEventName;
24
+ // todo: storage should only go to host plugin
25
+ const allowedEventInterfaces = new Set([types_1.ScryptedInterface.ScryptedDevice, 'Logger', 'Storage']);
26
+ class EventRegistry {
27
+ systemListeners = new Set();
28
+ listeners = {};
29
+ listen(callback) {
30
+ const events = this.systemListeners;
31
+ events.add(callback);
32
+ return new EventListenerRegisterImpl(() => {
33
+ events.delete(callback);
34
+ callback = undefined;
35
+ });
36
+ }
37
+ listenDevice(id, options, callback) {
38
+ let event = getMixinEventName(options);
39
+ const token = `${id}#${event}`;
40
+ let events = this.listeners[token];
41
+ if (!events) {
42
+ events = new Set();
43
+ this.listeners[token] = events;
44
+ }
45
+ events.add(callback);
46
+ return new EventListenerRegisterImpl(() => {
47
+ events.delete(callback);
48
+ callback = undefined;
49
+ });
50
+ }
51
+ notify(id, eventTime, eventInterface, property, value, options) {
52
+ const { changed, mixinId } = options || {};
53
+ // prevent property event noise
54
+ if (property && !changed)
55
+ return false;
56
+ const eventDetails = {
57
+ eventId: undefined,
58
+ eventInterface,
59
+ eventTime,
60
+ property,
61
+ mixinId,
62
+ };
63
+ return this.notifyEventDetails(id, eventDetails, value);
64
+ }
65
+ notifyEventDetails(id, eventDetails, value, eventInterface) {
66
+ eventDetails.eventId ||= Math.random().toString(36).substring(2);
67
+ eventInterface ||= eventDetails.eventInterface;
68
+ // system listeners only get state changes.
69
+ // there are many potentially noisy stateless events, like
70
+ // object detection and settings changes.
71
+ if ((eventDetails.property && !eventDetails.mixinId) || allowedEventInterfaces.has(eventInterface)) {
72
+ for (const event of this.systemListeners) {
73
+ event(id, eventDetails, value);
74
+ }
75
+ }
76
+ const events = this.listeners[`${id}#${eventInterface}`];
77
+ if (events) {
78
+ for (const event of events) {
79
+ event(eventDetails, value);
80
+ }
81
+ }
82
+ const allEvents = this.listeners[`${id}#${undefined}`];
83
+ if (allEvents) {
84
+ for (const event of allEvents) {
85
+ event(eventDetails, value);
86
+ }
87
+ }
88
+ return true;
89
+ }
90
+ }
91
+ exports.EventRegistry = EventRegistry;
92
+ //# sourceMappingURL=event-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-registry.js","sourceRoot":"","sources":["../src/event-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { HttpResponse } from "@scrypted/types";
2
+ import { Response } from "express";
3
+ export declare function createResponseInterface(res: Response, unzippedDir: string, filesPath: string): HttpResponse;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createResponseInterface = void 0;
7
+ const rpc_1 = require("./rpc");
8
+ const path_1 = require("path");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const mime = require('mime/lite');
11
+ function createResponseInterface(res, unzippedDir, filesPath) {
12
+ class HttpResponseImpl {
13
+ [rpc_1.RpcPeer.PROPERTY_PROXY_ONEWAY_METHODS] = [
14
+ 'send',
15
+ 'sendFile',
16
+ 'sendSocket',
17
+ ];
18
+ send(body, options) {
19
+ if (options?.code)
20
+ res.status(options.code);
21
+ if (options?.headers) {
22
+ for (const header of Object.keys(options.headers)) {
23
+ res.setHeader(header, options.headers[header]);
24
+ }
25
+ }
26
+ res.send(body);
27
+ }
28
+ sendFile(path, options) {
29
+ if (options?.code)
30
+ res.status(options.code);
31
+ if (options?.headers) {
32
+ for (const header of Object.keys(options.headers)) {
33
+ res.setHeader(header, options.headers[header]);
34
+ }
35
+ }
36
+ if (!res.getHeader('Content-Type')) {
37
+ const type = mime.getType(path);
38
+ if (type) {
39
+ res.contentType(mime.getExtension(type));
40
+ }
41
+ }
42
+ let filePath = (0, path_1.join)(unzippedDir, 'fs', path);
43
+ if (!fs_1.default.existsSync(filePath)) {
44
+ filePath = (0, path_1.join)(filesPath, path);
45
+ if (!fs_1.default.existsSync(filePath)) {
46
+ filePath = path;
47
+ if (!fs_1.default.existsSync(filePath)) {
48
+ res.status(404);
49
+ res.end();
50
+ return;
51
+ }
52
+ }
53
+ }
54
+ // prefer etag
55
+ res.sendFile(filePath, {
56
+ cacheControl: false,
57
+ });
58
+ }
59
+ sendSocket(socket, options) {
60
+ if (options?.code)
61
+ res.status(options.code);
62
+ if (options?.headers) {
63
+ for (const header of Object.keys(options.headers)) {
64
+ res.setHeader(header, options.headers[header]);
65
+ }
66
+ }
67
+ socket.pipe(res);
68
+ }
69
+ }
70
+ return new HttpResponseImpl();
71
+ }
72
+ exports.createResponseInterface = createResponseInterface;
73
+ //# sourceMappingURL=http-interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-interfaces.js","sourceRoot":"","sources":["../src/http-interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ScryptedDeviceType, ScryptedInterface } from "@scrypted/types";
2
+ import { PluginDevice } from "./db-types";
3
+ export declare function inferTypeFromInterfaces(interfaces: ScryptedInterface[]): ScryptedDeviceType;
4
+ export declare function inferTypesFromInterfaces(interfaces: ScryptedInterface[]): ScryptedDeviceType[];
5
+ export declare function getProvidedNameOrDefault(pluginDevice: PluginDevice): string;
6
+ export declare function getDisplayName(pluginDevice: PluginDevice): string;
7
+ export declare function getProvidedTypeOrDefault(pluginDevice: PluginDevice): ScryptedDeviceType;
8
+ export declare function getDisplayType(pluginDevice: PluginDevice): ScryptedDeviceType;
9
+ export declare function inferRoomFromName(name: string): string;
10
+ export declare function getProvidedRoomOrDefault(pluginDevice: PluginDevice): string;
11
+ export declare function getDisplayRoom(pluginDevice: PluginDevice): string;
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDisplayRoom = exports.getProvidedRoomOrDefault = exports.inferRoomFromName = exports.getDisplayType = exports.getProvidedTypeOrDefault = exports.getDisplayName = exports.getProvidedNameOrDefault = exports.inferTypesFromInterfaces = exports.inferTypeFromInterfaces = void 0;
4
+ const types_1 = require("@scrypted/types");
5
+ const state_1 = require("./state");
6
+ const inferenceTable = {};
7
+ function addType(iface, ...type) {
8
+ let entries = inferenceTable[iface];
9
+ if (!entries) {
10
+ entries = [];
11
+ inferenceTable[iface] = entries;
12
+ }
13
+ entries.push(...type);
14
+ }
15
+ addType(types_1.ScryptedInterface.MediaPlayer, types_1.ScryptedDeviceType.Display);
16
+ addType(types_1.ScryptedInterface.MediaPlayer, types_1.ScryptedDeviceType.Speaker);
17
+ addType(types_1.ScryptedInterface.ColorSettingHsv, types_1.ScryptedDeviceType.Light);
18
+ addType(types_1.ScryptedInterface.ColorSettingRgb, types_1.ScryptedDeviceType.Light);
19
+ addType(types_1.ScryptedInterface.ColorSettingTemperature, types_1.ScryptedDeviceType.Light);
20
+ addType(types_1.ScryptedInterface.VideoCamera, types_1.ScryptedDeviceType.Camera);
21
+ addType(types_1.ScryptedInterface.OnOff, types_1.ScryptedDeviceType.Light);
22
+ addType(types_1.ScryptedInterface.Brightness, types_1.ScryptedDeviceType.Light);
23
+ addType(types_1.ScryptedInterface.StartStop, types_1.ScryptedDeviceType.Vacuum);
24
+ addType(types_1.ScryptedInterface.Dock, types_1.ScryptedDeviceType.Vacuum);
25
+ addType(types_1.ScryptedInterface.Scene, types_1.ScryptedDeviceType.Scene);
26
+ addType(types_1.ScryptedInterface.TemperatureSetting, types_1.ScryptedDeviceType.Thermostat);
27
+ addType(types_1.ScryptedInterface.Lock, types_1.ScryptedDeviceType.Lock);
28
+ addType(types_1.ScryptedInterface.Entry, types_1.ScryptedDeviceType.Entry, types_1.ScryptedDeviceType.Garage);
29
+ addType(types_1.ScryptedInterface.Notifier, types_1.ScryptedDeviceType.Notifier, types_1.ScryptedDeviceType.Speaker, types_1.ScryptedDeviceType.Display);
30
+ addType(types_1.ScryptedInterface.PasswordStore, types_1.ScryptedDeviceType.PasswordControl);
31
+ addType(types_1.ScryptedInterface.BinarySensor, types_1.ScryptedDeviceType.Sensor);
32
+ addType(types_1.ScryptedInterface.HttpRequestHandler, types_1.ScryptedDeviceType.API);
33
+ addType(types_1.ScryptedInterface.HttpRequestHandler, types_1.ScryptedDeviceType.DataSource);
34
+ addType(types_1.ScryptedInterface.BufferConverter, types_1.ScryptedDeviceType.API);
35
+ addType(types_1.ScryptedInterface.DeviceProvider, types_1.ScryptedDeviceType.DeviceProvider);
36
+ function inferTypeFromInterfaces(interfaces) {
37
+ return inferTypesFromInterfaces(interfaces)[0];
38
+ }
39
+ exports.inferTypeFromInterfaces = inferTypeFromInterfaces;
40
+ function inferTypesFromInterfaces(interfaces) {
41
+ const types = Object.keys(inferenceTable).filter(iface => interfaces.includes(iface)).map(iface => inferenceTable[iface]).flat();
42
+ return types;
43
+ }
44
+ exports.inferTypesFromInterfaces = inferTypesFromInterfaces;
45
+ function getProvidedNameOrDefault(pluginDevice) {
46
+ const providedName = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.providedName);
47
+ if (providedName)
48
+ return providedName;
49
+ const type = getProvidedTypeOrDefault(pluginDevice);
50
+ return `New ${type}`;
51
+ }
52
+ exports.getProvidedNameOrDefault = getProvidedNameOrDefault;
53
+ function getDisplayName(pluginDevice) {
54
+ const name = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.name);
55
+ if (name)
56
+ return name;
57
+ return getProvidedNameOrDefault(pluginDevice);
58
+ }
59
+ exports.getDisplayName = getDisplayName;
60
+ function getProvidedTypeOrDefault(pluginDevice) {
61
+ const providedType = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.providedType);
62
+ if (providedType)
63
+ return providedType;
64
+ const type = inferTypeFromInterfaces((0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.interfaces) || []) || types_1.ScryptedDeviceType.Unknown;
65
+ return type;
66
+ }
67
+ exports.getProvidedTypeOrDefault = getProvidedTypeOrDefault;
68
+ function getDisplayType(pluginDevice) {
69
+ const type = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.type);
70
+ if (type)
71
+ return type;
72
+ return getProvidedTypeOrDefault(pluginDevice);
73
+ }
74
+ exports.getDisplayType = getDisplayType;
75
+ const roomHints = {
76
+ 'Exterior': 'Exterior',
77
+ 'Backyard': 'Exterior',
78
+ 'Front Yard': 'Exterior',
79
+ 'Back Yard': 'Exterior',
80
+ 'Basement': 'Basement',
81
+ 'Den': 'Den',
82
+ 'Dining': 'Dining Room',
83
+ 'Entry': 'Entryway',
84
+ 'Family': 'Family Room',
85
+ 'Gym': 'Gym',
86
+ 'Garage': 'Garage',
87
+ 'Guest': 'Guest Bedroom',
88
+ 'Kitchen': 'Kitchen',
89
+ 'Living': 'Living Room',
90
+ 'Master': 'Master Bedroom',
91
+ 'Office': 'Office',
92
+ 'Powder': 'Powder Room',
93
+ 'Laundry': 'Laundry Room',
94
+ };
95
+ function inferRoomFromName(name) {
96
+ if (!name)
97
+ return;
98
+ for (const hint of Object.keys(roomHints)) {
99
+ if (name.includes(hint))
100
+ return roomHints[hint];
101
+ }
102
+ }
103
+ exports.inferRoomFromName = inferRoomFromName;
104
+ function getProvidedRoomOrDefault(pluginDevice) {
105
+ const providedRoom = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.providedRoom);
106
+ if (providedRoom)
107
+ return providedRoom;
108
+ const room = inferRoomFromName(getDisplayName(pluginDevice));
109
+ return room;
110
+ }
111
+ exports.getProvidedRoomOrDefault = getProvidedRoomOrDefault;
112
+ function getDisplayRoom(pluginDevice) {
113
+ const room = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.room);
114
+ if (room)
115
+ return room;
116
+ return getProvidedRoomOrDefault(pluginDevice);
117
+ }
118
+ exports.getDisplayRoom = getDisplayRoom;
119
+ //# sourceMappingURL=infer-defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer-defaults.js","sourceRoot":"","sources":["../src/infer-defaults.ts"],"names":[],"mappings":"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"}
package/dist/io.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ /// <reference types="node" />
2
+ import type { Server, Socket as ServerSocket } from "engine.io";
3
+ export type IOServer = {
4
+ on(ev: 'connection' | 'drain', fn: (socket: IOServerSocket & IOServerSocket) => void): IOServer;
5
+ } & Server;
6
+ export type IOServerSocket = ServerSocket & IOSocket;
7
+ export interface IOSocket {
8
+ send(data: any, options?: any, callback?: any): this;
9
+ on(ev: "close", fn: (reason: string, description?: Error) => void): this;
10
+ /**
11
+ * Fired when the client sends a message.
12
+ */
13
+ on(ev: "message", fn: (data: string | Buffer) => void): this;
14
+ /**
15
+ * Fired when an error occurs.
16
+ */
17
+ on(ev: "error", fn: (err: Error) => void): this;
18
+ /**
19
+ * Called when the write buffer is drained
20
+ */
21
+ on(ev: "drain", fn: () => void): this;
22
+ }
package/dist/io.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=io.js.map
package/dist/io.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":""}