@phystack/cli 4.3.40-dev

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 (192) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +24 -0
  3. package/bin/index.js +2 -0
  4. package/dist/commands/app/build-apps.js +66 -0
  5. package/dist/commands/app/build-apps.js.map +1 -0
  6. package/dist/commands/app/build-container-remote.js +171 -0
  7. package/dist/commands/app/build-container-remote.js.map +1 -0
  8. package/dist/commands/app/build-container.js +330 -0
  9. package/dist/commands/app/build-container.js.map +1 -0
  10. package/dist/commands/app/build.js +393 -0
  11. package/dist/commands/app/build.js.map +1 -0
  12. package/dist/commands/app/create.js +451 -0
  13. package/dist/commands/app/create.js.map +1 -0
  14. package/dist/commands/app/deploy.js +176 -0
  15. package/dist/commands/app/deploy.js.map +1 -0
  16. package/dist/commands/app/device-picker.js +150 -0
  17. package/dist/commands/app/device-picker.js.map +1 -0
  18. package/dist/commands/app/import.js +303 -0
  19. package/dist/commands/app/import.js.map +1 -0
  20. package/dist/commands/app/list.js +26 -0
  21. package/dist/commands/app/list.js.map +1 -0
  22. package/dist/commands/app/publish.js +327 -0
  23. package/dist/commands/app/publish.js.map +1 -0
  24. package/dist/commands/app/settings.js +129 -0
  25. package/dist/commands/app/settings.js.map +1 -0
  26. package/dist/commands/app/types.js +13 -0
  27. package/dist/commands/app/types.js.map +1 -0
  28. package/dist/commands/app/upload-description.js +139 -0
  29. package/dist/commands/app/upload-description.js.map +1 -0
  30. package/dist/commands/app/upload-settings.js +29 -0
  31. package/dist/commands/app/upload-settings.js.map +1 -0
  32. package/dist/commands/app/utils.js +86 -0
  33. package/dist/commands/app/utils.js.map +1 -0
  34. package/dist/commands/auth/login.js +111 -0
  35. package/dist/commands/auth/login.js.map +1 -0
  36. package/dist/commands/auth/logout.js +19 -0
  37. package/dist/commands/auth/logout.js.map +1 -0
  38. package/dist/commands/descriptor/create.js +143 -0
  39. package/dist/commands/descriptor/create.js.map +1 -0
  40. package/dist/commands/descriptor/index.js +36 -0
  41. package/dist/commands/descriptor/index.js.map +1 -0
  42. package/dist/commands/descriptor/publish.js +163 -0
  43. package/dist/commands/descriptor/publish.js.map +1 -0
  44. package/dist/commands/descriptor/show.js +68 -0
  45. package/dist/commands/descriptor/show.js.map +1 -0
  46. package/dist/commands/dev/develop.js +175 -0
  47. package/dist/commands/dev/develop.js.map +1 -0
  48. package/dist/commands/dev/forward.js +118 -0
  49. package/dist/commands/dev/forward.js.map +1 -0
  50. package/dist/commands/dev/index.js +66 -0
  51. package/dist/commands/dev/index.js.map +1 -0
  52. package/dist/commands/dev/list.js +96 -0
  53. package/dist/commands/dev/list.js.map +1 -0
  54. package/dist/commands/dev/screen-devtools.js +156 -0
  55. package/dist/commands/dev/screen-devtools.js.map +1 -0
  56. package/dist/commands/dev/select.js +118 -0
  57. package/dist/commands/dev/select.js.map +1 -0
  58. package/dist/commands/dev/shell.js +171 -0
  59. package/dist/commands/dev/shell.js.map +1 -0
  60. package/dist/commands/dev/vnc.js +75 -0
  61. package/dist/commands/dev/vnc.js.map +1 -0
  62. package/dist/commands/device/select.js +118 -0
  63. package/dist/commands/device/select.js.map +1 -0
  64. package/dist/commands/flash.js +1120 -0
  65. package/dist/commands/flash.js.map +1 -0
  66. package/dist/commands/inst/create.js +55 -0
  67. package/dist/commands/inst/create.js.map +1 -0
  68. package/dist/commands/inst/index.js +15 -0
  69. package/dist/commands/inst/index.js.map +1 -0
  70. package/dist/commands/inst/list.js +26 -0
  71. package/dist/commands/inst/list.js.map +1 -0
  72. package/dist/commands/legacydev/debug.js +11 -0
  73. package/dist/commands/legacydev/debug.js.map +1 -0
  74. package/dist/commands/legacydev/deploy.js +15 -0
  75. package/dist/commands/legacydev/deploy.js.map +1 -0
  76. package/dist/commands/legacydev/dumpTwin.js +27 -0
  77. package/dist/commands/legacydev/dumpTwin.js.map +1 -0
  78. package/dist/commands/legacydev/forward.js +104 -0
  79. package/dist/commands/legacydev/forward.js.map +1 -0
  80. package/dist/commands/legacydev/index.js +188 -0
  81. package/dist/commands/legacydev/index.js.map +1 -0
  82. package/dist/commands/legacydev/invoke.js +29 -0
  83. package/dist/commands/legacydev/invoke.js.map +1 -0
  84. package/dist/commands/legacydev/js.js +69 -0
  85. package/dist/commands/legacydev/js.js.map +1 -0
  86. package/dist/commands/legacydev/list.js +196 -0
  87. package/dist/commands/legacydev/list.js.map +1 -0
  88. package/dist/commands/legacydev/logs.js +60 -0
  89. package/dist/commands/legacydev/logs.js.map +1 -0
  90. package/dist/commands/legacydev/modules.js +50 -0
  91. package/dist/commands/legacydev/modules.js.map +1 -0
  92. package/dist/commands/legacydev/move.js +23 -0
  93. package/dist/commands/legacydev/move.js.map +1 -0
  94. package/dist/commands/legacydev/ota.js +88 -0
  95. package/dist/commands/legacydev/ota.js.map +1 -0
  96. package/dist/commands/legacydev/patchTwin.js +21 -0
  97. package/dist/commands/legacydev/patchTwin.js.map +1 -0
  98. package/dist/commands/legacydev/pin.js +23 -0
  99. package/dist/commands/legacydev/pin.js.map +1 -0
  100. package/dist/commands/legacydev/pub.js +25 -0
  101. package/dist/commands/legacydev/pub.js.map +1 -0
  102. package/dist/commands/legacydev/rdp.js +64 -0
  103. package/dist/commands/legacydev/rdp.js.map +1 -0
  104. package/dist/commands/legacydev/screen-devtools.js +142 -0
  105. package/dist/commands/legacydev/screen-devtools.js.map +1 -0
  106. package/dist/commands/legacydev/settingsShow.js +89 -0
  107. package/dist/commands/legacydev/settingsShow.js.map +1 -0
  108. package/dist/commands/legacydev/settingsUpdate.js +114 -0
  109. package/dist/commands/legacydev/settingsUpdate.js.map +1 -0
  110. package/dist/commands/legacydev/shell.js +167 -0
  111. package/dist/commands/legacydev/shell.js.map +1 -0
  112. package/dist/commands/legacydev/showTwin.js +9 -0
  113. package/dist/commands/legacydev/showTwin.js.map +1 -0
  114. package/dist/commands/legacydev/statusLog.js +56 -0
  115. package/dist/commands/legacydev/statusLog.js.map +1 -0
  116. package/dist/commands/legacydev/sub.js +39 -0
  117. package/dist/commands/legacydev/sub.js.map +1 -0
  118. package/dist/commands/legacydev/vnc.js +61 -0
  119. package/dist/commands/legacydev/vnc.js.map +1 -0
  120. package/dist/commands/tenant/index.js +21 -0
  121. package/dist/commands/tenant/index.js.map +1 -0
  122. package/dist/commands/tenant/list.js +14 -0
  123. package/dist/commands/tenant/list.js.map +1 -0
  124. package/dist/commands/tenant/select.js +87 -0
  125. package/dist/commands/tenant/select.js.map +1 -0
  126. package/dist/commands/vm/create.js +718 -0
  127. package/dist/commands/vm/create.js.map +1 -0
  128. package/dist/commands/vm/index.js +130 -0
  129. package/dist/commands/vm/index.js.map +1 -0
  130. package/dist/commands/vm/list.js +124 -0
  131. package/dist/commands/vm/list.js.map +1 -0
  132. package/dist/commands/vm/logs.js +66 -0
  133. package/dist/commands/vm/logs.js.map +1 -0
  134. package/dist/commands/vm/remove.js +180 -0
  135. package/dist/commands/vm/remove.js.map +1 -0
  136. package/dist/commands/vm/shell.js +400 -0
  137. package/dist/commands/vm/shell.js.map +1 -0
  138. package/dist/commands/vm/start.js +861 -0
  139. package/dist/commands/vm/start.js.map +1 -0
  140. package/dist/commands/vm/stop.js +232 -0
  141. package/dist/commands/vm/stop.js.map +1 -0
  142. package/dist/index.js +158 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/services/admin-api/admin-api.types.js +3 -0
  145. package/dist/services/admin-api/admin-api.types.js.map +1 -0
  146. package/dist/services/admin-api/device-modules.admin-api.service.js +58 -0
  147. package/dist/services/admin-api/device-modules.admin-api.service.js.map +1 -0
  148. package/dist/services/admin-api/devices-admin-api.service.js +213 -0
  149. package/dist/services/admin-api/devices-admin-api.service.js.map +1 -0
  150. package/dist/services/admin-api/gridapps-admin-api.service.js +59 -0
  151. package/dist/services/admin-api/gridapps-admin-api.service.js.map +1 -0
  152. package/dist/services/admin-api/index.js +157 -0
  153. package/dist/services/admin-api/index.js.map +1 -0
  154. package/dist/services/admin-api/installations-admin-api.service.js +29 -0
  155. package/dist/services/admin-api/installations-admin-api.service.js.map +1 -0
  156. package/dist/services/admin-api/organizations-admin-api.service.js +53 -0
  157. package/dist/services/admin-api/organizations-admin-api.service.js.map +1 -0
  158. package/dist/services/auth/device-grant-auth.service.js +224 -0
  159. package/dist/services/auth/device-grant-auth.service.js.map +1 -0
  160. package/dist/services/phyhub/index.js +200 -0
  161. package/dist/services/phyhub/index.js.map +1 -0
  162. package/dist/services/phyhub/phyhub.types.js +3 -0
  163. package/dist/services/phyhub/phyhub.types.js.map +1 -0
  164. package/dist/utils/device-fetcher.js +92 -0
  165. package/dist/utils/device-fetcher.js.map +1 -0
  166. package/dist/utils/devices.js +41 -0
  167. package/dist/utils/devices.js.map +1 -0
  168. package/dist/utils/docker-credentials.js +720 -0
  169. package/dist/utils/docker-credentials.js.map +1 -0
  170. package/dist/utils/emulated-device.js +91 -0
  171. package/dist/utils/emulated-device.js.map +1 -0
  172. package/dist/utils/index.js +180 -0
  173. package/dist/utils/index.js.map +1 -0
  174. package/dist/utils/modules.js +36 -0
  175. package/dist/utils/modules.js.map +1 -0
  176. package/dist/utils/org-selector.js +108 -0
  177. package/dist/utils/org-selector.js.map +1 -0
  178. package/dist/utils/proxy.js +31 -0
  179. package/dist/utils/proxy.js.map +1 -0
  180. package/dist/utils/registry-credentials.js +113 -0
  181. package/dist/utils/registry-credentials.js.map +1 -0
  182. package/dist/utils/statuses.js +124 -0
  183. package/dist/utils/statuses.js.map +1 -0
  184. package/dist/utils/templates.js +197 -0
  185. package/dist/utils/templates.js.map +1 -0
  186. package/dist/utils/tenant-storage.js +88 -0
  187. package/dist/utils/tenant-storage.js.map +1 -0
  188. package/dist/utils/vm.js +434 -0
  189. package/dist/utils/vm.js.map +1 -0
  190. package/dist/utils/with-spinner.js +20 -0
  191. package/dist/utils/with-spinner.js.map +1 -0
  192. package/package.json +103 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-description.js","sourceRoot":"","sources":["../../../src/commands/app/upload-description.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAwD;AACxD,uDAAuD;AACvD,4CAAoB;AACpB,gDAAwB;AACxB,kDAA0B;AAC1B,+DAAuC;AACvC,mCAAiC;AACjC,4EAAmD;AACnD,wDAAoD;AAEpD,MAAM,mBAAmB,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC7C,IAAI,CAAC;QACH,MAAM,YAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE;KAChB,CAAC;IAEF,MAAM,eAAe,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7D,eAAe;SACZ,QAAQ,EAAE;SACV,KAAK,CAAC,MAAM,CAAC;SACb,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,GAAG,CAAC;iBACb,KAAK,CAAC,IAAI,CAAC;iBACX,KAAK,EAAE;iBACP,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;iBACjB,IAAI,EAAE,CAAC;YACV,MAAM,EAAE,GAAG,CAAC;iBACT,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACxC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBAChB,KAAK,EAAE,CAAC;YACX,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,2CAA2C;YACpE,CAAC;YAED,OAAO;QACT,CAAC;QAED,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC;IACnC,CAAC,CAAC,CAAC;IAEL,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,KAAK,EAAE,UAAkB,EAAmB,EAAE;IAC3E,MAAM,WAAW,GAAG,GAAG,UAAU,eAAe,CAAC;IAEjD,MAAM,SAAS,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE1D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEtD,OAAO,YAAY,CAAC,IAAI,CAAC;AAC3B,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,KAAK,EACpC,YAAY,EACZ,IAA+B,EAC/B,EAAE;IACF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAA,kBAAQ,EAAC,OAAO,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACvE,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CACT,2FAA2F,CAC5F,CACF,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAlBW,QAAA,iBAAiB,qBAkB5B;AAEF,MAAM,iBAAiB,GAAG,KAAK,EAC7B,EAAU,EACV,EACE,QAAQ,EACR,eAAe,EACf,MAAM,GACwD,EAChE,EAAE;IACF,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,YAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,aAAa,CAAC;IAChF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,cAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,SAAS,GACb,EAAE;QACF,CAAC,MAAM,IAAA,sBAAW,EAChB,GAAG,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,EACxC,qCAAqC,CACtC,CAAC,CAAC;IAEL,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9C,MAAM,GAAG,GAAG,MAAM,IAAA,sBAAW,EAC3B,GAAG,EAAE,CAAC,IAAA,oBAAQ,GAAE,CAAC,aAAa,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAC7D,4BAA4B,CAC7B,CAAC;IAEF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,gFAAgF;IAChF,MAAM,IAAI,GAAG,MAAM,IAAA,sBAAW,EAC5B,GAAG,EAAE,CAAC,IAAA,oBAAQ,GAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC,EAC9D,mBAAmB,CACpB,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC;IAElE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,MAAM,IAAA,oBAAQ,GAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAChD,wCAAwC;IACxC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,GAAG,cAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,YAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,SAAS,CAAC,kCAAkC;QAC9C,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAA,cAAM,EAAC;YACvB,IAAI,EAAE,KAAK;YACX,KAAK;YACL,SAAS,EAAE,GAAG,CAAC,EAAE;YACjB,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,WAAW,EAAE,WAAW;SACzB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEhD,MAAM,IAAA,oBAAQ,GAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QACtC,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW;QAChD,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,kBAAe,iBAAiB,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chalk_1 = __importDefault(require("chalk"));
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const admin_api_1 = require("../../services/admin-api");
9
+ exports.default = async (appName, destination) => {
10
+ try {
11
+ console.log(chalk_1.default.grey('Uploading settings for app'), chalk_1.default.bold(appName), chalk_1.default.gray('from'), chalk_1.default.green(destination));
12
+ if (!fs_1.default.statSync(destination).isDirectory()) {
13
+ throw new Error(`Not a directory: ${destination}`);
14
+ }
15
+ const payload = JSON.parse(fs_1.default.readFileSync(`${destination}/index.json`).toString());
16
+ const insts = await (0, admin_api_1.adminApi)().installations.listInstallations();
17
+ const inst = insts.find((a) => a.appName === appName);
18
+ if (!inst)
19
+ throw new Error('Installation not found');
20
+ inst.settings.provider.app = payload.app;
21
+ await (0, admin_api_1.adminApi)().installations.updateInstallation(inst);
22
+ console.log(chalk_1.default.green('Settings updated'));
23
+ }
24
+ catch (err) {
25
+ console.error(chalk_1.default.red(`❗️There was an error: ${err.message}`));
26
+ throw err;
27
+ }
28
+ };
29
+ //# sourceMappingURL=upload-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-settings.js","sourceRoot":"","sources":["../../../src/commands/app/upload-settings.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,4CAAoB;AACpB,wDAAoD;AAEpD,kBAAe,KAAK,EAAE,OAAe,EAAE,WAAmB,EAAE,EAAE;IAC5D,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,EACxC,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EACnB,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAClB,eAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CACzB,CAAC;QACF,IAAI,CAAC,YAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,GAAG,WAAW,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEpF,MAAM,KAAK,GAAG,MAAM,IAAA,oBAAQ,GAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;QAEjE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAErD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAEzC,MAAM,IAAA,oBAAQ,GAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.checkIfImageExists = exports.upload = exports.DEFAULT_REGISTRY = void 0;
7
+ exports.checkImageExistsInRegistry = checkImageExistsInRegistry;
8
+ /* eslint-disable @typescript-eslint/no-explicit-any */
9
+ const azure_storage_1 = require("azure-storage");
10
+ const child_process_1 = __importDefault(require("child_process"));
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ exports.DEFAULT_REGISTRY = 'docker.io';
13
+ const upload = async ({ file, token, gridappId, onProgress = null, contentType, suffix = '', }) => {
14
+ const { uri, sas, container, uuid } = token;
15
+ // TODO: extract thi to a blob service
16
+ const blobService = (0, azure_storage_1.createBlobServiceWithSas)(uri, sas).withFilter(new azure_storage_1.ExponentialRetryPolicyFilter());
17
+ const checkMD5 = false;
18
+ const blockSize = file.size > 1024 * 1024 * 32 ? 1024 * 1024 * 4 : 1024 * 512;
19
+ const options = {
20
+ storeBlobContentMD5: checkMD5,
21
+ blockSize,
22
+ contentSettings: { contentType },
23
+ };
24
+ blobService.singleBlobPutThresholdInBytes = blockSize;
25
+ const filename = `${gridappId}/${uuid}${suffix}`;
26
+ await new Promise((resolve, reject) => {
27
+ const speedSummary = blobService.createBlockBlobFromLocalFile(container, filename, file, options, (error) => {
28
+ if (error) {
29
+ reject(error);
30
+ }
31
+ else {
32
+ resolve();
33
+ }
34
+ });
35
+ speedSummary.on('progress', () => {
36
+ if (onProgress) {
37
+ const percent = speedSummary.getCompletePercent(0);
38
+ if (percent != null) {
39
+ onProgress(percent);
40
+ }
41
+ }
42
+ });
43
+ });
44
+ return `${uri}/${container}/${filename}`;
45
+ };
46
+ exports.upload = upload;
47
+ const checkIfImageExists = (image) => {
48
+ try {
49
+ child_process_1.default.execSync(`docker inspect ${image}`);
50
+ return true;
51
+ }
52
+ catch (e) {
53
+ return false;
54
+ }
55
+ };
56
+ exports.checkIfImageExists = checkIfImageExists;
57
+ async function checkImageExistsInRegistry(image, pullCredentials = null, registry = null) {
58
+ try {
59
+ // Login to registry with pull credentials if provided
60
+ if (pullCredentials &&
61
+ pullCredentials.username &&
62
+ pullCredentials.password &&
63
+ registry) {
64
+ try {
65
+ console.log(chalk_1.default.dim(`Logging in to registry ${registry} to check image existence...`));
66
+ child_process_1.default.execSync(`docker login ${registry} -u ${pullCredentials.username} -p ${pullCredentials.password}`, { stdio: 'pipe' });
67
+ }
68
+ catch (loginError) {
69
+ // Silently continue - Docker might use cached credentials
70
+ }
71
+ }
72
+ // Use docker manifest inspect to check if image exists
73
+ child_process_1.default.execSync(`docker manifest inspect ${image}`, { stdio: 'pipe' });
74
+ return true;
75
+ }
76
+ catch (e) {
77
+ return false;
78
+ }
79
+ }
80
+ exports.default = {
81
+ DEFAULT_REGISTRY: exports.DEFAULT_REGISTRY,
82
+ upload: exports.upload,
83
+ checkIfImageExists: exports.checkIfImageExists,
84
+ checkImageExistsInRegistry,
85
+ };
86
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/app/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chalk_1 = __importDefault(require("chalk"));
7
+ const open_1 = __importDefault(require("open"));
8
+ const readline_1 = __importDefault(require("readline"));
9
+ const inquirer_1 = __importDefault(require("inquirer"));
10
+ const device_grant_auth_service_1 = __importDefault(require("../../services/auth/device-grant-auth.service"));
11
+ const clearLastConsoleLines = (count) => {
12
+ for (let i = 0; i < count; i++) {
13
+ readline_1.default.moveCursor(process.stdout, 0, -1);
14
+ readline_1.default.clearLine(process.stdout, 0);
15
+ }
16
+ };
17
+ const login = async ({ useDeviceCode, useDeveloperToken, }) => {
18
+ let intervalInstance = null;
19
+ let didStartAuthFlow = false;
20
+ // Check for environment variable first for developer token
21
+ const envToken = process.env.PHYGRID_DEVELOPER_TOKEN;
22
+ if (envToken) {
23
+ const authService = new device_grant_auth_service_1.default();
24
+ await authService.storeDeveloperToken(envToken);
25
+ console.log(chalk_1.default.green('Developer token from environment variable stored successfully'));
26
+ return;
27
+ }
28
+ // Handle developer token authentication
29
+ if (useDeveloperToken !== undefined) {
30
+ const authService = new device_grant_auth_service_1.default();
31
+ // If token was provided as argument, use it directly
32
+ if (useDeveloperToken) {
33
+ await authService.storeDeveloperToken(useDeveloperToken);
34
+ console.log(chalk_1.default.green('Developer token stored successfully'));
35
+ return;
36
+ }
37
+ // Otherwise prompt for token
38
+ const { token } = await inquirer_1.default.prompt([
39
+ {
40
+ type: 'password',
41
+ name: 'token',
42
+ message: 'Enter your developer token:',
43
+ validate: (input) => {
44
+ if (!input || input.length < 10) {
45
+ return 'Please enter a valid developer token';
46
+ }
47
+ return true;
48
+ },
49
+ },
50
+ ]);
51
+ await authService.storeDeveloperToken(token);
52
+ console.log(chalk_1.default.green('Developer token stored successfully'));
53
+ return;
54
+ }
55
+ const showCountdown = (ttl) => {
56
+ const expirationTime = Date.now() + ttl * 1000;
57
+ intervalInstance = setInterval(() => {
58
+ const remainingTime = expirationTime - Date.now();
59
+ if (remainingTime <= 0) {
60
+ clearInterval(intervalInstance);
61
+ return;
62
+ }
63
+ const minutes = Math.floor(remainingTime / 1000 / 60);
64
+ const seconds = Math.floor((remainingTime / 1000) % 60);
65
+ readline_1.default.cursorTo(process.stdout, 0);
66
+ process.stdout.write(`Time remaining: ${minutes}m ${seconds}s`);
67
+ }, 1000);
68
+ };
69
+ const clearLoginSession = () => {
70
+ if (intervalInstance) {
71
+ clearInterval(intervalInstance);
72
+ }
73
+ if (!didStartAuthFlow) {
74
+ return;
75
+ }
76
+ const prevLinesToClear = useDeviceCode ? 3 : 6;
77
+ clearLastConsoleLines(prevLinesToClear);
78
+ };
79
+ const handleDeviceAuthorizationRequestStart = ({ verificationUri, verificationUriComplete, code, codeExpiresIn, }) => {
80
+ didStartAuthFlow = true;
81
+ if (useDeviceCode) {
82
+ console.log(chalk_1.default.yellow(`
83
+ To sign in, use a web browser to open the page ${verificationUri} and enter the code ${code} to authenticate.
84
+ `));
85
+ }
86
+ else {
87
+ (0, open_1.default)(verificationUriComplete);
88
+ console.log(chalk_1.default.yellow(`
89
+ A web browser has been opened at ${verificationUri}.
90
+ Please continue the login in the web browser.
91
+ If no web browser is available or if the web browser fails to open, use device code flow with "phy login --use-device-code".
92
+ `));
93
+ }
94
+ console.log('Code:', code);
95
+ showCountdown(codeExpiresIn);
96
+ };
97
+ try {
98
+ const authService = new device_grant_auth_service_1.default();
99
+ await authService.authenticate({
100
+ onDeviceAuthorizationRequestStart: handleDeviceAuthorizationRequestStart,
101
+ });
102
+ clearLoginSession();
103
+ console.log(chalk_1.default.green('\nSuccessfully authenticated. You can now use the CLI.'));
104
+ }
105
+ catch (error) {
106
+ clearLoginSession();
107
+ console.log(chalk_1.default.red('\nLogin failed.', error.message));
108
+ }
109
+ };
110
+ exports.default = login;
111
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chalk_1 = __importDefault(require("chalk"));
7
+ const device_grant_auth_service_1 = __importDefault(require("../../services/auth/device-grant-auth.service"));
8
+ const logout = async () => {
9
+ try {
10
+ const authService = new device_grant_auth_service_1.default();
11
+ await authService.logout();
12
+ console.log(chalk_1.default.green('Successfully logged out.'));
13
+ }
14
+ catch (error) {
15
+ console.log(chalk_1.default.red('Error during logout.', error.message));
16
+ }
17
+ };
18
+ exports.default = logout;
19
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,8GAAwE;AAExE,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,mCAAW,EAAE,CAAC;QACtC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initializeDescriptorProject = void 0;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const templates_1 = require("../../utils/templates");
12
+ const utils_1 = require("../../utils");
13
+ /**
14
+ * Validates if a name follows descriptor naming rules
15
+ * @param name Name to validate
16
+ * @returns An object with isValid flag and error message
17
+ */
18
+ const validateDescriptorName = (name) => {
19
+ // Trim and convert to lowercase
20
+ const trimmedName = name.trim().toLowerCase();
21
+ // Check length
22
+ if (trimmedName.length < 3) {
23
+ return { isValid: false, message: 'Name must be at least 3 characters' };
24
+ }
25
+ if (trimmedName.length > 100) {
26
+ return { isValid: false, message: 'Name cannot exceed 100 characters' };
27
+ }
28
+ // Check format with regex (kebab-case: lowercase letters, numbers, dashes)
29
+ // Must start with a letter and cannot end with a dash
30
+ if (!/^[a-z][a-z0-9-]*[a-z0-9]$/.test(trimmedName)) {
31
+ return {
32
+ isValid: false,
33
+ message: 'Name must be in kebab-case format (lowercase letters, numbers, and dashes only). Must start with a letter and cannot end with a dash.',
34
+ };
35
+ }
36
+ return { isValid: true, message: '' };
37
+ };
38
+ /**
39
+ * Initialize a new descriptor project by cloning the template repository
40
+ * @param projectName The kebab-case name of the project
41
+ * @param displayName The friendly display name for the descriptor
42
+ * @param projectDirectory The directory to create the project in
43
+ * @returns Details about the created project
44
+ */
45
+ const initializeDescriptorProject = async (projectName, displayName, projectDirectory) => {
46
+ // Validate descriptor name
47
+ const validation = validateDescriptorName(projectName);
48
+ if (!validation.isValid) {
49
+ throw new Error(`Invalid descriptor name: ${validation.message}`);
50
+ }
51
+ console.log(chalk_1.default.gray(`Creating a new twin descriptor in ${projectDirectory}`));
52
+ // Clone the template repository
53
+ await (0, templates_1.cloneRepo)({
54
+ destinationPath: projectDirectory,
55
+ repo: 'https://github.com/phystack/template-twin-descriptor.git',
56
+ projectName, // Kebab case name
57
+ displayName, // Friendly display name
58
+ });
59
+ // Return the project details
60
+ return {
61
+ projectDirectory,
62
+ projectName,
63
+ };
64
+ };
65
+ exports.initializeDescriptorProject = initializeDescriptorProject;
66
+ /**
67
+ * Command handler for creating a new descriptor
68
+ * @param projectName Optional project name provided via command line
69
+ * @param options Command options
70
+ */
71
+ const create = async (projectName, options = {}) => {
72
+ let safeProjectName = projectName ? (0, utils_1.kebabCase)(projectName) : '';
73
+ let displayName = projectName || '';
74
+ try {
75
+ // If no project name provided, prompt for it
76
+ while (!safeProjectName || safeProjectName.trim() === '') {
77
+ const { name } = await inquirer_1.default.prompt([
78
+ {
79
+ name: 'name',
80
+ type: 'input',
81
+ message: 'Enter name for your descriptor:',
82
+ validate: (input) => {
83
+ if (!input.trim()) {
84
+ return 'Descriptor name cannot be empty';
85
+ }
86
+ return true;
87
+ },
88
+ },
89
+ ]);
90
+ safeProjectName = (0, utils_1.kebabCase)(name);
91
+ displayName = name;
92
+ }
93
+ console.log(chalk_1.default.gray(`Creating descriptor with name: ${chalk_1.default.blue(safeProjectName)}`));
94
+ // Check if directory already exists
95
+ const projectDirectory = path_1.default.join(process.cwd(), safeProjectName.toLowerCase());
96
+ if (fs_extra_1.default.existsSync(projectDirectory)) {
97
+ console.error(chalk_1.default.red(`Directory ${chalk_1.default.bold(projectDirectory)} already exists.`));
98
+ console.error(chalk_1.default.red(`Please choose a different name or delete the existing directory.`));
99
+ return;
100
+ }
101
+ // Initialize the project
102
+ await (0, exports.initializeDescriptorProject)(safeProjectName, displayName, projectDirectory);
103
+ // Install dependencies and build
104
+ console.log(chalk_1.default.gray('Installing dependencies and building project. This may take a while...'));
105
+ await (0, templates_1.installRepo)({
106
+ destinationPath: projectDirectory,
107
+ projectName: safeProjectName,
108
+ displayName,
109
+ });
110
+ // Success message with next steps
111
+ console.log(chalk_1.default.green(`\n✓ Twin descriptor project created successfully at ${projectDirectory}`));
112
+ console.log(chalk_1.default.dim('\nNext steps:'));
113
+ console.log(chalk_1.default.dim(`1. cd ${safeProjectName}`));
114
+ console.log(chalk_1.default.dim(`2. Edit the descriptor schema in schema.json`));
115
+ console.log(chalk_1.default.dim(`3. Run 'phy descriptor publish' to publish your descriptor`));
116
+ }
117
+ catch (err) {
118
+ console.error(chalk_1.default.red(`❗️There was an error creating the descriptor:`));
119
+ if (err.response) {
120
+ // Handle API error responses
121
+ console.error(chalk_1.default.red(`Status: ${err.response.status}`));
122
+ console.error(chalk_1.default.red(`Message: ${err.response.data?.message || err.message}`));
123
+ }
124
+ else {
125
+ // Handle other types of errors
126
+ console.error(chalk_1.default.red(err.message));
127
+ }
128
+ // Clean up any partially created files/directories if needed
129
+ try {
130
+ if (safeProjectName &&
131
+ fs_extra_1.default.existsSync(path_1.default.join(process.cwd(), safeProjectName.toLowerCase()))) {
132
+ console.log(chalk_1.default.yellow(`Cleaning up directory: ${safeProjectName.toLowerCase()}`));
133
+ await fs_extra_1.default.remove(path_1.default.join(process.cwd(), safeProjectName.toLowerCase()));
134
+ }
135
+ }
136
+ catch (cleanupErr) {
137
+ console.error(chalk_1.default.red(`Failed to clean up: ${cleanupErr.message}`));
138
+ }
139
+ process.exit(1);
140
+ }
141
+ };
142
+ exports.default = create;
143
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/descriptor/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const commander_1 = __importDefault(require("commander"));
7
+ const utils_1 = require("../../utils");
8
+ const create_1 = __importDefault(require("./create"));
9
+ const publish_1 = __importDefault(require("./publish"));
10
+ const show_1 = __importDefault(require("./show"));
11
+ // Stub function for the "list" command
12
+ async function list(searchString, options) {
13
+ console.log(`Listing descriptors${searchString ? ` matching '${searchString}'` : ''}`);
14
+ // Implementation to be added later
15
+ }
16
+ const descriptor = commander_1.default.command('descriptor').description('Descriptor management');
17
+ descriptor
18
+ .command('create [<projectName>]')
19
+ .description('Create a new descriptor project')
20
+ .action((0, utils_1.handleError)(create_1.default));
21
+ descriptor
22
+ .command('publish [<descriptorName>]')
23
+ .description('Publish a descriptor - creates new descriptor and publishes first version or publishes a new version of an existing descriptor based on provided name')
24
+ .option('--packageJsonPath <path>', 'Path to the package.json file to use (defaults to ./package.json)')
25
+ .option('--buildDir <path>', 'Path to the build directory containing schema.json and meta-schema.json (defaults to ./build/{version})')
26
+ .action((0, utils_1.handleError)(publish_1.default));
27
+ descriptor
28
+ .command('list [<search-string>]')
29
+ .description('List descriptors in currently selected tenant')
30
+ .action((0, utils_1.handleError)(list));
31
+ descriptor
32
+ .command('show <descriptorName>')
33
+ .description('Show details of a descriptor')
34
+ .action((0, utils_1.handleError)(show_1.default));
35
+ exports.default = descriptor;
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/descriptor/index.ts"],"names":[],"mappings":";;;;;AAAA,0DAAgC;AAChC,uCAA0C;AAC1C,sDAA8B;AAC9B,wDAAgC;AAChC,kDAA0B;AAE1B,uCAAuC;AACvC,KAAK,UAAU,IAAI,CAAC,YAAoB,EAAE,OAAY;IACpD,OAAO,CAAC,GAAG,CAAC,sBAAsB,YAAY,CAAC,CAAC,CAAC,cAAc,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvF,mCAAmC;AACrC,CAAC;AAED,MAAM,UAAU,GAAG,mBAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAEtF,UAAU;KACP,OAAO,CAAC,wBAAwB,CAAC;KACjC,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,IAAA,mBAAW,EAAC,gBAAM,CAAC,CAAC,CAAC;AAE/B,UAAU;KACP,OAAO,CAAC,4BAA4B,CAAC;KACrC,WAAW,CACV,uJAAuJ,CACxJ;KACA,MAAM,CACL,0BAA0B,EAC1B,mEAAmE,CACpE;KACA,MAAM,CACL,mBAAmB,EACnB,yGAAyG,CAC1G;KACA,MAAM,CAAC,IAAA,mBAAW,EAAC,iBAAO,CAAC,CAAC,CAAC;AAEhC,UAAU;KACP,OAAO,CAAC,wBAAwB,CAAC;KACjC,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAC,CAAC;AAE7B,UAAU;KACP,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,IAAA,mBAAW,EAAC,cAAI,CAAC,CAAC,CAAC;AAE7B,kBAAe,UAAU,CAAC"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const axios_1 = __importDefault(require("axios"));
10
+ const tenant_storage_1 = require("../../utils/tenant-storage");
11
+ const org_selector_1 = require("../../utils/org-selector");
12
+ const phyhub_1 = require("../../services/phyhub");
13
+ /**
14
+ * Command handler for publishing a descriptor
15
+ * @param descriptorName Optional descriptor name (uses package.json name if not provided)
16
+ * @param options Command options
17
+ */
18
+ const publish = async (descriptorName, options = {}) => {
19
+ // Determine package.json path
20
+ const packageJsonPath = options.packageJsonPath
21
+ ? path_1.default.resolve(options.packageJsonPath)
22
+ : path_1.default.join(process.cwd(), 'package.json');
23
+ // Check if package.json exists
24
+ if (!fs_1.default.existsSync(packageJsonPath)) {
25
+ throw new Error(`${packageJsonPath} not found. Please provide a valid package.json path or run in a descriptor project directory`);
26
+ }
27
+ // Read package.json to get descriptor information
28
+ const pkgData = await fs_1.default.promises.readFile(packageJsonPath, 'utf8');
29
+ const pkg = JSON.parse(pkgData);
30
+ // Validate mandatory fields in package.json
31
+ const missingFields = [];
32
+ if (!pkg.version)
33
+ missingFields.push('version');
34
+ if (missingFields.length > 0) {
35
+ throw new Error(`Missing mandatory fields in package.json: ${missingFields.join(', ')}. Please add these fields before publishing.`);
36
+ }
37
+ // Validate version format (semver)
38
+ const versionRegex = /^\d+\.\d+\.\d+$/;
39
+ if (!versionRegex.test(pkg.version)) {
40
+ throw new Error(`Invalid version format in package.json: ${pkg.version}. Please use semantic versioning (e.g., 1.0.0).`);
41
+ }
42
+ // Create typed version string
43
+ const { version } = pkg;
44
+ // Use name from package.json if descriptorName wasn't provided
45
+ const finalDescriptorName = descriptorName || pkg.name;
46
+ // Determine build directory path
47
+ // If provided as option, use that path, otherwise use /build/{version} relative to package.json directory
48
+ const packageJsonDir = path_1.default.dirname(packageJsonPath);
49
+ const buildDirPath = options.buildDir
50
+ ? path_1.default.resolve(options.buildDir)
51
+ : path_1.default.join(packageJsonDir, 'build', version);
52
+ // Check if build directory exists
53
+ if (!fs_1.default.existsSync(buildDirPath) || !fs_1.default.statSync(buildDirPath).isDirectory()) {
54
+ throw new Error(`Build directory not found at ${buildDirPath}. Please build the descriptor first or specify a valid build directory.`);
55
+ }
56
+ // Check for schema.json
57
+ const schemaPath = path_1.default.join(buildDirPath, 'schema.json');
58
+ if (!fs_1.default.existsSync(schemaPath) || !fs_1.default.statSync(schemaPath).isFile()) {
59
+ throw new Error(`schema.json not found in build directory. Please build the descriptor first.`);
60
+ }
61
+ // Check for meta-schema.json
62
+ const metaSchemaPath = path_1.default.join(buildDirPath, 'meta-schema.json');
63
+ if (!fs_1.default.existsSync(metaSchemaPath) || !fs_1.default.statSync(metaSchemaPath).isFile()) {
64
+ throw new Error(`meta-schema.json not found in build directory. Please build the descriptor first.`);
65
+ }
66
+ // Check that files are not empty
67
+ const schemaStats = fs_1.default.statSync(schemaPath);
68
+ if (schemaStats.size === 0) {
69
+ throw new Error(`schema.json is empty. Please ensure the descriptor build is valid.`);
70
+ }
71
+ const metaSchemaStats = fs_1.default.statSync(metaSchemaPath);
72
+ if (metaSchemaStats.size === 0) {
73
+ throw new Error(`meta-schema.json is empty. Please ensure the descriptor build is valid.`);
74
+ }
75
+ // Load schema and meta-schema contents
76
+ let schema;
77
+ let metaSchema;
78
+ try {
79
+ const schemaContent = await fs_1.default.promises.readFile(schemaPath, 'utf8');
80
+ schema = JSON.parse(schemaContent);
81
+ const metaSchemaContent = await fs_1.default.promises.readFile(metaSchemaPath, 'utf8');
82
+ metaSchema = JSON.parse(metaSchemaContent);
83
+ }
84
+ catch (error) {
85
+ throw new Error(`Failed to parse schema files: ${error.message}`);
86
+ }
87
+ console.log(chalk_1.default.dim(`Publishing descriptor: ${chalk_1.default.blue(finalDescriptorName)}`));
88
+ console.log(chalk_1.default.dim(`Using schema and meta-schema from: ${chalk_1.default.blue(buildDirPath)}`));
89
+ console.log(chalk_1.default.dim(`Version: ${chalk_1.default.blue(version)}`));
90
+ // Make sure we have a tenant selected
91
+ let tenant;
92
+ if (await (0, tenant_storage_1.hasTenant)()) {
93
+ tenant = await (0, tenant_storage_1.getTenant)();
94
+ console.log(chalk_1.default.dim(`Using saved tenant: ${tenant.displayName}`));
95
+ }
96
+ else {
97
+ // Prompt user to select an organization if no saved tenant
98
+ tenant = await (0, org_selector_1.selectOrganization)('Select a tenant to publish the descriptor to:');
99
+ }
100
+ if (!tenant) {
101
+ throw new Error('No tenant selected. A tenant is required to publish a descriptor.');
102
+ }
103
+ // Check if the descriptor already exists
104
+ console.log(chalk_1.default.dim(`Checking if descriptor ${chalk_1.default.blue(finalDescriptorName)} exists...`));
105
+ try {
106
+ const existingDescriptor = await (0, phyhub_1.phyhubApi)().getTwinDescriptorByName(tenant.phyhubUrl, tenant.id, finalDescriptorName);
107
+ if (existingDescriptor) {
108
+ console.log(chalk_1.default.dim(`Descriptor ${chalk_1.default.blue(finalDescriptorName)} already exists. Publishing a new version...`));
109
+ try {
110
+ // Publish a new version of the existing descriptor
111
+ await (0, phyhub_1.phyhubApi)().createTwinDescriptorVersion(tenant.phyhubUrl, {
112
+ descriptorName: finalDescriptorName,
113
+ version,
114
+ schema,
115
+ metaSchema,
116
+ releaseNotes: '',
117
+ tenantId: tenant.id,
118
+ });
119
+ console.log(chalk_1.default.green(`Successfully published version ${chalk_1.default.blue(version)} of descriptor ${chalk_1.default.blue(finalDescriptorName)}`));
120
+ }
121
+ catch (versionError) {
122
+ console.error(chalk_1.default.red(`Failed to publish new version: ${versionError.message}`));
123
+ throw versionError;
124
+ }
125
+ }
126
+ }
127
+ catch (error) {
128
+ // Only proceed with creation if it's a 404 Not Found error
129
+ if (axios_1.default.isAxiosError(error) && error.response?.status === 404) {
130
+ console.log(chalk_1.default.dim(`Descriptor ${chalk_1.default.blue(finalDescriptorName)} does not exist. Creating a new descriptor...`));
131
+ try {
132
+ // Create the new descriptor
133
+ const displayName = pkg.description || finalDescriptorName; // Use package.json description or fall back to name
134
+ await (0, phyhub_1.phyhubApi)().createTwinDescriptor(tenant.phyhubUrl, {
135
+ name: finalDescriptorName,
136
+ displayName,
137
+ description: '', // Empty description as requested
138
+ tenantId: tenant.id,
139
+ descriptorVersion: {
140
+ version,
141
+ schema,
142
+ metaSchema,
143
+ releaseNotes: '',
144
+ },
145
+ });
146
+ console.log(chalk_1.default.green(`Successfully created descriptor ${chalk_1.default.blue(finalDescriptorName)} with version ${chalk_1.default.blue(version)}`));
147
+ }
148
+ catch (createError) {
149
+ console.error(chalk_1.default.red(`Failed to create descriptor: ${createError.message}`));
150
+ throw createError;
151
+ }
152
+ }
153
+ else {
154
+ // For any other error, throw it to halt the process
155
+ console.error(chalk_1.default.red(`Unexpected error checking descriptor existence: ${error.message}`));
156
+ throw error;
157
+ }
158
+ }
159
+ // The implementation will continue in next steps as requested
160
+ console.log(chalk_1.default.yellow('Note: Implementation will continue in next steps'));
161
+ };
162
+ exports.default = publish;
163
+ //# sourceMappingURL=publish.js.map