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.
Files changed (100) hide show
  1. package/README.md +11 -0
  2. package/dist/public/client.png +0 -0
  3. package/dist/public/ds.png +0 -0
  4. package/dist/src/application/interfaces/Logger.d.ts +7 -0
  5. package/dist/src/application/interfaces/Logger.d.ts.map +1 -0
  6. package/dist/src/application/interfaces/Logger.js +3 -0
  7. package/dist/src/application/interfaces/Logger.js.map +1 -0
  8. package/dist/src/application/interfaces/StartStreamUseCase.types.d.ts +36 -0
  9. package/dist/src/application/interfaces/StartStreamUseCase.types.d.ts.map +1 -0
  10. package/dist/src/application/interfaces/StartStreamUseCase.types.js +12 -0
  11. package/dist/src/application/interfaces/StartStreamUseCase.types.js.map +1 -0
  12. package/dist/src/application/services/HttpClient.d.ts +5 -0
  13. package/dist/src/application/services/HttpClient.d.ts.map +1 -0
  14. package/dist/src/application/services/HttpClient.js +30 -0
  15. package/dist/src/application/services/HttpClient.js.map +1 -0
  16. package/dist/src/application/services/StreamManagerService.d.ts +38 -0
  17. package/dist/src/application/services/StreamManagerService.d.ts.map +1 -0
  18. package/dist/src/application/services/StreamManagerService.js +298 -0
  19. package/dist/src/application/services/StreamManagerService.js.map +1 -0
  20. package/dist/src/application/use-cases/StartStreamUseCase.d.ts +27 -0
  21. package/dist/src/application/use-cases/StartStreamUseCase.d.ts.map +1 -0
  22. package/dist/src/application/use-cases/StartStreamUseCase.js +195 -0
  23. package/dist/src/application/use-cases/StartStreamUseCase.js.map +1 -0
  24. package/dist/src/application/use-cases/StopStreamUseCase.d.ts +18 -0
  25. package/dist/src/application/use-cases/StopStreamUseCase.d.ts.map +1 -0
  26. package/dist/src/application/use-cases/StopStreamUseCase.js +96 -0
  27. package/dist/src/application/use-cases/StopStreamUseCase.js.map +1 -0
  28. package/dist/src/domain/entities/Stream.d.ts +40 -0
  29. package/dist/src/domain/entities/Stream.d.ts.map +1 -0
  30. package/dist/src/domain/entities/Stream.js +115 -0
  31. package/dist/src/domain/entities/Stream.js.map +1 -0
  32. package/dist/src/domain/events/StreamEvent.d.ts +48 -0
  33. package/dist/src/domain/events/StreamEvent.d.ts.map +1 -0
  34. package/dist/src/domain/events/StreamEvent.js +3 -0
  35. package/dist/src/domain/events/StreamEvent.js.map +1 -0
  36. package/dist/src/domain/repositories/StreamRepository.d.ts +41 -0
  37. package/dist/src/domain/repositories/StreamRepository.d.ts.map +1 -0
  38. package/dist/src/domain/repositories/StreamRepository.js +3 -0
  39. package/dist/src/domain/repositories/StreamRepository.js.map +1 -0
  40. package/dist/src/domain/services/FFmpegService.d.ts +42 -0
  41. package/dist/src/domain/services/FFmpegService.d.ts.map +1 -0
  42. package/dist/src/domain/services/FFmpegService.js +3 -0
  43. package/dist/src/domain/services/FFmpegService.js.map +1 -0
  44. package/dist/src/domain/services/SSEService.d.ts +42 -0
  45. package/dist/src/domain/services/SSEService.d.ts.map +1 -0
  46. package/dist/src/domain/services/SSEService.js +3 -0
  47. package/dist/src/domain/services/SSEService.js.map +1 -0
  48. package/dist/src/domain/value-objects/StreamId.d.ts +10 -0
  49. package/dist/src/domain/value-objects/StreamId.d.ts.map +1 -0
  50. package/dist/src/domain/value-objects/StreamId.js +31 -0
  51. package/dist/src/domain/value-objects/StreamId.js.map +1 -0
  52. package/dist/src/domain/value-objects/StreamState.d.ts +12 -0
  53. package/dist/src/domain/value-objects/StreamState.d.ts.map +1 -0
  54. package/dist/src/domain/value-objects/StreamState.js +35 -0
  55. package/dist/src/domain/value-objects/StreamState.js.map +1 -0
  56. package/dist/src/domain/value-objects/StreamUrl.d.ts +12 -0
  57. package/dist/src/domain/value-objects/StreamUrl.d.ts.map +1 -0
  58. package/dist/src/domain/value-objects/StreamUrl.js +48 -0
  59. package/dist/src/domain/value-objects/StreamUrl.js.map +1 -0
  60. package/dist/src/infrastructure/config/Config.d.ts +42 -0
  61. package/dist/src/infrastructure/config/Config.d.ts.map +1 -0
  62. package/dist/src/infrastructure/config/Config.js +113 -0
  63. package/dist/src/infrastructure/config/Config.js.map +1 -0
  64. package/dist/src/infrastructure/logging/ConsoleLogger.d.ts +12 -0
  65. package/dist/src/infrastructure/logging/ConsoleLogger.d.ts.map +1 -0
  66. package/dist/src/infrastructure/logging/ConsoleLogger.js +41 -0
  67. package/dist/src/infrastructure/logging/ConsoleLogger.js.map +1 -0
  68. package/dist/src/infrastructure/logging/LogBuffer.d.ts +20 -0
  69. package/dist/src/infrastructure/logging/LogBuffer.d.ts.map +1 -0
  70. package/dist/src/infrastructure/logging/LogBuffer.js +95 -0
  71. package/dist/src/infrastructure/logging/LogBuffer.js.map +1 -0
  72. package/dist/src/infrastructure/logging/LogShippingService.d.ts +23 -0
  73. package/dist/src/infrastructure/logging/LogShippingService.d.ts.map +1 -0
  74. package/dist/src/infrastructure/logging/LogShippingService.js +128 -0
  75. package/dist/src/infrastructure/logging/LogShippingService.js.map +1 -0
  76. package/dist/src/infrastructure/logging/RemoteLogger.d.ts +37 -0
  77. package/dist/src/infrastructure/logging/RemoteLogger.d.ts.map +1 -0
  78. package/dist/src/infrastructure/logging/RemoteLogger.js +120 -0
  79. package/dist/src/infrastructure/logging/RemoteLogger.js.map +1 -0
  80. package/dist/src/infrastructure/logging/types/LogTypes.d.ts +27 -0
  81. package/dist/src/infrastructure/logging/types/LogTypes.d.ts.map +1 -0
  82. package/dist/src/infrastructure/logging/types/LogTypes.js +3 -0
  83. package/dist/src/infrastructure/logging/types/LogTypes.js.map +1 -0
  84. package/dist/src/infrastructure/repositories/FileSystemStreamRepository.d.ts +22 -0
  85. package/dist/src/infrastructure/repositories/FileSystemStreamRepository.d.ts.map +1 -0
  86. package/dist/src/infrastructure/repositories/FileSystemStreamRepository.js +212 -0
  87. package/dist/src/infrastructure/repositories/FileSystemStreamRepository.js.map +1 -0
  88. package/dist/src/infrastructure/services/NodeFFmpegService.d.ts +17 -0
  89. package/dist/src/infrastructure/services/NodeFFmpegService.d.ts.map +1 -0
  90. package/dist/src/infrastructure/services/NodeFFmpegService.js +306 -0
  91. package/dist/src/infrastructure/services/NodeFFmpegService.js.map +1 -0
  92. package/dist/src/infrastructure/services/NodeSSEService.d.ts +30 -0
  93. package/dist/src/infrastructure/services/NodeSSEService.d.ts.map +1 -0
  94. package/dist/src/infrastructure/services/NodeSSEService.js +268 -0
  95. package/dist/src/infrastructure/services/NodeSSEService.js.map +1 -0
  96. package/dist/src/main.d.ts +3 -0
  97. package/dist/src/main.d.ts.map +1 -0
  98. package/dist/src/main.js +87 -0
  99. package/dist/src/main.js.map +1 -0
  100. package/package.json +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":""}
@@ -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":"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"}
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
+ }