@iobroker/socket-classes 2.0.0 → 2.0.2

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/README.md CHANGED
@@ -992,14 +992,14 @@ Unsubscribe from file changes in ioBroker DB
992
992
  -->
993
993
 
994
994
  ## Changelog
995
- ### 2.0.0 (2025-02-07)
995
+ ### 2.0.2 (2025-02-07)
996
996
  * (@GermanBluefox) Code migrated to TypeScript
997
997
 
998
998
  ### 1.6.2 (2024-12-01)
999
999
  * (@GermanBluefox) Caught the error if no authentication and logout called
1000
1000
 
1001
1001
  ### 1.6.1 (2024-10-05)
1002
- * (@GermanBluefox) Added support of iobroker.SocketIO with typescript
1002
+ * (@GermanBluefox) Added support for iobroker.SocketIO with TypeScript
1003
1003
 
1004
1004
  ### 1.5.6 (2024-06-26)
1005
1005
  * (@GermanBluefox) Corrected call of getObjectView with null parameter
package/dist/index.d.ts CHANGED
@@ -3,5 +3,6 @@ import cookieParser from 'cookie-parser';
3
3
  export { SocketCommandsAdmin } from './lib/socketCommandsAdmin';
4
4
  export { SocketCommands, type SupportedFeature } from './lib/socketCommands';
5
5
  export { SocketCommon } from './lib/socketCommon';
6
- import { authorize as passportSocket } from './lib/passportSocket';
7
- export { passport, cookieParser, passportSocket };
6
+ export { SocketAdmin } from './lib/socketAdmin';
7
+ import { authorize as passportSocket, type PassportHttpRequest } from './lib/passportSocket';
8
+ export { passport, cookieParser, passportSocket, type PassportHttpRequest };
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.passportSocket = exports.cookieParser = exports.passport = exports.SocketCommon = exports.SocketCommands = exports.SocketCommandsAdmin = void 0;
6
+ exports.passportSocket = exports.cookieParser = exports.passport = exports.SocketAdmin = exports.SocketCommon = exports.SocketCommands = exports.SocketCommandsAdmin = void 0;
7
7
  const passport_1 = __importDefault(require("passport"));
8
8
  exports.passport = passport_1.default;
9
9
  const cookie_parser_1 = __importDefault(require("cookie-parser"));
@@ -14,6 +14,8 @@ var socketCommands_1 = require("./lib/socketCommands");
14
14
  Object.defineProperty(exports, "SocketCommands", { enumerable: true, get: function () { return socketCommands_1.SocketCommands; } });
15
15
  var socketCommon_1 = require("./lib/socketCommon");
16
16
  Object.defineProperty(exports, "SocketCommon", { enumerable: true, get: function () { return socketCommon_1.SocketCommon; } });
17
+ var socketAdmin_1 = require("./lib/socketAdmin");
18
+ Object.defineProperty(exports, "SocketAdmin", { enumerable: true, get: function () { return socketAdmin_1.SocketAdmin; } });
17
19
  const passportSocket_1 = require("./lib/passportSocket");
18
20
  Object.defineProperty(exports, "passportSocket", { enumerable: true, get: function () { return passportSocket_1.authorize; } });
19
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAMvB,mBANF,kBAAQ,CAME;AALjB,kEAAyC;AAKtB,uBALZ,uBAAY,CAKY;AAJ/B,iEAAgE;AAAvD,0HAAA,mBAAmB,OAAA;AAC5B,uDAA6E;AAApE,gHAAA,cAAc,OAAA;AACvB,mDAAkD;AAAzC,4GAAA,YAAY,OAAA;AACrB,yDAAmE;AAClC,+FADX,0BAAc,OACW"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAOvB,mBAPF,kBAAQ,CAOE;AANjB,kEAAyC;AAMtB,uBANZ,uBAAY,CAMY;AAL/B,iEAAgE;AAAvD,0HAAA,mBAAmB,OAAA;AAC5B,uDAA6E;AAApE,gHAAA,cAAc,OAAA;AACvB,mDAAkD;AAAzC,4GAAA,YAAY,OAAA;AACrB,iDAAgD;AAAvC,0GAAA,WAAW,OAAA;AACpB,yDAA6F;AAC5D,+FADX,0BAAc,OACW"}
@@ -1,9 +1,16 @@
1
- interface AuthRequest {
2
- signedCookies?: Record<string, string>;
3
- cookies?: Record<string, string>;
1
+ import type { IncomingMessage } from 'node:http';
2
+ import type * as express from 'express';
3
+ import type * as passport from 'passport';
4
+ export interface PassportHttpRequest extends IncomingMessage {
4
5
  headers: {
5
6
  cookie: string;
6
7
  };
8
+ query: Record<string, string>;
9
+ cookie: Record<string, string> | undefined;
10
+ sessionID: string;
11
+ user: {
12
+ logged_in: boolean;
13
+ };
7
14
  }
8
15
  export interface Store {
9
16
  get: (key: string, cb: (err: Error, session: Record<string, {
@@ -13,25 +20,15 @@ export interface Store {
13
20
  }>) => void) => void;
14
21
  }
15
22
  export declare function authorize(options: {
16
- passport: {
23
+ passport: passport.PassportStatic & {
17
24
  _key: string;
18
25
  };
19
- cookieParser: (secret: string | null) => (req: AuthRequest, options: Record<string, any>, cb: (err: string) => void) => void;
26
+ cookieParser: (secret: string | null, options?: {
27
+ decode?(val: string): string;
28
+ }) => express.RequestHandler;
20
29
  checkUser?: (user: string, pass: string, cb: (error: Error | null, result?: {
21
30
  logged_in: boolean;
22
31
  }) => void) => void;
23
- fail: (data: any, message: string, critical: boolean, accept: (err: Error | null) => void) => void;
24
- success: (data: any, accept: (err: Error | null) => void) => void;
25
- }): (data: {
26
- headers: {
27
- cookie: string;
28
- };
29
- url: string;
30
- query: Record<string, string>;
31
- cookie: Record<string, string> | undefined;
32
- sessionID: string;
33
- user: {
34
- logged_in: boolean;
35
- };
36
- }, accept: (err: Error | null) => void) => void;
37
- export {};
32
+ fail: (data: PassportHttpRequest, message: string, critical: boolean, accept: (err: boolean) => void) => void;
33
+ success: (data: PassportHttpRequest, accept: (err: boolean) => void) => void;
34
+ }): (req: IncomingMessage, accept: (err: boolean) => void) => void;
@@ -5,13 +5,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.authorize = authorize;
6
6
  function parseCookie(auth, cookieHeader) {
7
7
  const cookieParser = auth.cookieParser(auth.secret);
8
+ // Simulate header
8
9
  const req = {
9
10
  headers: {
10
11
  cookie: cookieHeader,
11
12
  },
12
13
  };
13
14
  let result;
14
- cookieParser(req, {}, err => {
15
+ void cookieParser(req, {}, (err) => {
15
16
  if (err) {
16
17
  throw new Error(err);
17
18
  }
@@ -20,7 +21,7 @@ function parseCookie(auth, cookieHeader) {
20
21
  return result;
21
22
  }
22
23
  function getQuery(url) {
23
- const query = url.split('?')[1] || '';
24
+ const query = (url || '').split('?')[1] || '';
24
25
  const parts = query.split('&');
25
26
  const result = {};
26
27
  for (let p = 0; p < parts.length; p++) {
@@ -43,45 +44,47 @@ function authorize(options) {
43
44
  if (!auth.cookieParser) {
44
45
  throw new Error("cookieParser is required use require('cookie-parser'), connect.cookieParser or express.cookieParser");
45
46
  }
46
- return function (data, accept) {
47
- data.query = getQuery(data.url);
48
- if (options.checkUser && data.query.user && data.query.pass) {
49
- return options.checkUser(data.query.user, data.query.pass, (error, result) => {
47
+ return function (req, accept) {
48
+ const extendedReq = req;
49
+ extendedReq.query = getQuery(extendedReq.url);
50
+ if (options.checkUser && extendedReq.query.user && extendedReq.query.pass) {
51
+ return options.checkUser(extendedReq.query.user, extendedReq.query.pass, (error, result) => {
50
52
  if (error) {
51
- return auth.fail(data, 'Cannot check user', false, accept);
53
+ return auth.fail(extendedReq, 'Cannot check user', false, accept);
52
54
  }
53
55
  if (!result) {
54
- return auth.fail(data, 'User not found', false, accept);
56
+ return auth.fail(extendedReq, 'User not found', false, accept);
55
57
  }
56
- data[auth.userProperty] = result;
57
- data[auth.userProperty].logged_in = true;
58
- auth.success(data, accept);
58
+ extendedReq[auth.userProperty] = result;
59
+ extendedReq[auth.userProperty].logged_in = true;
60
+ auth.success(extendedReq, accept);
59
61
  });
60
62
  }
61
- data.cookie = parseCookie(auth, data.headers.cookie || '');
62
- if (data.cookie) {
63
- data.sessionID = data.cookie[auth.key] || '';
63
+ extendedReq.cookie = parseCookie(auth, extendedReq.headers.cookie || '');
64
+ if (extendedReq.cookie) {
65
+ extendedReq.sessionID = extendedReq.cookie[auth.key] || '';
64
66
  }
65
- data[auth.userProperty] = {
67
+ extendedReq[auth.userProperty] = {
66
68
  logged_in: false,
67
69
  };
68
- auth.store?.get(data.sessionID, (err, session) => {
70
+ auth.store?.get(extendedReq.sessionID, (err, session) => {
69
71
  if (err) {
70
- return auth.fail(data, `Error in session store:\n${err.message}`, true, accept);
72
+ return auth.fail(extendedReq, `Error in session store:\n${err.message}`, true, accept);
71
73
  }
72
74
  if (!session) {
73
- return auth.fail(data, 'No session found', false, accept);
75
+ return auth.fail(extendedReq, 'No session found', false, accept);
74
76
  }
75
77
  if (!session[auth.passport._key]) {
76
- return auth.fail(data, 'Passport was not initialized', true, accept);
78
+ return auth.fail(extendedReq, 'Passport was not initialized', true, accept);
77
79
  }
78
80
  const userKey = session[auth.passport._key].user;
79
81
  if (typeof userKey === 'undefined') {
80
- return auth.fail(data, 'User not authorized through passport. (User Property not found)', false, accept);
82
+ return auth.fail(extendedReq, 'User not authorized through passport. (User Property not found)', false, accept);
81
83
  }
82
- data[auth.userProperty] = userKey;
83
- data[auth.userProperty].logged_in = true;
84
- auth.success(data, accept);
84
+ // extendedReq.user
85
+ extendedReq[auth.userProperty] = userKey;
86
+ extendedReq[auth.userProperty].logged_in = true;
87
+ auth.success(extendedReq, accept);
85
88
  });
86
89
  };
87
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"passportSocket.js","sourceRoot":"","sources":["../../src/lib/passportSocket.ts"],"names":[],"mappings":";AAAA,yGAAyG;AACzG,0EAA0E;;AAqD1E,8BAiHC;AAxJD,SAAS,WAAW,CAChB,IAKC,EACD,YAAoB;IAEpB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,GAAG,GAAgB;QACrB,OAAO,EAAE;YACL,MAAM,EAAE,YAAY;SACvB;KACJ,CAAC;IAEF,IAAI,MAA0C,CAAC;IAE/C,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE;QACxB,IAAI,GAAG,EAAE,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IACzB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,SAAS,CAAC,OAYzB;IAaG,MAAM,QAAQ,GAAsF;QAChG,GAAG,EAAE,aAAa;QAClB,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,MAAM;KACvB,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAElD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAChG,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACX,qGAAqG,CACxG,CAAC;IACN,CAAC;IAED,OAAO,UACH,IASC,EACD,MAAmC;QAEnC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1D,OAAO,OAAO,CAAC,SAAS,CACpB,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,CAAC,KAAmB,EAAE,MAA+B,EAAE,EAAE;gBACrD,IAAI,KAAK,EAAE,CAAC;oBACR,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC/D,CAAC;gBACD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC5D,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC,CACJ,CAAC;QACN,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG;YACtB,SAAS,EAAE,KAAK;SACnB,CAAC;QAEF,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAU,EAAE,OAAyD,EAAE,EAAE;YACtG,IAAI,GAAG,EAAE,CAAC;gBACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,4BAA4B,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAEjD,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC,IAAI,CACZ,IAAI,EACJ,iEAAiE,EACjE,KAAK,EACL,MAAM,CACT,CAAC;YACN,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"passportSocket.js","sourceRoot":"","sources":["../../src/lib/passportSocket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Class Socket
3
+ *
4
+ * Copyright 2014-2025 bluefox <dogafox@gmail.com>,
5
+ * MIT License
6
+ *
7
+ */
8
+ import { type Server, SocketCommon, type SocketIoOptions, type SocketSettings } from './socketCommon';
9
+ import { type Store } from './passportSocket';
10
+ import type { Socket as WebSocketClient, SocketIO } from '@iobroker/ws-server';
11
+ import type { AddressInfo } from 'node:net';
12
+ import type { SocketSubscribeTypes } from '../types';
13
+ import type { Ratings } from './socketCommands';
14
+ export declare class SocketAdmin extends SocketCommon {
15
+ #private;
16
+ private adminCommands;
17
+ constructor(settings: SocketSettings, adapter: ioBroker.Adapter, objects: Record<string, ioBroker.Object>);
18
+ __getIsNoDisconnect(): boolean;
19
+ __initAuthentication(authOptions: {
20
+ store: Store;
21
+ userKey: string;
22
+ secret: string;
23
+ }): void;
24
+ __getUserFromSocket(socket: WebSocketClient, callback: (error: string | null, user?: string) => void): void;
25
+ __getClientAddress(socket: WebSocketClient): AddressInfo;
26
+ __updateSession(socket: WebSocketClient): boolean;
27
+ __getSessionID(socket: WebSocketClient): string | null;
28
+ start(server: Server, socketClass: typeof SocketIO, authOptions: {
29
+ store: Store;
30
+ userKey: string;
31
+ secret: string;
32
+ }, socketOptions?: SocketIoOptions): void;
33
+ onThresholdChanged(enabled: boolean): void;
34
+ stateChange(id: string, state: ioBroker.State | null | undefined): void;
35
+ fileChange(id: string, fileName: string, size: number): void;
36
+ repoUpdated(): void;
37
+ objectChange(id: string, obj: ioBroker.Object | null | undefined): void;
38
+ subscribe(type: SocketSubscribeTypes, pattern: string): void;
39
+ subscribeFile(id: string, patternFile: string): void;
40
+ sendCommand(obj: ioBroker.Message): void;
41
+ updateRatings(uuid: string, isAutoUpdate?: boolean): Promise<Ratings | null>;
42
+ }
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SocketAdmin = void 0;
37
+ /**
38
+ * Class Socket
39
+ *
40
+ * Copyright 2014-2025 bluefox <dogafox@gmail.com>,
41
+ * MIT License
42
+ *
43
+ */
44
+ const socketCommon_1 = require("./socketCommon");
45
+ const socketCommandsAdmin_1 = require("./socketCommandsAdmin");
46
+ const passport = __importStar(require("passport"));
47
+ const cookieParser = __importStar(require("cookie-parser"));
48
+ const passportSocket_1 = require("./passportSocket");
49
+ class SocketAdmin extends socketCommon_1.SocketCommon {
50
+ adminCommands;
51
+ constructor(settings, adapter, objects) {
52
+ super(settings, adapter);
53
+ // user another set of commands for admin
54
+ this.commands = new socketCommandsAdmin_1.SocketCommandsAdmin(adapter, socket => this.__updateSession(socket), this.context, objects);
55
+ this.adminCommands = this.commands;
56
+ }
57
+ __getIsNoDisconnect() {
58
+ // ws does not require disconnect
59
+ return true;
60
+ }
61
+ #onAuthorizeSuccess = (data, accept) => {
62
+ this.adapter.log.debug(`successful connection to socket.io from ${(data.socket || data.connection).remoteAddress}`);
63
+ // no error
64
+ accept(false);
65
+ };
66
+ #onAuthorizeFail = (data, message, critical, accept) => {
67
+ setTimeout(() => data.socket.emit(socketCommon_1.SocketCommon.COMMAND_RE_AUTHENTICATE), 100);
68
+ if (critical) {
69
+ this.adapter?.log.info(`failed connection to socket.io from ${(data.socket || data.connection).remoteAddress}: ${message}`);
70
+ }
71
+ // this error will be sent to the user as a special error-package
72
+ // see: http://socket.io/docs/client-api/#socket > error-object
73
+ if (critical) {
74
+ // @ts-expect-error
75
+ accept(new Error(message));
76
+ }
77
+ else {
78
+ // @ts-expect-error
79
+ accept(new Error(`failed connection to socket.io: ${message}`));
80
+ }
81
+ };
82
+ __initAuthentication(authOptions) {
83
+ this.store = authOptions.store;
84
+ this.server?.use((0, passportSocket_1.authorize)({
85
+ // @ts-expect-error fix later
86
+ passport,
87
+ // @ts-expect-error fix later
88
+ cookieParser,
89
+ key: authOptions.userKey, // the name of the cookie where express/connect stores its session_id
90
+ secret: authOptions.secret, // the session_secret to parse the cookie
91
+ store: authOptions.store, // we NEED to use a sessionstore. no memorystore, please
92
+ success: this.#onAuthorizeSuccess, // *optional* callback on success - read more below
93
+ fail: this.#onAuthorizeFail, // *optional* callback on fail/error - read more below
94
+ }));
95
+ }
96
+ // Extract username from socket
97
+ __getUserFromSocket(socket, callback) {
98
+ if (socket.conn.request.sessionID) {
99
+ socket._secure = true;
100
+ socket._sessionID = socket.conn.request.sessionID;
101
+ // Get user for session
102
+ void this.adapter.getSession(socket.conn.request.sessionID, obj => {
103
+ if (!obj?.passport) {
104
+ if (socket._acl) {
105
+ socket._acl.user = '';
106
+ }
107
+ socket.emit(socketCommon_1.SocketCommon.COMMAND_RE_AUTHENTICATE);
108
+ callback('Cannot detect user');
109
+ }
110
+ else {
111
+ callback(null, obj.passport.user ? `system.user.${obj.passport.user}` : '');
112
+ }
113
+ });
114
+ }
115
+ else {
116
+ callback('Cannot detect user');
117
+ }
118
+ }
119
+ __getClientAddress(socket) {
120
+ let address;
121
+ if (socket.connection) {
122
+ address = socket.connection.remoteAddress;
123
+ }
124
+ else {
125
+ // @ts-expect-error socket.io
126
+ address = socket.ws._socket.remoteAddress;
127
+ }
128
+ // @ts-expect-error socket.io
129
+ if (!address && socket.handshake) {
130
+ // @ts-expect-error socket.io
131
+ address = socket.handshake.address;
132
+ }
133
+ // @ts-expect-error socket.io
134
+ if (!address && socket.conn.request?.connection) {
135
+ // @ts-expect-error socket.io
136
+ address = socket.conn.request.connection.remoteAddress;
137
+ }
138
+ return address;
139
+ }
140
+ // update session ID, but not ofter than 60 seconds
141
+ __updateSession(socket) {
142
+ if (socket._sessionID) {
143
+ const time = Date.now();
144
+ if (socket._lastActivity && time - socket._lastActivity > (this.settings.ttl || 3600) * 1000) {
145
+ this.adapter.log.warn('REAUTHENTICATE!');
146
+ socket.emit(socketCommon_1.SocketCommon.COMMAND_RE_AUTHENTICATE);
147
+ return false;
148
+ }
149
+ socket._lastActivity = time;
150
+ socket._sessionTimer ||= setTimeout(() => {
151
+ socket._sessionTimer = undefined;
152
+ void this.adapter.getSession(socket._sessionID, obj => {
153
+ if (obj) {
154
+ void this.adapter.setSession(socket._sessionID, this.settings.ttl || 3600, obj);
155
+ }
156
+ else {
157
+ this.adapter.log.warn('REAUTHENTICATE!');
158
+ socket.emit(socketCommon_1.SocketCommon.COMMAND_RE_AUTHENTICATE);
159
+ }
160
+ });
161
+ }, 60_000);
162
+ }
163
+ return true;
164
+ }
165
+ __getSessionID(socket) {
166
+ return this.settings.auth ? socket.conn.request.sessionID : null;
167
+ }
168
+ start(server, socketClass, authOptions, socketOptions) {
169
+ super.start(server, socketClass, authOptions, socketOptions);
170
+ this.adminCommands.start(thresholdEnabled => this.onThresholdChanged(thresholdEnabled));
171
+ }
172
+ onThresholdChanged(enabled) {
173
+ this.server && this.server.sockets && this.server.sockets.emit('eventsThreshold', enabled);
174
+ }
175
+ stateChange(id, state) {
176
+ this.adminCommands.stateChange(id, state);
177
+ const sockets = this.getSocketsList();
178
+ if (sockets) {
179
+ if (Array.isArray(sockets)) {
180
+ sockets.forEach(socket => this.commands.publish(socket, 'stateChange', id, state));
181
+ }
182
+ else {
183
+ Object.values(sockets).forEach(socket => this.commands.publish(socket, 'stateChange', id, state));
184
+ }
185
+ }
186
+ }
187
+ fileChange(id, fileName, size) {
188
+ const sockets = this.getSocketsList();
189
+ if (sockets) {
190
+ if (Array.isArray(sockets)) {
191
+ sockets.forEach(socket => this.commands.publishFile(socket, id, fileName, size));
192
+ }
193
+ else {
194
+ Object.values(sockets).forEach(socket => this.commands.publishFile(socket, id, fileName, size));
195
+ }
196
+ }
197
+ }
198
+ repoUpdated() {
199
+ const sockets = this.getSocketsList();
200
+ if (sockets) {
201
+ if (Array.isArray(sockets)) {
202
+ sockets.forEach(socket => this.__updateSession(socket));
203
+ }
204
+ else {
205
+ Object.values(sockets).forEach(socket => this.__updateSession(socket));
206
+ }
207
+ this.server?.sockets.emit('repoUpdated');
208
+ }
209
+ }
210
+ objectChange(id, obj) {
211
+ const sockets = this.getSocketsList();
212
+ if (sockets) {
213
+ if (Array.isArray(sockets)) {
214
+ sockets.forEach(socket => this.commands.publish(socket, 'objectChange', id, obj));
215
+ }
216
+ else {
217
+ Object.values(sockets).forEach(socket => this.commands.publish(socket, 'objectChange', id, obj));
218
+ }
219
+ }
220
+ }
221
+ subscribe(type, pattern) {
222
+ this.commands.subscribe(null, type, pattern);
223
+ }
224
+ subscribeFile(id, patternFile) {
225
+ this.commands.subscribe(null, 'fileChange', id, patternFile);
226
+ }
227
+ sendCommand(obj) {
228
+ if (this.adminCommands.sendCommand(obj)) {
229
+ const sockets = this.getSocketsList();
230
+ if (sockets) {
231
+ if (Array.isArray(sockets)) {
232
+ sockets.forEach(socket => this.__updateSession(socket));
233
+ }
234
+ else {
235
+ Object.values(sockets).forEach(socket => this.__updateSession(socket));
236
+ }
237
+ this.server?.sockets.emit(obj.command, obj.message.id, obj.message.data);
238
+ }
239
+ }
240
+ }
241
+ updateRatings(uuid, isAutoUpdate) {
242
+ return this.adminCommands.updateRatings(uuid, isAutoUpdate);
243
+ }
244
+ }
245
+ exports.SocketAdmin = SocketAdmin;
246
+ //# sourceMappingURL=socketAdmin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketAdmin.js","sourceRoot":"","sources":["../../src/lib/socketAdmin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;GAMG;AACH,iDAAsG;AACtG,+DAA4D;AAC5D,mDAAqC;AACrC,4DAA8C;AAC9C,qDAAmF;AAMnF,MAAa,WAAY,SAAQ,2BAAY;IACjC,aAAa,CAAsB;IAC3C,YAAY,QAAwB,EAAE,OAAyB,EAAE,OAAwC;QACrG,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEzB,yCAAyC;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,yCAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAA+B,CAAC;IAC9D,CAAC;IAED,mBAAmB;QACf,iCAAiC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,mBAAmB,GAAG,CAAC,IAAyB,EAAE,MAA8B,EAAQ,EAAE;QACtF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAClB,2CAA2C,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAC9F,CAAC;QACF,WAAW;QACX,MAAM,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,gBAAgB,GAAG,CACf,IAAyB,EACzB,OAAe,EACf,QAAiB,EACjB,MAA8B,EAC1B,EAAE;QACN,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAAY,CAAC,uBAAuB,CAAC,EAAE,GAAG,CAAC,CAAC;QAE9E,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAClB,uCAAuC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,aAAa,KAAK,OAAO,EAAE,CACtG,CAAC;QACN,CAAC;QAED,iEAAiE;QACjE,+DAA+D;QAC/D,IAAI,QAAQ,EAAE,CAAC;YACX,mBAAmB;YACnB,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACJ,mBAAmB;YACnB,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC;IACL,CAAC,CAAC;IAEF,oBAAoB,CAAC,WAA8D;QAC/E,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAE/B,IAAI,CAAC,MAAM,EAAE,GAAG,CACZ,IAAA,0BAAS,EAAC;YACN,6BAA6B;YAC7B,QAAQ;YACR,6BAA6B;YAC7B,YAAY;YACZ,GAAG,EAAE,WAAW,CAAC,OAAO,EAAE,qEAAqE;YAC/F,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,yCAAyC;YACrE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,wDAAwD;YAClF,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,mDAAmD;YACtF,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,sDAAsD;SACtF,CAAC,CACL,CAAC;IACN,CAAC;IAED,+BAA+B;IAC/B,mBAAmB,CAAC,MAAuB,EAAE,QAAuD;QAChG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAElD,uBAAuB;YACvB,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE;gBAC9D,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;oBACjB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;wBACd,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;oBAC1B,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,2BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAClD,QAAQ,CAAC,oBAAoB,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACJ,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChF,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,MAAuB;QACtC,IAAI,OAAO,CAAC;QACZ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC;QAC9C,CAAC;aAAM,CAAC;YACJ,6BAA6B;YAC7B,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;QAC9C,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAC/B,6BAA6B;YAC7B,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QACvC,CAAC;QACD,6BAA6B;QAC7B,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;YAC9C,6BAA6B;YAC7B,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC;QAC3D,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,mDAAmD;IACnD,eAAe,CAAC,MAAuB;QACnC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACxB,IAAI,MAAM,CAAC,aAAa,IAAI,IAAI,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC3F,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC,2BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAClD,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;YAC5B,MAAM,CAAC,aAAa,KAAK,UAAU,CAAC,GAAG,EAAE;gBACrC,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;gBACjC,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,UAAW,EAAE,GAAG,CAAC,EAAE;oBACnD,IAAI,GAAG,EAAE,CAAC;wBACN,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,UAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;oBACrF,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;wBACzC,MAAM,CAAC,IAAI,CAAC,2BAAY,CAAC,uBAAuB,CAAC,CAAC;oBACtD,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,EAAE,MAAM,CAAC,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,cAAc,CAAC,MAAuB;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IAED,KAAK,CACD,MAAc,EACd,WAA4B,EAC5B,WAA8D,EAC9D,aAA+B;QAE/B,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QAE7D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,kBAAkB,CAAC,OAAgB;QAC/B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC/F,CAAC;IAED,WAAW,CAAC,EAAU,EAAE,KAAwC;QAC5D,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAE1C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACvF,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACtG,CAAC;QACL,CAAC;IACL,CAAC;IAED,UAAU,CAAC,EAAU,EAAE,QAAgB,EAAE,IAAY;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YACpG,CAAC;QACL,CAAC;IACL,CAAC;IAED,WAAW;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3E,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;IAED,YAAY,CAAC,EAAU,EAAE,GAAuC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YACtF,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YACrG,CAAC;QACL,CAAC;IACL,CAAC;IAED,SAAS,CAAC,IAA0B,EAAE,OAAe;QACjD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,aAAa,CAAC,EAAU,EAAE,WAAmB;QACzC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC;IAED,WAAW,CAAC,GAAqB;QAC7B,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC5D,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3E,CAAC;gBAED,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7E,CAAC;QACL,CAAC;IACL,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,YAAsB;QAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAChE,CAAC;CACJ;AAtOD,kCAsOC"}
@@ -41,7 +41,7 @@ export declare class SocketCommands {
41
41
  error?: string;
42
42
  result?: any;
43
43
  }) => void) => void) | null;
44
- states: Record<string, ioBroker.State> | null;
44
+ states: Record<string, ioBroker.State> | undefined;
45
45
  constructor(adapter: ioBroker.Adapter, updateSession: (socket: WebSocketClient) => boolean, context: SocketDataContext);
46
46
  /**
47
47
  * Convert errors into strings and then call cb
@@ -52,12 +52,12 @@ export declare class SocketCommands {
52
52
  */
53
53
  static _fixCallback(callback: SocketCallback | null | undefined, error: string | Error | null | undefined, ...args: any[]): void;
54
54
  _checkPermissions(socket: WebSocketClient, command: PermissionCommands, callback: ((error: string | null, ...args: any[]) => void) | undefined, ...args: any[]): boolean;
55
- publish(socket: WebSocketClient, type: SocketSubscribeTypes, id: string, obj: ioBroker.Object | ioBroker.State): boolean;
55
+ publish(socket: WebSocketClient, type: SocketSubscribeTypes, id: string, obj: ioBroker.Object | ioBroker.State | null | undefined): boolean;
56
56
  publishFile(socket: WebSocketClient, id: string, fileName: string, size: number): boolean;
57
57
  publishInstanceMessage(socket: WebSocketClient, sourceInstance: string, messageType: string, data: any): boolean;
58
58
  _showSubscribes(socket: WebSocketClient, type: SocketSubscribeTypes): void;
59
59
  isLogEnabled(): boolean;
60
- subscribe(socket: WebSocketClient, type: SocketSubscribeTypes, pattern: string, patternFile?: string): void;
60
+ subscribe(socket: WebSocketClient | null, type: SocketSubscribeTypes, pattern: string, patternFile?: string): void;
61
61
  unsubscribe(socket: WebSocketClient, type: SocketSubscribeTypes, pattern: string, patternFile?: string): void;
62
62
  subscribeSocket(socket: WebSocketClient, type?: SocketSubscribeTypes): void;
63
63
  unsubscribeSocket(socket: WebSocketClient, type?: SocketSubscribeTypes): void;
@@ -68,7 +68,7 @@ class SocketCommands {
68
68
  #updateSession;
69
69
  adapterName;
70
70
  _sendToHost;
71
- states = null;
71
+ states;
72
72
  constructor(adapter, updateSession, context) {
73
73
  this.adapter = adapter;
74
74
  this.#updateSession = updateSession;
@@ -908,8 +908,6 @@ class SocketCommands {
908
908
  * @param callback callback `(error?: Error) => void`
909
909
  */
910
910
  this.commands.logout = (socket, callback) => {
911
- // Logout user
912
- // @param {function} callback - function (error)
913
911
  if (socket.id) {
914
912
  void this.adapter.destroySession(socket.id, callback);
915
913
  }
@@ -940,8 +938,6 @@ class SocketCommands {
940
938
  * @param callback callback `(error: string | null | undefined, userPermissions?: SocketACL | null) => void`
941
939
  */
942
940
  this.commands.getUserPermissions = (socket, callback) => {
943
- // Get user permissions
944
- // @param {function} callback - `function (error, permissions)`
945
941
  if (this._checkPermissions(socket, 'getUserPermissions', callback)) {
946
942
  if (typeof callback === 'function') {
947
943
  callback(null, socket._acl);
@@ -959,8 +955,6 @@ class SocketCommands {
959
955
  * @param callback callback `(error: string | Error | null | undefined, version: string | undefined, adapterName: string) => void`
960
956
  */
961
957
  this.commands.getVersion = (socket, callback) => {
962
- // Get the adapter version. Not the socket-classes version!
963
- // @param {function} callback - `function (error, adapterVersion, adapterName)`
964
958
  if (this._checkPermissions(socket, 'getVersion', callback)) {
965
959
  if (typeof callback === 'function') {
966
960
  callback(null, this.adapter.version, this.adapter.name);
@@ -978,8 +972,6 @@ class SocketCommands {
978
972
  * @param callback callback `(error: string | Error | null | undefined, version: string | undefined, adapterName: string) => void`
979
973
  */
980
974
  this.commands.getAdapterName = (socket, callback) => {
981
- // Get adapter name. Not the socket-classes version!
982
- // @param {function} callback - `function (error, adapterVersion)`
983
975
  if (this._checkPermissions(socket, 'getAdapterName', callback)) {
984
976
  if (typeof callback === 'function') {
985
977
  callback(null, this.adapter.name || 'unknown');
@@ -1963,7 +1955,6 @@ class SocketCommands {
1963
1955
  * @param callback Callback `(error: string | null) => void`
1964
1956
  */
1965
1957
  this.commands.clientUnsubscribe = (socket, targetInstance, messageType, callback) => {
1966
- // @param {function} callback - `function (error, wasSubscribed)`, target instance MUST NOT acknowledge the un-subscription
1967
1958
  const sid = socket.id;
1968
1959
  if (!targetInstance.startsWith('system.adapter.')) {
1969
1960
  targetInstance = `system.adapter.${targetInstance}`;