11/* global Module */
22
3+ /**
4+ * @file MagicMirror² Remote Control Module - Node Helper
5+ * @module node_helper
6+ */
7+
8+ /**
9+ * @typedef {import('./types').ModuleData } ModuleData
10+ * @typedef {import('./types').ConfigData } ConfigData
11+ * @typedef {import('./types').ModuleConfig } ModuleConfig
12+ * @typedef {import('./types').BackupInfo } BackupInfo
13+ * @typedef {import('./types').ApiResponse } ApiResponse
14+ */
15+
316/*
417 * MagicMirror²
518 * Module: Remote Control
@@ -97,6 +110,10 @@ module.exports = NodeHelper.create({
97110 this . loadTimers ( ) ;
98111 } ,
99112
113+ /**
114+ * Set up periodic timers for module list updates
115+ * @returns {void }
116+ */
100117 loadTimers ( ) {
101118 const delay = 24 * 3600 ;
102119
@@ -107,6 +124,11 @@ module.exports = NodeHelper.create({
107124 } , delay * 1000 ) ;
108125 } ,
109126
127+ /**
128+ * Combine default config with user config from config.js
129+ * Sets this.configOnHd and this.thisConfig
130+ * @returns {void }
131+ */
110132 combineConfig ( ) {
111133 // function copied from MagicMirrorOrg (MIT)
112134 const defaults = require ( `${ __dirname } /../../js/defaults.js` ) ;
@@ -140,6 +162,10 @@ module.exports = NodeHelper.create({
140162 this . loadTranslation ( this . configOnHd . language ) ;
141163 } ,
142164
165+ /**
166+ * Get the MagicMirror config file path
167+ * @returns {string } Absolute path to config.js
168+ */
143169 getConfigPath ( ) {
144170 let configPath = path . resolve ( `${ __dirname } /../../config/config.js` ) ;
145171 if ( globalThis . configuration_file !== undefined ) {
@@ -194,6 +220,11 @@ module.exports = NodeHelper.create({
194220
195221 formatName ( string ) { return formatName ( string ) ; } ,
196222
223+ /**
224+ * Update the list of available modules from 3rd-party repository
225+ * @param {boolean } force - Force re-download even if cache exists
226+ * @returns {void }
227+ */
197228 updateModuleList ( force ) {
198229 const downloadModules = require ( "./scripts/download_modules" ) ;
199230 downloadModules ( {
@@ -205,6 +236,11 @@ module.exports = NodeHelper.create({
205236 } ) ;
206237 } ,
207238
239+ /**
240+ * Read and parse modules.json file
241+ * Populates this.modulesAvailable with ModuleData[]
242+ * @returns {void }
243+ */
208244 readModuleData ( ) {
209245 fs . readFile ( path . resolve ( `${ __dirname } /modules.json` ) , ( error , data ) => {
210246 this . modulesAvailable = JSON . parse ( data . toString ( ) ) ;
@@ -242,6 +278,10 @@ module.exports = NodeHelper.create({
242278 } ) ;
243279 } ,
244280
281+ /**
282+ * Get the modules directory path from config or use default
283+ * @returns {string } Modules directory path (relative or absolute)
284+ */
245285 getModuleDir ( ) {
246286 return this . configOnHd . foreignModulesDir || ( this . configOnHd . paths
247287 ? this . configOnHd . paths . modules
@@ -531,17 +571,36 @@ module.exports = NodeHelper.create({
531571 }
532572 } ,
533573
574+ /**
575+ * Handle POST API requests
576+ * @param {object } query - Query parameters
577+ * @param {object } request - Express request object
578+ * @param {object } res - Express response object
579+ * @returns {void }
580+ */
534581 answerPost ( query , request , res ) {
535582 if ( query . data === "config" ) {
536583 this . saveConfigWithBackup ( request . body , res , query ) ;
537584 }
538585 } ,
539586
587+ /**
588+ * Handle request for list of available modules
589+ * @param {object } query - Query parameters
590+ * @param {object } res - Express response object
591+ * @returns {void }
592+ */
540593 handleGetModuleAvailable ( query , res ) {
541594 this . modulesAvailable . sort ( ( a , b ) => a . name . localeCompare ( b . name ) ) ;
542595 this . sendResponse ( res , undefined , { query, data : this . modulesAvailable } ) ;
543596 } ,
544597
598+ /**
599+ * Handle request for list of installed modules
600+ * @param {object } query - Query parameters
601+ * @param {object } res - Express response object
602+ * @returns {void }
603+ */
545604 handleGetModuleInstalled ( query , res ) {
546605
547606 // Wait for pending update checks to complete before sending response
@@ -653,6 +712,13 @@ module.exports = NodeHelper.create({
653712 } ;
654713 } ,
655714
715+ /**
716+ * Handle GET API requests
717+ * @param {object } query - Query parameters
718+ * @param {string } query.data - Data type requested
719+ * @param {object } res - Express response object
720+ * @returns {void }
721+ */
656722 answerGet ( query , res ) {
657723 const handlers = this . getDataHandlers ( ) ;
658724 const handler = handlers [ query . data ] ;
@@ -1100,6 +1166,13 @@ module.exports = NodeHelper.create({
11001166 return false ;
11011167 } ,
11021168
1169+ /**
1170+ * Install a module from a git repository
1171+ * @param {string } url - Git repository URL
1172+ * @param {object } res - Express response object
1173+ * @param {object } data - Additional installation data
1174+ * @returns {void }
1175+ */
11031176 installModule ( url , res , data ) {
11041177
11051178 simpleGit ( path . resolve ( `${ __dirname } /..` ) ) . clone ( url , path . basename ( url ) , ( error ) => {
@@ -1330,6 +1403,12 @@ module.exports = NodeHelper.create({
13301403 return addresses ;
13311404 } ,
13321405
1406+ /**
1407+ * Handle socket notifications from the frontend module
1408+ * @param {string } notification - Notification type
1409+ * @param {object | ConfigData } payload - Notification payload (varies by type)
1410+ * @returns {void }
1411+ */
13331412 socketNotificationReceived ( notification , payload ) {
13341413
13351414 if ( notification === "CURRENT_STATUS" ) {
0 commit comments