@webos-tools/cli 3.0.3 → 3.0.5

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 (159) hide show
  1. package/.eslintignore +1 -1
  2. package/.eslintrc.js +52 -52
  3. package/APIs.js +79 -79
  4. package/CHANGELOG.md +128 -123
  5. package/LICENSE +201 -201
  6. package/README.md +218 -218
  7. package/bin/ares-config.js +199 -199
  8. package/bin/ares-device-info.js +30 -30
  9. package/bin/ares-device.js +219 -219
  10. package/bin/ares-generate.js +270 -270
  11. package/bin/ares-inspect.js +179 -179
  12. package/bin/ares-install.js +223 -223
  13. package/bin/ares-launch.js +318 -318
  14. package/bin/ares-log.js +255 -255
  15. package/bin/ares-novacom.js +223 -223
  16. package/bin/ares-package.js +336 -336
  17. package/bin/ares-pull.js +156 -156
  18. package/bin/ares-push.js +155 -155
  19. package/bin/ares-server.js +174 -174
  20. package/bin/ares-setup-device.js +520 -520
  21. package/bin/ares-shell.js +132 -132
  22. package/bin/ares.js +166 -166
  23. package/files/conf/ares.json +49 -49
  24. package/files/conf/command-service.json +73 -73
  25. package/files/conf/config.json +22 -22
  26. package/files/conf/ipk.json +30 -30
  27. package/files/conf/novacom-devices.json +35 -35
  28. package/files/conf/query/query-app.json +14 -14
  29. package/files/conf/query/query-hosted.json +18 -18
  30. package/files/conf/query/query-package.json +10 -10
  31. package/files/conf/query/query-service.json +6 -6
  32. package/files/conf/sdk.json +8 -8
  33. package/files/conf/template.json +57 -57
  34. package/files/conf/webos_emul +27 -27
  35. package/files/conf-base/env/sdk-ose.json +8 -8
  36. package/files/conf-base/env/sdk-tv.json +8 -8
  37. package/files/conf-base/profile/config-ose.json +21 -21
  38. package/files/conf-base/profile/config-tv.json +22 -22
  39. package/files/conf-base/query/query-app.json +14 -14
  40. package/files/conf-base/query/query-hosted.json +18 -18
  41. package/files/conf-base/query/query-package.json +10 -10
  42. package/files/conf-base/query/query-service.json +6 -6
  43. package/files/conf-base/template-conf/ose-templates.json +67 -67
  44. package/files/conf-base/template-conf/tv-sdk-templates.json +57 -57
  45. package/files/help/ares-config.help +43 -43
  46. package/files/help/ares-device.help +94 -94
  47. package/files/help/ares-generate.help +65 -65
  48. package/files/help/ares-inspect.help +70 -70
  49. package/files/help/ares-install.help +90 -90
  50. package/files/help/ares-launch.help +100 -100
  51. package/files/help/ares-log-pmlogd.help +84 -84
  52. package/files/help/ares-log.help +101 -101
  53. package/files/help/ares-novacom.help +68 -68
  54. package/files/help/ares-package.help +101 -101
  55. package/files/help/ares-pull.help +38 -38
  56. package/files/help/ares-push.help +38 -38
  57. package/files/help/ares-server.help +39 -39
  58. package/files/help/ares-setup-device.help +75 -75
  59. package/files/help/ares-shell.help +42 -42
  60. package/files/help/ares.help +47 -47
  61. package/files/help/readme.help +23 -23
  62. package/files/schema/ApplicationDescription.schema +319 -319
  63. package/files/schema/NovacomDevices.schema +61 -61
  64. package/files/templates/ose-sdk-templates/appinfo/appinfo.json +10 -10
  65. package/files/templates/ose-sdk-templates/bootplate-web/index.html +88 -88
  66. package/files/templates/ose-sdk-templates/hosted-webapp/index.html +13 -13
  67. package/files/templates/ose-sdk-templates/icon/icon.png +0 -0
  68. package/files/templates/ose-sdk-templates/js-service/helloclient.js +31 -31
  69. package/files/templates/ose-sdk-templates/js-service/helloworld_webos_service.js +188 -188
  70. package/files/templates/ose-sdk-templates/qml-app/main.qml +68 -68
  71. package/files/templates/ose-sdk-templates/qmlappinfo/appinfo.json +10 -10
  72. package/files/templates/ose-sdk-templates/serviceinfo/package.json +11 -11
  73. package/files/templates/ose-sdk-templates/serviceinfo/services.json +8 -8
  74. package/files/templates/tv-sdk-templates/appinfo/appinfo.json +10 -10
  75. package/files/templates/tv-sdk-templates/bootplate-web/index.html +58 -58
  76. package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.10/LICENSE-2.0.txt +202 -202
  77. package/files/templates/tv-sdk-templates/hosted-webapp/index.html +14 -14
  78. package/files/templates/tv-sdk-templates/js-service/helloworld_service.js +39 -39
  79. package/files/templates/tv-sdk-templates/packageinfo/packageinfo.json +3 -3
  80. package/files/templates/tv-sdk-templates/serviceinfo/package.json +11 -11
  81. package/files/templates/tv-sdk-templates/serviceinfo/services.json +8 -8
  82. package/files/templates/tv-sdk-templates/webicon/icon.png +0 -0
  83. package/files/templates/tv-sdk-templates/webicon/largeIcon.png +0 -0
  84. package/lib/base/ares.html +40 -40
  85. package/lib/base/cli-appdata.js +290 -301
  86. package/lib/base/cli-control.js +44 -44
  87. package/lib/base/common-tools.js +29 -29
  88. package/lib/base/error-handler.js +265 -265
  89. package/lib/base/file-watcher.js +155 -155
  90. package/lib/base/help-format.js +147 -147
  91. package/lib/base/luna.js +178 -178
  92. package/lib/base/novacom.js +1191 -1191
  93. package/lib/base/sdkenv.js +59 -59
  94. package/lib/base/server.js +137 -137
  95. package/lib/base/setup-device.js +328 -328
  96. package/lib/base/version-tools.js +79 -79
  97. package/lib/device.js +1419 -1419
  98. package/lib/generator.js +377 -377
  99. package/lib/inspect.js +494 -494
  100. package/lib/install.js +463 -463
  101. package/lib/launch.js +605 -605
  102. package/lib/log.js +584 -584
  103. package/lib/package.js +2129 -2129
  104. package/lib/pull.js +231 -231
  105. package/lib/pusher.js +210 -210
  106. package/lib/session.js +74 -74
  107. package/lib/shell.js +193 -193
  108. package/lib/tar-filter-pack.js +62 -62
  109. package/lib/util/copy.js +31 -31
  110. package/lib/util/createFileName.js +40 -40
  111. package/lib/util/eof.js +30 -30
  112. package/lib/util/json.js +63 -63
  113. package/lib/util/merge.js +14 -14
  114. package/lib/util/objclone.js +40 -40
  115. package/lib/util/spinner.js +37 -37
  116. package/npm-shrinkwrap.json +9115 -9115
  117. package/package.json +100 -97
  118. package/scripts/postinstall.js +24 -0
  119. package/spec/helpers/reporter.js +65 -65
  120. package/spec/jsSpecs/apiTest/generator.spec.js +372 -372
  121. package/spec/jsSpecs/apiTest/inspector.spec.js +89 -89
  122. package/spec/jsSpecs/apiTest/installer.spec.js +67 -67
  123. package/spec/jsSpecs/apiTest/launcher.spec.js +150 -150
  124. package/spec/jsSpecs/apiTest/packager.spec.js +194 -194
  125. package/spec/jsSpecs/apiTest/puller.spec.js +101 -101
  126. package/spec/jsSpecs/apiTest/pusher.spec.js +103 -103
  127. package/spec/jsSpecs/apiTest/server.spec.js +115 -115
  128. package/spec/jsSpecs/apiTest/setupDevice.spec.js +93 -93
  129. package/spec/jsSpecs/apiTest/shell.spec.js +49 -49
  130. package/spec/jsSpecs/ares-config.spec.js +78 -78
  131. package/spec/jsSpecs/ares-device.spec.js +443 -443
  132. package/spec/jsSpecs/ares-generate.spec.js +397 -397
  133. package/spec/jsSpecs/ares-inspect.spec.js +252 -252
  134. package/spec/jsSpecs/ares-install.spec.js +150 -150
  135. package/spec/jsSpecs/ares-launch.spec.js +301 -301
  136. package/spec/jsSpecs/ares-log.spec.js +824 -824
  137. package/spec/jsSpecs/ares-novacom.spec.js +149 -149
  138. package/spec/jsSpecs/ares-package.spec.js +1211 -1211
  139. package/spec/jsSpecs/ares-pull.spec.js +157 -157
  140. package/spec/jsSpecs/ares-push.spec.js +146 -146
  141. package/spec/jsSpecs/ares-server.spec.js +160 -160
  142. package/spec/jsSpecs/ares-setup-device.spec.js +281 -281
  143. package/spec/jsSpecs/ares-shell.spec.js +220 -220
  144. package/spec/jsSpecs/ares.spec.js +83 -83
  145. package/spec/jsSpecs/common-spec.js +169 -169
  146. package/spec/support/jasmine.json +22 -22
  147. package/spec/tempFiles/nativeApp/auto/pkg_arm64/GLES2 +0 -0
  148. package/spec/tempFiles/nativeApp/auto/pkg_arm64/appinfo.json +9 -9
  149. package/spec/tempFiles/nativeApp/ose/pkg_arm/Hello +0 -0
  150. package/spec/tempFiles/nativeApp/ose/pkg_arm/appinfo.json +8 -8
  151. package/spec/tempFiles/nativeApp/ose/pkg_arm/package.properties +2 -2
  152. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/Hello +0 -0
  153. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/appinfo.json +9 -9
  154. package/spec/tempFiles/nativeApp/rsi/pkg_x86/GLES2 +0 -0
  155. package/spec/tempFiles/nativeApp/rsi/pkg_x86/appinfo.json +9 -9
  156. package/spec/tempFiles/sign/sign.crt +32 -32
  157. package/spec/tempFiles/sign/signPriv.key +52 -52
  158. package/spec/test_data/ares-generate.json +41 -41
  159. package/spec/test_data/ares.json +33 -33
@@ -1,265 +1,265 @@
1
- /*
2
- * Copyright (c) 2020-2024 LG Electronics Inc.
3
- *
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- const log = require('npmlog'),
8
- spinner = require('../util/spinner');
9
-
10
- (function() {
11
- const errMsgHdlr = {},
12
- ErrMsgMap = {
13
- // service's error message, common
14
- "for category \"/dev\"": "Please enable \"Developer options\" on your device",
15
-
16
- // sessionmanager
17
- "SELECT_PROFILE": "Please select the profile on the display",
18
-
19
- // appinstalld
20
- "failed to extract ipk file": "Please check whether the ipk file is packaged by CLI or not",
21
- "Failed to parse control": "Please check whether the ipk file is packaged by CLI or not",
22
- "Failed to extract package": "Please check whether the ipk file is packaged by CLI or not",
23
- "duplicate command": "Please wait and retry the command",
24
- "update manifest file failed": "Please wait and retry the command",
25
- "Cannnot install privileged app on developer mode": "Please change the app id (app id should not start with 'com.lge', 'com.webos', 'com.palm')",
26
- "Cannnot remove privileged app on developer mode": "You cannot remove the privileged app whose app id start with 'com.lge', 'com.webos', 'com.palm'",
27
- "unable to execute smack": "Please remove the app and install again",
28
- "empty session list, cannot query getAppInfo": "Please select the profile on the display",
29
- "FAILED_REMOVE": "Please check app is installed to device by ares-install -l",
30
-
31
- // applicationmanager
32
- "Cannot find proper launchPoint": "The app is not installed app. Please check the list by ares-install -l",
33
- "is not running": "Please check the list of running apps using ares-launch -r",
34
- "was not found OR Unsupported Application Type": "The app is not installed. Please check the list of installed apps using ares-install -l",
35
- "invalid parameters": "Invalid parameters are passed. Please check the parameters",
36
- "app is locked": "The app is now installing/updating/deleting. Please try again later",
37
-
38
- // com.webos.service.sessionmanager
39
- "Service does not exist: com.webos.service.sessionmanager": "This device does not support multiple sessions",
40
-
41
- // com.webos.surfacemanager
42
- "ERR_INVALID_DISPLAY": "Please use a valid value for display id",
43
-
44
- "EACCES": "No permission to execute. Please check the directory permission",
45
- "EADDRINUSE": "An attempt to bind a server to a local address failed. Please check the IP address or the port number",
46
- "ECONNREFUSED": "Connection refused. Please check the device IP address or the port number",
47
- "ECONNRESET": "Unable to connect to the device. Please check the device",
48
- "ENOENT": "Please check if the path is valid",
49
- "ENOTDIR": "Please check if the path is valid",
50
- "EROFS": "Please check if the path is valid",
51
- "TIME_OUT": "Connection timed out. Please check the device IP address or the port number",
52
- "NO_FREE_SPACE": "Installation failure. Please check if there is sufficient free space in the disk",
53
-
54
- // can be external lib error
55
- "Authentication failure": "ssh authentication failure. Please check the ssh connection info such as password, private key and username again",
56
- "connect Unknown system": "Please check the device IP address or the port number",
57
- "Unable to parse private key": "Wrong passphrase for ssh key. Please check passphrase again",
58
- "Unable to request a pseudo-terminal": "Unable to open terminal (Target does not allow to open pty)",
59
-
60
- // invalid appinfo, service
61
- "REQUIRED_FIELD": "Please input required field",
62
- "INVALID_ID_RULE": "The app/pkg ID should consist of lowercase letters (a-z), numbers (0-9), plus (+) and minus (-) signs and periods (.)",
63
- "INVALID_VERSION_RULE": "The app/pkg version number should consist of three non-negative integers, separated by dots.\nEach number cannot exceed 9 digits and cannot contain leading zeroes",
64
- "NOT_EXCLUDE_APPINFO": "You cannot exclude the appinfo.json file",
65
- "NOT_RELATIVE_PATH_APPINFO": "The pathname must be relative to the directory where the appinfo.json file is located",
66
- "NO_METAFILE": "No meta file (ex. appinfo.json, services.json) exists in the project directory",
67
- "NO_COMPONENT_FILE": "There is no component file for webOS package. File:",
68
- "NO_ACCOUNT": "Account directory is not supported. Please delete the 'account-templates.json' file.",
69
- "OVER_APPCOUNT": "You can package only one application at once",
70
- "INVALID_APPID": "App ID must start with package ID",
71
- "INVALID_SERVICEID": "ServiceID must start with package id",
72
- "INVALID_RESOURCEID": "Resource ID must start with package ID",
73
- "FAILED_MINIFY": "Failed to minify code. Please check the source code",
74
-
75
- // invalid value
76
- "INVALID_JSON_FORMAT": "Invalid JSON format",
77
- "INVALID_ARGV": "Please check arguments",
78
- "INVALID_INTERVAL": "Please use nonnegative integer value for the \"time-interval\" option",
79
- "INVALID_DISPLAY": "Please use nonnegative integer value for the \"display\" option",
80
- "INVALID_TEMPLATE": "Invalid template name",
81
- "INVALID_FILE": "Invalid file",
82
- "INVALID_VALUE": "Invalid value",
83
- "INVALID_DEVICENAME": "Invalid device name. The device name should consist of letters, numbers, and special characters ('-','_','#') and should start with letters or '_'",
84
- "INVALID_OBJECT": "Object format error",
85
- "INVALID_MODE": "Please specify an option, either '--add' or '--modify'",
86
- "INVALID_REMOVE_MODE": "Please set remove option",
87
- "INVALID_CAPTURE_FORMAT": "Please specify the file extension(.png, .bmp or .jpg)",
88
- "INVALID_CSV_FORMAT": "Please change the file extension to .csv",
89
- "INVALID_IP": "Plese check IP address format",
90
- "INVALID_COMMAND": "This command is invalid. Please check the supported commands using ares -l",
91
- "INVALID_COMBINATION": "This options cannot be used with display option",
92
-
93
- // set value & type error
94
- "EMPTY_PROFILE": "Profile is empty",
95
- "EMPTY_VALUE": "Please specify a value",
96
- "EXISTING_VALUE": "The specified value already exists",
97
- "EXISTING_FILETYPE_PATH": "A file with the same name at the specified location already exists",
98
- "SUPPORT_ONLY_IPK": "Only .ipk file is supported. Please check the file extension",
99
- "NOT_MATCHED_LOGDAEMON": "Logging daemon of CLI should be matched with that of the target device\nPlease change the logging daemon of CLI to same as that of the target device",
100
- "NOT_MATCHED_LOG": "There are no logs from the ID\nPlease check if the combination of options or the ID are valid",
101
- "NOT_DIRTYPE_PATH": "The specified path is not a directory",
102
- "NOT_EXIST_INSPECTOR": "Inspector is not running. Please call stop() after inspect the app",
103
- "NOT_EXIST_PATH": "The specified path does not exist",
104
- "NOT_EXIST_LOGDAEMON": "The specified daemon does not exist",
105
- "NOT_EXIST_LOGFILE": "A log file does not exist in the target device",
106
- "NOT_EXIST_SERVER": "Server is not running. Please call stop() after running the server",
107
- "NOT_EXIST_SSHKEY_PASSWD": "Private key file or password does not exist",
108
- "NOT_EXIST_DISPLAY": "No existing displayId from getSessionList",
109
- "NOT_EXIST_SIMULATOR": "No existing simulator excutable file which name starting with",
110
- "NOT_SUPPORT_COMMOND_DEPRECATED": "This command is deprecated. Please use \"ares-device\" instead of \"ares-device-info\"",
111
- "NOT_SUPPORT_COMMOND": "This command is not supported by current profile\nIf you want to use this command, please change profile using \"ares-config\" command\nCurrent profile:",
112
- "NOT_SUPPORT_OPTION": "This option is not supported by current profile\nIf you want to use this command, please change profile using \"ares-config\" command\nCurrent profile:",
113
- "NOT_SUPPORT_SESSION": "This device does not support multiple sessions",
114
- "NOT_SUPPORT_ENYO": "Enyo app packaging is not supported",
115
- "NOT_SUPPORT_AUTHTYPE": "Not supported auth type",
116
- "NOT_SUPPORT_RUNNINGLIST": "Not supported method to get running app information",
117
- "NOT_SUPPORT_JOURNALD": "journald does not support the option",
118
- "NOT_SUPPORT_PMLOGD": "pmlogd does not support the option",
119
- "NOT_SUPPORT_XZ": "xz file is not supported. Only .ipk file packaged with the CLI is supported",
120
- "NOT_USE_WITH_OPTIONS": "Do not use together with options",
121
- "EMPTY_FILENAME": "Please input log file name from --file-list option",
122
- "EMPTY_ID": "Please input an ID of an app or service",
123
-
124
- "USE_WITH_OPTIONS": "Use together with options",
125
- "USE_PKGID_PKGINFO": "packageId must be provided by using either the '--pkgid' or the '--pkginfofile' option",
126
- "USE_GDB": "Please use GDB to debug a native serivce",
127
- "NOT_IMPLEMENTED": "Not implemented",
128
- "NOT_HANDLE_FILE": "Don't know how to handle",
129
- "NOT_OVERWRITE_DIR": "Cannot overwrite the directory",
130
- "NOT_PACKAGE_WITH_OPTION": "Cannot package the app directory with option",
131
- "NOT_PACKAGE_WITH_PKGDIR": "Cannot package the directory with package directory",
132
- "NOT_PACKAGE_WITH_RESOURCE": "Cannot package the app or service directory with resource directory",
133
- "UNMATCHED_DEVICE": "No matched device",
134
- "CANNOT_REMOVE_DEVICE": "Cannot remove the device",
135
- "UNMATCHED_DISPLAY_AFFINITY": "Please use the same value for \"display\" and \"displayAffinity\"",
136
-
137
- "FAILED_CALL_LUNA": "luna-send command failed",
138
- "FAILED_GET_PORT": "Failed to get Debug port",
139
- "FAILED_GET_SVCPATH": "Failed to get service installation path",
140
- "FAILED_GET_SSHKEY": "Failed to get ssh private key",
141
- "FAILED_TRANSMIT_FILE": "File transmission error. Please try again",
142
- "FAILED_CREATE_DIR": "Cannot create directory in the destination path - permission denied",
143
- "FAILED_REMOVE_PACKAGE": "No packages installed or removed",
144
- "FAILED_FIND_SERVICE": "Failed to find a service with the specified name",
145
-
146
- "CONNECTED_MULTI_DEVICE": "Multiple devices are connected by novacom. Please specify the target name",
147
- "SET_DEFAULT_MULTI_DEVICE": "Multiple devices are set to default target. Please reset device list",
148
- "NEED_ROOT_PERMISSION": "Unable to connect to the target device. root access required",
149
- "MISSING_CALLBACK": "Missing completion callback",
150
- "USING_WEBINSPECTOR": "Web Inspector is already connected with another browser. Please close the previous connection",
151
- "UNKNOWN_OPERATOR": "Unknown operator",
152
- "UNABLE_USE_SFTP": "Unable to use sftp",
153
- };
154
-
155
- // Pure CLI Tip error : errKey(string), option, value
156
- // Luna service error : errKey("FAILED_CALL_LUNA"- string), option, null, heading(service name)
157
- // System call & ssh call error : errKey(object)
158
- errMsgHdlr.getErrMsg = function(errKey, option, value, heading) {
159
- log.silly("error-handler#getErrMsg()", "errKey:", errKey, ", option:", option, ", value:", value, ", heading:", heading);
160
- // Return errKey when errKey is null
161
- if (!errKey) {
162
- return errKey;
163
- }
164
-
165
- const orgErrKey = errKey,
166
- resultErr = [];
167
- let mapErrMsg = "";
168
-
169
- // Handle systemcall or ssh call err message. errKey is must be object
170
- if (typeof orgErrKey === "object") {
171
- // Change errkey and heading to create Tips meessage;
172
- let sysHeading = "syscall",
173
- sysErrKey = orgErrKey.code;
174
-
175
- // Handle as "ssh execution error"
176
- if (!orgErrKey.syscall) {
177
- sysHeading = "ssh exec";
178
- sysErrKey = orgErrKey.message.trim();
179
- }
180
-
181
- const sysCallErr = new CLIError(sysHeading, orgErrKey.message.trim());
182
- if (sysCallErr.message) {
183
- resultErr.push(sysCallErr);
184
- }
185
- // Set parametars to create Tips message
186
- errKey = sysErrKey;
187
- option = orgErrKey.path;
188
- value = "";
189
- heading = "";
190
-
191
- } else if (orgErrKey === "FAILED_CALL_LUNA" && heading) {
192
- mapErrMsg = errMsgHdlr.getErrStr(orgErrKey, option, value);
193
- if (!mapErrMsg) {
194
- return orgErrKey; // Do not change modify this line.
195
- }
196
- const lunaErr = new CLIError(heading, mapErrMsg);
197
- if (lunaErr.message) {
198
- resultErr.push(lunaErr);
199
- }
200
- // Set parametars to create Tips message
201
- errKey = option;
202
- option = "";
203
- value = "";
204
- heading = "";
205
- }
206
-
207
- // Create Tips message
208
- mapErrMsg = errMsgHdlr.getErrStr(errKey, option, value);
209
-
210
- if (mapErrMsg) {
211
- const tipsErr = new CLIError(heading, mapErrMsg);
212
- if (tipsErr.message) {
213
- resultErr.push(tipsErr);
214
- }
215
- }
216
-
217
- // Defense code to stop the spinner before showing an error message.
218
- spinner.stop();
219
- if (resultErr.length > 0) {
220
- return resultErr;
221
- } else {
222
- return orgErrKey;
223
- }
224
- };
225
-
226
- errMsgHdlr.getErrStr = function(errKey, option, value) {
227
- log.silly("error-handler#getErrStr()", "errKey:", errKey, ", option:", option, ", value:", value);
228
-
229
- if (!errKey) {
230
- return errKey;
231
- }
232
-
233
- let returnMsg;
234
- if (typeof errKey === 'string') {
235
- for (const key in ErrMsgMap) {
236
- if (errKey.toString() === key || errKey.includes(key)) {
237
- returnMsg = ErrMsgMap[key];
238
- if (option) {
239
- returnMsg = returnMsg + " <" + option+ ">";
240
- }
241
- if (value) {
242
- returnMsg = returnMsg + " : " + value;
243
- }
244
- break;
245
- }
246
- }
247
- }
248
- return returnMsg;
249
- };
250
-
251
- function CLIError(heading, message) {
252
- if (heading) {
253
- this.heading = "[" + heading + " failure"+ "]:";
254
- }
255
- this.message = message;
256
- this.stack = Error().stack;
257
- }
258
-
259
- CLIError.prototype = Object.create(Error.prototype);
260
- CLIError.prototype.heading = "[Tips]:";
261
-
262
- if (typeof module !== 'undefined' && module.exports) {
263
- module.exports = errMsgHdlr;
264
- }
265
- }());
1
+ /*
2
+ * Copyright (c) 2020-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ const log = require('npmlog'),
8
+ spinner = require('../util/spinner');
9
+
10
+ (function() {
11
+ const errMsgHdlr = {},
12
+ ErrMsgMap = {
13
+ // service's error message, common
14
+ "for category \"/dev\"": "Please enable \"Developer options\" on your device",
15
+
16
+ // sessionmanager
17
+ "SELECT_PROFILE": "Please select the profile on the display",
18
+
19
+ // appinstalld
20
+ "failed to extract ipk file": "Please check whether the ipk file is packaged by CLI or not",
21
+ "Failed to parse control": "Please check whether the ipk file is packaged by CLI or not",
22
+ "Failed to extract package": "Please check whether the ipk file is packaged by CLI or not",
23
+ "duplicate command": "Please wait and retry the command",
24
+ "update manifest file failed": "Please wait and retry the command",
25
+ "Cannnot install privileged app on developer mode": "Please change the app id (app id should not start with 'com.lge', 'com.webos', 'com.palm')",
26
+ "Cannnot remove privileged app on developer mode": "You cannot remove the privileged app whose app id start with 'com.lge', 'com.webos', 'com.palm'",
27
+ "unable to execute smack": "Please remove the app and install again",
28
+ "empty session list, cannot query getAppInfo": "Please select the profile on the display",
29
+ "FAILED_REMOVE": "Please check app is installed to device by ares-install -l",
30
+
31
+ // applicationmanager
32
+ "Cannot find proper launchPoint": "The app is not installed app. Please check the list by ares-install -l",
33
+ "is not running": "Please check the list of running apps using ares-launch -r",
34
+ "was not found OR Unsupported Application Type": "The app is not installed. Please check the list of installed apps using ares-install -l",
35
+ "invalid parameters": "Invalid parameters are passed. Please check the parameters",
36
+ "app is locked": "The app is now installing/updating/deleting. Please try again later",
37
+
38
+ // com.webos.service.sessionmanager
39
+ "Service does not exist: com.webos.service.sessionmanager": "This device does not support multiple sessions",
40
+
41
+ // com.webos.surfacemanager
42
+ "ERR_INVALID_DISPLAY": "Please use a valid value for display id",
43
+
44
+ "EACCES": "No permission to execute. Please check the directory permission",
45
+ "EADDRINUSE": "An attempt to bind a server to a local address failed. Please check the IP address or the port number",
46
+ "ECONNREFUSED": "Connection refused. Please check the device IP address or the port number",
47
+ "ECONNRESET": "Unable to connect to the device. Please check the device",
48
+ "ENOENT": "Please check if the path is valid",
49
+ "ENOTDIR": "Please check if the path is valid",
50
+ "EROFS": "Please check if the path is valid",
51
+ "TIME_OUT": "Connection timed out. Please check the device IP address or the port number",
52
+ "NO_FREE_SPACE": "Installation failure. Please check if there is sufficient free space in the disk",
53
+
54
+ // can be external lib error
55
+ "Authentication failure": "ssh authentication failure. Please check the ssh connection info such as password, private key and username again",
56
+ "connect Unknown system": "Please check the device IP address or the port number",
57
+ "Unable to parse private key": "Wrong passphrase for ssh key. Please check passphrase again",
58
+ "Unable to request a pseudo-terminal": "Unable to open terminal (Target does not allow to open pty)",
59
+
60
+ // invalid appinfo, service
61
+ "REQUIRED_FIELD": "Please input required field",
62
+ "INVALID_ID_RULE": "The app/pkg ID should consist of lowercase letters (a-z), numbers (0-9), plus (+) and minus (-) signs and periods (.)",
63
+ "INVALID_VERSION_RULE": "The app/pkg version number should consist of three non-negative integers, separated by dots.\nEach number cannot exceed 9 digits and cannot contain leading zeroes",
64
+ "NOT_EXCLUDE_APPINFO": "You cannot exclude the appinfo.json file",
65
+ "NOT_RELATIVE_PATH_APPINFO": "The pathname must be relative to the directory where the appinfo.json file is located",
66
+ "NO_METAFILE": "No meta file (ex. appinfo.json, services.json) exists in the project directory",
67
+ "NO_COMPONENT_FILE": "There is no component file for webOS package. File:",
68
+ "NO_ACCOUNT": "Account directory is not supported. Please delete the 'account-templates.json' file.",
69
+ "OVER_APPCOUNT": "You can package only one application at once",
70
+ "INVALID_APPID": "App ID must start with package ID",
71
+ "INVALID_SERVICEID": "ServiceID must start with package id",
72
+ "INVALID_RESOURCEID": "Resource ID must start with package ID",
73
+ "FAILED_MINIFY": "Failed to minify code. Please check the source code",
74
+
75
+ // invalid value
76
+ "INVALID_JSON_FORMAT": "Invalid JSON format",
77
+ "INVALID_ARGV": "Please check arguments",
78
+ "INVALID_INTERVAL": "Please use nonnegative integer value for the \"time-interval\" option",
79
+ "INVALID_DISPLAY": "Please use nonnegative integer value for the \"display\" option",
80
+ "INVALID_TEMPLATE": "Invalid template name",
81
+ "INVALID_FILE": "Invalid file",
82
+ "INVALID_VALUE": "Invalid value",
83
+ "INVALID_DEVICENAME": "Invalid device name. The device name should consist of letters, numbers, and special characters ('-','_','#') and should start with letters or '_'",
84
+ "INVALID_OBJECT": "Object format error",
85
+ "INVALID_MODE": "Please specify an option, either '--add' or '--modify'",
86
+ "INVALID_REMOVE_MODE": "Please set remove option",
87
+ "INVALID_CAPTURE_FORMAT": "Please specify the file extension(.png, .bmp or .jpg)",
88
+ "INVALID_CSV_FORMAT": "Please change the file extension to .csv",
89
+ "INVALID_IP": "Plese check IP address format",
90
+ "INVALID_COMMAND": "This command is invalid. Please check the supported commands using ares -l",
91
+ "INVALID_COMBINATION": "This options cannot be used with display option",
92
+
93
+ // set value & type error
94
+ "EMPTY_PROFILE": "Profile is empty",
95
+ "EMPTY_VALUE": "Please specify a value",
96
+ "EXISTING_VALUE": "The specified value already exists",
97
+ "EXISTING_FILETYPE_PATH": "A file with the same name at the specified location already exists",
98
+ "SUPPORT_ONLY_IPK": "Only .ipk file is supported. Please check the file extension",
99
+ "NOT_MATCHED_LOGDAEMON": "Logging daemon of CLI should be matched with that of the target device\nPlease change the logging daemon of CLI to same as that of the target device",
100
+ "NOT_MATCHED_LOG": "There are no logs from the ID\nPlease check if the combination of options or the ID are valid",
101
+ "NOT_DIRTYPE_PATH": "The specified path is not a directory",
102
+ "NOT_EXIST_INSPECTOR": "Inspector is not running. Please call stop() after inspect the app",
103
+ "NOT_EXIST_PATH": "The specified path does not exist",
104
+ "NOT_EXIST_LOGDAEMON": "The specified daemon does not exist",
105
+ "NOT_EXIST_LOGFILE": "A log file does not exist in the target device",
106
+ "NOT_EXIST_SERVER": "Server is not running. Please call stop() after running the server",
107
+ "NOT_EXIST_SSHKEY_PASSWD": "Private key file or password does not exist",
108
+ "NOT_EXIST_DISPLAY": "No existing displayId from getSessionList",
109
+ "NOT_EXIST_SIMULATOR": "No existing simulator excutable file which name starting with",
110
+ "NOT_SUPPORT_COMMOND_DEPRECATED": "This command is deprecated. Please use \"ares-device\" instead of \"ares-device-info\"",
111
+ "NOT_SUPPORT_COMMOND": "This command is not supported by current profile\nIf you want to use this command, please change profile using \"ares-config\" command\nCurrent profile:",
112
+ "NOT_SUPPORT_OPTION": "This option is not supported by current profile\nIf you want to use this command, please change profile using \"ares-config\" command\nCurrent profile:",
113
+ "NOT_SUPPORT_SESSION": "This device does not support multiple sessions",
114
+ "NOT_SUPPORT_ENYO": "Enyo app packaging is not supported",
115
+ "NOT_SUPPORT_AUTHTYPE": "Not supported auth type",
116
+ "NOT_SUPPORT_RUNNINGLIST": "Not supported method to get running app information",
117
+ "NOT_SUPPORT_JOURNALD": "journald does not support the option",
118
+ "NOT_SUPPORT_PMLOGD": "pmlogd does not support the option",
119
+ "NOT_SUPPORT_XZ": "xz file is not supported. Only .ipk file packaged with the CLI is supported",
120
+ "NOT_USE_WITH_OPTIONS": "Do not use together with options",
121
+ "EMPTY_FILENAME": "Please input log file name from --file-list option",
122
+ "EMPTY_ID": "Please input an ID of an app or service",
123
+
124
+ "USE_WITH_OPTIONS": "Use together with options",
125
+ "USE_PKGID_PKGINFO": "packageId must be provided by using either the '--pkgid' or the '--pkginfofile' option",
126
+ "USE_GDB": "Please use GDB to debug a native serivce",
127
+ "NOT_IMPLEMENTED": "Not implemented",
128
+ "NOT_HANDLE_FILE": "Don't know how to handle",
129
+ "NOT_OVERWRITE_DIR": "Cannot overwrite the directory",
130
+ "NOT_PACKAGE_WITH_OPTION": "Cannot package the app directory with option",
131
+ "NOT_PACKAGE_WITH_PKGDIR": "Cannot package the directory with package directory",
132
+ "NOT_PACKAGE_WITH_RESOURCE": "Cannot package the app or service directory with resource directory",
133
+ "UNMATCHED_DEVICE": "No matched device",
134
+ "CANNOT_REMOVE_DEVICE": "Cannot remove the device",
135
+ "UNMATCHED_DISPLAY_AFFINITY": "Please use the same value for \"display\" and \"displayAffinity\"",
136
+
137
+ "FAILED_CALL_LUNA": "luna-send command failed",
138
+ "FAILED_GET_PORT": "Failed to get Debug port",
139
+ "FAILED_GET_SVCPATH": "Failed to get service installation path",
140
+ "FAILED_GET_SSHKEY": "Failed to get ssh private key",
141
+ "FAILED_TRANSMIT_FILE": "File transmission error. Please try again",
142
+ "FAILED_CREATE_DIR": "Cannot create directory in the destination path - permission denied",
143
+ "FAILED_REMOVE_PACKAGE": "No packages installed or removed",
144
+ "FAILED_FIND_SERVICE": "Failed to find a service with the specified name",
145
+
146
+ "CONNECTED_MULTI_DEVICE": "Multiple devices are connected by novacom. Please specify the target name",
147
+ "SET_DEFAULT_MULTI_DEVICE": "Multiple devices are set to default target. Please reset device list",
148
+ "NEED_ROOT_PERMISSION": "Unable to connect to the target device. root access required",
149
+ "MISSING_CALLBACK": "Missing completion callback",
150
+ "USING_WEBINSPECTOR": "Web Inspector is already connected with another browser. Please close the previous connection",
151
+ "UNKNOWN_OPERATOR": "Unknown operator",
152
+ "UNABLE_USE_SFTP": "Unable to use sftp",
153
+ };
154
+
155
+ // Pure CLI Tip error : errKey(string), option, value
156
+ // Luna service error : errKey("FAILED_CALL_LUNA"- string), option, null, heading(service name)
157
+ // System call & ssh call error : errKey(object)
158
+ errMsgHdlr.getErrMsg = function(errKey, option, value, heading) {
159
+ log.silly("error-handler#getErrMsg()", "errKey:", errKey, ", option:", option, ", value:", value, ", heading:", heading);
160
+ // Return errKey when errKey is null
161
+ if (!errKey) {
162
+ return errKey;
163
+ }
164
+
165
+ const orgErrKey = errKey,
166
+ resultErr = [];
167
+ let mapErrMsg = "";
168
+
169
+ // Handle systemcall or ssh call err message. errKey is must be object
170
+ if (typeof orgErrKey === "object") {
171
+ // Change errkey and heading to create Tips meessage;
172
+ let sysHeading = "syscall",
173
+ sysErrKey = orgErrKey.code;
174
+
175
+ // Handle as "ssh execution error"
176
+ if (!orgErrKey.syscall) {
177
+ sysHeading = "ssh exec";
178
+ sysErrKey = orgErrKey.message.trim();
179
+ }
180
+
181
+ const sysCallErr = new CLIError(sysHeading, orgErrKey.message.trim());
182
+ if (sysCallErr.message) {
183
+ resultErr.push(sysCallErr);
184
+ }
185
+ // Set parametars to create Tips message
186
+ errKey = sysErrKey;
187
+ option = orgErrKey.path;
188
+ value = "";
189
+ heading = "";
190
+
191
+ } else if (orgErrKey === "FAILED_CALL_LUNA" && heading) {
192
+ mapErrMsg = errMsgHdlr.getErrStr(orgErrKey, option, value);
193
+ if (!mapErrMsg) {
194
+ return orgErrKey; // Do not change modify this line.
195
+ }
196
+ const lunaErr = new CLIError(heading, mapErrMsg);
197
+ if (lunaErr.message) {
198
+ resultErr.push(lunaErr);
199
+ }
200
+ // Set parametars to create Tips message
201
+ errKey = option;
202
+ option = "";
203
+ value = "";
204
+ heading = "";
205
+ }
206
+
207
+ // Create Tips message
208
+ mapErrMsg = errMsgHdlr.getErrStr(errKey, option, value);
209
+
210
+ if (mapErrMsg) {
211
+ const tipsErr = new CLIError(heading, mapErrMsg);
212
+ if (tipsErr.message) {
213
+ resultErr.push(tipsErr);
214
+ }
215
+ }
216
+
217
+ // Defense code to stop the spinner before showing an error message.
218
+ spinner.stop();
219
+ if (resultErr.length > 0) {
220
+ return resultErr;
221
+ } else {
222
+ return orgErrKey;
223
+ }
224
+ };
225
+
226
+ errMsgHdlr.getErrStr = function(errKey, option, value) {
227
+ log.silly("error-handler#getErrStr()", "errKey:", errKey, ", option:", option, ", value:", value);
228
+
229
+ if (!errKey) {
230
+ return errKey;
231
+ }
232
+
233
+ let returnMsg;
234
+ if (typeof errKey === 'string') {
235
+ for (const key in ErrMsgMap) {
236
+ if (errKey.toString() === key || errKey.includes(key)) {
237
+ returnMsg = ErrMsgMap[key];
238
+ if (option) {
239
+ returnMsg = returnMsg + " <" + option+ ">";
240
+ }
241
+ if (value) {
242
+ returnMsg = returnMsg + " : " + value;
243
+ }
244
+ break;
245
+ }
246
+ }
247
+ }
248
+ return returnMsg;
249
+ };
250
+
251
+ function CLIError(heading, message) {
252
+ if (heading) {
253
+ this.heading = "[" + heading + " failure"+ "]:";
254
+ }
255
+ this.message = message;
256
+ this.stack = Error().stack;
257
+ }
258
+
259
+ CLIError.prototype = Object.create(Error.prototype);
260
+ CLIError.prototype.heading = "[Tips]:";
261
+
262
+ if (typeof module !== 'undefined' && module.exports) {
263
+ module.exports = errMsgHdlr;
264
+ }
265
+ }());