@scrypted/server 0.7.92 → 0.7.93

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 (184) hide show
  1. package/package.json +1 -1
  2. package/dist/asynciterable-utils.d.ts +0 -2
  3. package/dist/asynciterable-utils.js +0 -24
  4. package/dist/asynciterable-utils.js.map +0 -1
  5. package/dist/cert.d.ts +0 -6
  6. package/dist/cert.js +0 -75
  7. package/dist/cert.js.map +0 -1
  8. package/dist/collection.d.ts +0 -1
  9. package/dist/collection.js +0 -16
  10. package/dist/collection.js.map +0 -1
  11. package/dist/db-types.d.ts +0 -38
  12. package/dist/db-types.js +0 -45
  13. package/dist/db-types.js.map +0 -1
  14. package/dist/event-registry.d.ts +0 -19
  15. package/dist/event-registry.js +0 -92
  16. package/dist/event-registry.js.map +0 -1
  17. package/dist/http-interfaces.d.ts +0 -3
  18. package/dist/http-interfaces.js +0 -73
  19. package/dist/http-interfaces.js.map +0 -1
  20. package/dist/infer-defaults.d.ts +0 -11
  21. package/dist/infer-defaults.js +0 -119
  22. package/dist/infer-defaults.js.map +0 -1
  23. package/dist/io.d.ts +0 -22
  24. package/dist/io.js +0 -3
  25. package/dist/io.js.map +0 -1
  26. package/dist/level.d.ts +0 -110
  27. package/dist/level.js +0 -135
  28. package/dist/level.js.map +0 -1
  29. package/dist/listen-zero.d.ts +0 -13
  30. package/dist/listen-zero.js +0 -48
  31. package/dist/listen-zero.js.map +0 -1
  32. package/dist/logger.d.ts +0 -29
  33. package/dist/logger.js +0 -78
  34. package/dist/logger.js.map +0 -1
  35. package/dist/media-helpers.d.ts +0 -5
  36. package/dist/media-helpers.js +0 -89
  37. package/dist/media-helpers.js.map +0 -1
  38. package/dist/mixin/mixin-cycle.d.ts +0 -3
  39. package/dist/mixin/mixin-cycle.js +0 -32
  40. package/dist/mixin/mixin-cycle.js.map +0 -1
  41. package/dist/plugin/acl.d.ts +0 -16
  42. package/dist/plugin/acl.js +0 -83
  43. package/dist/plugin/acl.js.map +0 -1
  44. package/dist/plugin/descriptor.d.ts +0 -22
  45. package/dist/plugin/descriptor.js +0 -35
  46. package/dist/plugin/descriptor.js.map +0 -1
  47. package/dist/plugin/media.d.ts +0 -71
  48. package/dist/plugin/media.js +0 -420
  49. package/dist/plugin/media.js.map +0 -1
  50. package/dist/plugin/mediaobject.d.ts +0 -10
  51. package/dist/plugin/mediaobject.js +0 -26
  52. package/dist/plugin/mediaobject.js.map +0 -1
  53. package/dist/plugin/plugin-api.d.ts +0 -106
  54. package/dist/plugin/plugin-api.js +0 -120
  55. package/dist/plugin/plugin-api.js.map +0 -1
  56. package/dist/plugin/plugin-console.d.ts +0 -28
  57. package/dist/plugin/plugin-console.js +0 -291
  58. package/dist/plugin/plugin-console.js.map +0 -1
  59. package/dist/plugin/plugin-debug.d.ts +0 -4
  60. package/dist/plugin/plugin-debug.js +0 -3
  61. package/dist/plugin/plugin-debug.js.map +0 -1
  62. package/dist/plugin/plugin-device.d.ts +0 -54
  63. package/dist/plugin/plugin-device.js +0 -413
  64. package/dist/plugin/plugin-device.js.map +0 -1
  65. package/dist/plugin/plugin-error.d.ts +0 -2
  66. package/dist/plugin/plugin-error.js +0 -7
  67. package/dist/plugin/plugin-error.js.map +0 -1
  68. package/dist/plugin/plugin-host-api.d.ts +0 -43
  69. package/dist/plugin/plugin-host-api.js +0 -177
  70. package/dist/plugin/plugin-host-api.js.map +0 -1
  71. package/dist/plugin/plugin-host.d.ts +0 -45
  72. package/dist/plugin/plugin-host.js +0 -398
  73. package/dist/plugin/plugin-host.js.map +0 -1
  74. package/dist/plugin/plugin-http.d.ts +0 -18
  75. package/dist/plugin/plugin-http.js +0 -120
  76. package/dist/plugin/plugin-http.js.map +0 -1
  77. package/dist/plugin/plugin-lazy-remote.d.ts +0 -31
  78. package/dist/plugin/plugin-lazy-remote.js +0 -75
  79. package/dist/plugin/plugin-lazy-remote.js.map +0 -1
  80. package/dist/plugin/plugin-npm-dependencies.d.ts +0 -8
  81. package/dist/plugin/plugin-npm-dependencies.js +0 -103
  82. package/dist/plugin/plugin-npm-dependencies.js.map +0 -1
  83. package/dist/plugin/plugin-remote-stats.d.ts +0 -8
  84. package/dist/plugin/plugin-remote-stats.js +0 -30
  85. package/dist/plugin/plugin-remote-stats.js.map +0 -1
  86. package/dist/plugin/plugin-remote-websocket.d.ts +0 -29
  87. package/dist/plugin/plugin-remote-websocket.js +0 -152
  88. package/dist/plugin/plugin-remote-websocket.js.map +0 -1
  89. package/dist/plugin/plugin-remote-worker.d.ts +0 -5
  90. package/dist/plugin/plugin-remote-worker.js +0 -348
  91. package/dist/plugin/plugin-remote-worker.js.map +0 -1
  92. package/dist/plugin/plugin-remote.d.ts +0 -75
  93. package/dist/plugin/plugin-remote.js +0 -598
  94. package/dist/plugin/plugin-remote.js.map +0 -1
  95. package/dist/plugin/plugin-repl.d.ts +0 -2
  96. package/dist/plugin/plugin-repl.js +0 -74
  97. package/dist/plugin/plugin-repl.js.map +0 -1
  98. package/dist/plugin/plugin-state-check.d.ts +0 -1
  99. package/dist/plugin/plugin-state-check.js +0 -27
  100. package/dist/plugin/plugin-state-check.js.map +0 -1
  101. package/dist/plugin/plugin-volume.d.ts +0 -3
  102. package/dist/plugin/plugin-volume.js +0 -31
  103. package/dist/plugin/plugin-volume.js.map +0 -1
  104. package/dist/plugin/runtime/child-process-worker.d.ts +0 -20
  105. package/dist/plugin/runtime/child-process-worker.js +0 -42
  106. package/dist/plugin/runtime/child-process-worker.js.map +0 -1
  107. package/dist/plugin/runtime/node-fork-worker.d.ts +0 -9
  108. package/dist/plugin/runtime/node-fork-worker.js +0 -67
  109. package/dist/plugin/runtime/node-fork-worker.js.map +0 -1
  110. package/dist/plugin/runtime/node-thread-worker.d.ts +0 -20
  111. package/dist/plugin/runtime/node-thread-worker.js +0 -73
  112. package/dist/plugin/runtime/node-thread-worker.js.map +0 -1
  113. package/dist/plugin/runtime/python-worker.d.ts +0 -10
  114. package/dist/plugin/runtime/python-worker.js +0 -91
  115. package/dist/plugin/runtime/python-worker.js.map +0 -1
  116. package/dist/plugin/runtime/runtime-worker.d.ts +0 -26
  117. package/dist/plugin/runtime/runtime-worker.js +0 -3
  118. package/dist/plugin/runtime/runtime-worker.js.map +0 -1
  119. package/dist/plugin/socket-serializer.d.ts +0 -5
  120. package/dist/plugin/socket-serializer.js +0 -17
  121. package/dist/plugin/socket-serializer.js.map +0 -1
  122. package/dist/plugin/system.d.ts +0 -39
  123. package/dist/plugin/system.js +0 -216
  124. package/dist/plugin/system.js.map +0 -1
  125. package/dist/rpc-buffer-serializer.d.ts +0 -11
  126. package/dist/rpc-buffer-serializer.js +0 -30
  127. package/dist/rpc-buffer-serializer.js.map +0 -1
  128. package/dist/rpc-serializer.d.ts +0 -24
  129. package/dist/rpc-serializer.js +0 -144
  130. package/dist/rpc-serializer.js.map +0 -1
  131. package/dist/rpc.d.ts +0 -147
  132. package/dist/rpc.js +0 -689
  133. package/dist/rpc.js.map +0 -1
  134. package/dist/runtime.d.ts +0 -103
  135. package/dist/runtime.js +0 -815
  136. package/dist/runtime.js.map +0 -1
  137. package/dist/scrypted-main-exports.d.ts +0 -6
  138. package/dist/scrypted-main-exports.js +0 -57
  139. package/dist/scrypted-main-exports.js.map +0 -1
  140. package/dist/scrypted-main.d.ts +0 -1
  141. package/dist/scrypted-main.js +0 -8
  142. package/dist/scrypted-main.js.map +0 -1
  143. package/dist/scrypted-plugin-main.d.ts +0 -2
  144. package/dist/scrypted-plugin-main.js +0 -43
  145. package/dist/scrypted-plugin-main.js.map +0 -1
  146. package/dist/scrypted-server-main.d.ts +0 -6
  147. package/dist/scrypted-server-main.js +0 -559
  148. package/dist/scrypted-server-main.js.map +0 -1
  149. package/dist/server-settings.d.ts +0 -5
  150. package/dist/server-settings.js +0 -91
  151. package/dist/server-settings.js.map +0 -1
  152. package/dist/services/addresses.d.ts +0 -7
  153. package/dist/services/addresses.js +0 -41
  154. package/dist/services/addresses.js.map +0 -1
  155. package/dist/services/alerts.d.ts +0 -9
  156. package/dist/services/alerts.js +0 -27
  157. package/dist/services/alerts.js.map +0 -1
  158. package/dist/services/cors.d.ts +0 -18
  159. package/dist/services/cors.js +0 -18
  160. package/dist/services/cors.js.map +0 -1
  161. package/dist/services/info.d.ts +0 -5
  162. package/dist/services/info.js +0 -18
  163. package/dist/services/info.js.map +0 -1
  164. package/dist/services/plugin.d.ts +0 -46
  165. package/dist/services/plugin.js +0 -172
  166. package/dist/services/plugin.js.map +0 -1
  167. package/dist/services/service-control.d.ts +0 -8
  168. package/dist/services/service-control.js +0 -39
  169. package/dist/services/service-control.js.map +0 -1
  170. package/dist/services/users.d.ts +0 -19
  171. package/dist/services/users.js +0 -75
  172. package/dist/services/users.js.map +0 -1
  173. package/dist/sleep.d.ts +0 -1
  174. package/dist/sleep.js +0 -8
  175. package/dist/sleep.js.map +0 -1
  176. package/dist/state.d.ts +0 -39
  177. package/dist/state.js +0 -247
  178. package/dist/state.js.map +0 -1
  179. package/dist/threading.d.ts +0 -3
  180. package/dist/threading.js +0 -93
  181. package/dist/threading.js.map +0 -1
  182. package/dist/usertoken.d.ts +0 -11
  183. package/dist/usertoken.js +0 -52
  184. package/dist/usertoken.js.map +0 -1
@@ -1,559 +0,0 @@
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
- const axios_1 = __importDefault(require("axios"));
7
- const body_parser_1 = __importDefault(require("body-parser"));
8
- const cookie_parser_1 = __importDefault(require("cookie-parser"));
9
- const crypto_1 = __importDefault(require("crypto"));
10
- const express_1 = __importDefault(require("express"));
11
- const fs_1 = __importDefault(require("fs"));
12
- const http_1 = __importDefault(require("http"));
13
- const http_auth_1 = __importDefault(require("http-auth"));
14
- const https_1 = __importDefault(require("https"));
15
- const mkdirp_1 = __importDefault(require("mkdirp"));
16
- const net_1 = __importDefault(require("net"));
17
- const os_1 = __importDefault(require("os"));
18
- const path_1 = __importDefault(require("path"));
19
- const process_1 = __importDefault(require("process"));
20
- const semver_1 = __importDefault(require("semver"));
21
- const source_map_support_1 = require("source-map-support");
22
- const cert_1 = require("./cert");
23
- const db_types_1 = require("./db-types");
24
- const level_1 = __importDefault(require("./level"));
25
- const plugin_error_1 = require("./plugin/plugin-error");
26
- const plugin_volume_1 = require("./plugin/plugin-volume");
27
- const rpc_1 = require("./rpc");
28
- const runtime_1 = require("./runtime");
29
- const server_settings_1 = require("./server-settings");
30
- const info_1 = require("./services/info");
31
- const users_1 = require("./services/users");
32
- const sleep_1 = require("./sleep");
33
- const usertoken_1 = require("./usertoken");
34
- if (!semver_1.default.gte(process_1.default.version, '16.0.0')) {
35
- throw new Error('"node" version out of date. Please update node to v16 or higher.');
36
- }
37
- process_1.default.on('unhandledRejection', error => {
38
- if (error?.constructor !== rpc_1.RPCResultError && error?.constructor !== plugin_error_1.PluginError) {
39
- console.error('pending crash', error);
40
- throw error;
41
- }
42
- console.warn('unhandled rejection of RPC Result', error);
43
- });
44
- function listenServerPort(env, port, server) {
45
- server.listen(port);
46
- server.on('error', (e) => {
47
- console.error(`Failed to listen on port ${port}. It may be in use.`);
48
- console.error(`Use the environment variable ${env} to change the port.`);
49
- throw e;
50
- });
51
- }
52
- (0, source_map_support_1.install)({
53
- environment: 'node',
54
- });
55
- let workerInspectPort = undefined;
56
- async function doconnect() {
57
- return new Promise((resolve, reject) => {
58
- const target = net_1.default.connect(workerInspectPort, '127.0.0.1');
59
- target.once('error', reject);
60
- target.once('connect', () => resolve(target));
61
- });
62
- }
63
- const debugServer = net_1.default.createServer(async (socket) => {
64
- if (!workerInspectPort) {
65
- socket.destroy();
66
- return;
67
- }
68
- for (let i = 0; i < 10; i++) {
69
- try {
70
- const target = await doconnect();
71
- socket.pipe(target).pipe(socket);
72
- const destroy = () => {
73
- socket.destroy();
74
- target.destroy();
75
- };
76
- socket.on('error', destroy);
77
- target.on('error', destroy);
78
- socket.on('close', destroy);
79
- target.on('close', destroy);
80
- return;
81
- }
82
- catch (e) {
83
- await (0, sleep_1.sleep)(500);
84
- }
85
- }
86
- console.warn('debugger connect timed out');
87
- socket.destroy();
88
- });
89
- listenServerPort('SCRYPTED_DEBUG_PORT', server_settings_1.SCRYPTED_DEBUG_PORT, debugServer);
90
- const app = (0, express_1.default)();
91
- app.set('trust proxy', 'loopback');
92
- // parse application/x-www-form-urlencoded
93
- app.use(body_parser_1.default.urlencoded({ extended: false }));
94
- // parse application/json
95
- app.use(body_parser_1.default.json());
96
- // parse some custom thing into a Buffer
97
- app.use(body_parser_1.default.raw({ type: 'application/zip', limit: 100000000 }));
98
- async function start(mainFilename, options) {
99
- const volumeDir = (0, plugin_volume_1.getScryptedVolume)();
100
- mkdirp_1.default.sync(volumeDir);
101
- const dbPath = path_1.default.join(volumeDir, 'scrypted.db');
102
- const db = (0, level_1.default)(dbPath);
103
- await db.open();
104
- let certSetting = await db.tryGet(db_types_1.Settings, 'certificate');
105
- if (certSetting?.value?.version !== cert_1.CURRENT_SELF_SIGNED_CERTIFICATE_VERSION) {
106
- const cert = (0, cert_1.createSelfSignedCertificate)();
107
- certSetting = new db_types_1.Settings();
108
- certSetting._id = 'certificate';
109
- certSetting.value = cert;
110
- certSetting = await db.upsert(certSetting);
111
- }
112
- const basicAuth = http_auth_1.default.basic({
113
- realm: 'Scrypted',
114
- }, async (username, password, callback) => {
115
- const user = await db.tryGet(db_types_1.ScryptedUser, username);
116
- // disallow basic auth for non-admin as it can deploy plugins, etc.
117
- if (!user || user.aclId) {
118
- callback(false);
119
- return;
120
- }
121
- const salted = user.salt + password;
122
- const hash = crypto_1.default.createHash('sha256');
123
- hash.update(salted);
124
- const sha = hash.digest().toString('hex');
125
- callback(sha === user.passwordHash || password === user.token);
126
- });
127
- const keys = certSetting.value;
128
- const httpsServerOptions = process_1.default.env.SCRYPTED_HTTPS_OPTIONS_FILE
129
- ? JSON.parse(fs_1.default.readFileSync(process_1.default.env.SCRYPTED_HTTPS_OPTIONS_FILE).toString())
130
- : {};
131
- const mergedHttpsServerOptions = Object.assign({
132
- key: keys.serviceKey,
133
- cert: keys.certificate
134
- }, httpsServerOptions);
135
- const secure = https_1.default.createServer(mergedHttpsServerOptions, app);
136
- const insecure = http_1.default.createServer(app);
137
- // use a hash of the private key as the cookie secret.
138
- app.use((0, cookie_parser_1.default)(crypto_1.default.createHash('sha256').update(certSetting.value.serviceKey).digest().toString('hex')));
139
- // trap to add access control headers.
140
- app.use((req, res, next) => {
141
- if (!req.headers.upgrade)
142
- scrypted.addAccessControlHeaders(req, res);
143
- next();
144
- });
145
- const authSalt = crypto_1.default.randomBytes(16);
146
- const createTokens = (userToken) => {
147
- const login_user_token = userToken.toString();
148
- const salted = login_user_token + authSalt;
149
- const hash = crypto_1.default.createHash('sha256');
150
- hash.update(salted);
151
- const sha = hash.digest().toString('hex');
152
- const queryToken = `${sha}#${login_user_token}`;
153
- return {
154
- authorization: `Bearer ${queryToken}`,
155
- // query token are the query parameters that must be added to an url for authorization.
156
- // useful for cross origin img tags.
157
- queryToken: {
158
- scryptedToken: queryToken,
159
- },
160
- };
161
- };
162
- app.use(async (req, res, next) => {
163
- if (process_1.default.env.SCRYPTED_DISABLE_AUTHENTICATION === 'true') {
164
- res.locals.username = 'anonymous';
165
- next();
166
- return;
167
- }
168
- // this is a trap for all auth.
169
- // only basic auth will fail with 401. it is up to the endpoints to manage
170
- // lack of login from cookie auth.
171
- const checkToken = (token) => {
172
- if (process_1.default.env.SCRYPTED_ADMIN_USERNAME && process_1.default.env.SCRYPTED_ADMIN_TOKEN === token) {
173
- res.locals.username = process_1.default.env.SCRYPTED_ADMIN_USERNAME;
174
- res.locals.aclId = undefined;
175
- return;
176
- }
177
- const [checkHash, ...tokenParts] = token.split('#');
178
- const tokenPart = tokenParts?.join('#');
179
- if (checkHash && tokenPart) {
180
- const salted = tokenPart + authSalt;
181
- const hash = crypto_1.default.createHash('sha256');
182
- hash.update(salted);
183
- const sha = hash.digest().toString('hex');
184
- if (checkHash === sha) {
185
- const userToken = checkValidUserToken(tokenPart);
186
- if (userToken) {
187
- res.locals.username = userToken.username;
188
- res.locals.aclId = userToken.aclId;
189
- }
190
- }
191
- }
192
- };
193
- const userToken = getSignedLoginUserToken(req);
194
- if (userToken) {
195
- const { username, aclId } = userToken;
196
- // this database lookup on every web request is not necessary, the cookie
197
- // itself is the auth, and is signed. furthermore, this is currently
198
- // a single user setup anywyas. revisit this at some point when
199
- // multiple users are implemented.
200
- // const user = await db.tryGet(ScryptedUser, username);
201
- // if (!user) {
202
- // console.warn('login not found');
203
- // return next();
204
- // }
205
- res.locals.username = username;
206
- res.locals.aclId = aclId;
207
- }
208
- else if (req.headers.authorization?.startsWith('Bearer ')) {
209
- checkToken(req.headers.authorization.substring('Bearer '.length));
210
- }
211
- else if (req.query['scryptedToken']) {
212
- checkToken(req.query.scryptedToken.toString());
213
- }
214
- next();
215
- });
216
- // allow basic auth to deploy plugins
217
- app.all('/web/component/*', (req, res, next) => {
218
- if (req.protocol === 'https' && req.headers.authorization && req.headers.authorization.toLowerCase()?.indexOf('basic') !== -1) {
219
- const basicChecker = basicAuth.check((req) => {
220
- res.locals.username = req.user;
221
- req.username = req.user;
222
- next();
223
- });
224
- // this automatically handles unauthorized.
225
- basicChecker(req, res);
226
- return;
227
- }
228
- next();
229
- });
230
- // verify all plugin related requests have some sort of auth
231
- app.all('/web/component/*', (req, res, next) => {
232
- if (!res.locals.username || res.locals.aclId) {
233
- res.status(401);
234
- res.send('Not Authorized');
235
- return;
236
- }
237
- next();
238
- });
239
- const scrypted = new runtime_1.ScryptedRuntime(mainFilename, db, insecure, secure, app);
240
- await options?.onRuntimeCreated?.(scrypted);
241
- await scrypted.start();
242
- listenServerPort('SCRYPTED_SECURE_PORT', server_settings_1.SCRYPTED_SECURE_PORT, secure);
243
- listenServerPort('SCRYPTED_INSECURE_PORT', server_settings_1.SCRYPTED_INSECURE_PORT, insecure);
244
- const legacyInsecure = http_1.default.createServer(app);
245
- legacyInsecure.listen(10080);
246
- legacyInsecure.on('error', () => {
247
- // can ignore.
248
- });
249
- console.log('#######################################################');
250
- console.log(`Scrypted Volume : ${volumeDir}`);
251
- console.log(`Scrypted Server (Local) : https://localhost:${server_settings_1.SCRYPTED_SECURE_PORT}/`);
252
- for (const address of (0, server_settings_1.getHostAddresses)(true, true)) {
253
- console.log(`Scrypted Server (Remote) : https://${address}:${server_settings_1.SCRYPTED_SECURE_PORT}/`);
254
- }
255
- console.log(`Version: : ${await new info_1.Info().getVersion()}`);
256
- console.log('#######################################################');
257
- console.log('Scrypted insecure http service port:', server_settings_1.SCRYPTED_INSECURE_PORT);
258
- console.log('Ports can be changed with environment variables.');
259
- console.log('https: $SCRYPTED_SECURE_PORT');
260
- console.log('http : $SCRYPTED_INSECURE_PORT');
261
- console.log('Certificate can be modified via tls.createSecureContext options in');
262
- console.log('JSON file located at SCRYPTED_HTTPS_OPTIONS_FILE environment variable:');
263
- console.log('export SCRYPTED_HTTPS_OPTIONS_FILE=/path/to/options.json');
264
- console.log('https://nodejs.org/api/tls.html#tlscreatesecurecontextoptions');
265
- console.log('#######################################################');
266
- app.get(['/web/component/script/npm/:pkg', '/web/component/script/npm/@:owner/:pkg'], async (req, res) => {
267
- const { owner, pkg } = req.params;
268
- let endpoint = pkg;
269
- if (owner)
270
- endpoint = `@${owner}/${endpoint}`;
271
- try {
272
- const response = await (0, axios_1.default)(`https://registry.npmjs.org/${endpoint}`);
273
- res.send(response.data);
274
- }
275
- catch (e) {
276
- res.status(500);
277
- res.end();
278
- }
279
- });
280
- app.post(['/web/component/script/install/:pkg', '/web/component/script/install/@:owner/:pkg', '/web/component/script/install/@:owner/:pkg/:tag'], async (req, res) => {
281
- const { owner, pkg, tag } = req.params;
282
- let endpoint = pkg;
283
- if (owner)
284
- endpoint = `@${owner}/${endpoint}`;
285
- try {
286
- const plugin = await scrypted.installNpm(endpoint, tag);
287
- res.send({
288
- id: scrypted.findPluginDevice(plugin.pluginId)._id,
289
- });
290
- }
291
- catch (e) {
292
- console.error('plugin installation failed', e);
293
- res.status(500);
294
- res.end();
295
- }
296
- });
297
- app.get('/web/component/script/search', async (req, res) => {
298
- try {
299
- const query = new URLSearchParams({
300
- text: req.query.text.toString(),
301
- });
302
- const response = await (0, axios_1.default)(`https://registry.npmjs.org/-/v1/search?${query}`);
303
- res.send(response.data);
304
- }
305
- catch (e) {
306
- res.status(500);
307
- res.end();
308
- }
309
- });
310
- app.post('/web/component/script/setup', async (req, res) => {
311
- const npmPackage = req.query.npmPackage;
312
- const plugin = await db.tryGet(db_types_1.Plugin, npmPackage) || new db_types_1.Plugin();
313
- plugin._id = npmPackage;
314
- plugin.packageJson = req.body;
315
- await db.upsert(plugin);
316
- res.send('ok');
317
- });
318
- app.post('/web/component/script/deploy', async (req, res) => {
319
- const npmPackage = req.query.npmPackage;
320
- const plugin = await db.tryGet(db_types_1.Plugin, npmPackage);
321
- if (!plugin) {
322
- res.status(500);
323
- res.send(`npm package ${npmPackage} not found`);
324
- return;
325
- }
326
- plugin.zip = req.body.toString('base64');
327
- await db.upsert(plugin);
328
- const noRebind = req.query['no-rebind'] !== undefined;
329
- if (!noRebind)
330
- await scrypted.installPlugin(plugin);
331
- res.send('ok');
332
- });
333
- app.post('/web/component/script/debug', async (req, res) => {
334
- const npmPackage = req.query.npmPackage;
335
- const plugin = await db.tryGet(db_types_1.Plugin, npmPackage);
336
- if (!plugin) {
337
- res.status(500);
338
- res.send(`npm package ${npmPackage} not found`);
339
- return;
340
- }
341
- const waitDebug = new Promise((resolve, reject) => {
342
- setTimeout(() => reject(new Error('timed out waiting for debug session')), 30000);
343
- debugServer.on('connection', resolve);
344
- });
345
- workerInspectPort = Math.round(Math.random() * 10000) + 30000;
346
- try {
347
- await scrypted.installPlugin(plugin, {
348
- waitDebug,
349
- inspectPort: workerInspectPort,
350
- });
351
- }
352
- catch (e) {
353
- res.status(500);
354
- res.send(e.toString());
355
- return;
356
- }
357
- res.send({
358
- workerInspectPort,
359
- });
360
- });
361
- const getLoginUserToken = (req) => {
362
- return req.secure ? 'login_user_token' : 'login_user_token_insecure';
363
- };
364
- const checkValidUserToken = (token) => {
365
- if (!token)
366
- return;
367
- try {
368
- const userToken = usertoken_1.UserToken.validateToken(token);
369
- if (scrypted.usersService.users.has(userToken.username))
370
- return userToken;
371
- }
372
- catch (e) {
373
- // console.warn('invalid token', e.message);
374
- }
375
- };
376
- const getSignedLoginUserToken = (req) => {
377
- const token = req.signedCookies[getLoginUserToken(req)];
378
- return checkValidUserToken(token);
379
- };
380
- app.get('/logout', (req, res) => {
381
- res.clearCookie(getLoginUserToken(req));
382
- if (req.headers['accept']?.startsWith('application/json')) {
383
- res.send({});
384
- }
385
- else {
386
- res.redirect('/endpoint/@scrypted/core/public/');
387
- }
388
- });
389
- let hasLogin = await db.getCount(db_types_1.ScryptedUser) > 0;
390
- if (process_1.default.env.SCRYPTED_ADMIN_USERNAME && process_1.default.env.SCRYPTED_ADMIN_TOKEN) {
391
- let user = await db.tryGet(db_types_1.ScryptedUser, process_1.default.env.SCRYPTED_ADMIN_USERNAME);
392
- if (!user) {
393
- user = await scrypted.usersService.addUserInternal(process_1.default.env.SCRYPTED_ADMIN_USERNAME, crypto_1.default.randomBytes(8).toString('hex'), undefined);
394
- hasLogin = true;
395
- }
396
- }
397
- app.options('/login', (req, res) => {
398
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
399
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
400
- res.send(200);
401
- });
402
- app.post('/login', async (req, res) => {
403
- const { username, password, change_password, maxAge: maxAgeRequested } = req.body;
404
- const timestamp = Date.now();
405
- const maxAge = parseInt(maxAgeRequested) || usertoken_1.ONE_DAY_MILLISECONDS;
406
- const addresses = ((await scrypted.addressSettings.getLocalAddresses()) || (0, server_settings_1.getHostAddresses)(true, true)).map(address => `https://${address}:${server_settings_1.SCRYPTED_SECURE_PORT}`);
407
- if (hasLogin) {
408
- const user = await db.tryGet(db_types_1.ScryptedUser, username);
409
- if (!user) {
410
- res.send({
411
- error: 'User does not exist.',
412
- hasLogin,
413
- });
414
- return;
415
- }
416
- const salted = user.salt + password;
417
- const hash = crypto_1.default.createHash('sha256');
418
- hash.update(salted);
419
- const sha = hash.digest().toString('hex');
420
- if (user.passwordHash !== sha && user.token !== password) {
421
- res.send({
422
- error: 'Incorrect password.',
423
- hasLogin,
424
- });
425
- return;
426
- }
427
- const userToken = new usertoken_1.UserToken(username, user.aclId, timestamp, maxAge);
428
- const login_user_token = userToken.toString();
429
- res.cookie(getLoginUserToken(req), login_user_token, {
430
- maxAge,
431
- secure: req.secure,
432
- signed: true,
433
- httpOnly: true,
434
- });
435
- if (change_password) {
436
- (0, users_1.setScryptedUserPassword)(user, change_password, timestamp);
437
- await db.upsert(user);
438
- }
439
- res.send({
440
- ...createTokens(userToken),
441
- username,
442
- expiration: maxAge,
443
- addresses,
444
- });
445
- return;
446
- }
447
- if (!username || !password) {
448
- res.send({
449
- error: 'Username and password must not be empty.',
450
- hasLogin,
451
- });
452
- return;
453
- }
454
- const user = await scrypted.usersService.addUserInternal(username, password, undefined);
455
- hasLogin = true;
456
- const userToken = new usertoken_1.UserToken(username, user.aclId, timestamp);
457
- const login_user_token = userToken.toString();
458
- res.cookie(getLoginUserToken(req), login_user_token, {
459
- maxAge,
460
- secure: req.secure,
461
- signed: true,
462
- httpOnly: true,
463
- });
464
- res.send({
465
- ...createTokens(userToken),
466
- username,
467
- token: user.token,
468
- expiration: maxAge,
469
- addresses,
470
- });
471
- });
472
- const resetLogin = path_1.default.join((0, plugin_volume_1.getScryptedVolume)(), 'reset-login');
473
- async function checkResetLogin() {
474
- try {
475
- if (fs_1.default.existsSync(resetLogin)) {
476
- fs_1.default.rmSync(resetLogin);
477
- await db.removeAll(db_types_1.ScryptedUser);
478
- hasLogin = false;
479
- }
480
- }
481
- catch (e) {
482
- }
483
- }
484
- app.get('/login', async (req, res) => {
485
- await checkResetLogin();
486
- const hostname = os_1.default.hostname()?.split('.')?.[0];
487
- const addresses = ((await scrypted.addressSettings.getLocalAddresses()) || (0, server_settings_1.getHostAddresses)(true, true)).map(address => `https://${address}:${server_settings_1.SCRYPTED_SECURE_PORT}`);
488
- // env/header based admin login
489
- if (res.locals.username && res.locals.username === process_1.default.env.SCRYPTED_ADMIN_USERNAME) {
490
- const userToken = new usertoken_1.UserToken(res.locals.username, undefined, Date.now());
491
- res.send({
492
- ...createTokens(userToken),
493
- expiration: usertoken_1.ONE_DAY_MILLISECONDS,
494
- username: res.locals.username,
495
- token: process_1.default.env.SCRYPTED_ADMIN_TOKEN,
496
- addresses,
497
- hostname,
498
- });
499
- return;
500
- }
501
- // env based anon admin login
502
- if (process_1.default.env.SCRYPTED_DISABLE_AUTHENTICATION === 'true') {
503
- res.send({
504
- expiration: usertoken_1.ONE_DAY_MILLISECONDS,
505
- username: 'anonymous',
506
- addresses,
507
- hostname,
508
- });
509
- return;
510
- }
511
- // basic auth
512
- if (req.protocol === 'https' && req.headers.authorization) {
513
- const username = await new Promise(resolve => {
514
- const basicChecker = basicAuth.check((req) => {
515
- resolve(req.user);
516
- });
517
- // this automatically handles unauthorized.
518
- basicChecker(req, res);
519
- });
520
- const user = await db.tryGet(db_types_1.ScryptedUser, username);
521
- if (!user.token) {
522
- user.token = crypto_1.default.randomBytes(16).toString('hex');
523
- await db.upsert(user);
524
- }
525
- res.send({
526
- username,
527
- token: user.token,
528
- addresses,
529
- hostname,
530
- });
531
- return;
532
- }
533
- // cookie auth
534
- try {
535
- const userToken = getSignedLoginUserToken(req);
536
- if (!userToken)
537
- throw new Error('Not logged in.');
538
- res.send({
539
- ...createTokens(userToken),
540
- expiration: (userToken.timestamp + userToken.duration) - Date.now(),
541
- username: userToken.username,
542
- addresses,
543
- hostname,
544
- });
545
- }
546
- catch (e) {
547
- res.send({
548
- error: e?.message || 'Unknown Error.',
549
- hasLogin,
550
- addresses,
551
- hostname,
552
- });
553
- }
554
- });
555
- app.get('/', (_req, res) => res.redirect('/endpoint/@scrypted/core/public/'));
556
- return scrypted;
557
- }
558
- exports.default = start;
559
- //# sourceMappingURL=scrypted-server-main.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scrypted-server-main.js","sourceRoot":"","sources":["../src/scrypted-server-main.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export declare const SCRYPTED_INSECURE_PORT: number;
2
- export declare const SCRYPTED_SECURE_PORT: number;
3
- export declare const SCRYPTED_DEBUG_PORT: number;
4
- export declare function getIpAddress(): string;
5
- export declare function getHostAddresses(useIpv4: boolean, useIpv6: boolean): string[];