@iobroker/socket-classes 1.6.2 → 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.
@@ -0,0 +1,8 @@
1
+ import passport from 'passport';
2
+ import cookieParser from 'cookie-parser';
3
+ export { SocketCommandsAdmin } from './lib/socketCommandsAdmin';
4
+ export { SocketCommands, type SupportedFeature } from './lib/socketCommands';
5
+ export { SocketCommon } from './lib/socketCommon';
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 ADDED
@@ -0,0 +1,21 @@
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.passportSocket = exports.cookieParser = exports.passport = exports.SocketAdmin = exports.SocketCommon = exports.SocketCommands = exports.SocketCommandsAdmin = void 0;
7
+ const passport_1 = __importDefault(require("passport"));
8
+ exports.passport = passport_1.default;
9
+ const cookie_parser_1 = __importDefault(require("cookie-parser"));
10
+ exports.cookieParser = cookie_parser_1.default;
11
+ var socketCommandsAdmin_1 = require("./lib/socketCommandsAdmin");
12
+ Object.defineProperty(exports, "SocketCommandsAdmin", { enumerable: true, get: function () { return socketCommandsAdmin_1.SocketCommandsAdmin; } });
13
+ var socketCommands_1 = require("./lib/socketCommands");
14
+ Object.defineProperty(exports, "SocketCommands", { enumerable: true, get: function () { return socketCommands_1.SocketCommands; } });
15
+ var socketCommon_1 = require("./lib/socketCommon");
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; } });
19
+ const passportSocket_1 = require("./lib/passportSocket");
20
+ Object.defineProperty(exports, "passportSocket", { enumerable: true, get: function () { return passportSocket_1.authorize; } });
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,34 @@
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 {
5
+ headers: {
6
+ cookie: string;
7
+ };
8
+ query: Record<string, string>;
9
+ cookie: Record<string, string> | undefined;
10
+ sessionID: string;
11
+ user: {
12
+ logged_in: boolean;
13
+ };
14
+ }
15
+ export interface Store {
16
+ get: (key: string, cb: (err: Error, session: Record<string, {
17
+ user: {
18
+ logged_in: boolean;
19
+ };
20
+ }>) => void) => void;
21
+ }
22
+ export declare function authorize(options: {
23
+ passport: passport.PassportStatic & {
24
+ _key: string;
25
+ };
26
+ cookieParser: (secret: string | null, options?: {
27
+ decode?(val: string): string;
28
+ }) => express.RequestHandler;
29
+ checkUser?: (user: string, pass: string, cb: (error: Error | null, result?: {
30
+ logged_in: boolean;
31
+ }) => void) => void;
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;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ // Originally taken from here: https://github.com/jfromaniello/passport.socketio/blob/master/lib/index.js
3
+ // Copyright Licensed under the MIT-License. 2012-2013 José F. Romaniello.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.authorize = authorize;
6
+ function parseCookie(auth, cookieHeader) {
7
+ const cookieParser = auth.cookieParser(auth.secret);
8
+ // Simulate header
9
+ const req = {
10
+ headers: {
11
+ cookie: cookieHeader,
12
+ },
13
+ };
14
+ let result;
15
+ void cookieParser(req, {}, (err) => {
16
+ if (err) {
17
+ throw new Error(err);
18
+ }
19
+ result = req.signedCookies || req.cookies;
20
+ });
21
+ return result;
22
+ }
23
+ function getQuery(url) {
24
+ const query = (url || '').split('?')[1] || '';
25
+ const parts = query.split('&');
26
+ const result = {};
27
+ for (let p = 0; p < parts.length; p++) {
28
+ const parts1 = parts[p].split('=');
29
+ result[parts1[0]] = parts1[1];
30
+ }
31
+ return result;
32
+ }
33
+ function authorize(options) {
34
+ const defaults = {
35
+ key: 'connect.sid',
36
+ secret: null,
37
+ store: null,
38
+ userProperty: 'user',
39
+ };
40
+ const auth = Object.assign({}, defaults, options);
41
+ if (!auth.passport) {
42
+ throw new Error("passport is required to use require('passport'), please install passport");
43
+ }
44
+ if (!auth.cookieParser) {
45
+ throw new Error("cookieParser is required use require('cookie-parser'), connect.cookieParser or express.cookieParser");
46
+ }
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) => {
52
+ if (error) {
53
+ return auth.fail(extendedReq, 'Cannot check user', false, accept);
54
+ }
55
+ if (!result) {
56
+ return auth.fail(extendedReq, 'User not found', false, accept);
57
+ }
58
+ extendedReq[auth.userProperty] = result;
59
+ extendedReq[auth.userProperty].logged_in = true;
60
+ auth.success(extendedReq, accept);
61
+ });
62
+ }
63
+ extendedReq.cookie = parseCookie(auth, extendedReq.headers.cookie || '');
64
+ if (extendedReq.cookie) {
65
+ extendedReq.sessionID = extendedReq.cookie[auth.key] || '';
66
+ }
67
+ extendedReq[auth.userProperty] = {
68
+ logged_in: false,
69
+ };
70
+ auth.store?.get(extendedReq.sessionID, (err, session) => {
71
+ if (err) {
72
+ return auth.fail(extendedReq, `Error in session store:\n${err.message}`, true, accept);
73
+ }
74
+ if (!session) {
75
+ return auth.fail(extendedReq, 'No session found', false, accept);
76
+ }
77
+ if (!session[auth.passport._key]) {
78
+ return auth.fail(extendedReq, 'Passport was not initialized', true, accept);
79
+ }
80
+ const userKey = session[auth.passport._key].user;
81
+ if (typeof userKey === 'undefined') {
82
+ return auth.fail(extendedReq, 'User not authorized through passport. (User Property not found)', false, accept);
83
+ }
84
+ // extendedReq.user
85
+ extendedReq[auth.userProperty] = userKey;
86
+ extendedReq[auth.userProperty].logged_in = true;
87
+ auth.success(extendedReq, accept);
88
+ });
89
+ };
90
+ }
91
+ //# sourceMappingURL=passportSocket.js.map
@@ -0,0 +1 @@
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":"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"}
@@ -0,0 +1,83 @@
1
+ import type { Socket as WebSocketClient } from '@iobroker/ws-server';
2
+ import { type PermissionCommands, type SocketSubscribeTypes, type SocketOperation, type SocketCallback } from '../types';
3
+ export declare const COMMANDS_PERMISSIONS: Record<PermissionCommands, {
4
+ type: 'object' | 'state' | 'users' | 'other' | 'file' | '';
5
+ operation: SocketOperation;
6
+ }>;
7
+ export type AdapterRating = {
8
+ rating: {
9
+ r: number;
10
+ c: number;
11
+ };
12
+ [version: string]: {
13
+ r: number;
14
+ c: number;
15
+ };
16
+ };
17
+ export type Ratings = {
18
+ [adapterName: string]: AdapterRating;
19
+ } & {
20
+ uuid: string;
21
+ };
22
+ export type SupportedFeature = 'ALIAS' | 'ALIAS_SEPARATE_READ_WRITE_ID' | 'ADAPTER_GETPORT_BIND' | 'ADAPTER_DEL_OBJECT_RECURSIVE' | 'ADAPTER_SET_OBJECT_SETS_DEFAULT_VALUE' | 'ADAPTER_AUTO_DECRYPT_NATIVE' | 'PLUGINS' | 'CONTROLLER_NPM_AUTO_REBUILD' | 'CONTROLLER_READWRITE_BASE_SETTINGS' | 'CONTROLLER_MULTI_REPO' | 'CONTROLLER_LICENSE_MANAGER' | 'CONTROLLER_OS_PACKAGE_UPGRADE' | 'DEL_INSTANCE_CUSTOM' | 'CUSTOM_FULL_VIEW' | 'ADAPTER_GET_OBJECTS_BY_ARRAY' | 'CONTROLLER_UI_UPGRADE' | 'ADAPTER_WEBSERVER_UPGRADE' | 'INSTANCE_MESSAGES' | 'PARTIAL_OBJECT_TREE';
23
+ export interface SocketDataContext {
24
+ language: ioBroker.Languages;
25
+ ratings: Ratings | null;
26
+ ratingTimeout: NodeJS.Timeout | null;
27
+ }
28
+ export declare class SocketCommands {
29
+ #private;
30
+ static ERROR_PERMISSION: string;
31
+ static COMMANDS_PERMISSIONS: Record<string, {
32
+ type: 'object' | 'state' | 'users' | 'other' | 'file' | '';
33
+ operation: SocketOperation;
34
+ }>;
35
+ protected adapter: ioBroker.Adapter;
36
+ protected context: SocketDataContext;
37
+ protected commands: Record<string, (socket: WebSocketClient, ...args: any[]) => void>;
38
+ protected subscribes: Record<string, Record<string, number>>;
39
+ adapterName: string | undefined;
40
+ protected _sendToHost: ((id: string, command: string, data: any, callback: (result: {
41
+ error?: string;
42
+ result?: any;
43
+ }) => void) => void) | null;
44
+ states: Record<string, ioBroker.State> | undefined;
45
+ constructor(adapter: ioBroker.Adapter, updateSession: (socket: WebSocketClient) => boolean, context: SocketDataContext);
46
+ /**
47
+ * Convert errors into strings and then call cb
48
+ *
49
+ * @param callback Callback function
50
+ * @param error Error
51
+ * @param args Arguments passed to callback
52
+ */
53
+ static _fixCallback(callback: SocketCallback | null | undefined, error: string | Error | null | undefined, ...args: any[]): void;
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 | null | undefined): boolean;
56
+ publishFile(socket: WebSocketClient, id: string, fileName: string, size: number): boolean;
57
+ publishInstanceMessage(socket: WebSocketClient, sourceInstance: string, messageType: string, data: any): boolean;
58
+ _showSubscribes(socket: WebSocketClient, type: SocketSubscribeTypes): void;
59
+ isLogEnabled(): boolean;
60
+ subscribe(socket: WebSocketClient | null, type: SocketSubscribeTypes, pattern: string, patternFile?: string): void;
61
+ unsubscribe(socket: WebSocketClient, type: SocketSubscribeTypes, pattern: string, patternFile?: string): void;
62
+ subscribeSocket(socket: WebSocketClient, type?: SocketSubscribeTypes): void;
63
+ unsubscribeSocket(socket: WebSocketClient, type?: SocketSubscribeTypes): void;
64
+ _unsubscribeFiles(socket: WebSocketClient, id: string, pattern: string | string[], callback?: (error: string | null) => void): void;
65
+ addCommandHandler(command: string, handler: (socket: WebSocketClient, ...args: any[]) => void): void;
66
+ getCommandHandler(command: string): (socket: WebSocketClient, ...args: any[]) => void;
67
+ /**
68
+ * Converts old structures of config definitions into new one - `adminUI`
69
+ *
70
+ * @param obj Instance or adapter object to be converted
71
+ */
72
+ protected fixAdminUI(obj: ioBroker.AdapterObject | ioBroker.InstanceObject): void;
73
+ protected _initCommandsCommon(): void;
74
+ /** Init commands for files */
75
+ protected _initCommandsFiles(): void;
76
+ /** Init commands for states */
77
+ protected _initCommandsStates(): void;
78
+ /** Init commands for objects */
79
+ protected _initCommandsObjects(): void;
80
+ applyCommands(socket: WebSocketClient): void;
81
+ disableEventThreshold(): void;
82
+ destroy(): void;
83
+ }