@webos-tools/cli 3.1.3 → 3.2.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 (1396) hide show
  1. package/.eslintignore +1 -1
  2. package/.eslintrc.js +52 -52
  3. package/APIs.js +79 -79
  4. package/CHANGELOG.md +32 -4
  5. package/LICENSE +201 -201
  6. package/README.md +226 -219
  7. package/bin/ares-config.js +211 -202
  8. package/bin/ares-device-info.js +30 -30
  9. package/bin/ares-device.js +222 -219
  10. package/bin/ares-generate.js +274 -274
  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 +259 -259
  15. package/bin/ares-novacom.js +220 -220
  16. package/bin/ares-package.js +347 -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 +10 -6
  21. package/bin/ares-shell.js +132 -132
  22. package/bin/ares.js +166 -166
  23. package/files/conf/ares.json +50 -49
  24. package/files/conf/command-service.json +78 -73
  25. package/files/conf/config.json +31 -31
  26. package/files/conf/ipk.json +30 -30
  27. package/files/conf/novacom-devices.json +69 -52
  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-apollo.json +8 -8
  36. package/files/conf-base/env/sdk-ose.json +8 -8
  37. package/files/conf-base/env/sdk-signage.json +8 -0
  38. package/files/conf-base/env/sdk-tv.json +8 -8
  39. package/files/conf-base/key/pubkey-signage.pem +9 -0
  40. package/files/conf-base/profile/config-apollo.json +29 -29
  41. package/files/conf-base/profile/config-ose.json +29 -29
  42. package/files/conf-base/profile/config-signage.json +29 -0
  43. package/files/conf-base/profile/config-tv.json +31 -31
  44. package/files/conf-base/query/query-app.json +14 -14
  45. package/files/conf-base/query/query-hosted.json +18 -18
  46. package/files/conf-base/query/query-package.json +10 -10
  47. package/files/conf-base/query/query-service.json +6 -6
  48. package/files/conf-base/query/signage/query-app.json +14 -0
  49. package/files/conf-base/query/signage/query-service.json +6 -0
  50. package/files/conf-base/template-conf/ose-templates.json +67 -67
  51. package/files/conf-base/template-conf/signage-sdk-templates.json +239 -0
  52. package/files/conf-base/template-conf/tv-sdk-templates.json +57 -57
  53. package/files/help/ares-config.help +48 -48
  54. package/files/help/ares-device.help +109 -109
  55. package/files/help/ares-generate.help +101 -91
  56. package/files/help/ares-inspect.help +77 -76
  57. package/files/help/ares-install.help +95 -95
  58. package/files/help/ares-launch.help +111 -105
  59. package/files/help/ares-log-pmlogd.help +84 -84
  60. package/files/help/ares-log.help +101 -101
  61. package/files/help/ares-novacom.help +68 -68
  62. package/files/help/ares-package.help +103 -101
  63. package/files/help/ares-pull.help +38 -38
  64. package/files/help/ares-push.help +38 -38
  65. package/files/help/ares-server.help +44 -44
  66. package/files/help/ares-setup-device.help +196 -156
  67. package/files/help/ares-shell.help +42 -42
  68. package/files/help/ares.help +52 -52
  69. package/files/help/readme.help +23 -23
  70. package/files/schema/ApplicationDescription.schema +319 -319
  71. package/files/schema/NovacomDevices.schema +63 -62
  72. package/files/templates/apollo-sdk-templates/appinfo/appinfo.json +10 -10
  73. package/files/templates/apollo-sdk-templates/bootplate-web/index.html +88 -88
  74. package/files/templates/apollo-sdk-templates/hosted-webapp/index.html +13 -13
  75. package/files/templates/apollo-sdk-templates/js-service/helloclient.js +31 -31
  76. package/files/templates/apollo-sdk-templates/js-service/helloworld_webos_service.js +188 -188
  77. package/files/templates/apollo-sdk-templates/serviceinfo/package.json +11 -11
  78. package/files/templates/apollo-sdk-templates/serviceinfo/services.json +8 -8
  79. package/files/templates/ose-sdk-templates/appinfo/appinfo.json +10 -10
  80. package/files/templates/ose-sdk-templates/bootplate-web/index.html +88 -88
  81. package/files/templates/ose-sdk-templates/hosted-webapp/index.html +13 -13
  82. package/files/templates/ose-sdk-templates/js-service/helloclient.js +31 -31
  83. package/files/templates/ose-sdk-templates/js-service/helloworld_webos_service.js +188 -188
  84. package/files/templates/ose-sdk-templates/qml-app/main.qml +68 -68
  85. package/files/templates/ose-sdk-templates/qmlappinfo/appinfo.json +10 -10
  86. package/files/templates/ose-sdk-templates/serviceinfo/package.json +11 -11
  87. package/files/templates/ose-sdk-templates/serviceinfo/services.json +8 -8
  88. package/files/templates/signage-sdk-templates/Backlight_Scheduling/clockTable.js +29 -0
  89. package/files/templates/signage-sdk-templates/Backlight_Scheduling/index.html +53 -0
  90. package/files/templates/signage-sdk-templates/Backlight_Scheduling/js/idcap.js +21 -0
  91. package/files/templates/signage-sdk-templates/Backlight_Scheduling/remocon.js +214 -0
  92. package/files/templates/signage-sdk-templates/Backlight_Scheduling/scheduler.js +123 -0
  93. package/files/templates/signage-sdk-templates/Backlight_Scheduling/setanddelete.js +25 -0
  94. package/files/templates/signage-sdk-templates/Backlight_Scheduling/style.css +213 -0
  95. package/files/templates/signage-sdk-templates/Download_Progress/app.css +27 -0
  96. package/files/templates/signage-sdk-templates/Download_Progress/app.js +407 -0
  97. package/files/templates/signage-sdk-templates/Download_Progress/index.html +32 -0
  98. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova/2.7.0/cordova.webos.js +7038 -0
  99. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova/LICENSE +201 -0
  100. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.0/configuration.js +1 -0
  101. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.0/deviceInfo.js +1 -0
  102. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.0/inputSource.js +1 -0
  103. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.0/power.js +1 -0
  104. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.0/signage.js +1 -0
  105. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.0/sound.js +1 -0
  106. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.0/storage.js +1 -0
  107. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.0/video.js +1 -0
  108. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.1/configuration.js +1 -0
  109. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.1/deviceInfo.js +1 -0
  110. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.1/inputSource.js +1 -0
  111. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.1/power.js +1 -0
  112. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.1/signage.js +1 -0
  113. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.1/sound.js +1 -0
  114. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.1/storage.js +1 -0
  115. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.1/video.js +1 -0
  116. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.2/configuration.js +1 -0
  117. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.2/deviceInfo.js +1 -0
  118. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.2/inputSource.js +1 -0
  119. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.2/power.js +1 -0
  120. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.2/signage.js +1 -0
  121. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.2/sound.js +1 -0
  122. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.2/storage.js +23 -0
  123. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.2/video.js +1 -0
  124. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.3/configuration.js +1 -0
  125. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.3/deviceInfo.js +1 -0
  126. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.3/inputSource.js +1 -0
  127. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.3/power.js +1 -0
  128. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.3/signage.js +1 -0
  129. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.3/sound.js +1 -0
  130. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.3/storage.js +1 -0
  131. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.3/video.js +1 -0
  132. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.0/configuration.js +9 -0
  133. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.0/deviceInfo.js +9 -0
  134. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.0/inputSource.js +9 -0
  135. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.0/power.js +9 -0
  136. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.0/security.js +9 -0
  137. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.0/signage.js +9 -0
  138. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.0/sound.js +9 -0
  139. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.0/storage.js +9 -0
  140. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.0/time.js +9 -0
  141. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.0/utility.js +9 -0
  142. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.0/video.js +9 -0
  143. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.1/configuration.js +9 -0
  144. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.1/deviceInfo.js +9 -0
  145. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.1/inputSource.js +9 -0
  146. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.1/power.js +9 -0
  147. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.1/security.js +9 -0
  148. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.1/signage.js +9 -0
  149. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.1/sound.js +9 -0
  150. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.1/storage.js +9 -0
  151. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.1/time.js +9 -0
  152. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.1/utility.js +9 -0
  153. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.1/video.js +9 -0
  154. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.2/configuration.js +9 -0
  155. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.2/deviceInfo.js +9 -0
  156. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.2/inputSource.js +9 -0
  157. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.2/power.js +9 -0
  158. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.2/security.js +9 -0
  159. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.2/signage.js +8 -0
  160. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.2/sound.js +9 -0
  161. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.2/storage.js +9 -0
  162. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.2/time.js +9 -0
  163. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.2/utility.js +9 -0
  164. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.2/video.js +9 -0
  165. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.3/configuration.js +9 -0
  166. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.3/deviceInfo.js +9 -0
  167. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.3/inputSource.js +9 -0
  168. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.3/power.js +9 -0
  169. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.3/security.js +9 -0
  170. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.3/signage.js +9 -0
  171. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.3/sound.js +9 -0
  172. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.3/storage.js +9 -0
  173. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.3/time.js +9 -0
  174. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.3/utility.js +9 -0
  175. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.3/video.js +9 -0
  176. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.4/configuration.js +1 -0
  177. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.4/deviceInfo.js +1 -0
  178. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.4/inputSource.js +1 -0
  179. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.4/power.js +1 -0
  180. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.4/security.js +1 -0
  181. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.4/signage.js +1 -0
  182. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.4/sound.js +1 -0
  183. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.4/storage.js +1 -0
  184. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.4/time.js +1 -0
  185. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.4/utility.js +1 -0
  186. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.4/video.js +1 -0
  187. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.5/configuration.js +1 -0
  188. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.5/deviceInfo.js +1 -0
  189. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.5/inputSource.js +1 -0
  190. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.5/power.js +1 -0
  191. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.5/security.js +1 -0
  192. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.5/signage.js +1 -0
  193. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.5/sound.js +1 -0
  194. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.5/storage.js +1 -0
  195. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.5/time.js +1 -0
  196. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.5/utility.js +1 -0
  197. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.4.5/video.js +1 -0
  198. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.0/configuration.js +1 -0
  199. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.0/deviceInfo.js +1 -0
  200. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.0/inputSource.js +1 -0
  201. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.0/power.js +1 -0
  202. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.0/security.js +1 -0
  203. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.0/signage.js +1 -0
  204. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.0/sound.js +1 -0
  205. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.0/storage.js +1 -0
  206. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.0/time.js +1 -0
  207. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.0/utility.js +1 -0
  208. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.0/video.js +1 -0
  209. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.1/configuration.js +1 -0
  210. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.1/deviceInfo.js +1 -0
  211. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.1/inputSource.js +1 -0
  212. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.1/power.js +1 -0
  213. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.1/security.js +1 -0
  214. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.1/signage.js +1 -0
  215. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.1/sound.js +1 -0
  216. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.1/storage.js +1 -0
  217. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.1/time.js +1 -0
  218. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.1/utility.js +1 -0
  219. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.1/video.js +1 -0
  220. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.11/configuration.js +1 -0
  221. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.11/deviceInfo.js +1 -0
  222. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.11/inputSource.js +1 -0
  223. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.11/power.js +1 -0
  224. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.11/security.js +1 -0
  225. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.11/signage.js +1 -0
  226. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.11/sound.js +1 -0
  227. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.11/storage.js +1 -0
  228. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.11/time.js +1 -0
  229. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.11/utility.js +1 -0
  230. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.11/video.js +1 -0
  231. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.12/configuration.js +1 -0
  232. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.12/deviceInfo.js +1 -0
  233. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.12/inputSource.js +1 -0
  234. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.12/power.js +1 -0
  235. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.12/security.js +1 -0
  236. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.12/signage.js +1 -0
  237. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.12/sound.js +1 -0
  238. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.12/storage.js +1 -0
  239. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.12/time.js +1 -0
  240. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.12/utility.js +1 -0
  241. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.12/video.js +1 -0
  242. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.2/configuration.js +1 -0
  243. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.2/deviceInfo.js +1 -0
  244. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.2/inputSource.js +1 -0
  245. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.2/power.js +1 -0
  246. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.2/security.js +1 -0
  247. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.2/signage.js +1 -0
  248. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.2/sound.js +1 -0
  249. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.2/storage.js +1 -0
  250. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.2/time.js +1 -0
  251. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.2/utility.js +1 -0
  252. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.2/video.js +1 -0
  253. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.3/configuration.js +1 -0
  254. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.3/deviceInfo.js +1 -0
  255. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.3/inputSource.js +1 -0
  256. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.3/power.js +1 -0
  257. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.3/security.js +1 -0
  258. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.3/signage.js +1 -0
  259. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.3/sound.js +1 -0
  260. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.3/storage.js +1 -0
  261. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.3/time.js +1 -0
  262. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.3/utility.js +1 -0
  263. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.3/video.js +1 -0
  264. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.4/configuration.js +1 -0
  265. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.4/deviceInfo.js +1 -0
  266. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.4/inputSource.js +1 -0
  267. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.4/power.js +1 -0
  268. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.4/security.js +1 -0
  269. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.4/signage.js +1 -0
  270. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.4/sound.js +1 -0
  271. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.4/storage.js +1 -0
  272. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.4/time.js +1 -0
  273. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.4/utility.js +1 -0
  274. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.4/video.js +1 -0
  275. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.5/configuration.js +1 -0
  276. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.5/deviceInfo.js +1 -0
  277. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.5/inputSource.js +1 -0
  278. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.5/power.js +1 -0
  279. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.5/security.js +1 -0
  280. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.5/signage.js +1 -0
  281. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.5/sound.js +1 -0
  282. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.5/storage.js +1 -0
  283. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.5/time.js +1 -0
  284. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.5/utility.js +1 -0
  285. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.5/video.js +1 -0
  286. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.6/configuration.js +1 -0
  287. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.6/deviceInfo.js +1 -0
  288. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.6/inputSource.js +1 -0
  289. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.6/power.js +1 -0
  290. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.6/security.js +1 -0
  291. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.6/signage.js +1 -0
  292. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.6/sound.js +1 -0
  293. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.6/storage.js +1 -0
  294. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.6/time.js +1 -0
  295. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.6/utility.js +1 -0
  296. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.6/video.js +1 -0
  297. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.7/configuration.js +1 -0
  298. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.7/deviceInfo.js +1 -0
  299. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.7/inputSource.js +1 -0
  300. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.7/power.js +1 -0
  301. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.7/security.js +1 -0
  302. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.7/signage.js +1 -0
  303. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.7/sound.js +1 -0
  304. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.7/storage.js +1 -0
  305. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.7/time.js +1 -0
  306. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.7/utility.js +1 -0
  307. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.7/video.js +1 -0
  308. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.8/configuration.js +1 -0
  309. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.8/deviceInfo.js +1 -0
  310. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.8/inputSource.js +1 -0
  311. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.8/power.js +1 -0
  312. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.8/security.js +1 -0
  313. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.8/signage.js +1 -0
  314. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.8/sound.js +1 -0
  315. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.8/storage.js +1 -0
  316. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.8/time.js +1 -0
  317. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.8/utility.js +1 -0
  318. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.5.8/video.js +1 -0
  319. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.0/configuration.js +1 -0
  320. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.0/deviceInfo.js +1 -0
  321. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.0/inputSource.js +1 -0
  322. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.0/power.js +1 -0
  323. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.0/security.js +1 -0
  324. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.0/signage.js +1 -0
  325. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.0/sound.js +1 -0
  326. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.0/storage.js +1 -0
  327. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.0/time.js +1 -0
  328. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.0/utility.js +1 -0
  329. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.0/video.js +1 -0
  330. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.1/configuration.js +1 -0
  331. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.1/deviceInfo.js +1 -0
  332. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.1/inputSource.js +1 -0
  333. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.1/power.js +1 -0
  334. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.1/security.js +1 -0
  335. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.1/signage.js +1 -0
  336. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.1/sound.js +1 -0
  337. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.1/storage.js +1 -0
  338. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.1/time.js +1 -0
  339. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.1/utility.js +1 -0
  340. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.1/video.js +1 -0
  341. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.2/configuration.js +1 -0
  342. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.2/deviceInfo.js +1 -0
  343. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.2/inputSource.js +1 -0
  344. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.2/power.js +1 -0
  345. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.2/security.js +1 -0
  346. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.2/signage.js +1 -0
  347. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.2/sound.js +1 -0
  348. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.2/storage.js +1 -0
  349. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.2/time.js +1 -0
  350. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.2/utility.js +1 -0
  351. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.2/video.js +1 -0
  352. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.3/configuration.js +1 -0
  353. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.3/deviceInfo.js +1 -0
  354. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.3/inputSource.js +1 -0
  355. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.3/power.js +1 -0
  356. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.3/security.js +1 -0
  357. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.3/signage.js +1 -0
  358. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.3/sound.js +1 -0
  359. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.3/storage.js +1 -0
  360. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.3/time.js +1 -0
  361. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.3/utility.js +1 -0
  362. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.3/video.js +1 -0
  363. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/configuration.js +1 -0
  364. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/deviceInfo.js +1 -0
  365. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/inputSource.js +1 -0
  366. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/led.js +1 -0
  367. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/power.js +1 -0
  368. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/security.js +1 -0
  369. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/signage.js +1 -0
  370. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/sound.js +1 -0
  371. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/storage.js +1 -0
  372. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/time.js +1 -0
  373. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/utility.js +1 -0
  374. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.7/video.js +1 -0
  375. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/configuration.js +1 -0
  376. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/deviceInfo.js +1 -0
  377. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/inputSource.js +1 -0
  378. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/led.js +1 -0
  379. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/power.js +1 -0
  380. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/security.js +1 -0
  381. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/signage.js +1 -0
  382. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/sound.js +1 -0
  383. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/storage.js +1 -0
  384. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/time.js +1 -0
  385. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/utility.js +1 -0
  386. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.6.8/video.js +1 -0
  387. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/configuration.js +1 -0
  388. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/deviceInfo.js +1 -0
  389. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/inputSource.js +1 -0
  390. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/iot.js +1 -0
  391. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/power.js +1 -0
  392. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/security.js +1 -0
  393. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/signage.js +1 -0
  394. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/sound.js +1 -0
  395. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/storage.js +1 -0
  396. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/time.js +1 -0
  397. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/utility.js +1 -0
  398. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.0/video.js +1 -0
  399. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/configuration.js +1 -0
  400. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/deviceInfo.js +1 -0
  401. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/inputSource.js +1 -0
  402. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/iot.js +1 -0
  403. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/power.js +1 -0
  404. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/security.js +1 -0
  405. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/signage.js +1 -0
  406. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/sound.js +1 -0
  407. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/storage.js +1 -0
  408. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/time.js +1 -0
  409. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/utility.js +1 -0
  410. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.1/video.js +1 -0
  411. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/configuration.js +1 -0
  412. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/deviceInfo.js +1 -0
  413. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/inputSource.js +1 -0
  414. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/iot.js +1 -0
  415. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/led.js +1 -0
  416. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/power.js +1 -0
  417. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/security.js +1 -0
  418. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/signage.js +1 -0
  419. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/sound.js +1 -0
  420. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/storage.js +1 -0
  421. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/time.js +1 -0
  422. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/utility.js +1 -0
  423. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.5/video.js +1 -0
  424. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/configuration.js +1 -0
  425. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/deviceInfo.js +1 -0
  426. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/inputSource.js +1 -0
  427. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/iot.js +1 -0
  428. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/led.js +1 -0
  429. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/power.js +1 -0
  430. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/security.js +1 -0
  431. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/signage.js +1 -0
  432. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/sound.js +1 -0
  433. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/storage.js +1 -0
  434. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/time.js +1 -0
  435. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/utility.js +1 -0
  436. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.7.6/video.js +1 -0
  437. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/configuration.js +1 -0
  438. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/deviceInfo.js +1 -0
  439. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/inputSource.js +1 -0
  440. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/iot.js +1 -0
  441. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/power.js +1 -0
  442. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/security.js +1 -0
  443. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/signage.js +1 -0
  444. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/sound.js +1 -0
  445. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/storage.js +1 -0
  446. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/time.js +1 -0
  447. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/utility.js +1 -0
  448. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.0/video.js +1 -0
  449. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/configuration.js +1 -0
  450. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/deviceInfo.js +1 -0
  451. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/inputSource.js +1 -0
  452. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/iot.js +1 -0
  453. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/power.js +1 -0
  454. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/security.js +1 -0
  455. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/signage.js +1 -0
  456. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/sound.js +1 -0
  457. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/storage.js +1 -0
  458. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/time.js +1 -0
  459. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/utility.js +1 -0
  460. package/files/templates/signage-sdk-templates/Download_Progress/js/cordova-cd/1.8.1/video.js +1 -0
  461. package/files/templates/signage-sdk-templates/Download_Progress/js/custom/custom1.2.js +14 -0
  462. package/files/templates/signage-sdk-templates/Download_Progress/js/custom/custom1.3.1.js +1 -0
  463. package/files/templates/signage-sdk-templates/Download_Progress/js/custom/custom1.3.js +1 -0
  464. package/files/templates/signage-sdk-templates/Download_Progress/js/custom/custom1.4.js +14 -0
  465. package/files/templates/signage-sdk-templates/Download_Progress/js/harmony/README.txt +40 -0
  466. package/files/templates/signage-sdk-templates/Download_Progress/js/harmony/gpio.js +16 -0
  467. package/files/templates/signage-sdk-templates/Download_Progress/js/harmony/gps.js +16 -0
  468. package/files/templates/signage-sdk-templates/Download_Progress/js/harmony/humidity.js +16 -0
  469. package/files/templates/signage-sdk-templates/Download_Progress/js/harmony/light.js +16 -0
  470. package/files/templates/signage-sdk-templates/Download_Progress/js/harmony/nfc.js +16 -0
  471. package/files/templates/signage-sdk-templates/Download_Progress/js/harmony/rfid.js +16 -0
  472. package/files/templates/signage-sdk-templates/Download_Progress/js/harmony/temperature.js +16 -0
  473. package/files/templates/signage-sdk-templates/Download_Progress/js/harmony/thermalPrinter.js +16 -0
  474. package/files/templates/signage-sdk-templates/Download_Progress/js/idcap.js +21 -0
  475. package/files/templates/signage-sdk-templates/Download_Progress/js/webOS/LICENSE-2.0.txt +202 -0
  476. package/files/templates/signage-sdk-templates/Download_Progress/js/webOS/webOS.js +1 -0
  477. package/files/templates/signage-sdk-templates/Download_Progress/res/webossignage_logo.png +0 -0
  478. package/files/templates/signage-sdk-templates/Fashion_Multimedia_Ad/css/styles.css +270 -0
  479. package/files/templates/signage-sdk-templates/Fashion_Multimedia_Ad/data/data.json +12 -0
  480. package/files/templates/signage-sdk-templates/Fashion_Multimedia_Ad/fonts/MuseoSans300.otf +0 -0
  481. package/files/templates/signage-sdk-templates/Fashion_Multimedia_Ad/fonts/MuseoSans700Italic.otf +0 -0
  482. package/files/templates/signage-sdk-templates/Fashion_Multimedia_Ad/index.html +43 -0
  483. package/files/templates/signage-sdk-templates/Fashion_Multimedia_Ad/js/controller.js +263 -0
  484. package/files/templates/signage-sdk-templates/Fashion_Multimedia_Ad/js/helpers/util.js +130 -0
  485. package/files/templates/signage-sdk-templates/Fashion_Multimedia_Ad/readme.txt +26 -0
  486. package/files/templates/signage-sdk-templates/Fashion_Multimedia_Ad/res/images/tpl_01_img_sign.png +0 -0
  487. package/files/templates/signage-sdk-templates/Fashion_Multimedia_Ad/res/images/tpl_01_logo_nike.png +0 -0
  488. package/files/templates/signage-sdk-templates/Fashion_Multimedia_Ad/res/videos/tpl_01_video.mp4 +0 -0
  489. package/files/templates/signage-sdk-templates/File_Explorer/README.txt +16 -0
  490. package/files/templates/signage-sdk-templates/File_Explorer/index.html +44 -0
  491. package/files/templates/signage-sdk-templates/File_Explorer/js/Root.js +48 -0
  492. package/files/templates/signage-sdk-templates/File_Explorer/js/definition.js +59 -0
  493. package/files/templates/signage-sdk-templates/File_Explorer/js/explorer.js +367 -0
  494. package/files/templates/signage-sdk-templates/File_Explorer/js/explorerController.js +462 -0
  495. package/files/templates/signage-sdk-templates/File_Explorer/js/idcap.js +21 -0
  496. package/files/templates/signage-sdk-templates/File_Explorer/js/mainController.js +261 -0
  497. package/files/templates/signage-sdk-templates/File_Explorer/style.css +233 -0
  498. package/files/templates/signage-sdk-templates/Flight_Schedule/appinfo.json +11 -0
  499. package/files/templates/signage-sdk-templates/Flight_Schedule/css/styles.css +168 -0
  500. package/files/templates/signage-sdk-templates/Flight_Schedule/data/data.json +5 -0
  501. package/files/templates/signage-sdk-templates/Flight_Schedule/fonts/MuseoSans300.otf +0 -0
  502. package/files/templates/signage-sdk-templates/Flight_Schedule/fonts/MuseoSans500.otf +0 -0
  503. package/files/templates/signage-sdk-templates/Flight_Schedule/fonts/MuseoSans700.otf +0 -0
  504. package/files/templates/signage-sdk-templates/Flight_Schedule/images/AAir.png +0 -0
  505. package/files/templates/signage-sdk-templates/Flight_Schedule/images/BAirline.png +0 -0
  506. package/files/templates/signage-sdk-templates/Flight_Schedule/images/CAirline.png +0 -0
  507. package/files/templates/signage-sdk-templates/Flight_Schedule/images/DAir.png +0 -0
  508. package/files/templates/signage-sdk-templates/Flight_Schedule/images/EAirline.png +0 -0
  509. package/files/templates/signage-sdk-templates/Flight_Schedule/images/tpl_05_img_flight.png +0 -0
  510. package/files/templates/signage-sdk-templates/Flight_Schedule/index.html +32 -0
  511. package/files/templates/signage-sdk-templates/Flight_Schedule/js/controller.js +235 -0
  512. package/files/templates/signage-sdk-templates/Flight_Schedule/js/helpers/util.js +183 -0
  513. package/files/templates/signage-sdk-templates/Flight_Schedule/readme.txt +29 -0
  514. package/files/templates/signage-sdk-templates/Flight_Schedule/server/example.json +4 -0
  515. package/files/templates/signage-sdk-templates/Flight_Schedule/server/package.json +9 -0
  516. package/files/templates/signage-sdk-templates/Flight_Schedule/server/readme.txt +30 -0
  517. package/files/templates/signage-sdk-templates/Flight_Schedule/server/routes/flights.js +493 -0
  518. package/files/templates/signage-sdk-templates/Flight_Schedule/server/server.js +43 -0
  519. package/files/templates/signage-sdk-templates/Information_Board/css/styles.css +239 -0
  520. package/files/templates/signage-sdk-templates/Information_Board/data/data.json +49 -0
  521. package/files/templates/signage-sdk-templates/Information_Board/fonts/Museo Sans 300.otf +0 -0
  522. package/files/templates/signage-sdk-templates/Information_Board/fonts/Museo Sans 500.otf +0 -0
  523. package/files/templates/signage-sdk-templates/Information_Board/fonts/Museo Sans 700.otf +0 -0
  524. package/files/templates/signage-sdk-templates/Information_Board/index.html +101 -0
  525. package/files/templates/signage-sdk-templates/Information_Board/js/controller.js +111 -0
  526. package/files/templates/signage-sdk-templates/Information_Board/js/helpers/util.js +130 -0
  527. package/files/templates/signage-sdk-templates/Information_Board/readme.txt +22 -0
  528. package/files/templates/signage-sdk-templates/Information_Board/res/images/tpl_06_img_main_01.png +0 -0
  529. package/files/templates/signage-sdk-templates/Information_Board/res/images/tpl_06_img_news.png +0 -0
  530. package/files/templates/signage-sdk-templates/Information_Board/res/images/tpl_06_logo_harvard.png +0 -0
  531. package/files/templates/signage-sdk-templates/Information_Kiosk/css/styles.css +387 -0
  532. package/files/templates/signage-sdk-templates/Information_Kiosk/data/data.json +185 -0
  533. package/files/templates/signage-sdk-templates/Information_Kiosk/fonts/Museo Sans 300 Italic.otf +0 -0
  534. package/files/templates/signage-sdk-templates/Information_Kiosk/fonts/Museo Sans 300.otf +0 -0
  535. package/files/templates/signage-sdk-templates/Information_Kiosk/fonts/Museo Sans 500 Italic.otf +0 -0
  536. package/files/templates/signage-sdk-templates/Information_Kiosk/fonts/Museo Sans 500.otf +0 -0
  537. package/files/templates/signage-sdk-templates/Information_Kiosk/fonts/Museo Sans 700 Italic.otf +0 -0
  538. package/files/templates/signage-sdk-templates/Information_Kiosk/fonts/Museo Sans 700.otf +0 -0
  539. package/files/templates/signage-sdk-templates/Information_Kiosk/index.html +320 -0
  540. package/files/templates/signage-sdk-templates/Information_Kiosk/js/controller.js +373 -0
  541. package/files/templates/signage-sdk-templates/Information_Kiosk/js/helpers/util.js +130 -0
  542. package/files/templates/signage-sdk-templates/Information_Kiosk/readme.txt +26 -0
  543. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_btn_arrow_l_n.png +0 -0
  544. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_btn_arrow_l_p.png +0 -0
  545. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_btn_arrow_r_n.png +0 -0
  546. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_btn_arrow_r_p.png +0 -0
  547. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_btn_close_n.png +0 -0
  548. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_btn_close_p.png +0 -0
  549. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_btn_rotation_n.png +0 -0
  550. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_btn_rotation_p.png +0 -0
  551. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_bg_01.png +0 -0
  552. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_01.png +0 -0
  553. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_02.png +0 -0
  554. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_03.png +0 -0
  555. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_04.png +0 -0
  556. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_05.png +0 -0
  557. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_06.png +0 -0
  558. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_07.png +0 -0
  559. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_08.png +0 -0
  560. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_09.png +0 -0
  561. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_10.png +0 -0
  562. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_11.png +0 -0
  563. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_12.png +0 -0
  564. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_3_01.png +0 -0
  565. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_3_02.png +0 -0
  566. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_3_03.png +0 -0
  567. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_3_04.png +0 -0
  568. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_3_05.png +0 -0
  569. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_list_3_06.png +0 -0
  570. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_01.png +0 -0
  571. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_02.png +0 -0
  572. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_03.png +0 -0
  573. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_04.png +0 -0
  574. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_05.png +0 -0
  575. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_06.png +0 -0
  576. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_07.png +0 -0
  577. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_08.png +0 -0
  578. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_09.png +0 -0
  579. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_10.png +0 -0
  580. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_11.png +0 -0
  581. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_popup_list_12.png +0 -0
  582. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_style_01.png +0 -0
  583. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_img_style_02.png +0 -0
  584. package/files/templates/signage-sdk-templates/Information_Kiosk/res/images/tpl_10_logo.png +0 -0
  585. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/index.html +40 -0
  586. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova/2.7.0/cordova.webos.js +7038 -0
  587. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova/LICENSE +201 -0
  588. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.2/configuration.js +1 -0
  589. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.2/deviceInfo.js +1 -0
  590. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.2/inputSource.js +1 -0
  591. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.2/power.js +1 -0
  592. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.2/signage.js +1 -0
  593. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.2/sound.js +1 -0
  594. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.2/storage.js +23 -0
  595. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.2/video.js +1 -0
  596. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.3/configuration.js +1 -0
  597. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.3/deviceInfo.js +1 -0
  598. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.3/inputSource.js +1 -0
  599. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.3/power.js +1 -0
  600. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.3/signage.js +1 -0
  601. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.3/sound.js +1 -0
  602. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.3/storage.js +1 -0
  603. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.3/video.js +1 -0
  604. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.4.5/configuration.js +1 -0
  605. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.4.5/deviceInfo.js +1 -0
  606. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.4.5/inputSource.js +1 -0
  607. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.4.5/power.js +1 -0
  608. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.4.5/security.js +1 -0
  609. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.4.5/signage.js +1 -0
  610. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.4.5/sound.js +1 -0
  611. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.4.5/storage.js +1 -0
  612. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.4.5/time.js +1 -0
  613. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.4.5/utility.js +1 -0
  614. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.4.5/video.js +1 -0
  615. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.5.12/configuration.js +1 -0
  616. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.5.12/deviceInfo.js +1 -0
  617. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.5.12/inputSource.js +1 -0
  618. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.5.12/power.js +1 -0
  619. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.5.12/security.js +1 -0
  620. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.5.12/signage.js +1 -0
  621. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.5.12/sound.js +1 -0
  622. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.5.12/storage.js +1 -0
  623. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.5.12/time.js +1 -0
  624. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.5.12/utility.js +1 -0
  625. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.5.12/video.js +1 -0
  626. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/configuration.js +1 -0
  627. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/deviceInfo.js +1 -0
  628. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/inputSource.js +1 -0
  629. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/led.js +1 -0
  630. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/power.js +1 -0
  631. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/security.js +1 -0
  632. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/signage.js +1 -0
  633. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/sound.js +1 -0
  634. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/storage.js +1 -0
  635. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/time.js +1 -0
  636. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/utility.js +1 -0
  637. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.6.8/video.js +1 -0
  638. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/configuration.js +1 -0
  639. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/deviceInfo.js +1 -0
  640. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/inputSource.js +1 -0
  641. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/iot.js +1 -0
  642. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/led.js +1 -0
  643. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/power.js +1 -0
  644. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/security.js +1 -0
  645. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/signage.js +1 -0
  646. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/sound.js +1 -0
  647. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/storage.js +1 -0
  648. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/time.js +1 -0
  649. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/utility.js +1 -0
  650. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.7.6/video.js +1 -0
  651. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/configuration.js +1 -0
  652. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/deviceInfo.js +1 -0
  653. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/inputSource.js +1 -0
  654. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/iot.js +1 -0
  655. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/power.js +1 -0
  656. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/security.js +1 -0
  657. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/signage.js +1 -0
  658. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/sound.js +1 -0
  659. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/storage.js +1 -0
  660. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/time.js +1 -0
  661. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/utility.js +1 -0
  662. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/cordova-cd/1.8.1/video.js +1 -0
  663. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/custom1.4.js +14 -0
  664. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/idcap.js +21 -0
  665. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/initializer.js +234 -0
  666. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/remocon.js +73 -0
  667. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/scheduler.js +84 -0
  668. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/js/videoPlayer.js +352 -0
  669. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/remocon.png +0 -0
  670. package/files/templates/signage-sdk-templates/Local_Content_Scheduling/style.css +99 -0
  671. package/files/templates/signage-sdk-templates/Mart/css/styles.css +248 -0
  672. package/files/templates/signage-sdk-templates/Mart/data/data.json +37 -0
  673. package/files/templates/signage-sdk-templates/Mart/fonts/Museo Sans 300 Italic.otf +0 -0
  674. package/files/templates/signage-sdk-templates/Mart/fonts/Museo Sans 300.otf +0 -0
  675. package/files/templates/signage-sdk-templates/Mart/fonts/Museo Sans 500.otf +0 -0
  676. package/files/templates/signage-sdk-templates/Mart/fonts/Museo Sans 700.otf +0 -0
  677. package/files/templates/signage-sdk-templates/Mart/index.html +81 -0
  678. package/files/templates/signage-sdk-templates/Mart/js/controller.js +102 -0
  679. package/files/templates/signage-sdk-templates/Mart/js/helpers/util.js +130 -0
  680. package/files/templates/signage-sdk-templates/Mart/readme.txt +26 -0
  681. package/files/templates/signage-sdk-templates/Mart/res/images/tpl_09_img.png +0 -0
  682. package/files/templates/signage-sdk-templates/Mart/res/images/tpl_09_img_bg.png +0 -0
  683. package/files/templates/signage-sdk-templates/Mart/res/images/tpl_09_img_brand.png +0 -0
  684. package/files/templates/signage-sdk-templates/Mart/res/images/tpl_09_img_list_01.png +0 -0
  685. package/files/templates/signage-sdk-templates/Mart/res/images/tpl_09_img_list_02.png +0 -0
  686. package/files/templates/signage-sdk-templates/Mart/res/images/tpl_09_img_list_03.png +0 -0
  687. package/files/templates/signage-sdk-templates/Mart/res/images/tpl_09_img_list_04.png +0 -0
  688. package/files/templates/signage-sdk-templates/Mart/res/images/tpl_09_img_tag.png +0 -0
  689. package/files/templates/signage-sdk-templates/Mart/res/images/tpl_09_logo.png +0 -0
  690. package/files/templates/signage-sdk-templates/Multimedia_Advertisement/css/styles.css +40 -0
  691. package/files/templates/signage-sdk-templates/Multimedia_Advertisement/data/data.json +6 -0
  692. package/files/templates/signage-sdk-templates/Multimedia_Advertisement/index.html +28 -0
  693. package/files/templates/signage-sdk-templates/Multimedia_Advertisement/js/controller.js +427 -0
  694. package/files/templates/signage-sdk-templates/Multimedia_Advertisement/js/helpers/util.js +134 -0
  695. package/files/templates/signage-sdk-templates/Multimedia_Advertisement/readme.txt +26 -0
  696. package/files/templates/signage-sdk-templates/Multimedia_Advertisement/res/images/tpl_02_img_poster.jpg +0 -0
  697. package/files/templates/signage-sdk-templates/Multimedia_Advertisement/res/videos/tpl_02_video_01.mp4 +0 -0
  698. package/files/templates/signage-sdk-templates/Multimedia_Advertisement/res/videos/tpl_02_video_02.mp4 +0 -0
  699. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/css/styles.css +163 -0
  700. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/data/data.json +92 -0
  701. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/fonts/MuseoSans300.otf +0 -0
  702. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/fonts/MuseoSans500.otf +0 -0
  703. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/fonts/MuseoSans700.otf +0 -0
  704. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/fonts/MuseoSans700Italic.otf +0 -0
  705. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/index.html +197 -0
  706. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/js/controller.js +158 -0
  707. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/js/helpers/util.js +130 -0
  708. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/readme.txt +26 -0
  709. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/res/images/tpl_04_bg_top.png +0 -0
  710. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/res/images/tpl_04_img_menu_01.png +0 -0
  711. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/res/images/tpl_04_img_menu_02.png +0 -0
  712. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/res/images/tpl_04_img_menu_03.png +0 -0
  713. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/res/images/tpl_04_img_menu_04.png +0 -0
  714. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/res/images/tpl_04_img_menu_05.png +0 -0
  715. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/res/images/tpl_04_img_menu_06.png +0 -0
  716. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/res/images/tpl_04_img_menu_07.png +0 -0
  717. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/res/images/tpl_04_img_menu_08.png +0 -0
  718. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/res/images/tpl_04_img_menu_09.png +0 -0
  719. package/files/templates/signage-sdk-templates/Price_Board_for_QSR/res/images/tpl_04_logo.png +0 -0
  720. package/files/templates/signage-sdk-templates/Simple_Network_FailOver/index.html +29 -0
  721. package/files/templates/signage-sdk-templates/Simple_Network_FailOver/js/idcap.js +21 -0
  722. package/files/templates/signage-sdk-templates/Simple_Network_FailOver/networkMonitor.js +136 -0
  723. package/files/templates/signage-sdk-templates/Simple_Network_FailOver/style.css +142 -0
  724. package/files/templates/signage-sdk-templates/Special_Menu_Board/css/styles.css +281 -0
  725. package/files/templates/signage-sdk-templates/Special_Menu_Board/data/data.json +33 -0
  726. package/files/templates/signage-sdk-templates/Special_Menu_Board/fonts/Museo Sans 300 Italic.otf +0 -0
  727. package/files/templates/signage-sdk-templates/Special_Menu_Board/fonts/Museo Sans 300.otf +0 -0
  728. package/files/templates/signage-sdk-templates/Special_Menu_Board/fonts/Museo Sans 500 Italic.otf +0 -0
  729. package/files/templates/signage-sdk-templates/Special_Menu_Board/fonts/Museo Sans 500.otf +0 -0
  730. package/files/templates/signage-sdk-templates/Special_Menu_Board/fonts/Museo Sans 700 Italic.otf +0 -0
  731. package/files/templates/signage-sdk-templates/Special_Menu_Board/fonts/Museo Sans 700.otf +0 -0
  732. package/files/templates/signage-sdk-templates/Special_Menu_Board/index.html +110 -0
  733. package/files/templates/signage-sdk-templates/Special_Menu_Board/js/controller.js +171 -0
  734. package/files/templates/signage-sdk-templates/Special_Menu_Board/js/helpers/util.js +130 -0
  735. package/files/templates/signage-sdk-templates/Special_Menu_Board/readme.txt +26 -0
  736. package/files/templates/signage-sdk-templates/Special_Menu_Board/res/images/tpl_03_img_bg.png +0 -0
  737. package/files/templates/signage-sdk-templates/Special_Menu_Board/res/images/tpl_03_img_coffe_01.png +0 -0
  738. package/files/templates/signage-sdk-templates/Special_Menu_Board/res/images/tpl_03_img_coffe_01_l.png +0 -0
  739. package/files/templates/signage-sdk-templates/Special_Menu_Board/res/images/tpl_03_img_coffe_02.png +0 -0
  740. package/files/templates/signage-sdk-templates/Special_Menu_Board/res/images/tpl_03_img_coffe_03.png +0 -0
  741. package/files/templates/signage-sdk-templates/Special_Menu_Board/res/images/tpl_03_img_coffe_04.png +0 -0
  742. package/files/templates/signage-sdk-templates/Special_Menu_Board/res/images/tpl_03_img_coffe_05.png +0 -0
  743. package/files/templates/signage-sdk-templates/Special_Menu_Board/res/images/tpl_03_logo_01.png +0 -0
  744. package/files/templates/signage-sdk-templates/Special_Menu_Board/res/images/tpl_03_logo_02.png +0 -0
  745. package/files/templates/signage-sdk-templates/Wayfinder/css/styles.css +634 -0
  746. package/files/templates/signage-sdk-templates/Wayfinder/data/data.json +339 -0
  747. package/files/templates/signage-sdk-templates/Wayfinder/fonts/MuseoSans300.otf +0 -0
  748. package/files/templates/signage-sdk-templates/Wayfinder/fonts/MuseoSans500.otf +0 -0
  749. package/files/templates/signage-sdk-templates/Wayfinder/fonts/MuseoSans700.otf +0 -0
  750. package/files/templates/signage-sdk-templates/Wayfinder/fonts/MuseoSans700Italic.otf +0 -0
  751. package/files/templates/signage-sdk-templates/Wayfinder/index.html +171 -0
  752. package/files/templates/signage-sdk-templates/Wayfinder/js/controller.js +447 -0
  753. package/files/templates/signage-sdk-templates/Wayfinder/js/helpers/util.js +175 -0
  754. package/files/templates/signage-sdk-templates/Wayfinder/readme.txt +26 -0
  755. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_btn_back_n.png +0 -0
  756. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_icon_dot_n.png +0 -0
  757. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_icon_dot_s.png +0 -0
  758. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_01.png +0 -0
  759. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_02.png +0 -0
  760. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_03.png +0 -0
  761. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_all_01_d.png +0 -0
  762. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_all_01_n.png +0 -0
  763. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_all_02_d.png +0 -0
  764. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_all_02_n.png +0 -0
  765. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_all_03_d.png +0 -0
  766. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_all_03_n.png +0 -0
  767. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_all_shadow.png +0 -0
  768. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_home_01_n.png +0 -0
  769. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_home_02_n.png +0 -0
  770. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_floormap_home_03_n.png +0 -0
  771. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_point.png +0 -0
  772. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_img_point_shadow.png +0 -0
  773. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_list_icon_elevator.png +0 -0
  774. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_list_icon_escalator.png +0 -0
  775. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_list_icon_exit.png +0 -0
  776. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_list_icon_info.png +0 -0
  777. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_list_icon_parking.png +0 -0
  778. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_list_icon_toilet.png +0 -0
  779. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_logo_lg.png +0 -0
  780. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_logo_shoppingmall_name.png +0 -0
  781. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_logo_store.png +0 -0
  782. package/files/templates/signage-sdk-templates/Wayfinder/res/images/tpl_11_popup_bg.png +0 -0
  783. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/css/styles.css +136 -0
  784. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/data/data.json +33 -0
  785. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/fonts/Museo Sans 300.otf +0 -0
  786. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/fonts/Museo Sans 500.otf +0 -0
  787. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/fonts/Museo Sans 700.otf +0 -0
  788. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/index.html +51 -0
  789. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/js/controller.js +265 -0
  790. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/js/helpers/util.js +130 -0
  791. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/readme.txt +26 -0
  792. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/ajax.gif +0 -0
  793. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_icon_cloudy.png +0 -0
  794. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_icon_partlycloudy.png +0 -0
  795. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_icon_rainy.png +0 -0
  796. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_icon_snowy.png +0 -0
  797. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_icon_sunny.png +0 -0
  798. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_icon_thunder.png +0 -0
  799. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_icon_windy.png +0 -0
  800. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_img_01.png +0 -0
  801. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_img_02.png +0 -0
  802. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_img_03.png +0 -0
  803. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_img_04.png +0 -0
  804. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_img_05.png +0 -0
  805. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_img_06.png +0 -0
  806. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_img_07.png +0 -0
  807. package/files/templates/signage-sdk-templates/Weather-dependent_Ad/res/images/tpl_08_logo.png +0 -0
  808. package/files/templates/signage-sdk-templates/Widget_Overlay/css/styles.css +312 -0
  809. package/files/templates/signage-sdk-templates/Widget_Overlay/data/data.json +16 -0
  810. package/files/templates/signage-sdk-templates/Widget_Overlay/data/newsWidget.json +21 -0
  811. package/files/templates/signage-sdk-templates/Widget_Overlay/data/shareWidget.json +112 -0
  812. package/files/templates/signage-sdk-templates/Widget_Overlay/data/weatherWidget.json +45 -0
  813. package/files/templates/signage-sdk-templates/Widget_Overlay/fonts/MuseoSans300.otf +0 -0
  814. package/files/templates/signage-sdk-templates/Widget_Overlay/fonts/MuseoSans500.otf +0 -0
  815. package/files/templates/signage-sdk-templates/Widget_Overlay/fonts/MuseoSans700.otf +0 -0
  816. package/files/templates/signage-sdk-templates/Widget_Overlay/index.html +62 -0
  817. package/files/templates/signage-sdk-templates/Widget_Overlay/js/controller.js +390 -0
  818. package/files/templates/signage-sdk-templates/Widget_Overlay/js/helpers/util.js +162 -0
  819. package/files/templates/signage-sdk-templates/Widget_Overlay/readme.txt +26 -0
  820. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/Namo.jpg +0 -0
  821. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/NotAvailable.png +0 -0
  822. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/clear.png +0 -0
  823. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/clouds.png +0 -0
  824. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/default.png +0 -0
  825. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/koreanFt.jpg +0 -0
  826. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/mist.png +0 -0
  827. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/rain.png +0 -0
  828. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/snow.png +0 -0
  829. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/thunder.png +0 -0
  830. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/tpl_07_icon_down_01.png +0 -0
  831. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/tpl_07_icon_down_02.png +0 -0
  832. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/tpl_07_icon_up_01.png +0 -0
  833. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/tpl_07_icon_up_02.png +0 -0
  834. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/tpl_07_img_news.png +0 -0
  835. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/tpl_07_img_news1.png +0 -0
  836. package/files/templates/signage-sdk-templates/Widget_Overlay/res/images/tpl_07_video_dim.png +0 -0
  837. package/files/templates/signage-sdk-templates/Widget_Overlay/res/videos/tpl_07_video.mp4 +0 -0
  838. package/files/templates/signage-sdk-templates/appinfo/appinfo.json +11 -0
  839. package/files/templates/signage-sdk-templates/idcap_api/1.1.0/js/idcap.js +21 -0
  840. package/files/templates/signage-sdk-templates/idcap_api/1.1.0/js/release_notes.txt +25 -0
  841. package/files/templates/signage-sdk-templates/scap_api/1.3/js/cordova/2.7.0/cordova.webos.js +7025 -0
  842. package/files/templates/signage-sdk-templates/scap_api/1.3/js/cordova/LICENSE +7025 -0
  843. package/files/templates/signage-sdk-templates/scap_api/1.3/js/cordova-cd/1.3/configuration.js +1 -0
  844. package/files/templates/signage-sdk-templates/scap_api/1.3/js/cordova-cd/1.3/deviceInfo.js +1 -0
  845. package/files/templates/signage-sdk-templates/scap_api/1.3/js/cordova-cd/1.3/inputSource.js +1 -0
  846. package/files/templates/signage-sdk-templates/scap_api/1.3/js/cordova-cd/1.3/power.js +1 -0
  847. package/files/templates/signage-sdk-templates/scap_api/1.3/js/cordova-cd/1.3/signage.js +1 -0
  848. package/files/templates/signage-sdk-templates/scap_api/1.3/js/cordova-cd/1.3/sound.js +1 -0
  849. package/files/templates/signage-sdk-templates/scap_api/1.3/js/cordova-cd/1.3/storage.js +1 -0
  850. package/files/templates/signage-sdk-templates/scap_api/1.3/js/cordova-cd/1.3/video.js +1 -0
  851. package/files/templates/signage-sdk-templates/scap_api/1.3/js/release_notes.txt +109 -0
  852. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova/2.7.0/cordova.webos.js +7038 -0
  853. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova/LICENSE +201 -0
  854. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova-cd/configuration.js +1 -0
  855. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova-cd/deviceInfo.js +1 -0
  856. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova-cd/inputSource.js +1 -0
  857. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova-cd/power.js +1 -0
  858. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova-cd/security.js +1 -0
  859. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova-cd/signage.js +1 -0
  860. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova-cd/sound.js +1 -0
  861. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova-cd/storage.js +1 -0
  862. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova-cd/time.js +1 -0
  863. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova-cd/utility.js +1 -0
  864. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/cordova-cd/video.js +1 -0
  865. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/css/all.css +358 -0
  866. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/css/fonts/mplus-1m-bold-webfont.eot +0 -0
  867. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/css/fonts/mplus-1m-bold-webfont.svg +134 -0
  868. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/css/fonts/mplus-1m-bold-webfont.ttf +0 -0
  869. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/css/fonts/mplus-1m-bold-webfont.woff +0 -0
  870. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/css/fonts/mplus-1m-regular-webfont.eot +0 -0
  871. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/css/fonts/mplus-1m-regular-webfont.svg +134 -0
  872. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/css/fonts/mplus-1m-regular-webfont.ttf +0 -0
  873. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/css/fonts/mplus-1m-regular-webfont.woff +0 -0
  874. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/css/handheld.css +217 -0
  875. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/css/screen.css +405 -0
  876. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/files.html +577 -0
  877. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/index.html +1203 -0
  878. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/intro.html +100 -0
  879. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/all.js +326 -0
  880. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/dessert.css +34 -0
  881. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-apollo.js +51 -0
  882. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-clj.js +64 -0
  883. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-css.js +78 -0
  884. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-go.js +58 -0
  885. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-hs.js +101 -0
  886. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-lisp.js +93 -0
  887. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-lua.js +59 -0
  888. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-ml.js +56 -0
  889. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-n.js +62 -0
  890. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-proto.js +35 -0
  891. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-scala.js +54 -0
  892. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-sql.js +57 -0
  893. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-tex.js +46 -0
  894. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-vb.js +61 -0
  895. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-vhdl.js +34 -0
  896. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-wiki.js +53 -0
  897. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-xq.js +67 -0
  898. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/lang-yaml.js +27 -0
  899. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/prettify.css +52 -0
  900. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/highlighter/prettify.js +1477 -0
  901. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/javascript/html5.js +6 -0
  902. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#clearCache.html +550 -0
  903. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getCurrentTime.html +560 -0
  904. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getLocaleList.html +560 -0
  905. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getOSDLanguage.html +560 -0
  906. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getOSDLock.html +560 -0
  907. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getPictureMode.html +560 -0
  908. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getPictureProperty.html +560 -0
  909. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getProperty.html +561 -0
  910. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getServerProperty.html +560 -0
  911. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getTimeZone.html +560 -0
  912. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getTimeZoneList.html +560 -0
  913. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getUSBLock.html +560 -0
  914. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#getVirtualKeyboardLanguage.html +560 -0
  915. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#restartApplication.html +550 -0
  916. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#setCurrentTime.html +566 -0
  917. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#setOSDLanguage.html +566 -0
  918. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#setOSDLock.html +566 -0
  919. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#setPictureMode.html +566 -0
  920. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#setPictureProperty.html +566 -0
  921. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#setProperty.html +561 -0
  922. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#setServerProperty.html +610 -0
  923. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#setTimeZone.html +566 -0
  924. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#setUSBLock.html +566 -0
  925. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration#setVirtualKeyboardLanguage.html +566 -0
  926. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration.AppMode.html +685 -0
  927. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration.AppType.html +640 -0
  928. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Configuration.PictureMode.html +910 -0
  929. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#connectWifi.html +561 -0
  930. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#getBeaconInfo.html +560 -0
  931. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#getEddystoneInfo.html +560 -0
  932. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#getNetworkInfo.html +560 -0
  933. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#getNetworkMacInfo.html +560 -0
  934. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#getPlatformInfo.html +560 -0
  935. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#getProxyInfo.html +560 -0
  936. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#getSoftApInfo.html +560 -0
  937. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#getSystemUsageInfo.html +566 -0
  938. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#getWifiList.html +560 -0
  939. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#getiBeaconInfo.html +560 -0
  940. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#setBeaconInfo.html +561 -0
  941. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#setEddystoneInfo.html +566 -0
  942. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#setNetworkInfo.html +561 -0
  943. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#setProxyInfo.html +566 -0
  944. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#setSoftApInfo.html +561 -0
  945. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#setiBeaconInfo.html +566 -0
  946. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#startWps.html +566 -0
  947. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo#stopWps.html +555 -0
  948. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/DeviceInfo.EddystoneFrame.html +640 -0
  949. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Error.ERROR_CODE.html +820 -0
  950. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Error.html +460 -0
  951. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/InputSource#changeInputSource.html +566 -0
  952. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/InputSource#getInputSourceStatus.html +560 -0
  953. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/InputSource#initialize.html +561 -0
  954. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#addOffTimer.html +566 -0
  955. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#addOnTimer.html +566 -0
  956. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#deleteOffTimer.html +566 -0
  957. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#deleteOnTimer.html +566 -0
  958. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#enableAllOffTimer.html +566 -0
  959. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#enableAllOnTimer.html +566 -0
  960. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#enableWakeOnLan.html +566 -0
  961. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#executePowerCommand.html +566 -0
  962. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#getDPMWakeup.html +560 -0
  963. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#getOffTimerList.html +560 -0
  964. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#getOnTimerList.html +560 -0
  965. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#getPMMode.html +560 -0
  966. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#getPowerOnDelay.html +560 -0
  967. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#getPowerStatus.html +560 -0
  968. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#setDPMWakeup.html +566 -0
  969. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#setDisplayMode.html +566 -0
  970. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#setPMMode.html +566 -0
  971. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power#setPowerOnDelay.html +566 -0
  972. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power.DPMSignalType.html +640 -0
  973. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power.DisplayMode.html +640 -0
  974. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power.PMMode.html +775 -0
  975. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power.PowerCommand.html +640 -0
  976. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Power.TimerWeek.html +910 -0
  977. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Security#existServerCertificate.html +561 -0
  978. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Security#registerServerCertificate.html +561 -2
  979. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Security#unregisterServerCertificate.html +561 -0
  980. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#captureScreen.html +561 -0
  981. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#enableCheckScreen.html +566 -0
  982. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#getFailoverMode.html +555 -0
  983. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#getIntelligentAuto.html +560 -0
  984. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#getLanDaisyChain.html +560 -0
  985. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#getPowerSaveMode.html +555 -0
  986. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#getSignageInfo.html +555 -0
  987. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#getStudioMode.html +560 -0
  988. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#getSystemMonitoringInfo.html +555 -0
  989. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#getTileInfo.html +555 -0
  990. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#getUsageData.html +555 -0
  991. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#getUsagePermission.html +555 -0
  992. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#registerSystemMonitor.html +573 -0
  993. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#setDigitalAudioInputMode.html +567 -0
  994. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#setFailoverMode.html +567 -0
  995. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#setIntelligentAuto.html +566 -0
  996. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#setIsmMethod.html +567 -0
  997. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#setLanDaisyChain.html +566 -0
  998. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#setPortraitMode.html +567 -0
  999. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#setPowerSaveMode.html +567 -0
  1000. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#setStudioMode.html +566 -0
  1001. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#setTileInfo.html +567 -0
  1002. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#setUsagePermission.html +567 -0
  1003. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage#unregisterSystemMonitor.html +555 -0
  1004. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage.AutomaticStandbyMode.html +640 -0
  1005. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage.DigitalAudioInput.html +640 -0
  1006. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage.DpmMode.html +910 -0
  1007. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage.EventType.html +775 -0
  1008. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage.FailoverMode.html +685 -0
  1009. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage.ImgResolution.html +640 -0
  1010. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage.IsmMethod.html +910 -0
  1011. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage.KeyOperationMode.html +685 -0
  1012. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage.MonitoringSource.html +775 -0
  1013. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Signage.OsdPortraitMode.html +640 -0
  1014. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Sound#getSoundMode.html +560 -0
  1015. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Sound#getSoundOut.html +560 -0
  1016. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Sound#getSoundStatus.html +560 -0
  1017. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Sound#setExternalSpeaker.html +566 -0
  1018. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Sound#setMuted.html +566 -0
  1019. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Sound#setSoundMode.html +566 -0
  1020. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Sound#setSoundOut.html +566 -0
  1021. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Sound#setVolumeLevel.html +566 -0
  1022. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Sound.SoundMode.html +820 -0
  1023. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Sound.SpeakerType.html +640 -0
  1024. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#changeLogoImage.html +566 -0
  1025. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#copyFile.html +561 -0
  1026. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#downloadFirmware.html +566 -0
  1027. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#exists.html +561 -0
  1028. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#fsync.html +561 -0
  1029. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#getFirmwareUpgradeStatus.html +560 -0
  1030. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#getStorageInfo.html +555 -0
  1031. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#listFiles.html +561 -0
  1032. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#mkdir.html +561 -0
  1033. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#moveFile.html +561 -0
  1034. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#readFile.html +563 -0
  1035. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#removeAll.html +561 -0
  1036. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#removeApplication.html +566 -0
  1037. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#removeFile.html +561 -0
  1038. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#statFile.html +561 -0
  1039. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#unzipFile.html +561 -0
  1040. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#upgradeApplication.html +566 -0
  1041. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#upgradeFirmware.html +560 -0
  1042. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage#writeFile.html +561 -0
  1043. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage.AppMode.html +640 -0
  1044. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage.AppType.html +640 -0
  1045. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Storage.SCAP_URI.html +512 -0
  1046. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Time#addHolidaySchedule.html +566 -0
  1047. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Time#delAllHolidaySchedules.html +566 -0
  1048. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Time#delHolidaySchedule.html +566 -0
  1049. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Time#getAllHolidaySchedules.html +560 -0
  1050. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Time#getHolidayScheduleMode.html +560 -0
  1051. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Time#setHolidayScheduleMode.html +566 -0
  1052. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Utility#createToast.html +561 -0
  1053. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Video#getContentRotation.html +560 -0
  1054. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Video#getVideoStatus.html +560 -0
  1055. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Video#setContentRotation.html +566 -0
  1056. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Video#setRotatedVideoTransform.html +566 -0
  1057. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Video#setVideoSize.html +566 -0
  1058. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/Video#setVideoViewTransform.html +566 -0
  1059. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/_global_.html +453 -0
  1060. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/image/media_status.jpg +0 -0
  1061. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/image/setVideoSize.png +0 -0
  1062. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/src/js_configuration.js.html +2651 -0
  1063. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/src/js_deviceInfo.js.html +1860 -0
  1064. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/src/js_inputSource.js.html +1382 -0
  1065. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/src/js_power.js.html +2697 -0
  1066. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/src/js_security.js.html +357 -0
  1067. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/src/js_signage.js.html +3601 -0
  1068. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/src/js_sound.js.html +1123 -0
  1069. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/src/js_storage.js.html +2615 -0
  1070. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/src/js_time.js.html +720 -0
  1071. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/src/js_utility.js.html +196 -0
  1072. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/doc/symbols/src/js_video.js.html +1090 -0
  1073. package/files/templates/signage-sdk-templates/scap_api/1.4.1/js/release_notes.txt +148 -0
  1074. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova/2.7.0/cordova.webos.js +7038 -0
  1075. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova/LICENSE +201 -0
  1076. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova-cd/configuration.js +1 -0
  1077. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova-cd/deviceInfo.js +1 -0
  1078. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova-cd/inputSource.js +1 -0
  1079. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova-cd/power.js +1 -0
  1080. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova-cd/security.js +1 -0
  1081. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova-cd/signage.js +1 -0
  1082. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova-cd/sound.js +1 -0
  1083. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova-cd/storage.js +1 -0
  1084. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova-cd/time.js +1 -0
  1085. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova-cd/utility.js +1 -0
  1086. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/cordova-cd/video.js +1 -0
  1087. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/css/all.css +358 -0
  1088. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/css/fonts/mplus-1m-bold-webfont.eot +0 -0
  1089. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/css/fonts/mplus-1m-bold-webfont.svg +134 -0
  1090. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/css/fonts/mplus-1m-bold-webfont.ttf +0 -0
  1091. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/css/fonts/mplus-1m-bold-webfont.woff +0 -0
  1092. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/css/fonts/mplus-1m-regular-webfont.eot +0 -0
  1093. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/css/fonts/mplus-1m-regular-webfont.svg +134 -0
  1094. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/css/fonts/mplus-1m-regular-webfont.ttf +0 -0
  1095. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/css/fonts/mplus-1m-regular-webfont.woff +0 -0
  1096. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/css/handheld.css +217 -0
  1097. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/css/screen.css +405 -0
  1098. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/files.html +599 -0
  1099. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/index.html +1280 -0
  1100. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/intro.html +100 -0
  1101. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/all.js +326 -0
  1102. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/dessert.css +34 -0
  1103. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-apollo.js +51 -0
  1104. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-clj.js +64 -0
  1105. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-css.js +78 -0
  1106. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-go.js +58 -0
  1107. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-hs.js +101 -0
  1108. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-lisp.js +93 -0
  1109. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-lua.js +59 -0
  1110. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-ml.js +56 -0
  1111. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-n.js +62 -0
  1112. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-proto.js +35 -0
  1113. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-scala.js +54 -0
  1114. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-sql.js +57 -0
  1115. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-tex.js +46 -0
  1116. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-vb.js +61 -0
  1117. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-vhdl.js +34 -0
  1118. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-wiki.js +53 -0
  1119. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-xq.js +67 -0
  1120. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/lang-yaml.js +27 -0
  1121. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/prettify.css +52 -0
  1122. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/highlighter/prettify.js +1477 -0
  1123. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/javascript/html5.js +6 -0
  1124. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#clearCache.html +572 -0
  1125. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getCurrentTime.html +582 -0
  1126. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getLocaleList.html +582 -0
  1127. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getOSDLanguage.html +582 -0
  1128. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getOSDLock.html +582 -0
  1129. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getPictureMode.html +582 -0
  1130. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getPictureProperty.html +582 -0
  1131. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getProperty.html +583 -0
  1132. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getServerProperty.html +582 -0
  1133. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getTimeZone.html +582 -0
  1134. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getTimeZoneList.html +582 -0
  1135. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getUSBLock.html +582 -0
  1136. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#getVirtualKeyboardLanguage.html +582 -0
  1137. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#restartApplication.html +572 -0
  1138. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#setCurrentTime.html +588 -0
  1139. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#setOSDLanguage.html +588 -0
  1140. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#setOSDLock.html +588 -0
  1141. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#setPictureMode.html +588 -0
  1142. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#setPictureProperty.html +588 -0
  1143. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#setProperty.html +583 -0
  1144. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#setServerProperty.html +632 -0
  1145. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#setTimeZone.html +588 -0
  1146. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#setUSBLock.html +588 -0
  1147. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration#setVirtualKeyboardLanguage.html +588 -0
  1148. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration.AppMode.html +707 -0
  1149. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration.AppType.html +662 -0
  1150. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Configuration.PictureMode.html +932 -0
  1151. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#connectWifi.html +583 -0
  1152. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#getBeaconInfo.html +582 -0
  1153. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#getEddystoneInfo.html +582 -0
  1154. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#getExternalInputList.html +588 -0
  1155. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#getNetworkInfo.html +582 -0
  1156. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#getNetworkMacInfo.html +582 -0
  1157. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#getPlatformInfo.html +582 -0
  1158. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#getProxyInfo.html +582 -0
  1159. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#getSoftApInfo.html +582 -0
  1160. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#getSystemUsageInfo.html +588 -0
  1161. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#getWifiList.html +582 -0
  1162. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#getiBeaconInfo.html +582 -0
  1163. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#setBeaconInfo.html +583 -0
  1164. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#setEddystoneInfo.html +588 -0
  1165. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#setNetworkInfo.html +583 -0
  1166. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#setProxyInfo.html +588 -0
  1167. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#setSoftApInfo.html +583 -0
  1168. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#setiBeaconInfo.html +588 -0
  1169. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#startWps.html +588 -0
  1170. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo#stopWps.html +577 -0
  1171. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/DeviceInfo.EddystoneFrame.html +662 -0
  1172. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Error.ERROR_CODE.html +842 -0
  1173. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Error.html +482 -0
  1174. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/InputSource#changeInputSource.html +588 -0
  1175. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/InputSource#getInputSourceStatus.html +582 -0
  1176. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/InputSource#initialize.html +583 -0
  1177. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#addOffTimer.html +588 -0
  1178. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#addOnTimer.html +588 -0
  1179. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#deleteOffTimer.html +588 -0
  1180. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#deleteOnTimer.html +588 -0
  1181. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#enableAllOffTimer.html +588 -0
  1182. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#enableAllOnTimer.html +588 -0
  1183. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#enableWakeOnLan.html +588 -0
  1184. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#executePowerCommand.html +588 -0
  1185. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#getDPMWakeup.html +582 -0
  1186. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#getOffTimerList.html +582 -0
  1187. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#getOnOffTimeSchedule.html +582 -0
  1188. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#getOnTimerList.html +582 -0
  1189. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#getPMMode.html +582 -0
  1190. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#getPowerOnDelay.html +582 -0
  1191. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#getPowerStatus.html +582 -0
  1192. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#setDPMWakeup.html +588 -0
  1193. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#setDisplayMode.html +588 -0
  1194. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#setOnOffTimeSchedule.html +583 -0
  1195. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#setPMMode.html +588 -0
  1196. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#setPowerOnDelay.html +588 -0
  1197. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power#unsetOnOffTimeSchedule.html +582 -0
  1198. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power.DPMSignalType.html +662 -0
  1199. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power.DisplayMode.html +662 -0
  1200. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power.PMMode.html +797 -0
  1201. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power.PowerCommand.html +662 -0
  1202. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Power.TimerWeek.html +932 -0
  1203. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Security#existServerCertificate.html +583 -0
  1204. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Security#registerServerCertificate.html +583 -2
  1205. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Security#unregisterServerCertificate.html +583 -0
  1206. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#captureScreen.html +583 -0
  1207. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#enableCheckScreen.html +588 -0
  1208. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#getFailoverMode.html +577 -0
  1209. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#getIntelligentAuto.html +582 -0
  1210. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#getLanDaisyChain.html +582 -0
  1211. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#getPowerSaveMode.html +577 -0
  1212. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#getSignageInfo.html +577 -0
  1213. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#getStudioMode.html +582 -0
  1214. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#getSystemMonitoringInfo.html +577 -0
  1215. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#getTileInfo.html +577 -0
  1216. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#getUsageData.html +577 -0
  1217. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#getUsagePermission.html +577 -0
  1218. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#registerRS232CEventListener.html +594 -0
  1219. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#registerSystemMonitor.html +595 -0
  1220. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#setDigitalAudioInputMode.html +589 -0
  1221. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#setFailoverMode.html +589 -0
  1222. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#setIntelligentAuto.html +588 -0
  1223. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#setIsmMethod.html +589 -0
  1224. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#setLanDaisyChain.html +588 -0
  1225. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#setPortraitMode.html +589 -0
  1226. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#setPowerSaveMode.html +589 -0
  1227. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#setStudioMode.html +588 -0
  1228. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#setTileInfo.html +589 -0
  1229. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#setUsagePermission.html +589 -0
  1230. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#unregisterRS232CEventListener.html +582 -0
  1231. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage#unregisterSystemMonitor.html +577 -0
  1232. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage.AutomaticStandbyMode.html +662 -0
  1233. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage.DigitalAudioInput.html +662 -0
  1234. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage.DpmMode.html +932 -0
  1235. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage.EventType.html +797 -0
  1236. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage.FailoverMode.html +707 -0
  1237. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage.ImgResolution.html +662 -0
  1238. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage.IsmMethod.html +932 -0
  1239. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage.KeyOperationMode.html +707 -0
  1240. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage.MonitoringSource.html +797 -0
  1241. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Signage.OsdPortraitMode.html +662 -0
  1242. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Sound#getSoundMode.html +582 -0
  1243. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Sound#getSoundOut.html +582 -0
  1244. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Sound#getSoundStatus.html +582 -0
  1245. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Sound#setExternalSpeaker.html +588 -0
  1246. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Sound#setMuted.html +588 -0
  1247. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Sound#setSoundMode.html +588 -0
  1248. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Sound#setSoundOut.html +588 -0
  1249. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Sound#setVolumeLevel.html +588 -0
  1250. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Sound.SoundMode.html +842 -0
  1251. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Sound.SpeakerType.html +662 -0
  1252. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#changeLogoImage.html +588 -0
  1253. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#copyFile.html +583 -0
  1254. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#decryptFile.html +583 -0
  1255. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#downloadFirmware.html +588 -0
  1256. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#exists.html +583 -0
  1257. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#fsync.html +583 -0
  1258. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#getFirmwareUpgradeStatus.html +582 -0
  1259. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#getMD5Hash.html +583 -0
  1260. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#getStorageInfo.html +577 -0
  1261. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#listFiles.html +583 -0
  1262. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#mkdir.html +583 -0
  1263. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#moveFile.html +583 -0
  1264. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#readFile.html +585 -0
  1265. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#removeAll.html +583 -0
  1266. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#removeApplication.html +588 -0
  1267. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#removeFile.html +583 -0
  1268. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#statFile.html +583 -0
  1269. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#unzipFile.html +583 -0
  1270. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#upgradeApplication.html +588 -0
  1271. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#upgradeFirmware.html +582 -0
  1272. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage#writeFile.html +583 -0
  1273. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage.AppMode.html +662 -0
  1274. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage.AppType.html +662 -0
  1275. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Storage.SCAP_URI.html +534 -0
  1276. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Time#addHolidaySchedule.html +588 -0
  1277. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Time#delAllHolidaySchedules.html +588 -0
  1278. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Time#delHolidaySchedule.html +588 -0
  1279. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Time#getAllHolidaySchedules.html +582 -0
  1280. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Time#getHolidaySchedule.html +582 -0
  1281. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Time#getHolidayScheduleMode.html +582 -0
  1282. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Time#setHolidaySchedule.html +583 -0
  1283. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Time#setHolidayScheduleMode.html +588 -0
  1284. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Time#unsetHolidaySchedule.html +582 -0
  1285. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Utility#createToast.html +583 -0
  1286. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Video#getContentRotation.html +586 -0
  1287. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Video#getVideoStatus.html +582 -0
  1288. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Video#setContentRotation.html +592 -0
  1289. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Video#setRotatedVideoTransform.html +592 -0
  1290. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Video#setVideoSize.html +588 -0
  1291. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/Video#setVideoViewTransform.html +592 -0
  1292. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/_global_.html +475 -0
  1293. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/image/media_status.jpg +0 -0
  1294. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/image/setVideoSize.png +0 -0
  1295. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/src/js_configuration.js.html +2651 -0
  1296. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/src/js_deviceInfo.js.html +1930 -0
  1297. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/src/js_inputSource.js.html +1383 -0
  1298. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/src/js_power.js.html +2942 -0
  1299. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/src/js_security.js.html +352 -0
  1300. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/src/js_signage.js.html +3853 -0
  1301. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/src/js_sound.js.html +1123 -0
  1302. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/src/js_storage.js.html +2747 -0
  1303. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/src/js_time.js.html +976 -0
  1304. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/src/js_utility.js.html +196 -0
  1305. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/doc/symbols/src/js_video.js.html +754 -0
  1306. package/files/templates/signage-sdk-templates/scap_api/1.5.0/js/release_notes.txt +148 -0
  1307. package/files/templates/signage-sdk-templates/serviceinfo/package.json +11 -0
  1308. package/files/templates/signage-sdk-templates/serviceinfo/services.json +8 -0
  1309. package/files/templates/signage-sdk-templates/signageicon/icon.png +0 -0
  1310. package/files/templates/signage-sdk-templates/signageicon/largeIcon.png +0 -0
  1311. package/files/templates/signage-sdk-templates/webos-service/helloclient.js +23 -0
  1312. package/files/templates/signage-sdk-templates/webos-service/helloworld_webos_service.js +128 -0
  1313. package/files/templates/tv-sdk-templates/appinfo/appinfo.json +10 -10
  1314. package/files/templates/tv-sdk-templates/bootplate-web/index.html +58 -58
  1315. package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.10/LICENSE-2.0.txt +202 -202
  1316. package/files/templates/tv-sdk-templates/hosted-webapp/index.html +14 -14
  1317. package/files/templates/tv-sdk-templates/js-service/helloworld_service.js +39 -39
  1318. package/files/templates/tv-sdk-templates/packageinfo/packageinfo.json +3 -3
  1319. package/files/templates/tv-sdk-templates/serviceinfo/package.json +11 -11
  1320. package/files/templates/tv-sdk-templates/serviceinfo/services.json +8 -8
  1321. package/lib/base/ares.html +40 -40
  1322. package/lib/base/cli-appdata.js +289 -290
  1323. package/lib/base/cli-control.js +44 -44
  1324. package/lib/base/common-tools.js +29 -29
  1325. package/lib/base/error-handler.js +265 -265
  1326. package/lib/base/file-watcher.js +155 -155
  1327. package/lib/base/help-format.js +147 -147
  1328. package/lib/base/luna.js +178 -178
  1329. package/lib/base/novacom.js +1214 -1202
  1330. package/lib/base/sdkenv.js +59 -59
  1331. package/lib/base/server.js +137 -137
  1332. package/lib/base/setup-device.js +26 -8
  1333. package/lib/base/version-tools.js +79 -79
  1334. package/lib/com.sdk.ares.signage.hostedapp.ipk +0 -0
  1335. package/lib/device.js +1419 -1419
  1336. package/lib/generator.js +1 -1
  1337. package/lib/inspect.js +493 -493
  1338. package/lib/install.js +465 -463
  1339. package/lib/launch.js +607 -605
  1340. package/lib/log.js +584 -584
  1341. package/lib/package.js +2253 -2149
  1342. package/lib/pull.js +231 -231
  1343. package/lib/pusher.js +210 -210
  1344. package/lib/session.js +74 -74
  1345. package/lib/shell.js +193 -193
  1346. package/lib/tar-filter-pack.js +62 -62
  1347. package/lib/util/copy.js +31 -31
  1348. package/lib/util/createFileName.js +40 -40
  1349. package/lib/util/eof.js +30 -30
  1350. package/lib/util/json.js +63 -63
  1351. package/lib/util/merge.js +14 -14
  1352. package/lib/util/objclone.js +40 -40
  1353. package/lib/util/spinner.js +37 -37
  1354. package/npm-shrinkwrap.json +2 -2
  1355. package/package.json +1 -1
  1356. package/scripts/postinstall.js +24 -24
  1357. package/spec/helpers/reporter.js +65 -65
  1358. package/spec/jsSpecs/apiTest/generator.spec.js +372 -372
  1359. package/spec/jsSpecs/apiTest/inspector.spec.js +89 -89
  1360. package/spec/jsSpecs/apiTest/installer.spec.js +67 -67
  1361. package/spec/jsSpecs/apiTest/launcher.spec.js +150 -150
  1362. package/spec/jsSpecs/apiTest/packager.spec.js +194 -194
  1363. package/spec/jsSpecs/apiTest/puller.spec.js +101 -101
  1364. package/spec/jsSpecs/apiTest/pusher.spec.js +103 -103
  1365. package/spec/jsSpecs/apiTest/server.spec.js +115 -115
  1366. package/spec/jsSpecs/apiTest/setupDevice.spec.js +93 -93
  1367. package/spec/jsSpecs/apiTest/shell.spec.js +49 -49
  1368. package/spec/jsSpecs/ares-config.spec.js +88 -88
  1369. package/spec/jsSpecs/ares-device.spec.js +443 -443
  1370. package/spec/jsSpecs/ares-generate.spec.js +401 -397
  1371. package/spec/jsSpecs/ares-inspect.spec.js +252 -252
  1372. package/spec/jsSpecs/ares-install.spec.js +150 -150
  1373. package/spec/jsSpecs/ares-launch.spec.js +303 -301
  1374. package/spec/jsSpecs/ares-log.spec.js +824 -824
  1375. package/spec/jsSpecs/ares-novacom.spec.js +149 -149
  1376. package/spec/jsSpecs/ares-package.spec.js +1277 -1211
  1377. package/spec/jsSpecs/ares-pull.spec.js +157 -157
  1378. package/spec/jsSpecs/ares-push.spec.js +146 -146
  1379. package/spec/jsSpecs/ares-server.spec.js +160 -160
  1380. package/spec/jsSpecs/ares-setup-device.spec.js +299 -300
  1381. package/spec/jsSpecs/ares-shell.spec.js +220 -220
  1382. package/spec/jsSpecs/ares.spec.js +83 -83
  1383. package/spec/jsSpecs/common-spec.js +177 -169
  1384. package/spec/support/jasmine.json +22 -22
  1385. package/spec/tempFiles/com.lg.app.signage.dev_0.0.1_all.ipk +0 -0
  1386. package/spec/tempFiles/nativeApp/auto/pkg_arm64/appinfo.json +9 -9
  1387. package/spec/tempFiles/nativeApp/ose/pkg_arm/appinfo.json +8 -8
  1388. package/spec/tempFiles/nativeApp/ose/pkg_arm/package.properties +2 -2
  1389. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/appinfo.json +9 -9
  1390. package/spec/tempFiles/nativeApp/rsi/pkg_x86/appinfo.json +9 -9
  1391. package/spec/tempFiles/sign/sign.crt +32 -32
  1392. package/spec/tempFiles/sign/signPriv.key +52 -52
  1393. package/spec/test_data/ares-generate.json +91 -58
  1394. package/spec/test_data/ares.json +50 -50
  1395. package/webos-tools-cli-3.2.0.tgz +0 -0
  1396. package/webos-tools-cli-3.1.3.tgz +0 -0
@@ -1,1202 +1,1214 @@
1
- /*
2
- * Copyright (c) 2020-2024 LG Electronics Inc.
3
- *
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- const async = require('async'),
8
- chalk = require('chalk'),
9
- fs = require('fs'),
10
- mkdirp = require('mkdirp'),
11
- net = require('net'),
12
- log = require('npmlog'),
13
- path = require('path'),
14
- request = require('request'),
15
- shelljs = require('shelljs'),
16
- Ssh2 = require('ssh2'),
17
- stream = require('stream'),
18
- util = require('util'),
19
- Appdata = require('./cli-appdata'),
20
- errHndl = require('./error-handler'),
21
- server = require('./server');
22
-
23
- // novacom emulation layer, on top of ssh
24
- (function() {
25
- const novacom = {};
26
-
27
- log.heading = 'novacom';
28
- log.level = 'warn';
29
- novacom.log = log;
30
-
31
- const keydir = path.resolve(process.env.HOME || process.env.USERPROFILE, '.ssh');
32
- let cliData;
33
-
34
- function makeExecError(cmd, code, signal, orgErrMsg) {
35
- let err = null; // null:success, undefined:did-not-run, Error:failure
36
-
37
- if (orgErrMsg) {
38
- orgErrMsg = "\n(Original Message: " + orgErrMsg.replace(/\u001b[^m]*?m/g,"").trim() + ")";
39
- } else {
40
- orgErrMsg = "";
41
- }
42
-
43
- if (signal) {
44
- signal = " (signal: " + signal + ")";
45
- } else {
46
- signal = "";
47
- }
48
-
49
- if (code !== 0 || signal) {
50
- err = new Error();
51
- err.message = "Command '" + cmd + "' exited with code=" + code + signal + orgErrMsg;
52
- err.code = code;
53
-
54
- return errHndl.getErrMsg(err);
55
- }
56
- return err;
57
- }
58
-
59
- novacom.Resolver = Resolver;
60
-
61
- /**
62
- * @constructor
63
- */
64
- function Resolver() {
65
- /**
66
- * @property devices
67
- * This list use to be maintained by novacomd
68
- */
69
- this.devices = [];
70
- this.deviceFileContent = null;
71
- cliData = new Appdata();
72
- }
73
-
74
- novacom.Resolver.prototype = {
75
- /**
76
- * Load the resolver DB from the filesystem
77
- * @param {Function} next a common-JS callback invoked when the DB is ready to use.
78
- */
79
- load: function(next) {
80
- log.info("novacom#Resolver()#load()");
81
- const resolver = this;
82
-
83
- async.waterfall([
84
- _replaceBuiltinSshKey.bind(resolver),
85
- _adjustList.bind(resolver),
86
- _loadString.bind(resolver)
87
- ], function(err) {
88
- if (err) {
89
- setImmediate(next, err);
90
- } else {
91
- log.silly("novacom#Resolver()#load()", "devices:", resolver.devices);
92
- setImmediate(next);
93
- }
94
- });
95
-
96
- function _replaceBuiltinSshKey(next) {
97
- log.silly("novacom#Resolver()#load()#_replaceBuiltinSshKey()");
98
- const builtinPrvKeyForEmul = path.join(__dirname, "../../files/conf/", 'webos_emul'),
99
- userHomePrvKeyForEmul = path.join(keydir, 'webos_emul');
100
-
101
- fs.stat(builtinPrvKeyForEmul, function(err, builtinKeyStat) {
102
- if (err) {
103
- if (err.code === 'ENOENT') {
104
- setImmediate(next);
105
- } else {
106
- setImmediate(next, err);
107
- }
108
- } else {
109
- fs.stat(userHomePrvKeyForEmul, function(error, userKeyStat) {
110
- if (error) {
111
- if (error.code === 'ENOENT') {
112
- mkdirp(keydir, function() {
113
- shelljs.cp('-rf', builtinPrvKeyForEmul, keydir);
114
- fs.chmodSync(userHomePrvKeyForEmul, '0600');
115
- setImmediate(next);
116
- });
117
- } else {
118
- setImmediate(next, error);
119
- }
120
- } else {
121
- if (builtinKeyStat.mtime.getTime() > userKeyStat.mtime.getTime()) {
122
- shelljs.cp('-rf', builtinPrvKeyForEmul, keydir);
123
- fs.chmodSync(userHomePrvKeyForEmul, '0600');
124
- }
125
- setImmediate(next);
126
- }
127
- });
128
- }
129
- });
130
- }
131
-
132
- /*
133
- * Add "default" field to list files
134
- * Set "emulator" to default target
135
- */
136
- function _adjustList(next) {
137
- const defaultTarget = "emulator";
138
- let inDevices = cliData.getDeviceList(true);
139
-
140
- // count targes does not have "default field"
141
- const defaultFields = inDevices.filter(function(device) {
142
- return (device.default !== undefined);
143
- });
144
- if (defaultFields.length < 1) {
145
- log.silly("novacom#Resolver()#load()#_adjustList()", "rewrite default field");
146
- inDevices = inDevices.map(function(dev) {
147
- if (defaultTarget === dev.name) {
148
- dev.default = true;
149
- } else {
150
- dev.default = false;
151
- }
152
- return dev;
153
- });
154
- this.save(inDevices);
155
- }
156
- setImmediate(next);
157
- }
158
-
159
- /*
160
- * Load devices described in the given string
161
- * (supposed to be a JSON Array).
162
- */
163
- function _loadString(next) {
164
- const inDevices = cliData.getDeviceList(true);
165
-
166
- if (!Array.isArray(inDevices)) {
167
- setImmediate(next, errHndl.getErrMsg("INVALID_FILE"));
168
- return;
169
- }
170
-
171
- async.forEach(inDevices, function(inDevice, next) {
172
- async.series([
173
- resolver._loadOne.bind(resolver, inDevice),
174
- resolver._addOne.bind(resolver, inDevice)
175
- ], next);
176
- }, function(err) {
177
- if (err) {
178
- setImmediate(next, err);
179
- } else {
180
- setImmediate(next);
181
- }
182
- });
183
- }
184
- },
185
-
186
- /*
187
- * Resolve the SSH private key of the given device
188
- * into a usable string. Prefer already fetch keys,
189
- * then manually-configured OpenSSH one & finally
190
- * fetch it from a distant device (webOS Pro only).
191
- */
192
- _loadOne: function(inDevice, next) {
193
- if (typeof inDevice.privateKey === 'string') {
194
- inDevice.privateKeyName = inDevice.privateKey;
195
- inDevice.privateKey = Buffer.from(inDevice.privateKey, 'base64');
196
- setImmediate(next);
197
- } else if (typeof inDevice.privateKey === 'object' && typeof inDevice.privateKey.openSsh === 'string') {
198
- inDevice.privateKeyName = inDevice.privateKey.openSsh;
199
- async.waterfall([
200
- fs.readFile.bind(this, path.join(keydir, inDevice.privateKey.openSsh), next),
201
- function(privateKey, next) {
202
- inDevice.privateKey = privateKey;
203
- setImmediate(next);
204
- }
205
- ], function(err) {
206
- // do not load non-existing OpenSSH private key files
207
- if (err) {
208
- log.verbose("novacom#Resolver()#_loadOne()", "Unable to find SSH private key named '" +
209
- inDevice.privateKey.openSsh + "' from '" + keydir + " for '" + inDevice.name + "'");
210
- inDevice.privateKey = undefined;
211
- }
212
- setImmediate(next);
213
- });
214
- } else if (inDevice.type !== undefined && inDevice.type === 'webospro') {
215
- // FIXME: here is the place to stream-down the SSH private key from the device
216
- setImmediate(next, errHndl.getErrMsg("NOT_IMPLEMENTED", "webOS Pro device type handling"));
217
- } else { // private Key is not defined in novacom-device.json
218
- if (!inDevice.password) {
219
- log.silly("novacom#Resolver()#_loadOne()", "Regist privateKey : need to set a SSH private key in " +
220
- keydir + " for'" + inDevice.name + "'");
221
- }
222
- inDevice.privateKeyName = undefined;
223
- inDevice.privateKey = undefined;
224
- setImmediate(next);
225
- }
226
- },
227
-
228
- /*
229
- * Add given inDevice to the Resolver DB, overwritting
230
- * any existing one with the same "name:" is needed.
231
- */
232
- _addOne: function(inDevice, next) {
233
- // add the current profile device only
234
- if (!inDevice.profile || !cliData.compareProfileSync(inDevice.profile)) {
235
- return setImmediate(next);
236
- }
237
-
238
- inDevice.display = {
239
- name: inDevice.name,
240
- type: inDevice.type,
241
- privateKeyName: inDevice.privateKeyName,
242
- passphrase: inDevice.passphrase,
243
- description: inDevice.description,
244
- conn: inDevice.conn || ['ssh'],
245
- devId: inDevice.id || null
246
- };
247
-
248
- if (inDevice.username && inDevice.host && inDevice.port) {
249
- inDevice.display.addr = "ssh://" + inDevice.username + "@" + inDevice.host + ":" + inDevice.port;
250
- }
251
-
252
- for (const n in inDevice) {
253
- if (n !== "display") {
254
- inDevice.display[n] = inDevice[n];
255
- }
256
- }
257
-
258
- // filter-out `this.devices` from the one having the same name as `inDevice`...
259
- this.devices = this.devices.filter(function(device) {
260
- return device.name !== inDevice.name;
261
- });
262
-
263
- // ...hook proper luna interface
264
- const systemCmd = cliData.getCommandService();
265
- inDevice.lunaSend = systemCmd.lunaSend;
266
- inDevice.lunaAddr = systemCmd.lunaAddr;
267
-
268
- // ...and then append `inDevice`
269
- this.devices.push(inDevice);
270
- setImmediate(next);
271
- },
272
-
273
-
274
- /**
275
- * @public
276
- */
277
- save: function(devicesData, next) {
278
- log.info("novacom#Resolver()#save()");
279
- return cliData.setDeviceList(devicesData, next);
280
- },
281
-
282
- /**
283
- * @public
284
- */
285
- list: function(next) {
286
- log.info("novacom#Resolver()#list()");
287
- setImmediate(next, null, this.devices.map(function(device) {
288
- return device.display;
289
- }));
290
- },
291
-
292
- setTargetName: function(target, printTarget, next) {
293
- let name = (typeof target === 'string' ? target : target && target.name);
294
- if (!name) {
295
- const usbDevices = this.devices.filter(function(device) {
296
- return (device.conn && device.conn.indexOf("novacom") !== -1);
297
- });
298
-
299
- if (usbDevices.length > 1) {
300
- return next(errHndl.getErrMsg("CONNECTED_MULTI_DEVICE"));
301
- }
302
-
303
- // default target priority
304
- // specified target name > target connected by novacom > user setting > emulator
305
- if (usbDevices.length > 0 && usbDevices[0].name) {
306
- name = usbDevices[0].name;
307
- } else {
308
- const defaultTargets = this.devices.filter(function(device) {
309
- return (device.default && device.default === true);
310
- });
311
-
312
- if (defaultTargets.length > 1) {
313
- return next(errHndl.getErrMsg("SET_DEFAULT_MULTI_DEVICE"));
314
- } else if (defaultTargets.length === 1) {
315
- name = defaultTargets[0].name;
316
- } else {
317
- // if cannot find default target in list, set to "emulator"
318
- name = "emulator";
319
- }
320
- }
321
- }
322
- if (printTarget) {
323
- console.log(chalk.green("[Info] Set target device : " + name));
324
- }
325
- next(null, 'name', name);
326
- },
327
-
328
- getDeviceBy: function(key, value, next) {
329
- log.info("novacom#Resolver()#getDeviceBy()", "key:", key, ", value:", value);
330
- const devices = this.devices.filter(function(device) {
331
- return device[key] && device[key] === value;
332
- });
333
-
334
- if (devices.length < 1) {
335
- setImmediate(next, errHndl.getErrMsg("UNMATCHED_DEVICE", key, value));
336
- } else if (typeof next === 'function') {
337
- setImmediate(next, null, devices[0]);
338
- } else {
339
- return devices[0];
340
- }
341
- },
342
-
343
- getSshPrvKey: function(target, next) {
344
- let name = (typeof target === 'string' ? target : target && target.name);
345
- if (!name) {
346
- // if name is not specified, find default target
347
- const defaultTargets = this.devices.filter(function(device) {
348
- return (device.default && device.default === true);
349
- });
350
- if (defaultTargets.length > 1) {
351
- return next(errHndl.getErrMsg("SET_DEFAULT_MULTI_DEVICE"));
352
- } else if (defaultTargets.length === 1) {
353
- name = defaultTargets[0].name;
354
- } else {
355
- // if cannot find default target in list, set to "emulator"
356
- name = "emulator";
357
- }
358
- // assign target name
359
- if (typeof target === 'string') {
360
- target = name;
361
- } else if (typeof target === 'object') {
362
- target.name = name;
363
- }
364
- }
365
-
366
- async.waterfall([
367
- this.getDeviceBy.bind(this, 'name', name),
368
- function(targetDevice, next) {
369
- log.info("Resolver#getSshPrvKey()", "targetDevice.host:", targetDevice.host);
370
- const url = 'http://' + targetDevice.host + ':9991' + '/webos_rsa';
371
- const keyFileNamePrefix = targetDevice.name.replace(/(\s+)/gi, '_');
372
- const keyFileName = keyFileNamePrefix + "_webos";
373
- const keySavePath = path.join(keydir, keyFileName);
374
- request.head(url, function(err, res) {
375
- if (err || (res && res.statusCode !== 200)) {
376
- return setImmediate(next, errHndl.getErrMsg("FAILED_GET_SSHKEY"));
377
- }
378
- log.info("Resolver#getSshPrvKey()#head", "content-type:", res.headers['content-type']);
379
- log.info("Resolver#getSshPrvKey()#head", "content-length:", res.headers['content-length']);
380
- request(url).pipe(fs.createWriteStream(keySavePath)).on('close', function(error) {
381
- if (error) {
382
- return setImmediate(next, errHndl.getErrMsg("FAILED_GET_SSHKEY"));
383
- } else {
384
- setImmediate(next, error, keySavePath, keyFileName);
385
- }
386
- });
387
- });
388
- },
389
- function(keyFilePath, keyFileName, next) {
390
- log.info("Resolver#getSshPrvKey()", "SSH Private Key:", keyFilePath);
391
- console.log("SSH Private Key:", keyFilePath);
392
- fs.chmodSync(keyFilePath, '0600');
393
- setImmediate(next, null, keyFileName);
394
- }
395
- ], next);
396
- },
397
-
398
- modifyDeviceFile: function(op, target, next) {
399
- log.info("novacom#Resolver()#modifyDeviceFile()", "op:", op);
400
- let defaultTarget = "emulator",
401
- inDevices = cliData.getDeviceList(true);
402
-
403
- if (!target.name) {
404
- return setImmediate(next, errHndl.getErrMsg("EMPTY_VALUE", "target"));
405
- }
406
-
407
- if (!Array.isArray(inDevices)) {
408
- return setImmediate(next, errHndl.getErrMsg("INVALID_FILE"));
409
- }
410
-
411
- const matchedDevices = inDevices.filter(function(dev) {
412
- let match = false;
413
- if (target.name === dev.name) {
414
- if (target.profile) {
415
- if (target.profile === dev.profile) {
416
- match = true;
417
- }
418
- } else {
419
- match = true;
420
- }
421
- }
422
- return match;
423
- });
424
-
425
- if (op === 'add') {
426
- if (matchedDevices.length > 0) {
427
- return setImmediate(next, errHndl.getErrMsg("EXISTING_VALUE", "DEVICE_NAME", target.name));
428
- }
429
-
430
- for (const key in target) {
431
- if (target[key] === "@DELETE@") {
432
- delete target[key];
433
- }
434
- }
435
-
436
- if (target.default === true) {
437
- defaultTarget = target.name;
438
- } else if (target.default === false) {
439
- // new device is not a default target, keep current default target device.
440
- defaultTarget = null;
441
- }
442
-
443
- inDevices = inDevices.concat(target);
444
- } else if (op === 'remove' || op === 'modify' || op === 'default') {
445
- if (matchedDevices.length === 0) {
446
- return setImmediate(next, errHndl.getErrMsg("INVALID_VALUE", "DEVICE_NAME", target.name));
447
- }
448
-
449
- if (op === 'remove') {
450
- inDevices = inDevices.filter(function(dev) {
451
- if (target.name === dev.name) {
452
- if (dev.indelible === true) {
453
- return setImmediate(next, errHndl.getErrMsg("CANNOT_REMOVE_DEVICE", dev.name));
454
- } else {
455
- // removed target is not default target, do not set defalut to others
456
- if (dev.default === false) {
457
- defaultTarget = null;
458
- }
459
- return false;
460
- }
461
- } else {
462
- return true;
463
- }
464
- });
465
- } else if (op === 'modify') {
466
- inDevices = inDevices.map(function(dev) {
467
- if (target.name === dev.name) {
468
- if (dev.default === true) {
469
- // keep current default device as modified target
470
- defaultTarget = dev.name;
471
- } else {
472
- // do not change default device
473
- defaultTarget = null;
474
- }
475
-
476
- for (const prop in target) {
477
- if (Object.prototype.hasOwnProperty.call(target, prop)) {
478
- dev[prop] = target[prop];
479
- if (dev[prop] === "@DELETE@") {
480
- delete dev[prop];
481
- }
482
- }
483
- }
484
- }
485
- return dev;
486
- });
487
- } else if (op === 'default') {
488
- inDevices.map(function(dev) {
489
- if (target.name === dev.name) {
490
- if (target.default === true) {
491
- defaultTarget = target.name;
492
- }
493
- }
494
- });
495
- }
496
- } else {
497
- return setImmediate(next, errHndl.getErrMsg("UNKNOWN_OPERATOR", op));
498
- }
499
-
500
- // Set default target & others to no default target(false)
501
- if (defaultTarget != null) {
502
- inDevices = inDevices.map(function(dev) {
503
- if (defaultTarget === dev.name) {
504
- dev.default = true;
505
- } else {
506
- dev.default = false;
507
- }
508
- return dev;
509
- });
510
- }
511
- this.save(inDevices, next);
512
- }
513
- };
514
-
515
- /**
516
- * @constructor
517
- * @param {String} target the name of the target device to connect to. "default"
518
- * @param {Function} next common-js callback, invoked when the Session becomes usable or definitively unusable (failed)
519
- */
520
- function Session(target, printTarget, next) {
521
- if (typeof next !== 'function') {
522
- throw errHndl.getErrMsg("MISSING_CALLBACK", "next", util.inspect(next));
523
- }
524
-
525
- const name = (typeof target === 'string' ? target : target && target.name);
526
- log.info("novacom#Session()", "opening session to '" + (name ? name : "default device") + "'");
527
- this.resolver = new Resolver();
528
-
529
- async.waterfall([
530
- this.resolver.load.bind(this.resolver),
531
- this.resolver.setTargetName.bind(this.resolver, target, printTarget),
532
- this.resolver.getDeviceBy.bind(this.resolver),
533
- this.checkConnection.bind(this),
534
- this.begin.bind(this)
535
- ], next);
536
- }
537
-
538
- novacom.Session = Session;
539
-
540
- novacom.Session.prototype = {
541
- /**
542
- * Check if socket can be connected
543
- * This method can be called multiple times.
544
- * @param {Function} next common-js callback
545
- */
546
- checkConnection: function(target, next) {
547
- let alive = false;
548
- if (target && target.host && target.port) {
549
- const socket = new net.Socket();
550
- socket.setTimeout(2000);
551
- const client = socket.connect({
552
- host: target.host,
553
- port: target.port
554
- });
555
- client.on('connect', function() {
556
- alive = true;
557
- client.end();
558
- setImmediate(next, null, target);
559
- });
560
- client.on('error', function(err) {
561
- client.destroy();
562
- setImmediate(next, errHndl.getErrMsg(err));
563
- });
564
- client.on('timeout', function() {
565
- client.destroy();
566
- if (!alive) {
567
- setImmediate(next, errHndl.getErrMsg("TIME_OUT"));
568
- }
569
- });
570
- } else {
571
- setImmediate(next, null, target);
572
- }
573
- },
574
-
575
- /**
576
- * Begin a novacom session with the current target
577
- * This method can be called multiple times.
578
- * @param {Function} next common-js callback
579
- */
580
- begin: function(target, next) {
581
- log.verbose("novacom#Session()#begin()", "target:", target.display);
582
- const self = this;
583
- this.target = target || this.target;
584
-
585
- if (this.target.conn && (this.target.conn.indexOf('ssh') === -1)) {
586
- setImmediate(next, null, this);
587
- return this;
588
- }
589
-
590
- if (this.target.privateKey === undefined && this.target.password === undefined) {
591
- return setImmediate(next, errHndl.getErrMsg("NOT_EXIST_SSHKEY_PASSWD"));
592
- }
593
-
594
- if (!this.ssh) {
595
- this.forwardedPorts = [];
596
- this.ssh = new Ssh2.Client();
597
- this.ssh.on('connect', function() {
598
- log.info("novacom#Session()#begin()", "ssh session event: connected");
599
- });
600
- this.ssh.on('ready', _next.bind(this));
601
- this.ssh.on('error', _next.bind(this));
602
- this.ssh.on('end', function() {
603
- log.info("novacom#Session()#begin()", "ssh session event: end");
604
- });
605
- this.ssh.on('close', function(had_error) {
606
- log.info("novacom#Session()#begin()", "ssh session event: close (had_error:", had_error, ")");
607
- });
608
- this.target.readyTimeout = 30000;
609
- //Explicit overrides for the default transport layer algorithms used for the connection.
610
- this.target.algorithms = {
611
- "kex": [
612
- "diffie-hellman-group1-sha1",
613
- "ecdh-sha2-nistp256",
614
- "ecdh-sha2-nistp384",
615
- "ecdh-sha2-nistp521",
616
- "diffie-hellman-group-exchange-sha256",
617
- "diffie-hellman-group14-sha1"
618
- ],
619
- }
620
- this.ssh.connect(this.target);
621
-
622
- process.on("SIGHUP", _clearSession);
623
- process.on("SIGINT", _clearSession);
624
- process.on("SIGQUIT", _clearSession);
625
- process.on("SIGTERM", _clearSession);
626
- process.on("exit", function() {
627
- _clearSession();
628
- });
629
- // Node.js cannot handle SIGKILL, SIGSTOP
630
- // process.on("SIGKILL", _clearSession);
631
- // process.on("SIGSTOP", _clearSession);
632
- }
633
- return this;
634
-
635
- function _next(err) {
636
- setImmediate(next, (err ? errHndl.getErrMsg(err) : err), this);
637
- }
638
-
639
- function _clearSession() {
640
- log.verbose("novacom#Session()#begin()", "clear Session");
641
- self.end();
642
- setTimeout(function() {
643
- process.exit();
644
- }, 500);
645
- }
646
- },
647
-
648
- /**
649
- * @return the resolved device actually in use for this session
650
- */
651
- getDevice: function() {
652
- return this.target;
653
- },
654
-
655
- /**
656
- * Suspend the novacom session. Underlying resources
657
- * are released (eg. SSH connections are closed).
658
- */
659
- end: function() {
660
- log.info('novacom#Session()#end()', "user-requested termination");
661
- if (this.ssh) {
662
- this.ssh.end();
663
- }
664
- return this;
665
- },
666
-
667
- _checkSftp: function(next) {
668
- // FIXME: This is workaround to prevent hang from ssh2.sftp()
669
- // - issue in ssh2: https://github.com/mscdex/ssh2/issues/240
670
- // This way only works with ssh2@0.2.x, not working with ssh2@0.4.x, ssh2@0.3.x.
671
- const self = this;
672
- self.ssh.subsys('sftp', function(err, _stream) {
673
- if (err) {
674
- return setImmediate(next, err);
675
- }
676
-
677
- _stream.once('data', function(data) {
678
- const regex = new RegExp("sftp-server(.| )+not found", "gi");
679
- if (data.toString().match(regex)) {
680
- const sftpError = errHndl.getErrMsg("UNABLE_USE_SFTP");
681
- sftpError.code = 4;
682
- return setImmediate(next, sftpError);
683
- }
684
- });
685
- });
686
- },
687
-
688
- /**
689
- * Upload a file on the device
690
- * @param {String} inPath location on the host
691
- * @param {String} outPath location on the device
692
- * @param {Function} next common-js callback
693
- */
694
- put: function(inPath, outPath, next) {
695
- log.info("novacom#Session()#put()", "uploding into device:", outPath, "from host:", inPath);
696
- const self = this;
697
- let inStream;
698
-
699
- log.verbose("novacom#Session()#put()", "sftpPut()::start");
700
- self.sftpPut(inPath, outPath, function(err) {
701
- if (err) {
702
- log.verbose(err);
703
- if (4 === err.code || 127 === err.code) {
704
- log.info("novacom#Session()#put()", "sftp is not available, attempt transfering file via streamPut");
705
- inStream = fs.createReadStream(inPath);
706
- self.streamPut(outPath, inStream, next);
707
- } else if (14 === err.code) {
708
- const detailMsg = errHndl.getErrMsg("NO_FREE_SPACE");
709
- setImmediate(next, detailMsg);
710
- } else {
711
- setImmediate(next, err);
712
- }
713
- } else {
714
- log.info("novacom#Session()#put()", "sftpPut()::done");
715
- setImmediate(next);
716
- }
717
- });
718
- },
719
-
720
- /**
721
- * Upload a file on the device via ssh stream
722
- * @param {String} outPath location on the device
723
- * @param {ReadableStream} inStream paused host-side source
724
- * @param {Function} next common-js callback
725
- */
726
- streamPut: function(outPath, inStream, next) {
727
- log.info("novacom#Session()#streamPut()", "streaming into device:" + outPath);
728
- const cmd = '/bin/cat > "' + outPath + '"';
729
- this.run(cmd, inStream /* stdin*/ , null /* stdout*/ , process.stderr /* stderr*/ , next);
730
- },
731
-
732
- /**
733
- * Upload a file on the device via sftp
734
- * @param {String} inPath location on the host
735
- * @param {String} outPath location on the device
736
- * @param {Function} next common-js callback
737
- */
738
- sftpPut: function(inPath, outPath, next) {
739
- log.verbose('novacom#Session()#sftpPut()', 'host:' + inPath + ' => ' + 'device:' + outPath);
740
- const self = this;
741
- self._checkSftp(next);
742
-
743
- async.series({
744
- transfer: function(next) {
745
- self.ssh.sftp(function(err, sftp) {
746
- if (err) {
747
- return setImmediate(next, err);
748
- }
749
-
750
- const readStream = fs.createReadStream(inPath),
751
- writeStream = sftp.createWriteStream(outPath);
752
-
753
- writeStream.on('close', function() {
754
- sftp.end();
755
- setImmediate(next);
756
- });
757
-
758
- // Exit when the remote process has terminated
759
- writeStream.on('exit', function(code, signal) {
760
- err = makeExecError('sftpPut', code, signal);
761
- setImmediate(next, err);
762
- });
763
-
764
- writeStream.on('error', function(error) {
765
- log.verbose('novacom#Session()#sftpPut()', "error:", error);
766
- setImmediate(next, error);
767
- });
768
-
769
- readStream.pipe(writeStream);
770
- });
771
- }
772
- }, function(err) {
773
- setImmediate(next, err);
774
- });
775
- },
776
-
777
- /**
778
- * Download file on the device
779
- * @param {String} inPath location on the device
780
- * @param {String} outPath location on the host
781
- * @param {Function} next common-js callback
782
- */
783
- get: function(inPath, outPath, next) {
784
- log.verbose("novacom#Session()#get()", "downloading into host:", outPath, "from target:", inPath);
785
- const self = this;
786
-
787
- log.verbose("novacom#Session()#get()", "sftpGet()::start");
788
- self.sftpGet(inPath, outPath, function(err) {
789
- if (err) {
790
- log.verbose(err);
791
- if (4 === err.code || 127 === err.code) {
792
- log.info("novacom#Session()#get()", "sftp is not available, attempt transfering file via streamPut");
793
- const os = fs.createWriteStream(outPath);
794
- os.on('error', function(error) {
795
- setImmediate(next, errHndl.getErrMsg(error));
796
- });
797
- self.streamGet(inPath, os, next);
798
- } else {
799
- setImmediate(next, err);
800
- }
801
- } else {
802
- log.verbose("novacom#Session()#get()", "sftpGet()::done");
803
- setImmediate(next);
804
- }
805
- });
806
- },
807
-
808
- /**
809
- * Read a file from the device via ssh stream
810
- * @param {String} inPath the device file path to be read
811
- * @param {WritableStream} outStream host-side destination to copy the file into
812
- * @param {Function} next commonJS callback invoked upon completion or failure
813
- */
814
- streamGet: function(inPath, outStream, next) {
815
- log.verbose('novacom#Session()#streamGet()', "streaming from device:" + inPath);
816
- const cmd = '/bin/cat ' + inPath;
817
- this.run(cmd, null /* stdin*/ , outStream /* stdout*/ , process.stderr /* stderr*/ , next);
818
- },
819
-
820
- /**
821
- * Download file on the device via sftp
822
- * @param {String} inPath location on the device
823
- * @param {String} outPath location on the host
824
- * @param {Function} next common-js callback
825
- */
826
- sftpGet: function(inPath, outPath, next) {
827
- log.verbose("novacom#Session()#sftpGet()", "target:" + inPath + " => " + "host:" + outPath);
828
- const self = this;
829
- self._checkSftp(next);
830
- async.series({
831
- transfer: function(next) {
832
- self.ssh.sftp(function(err, sftp) {
833
- if (err) {
834
- setImmediate(next, err);
835
- return;
836
- }
837
-
838
- const readStream = sftp.createReadStream(inPath),
839
- writeStream = fs.createWriteStream(outPath);
840
-
841
- readStream.on('close', function() {
842
- sftp.end();
843
- setImmediate(next);
844
- });
845
-
846
- // Exit when the remote process has terminated
847
- readStream.on('exit', function(code, signal) {
848
- err = makeExecError('sftpGet', code, signal);
849
- setImmediate(next, err);
850
- });
851
-
852
- readStream.on('error', function(error) {
853
- log.verbose("novacom#Session()#sftpGet()", "error:", error);
854
- setImmediate(next, error);
855
- });
856
-
857
- readStream.pipe(writeStream);
858
- });
859
- }
860
- }, function(err) {
861
- setImmediate(next, err);
862
- });
863
- },
864
-
865
- /**
866
- * Run a command on the device
867
- * @param {String} cmd the device command to run
868
- * @param {stream.ReadableStream} stdin given as novacom process stdin
869
- * @param {stream.WritableStream} stdout given as novacom process stdout
870
- * @param {stream.WritableStream} stderr given as novacom process stderr
871
- * @param {Function} next commonJS callback invoked upon completion or failure
872
- */
873
- run: function(cmd, stdin, stdout, stderr, next) {
874
- this.run_ssh(cmd, {}, stdin, stdout, stderr, next);
875
- },
876
-
877
- /**
878
- * Run a command with exec option on the device
879
- * @param {String} cmd the device command to run
880
- * @param {Object} opt given as exec option
881
- * @param {stream.ReadableStream} stdin given as novacom process stdin
882
- * @param {stream.WritableStream} stdout given as novacom process stdout
883
- * @param {stream.WritableStream} stderr given as novacom process stderr
884
- * @param {Function} next commonJS callback invoked upon completion or failure
885
- */
886
- runWithOption: function(cmd, opt, stdin, stdout, stderr, next) {
887
- this.run_ssh(cmd, opt, stdin, stdout, stderr, next);
888
- },
889
-
890
- /**
891
- * Run a command on the device
892
- * @param {String} cmd the device command to run
893
- * @param {Object} opt given as exec option
894
- * @param {stream.ReadableStream} stdin given as novacom process stdin
895
- * @param {stream.WritableStream} stdout given as novacom process stdout
896
- * @param {stream.WritableStream} stderr given as novacom process stderr
897
- * @param {Function} next commonJS callback invoked upon completion or failure
898
- */
899
- run_ssh: function(cmd, opt, stdin, stdout, stderr, next) {
900
- log.info("novacom#Session()#run()", "cmd:" + cmd + ", opt:" + JSON.stringify(opt));
901
- if (typeof next !== 'function') {
902
- throw errHndl.getErrMsg("MISSING_CALLBACK", "next", util.inspect(next));
903
- }
904
-
905
- // plumb output
906
- const write = {},
907
- obj = {};
908
- let orgErrMsg;
909
-
910
- if (!stdout) {
911
- log.silly("novacom#Session()#run()", "stdout: none");
912
- write.stdout = function() {};
913
- } else if (stdout instanceof stream.Stream) {
914
- log.silly("novacom#Session()#run()", "stdout: stream");
915
- write.stdout = stdout.write;
916
- obj.stdout = stdout;
917
- } else if (stdout instanceof Function) {
918
- log.silly("novacom#Session()#run()", "stdout: function");
919
- write.stdout = stdout;
920
- } else {
921
- return setImmediate(next, errHndl.getErrMsg("INVALID_VALUE", "stdout", util.inspect(stdout)));
922
- }
923
-
924
- if (!stderr) {
925
- log.silly("novacom#Session()#run()", "stderr: none");
926
- write.stderr = function() {};
927
- } else if (stderr instanceof stream.Stream) {
928
- log.silly("novacom#Session()#run()", "stderr: stream");
929
- write.stderr = stderr.write;
930
- obj.stderr = stderr;
931
- } else if (stderr instanceof Function) {
932
- log.silly("novacom#Session()#run()", "stderr: function");
933
- write.stderr = stderr;
934
- } else {
935
- return setImmediate(next, errHndl.getErrMsg("INVALID_VALUE", "stderr", util.inspect(stderr)));
936
- }
937
-
938
- // execute command
939
- this.ssh.exec(cmd, opt, (function(err, chStream) {
940
- log.silly("novacom#Session()#run()", "exec cmd:" + cmd + ", opt:" + JSON.stringify(opt) + ", err:" + err);
941
- if (err) {
942
- return setImmediate(next, err);
943
- }
944
-
945
- // manual pipe(): handle & divert data chunks
946
- chStream.on('data', function(data, extended) {
947
- extended = extended || 'stdout';
948
- log.verbose("novacom#Session()#run()", "on data (" + extended + ")");
949
- write[extended].bind(obj[extended])(data);
950
- }).stderr.on('data', function(data) {
951
- log.verbose("novacom#Session()#run()", "on data (stderr)");
952
- orgErrMsg = data.toString();
953
- });
954
-
955
- // manual pipe(): handle EOF
956
- chStream.on('end', function() {
957
- log.silly("novacom#Session()#run()", "event EOF from (cmd:" + cmd + ")");
958
- if ((stdout !== process.stdout) && (stdout instanceof stream.Stream)) {
959
- stdout.end();
960
- }
961
- if ((stderr !== process.stderr) && (stderr instanceof stream.Stream)) {
962
- stderr.end();
963
- }
964
- });
965
-
966
- // Exit when the remote process has terminated
967
- chStream.on('exit', function(code, signal) {
968
- log.silly("novacom#Session()#run()", "event exit code:" + code + ', signal:' + signal + " (cmd:" + cmd + ")");
969
- err = makeExecError(cmd, code, signal, orgErrMsg);
970
- setImmediate(next, err);
971
- });
972
-
973
- // Exit if the 'exit' event was not
974
- // received (dropbear <= 0.51)
975
- chStream.on('close', function() {
976
- log.silly("novacom#Session()#run()", "event close (cmd:" + cmd + ")");
977
- if (err === undefined) {
978
- setImmediate(next);
979
- }
980
- });
981
-
982
- if (stdin) {
983
- stdin.pipe(chStream);
984
- log.verbose("novacom#Session()#run()", "resuming input");
985
- }
986
- }));
987
- },
988
-
989
- /**
990
- * Run a command on the device considerless return stdout
991
- * @param {String} cmd the device command to run
992
- * @param {Function} callback invoked upon exit event
993
- * @param {Function} next commonJS callback invoked upon completion or failure
994
- */
995
- runNoHangup: function(cmd, cbData, cbExit, next) {
996
- this.runNoHangup_ssh(cmd, cbData, cbExit, next);
997
- },
998
-
999
- /**
1000
- * Run a command on the device considerless return stdout
1001
- * @param {String} cmd the device command to run
1002
- * @param {Function} callback invoked upon exit event
1003
- * @param {Function} next commonJS callback invoked upon completion or failure
1004
- */
1005
- runNoHangup_ssh: function(cmd, cbData, cbExit, next) {
1006
- log.info("novacom#Session()#runNoHangup()", "cmd=" + cmd);
1007
- if (arguments.length < 2) {
1008
- throw errHndl.getErrMsg("MISSING_CALLBACK", "next");
1009
- }
1010
-
1011
- for (const arg in arguments) {
1012
- if (typeof arguments[arg] === 'undefined') {
1013
- delete arguments[arg];
1014
- arguments.length--;
1015
- }
1016
- }
1017
-
1018
- switch (arguments.length) {
1019
- case 2:
1020
- next = cbData;
1021
- cbData = cbExit = null;
1022
- break;
1023
- case 3:
1024
- next = cbExit;
1025
- cbExit = cbData;
1026
- cbData = null;
1027
- break;
1028
- default:
1029
- break;
1030
- }
1031
-
1032
- if (typeof next !== 'function') {
1033
- throw errHndl.getErrMsg("MISSING_CALLBACK", "next", util.inspect(next));
1034
- }
1035
-
1036
- // execute command
1037
- this.ssh.exec(cmd, (function(err, _stream) {
1038
- log.verbose("novacom#Session()#run()", "exec cmd:" + cmd + ", err:" + err);
1039
- if (err) {
1040
- return setImmediate(next, err);
1041
- }
1042
-
1043
- _stream.on('data', function(data) {
1044
- const str = (Buffer.isBuffer(data)) ? data.toString() : data;
1045
- log.verbose("novacom#Session()#runNoHangup()#onData", str);
1046
- if (cbData) cbData(data);
1047
- }).stderr.on('data', function(data) {
1048
- const str = (Buffer.isBuffer(data)) ? data.toString() : data;
1049
- log.verbose("novacom#Session()#runNoHangup()#onData#stderr#", str);
1050
- if (cbData) cbData(data);
1051
- });
1052
-
1053
- // Exit when the remote process has terminated
1054
- if (cbExit) {
1055
- _stream.on('exit', function(code, signal) {
1056
- log.verbose("novacom#Session()#runNoHangup()", "event exit code=" + code + ', signal=' + signal + " (cmd: " + cmd + ")");
1057
- err = makeExecError(cmd, code, signal);
1058
- cbExit(err);
1059
- });
1060
- }
1061
- setImmediate(next);
1062
- }));
1063
- },
1064
-
1065
- /**
1066
- * Forward the given device port on the host.
1067
- * As any other public method, this one can be called
1068
- * only once the ssh session has emitted the 'ready'
1069
- * event, so as part of the Session()#next callback.
1070
- * @public
1071
- * @param {Function} next commonJS callback invoked upon completion or failure
1072
- */
1073
- forward: function(devicePort, localPort, forwardName, next) {
1074
- log.info("novacom#Session()#forward()", "devicePort:", devicePort, ", localPort:", localPort);
1075
- const session = this;
1076
- let forwardInUse = false,
1077
- registerName = null;
1078
-
1079
- if (typeof forwardName === 'function') {
1080
- next = forwardName;
1081
- } else if (forwardName) {
1082
- registerName = forwardName;
1083
- }
1084
-
1085
- if (localPort !== 0) {
1086
- if (session.forwardedPorts.indexOf({
1087
- name: registerName,
1088
- local: localPort,
1089
- device: devicePort
1090
- }) > 0) {
1091
- forwardInUse = true;
1092
- }
1093
- } else if (session.forwardedPorts.filter(function(forwardItem) {
1094
- return (forwardItem.device === devicePort && forwardItem.name === registerName);
1095
- }).length > 0) {
1096
- forwardInUse = true;
1097
- }
1098
-
1099
- if (forwardInUse) {
1100
- return setImmediate(next);
1101
- }
1102
-
1103
- const localServer = net.createServer(function(inCnx) {
1104
- log.info("novacom#Session()#forward()", "new client, localPort:", localPort);
1105
- log.verbose("novacom#Session()#forward()", "new client, from: " + inCnx.remoteAddress + ':' + inCnx.remotePort);
1106
-
1107
- inCnx.on('error', function(err) {
1108
- log.verbose("novacom#Session()#forward()", "inCnx::error, err::" + err);
1109
- });
1110
-
1111
- // Open the outbound connection on the device to match the incoming client.
1112
- session.ssh.forwardOut("127.0.0.1" /* srcAddr*/ , inCnx.remotePort /* srcPort*/ , "127.0.0.1" /* dstAddr*/ , devicePort /* dstPort*/ , function(err, outCnx) {
1113
- if (err) {
1114
- console.log("novacom#Session()#forward()", "failed forwarding client localPort:",
1115
- localPort, "(inCnx.remotePort:", inCnx.remotePort, ")=> devicePort:", devicePort);
1116
- log.warn("novacom#Session()#forward()", "failed forwarding client localPort:",
1117
- localPort, "=> devicePort:", devicePort);
1118
- inCnx.destroy();
1119
- return;
1120
- }
1121
-
1122
- log.info("novacom#Session()#forward()", "connected, devicePort:", devicePort);
1123
- inCnx.on('data', function(data) {
1124
- if (outCnx.writable && outCnx.writable === true) {
1125
- if (outCnx.write(data) === false) {
1126
- inCnx.pause();
1127
- }
1128
- }
1129
- });
1130
-
1131
- inCnx.on('close', function(had_err) {
1132
- log.verbose("novacom#Session()#forward()", "inCnx::close, had_err:", had_err);
1133
- outCnx.destroy();
1134
- });
1135
-
1136
- outCnx.on('drain', function() {
1137
- inCnx.resume();
1138
- });
1139
-
1140
- outCnx.on('data', function(data) {
1141
- inCnx.write(data);
1142
- });
1143
-
1144
- outCnx.on('close', function(had_err) {
1145
- log.verbose("novacom#Session()#forward()", "outCnx::close, had_err:", had_err);
1146
- });
1147
- });
1148
- });
1149
-
1150
- session.ssh.on('close', function() {
1151
- localServer.close();
1152
- });
1153
-
1154
- try {
1155
- localServer.listen(localPort, null, (function() {
1156
- const localServerPort = localServer.address().port;
1157
- session.forwardedPorts.push({
1158
- name: registerName,
1159
- local: localServerPort,
1160
- device: devicePort
1161
- });
1162
- setImmediate(next);
1163
- }));
1164
- } catch (err) {
1165
- setImmediate(next, err);
1166
- }
1167
- },
1168
-
1169
- getLocalPortByName: function(queryName) {
1170
- const session = this;
1171
- let found = null;
1172
- session.forwardedPorts.forEach(function(portItem) {
1173
- if (portItem.name === queryName) {
1174
- found = portItem.local;
1175
- return;
1176
- }
1177
- });
1178
- return found;
1179
- },
1180
-
1181
- runHostedAppServer: function(url, next) {
1182
- server.runServer(url, 0, function(err, serverInfo) {
1183
- if (serverInfo && serverInfo.port) {
1184
- this.setHostedAppServerPort(serverInfo.port);
1185
- }
1186
- next(err);
1187
- }.bind(this));
1188
- },
1189
-
1190
- setHostedAppServerPort: function(port) {
1191
- this.hostedAppServerPort = port;
1192
- },
1193
-
1194
- getHostedAppServerPort: function() {
1195
- return this.hostedAppServerPort;
1196
- }
1197
- };
1198
-
1199
- if (typeof module !== 'undefined' && module.exports) {
1200
- module.exports = novacom;
1201
- }
1202
- }());
1
+ /*
2
+ * Copyright (c) 2020-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ const async = require('async'),
8
+ chalk = require('chalk'),
9
+ fs = require('fs'),
10
+ mkdirp = require('mkdirp'),
11
+ net = require('net'),
12
+ log = require('npmlog'),
13
+ path = require('path'),
14
+ request = require('request'),
15
+ shelljs = require('shelljs'),
16
+ Ssh2 = require('ssh2'),
17
+ stream = require('stream'),
18
+ util = require('util'),
19
+ Appdata = require('./cli-appdata'),
20
+ errHndl = require('./error-handler'),
21
+ server = require('./server');
22
+
23
+ // novacom emulation layer, on top of ssh
24
+ (function() {
25
+ const novacom = {};
26
+
27
+ log.heading = 'novacom';
28
+ log.level = 'warn';
29
+ novacom.log = log;
30
+
31
+ const keydir = path.resolve(process.env.HOME || process.env.USERPROFILE, '.ssh');
32
+ let cliData;
33
+
34
+ function makeExecError(cmd, code, signal, orgErrMsg) {
35
+ let err = null; // null:success, undefined:did-not-run, Error:failure
36
+
37
+ if (orgErrMsg) {
38
+ orgErrMsg = "\n(Original Message: " + orgErrMsg.replace(/\u001b[^m]*?m/g,"").trim() + ")";
39
+ } else {
40
+ orgErrMsg = "";
41
+ }
42
+
43
+ if (signal) {
44
+ signal = " (signal: " + signal + ")";
45
+ } else {
46
+ signal = "";
47
+ }
48
+
49
+ if (code !== 0 || signal) {
50
+ err = new Error();
51
+ err.message = "Command '" + cmd + "' exited with code=" + code + signal + orgErrMsg;
52
+ err.code = code;
53
+
54
+ return errHndl.getErrMsg(err);
55
+ }
56
+ return err;
57
+ }
58
+
59
+ novacom.Resolver = Resolver;
60
+
61
+ /**
62
+ * @constructor
63
+ */
64
+ function Resolver() {
65
+ /**
66
+ * @property devices
67
+ * This list use to be maintained by novacomd
68
+ */
69
+ this.devices = [];
70
+ this.deviceFileContent = null;
71
+ cliData = new Appdata();
72
+ }
73
+
74
+ novacom.Resolver.prototype = {
75
+ /**
76
+ * Load the resolver DB from the filesystem
77
+ * @param {Function} next a common-JS callback invoked when the DB is ready to use.
78
+ */
79
+ load: function(next) {
80
+ log.info("novacom#Resolver()#load()");
81
+ const resolver = this;
82
+
83
+ async.waterfall([
84
+ _replaceBuiltinSshKey.bind(resolver),
85
+ _adjustList.bind(resolver),
86
+ _loadString.bind(resolver)
87
+ ], function(err) {
88
+ if (err) {
89
+ setImmediate(next, err);
90
+ } else {
91
+ log.silly("novacom#Resolver()#load()", "devices:", resolver.devices);
92
+ setImmediate(next);
93
+ }
94
+ });
95
+
96
+ function _replaceBuiltinSshKey(next) {
97
+ log.silly("novacom#Resolver()#load()#_replaceBuiltinSshKey()");
98
+ const builtinPrvKeyForEmul = path.join(__dirname, "../../files/conf/", 'webos_emul'),
99
+ userHomePrvKeyForEmul = path.join(keydir, 'webos_emul');
100
+
101
+ fs.stat(builtinPrvKeyForEmul, function(err, builtinKeyStat) {
102
+ if (err) {
103
+ if (err.code === 'ENOENT') {
104
+ setImmediate(next);
105
+ } else {
106
+ setImmediate(next, err);
107
+ }
108
+ } else {
109
+ fs.stat(userHomePrvKeyForEmul, function(error, userKeyStat) {
110
+ if (error) {
111
+ if (error.code === 'ENOENT') {
112
+ mkdirp(keydir, function() {
113
+ shelljs.cp('-rf', builtinPrvKeyForEmul, keydir);
114
+ fs.chmodSync(userHomePrvKeyForEmul, '0600');
115
+ setImmediate(next);
116
+ });
117
+ } else {
118
+ setImmediate(next, error);
119
+ }
120
+ } else {
121
+ if (builtinKeyStat.mtime.getTime() > userKeyStat.mtime.getTime()) {
122
+ shelljs.cp('-rf', builtinPrvKeyForEmul, keydir);
123
+ fs.chmodSync(userHomePrvKeyForEmul, '0600');
124
+ }
125
+ setImmediate(next);
126
+ }
127
+ });
128
+ }
129
+ });
130
+ }
131
+
132
+ /*
133
+ * Add "default" field to list files
134
+ * Set "emulator" to default target
135
+ */
136
+ function _adjustList(next) {
137
+ const defaultTarget = "emulator";
138
+ let inDevices = cliData.getDeviceList(true);
139
+
140
+ // count targes does not have "default field"
141
+ const defaultFields = inDevices.filter(function(device) {
142
+ return (device.default !== undefined);
143
+ });
144
+ if (defaultFields.length < 1) {
145
+ log.silly("novacom#Resolver()#load()#_adjustList()", "rewrite default field");
146
+ inDevices = inDevices.map(function(dev) {
147
+ if (defaultTarget === dev.name) {
148
+ dev.default = true;
149
+ } else {
150
+ dev.default = false;
151
+ }
152
+ return dev;
153
+ });
154
+ this.save(inDevices);
155
+ }
156
+ setImmediate(next);
157
+ }
158
+
159
+ /*
160
+ * Load devices described in the given string
161
+ * (supposed to be a JSON Array).
162
+ */
163
+ function _loadString(next) {
164
+ let inDevices = cliData.getDeviceList(true);
165
+
166
+ if (!Array.isArray(inDevices)) {
167
+ setImmediate(next, errHndl.getErrMsg("INVALID_FILE"));
168
+ return;
169
+ }
170
+ inDevices = inDevices.map((device, index) => ({...device, index}));
171
+ async.forEach(inDevices, function(inDevice, next) {
172
+ async.series([
173
+ resolver._loadOne.bind(resolver, inDevice),
174
+ resolver._addOne.bind(resolver, inDevice)
175
+ ], next);
176
+ }, function(err) {
177
+ if (err) {
178
+ setImmediate(next, err);
179
+ } else {
180
+ setImmediate(next);
181
+ }
182
+ });
183
+ }
184
+ },
185
+
186
+ /*
187
+ * Resolve the SSH private key of the given device
188
+ * into a usable string. Prefer already fetch keys,
189
+ * then manually-configured OpenSSH one & finally
190
+ * fetch it from a distant device (webOS Pro only).
191
+ */
192
+ _loadOne: function(inDevice, next) {
193
+ if (typeof inDevice.privateKey === 'string') {
194
+ inDevice.privateKeyName = inDevice.privateKey;
195
+ inDevice.privateKey = Buffer.from(inDevice.privateKey, 'base64');
196
+ setImmediate(next);
197
+ } else if (typeof inDevice.privateKey === 'object' && typeof inDevice.privateKey.openSsh === 'string') {
198
+ inDevice.privateKeyName = inDevice.privateKey.openSsh;
199
+ async.waterfall([
200
+ fs.readFile.bind(this, path.join(keydir, inDevice.privateKey.openSsh), next),
201
+ function(privateKey, next) {
202
+ inDevice.privateKey = privateKey;
203
+ setImmediate(next);
204
+ }
205
+ ], function(err) {
206
+ // do not load non-existing OpenSSH private key files
207
+ if (err) {
208
+ log.verbose("novacom#Resolver()#_loadOne()", "Unable to find SSH private key named '" +
209
+ inDevice.privateKey.openSsh + "' from '" + keydir + " for '" + inDevice.name + "'");
210
+ inDevice.privateKey = undefined;
211
+ }
212
+ setImmediate(next);
213
+ });
214
+ } else if (inDevice.type !== undefined && inDevice.type === 'webospro') {
215
+ // FIXME: here is the place to stream-down the SSH private key from the device
216
+ setImmediate(next, errHndl.getErrMsg("NOT_IMPLEMENTED", "webOS Pro device type handling"));
217
+ } else { // private Key is not defined in novacom-device.json
218
+ if (!inDevice.password) {
219
+ log.silly("novacom#Resolver()#_loadOne()", "Regist privateKey : need to set a SSH private key in " +
220
+ keydir + " for'" + inDevice.name + "'");
221
+ }
222
+ inDevice.privateKeyName = undefined;
223
+ inDevice.privateKey = undefined;
224
+ setImmediate(next);
225
+ }
226
+ },
227
+
228
+ /*
229
+ * Add given inDevice to the Resolver DB, overwritting
230
+ * any existing one with the same "name:" is needed.
231
+ */
232
+ _addOne: function(inDevice, next) {
233
+ // add the current profile device only
234
+ if (!inDevice.profile || !cliData.compareProfileSync(inDevice.profile)) {
235
+ return setImmediate(next);
236
+ }
237
+
238
+ inDevice.display = {
239
+ name: inDevice.name,
240
+ type: inDevice.type,
241
+ privateKeyName: inDevice.privateKeyName,
242
+ passphrase: inDevice.passphrase,
243
+ description: inDevice.description,
244
+ conn: inDevice.conn || ['ssh'],
245
+ devId: inDevice.id || null
246
+ };
247
+
248
+ if (inDevice.username && inDevice.host && inDevice.port) {
249
+ inDevice.display.addr = "ssh://" + inDevice.username + "@" + inDevice.host + ":" + inDevice.port;
250
+ }
251
+
252
+ for (const n in inDevice) {
253
+ if (n !== "display") {
254
+ inDevice.display[n] = inDevice[n];
255
+ }
256
+ }
257
+
258
+ // filter-out `this.devices` from the one having the same name as `inDevice`...
259
+ this.devices = this.devices.filter(function(device) {
260
+ return device.name !== inDevice.name;
261
+ });
262
+
263
+ // ...hook proper luna interface
264
+ const systemCmd = cliData.getCommandService();
265
+ inDevice.lunaSend = systemCmd.lunaSend;
266
+ inDevice.lunaAddr = systemCmd.lunaAddr;
267
+
268
+ // ...and then append `inDevice`
269
+ this.devices.push(inDevice);
270
+ setImmediate(next);
271
+ },
272
+
273
+
274
+ /**
275
+ * @public
276
+ */
277
+ save: function(devicesData, next) {
278
+ log.info("novacom#Resolver()#save()");
279
+ return cliData.setDeviceList(devicesData, next);
280
+ },
281
+
282
+ /**
283
+ * @public
284
+ */
285
+ list: function(next) {
286
+ log.info("novacom#Resolver()#list()");
287
+ setImmediate(next, null, this.devices.map(function(device) {
288
+ return device.display;
289
+ }));
290
+ },
291
+
292
+ setTargetName: function(target, printTarget, next) {
293
+ let name = (typeof target === 'string' ? target : target && target.name);
294
+ if (!name) {
295
+ const usbDevices = this.devices.filter(function(device) {
296
+ return (device.conn && device.conn.indexOf("novacom") !== -1);
297
+ });
298
+
299
+ if (usbDevices.length > 1) {
300
+ return next(errHndl.getErrMsg("CONNECTED_MULTI_DEVICE"));
301
+ }
302
+
303
+ // default target priority
304
+ // specified target name > target connected by novacom > user setting > emulator
305
+ if (usbDevices.length > 0 && usbDevices[0].name) {
306
+ name = usbDevices[0].name;
307
+ } else {
308
+ const defaultTargets = this.devices.filter(function(device) {
309
+ return (device.default && device.default === true);
310
+ });
311
+
312
+ if (defaultTargets.length > 1) {
313
+ return next(errHndl.getErrMsg("SET_DEFAULT_MULTI_DEVICE"));
314
+ } else if (defaultTargets.length === 1) {
315
+ name = defaultTargets[0].name;
316
+ } else {
317
+ // if cannot find default target in list, set to "emulator"
318
+ name = "emulator";
319
+ }
320
+ }
321
+ }
322
+ if (printTarget) {
323
+ console.log(chalk.green("[Info] Set target device : " + name));
324
+ }
325
+ next(null, 'name', name);
326
+ },
327
+
328
+ getDeviceBy: function(key, value, next) {
329
+ log.info("novacom#Resolver()#getDeviceBy()", "key:", key, ", value:", value);
330
+ const devices = this.devices.filter(function(device) {
331
+ return device[key] && device[key] === value;
332
+ });
333
+
334
+ if (devices.length < 1) {
335
+ setImmediate(next, errHndl.getErrMsg("UNMATCHED_DEVICE", key, value));
336
+ } else if (typeof next === 'function') {
337
+ setImmediate(next, null, devices[0]);
338
+ } else {
339
+ return devices[0];
340
+ }
341
+ },
342
+
343
+ getSshPrvKey: function(target, next) {
344
+ let name = (typeof target === 'string' ? target : target && target.name);
345
+ if (!name) {
346
+ // if name is not specified, find default target
347
+ const defaultTargets = this.devices.filter(function(device) {
348
+ return (device.default && device.default === true);
349
+ });
350
+ if (defaultTargets.length > 1) {
351
+ return next(errHndl.getErrMsg("SET_DEFAULT_MULTI_DEVICE"));
352
+ } else if (defaultTargets.length === 1) {
353
+ name = defaultTargets[0].name;
354
+ } else {
355
+ // if cannot find default target in list, set to "emulator"
356
+ name = "emulator";
357
+ }
358
+ // assign target name
359
+ if (typeof target === 'string') {
360
+ target = name;
361
+ } else if (typeof target === 'object') {
362
+ target.name = name;
363
+ }
364
+ }
365
+
366
+ async.waterfall([
367
+ this.getDeviceBy.bind(this, 'name', name),
368
+ function(targetDevice, next) {
369
+ log.info("Resolver#getSshPrvKey()", "targetDevice.host:", targetDevice.host);
370
+ const url = 'http://' + targetDevice.host + ':9991' + '/webos_rsa';
371
+ const keyFileNamePrefix = targetDevice.name.replace(/(\s+)/gi, '_');
372
+ const keyFileName = keyFileNamePrefix + "_webos";
373
+ const keySavePath = path.join(keydir, keyFileName);
374
+ request.head(url, function(err, res) {
375
+ if (err || (res && res.statusCode !== 200)) {
376
+ return setImmediate(next, errHndl.getErrMsg("FAILED_GET_SSHKEY"));
377
+ }
378
+ log.info("Resolver#getSshPrvKey()#head", "content-type:", res.headers['content-type']);
379
+ log.info("Resolver#getSshPrvKey()#head", "content-length:", res.headers['content-length']);
380
+ request(url).pipe(fs.createWriteStream(keySavePath)).on('close', function(error) {
381
+ if (error) {
382
+ return setImmediate(next, errHndl.getErrMsg("FAILED_GET_SSHKEY"));
383
+ } else {
384
+ setImmediate(next, error, keySavePath, keyFileName);
385
+ }
386
+ });
387
+ });
388
+ },
389
+ function(keyFilePath, keyFileName, next) {
390
+ log.info("Resolver#getSshPrvKey()", "SSH Private Key:", keyFilePath);
391
+ console.log("SSH Private Key:", keyFilePath);
392
+ fs.chmodSync(keyFilePath, '0600');
393
+ setImmediate(next, null, keyFileName);
394
+ }
395
+ ], next);
396
+ },
397
+
398
+ modifyDeviceFile: function(op, target, next) {
399
+ log.info("novacom#Resolver()#modifyDeviceFile()", "op:", op);
400
+ let defaultTarget = "emulator",
401
+ inDevices = cliData.getDeviceList(true);
402
+
403
+ if (!target.name) {
404
+ return setImmediate(next, errHndl.getErrMsg("EMPTY_VALUE", "target"));
405
+ }
406
+
407
+ if (!Array.isArray(inDevices)) {
408
+ return setImmediate(next, errHndl.getErrMsg("INVALID_FILE"));
409
+ }
410
+
411
+ const matchedDevices = inDevices.filter(function(dev) {
412
+ let match = false;
413
+ if (target.name === dev.name) {
414
+ if (target.profile) {
415
+ if (target.profile === dev.profile) {
416
+ match = true;
417
+ }
418
+ } else {
419
+ match = true;
420
+ }
421
+ }
422
+ return match;
423
+ });
424
+
425
+ if (op === 'add') {
426
+ if (matchedDevices.length > 0) {
427
+ return setImmediate(next, errHndl.getErrMsg("EXISTING_VALUE", "DEVICE_NAME", target.name));
428
+ }
429
+
430
+ for (const key in target) {
431
+ if (target[key] === "@DELETE@") {
432
+ delete target[key];
433
+ }
434
+ }
435
+
436
+ if (target.default === true) {
437
+ defaultTarget = target.name;
438
+ } else if (target.default === false) {
439
+ // new device is not a default target, keep current default target device.
440
+ defaultTarget = null;
441
+ }
442
+
443
+ inDevices = inDevices.concat(target);
444
+ } else if (op === 'remove' || op === 'modify' || op === 'default') {
445
+ if (matchedDevices.length === 0) {
446
+ return setImmediate(next, errHndl.getErrMsg("INVALID_VALUE", "DEVICE_NAME", target.name));
447
+ }
448
+
449
+ if (op === 'remove') {
450
+ inDevices = inDevices.filter(function(dev) {
451
+ if (target.name === dev.name) {
452
+ if (dev.indelible === true) {
453
+ return setImmediate(next, errHndl.getErrMsg("CANNOT_REMOVE_DEVICE", dev.name));
454
+ } else {
455
+ // removed target is not default target, do not set defalut to others
456
+ if (dev.default === false) {
457
+ defaultTarget = null;
458
+ }
459
+ return false;
460
+ }
461
+ } else {
462
+ return true;
463
+ }
464
+ });
465
+ } else if (op === 'modify') {
466
+ inDevices = inDevices.map(function(dev) {
467
+ if (target.name === dev.name) {
468
+ if (dev.default === true) {
469
+ // keep current default device as modified target
470
+ defaultTarget = dev.name;
471
+ } else {
472
+ // do not change default device
473
+ defaultTarget = null;
474
+ }
475
+
476
+ for (const prop in target) {
477
+ if (Object.prototype.hasOwnProperty.call(target, prop)) {
478
+ dev[prop] = target[prop];
479
+ if (dev[prop] === "@DELETE@") {
480
+ delete dev[prop];
481
+ }
482
+ }
483
+ }
484
+ }
485
+ return dev;
486
+ });
487
+ } else if (op === 'default') {
488
+ inDevices.map(function(dev) {
489
+ if (target.name === dev.name) {
490
+ if (target.default === true) {
491
+ defaultTarget = target.name;
492
+ }
493
+ }
494
+ });
495
+ }
496
+ } else {
497
+ return setImmediate(next, errHndl.getErrMsg("UNKNOWN_OPERATOR", op));
498
+ }
499
+
500
+ // Set default target & others to no default target(false)
501
+ if (defaultTarget != null) {
502
+ inDevices = inDevices.map(function(dev) {
503
+ if (defaultTarget === dev.name) {
504
+ dev.default = true;
505
+ } else {
506
+ dev.default = false;
507
+ }
508
+ return dev;
509
+ });
510
+ }
511
+ this.save(inDevices, next);
512
+ }
513
+ };
514
+
515
+ /**
516
+ * @constructor
517
+ * @param {String} target the name of the target device to connect to. "default"
518
+ * @param {Function} next common-js callback, invoked when the Session becomes usable or definitively unusable (failed)
519
+ */
520
+ function Session(target, printTarget, next) {
521
+ if (typeof next !== 'function') {
522
+ throw errHndl.getErrMsg("MISSING_CALLBACK", "next", util.inspect(next));
523
+ }
524
+
525
+ const name = (typeof target === 'string' ? target : target && target.name);
526
+ log.info("novacom#Session()", "opening session to '" + (name ? name : "default device") + "'");
527
+ this.resolver = new Resolver();
528
+
529
+ async.waterfall([
530
+ this.resolver.load.bind(this.resolver),
531
+ this.resolver.setTargetName.bind(this.resolver, target, printTarget),
532
+ this.resolver.getDeviceBy.bind(this.resolver),
533
+ this.checkConnection.bind(this),
534
+ this.begin.bind(this)
535
+ ], next);
536
+ }
537
+
538
+ novacom.Session = Session;
539
+
540
+ novacom.Session.prototype = {
541
+ /**
542
+ * Check if socket can be connected
543
+ * This method can be called multiple times.
544
+ * @param {Function} next common-js callback
545
+ */
546
+ checkConnection: function(target, next) {
547
+ let alive = false;
548
+ if (target && target.host && target.port) {
549
+ const socket = new net.Socket();
550
+ socket.setTimeout(2000);
551
+ const client = socket.connect({
552
+ host: target.host,
553
+ port: target.port
554
+ });
555
+ client.on('connect', function() {
556
+ alive = true;
557
+ client.end();
558
+ setImmediate(next, null, target);
559
+ });
560
+ client.on('error', function(err) {
561
+ client.destroy();
562
+ setImmediate(next, errHndl.getErrMsg(err));
563
+ });
564
+ client.on('timeout', function() {
565
+ client.destroy();
566
+ if (!alive) {
567
+ setImmediate(next, errHndl.getErrMsg("TIME_OUT"));
568
+ }
569
+ });
570
+ } else {
571
+ setImmediate(next, null, target);
572
+ }
573
+ },
574
+
575
+ /**
576
+ * Begin a novacom session with the current target
577
+ * This method can be called multiple times.
578
+ * @param {Function} next common-js callback
579
+ */
580
+ begin: function(target, next) {
581
+ log.verbose("novacom#Session()#begin()", "target:", target.display);
582
+ const self = this;
583
+ this.target = target || this.target;
584
+
585
+ if (this.target.conn && (this.target.conn.indexOf('ssh') === -1)) {
586
+ setImmediate(next, null, this);
587
+ return this;
588
+ }
589
+
590
+ if (this.target.privateKey === undefined && this.target.password === undefined) {
591
+ return setImmediate(next, errHndl.getErrMsg("NOT_EXIST_SSHKEY_PASSWD"));
592
+ }
593
+
594
+ if (!this.ssh) {
595
+ this.forwardedPorts = [];
596
+ this.ssh = new Ssh2.Client();
597
+ this.ssh.on('connect', function() {
598
+ log.info("novacom#Session()#begin()", "ssh session event: connected");
599
+ });
600
+ this.ssh.on('ready', _next.bind(this));
601
+ this.ssh.on('error', _next.bind(this));
602
+ this.ssh.on('end', function() {
603
+ log.info("novacom#Session()#begin()", "ssh session event: end");
604
+ });
605
+ this.ssh.on('close', function(had_error) {
606
+ log.info("novacom#Session()#begin()", "ssh session event: close (had_error:", had_error, ")");
607
+ });
608
+ this.target.readyTimeout = 30000;
609
+ //Explicit overrides for the default transport layer algorithms used for the connection.
610
+ this.target.algorithms = {
611
+ "kex": [
612
+ "diffie-hellman-group1-sha1",
613
+ "ecdh-sha2-nistp256",
614
+ "ecdh-sha2-nistp384",
615
+ "ecdh-sha2-nistp521",
616
+ "diffie-hellman-group-exchange-sha256",
617
+ "diffie-hellman-group14-sha1"
618
+ ],
619
+ }
620
+ this.ssh.connect(this.target);
621
+
622
+ process.on("SIGHUP", _clearSession);
623
+ process.on("SIGINT", _clearSession);
624
+ process.on("SIGQUIT", _clearSession);
625
+ process.on("SIGTERM", _clearSession);
626
+ process.on("exit", function() {
627
+ _clearSession();
628
+ });
629
+ // Node.js cannot handle SIGKILL, SIGSTOP
630
+ // process.on("SIGKILL", _clearSession);
631
+ // process.on("SIGSTOP", _clearSession);
632
+ }
633
+ return this;
634
+
635
+ function _next(err) {
636
+ if (err) {
637
+ const errorMessages = errHndl.getErrMsg(err);
638
+ if (Array.isArray(errorMessages) && errorMessages.length > 0) {
639
+ for (const index in errorMessages) {
640
+ log.error(
641
+ "novacom#Session()#begin() " + errorMessages[index].heading,
642
+ errorMessages[index].message
643
+ );
644
+ }
645
+ }
646
+ if (this.errorImmediate) clearImmediate(this.errorImmediate);
647
+ this.errorImmediate = setImmediate(next, errorMessages, this);
648
+ } else setImmediate(next, null, this);
649
+ }
650
+
651
+ function _clearSession() {
652
+ log.verbose("novacom#Session()#begin()", "clear Session");
653
+ self.end();
654
+ setTimeout(function() {
655
+ process.exit();
656
+ }, 500);
657
+ }
658
+ },
659
+
660
+ /**
661
+ * @return the resolved device actually in use for this session
662
+ */
663
+ getDevice: function() {
664
+ return this.target;
665
+ },
666
+
667
+ /**
668
+ * Suspend the novacom session. Underlying resources
669
+ * are released (eg. SSH connections are closed).
670
+ */
671
+ end: function() {
672
+ log.info('novacom#Session()#end()', "user-requested termination");
673
+ if (this.ssh) {
674
+ this.ssh.end();
675
+ }
676
+ return this;
677
+ },
678
+
679
+ _checkSftp: function(next) {
680
+ // FIXME: This is workaround to prevent hang from ssh2.sftp()
681
+ // - issue in ssh2: https://github.com/mscdex/ssh2/issues/240
682
+ // This way only works with ssh2@0.2.x, not working with ssh2@0.4.x, ssh2@0.3.x.
683
+ const self = this;
684
+ self.ssh.subsys('sftp', function(err, _stream) {
685
+ if (err) {
686
+ return setImmediate(next, err);
687
+ }
688
+
689
+ _stream.once('data', function(data) {
690
+ const regex = new RegExp("sftp-server(.| )+not found", "gi");
691
+ if (data.toString().match(regex)) {
692
+ const sftpError = errHndl.getErrMsg("UNABLE_USE_SFTP");
693
+ sftpError.code = 4;
694
+ return setImmediate(next, sftpError);
695
+ }
696
+ });
697
+ });
698
+ },
699
+
700
+ /**
701
+ * Upload a file on the device
702
+ * @param {String} inPath location on the host
703
+ * @param {String} outPath location on the device
704
+ * @param {Function} next common-js callback
705
+ */
706
+ put: function(inPath, outPath, next) {
707
+ log.info("novacom#Session()#put()", "uploding into device:", outPath, "from host:", inPath);
708
+ const self = this;
709
+ let inStream;
710
+
711
+ log.verbose("novacom#Session()#put()", "sftpPut()::start");
712
+ self.sftpPut(inPath, outPath, function(err) {
713
+ if (err) {
714
+ log.verbose(err);
715
+ if (4 === err.code || 127 === err.code) {
716
+ log.info("novacom#Session()#put()", "sftp is not available, attempt transfering file via streamPut");
717
+ inStream = fs.createReadStream(inPath);
718
+ self.streamPut(outPath, inStream, next);
719
+ } else if (14 === err.code) {
720
+ const detailMsg = errHndl.getErrMsg("NO_FREE_SPACE");
721
+ setImmediate(next, detailMsg);
722
+ } else {
723
+ setImmediate(next, err);
724
+ }
725
+ } else {
726
+ log.info("novacom#Session()#put()", "sftpPut()::done");
727
+ setImmediate(next);
728
+ }
729
+ });
730
+ },
731
+
732
+ /**
733
+ * Upload a file on the device via ssh stream
734
+ * @param {String} outPath location on the device
735
+ * @param {ReadableStream} inStream paused host-side source
736
+ * @param {Function} next common-js callback
737
+ */
738
+ streamPut: function(outPath, inStream, next) {
739
+ log.info("novacom#Session()#streamPut()", "streaming into device:" + outPath);
740
+ const cmd = '/bin/cat > "' + outPath + '"';
741
+ this.run(cmd, inStream /* stdin*/ , null /* stdout*/ , process.stderr /* stderr*/ , next);
742
+ },
743
+
744
+ /**
745
+ * Upload a file on the device via sftp
746
+ * @param {String} inPath location on the host
747
+ * @param {String} outPath location on the device
748
+ * @param {Function} next common-js callback
749
+ */
750
+ sftpPut: function(inPath, outPath, next) {
751
+ log.verbose('novacom#Session()#sftpPut()', 'host:' + inPath + ' => ' + 'device:' + outPath);
752
+ const self = this;
753
+ self._checkSftp(next);
754
+
755
+ async.series({
756
+ transfer: function(next) {
757
+ self.ssh.sftp(function(err, sftp) {
758
+ if (err) {
759
+ return setImmediate(next, err);
760
+ }
761
+
762
+ const readStream = fs.createReadStream(inPath),
763
+ writeStream = sftp.createWriteStream(outPath);
764
+
765
+ writeStream.on('close', function() {
766
+ sftp.end();
767
+ setImmediate(next);
768
+ });
769
+
770
+ // Exit when the remote process has terminated
771
+ writeStream.on('exit', function(code, signal) {
772
+ err = makeExecError('sftpPut', code, signal);
773
+ setImmediate(next, err);
774
+ });
775
+
776
+ writeStream.on('error', function(error) {
777
+ log.verbose('novacom#Session()#sftpPut()', "error:", error);
778
+ setImmediate(next, error);
779
+ });
780
+
781
+ readStream.pipe(writeStream);
782
+ });
783
+ }
784
+ }, function(err) {
785
+ setImmediate(next, err);
786
+ });
787
+ },
788
+
789
+ /**
790
+ * Download file on the device
791
+ * @param {String} inPath location on the device
792
+ * @param {String} outPath location on the host
793
+ * @param {Function} next common-js callback
794
+ */
795
+ get: function(inPath, outPath, next) {
796
+ log.verbose("novacom#Session()#get()", "downloading into host:", outPath, "from target:", inPath);
797
+ const self = this;
798
+
799
+ log.verbose("novacom#Session()#get()", "sftpGet()::start");
800
+ self.sftpGet(inPath, outPath, function(err) {
801
+ if (err) {
802
+ log.verbose(err);
803
+ if (4 === err.code || 127 === err.code) {
804
+ log.info("novacom#Session()#get()", "sftp is not available, attempt transfering file via streamPut");
805
+ const os = fs.createWriteStream(outPath);
806
+ os.on('error', function(error) {
807
+ setImmediate(next, errHndl.getErrMsg(error));
808
+ });
809
+ self.streamGet(inPath, os, next);
810
+ } else {
811
+ setImmediate(next, err);
812
+ }
813
+ } else {
814
+ log.verbose("novacom#Session()#get()", "sftpGet()::done");
815
+ setImmediate(next);
816
+ }
817
+ });
818
+ },
819
+
820
+ /**
821
+ * Read a file from the device via ssh stream
822
+ * @param {String} inPath the device file path to be read
823
+ * @param {WritableStream} outStream host-side destination to copy the file into
824
+ * @param {Function} next commonJS callback invoked upon completion or failure
825
+ */
826
+ streamGet: function(inPath, outStream, next) {
827
+ log.verbose('novacom#Session()#streamGet()', "streaming from device:" + inPath);
828
+ const cmd = '/bin/cat ' + inPath;
829
+ this.run(cmd, null /* stdin*/ , outStream /* stdout*/ , process.stderr /* stderr*/ , next);
830
+ },
831
+
832
+ /**
833
+ * Download file on the device via sftp
834
+ * @param {String} inPath location on the device
835
+ * @param {String} outPath location on the host
836
+ * @param {Function} next common-js callback
837
+ */
838
+ sftpGet: function(inPath, outPath, next) {
839
+ log.verbose("novacom#Session()#sftpGet()", "target:" + inPath + " => " + "host:" + outPath);
840
+ const self = this;
841
+ self._checkSftp(next);
842
+ async.series({
843
+ transfer: function(next) {
844
+ self.ssh.sftp(function(err, sftp) {
845
+ if (err) {
846
+ setImmediate(next, err);
847
+ return;
848
+ }
849
+
850
+ const readStream = sftp.createReadStream(inPath),
851
+ writeStream = fs.createWriteStream(outPath);
852
+
853
+ readStream.on('close', function() {
854
+ sftp.end();
855
+ setImmediate(next);
856
+ });
857
+
858
+ // Exit when the remote process has terminated
859
+ readStream.on('exit', function(code, signal) {
860
+ err = makeExecError('sftpGet', code, signal);
861
+ setImmediate(next, err);
862
+ });
863
+
864
+ readStream.on('error', function(error) {
865
+ log.verbose("novacom#Session()#sftpGet()", "error:", error);
866
+ setImmediate(next, error);
867
+ });
868
+
869
+ readStream.pipe(writeStream);
870
+ });
871
+ }
872
+ }, function(err) {
873
+ setImmediate(next, err);
874
+ });
875
+ },
876
+
877
+ /**
878
+ * Run a command on the device
879
+ * @param {String} cmd the device command to run
880
+ * @param {stream.ReadableStream} stdin given as novacom process stdin
881
+ * @param {stream.WritableStream} stdout given as novacom process stdout
882
+ * @param {stream.WritableStream} stderr given as novacom process stderr
883
+ * @param {Function} next commonJS callback invoked upon completion or failure
884
+ */
885
+ run: function(cmd, stdin, stdout, stderr, next) {
886
+ this.run_ssh(cmd, {}, stdin, stdout, stderr, next);
887
+ },
888
+
889
+ /**
890
+ * Run a command with exec option on the device
891
+ * @param {String} cmd the device command to run
892
+ * @param {Object} opt given as exec option
893
+ * @param {stream.ReadableStream} stdin given as novacom process stdin
894
+ * @param {stream.WritableStream} stdout given as novacom process stdout
895
+ * @param {stream.WritableStream} stderr given as novacom process stderr
896
+ * @param {Function} next commonJS callback invoked upon completion or failure
897
+ */
898
+ runWithOption: function(cmd, opt, stdin, stdout, stderr, next) {
899
+ this.run_ssh(cmd, opt, stdin, stdout, stderr, next);
900
+ },
901
+
902
+ /**
903
+ * Run a command on the device
904
+ * @param {String} cmd the device command to run
905
+ * @param {Object} opt given as exec option
906
+ * @param {stream.ReadableStream} stdin given as novacom process stdin
907
+ * @param {stream.WritableStream} stdout given as novacom process stdout
908
+ * @param {stream.WritableStream} stderr given as novacom process stderr
909
+ * @param {Function} next commonJS callback invoked upon completion or failure
910
+ */
911
+ run_ssh: function(cmd, opt, stdin, stdout, stderr, next) {
912
+ log.info("novacom#Session()#run()", "cmd:" + cmd + ", opt:" + JSON.stringify(opt));
913
+ if (typeof next !== 'function') {
914
+ throw errHndl.getErrMsg("MISSING_CALLBACK", "next", util.inspect(next));
915
+ }
916
+
917
+ // plumb output
918
+ const write = {},
919
+ obj = {};
920
+ let orgErrMsg;
921
+
922
+ if (!stdout) {
923
+ log.silly("novacom#Session()#run()", "stdout: none");
924
+ write.stdout = function() {};
925
+ } else if (stdout instanceof stream.Stream) {
926
+ log.silly("novacom#Session()#run()", "stdout: stream");
927
+ write.stdout = stdout.write;
928
+ obj.stdout = stdout;
929
+ } else if (stdout instanceof Function) {
930
+ log.silly("novacom#Session()#run()", "stdout: function");
931
+ write.stdout = stdout;
932
+ } else {
933
+ return setImmediate(next, errHndl.getErrMsg("INVALID_VALUE", "stdout", util.inspect(stdout)));
934
+ }
935
+
936
+ if (!stderr) {
937
+ log.silly("novacom#Session()#run()", "stderr: none");
938
+ write.stderr = function() {};
939
+ } else if (stderr instanceof stream.Stream) {
940
+ log.silly("novacom#Session()#run()", "stderr: stream");
941
+ write.stderr = stderr.write;
942
+ obj.stderr = stderr;
943
+ } else if (stderr instanceof Function) {
944
+ log.silly("novacom#Session()#run()", "stderr: function");
945
+ write.stderr = stderr;
946
+ } else {
947
+ return setImmediate(next, errHndl.getErrMsg("INVALID_VALUE", "stderr", util.inspect(stderr)));
948
+ }
949
+
950
+ // execute command
951
+ this.ssh.exec(cmd, opt, (function(err, chStream) {
952
+ log.silly("novacom#Session()#run()", "exec cmd:" + cmd + ", opt:" + JSON.stringify(opt) + ", err:" + err);
953
+ if (err) {
954
+ return setImmediate(next, err);
955
+ }
956
+
957
+ // manual pipe(): handle & divert data chunks
958
+ chStream.on('data', function(data, extended) {
959
+ extended = extended || 'stdout';
960
+ log.verbose("novacom#Session()#run()", "on data (" + extended + ")");
961
+ write[extended].bind(obj[extended])(data);
962
+ }).stderr.on('data', function(data) {
963
+ log.verbose("novacom#Session()#run()", "on data (stderr)");
964
+ orgErrMsg = data.toString();
965
+ });
966
+
967
+ // manual pipe(): handle EOF
968
+ chStream.on('end', function() {
969
+ log.silly("novacom#Session()#run()", "event EOF from (cmd:" + cmd + ")");
970
+ if ((stdout !== process.stdout) && (stdout instanceof stream.Stream)) {
971
+ stdout.end();
972
+ }
973
+ if ((stderr !== process.stderr) && (stderr instanceof stream.Stream)) {
974
+ stderr.end();
975
+ }
976
+ });
977
+
978
+ // Exit when the remote process has terminated
979
+ chStream.on('exit', function(code, signal) {
980
+ log.silly("novacom#Session()#run()", "event exit code:" + code + ', signal:' + signal + " (cmd:" + cmd + ")");
981
+ err = makeExecError(cmd, code, signal, orgErrMsg);
982
+ setImmediate(next, err);
983
+ });
984
+
985
+ // Exit if the 'exit' event was not
986
+ // received (dropbear <= 0.51)
987
+ chStream.on('close', function() {
988
+ log.silly("novacom#Session()#run()", "event close (cmd:" + cmd + ")");
989
+ if (err === undefined) {
990
+ setImmediate(next);
991
+ }
992
+ });
993
+
994
+ if (stdin) {
995
+ stdin.pipe(chStream);
996
+ log.verbose("novacom#Session()#run()", "resuming input");
997
+ }
998
+ }));
999
+ },
1000
+
1001
+ /**
1002
+ * Run a command on the device considerless return stdout
1003
+ * @param {String} cmd the device command to run
1004
+ * @param {Function} callback invoked upon exit event
1005
+ * @param {Function} next commonJS callback invoked upon completion or failure
1006
+ */
1007
+ runNoHangup: function(cmd, cbData, cbExit, next) {
1008
+ this.runNoHangup_ssh(cmd, cbData, cbExit, next);
1009
+ },
1010
+
1011
+ /**
1012
+ * Run a command on the device considerless return stdout
1013
+ * @param {String} cmd the device command to run
1014
+ * @param {Function} callback invoked upon exit event
1015
+ * @param {Function} next commonJS callback invoked upon completion or failure
1016
+ */
1017
+ runNoHangup_ssh: function(cmd, cbData, cbExit, next) {
1018
+ log.info("novacom#Session()#runNoHangup()", "cmd=" + cmd);
1019
+ if (arguments.length < 2) {
1020
+ throw errHndl.getErrMsg("MISSING_CALLBACK", "next");
1021
+ }
1022
+
1023
+ for (const arg in arguments) {
1024
+ if (typeof arguments[arg] === 'undefined') {
1025
+ delete arguments[arg];
1026
+ arguments.length--;
1027
+ }
1028
+ }
1029
+
1030
+ switch (arguments.length) {
1031
+ case 2:
1032
+ next = cbData;
1033
+ cbData = cbExit = null;
1034
+ break;
1035
+ case 3:
1036
+ next = cbExit;
1037
+ cbExit = cbData;
1038
+ cbData = null;
1039
+ break;
1040
+ default:
1041
+ break;
1042
+ }
1043
+
1044
+ if (typeof next !== 'function') {
1045
+ throw errHndl.getErrMsg("MISSING_CALLBACK", "next", util.inspect(next));
1046
+ }
1047
+
1048
+ // execute command
1049
+ this.ssh.exec(cmd, (function(err, _stream) {
1050
+ log.verbose("novacom#Session()#run()", "exec cmd:" + cmd + ", err:" + err);
1051
+ if (err) {
1052
+ return setImmediate(next, err);
1053
+ }
1054
+
1055
+ _stream.on('data', function(data) {
1056
+ const str = (Buffer.isBuffer(data)) ? data.toString() : data;
1057
+ log.verbose("novacom#Session()#runNoHangup()#onData", str);
1058
+ if (cbData) cbData(data);
1059
+ }).stderr.on('data', function(data) {
1060
+ const str = (Buffer.isBuffer(data)) ? data.toString() : data;
1061
+ log.verbose("novacom#Session()#runNoHangup()#onData#stderr#", str);
1062
+ if (cbData) cbData(data);
1063
+ });
1064
+
1065
+ // Exit when the remote process has terminated
1066
+ if (cbExit) {
1067
+ _stream.on('exit', function(code, signal) {
1068
+ log.verbose("novacom#Session()#runNoHangup()", "event exit code=" + code + ', signal=' + signal + " (cmd: " + cmd + ")");
1069
+ err = makeExecError(cmd, code, signal);
1070
+ cbExit(err);
1071
+ });
1072
+ }
1073
+ setImmediate(next);
1074
+ }));
1075
+ },
1076
+
1077
+ /**
1078
+ * Forward the given device port on the host.
1079
+ * As any other public method, this one can be called
1080
+ * only once the ssh session has emitted the 'ready'
1081
+ * event, so as part of the Session()#next callback.
1082
+ * @public
1083
+ * @param {Function} next commonJS callback invoked upon completion or failure
1084
+ */
1085
+ forward: function(devicePort, localPort, forwardName, next) {
1086
+ log.info("novacom#Session()#forward()", "devicePort:", devicePort, ", localPort:", localPort);
1087
+ const session = this;
1088
+ let forwardInUse = false,
1089
+ registerName = null;
1090
+
1091
+ if (typeof forwardName === 'function') {
1092
+ next = forwardName;
1093
+ } else if (forwardName) {
1094
+ registerName = forwardName;
1095
+ }
1096
+
1097
+ if (localPort !== 0) {
1098
+ if (session.forwardedPorts.indexOf({
1099
+ name: registerName,
1100
+ local: localPort,
1101
+ device: devicePort
1102
+ }) > 0) {
1103
+ forwardInUse = true;
1104
+ }
1105
+ } else if (session.forwardedPorts.filter(function(forwardItem) {
1106
+ return (forwardItem.device === devicePort && forwardItem.name === registerName);
1107
+ }).length > 0) {
1108
+ forwardInUse = true;
1109
+ }
1110
+
1111
+ if (forwardInUse) {
1112
+ return setImmediate(next);
1113
+ }
1114
+
1115
+ const localServer = net.createServer(function(inCnx) {
1116
+ log.info("novacom#Session()#forward()", "new client, localPort:", localPort);
1117
+ log.verbose("novacom#Session()#forward()", "new client, from: " + inCnx.remoteAddress + ':' + inCnx.remotePort);
1118
+
1119
+ inCnx.on('error', function(err) {
1120
+ log.verbose("novacom#Session()#forward()", "inCnx::error, err::" + err);
1121
+ });
1122
+
1123
+ // Open the outbound connection on the device to match the incoming client.
1124
+ session.ssh.forwardOut("127.0.0.1" /* srcAddr*/ , inCnx.remotePort /* srcPort*/ , "127.0.0.1" /* dstAddr*/ , devicePort /* dstPort*/ , function(err, outCnx) {
1125
+ if (err) {
1126
+ console.log("novacom#Session()#forward()", "failed forwarding client localPort:",
1127
+ localPort, "(inCnx.remotePort:", inCnx.remotePort, ")=> devicePort:", devicePort);
1128
+ log.warn("novacom#Session()#forward()", "failed forwarding client localPort:",
1129
+ localPort, "=> devicePort:", devicePort);
1130
+ inCnx.destroy();
1131
+ return;
1132
+ }
1133
+
1134
+ log.info("novacom#Session()#forward()", "connected, devicePort:", devicePort);
1135
+ inCnx.on('data', function(data) {
1136
+ if (outCnx.writable && outCnx.writable === true) {
1137
+ if (outCnx.write(data) === false) {
1138
+ inCnx.pause();
1139
+ }
1140
+ }
1141
+ });
1142
+
1143
+ inCnx.on('close', function(had_err) {
1144
+ log.verbose("novacom#Session()#forward()", "inCnx::close, had_err:", had_err);
1145
+ outCnx.destroy();
1146
+ });
1147
+
1148
+ outCnx.on('drain', function() {
1149
+ inCnx.resume();
1150
+ });
1151
+
1152
+ outCnx.on('data', function(data) {
1153
+ inCnx.write(data);
1154
+ });
1155
+
1156
+ outCnx.on('close', function(had_err) {
1157
+ log.verbose("novacom#Session()#forward()", "outCnx::close, had_err:", had_err);
1158
+ });
1159
+ });
1160
+ });
1161
+
1162
+ session.ssh.on('close', function() {
1163
+ localServer.close();
1164
+ });
1165
+
1166
+ try {
1167
+ localServer.listen(localPort, null, (function() {
1168
+ const localServerPort = localServer.address().port;
1169
+ session.forwardedPorts.push({
1170
+ name: registerName,
1171
+ local: localServerPort,
1172
+ device: devicePort
1173
+ });
1174
+ setImmediate(next);
1175
+ }));
1176
+ } catch (err) {
1177
+ setImmediate(next, err);
1178
+ }
1179
+ },
1180
+
1181
+ getLocalPortByName: function(queryName) {
1182
+ const session = this;
1183
+ let found = null;
1184
+ session.forwardedPorts.forEach(function(portItem) {
1185
+ if (portItem.name === queryName) {
1186
+ found = portItem.local;
1187
+ return;
1188
+ }
1189
+ });
1190
+ return found;
1191
+ },
1192
+
1193
+ runHostedAppServer: function(url, next) {
1194
+ server.runServer(url, 0, function(err, serverInfo) {
1195
+ if (serverInfo && serverInfo.port) {
1196
+ this.setHostedAppServerPort(serverInfo.port);
1197
+ }
1198
+ next(err);
1199
+ }.bind(this));
1200
+ },
1201
+
1202
+ setHostedAppServerPort: function(port) {
1203
+ this.hostedAppServerPort = port;
1204
+ },
1205
+
1206
+ getHostedAppServerPort: function() {
1207
+ return this.hostedAppServerPort;
1208
+ }
1209
+ };
1210
+
1211
+ if (typeof module !== 'undefined' && module.exports) {
1212
+ module.exports = novacom;
1213
+ }
1214
+ }());