streamer-node 1.0.0
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 +11 -0
- package/dist/public/client.png +0 -0
- package/dist/public/ds.png +0 -0
- package/dist/src/application/interfaces/Logger.d.ts +7 -0
- package/dist/src/application/interfaces/Logger.d.ts.map +1 -0
- package/dist/src/application/interfaces/Logger.js +3 -0
- package/dist/src/application/interfaces/Logger.js.map +1 -0
- package/dist/src/application/interfaces/StartStreamUseCase.types.d.ts +36 -0
- package/dist/src/application/interfaces/StartStreamUseCase.types.d.ts.map +1 -0
- package/dist/src/application/interfaces/StartStreamUseCase.types.js +12 -0
- package/dist/src/application/interfaces/StartStreamUseCase.types.js.map +1 -0
- package/dist/src/application/services/HttpClient.d.ts +5 -0
- package/dist/src/application/services/HttpClient.d.ts.map +1 -0
- package/dist/src/application/services/HttpClient.js +30 -0
- package/dist/src/application/services/HttpClient.js.map +1 -0
- package/dist/src/application/services/StreamManagerService.d.ts +38 -0
- package/dist/src/application/services/StreamManagerService.d.ts.map +1 -0
- package/dist/src/application/services/StreamManagerService.js +298 -0
- package/dist/src/application/services/StreamManagerService.js.map +1 -0
- package/dist/src/application/use-cases/StartStreamUseCase.d.ts +27 -0
- package/dist/src/application/use-cases/StartStreamUseCase.d.ts.map +1 -0
- package/dist/src/application/use-cases/StartStreamUseCase.js +195 -0
- package/dist/src/application/use-cases/StartStreamUseCase.js.map +1 -0
- package/dist/src/application/use-cases/StopStreamUseCase.d.ts +18 -0
- package/dist/src/application/use-cases/StopStreamUseCase.d.ts.map +1 -0
- package/dist/src/application/use-cases/StopStreamUseCase.js +96 -0
- package/dist/src/application/use-cases/StopStreamUseCase.js.map +1 -0
- package/dist/src/domain/entities/Stream.d.ts +40 -0
- package/dist/src/domain/entities/Stream.d.ts.map +1 -0
- package/dist/src/domain/entities/Stream.js +115 -0
- package/dist/src/domain/entities/Stream.js.map +1 -0
- package/dist/src/domain/events/StreamEvent.d.ts +48 -0
- package/dist/src/domain/events/StreamEvent.d.ts.map +1 -0
- package/dist/src/domain/events/StreamEvent.js +3 -0
- package/dist/src/domain/events/StreamEvent.js.map +1 -0
- package/dist/src/domain/repositories/StreamRepository.d.ts +41 -0
- package/dist/src/domain/repositories/StreamRepository.d.ts.map +1 -0
- package/dist/src/domain/repositories/StreamRepository.js +3 -0
- package/dist/src/domain/repositories/StreamRepository.js.map +1 -0
- package/dist/src/domain/services/FFmpegService.d.ts +42 -0
- package/dist/src/domain/services/FFmpegService.d.ts.map +1 -0
- package/dist/src/domain/services/FFmpegService.js +3 -0
- package/dist/src/domain/services/FFmpegService.js.map +1 -0
- package/dist/src/domain/services/SSEService.d.ts +42 -0
- package/dist/src/domain/services/SSEService.d.ts.map +1 -0
- package/dist/src/domain/services/SSEService.js +3 -0
- package/dist/src/domain/services/SSEService.js.map +1 -0
- package/dist/src/domain/value-objects/StreamId.d.ts +10 -0
- package/dist/src/domain/value-objects/StreamId.d.ts.map +1 -0
- package/dist/src/domain/value-objects/StreamId.js +31 -0
- package/dist/src/domain/value-objects/StreamId.js.map +1 -0
- package/dist/src/domain/value-objects/StreamState.d.ts +12 -0
- package/dist/src/domain/value-objects/StreamState.d.ts.map +1 -0
- package/dist/src/domain/value-objects/StreamState.js +35 -0
- package/dist/src/domain/value-objects/StreamState.js.map +1 -0
- package/dist/src/domain/value-objects/StreamUrl.d.ts +12 -0
- package/dist/src/domain/value-objects/StreamUrl.d.ts.map +1 -0
- package/dist/src/domain/value-objects/StreamUrl.js +48 -0
- package/dist/src/domain/value-objects/StreamUrl.js.map +1 -0
- package/dist/src/infrastructure/config/Config.d.ts +42 -0
- package/dist/src/infrastructure/config/Config.d.ts.map +1 -0
- package/dist/src/infrastructure/config/Config.js +113 -0
- package/dist/src/infrastructure/config/Config.js.map +1 -0
- package/dist/src/infrastructure/logging/ConsoleLogger.d.ts +12 -0
- package/dist/src/infrastructure/logging/ConsoleLogger.d.ts.map +1 -0
- package/dist/src/infrastructure/logging/ConsoleLogger.js +41 -0
- package/dist/src/infrastructure/logging/ConsoleLogger.js.map +1 -0
- package/dist/src/infrastructure/logging/LogBuffer.d.ts +20 -0
- package/dist/src/infrastructure/logging/LogBuffer.d.ts.map +1 -0
- package/dist/src/infrastructure/logging/LogBuffer.js +95 -0
- package/dist/src/infrastructure/logging/LogBuffer.js.map +1 -0
- package/dist/src/infrastructure/logging/LogShippingService.d.ts +23 -0
- package/dist/src/infrastructure/logging/LogShippingService.d.ts.map +1 -0
- package/dist/src/infrastructure/logging/LogShippingService.js +128 -0
- package/dist/src/infrastructure/logging/LogShippingService.js.map +1 -0
- package/dist/src/infrastructure/logging/RemoteLogger.d.ts +37 -0
- package/dist/src/infrastructure/logging/RemoteLogger.d.ts.map +1 -0
- package/dist/src/infrastructure/logging/RemoteLogger.js +120 -0
- package/dist/src/infrastructure/logging/RemoteLogger.js.map +1 -0
- package/dist/src/infrastructure/logging/types/LogTypes.d.ts +27 -0
- package/dist/src/infrastructure/logging/types/LogTypes.d.ts.map +1 -0
- package/dist/src/infrastructure/logging/types/LogTypes.js +3 -0
- package/dist/src/infrastructure/logging/types/LogTypes.js.map +1 -0
- package/dist/src/infrastructure/repositories/FileSystemStreamRepository.d.ts +22 -0
- package/dist/src/infrastructure/repositories/FileSystemStreamRepository.d.ts.map +1 -0
- package/dist/src/infrastructure/repositories/FileSystemStreamRepository.js +212 -0
- package/dist/src/infrastructure/repositories/FileSystemStreamRepository.js.map +1 -0
- package/dist/src/infrastructure/services/NodeFFmpegService.d.ts +17 -0
- package/dist/src/infrastructure/services/NodeFFmpegService.d.ts.map +1 -0
- package/dist/src/infrastructure/services/NodeFFmpegService.js +306 -0
- package/dist/src/infrastructure/services/NodeFFmpegService.js.map +1 -0
- package/dist/src/infrastructure/services/NodeSSEService.d.ts +30 -0
- package/dist/src/infrastructure/services/NodeSSEService.d.ts.map +1 -0
- package/dist/src/infrastructure/services/NodeSSEService.js +268 -0
- package/dist/src/infrastructure/services/NodeSSEService.js.map +1 -0
- package/dist/src/main.d.ts +3 -0
- package/dist/src/main.d.ts.map +1 -0
- package/dist/src/main.js +87 -0
- package/dist/src/main.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":""}
|
package/dist/src/main.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const Config_1 = require("./infrastructure/config/Config");
|
|
5
|
+
const FileSystemStreamRepository_1 = require("./infrastructure/repositories/FileSystemStreamRepository");
|
|
6
|
+
const NodeFFmpegService_1 = require("./infrastructure/services/NodeFFmpegService");
|
|
7
|
+
const NodeSSEService_1 = require("./infrastructure/services/NodeSSEService");
|
|
8
|
+
const StartStreamUseCase_1 = require("./application/use-cases/StartStreamUseCase");
|
|
9
|
+
const StopStreamUseCase_1 = require("./application/use-cases/StopStreamUseCase");
|
|
10
|
+
const StreamManagerService_1 = require("./application/services/StreamManagerService");
|
|
11
|
+
const HttpClient_1 = require("./application/services/HttpClient");
|
|
12
|
+
const RemoteLogger_1 = require("./infrastructure/logging/RemoteLogger");
|
|
13
|
+
class Application {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.logger = new RemoteLogger_1.RemoteLogger({
|
|
16
|
+
...Config_1.Config.getInstance().get().remoteLogging,
|
|
17
|
+
baseUrl: Config_1.Config.getInstance().get().server.baseUrl,
|
|
18
|
+
}, "debug");
|
|
19
|
+
this.httpClient = new HttpClient_1.HttpClient();
|
|
20
|
+
}
|
|
21
|
+
async start() {
|
|
22
|
+
try {
|
|
23
|
+
this.logger.info("Starting Streamer Node Application");
|
|
24
|
+
// Initialize configuration
|
|
25
|
+
const config = Config_1.Config.getInstance();
|
|
26
|
+
this.logger.info("Configuration loaded", { config: config.get() });
|
|
27
|
+
// Initialize dependencies
|
|
28
|
+
const streamRepository = new FileSystemStreamRepository_1.FileSystemStreamRepository(config.get().stream.persistentStateDir, this.logger);
|
|
29
|
+
const ffmpegService = new NodeFFmpegService_1.NodeFFmpegService(this.logger);
|
|
30
|
+
const sseService = new NodeSSEService_1.NodeSSEService(this.logger);
|
|
31
|
+
// Initialize use cases
|
|
32
|
+
const startStreamUseCase = new StartStreamUseCase_1.StartStreamUseCase(streamRepository, ffmpegService, this.logger, this.httpClient);
|
|
33
|
+
const stopStreamUseCase = new StopStreamUseCase_1.StopStreamUseCase(streamRepository, ffmpegService, this.logger);
|
|
34
|
+
// Initialize stream manager
|
|
35
|
+
this.streamManager = new StreamManagerService_1.StreamManagerService(streamRepository, ffmpegService, sseService, startStreamUseCase, stopStreamUseCase, this.logger, config);
|
|
36
|
+
// Start the stream manager
|
|
37
|
+
await this.streamManager.start();
|
|
38
|
+
this.logger.info("Streamer Node Application started successfully");
|
|
39
|
+
// Setup graceful shutdown
|
|
40
|
+
this.setupGracefulShutdown();
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
this.logger.error("Failed to start application", {
|
|
44
|
+
error: error instanceof Error ? error.message : String(error),
|
|
45
|
+
});
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
setupGracefulShutdown() {
|
|
50
|
+
const shutdown = async (signal) => {
|
|
51
|
+
this.logger.info(`Received ${signal}, shutting down gracefully`);
|
|
52
|
+
try {
|
|
53
|
+
if (this.streamManager) {
|
|
54
|
+
await this.streamManager.stop();
|
|
55
|
+
}
|
|
56
|
+
this.logger.info("Application shutdown completed");
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
this.logger.error("Error during shutdown", {
|
|
61
|
+
error: error instanceof Error ? error.message : String(error),
|
|
62
|
+
});
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
// Handle different shutdown signals
|
|
67
|
+
process.on("SIGTERM", () => shutdown("SIGTERM"));
|
|
68
|
+
process.on("SIGINT", () => shutdown("SIGINT"));
|
|
69
|
+
process.on("SIGUSR2", () => shutdown("SIGUSR2")); // nodemon restart
|
|
70
|
+
// Handle uncaught exceptions
|
|
71
|
+
process.on("uncaughtException", (error) => {
|
|
72
|
+
this.logger.error("Uncaught exception", { error: error.message });
|
|
73
|
+
process.exit(1);
|
|
74
|
+
});
|
|
75
|
+
process.on("unhandledRejection", (reason) => {
|
|
76
|
+
this.logger.error("Unhandled rejection", { reason });
|
|
77
|
+
process.exit(1);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Start the application
|
|
82
|
+
const app = new Application();
|
|
83
|
+
app.start().catch((error) => {
|
|
84
|
+
console.error("Failed to start application:", error);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;AAEA,2DAAwD;AACxD,yGAAsG;AACtG,mFAAgF;AAChF,6EAA0E;AAC1E,mFAAgF;AAChF,iFAA8E;AAC9E,sFAAmF;AACnF,kEAA+D;AAC/D,wEAAqE;AAErE,MAAM,WAAW;IAAjB;QAEmB,WAAM,GAAG,IAAI,2BAAY,CACxC;YACE,GAAG,eAAM,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,aAAa;YAC3C,OAAO,EAAE,eAAM,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO;SACnD,EACD,OAAO,CACR,CAAC;QACe,eAAU,GAAG,IAAI,uBAAU,EAAE,CAAC;IA4FjD,CAAC;IA1FQ,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YAEvD,2BAA2B;YAC3B,MAAM,MAAM,GAAG,eAAM,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAEnE,0BAA0B;YAC1B,MAAM,gBAAgB,GAAG,IAAI,uDAA0B,CACrD,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,EACtC,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,aAAa,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,IAAI,+BAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEnD,uBAAuB;YACvB,MAAM,kBAAkB,GAAG,IAAI,uCAAkB,CAC/C,gBAAgB,EAChB,aAAa,EACb,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,CAChB,CAAC;YAEF,MAAM,iBAAiB,GAAG,IAAI,qCAAiB,CAC7C,gBAAgB,EAChB,aAAa,EACb,IAAI,CAAC,MAAM,CACZ,CAAC;YAEF,4BAA4B;YAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,2CAAoB,CAC3C,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,IAAI,CAAC,MAAM,EACX,MAAM,CACP,CAAC;YAEF,2BAA2B;YAC3B,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAEjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAEnE,0BAA0B;YAC1B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;gBAC/C,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,qBAAqB;QAC3B,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,4BAA4B,CAAC,CAAC;YAEjE,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;gBAClC,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;oBACzC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QAEF,oCAAoC;QACpC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,kBAAkB;QAEpE,6BAA6B;QAC7B,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;YACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,wBAAwB;AACxB,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;AAC9B,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1B,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "streamer-node",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A lightweight TypeScript streaming system with Clean Architecture",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"streamer-node": "./dist/src/main.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "npx tsc && cp -r public dist/",
|
|
17
|
+
"start": "node dist/src/main.js",
|
|
18
|
+
"dev": "npm run build && npm start",
|
|
19
|
+
"monitor": "bash -c 'npm run dev 2>&1 | tee >(grep -E \"ERROR|WARN|INFO\" > node.logs) >(grep \"DEBUG\" | grep -v \"frame=\" > ffmpeg.logs)'",
|
|
20
|
+
"logs:clear": "rm -f node.logs ffmpeg.logs",
|
|
21
|
+
"clean": "rm -rf dist coverage",
|
|
22
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"streaming",
|
|
26
|
+
"ffmpeg",
|
|
27
|
+
"sse",
|
|
28
|
+
"clean-architecture",
|
|
29
|
+
"typescript",
|
|
30
|
+
"video-streaming"
|
|
31
|
+
],
|
|
32
|
+
"author": "DropShot <dropshotlive@gmail.com>",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/MHA10/drop-shot-streaming-scripts-ubuntu"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/MHA10/drop-shot-streaming-scripts-ubuntu/issues"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/MHA10/drop-shot-streaming-scripts-ubuntu#readme",
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": ">=16.0.0"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"dotenv": "^16.3.1"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^20.0.0",
|
|
50
|
+
"typescript": "^5.0.0"
|
|
51
|
+
}
|
|
52
|
+
}
|