iobroker.eusec 0.8.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,224 @@
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.ffmpegRTMPToHls = exports.ffmpegStreamToHls = exports.ffmpegPreviewImage = exports.StreamOutput = exports.StreamInput = void 0;
7
+ const net_1 = __importDefault(require("net"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const fluent_ffmpeg_1 = __importDefault(require("@bropat/fluent-ffmpeg"));
10
+ const ffmpeg_static_1 = __importDefault(require("ffmpeg-static"));
11
+ const eufy_security_client_1 = require("eufy-security-client");
12
+ const os_1 = require("os");
13
+ const fs_extra_1 = __importDefault(require("fs-extra"));
14
+ const utils_1 = require("./utils");
15
+ class UniversalStream {
16
+ constructor(namespace, onSocket) {
17
+ let sockpath = "";
18
+ const unique_sock_id = (0, utils_1.lowestUnusedNumber)([...UniversalStream.socks], 1);
19
+ UniversalStream.socks.add(unique_sock_id);
20
+ this.sock_id = unique_sock_id;
21
+ if (process.platform === "win32") {
22
+ const pipePrefix = "\\\\.\\pipe\\";
23
+ const pipeName = `node-webrtc.${namespace}.${unique_sock_id}.sock`;
24
+ sockpath = path_1.default.join(pipePrefix, pipeName);
25
+ this.url = sockpath;
26
+ }
27
+ else {
28
+ const pipeName = `${namespace}.${unique_sock_id}.sock`;
29
+ sockpath = path_1.default.join((0, os_1.tmpdir)(), pipeName);
30
+ this.url = "unix:" + sockpath;
31
+ try {
32
+ if (fs_extra_1.default.existsSync(sockpath))
33
+ fs_extra_1.default.unlinkSync(sockpath);
34
+ }
35
+ catch (error) {
36
+ }
37
+ }
38
+ this.server = net_1.default.createServer(onSocket);
39
+ this.server.listen(sockpath);
40
+ }
41
+ close() {
42
+ if (this.server)
43
+ this.server.close();
44
+ UniversalStream.socks.delete(this.sock_id);
45
+ }
46
+ }
47
+ UniversalStream.socks = new Set();
48
+ const StreamInput = function (namespace, stream) {
49
+ return new UniversalStream(namespace, (socket) => stream.pipe(socket, { end: true }));
50
+ };
51
+ exports.StreamInput = StreamInput;
52
+ const StreamOutput = function (namespace, stream) {
53
+ return new UniversalStream(namespace, (socket) => socket.pipe(stream, { end: true }));
54
+ };
55
+ exports.StreamOutput = StreamOutput;
56
+ const ffmpegPreviewImage = (config, input, output, log, skip_seconds = 2.0) => {
57
+ return new Promise((resolve, reject) => {
58
+ try {
59
+ fluent_ffmpeg_1.default.setFfmpegPath(ffmpeg_static_1.default);
60
+ (0, fluent_ffmpeg_1.default)()
61
+ .withProcessOptions({
62
+ detached: true
63
+ })
64
+ .addOptions([
65
+ `-ss ${skip_seconds}`,
66
+ "-frames:v 1"
67
+ ])
68
+ .input(input)
69
+ .inputFormat("hls")
70
+ .outputFormat("image2")
71
+ .output(output)
72
+ .on("error", function (err, stdout, stderr) {
73
+ log.error(`ffmpegPreviewImage(): An error occurred: ${err.message}`);
74
+ log.error(`ffmpegPreviewImage(): ffmpeg output:\n${stdout}`);
75
+ log.error(`ffmpegPreviewImage(): ffmpeg stderr:\n${stderr}`);
76
+ reject(err);
77
+ })
78
+ .on("end", () => {
79
+ log.debug("ffmpegPreviewImage(): Preview image generated!");
80
+ resolve();
81
+ })
82
+ .run();
83
+ }
84
+ catch (error) {
85
+ log.error(`ffmpegPreviewImage(): Error: ${error}`);
86
+ reject(error);
87
+ }
88
+ });
89
+ };
90
+ exports.ffmpegPreviewImage = ffmpegPreviewImage;
91
+ const ffmpegStreamToHls = (config, namespace, metadata, videoStream, audioStream, output, log) => {
92
+ return new Promise((resolve, reject) => {
93
+ try {
94
+ fluent_ffmpeg_1.default.setFfmpegPath(ffmpeg_static_1.default);
95
+ videoStream.on("error", (error) => {
96
+ log.error("ffmpegStreamToHls(): Videostream Error", error);
97
+ });
98
+ audioStream.on("error", (error) => {
99
+ log.error("ffmpegStreamToHls(): Audiostream Error", error);
100
+ });
101
+ const uVideoStream = (0, exports.StreamInput)(namespace, videoStream);
102
+ const uAudioStream = (0, exports.StreamInput)(namespace, audioStream);
103
+ let videoFormat = "h264";
104
+ let audioFormat = "";
105
+ const options = [
106
+ "-hls_init_time 0",
107
+ "-hls_time 2",
108
+ "-hls_segment_type mpegts",
109
+ //"-start_number 1",
110
+ "-sc_threshold 0",
111
+ `-g ${metadata.videoFPS}`,
112
+ "-fflags genpts+nobuffer+flush_packets",
113
+ //"-flush_packets 1",
114
+ "-hls_playlist_type event"
115
+ //"-hls_flags split_by_time"
116
+ ];
117
+ switch (metadata.videoCodec) {
118
+ case eufy_security_client_1.VideoCodec.H264:
119
+ videoFormat = "h264";
120
+ break;
121
+ case eufy_security_client_1.VideoCodec.H265:
122
+ videoFormat = "hevc";
123
+ break;
124
+ }
125
+ switch (metadata.audioCodec) {
126
+ case eufy_security_client_1.AudioCodec.AAC:
127
+ audioFormat = "aac";
128
+ break;
129
+ }
130
+ const command = (0, fluent_ffmpeg_1.default)()
131
+ .withProcessOptions({
132
+ detached: true
133
+ })
134
+ .input(uVideoStream.url)
135
+ .inputFormat(videoFormat)
136
+ .inputFps(metadata.videoFPS);
137
+ if (audioFormat !== "") {
138
+ command.input(uAudioStream.url)
139
+ .inputFormat(audioFormat)
140
+ .videoCodec("copy")
141
+ .audioCodec("copy");
142
+ options.push("-absf aac_adtstoasc");
143
+ }
144
+ else {
145
+ log.warn(`ffmpegStreamToHls(): Not support audio codec or unknown audio codec (${eufy_security_client_1.AudioCodec[metadata.audioCodec]})`);
146
+ }
147
+ command.output(output)
148
+ .addOptions(options)
149
+ .on("error", function (err, stdout, stderr) {
150
+ log.error(`ffmpegStreamToHls(): An error occurred: ${err.message}`);
151
+ log.error(`ffmpegStreamToHls(): ffmpeg output:\n${stdout}`);
152
+ log.error(`ffmpegStreamToHls(): ffmpeg stderr:\n${stderr}`);
153
+ uVideoStream.close();
154
+ uAudioStream.close();
155
+ reject(err);
156
+ })
157
+ .on("end", () => {
158
+ log.debug("ffmpegStreamToHls(): Processing finished!");
159
+ uVideoStream.close();
160
+ uAudioStream.close();
161
+ resolve();
162
+ });
163
+ command.run();
164
+ }
165
+ catch (error) {
166
+ log.error(`ffmpegStreamToHls(): Error: ${error}`);
167
+ reject(error);
168
+ }
169
+ });
170
+ };
171
+ exports.ffmpegStreamToHls = ffmpegStreamToHls;
172
+ const ffmpegRTMPToHls = (config, rtmp_url, output, log) => {
173
+ let resolveCb;
174
+ let ffmpegCommand;
175
+ const rtmpPromise = new Promise((resolve, reject) => {
176
+ resolveCb = resolve;
177
+ try {
178
+ fluent_ffmpeg_1.default.setFfmpegPath(ffmpeg_static_1.default);
179
+ ffmpegCommand = (0, fluent_ffmpeg_1.default)(rtmp_url)
180
+ .withProcessOptions({
181
+ detached: true
182
+ })
183
+ .videoCodec("copy")
184
+ .audioCodec("copy")
185
+ .output(output)
186
+ .addOptions([
187
+ "-hls_init_time 0",
188
+ "-hls_time 2",
189
+ "-hls_segment_type mpegts",
190
+ "-absf aac_adtstoasc",
191
+ //"-start_number 1",
192
+ "-sc_threshold 0",
193
+ "-g 15",
194
+ "-fflags genpts+nobuffer+flush_packets",
195
+ //"-flush_packets 1",
196
+ "-hls_playlist_type event"
197
+ ])
198
+ .on("error", function (err, stdout, stderr) {
199
+ log.error(`ffmpegRTMPToHls(): An error occurred: ${err.message}`);
200
+ log.error(`ffmpegRTMPToHls(): ffmpeg output:\n${stdout}`);
201
+ log.error(`ffmpegRTMPToHls(): ffmpeg stderr:\n${stderr}`);
202
+ reject(err);
203
+ })
204
+ .on("end", () => {
205
+ log.debug("ffmpegRTMPToHls(): Processing finished!");
206
+ resolve();
207
+ });
208
+ ffmpegCommand.run();
209
+ }
210
+ catch (error) {
211
+ log.error(`ffmpegRTMPToHls(): Error: ${error}`);
212
+ reject(error);
213
+ }
214
+ });
215
+ rtmpPromise.stop = () => {
216
+ ffmpegCommand.removeAllListeners();
217
+ //ffmpegCommand.kill("SIGINT");
218
+ ffmpegCommand.quit();
219
+ resolveCb();
220
+ };
221
+ return rtmpPromise;
222
+ };
223
+ exports.ffmpegRTMPToHls = ffmpegRTMPToHls;
224
+ //# sourceMappingURL=video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/lib/video.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const path_1 = __importDefault(require("path"));
26
+ const fs_1 = __importDefault(require("fs"));
27
+ const mime_1 = __importDefault(require("mime"));
28
+ const utils = __importStar(require("@iobroker/adapter-core"));
29
+ /**
30
+ * ProxyEufySecurity class
31
+ *
32
+ * Reads files from localhost server
33
+ *
34
+ * @class
35
+ * @param {object} server http or https node.js object
36
+ * @param {object} webSettings settings of the web server, like <pre><code>{secure: settings.secure, port: settings.port}</code></pre>
37
+ * @param {object} adapter web adapter object
38
+ * @param {object} instanceSettings instance object with common and native
39
+ * @param {object} app express application
40
+ * @return {object} object instance
41
+ */
42
+ class ProxyEufySecurity {
43
+ constructor(server, webSettings, adapter, instanceSettings, app) {
44
+ this.app = app;
45
+ this.config = instanceSettings ? instanceSettings.native : {};
46
+ this.namespace = instanceSettings ? instanceSettings._id.substring("system.adapter.".length) : "eufy-security";
47
+ this.config.route = this.config.route || (this.namespace + "/");
48
+ this.config.port = parseInt(this.config.port, 10) || 80;
49
+ // remove leading slash
50
+ if (this.config.route[0] === "/") {
51
+ this.config.route = this.config.route.substr(1);
52
+ }
53
+ const root_path = path_1.default.join(utils.getAbsoluteDefaultDataDir(), this.namespace);
54
+ this.app.use("/" + this.config.route, (req, res) => {
55
+ const fileName = path_1.default.join(root_path, req.url.substring(1));
56
+ const normalized_filename = path_1.default.resolve(fileName);
57
+ if (normalized_filename.startsWith(root_path)) {
58
+ res.setHeader("Access-Control-Allow-Origin", "*");
59
+ res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
60
+ if (fs_1.default.existsSync(normalized_filename)) {
61
+ const stat = fs_1.default.statSync(normalized_filename);
62
+ if (!stat.isDirectory()) {
63
+ let data;
64
+ try {
65
+ data = fs_1.default.readFileSync(normalized_filename);
66
+ }
67
+ catch (e) {
68
+ res.status(500).send(`[eufy-security] Cannot read file: ${e}`);
69
+ return;
70
+ }
71
+ res.contentType(mime_1.default.getType(path_1.default.extname(normalized_filename).substring(1)) || "html");
72
+ res.status(200).send(data);
73
+ }
74
+ }
75
+ else {
76
+ res.status(404).send('[eufy-security] File "' + normalized_filename + '" not found.');
77
+ }
78
+ }
79
+ else {
80
+ res.status(403).send('[eufy-security] Access to file "' + normalized_filename + '" denied.');
81
+ }
82
+ });
83
+ }
84
+ }
85
+ module.exports = ProxyEufySecurity;
86
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/lib/web.ts"],"names":[],"mappings":"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"}