heroku 9.0.0-alpha.1 → 9.0.0-alpha.3

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 (522) hide show
  1. package/README.md +6 -11
  2. package/lib/commands/access/add.d.ts +14 -0
  3. package/lib/commands/access/add.js +55 -0
  4. package/lib/commands/access/index.d.ts +11 -0
  5. package/lib/commands/access/index.js +86 -0
  6. package/lib/commands/access/remove.d.ts +12 -0
  7. package/lib/commands/access/remove.js +25 -0
  8. package/lib/commands/access/update.d.ts +14 -0
  9. package/lib/commands/access/update.js +39 -0
  10. package/lib/commands/addons/attach.d.ts +16 -0
  11. package/lib/commands/addons/attach.js +51 -0
  12. package/lib/commands/addons/create.d.ts +19 -0
  13. package/lib/commands/addons/create.js +84 -0
  14. package/lib/commands/addons/destroy.d.ts +19 -0
  15. package/lib/commands/addons/destroy.js +61 -0
  16. package/lib/commands/addons/detach.d.ts +13 -0
  17. package/lib/commands/addons/detach.js +31 -0
  18. package/lib/commands/addons/docs.d.ts +14 -0
  19. package/lib/commands/addons/docs.js +36 -0
  20. package/lib/commands/addons/index.d.ts +16 -0
  21. package/lib/commands/addons/index.js +246 -0
  22. package/lib/commands/addons/info.d.ts +14 -0
  23. package/lib/commands/addons/info.js +44 -0
  24. package/lib/commands/addons/open.d.ts +75 -0
  25. package/lib/commands/addons/open.js +87 -0
  26. package/lib/commands/addons/plans.d.ts +12 -0
  27. package/lib/commands/addons/plans.js +47 -0
  28. package/lib/commands/addons/rename.d.ts +10 -0
  29. package/lib/commands/addons/rename.js +20 -0
  30. package/lib/commands/addons/services.d.ts +9 -0
  31. package/lib/commands/addons/services.js +34 -0
  32. package/lib/commands/addons/upgrade.d.ts +28 -0
  33. package/lib/commands/addons/upgrade.js +145 -0
  34. package/lib/commands/addons/wait.d.ts +14 -0
  35. package/lib/commands/addons/wait.js +70 -0
  36. package/lib/commands/apps/create.d.ts +2 -2
  37. package/lib/commands/apps/create.js +13 -6
  38. package/lib/commands/apps/destroy.d.ts +2 -1
  39. package/lib/commands/apps/destroy.js +4 -3
  40. package/lib/commands/apps/errors.d.ts +1 -0
  41. package/lib/commands/apps/errors.js +1 -0
  42. package/lib/commands/apps/favorites/add.d.ts +1 -0
  43. package/lib/commands/apps/favorites/add.js +1 -0
  44. package/lib/commands/apps/favorites/remove.d.ts +1 -0
  45. package/lib/commands/apps/favorites/remove.js +1 -0
  46. package/lib/commands/apps/index.d.ts +1 -1
  47. package/lib/commands/apps/index.js +1 -1
  48. package/lib/commands/apps/info.d.ts +2 -1
  49. package/lib/commands/apps/info.js +3 -4
  50. package/lib/commands/apps/join.d.ts +11 -0
  51. package/lib/commands/apps/join.js +25 -0
  52. package/lib/commands/apps/leave.d.ts +12 -0
  53. package/lib/commands/apps/leave.js +25 -0
  54. package/lib/commands/apps/lock.d.ts +11 -0
  55. package/lib/commands/apps/lock.js +30 -0
  56. package/lib/commands/apps/open.d.ts +2 -1
  57. package/lib/commands/apps/open.js +2 -1
  58. package/lib/commands/apps/rename.d.ts +2 -1
  59. package/lib/commands/apps/rename.js +2 -1
  60. package/lib/commands/apps/stacks/index.d.ts +2 -1
  61. package/lib/commands/apps/stacks/index.js +2 -1
  62. package/lib/commands/apps/stacks/set.d.ts +1 -1
  63. package/lib/commands/apps/stacks/set.js +1 -1
  64. package/lib/commands/apps/transfer.d.ts +17 -0
  65. package/lib/commands/apps/transfer.js +91 -0
  66. package/lib/commands/apps/unlock.d.ts +11 -0
  67. package/lib/commands/apps/unlock.js +30 -0
  68. package/lib/commands/auth/token.js +2 -1
  69. package/lib/commands/authorizations/create.js +5 -1
  70. package/lib/commands/authorizations/info.js +5 -1
  71. package/lib/commands/authorizations/revoke.js +5 -1
  72. package/lib/commands/authorizations/rotate.js +5 -1
  73. package/lib/commands/authorizations/update.js +5 -1
  74. package/lib/commands/autocomplete/doctor.js +2 -2
  75. package/lib/commands/autocomplete/options.js +2 -2
  76. package/lib/commands/certs/add.d.ts +16 -0
  77. package/lib/commands/certs/add.js +98 -0
  78. package/lib/commands/certs/auto/disable.d.ts +11 -0
  79. package/lib/commands/certs/auto/disable.js +34 -0
  80. package/lib/commands/certs/auto/enable.d.ts +11 -0
  81. package/lib/commands/certs/auto/enable.js +51 -0
  82. package/lib/commands/certs/auto/index.d.ts +12 -0
  83. package/lib/commands/certs/auto/index.js +94 -0
  84. package/lib/commands/certs/auto/refresh.d.ts +10 -0
  85. package/lib/commands/certs/auto/refresh.js +19 -0
  86. package/lib/commands/certs/generate.d.ts +26 -0
  87. package/lib/commands/certs/generate.js +111 -0
  88. package/lib/commands/certs/index.d.ts +10 -0
  89. package/lib/commands/certs/index.js +26 -0
  90. package/lib/commands/certs/info.d.ts +13 -0
  91. package/lib/commands/certs/info.js +43 -0
  92. package/lib/commands/certs/remove.d.ts +13 -0
  93. package/lib/commands/certs/remove.js +32 -0
  94. package/lib/commands/certs/update.d.ts +18 -0
  95. package/lib/commands/certs/update.js +54 -0
  96. package/lib/commands/ci/config/get.d.ts +1 -0
  97. package/lib/commands/ci/config/get.js +1 -0
  98. package/lib/commands/ci/config/set.d.ts +1 -0
  99. package/lib/commands/ci/config/set.js +1 -0
  100. package/lib/commands/ci/config/unset.d.ts +1 -0
  101. package/lib/commands/ci/config/unset.js +1 -0
  102. package/lib/commands/ci/index.d.ts +1 -0
  103. package/lib/commands/ci/index.js +1 -0
  104. package/lib/commands/ci/info.d.ts +1 -0
  105. package/lib/commands/ci/info.js +1 -0
  106. package/lib/commands/ci/last.d.ts +1 -0
  107. package/lib/commands/ci/last.js +1 -0
  108. package/lib/commands/ci/open.d.ts +1 -0
  109. package/lib/commands/ci/open.js +1 -0
  110. package/lib/commands/ci/rerun.d.ts +1 -0
  111. package/lib/commands/ci/rerun.js +1 -0
  112. package/lib/commands/config/set.d.ts +2 -1
  113. package/lib/commands/config/set.js +2 -1
  114. package/lib/commands/container/index.d.ts +6 -0
  115. package/lib/commands/container/index.js +13 -0
  116. package/lib/commands/container/login.d.ts +9 -0
  117. package/lib/commands/container/login.js +57 -0
  118. package/lib/commands/container/logout.d.ts +9 -0
  119. package/lib/commands/container/logout.js +37 -0
  120. package/lib/commands/container/pull.d.ts +14 -0
  121. package/lib/commands/container/pull.js +40 -0
  122. package/lib/commands/container/push.d.ts +16 -0
  123. package/lib/commands/container/push.js +101 -0
  124. package/lib/commands/container/release.d.ts +14 -0
  125. package/lib/commands/container/release.js +89 -0
  126. package/lib/commands/container/rm.d.ts +13 -0
  127. package/lib/commands/container/rm.js +36 -0
  128. package/lib/commands/container/run.d.ts +15 -0
  129. package/lib/commands/container/run.js +63 -0
  130. package/lib/commands/dashboard.d.ts +7 -0
  131. package/lib/commands/dashboard.js +164 -0
  132. package/lib/commands/domains/index.d.ts +2 -2
  133. package/lib/commands/drains/add.d.ts +1 -0
  134. package/lib/commands/drains/add.js +1 -0
  135. package/lib/commands/drains/index.d.ts +1 -0
  136. package/lib/commands/drains/index.js +1 -0
  137. package/lib/commands/drains/remove.d.ts +1 -0
  138. package/lib/commands/drains/remove.js +1 -0
  139. package/lib/commands/features/disable.d.ts +12 -0
  140. package/lib/commands/features/disable.js +30 -0
  141. package/lib/commands/features/enable.d.ts +12 -0
  142. package/lib/commands/features/enable.js +29 -0
  143. package/lib/commands/features/index.d.ts +10 -0
  144. package/lib/commands/features/index.js +37 -0
  145. package/lib/commands/features/info.d.ts +13 -0
  146. package/lib/commands/features/info.js +33 -0
  147. package/lib/commands/keys/add.d.ts +14 -0
  148. package/lib/commands/keys/add.js +101 -0
  149. package/lib/commands/keys/clear.d.ts +5 -0
  150. package/lib/commands/keys/clear.js +17 -0
  151. package/lib/commands/keys/index.d.ts +9 -0
  152. package/lib/commands/keys/index.js +36 -0
  153. package/lib/commands/keys/remove.d.ts +9 -0
  154. package/lib/commands/keys/remove.js +29 -0
  155. package/lib/commands/labs/enable.d.ts +13 -0
  156. package/lib/commands/labs/enable.js +47 -0
  157. package/lib/commands/labs/index.d.ts +11 -0
  158. package/lib/commands/labs/index.js +71 -0
  159. package/lib/commands/labs/info.d.ts +14 -0
  160. package/lib/commands/labs/info.js +49 -0
  161. package/lib/commands/local/index.d.ts +1 -1
  162. package/lib/commands/local/index.js +8 -3
  163. package/lib/commands/local/run.d.ts +1 -1
  164. package/lib/commands/local/run.js +8 -3
  165. package/lib/commands/maintenance/index.d.ts +10 -0
  166. package/lib/commands/maintenance/index.js +19 -0
  167. package/lib/commands/maintenance/off.d.ts +10 -0
  168. package/lib/commands/maintenance/off.js +20 -0
  169. package/lib/commands/maintenance/on.d.ts +10 -0
  170. package/lib/commands/maintenance/on.js +20 -0
  171. package/lib/commands/members/add.d.ts +13 -0
  172. package/lib/commands/members/add.js +33 -0
  173. package/lib/commands/members/index.d.ts +12 -0
  174. package/lib/commands/members/index.js +76 -0
  175. package/lib/commands/members/remove.d.ts +10 -0
  176. package/lib/commands/members/remove.js +58 -0
  177. package/lib/commands/members/set.d.ts +11 -0
  178. package/lib/commands/members/set.js +21 -0
  179. package/lib/commands/notifications/index.d.ts +13 -0
  180. package/lib/commands/notifications/index.js +62 -0
  181. package/lib/commands/orgs/index.d.ts +11 -0
  182. package/lib/commands/orgs/index.js +27 -0
  183. package/lib/commands/orgs/open.d.ts +10 -0
  184. package/lib/commands/orgs/open.js +24 -0
  185. package/lib/commands/pg/backups/cancel.d.ts +15 -0
  186. package/lib/commands/pg/backups/cancel.js +49 -0
  187. package/lib/commands/pg/backups/capture.d.ts +15 -0
  188. package/lib/commands/pg/backups/capture.js +65 -0
  189. package/lib/commands/pg/backups/delete.d.ts +15 -0
  190. package/lib/commands/pg/backups/delete.js +38 -0
  191. package/lib/commands/pg/backups/download.d.ts +14 -0
  192. package/lib/commands/pg/backups/download.js +58 -0
  193. package/lib/commands/pg/backups/index.d.ts +20 -0
  194. package/lib/commands/pg/backups/index.js +129 -0
  195. package/lib/commands/pg/backups/info.d.ts +17 -0
  196. package/lib/commands/pg/backups/info.js +92 -0
  197. package/lib/commands/pg/backups/restore.d.ts +19 -0
  198. package/lib/commands/pg/backups/restore.js +107 -0
  199. package/lib/commands/pg/backups/schedule.d.ts +21 -0
  200. package/lib/commands/pg/backups/schedule.js +82 -0
  201. package/lib/commands/pg/backups/schedules.d.ts +10 -0
  202. package/lib/commands/pg/backups/schedules.js +31 -0
  203. package/lib/commands/pg/backups/unschedule.d.ts +13 -0
  204. package/lib/commands/pg/backups/unschedule.js +44 -0
  205. package/lib/commands/pg/backups/url.d.ts +13 -0
  206. package/lib/commands/pg/backups/url.js +41 -0
  207. package/lib/commands/pg/bloat.d.ts +13 -0
  208. package/lib/commands/pg/bloat.js +87 -0
  209. package/lib/commands/pg/blocking.d.ts +13 -0
  210. package/lib/commands/pg/blocking.js +42 -0
  211. package/lib/commands/pg/connection-pooling/attach.d.ts +15 -0
  212. package/lib/commands/pg/connection-pooling/attach.js +41 -0
  213. package/lib/commands/pg/copy.d.ts +18 -0
  214. package/lib/commands/pg/copy.js +86 -0
  215. package/lib/commands/pg/credentials/create.d.ts +14 -0
  216. package/lib/commands/pg/credentials/create.js +40 -0
  217. package/lib/commands/pg/credentials/destroy.d.ts +16 -0
  218. package/lib/commands/pg/credentials/destroy.js +48 -0
  219. package/lib/commands/pg/credentials/repair-default.d.ts +15 -0
  220. package/lib/commands/pg/credentials/repair-default.js +39 -0
  221. package/lib/commands/pg/credentials/rotate.d.ts +16 -0
  222. package/lib/commands/pg/credentials/rotate.js +82 -0
  223. package/lib/commands/pg/credentials/url.d.ts +14 -0
  224. package/lib/commands/pg/credentials/url.js +64 -0
  225. package/lib/commands/pg/credentials.d.ts +16 -0
  226. package/lib/commands/pg/credentials.js +61 -0
  227. package/lib/commands/pg/diagnose.d.ts +18 -0
  228. package/lib/commands/pg/diagnose.js +109 -0
  229. package/lib/commands/pg/info.d.ts +14 -0
  230. package/lib/commands/pg/info.js +92 -0
  231. package/lib/commands/pg/kill.d.ts +15 -0
  232. package/lib/commands/pg/kill.js +32 -0
  233. package/lib/commands/pg/killall.d.ts +13 -0
  234. package/lib/commands/pg/killall.js +26 -0
  235. package/lib/commands/pg/links/create.d.ts +15 -0
  236. package/lib/commands/pg/links/create.js +58 -0
  237. package/lib/commands/pg/links/destroy.d.ts +16 -0
  238. package/lib/commands/pg/links/destroy.js +42 -0
  239. package/lib/commands/pg/links/index.d.ts +13 -0
  240. package/lib/commands/pg/links/index.js +59 -0
  241. package/lib/commands/pg/locks.d.ts +15 -0
  242. package/lib/commands/pg/locks.js +53 -0
  243. package/lib/commands/pg/maintenance/index.d.ts +13 -0
  244. package/lib/commands/pg/maintenance/index.js +29 -0
  245. package/lib/commands/pg/maintenance/run.d.ts +14 -0
  246. package/lib/commands/pg/maintenance/run.js +37 -0
  247. package/lib/commands/pg/maintenance/window.d.ts +15 -0
  248. package/lib/commands/pg/maintenance/window.js +41 -0
  249. package/lib/commands/pg/outliers.d.ts +19 -0
  250. package/lib/commands/pg/outliers.js +97 -0
  251. package/lib/commands/pg/promote.d.ts +14 -0
  252. package/lib/commands/pg/promote.js +169 -0
  253. package/lib/commands/pg/ps.d.ts +14 -0
  254. package/lib/commands/pg/ps.js +52 -0
  255. package/lib/commands/pg/psql.d.ts +16 -0
  256. package/lib/commands/pg/psql.js +49 -0
  257. package/lib/commands/pg/pull.d.ts +18 -0
  258. package/lib/commands/pg/pull.js +87 -0
  259. package/lib/commands/pg/push.d.ts +18 -0
  260. package/lib/commands/pg/push.js +84 -0
  261. package/lib/commands/pg/reset.d.ts +15 -0
  262. package/lib/commands/pg/reset.js +44 -0
  263. package/lib/commands/pg/settings/auto-explain/log-analyze.d.ts +13 -0
  264. package/lib/commands/pg/settings/auto-explain/log-analyze.js +32 -0
  265. package/lib/commands/pg/settings/auto-explain/log-buffers.d.ts +13 -0
  266. package/lib/commands/pg/settings/auto-explain/log-buffers.js +30 -0
  267. package/lib/commands/pg/settings/auto-explain/log-min-duration.d.ts +16 -0
  268. package/lib/commands/pg/settings/auto-explain/log-min-duration.js +33 -0
  269. package/lib/commands/pg/settings/auto-explain/log-nested-statements.d.ts +12 -0
  270. package/lib/commands/pg/settings/auto-explain/log-nested-statements.js +25 -0
  271. package/lib/commands/pg/settings/auto-explain/log-triggers.d.ts +13 -0
  272. package/lib/commands/pg/settings/auto-explain/log-triggers.js +30 -0
  273. package/lib/commands/pg/settings/auto-explain/log-verbose.d.ts +17 -0
  274. package/lib/commands/pg/settings/auto-explain/log-verbose.js +33 -0
  275. package/lib/commands/pg/settings/auto-explain.d.ts +18 -0
  276. package/lib/commands/pg/settings/auto-explain.js +38 -0
  277. package/lib/commands/pg/settings/index.d.ts +13 -0
  278. package/lib/commands/pg/settings/index.js +34 -0
  279. package/lib/commands/pg/settings/log-connections.d.ts +17 -0
  280. package/lib/commands/pg/settings/log-connections.js +34 -0
  281. package/lib/commands/pg/settings/log-lock-waits.d.ts +13 -0
  282. package/lib/commands/pg/settings/log-lock-waits.js +31 -0
  283. package/lib/commands/pg/settings/log-min-duration-statement.d.ts +15 -0
  284. package/lib/commands/pg/settings/log-min-duration-statement.js +33 -0
  285. package/lib/commands/pg/settings/log-statement.d.ts +12 -0
  286. package/lib/commands/pg/settings/log-statement.js +30 -0
  287. package/lib/commands/pg/settings/track-functions.d.ts +12 -0
  288. package/lib/commands/pg/settings/track-functions.js +29 -0
  289. package/lib/commands/pg/unfollow.d.ts +14 -0
  290. package/lib/commands/pg/unfollow.js +40 -0
  291. package/lib/commands/pg/upgrade.d.ts +15 -0
  292. package/lib/commands/pg/upgrade.js +58 -0
  293. package/lib/commands/pg/vacuum-stats.d.ts +13 -0
  294. package/lib/commands/pg/vacuum-stats.js +65 -0
  295. package/lib/commands/pg/wait.d.ts +15 -0
  296. package/lib/commands/pg/wait.js +79 -0
  297. package/lib/commands/pipelines/connect.js +1 -1
  298. package/lib/commands/pipelines/diff.js +1 -1
  299. package/lib/commands/ps/index.d.ts +15 -0
  300. package/lib/commands/ps/index.js +195 -0
  301. package/lib/commands/ps/restart.d.ts +17 -0
  302. package/lib/commands/ps/restart.js +38 -0
  303. package/lib/commands/ps/scale.d.ts +13 -0
  304. package/lib/commands/ps/scale.js +108 -0
  305. package/lib/commands/ps/stop.d.ts +17 -0
  306. package/lib/commands/ps/stop.js +33 -0
  307. package/lib/commands/ps/type.d.ts +12 -0
  308. package/lib/commands/ps/type.js +163 -0
  309. package/lib/commands/redis/cli.d.ts +15 -0
  310. package/lib/commands/redis/cli.js +204 -0
  311. package/lib/commands/redis/credentials.d.ts +14 -0
  312. package/lib/commands/redis/credentials.js +32 -0
  313. package/lib/commands/redis/info.d.ts +15 -0
  314. package/lib/commands/redis/info.js +25 -0
  315. package/lib/commands/redis/keyspace-notifications.d.ts +14 -0
  316. package/lib/commands/redis/keyspace-notifications.js +47 -0
  317. package/lib/commands/redis/maintenance.d.ts +16 -0
  318. package/lib/commands/redis/maintenance.js +63 -0
  319. package/lib/commands/redis/maxmemory.d.ts +14 -0
  320. package/lib/commands/redis/maxmemory.js +40 -0
  321. package/lib/commands/redis/promote.d.ts +13 -0
  322. package/lib/commands/redis/promote.js +39 -0
  323. package/lib/commands/redis/stats-reset.d.ts +14 -0
  324. package/lib/commands/redis/stats-reset.js +36 -0
  325. package/lib/commands/redis/timeout.d.ts +14 -0
  326. package/lib/commands/redis/timeout.js +35 -0
  327. package/lib/commands/redis/upgrade.d.ts +15 -0
  328. package/lib/commands/redis/upgrade.js +37 -0
  329. package/lib/commands/redis/wait.d.ts +14 -0
  330. package/lib/commands/redis/wait.js +60 -0
  331. package/lib/commands/releases/index.d.ts +14 -0
  332. package/lib/commands/releases/index.js +124 -0
  333. package/lib/commands/releases/info.d.ts +15 -0
  334. package/lib/commands/releases/info.js +56 -0
  335. package/lib/commands/releases/output.d.ts +13 -0
  336. package/lib/commands/releases/output.js +37 -0
  337. package/lib/commands/releases/rollback.d.ts +14 -0
  338. package/lib/commands/releases/rollback.js +48 -0
  339. package/lib/commands/run/detached.d.ts +7 -8
  340. package/lib/commands/run/detached.js +16 -20
  341. package/lib/commands/run/index.d.ts +10 -11
  342. package/lib/commands/run/index.js +16 -17
  343. package/lib/commands/run/inside.d.ts +5 -7
  344. package/lib/commands/run/inside.js +10 -14
  345. package/lib/commands/spaces/create.d.ts +22 -0
  346. package/lib/commands/spaces/create.js +73 -0
  347. package/lib/commands/spaces/destroy.d.ts +14 -0
  348. package/lib/commands/spaces/destroy.js +49 -0
  349. package/lib/commands/spaces/drains/get.d.ts +12 -0
  350. package/lib/commands/spaces/drains/get.js +27 -0
  351. package/lib/commands/spaces/drains/set.d.ts +14 -0
  352. package/lib/commands/spaces/drains/set.js +29 -0
  353. package/lib/commands/spaces/hosts.d.ts +14 -0
  354. package/lib/commands/spaces/hosts.js +37 -0
  355. package/lib/commands/spaces/index.d.ts +16 -0
  356. package/lib/commands/spaces/index.js +55 -0
  357. package/lib/commands/spaces/info.d.ts +14 -0
  358. package/lib/commands/spaces/info.js +47 -0
  359. package/lib/commands/spaces/outbound-rules/add.d.ts +15 -0
  360. package/lib/commands/spaces/outbound-rules/add.js +81 -0
  361. package/lib/commands/spaces/outbound-rules/index.d.ts +15 -0
  362. package/lib/commands/spaces/outbound-rules/index.js +49 -0
  363. package/lib/commands/spaces/outbound-rules/remove.d.ts +17 -0
  364. package/lib/commands/spaces/outbound-rules/remove.js +53 -0
  365. package/lib/commands/spaces/peerings/accept.d.ts +15 -0
  366. package/lib/commands/spaces/peerings/accept.js +36 -0
  367. package/lib/commands/spaces/peerings/destroy.d.ts +15 -0
  368. package/lib/commands/spaces/peerings/destroy.js +45 -0
  369. package/lib/commands/spaces/peerings/index.d.ts +13 -0
  370. package/lib/commands/spaces/peerings/index.js +33 -0
  371. package/lib/commands/spaces/peerings/info.d.ts +15 -0
  372. package/lib/commands/spaces/peerings/info.js +59 -0
  373. package/lib/commands/spaces/ps.d.ts +15 -0
  374. package/lib/commands/spaces/ps.js +82 -0
  375. package/lib/commands/spaces/rename.d.ts +11 -0
  376. package/lib/commands/spaces/rename.js +26 -0
  377. package/lib/commands/spaces/topology.d.ts +32 -0
  378. package/lib/commands/spaces/topology.js +89 -0
  379. package/lib/commands/spaces/transfer.d.ts +11 -0
  380. package/lib/commands/spaces/transfer.js +35 -0
  381. package/lib/commands/spaces/trusted-ips/add.d.ts +16 -0
  382. package/lib/commands/spaces/trusted-ips/add.js +43 -0
  383. package/lib/commands/spaces/trusted-ips/index.d.ts +15 -0
  384. package/lib/commands/spaces/trusted-ips/index.js +52 -0
  385. package/lib/commands/spaces/trusted-ips/remove.d.ts +15 -0
  386. package/lib/commands/spaces/trusted-ips/remove.js +44 -0
  387. package/lib/commands/spaces/vpn/config.d.ts +14 -0
  388. package/lib/commands/spaces/vpn/config.js +54 -0
  389. package/lib/commands/spaces/vpn/connect.d.ts +15 -0
  390. package/lib/commands/spaces/vpn/connect.js +45 -0
  391. package/lib/commands/spaces/vpn/connections.d.ts +17 -0
  392. package/lib/commands/spaces/vpn/connections.js +57 -0
  393. package/lib/commands/spaces/vpn/destroy.d.ts +14 -0
  394. package/lib/commands/spaces/vpn/destroy.js +35 -0
  395. package/lib/commands/spaces/vpn/info.d.ts +16 -0
  396. package/lib/commands/spaces/vpn/info.js +82 -0
  397. package/lib/commands/spaces/vpn/update.d.ts +14 -0
  398. package/lib/commands/spaces/vpn/update.js +36 -0
  399. package/lib/commands/spaces/vpn/wait.d.ts +13 -0
  400. package/lib/commands/spaces/vpn/wait.js +53 -0
  401. package/lib/commands/spaces/wait.d.ts +17 -0
  402. package/lib/commands/spaces/wait.js +89 -0
  403. package/lib/commands/status.js +4 -4
  404. package/lib/commands/teams/index.d.ts +9 -0
  405. package/lib/commands/teams/index.js +29 -0
  406. package/lib/global_telemetry.js +10 -4
  407. package/lib/hooks/postrun/performance_analytics.js +5 -4
  408. package/lib/hooks/prerun/analytics.js +3 -0
  409. package/lib/lib/addons/addons_wait.d.ts +78 -0
  410. package/lib/lib/addons/addons_wait.js +56 -0
  411. package/lib/lib/addons/create_addon.d.ts +7 -0
  412. package/lib/lib/addons/create_addon.js +59 -0
  413. package/lib/lib/addons/destroy_addon.d.ts +3 -0
  414. package/lib/lib/addons/destroy_addon.js +48 -0
  415. package/lib/lib/addons/resolve.d.ts +38 -0
  416. package/lib/lib/addons/resolve.js +179 -0
  417. package/lib/lib/addons/util.d.ts +9 -0
  418. package/lib/lib/addons/util.js +72 -0
  419. package/lib/lib/apps/app-transfer.d.ts +10 -0
  420. package/lib/lib/apps/app-transfer.js +35 -0
  421. package/lib/lib/autocomplete/completions.d.ts +4 -0
  422. package/lib/lib/autocomplete/completions.js +6 -1
  423. package/lib/lib/certs/certificate_details.d.ts +2 -0
  424. package/lib/lib/certs/certificate_details.js +37 -0
  425. package/lib/lib/certs/display_table.d.ts +2 -0
  426. package/lib/lib/certs/display_table.js +51 -0
  427. package/lib/lib/certs/domains.d.ts +3 -0
  428. package/lib/lib/certs/domains.js +45 -0
  429. package/lib/lib/certs/flags.d.ts +7 -0
  430. package/lib/lib/certs/flags.js +42 -0
  431. package/lib/lib/certs/format_date.d.ts +1 -0
  432. package/lib/lib/certs/format_date.js +11 -0
  433. package/lib/lib/certs/get_cert_and_key.d.ts +9 -0
  434. package/lib/lib/certs/get_cert_and_key.js +11 -0
  435. package/lib/lib/ci/interfaces/kolkrabbi.d.ts +1 -1
  436. package/lib/lib/ci/source.js +3 -3
  437. package/lib/lib/ci/test-run.js +2 -2
  438. package/lib/lib/config/quote.js +1 -1
  439. package/lib/lib/confirmCommand.d.ts +1 -0
  440. package/lib/lib/{apps/confirm-app.js → confirmCommand.js} +2 -2
  441. package/lib/lib/container/debug.d.ts +2 -0
  442. package/lib/lib/container/debug.js +5 -0
  443. package/lib/lib/container/docker_helper.d.ts +24 -0
  444. package/lib/lib/container/docker_helper.js +168 -0
  445. package/lib/lib/container/streamer.d.ts +1 -0
  446. package/lib/lib/container/streamer.js +31 -0
  447. package/lib/lib/domains/domains.d.ts +6 -0
  448. package/lib/lib/domains/domains.js +104 -0
  449. package/lib/lib/local/run-foreman.d.ts +1 -0
  450. package/lib/lib/local/run-foreman.js +229 -1
  451. package/lib/lib/members/util.d.ts +3 -0
  452. package/lib/lib/members/util.js +25 -0
  453. package/lib/lib/members/utils.d.ts +2 -0
  454. package/lib/lib/members/utils.js +14 -0
  455. package/lib/lib/notify.d.ts +1 -0
  456. package/lib/lib/notify.js +23 -0
  457. package/lib/lib/orgs/utils.d.ts +5 -0
  458. package/lib/lib/orgs/utils.js +24 -0
  459. package/lib/lib/pg/backups.d.ts +17 -0
  460. package/lib/lib/pg/backups.js +164 -0
  461. package/lib/lib/pg/bastion.d.ts +29 -0
  462. package/lib/lib/pg/bastion.js +121 -0
  463. package/lib/lib/pg/config.d.ts +2 -0
  464. package/lib/lib/pg/config.js +13 -0
  465. package/lib/lib/pg/download.d.ts +5 -0
  466. package/lib/lib/pg/download.js +34 -0
  467. package/lib/lib/pg/fetcher.d.ts +39 -0
  468. package/lib/lib/pg/fetcher.js +137 -0
  469. package/lib/lib/pg/host.d.ts +1 -0
  470. package/lib/lib/pg/host.js +7 -0
  471. package/lib/lib/pg/psql.d.ts +48 -0
  472. package/lib/lib/pg/psql.js +252 -0
  473. package/lib/lib/pg/push_pull.d.ts +13 -0
  474. package/lib/lib/pg/push_pull.js +118 -0
  475. package/lib/lib/pg/setter.d.ts +16 -0
  476. package/lib/lib/pg/setter.js +65 -0
  477. package/lib/lib/pg/types.d.ts +230 -0
  478. package/lib/lib/pg/types.js +2 -0
  479. package/lib/lib/pg/util.d.ts +36 -0
  480. package/lib/lib/pg/util.js +183 -0
  481. package/lib/lib/redis/api.d.ts +65 -0
  482. package/lib/lib/redis/api.js +122 -0
  483. package/lib/lib/releases/output.d.ts +1 -0
  484. package/lib/lib/releases/output.js +14 -0
  485. package/lib/lib/releases/releases.d.ts +6 -0
  486. package/lib/lib/releases/releases.js +32 -0
  487. package/lib/lib/releases/status_helper.d.ts +5 -0
  488. package/lib/lib/releases/status_helper.js +25 -0
  489. package/lib/lib/run/dyno.js +2 -2
  490. package/lib/lib/run/log-displayer.d.ts +1 -1
  491. package/lib/lib/spaces/format.d.ts +4 -0
  492. package/lib/lib/spaces/format.js +60 -0
  493. package/lib/lib/spaces/hosts.d.ts +9 -0
  494. package/lib/lib/spaces/hosts.js +34 -0
  495. package/lib/lib/spaces/outbound-rules.d.ts +4 -0
  496. package/lib/lib/spaces/outbound-rules.js +78 -0
  497. package/lib/lib/spaces/parsers.d.ts +8 -0
  498. package/lib/lib/spaces/parsers.js +17 -0
  499. package/lib/lib/spaces/peering.d.ts +4 -0
  500. package/lib/lib/spaces/peering.js +53 -0
  501. package/lib/lib/spaces/spaces.d.ts +4 -0
  502. package/lib/lib/spaces/spaces.js +37 -0
  503. package/lib/lib/spaces/vpn-connections.d.ts +2 -0
  504. package/lib/lib/spaces/vpn-connections.js +22 -0
  505. package/lib/lib/teamUtils.d.ts +3 -0
  506. package/lib/lib/teamUtils.js +18 -0
  507. package/lib/lib/time.d.ts +2 -0
  508. package/lib/lib/time.js +29 -0
  509. package/lib/lib/types/app_errors.d.ts +6 -0
  510. package/lib/lib/types/app_errors.js +2 -0
  511. package/lib/lib/types/domain.d.ts +61 -0
  512. package/lib/lib/types/domain.js +5 -0
  513. package/lib/lib/types/notifications.d.ts +20 -0
  514. package/lib/lib/types/notifications.js +2 -0
  515. package/lib/lib/utils/multisort.d.ts +32 -0
  516. package/lib/lib/utils/multisort.js +66 -0
  517. package/lib/lib/utils/uuid-validate.d.ts +1 -0
  518. package/lib/lib/utils/uuid-validate.js +7 -0
  519. package/lib/user-config.js +2 -2
  520. package/oclif.manifest.json +12776 -3097
  521. package/package.json +110 -63
  522. package/lib/lib/apps/confirm-app.d.ts +0 -1
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const color_1 = require("@heroku-cli/color");
5
+ const command_1 = require("@heroku-cli/command");
6
+ const core_1 = require("@oclif/core");
7
+ const time_1 = require("../../lib/time");
8
+ const tsheredoc_1 = require("tsheredoc");
9
+ function getProcessNumber(s) {
10
+ return Number.parseInt(s.split('.', 2)[1], 10);
11
+ }
12
+ function uniqueValues(value, index, self) {
13
+ return self.indexOf(value) === index;
14
+ }
15
+ function byProcessNumber(a, b) {
16
+ return getProcessNumber(a.name) - getProcessNumber(b.name);
17
+ }
18
+ function byProcessName(a, b) {
19
+ if (a.name > b.name) {
20
+ return 1;
21
+ }
22
+ if (b.name > a.name) {
23
+ return -1;
24
+ }
25
+ return 0;
26
+ }
27
+ function byProcessTypeAndNumber(a, b) {
28
+ if (a.type > b.type) {
29
+ return 1;
30
+ }
31
+ if (b.type > a.type) {
32
+ return -1;
33
+ }
34
+ return getProcessNumber(a.name) - getProcessNumber(b.name);
35
+ }
36
+ function truncate(s) {
37
+ return s.length > 35 ? `${s.slice(0, 34)}…` : s;
38
+ }
39
+ function printExtended(dynos) {
40
+ const sortedDynos = dynos.sort(byProcessTypeAndNumber);
41
+ core_1.ux.table(sortedDynos, {
42
+ ID: { get: (dyno) => dyno.id },
43
+ Process: { get: (dyno) => dyno.name },
44
+ State: { get: (dyno) => `${dyno.state} ${(0, time_1.ago)(new Date(dyno.updated_at))}` },
45
+ Region: { get: (dyno) => dyno.extended ? dyno.extended.region : '' },
46
+ 'Execution Plane': { get: (dyno) => dyno.extended ? dyno.extended.execution_plane : '' },
47
+ Fleet: { get: (dyno) => dyno.extended ? dyno.extended.fleet : '' },
48
+ Instance: { get: (dyno) => dyno.extended ? dyno.extended.instance : '' },
49
+ IP: { get: (dyno) => dyno.extended ? dyno.extended.ip : '' },
50
+ Port: { get: (dyno) => dyno.extended ? dyno.extended.port.toString() : '' },
51
+ AZ: { get: (dyno) => dyno.extended ? dyno.extended.az : '' },
52
+ Release: { get: (dyno) => dyno.release.version },
53
+ Command: { get: (dyno) => truncate(dyno.command) },
54
+ Route: { get: (dyno) => dyno.extended ? dyno.extended.route : '' },
55
+ Size: { get: (dyno) => dyno.size },
56
+ }, {
57
+ 'no-truncate': true,
58
+ });
59
+ }
60
+ async function printAccountQuota(heroku, app, account) {
61
+ if (app.process_tier !== 'free' && app.process_tier !== 'eco') {
62
+ return;
63
+ }
64
+ if (app.owner.id !== account.id) {
65
+ return;
66
+ }
67
+ const { body: quota } = await heroku.request(`/accounts/${account.id}/actions/get-quota`, { headers: { Accept: 'application/vnd.heroku+json; version=3.account-quotas' } }).catch(() => {
68
+ return { body: null };
69
+ });
70
+ if (!quota || (quota.id && quota.id === 'not_found')) {
71
+ return;
72
+ }
73
+ const remaining = (quota.account_quota === 0) ? 0 : quota.account_quota - quota.quota_used;
74
+ const percentage = (quota.account_quota === 0) ? 0 : Math.floor(remaining / quota.account_quota * 100);
75
+ const remainingMinutes = remaining / 60;
76
+ const hours = Math.floor(remainingMinutes / 60);
77
+ const minutes = Math.floor(remainingMinutes % 60);
78
+ const appQuota = quota.apps.find(appQuota => {
79
+ return appQuota.app_uuid === app.id;
80
+ });
81
+ const appQuotaUsed = appQuota ? appQuota.quota_used / 60 : 0;
82
+ const appPercentage = appQuota ? Math.floor(appQuota.quota_used * 100 / quota.account_quota) : 0;
83
+ const appHours = Math.floor(appQuotaUsed / 60);
84
+ const appMinutes = Math.floor(appQuotaUsed % 60);
85
+ if (app.process_tier === 'eco') {
86
+ core_1.ux.log(`Eco dyno hours quota remaining this month: ${hours}h ${minutes}m (${percentage}%)`);
87
+ core_1.ux.log(`Eco dyno usage for this app: ${appHours}h ${appMinutes}m (${appPercentage}%)`);
88
+ core_1.ux.log('For more information on Eco dyno hours, see:');
89
+ core_1.ux.log('https://devcenter.heroku.com/articles/eco-dyno-hours');
90
+ core_1.ux.log();
91
+ }
92
+ if (app.process_tier === 'free') {
93
+ core_1.ux.log(`Free dyno hours quota remaining this month: ${hours}h ${minutes}m (${percentage}%)`);
94
+ core_1.ux.log(`Free dyno usage for this app: ${appHours}h ${appMinutes}m (${appPercentage}%)`);
95
+ core_1.ux.log('For more information on dyno sleeping and how to upgrade, see:');
96
+ core_1.ux.log('https://devcenter.heroku.com/articles/dyno-sleeping');
97
+ core_1.ux.log();
98
+ }
99
+ }
100
+ function decorateOneOffDyno(dyno) {
101
+ const since = (0, time_1.ago)(new Date(dyno.updated_at));
102
+ // eslint-disable-next-line unicorn/explicit-length-check
103
+ const size = dyno.size || '1X';
104
+ const state = dyno.state === 'up' ? color_1.default.green(dyno.state) : color_1.default.yellow(dyno.state);
105
+ return `${dyno.name} (${color_1.default.cyan(size)}): ${state} ${color_1.default.dim(since)}: ${dyno.command}`;
106
+ }
107
+ function decorateCommandDyno(dyno) {
108
+ const since = (0, time_1.ago)(new Date(dyno.updated_at));
109
+ const state = dyno.state === 'up' ? color_1.default.green(dyno.state) : color_1.default.yellow(dyno.state);
110
+ return `${dyno.name}: ${state} ${color_1.default.dim(since)}`;
111
+ }
112
+ function printDynos(dynos) {
113
+ const oneOffs = dynos.filter(d => d.type === 'run').sort(byProcessNumber);
114
+ const commands = dynos.filter(d => d.type !== 'run').map(d => d.command).filter(uniqueValues);
115
+ // Print one-off dynos
116
+ if (oneOffs.length > 0) {
117
+ core_1.ux.styledHeader(`${color_1.default.green('run')}: one-off processes (${color_1.default.yellow(oneOffs.length.toString())})`);
118
+ oneOffs.forEach(dyno => core_1.ux.log(decorateOneOffDyno(dyno)));
119
+ core_1.ux.log();
120
+ }
121
+ // Print dynos grouped by command
122
+ commands.forEach(function (command) {
123
+ const commandDynos = dynos.filter(d => d.command === command).sort(byProcessNumber);
124
+ const type = commandDynos[0].type;
125
+ // eslint-disable-next-line unicorn/explicit-length-check
126
+ const size = commandDynos[0].size || '1X';
127
+ core_1.ux.styledHeader(`${color_1.default.green(type)} (${color_1.default.cyan(size)}): ${command} (${color_1.default.yellow(commandDynos.length.toString())})`);
128
+ for (const dyno of commandDynos)
129
+ core_1.ux.log(decorateCommandDyno(dyno));
130
+ core_1.ux.log();
131
+ });
132
+ }
133
+ class Index extends command_1.Command {
134
+ async run() {
135
+ const _a = await this.parse(Index), { flags } = _a, restParse = tslib_1.__rest(_a, ["flags"]);
136
+ const { app, json, extended } = flags;
137
+ const types = restParse.argv;
138
+ const suffix = extended ? '?extended=true' : ''; // read previous comment, including this on the request doesn't make any difference.
139
+ const promises = {
140
+ dynos: this.heroku.request(`/apps/${app}/dynos${suffix}`),
141
+ appInfo: this.heroku.request(`/apps/${app}`, { headers: { Accept: 'application/vnd.heroku+json; version=3.process-tier' } }),
142
+ accountInfo: this.heroku.request('/account'),
143
+ };
144
+ const [{ body: dynos }, { body: appInfo }, { body: accountInfo }] = await Promise.all([promises.dynos, promises.appInfo, promises.accountInfo]);
145
+ const shielded = appInfo.space && appInfo.space.shield;
146
+ if (shielded) {
147
+ dynos.forEach(d => {
148
+ d.size = d.size.replace('Private-', 'Shield-');
149
+ });
150
+ }
151
+ let selectedDynos = dynos;
152
+ if (types.length > 0) {
153
+ selectedDynos = selectedDynos.filter(dyno => types.find((t) => dyno.type === t));
154
+ types.forEach(t => {
155
+ if (!selectedDynos.some(d => d.type === t)) {
156
+ throw new Error(`No ${color_1.default.cyan(t)} dynos on ${color_1.default.magenta(app)}`);
157
+ }
158
+ });
159
+ }
160
+ selectedDynos = selectedDynos.sort(byProcessName);
161
+ if (json)
162
+ core_1.ux.styledJSON(selectedDynos);
163
+ else if (extended)
164
+ printExtended(selectedDynos);
165
+ else {
166
+ await printAccountQuota(this.heroku, appInfo, accountInfo);
167
+ if (selectedDynos.length === 0)
168
+ core_1.ux.log(`No dynos on ${color_1.default.magenta(app)}`);
169
+ else
170
+ printDynos(selectedDynos);
171
+ }
172
+ }
173
+ }
174
+ exports.default = Index;
175
+ Index.topic = 'ps';
176
+ Index.description = 'list dynos for an app';
177
+ Index.strict = false;
178
+ Index.usage = 'ps [TYPE [TYPE ...]]';
179
+ Index.examples = [(0, tsheredoc_1.default) `
180
+ $ heroku ps
181
+ === run: one-off dyno
182
+ run.1: up for 5m: bash
183
+ === web: bundle exec thin start -p $PORT
184
+ web.1: created for 30s
185
+ `, (0, tsheredoc_1.default) `
186
+ $ heroku ps run # specifying types
187
+ === run: one-off dyno
188
+ run.1: up for 5m: bash
189
+ `];
190
+ Index.flags = {
191
+ app: command_1.flags.app({ required: true }),
192
+ remote: command_1.flags.remote(),
193
+ json: command_1.flags.boolean({ description: 'display as json' }),
194
+ extended: command_1.flags.boolean({ char: 'x', hidden: true }), // should be removed? Platform API doesn't serialize extended attributes even if the query param `extended=true` is sent.
195
+ };
@@ -0,0 +1,17 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Restart extends Command {
3
+ static description: string;
4
+ static topic: string;
5
+ static aliases: string[];
6
+ static hiddenAliases: string[];
7
+ static examples: string[];
8
+ static help: string;
9
+ static args: {
10
+ dyno: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
11
+ };
12
+ static flags: {
13
+ app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
14
+ remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const command_1 = require("@heroku-cli/command");
4
+ const color_1 = require("@heroku-cli/color");
5
+ const core_1 = require("@oclif/core");
6
+ class Restart extends command_1.Command {
7
+ async run() {
8
+ const { args, flags } = await this.parse(Restart);
9
+ const app = flags.app;
10
+ const dyno = args.dyno;
11
+ let msg = 'Restarting';
12
+ if (dyno)
13
+ msg += ` ${color_1.default.cyan(dyno)}`;
14
+ msg += (dyno && dyno.includes('.')) ? ' dyno' : ' dynos';
15
+ msg += ` on ${color_1.default.app(app)}`;
16
+ core_1.ux.action.start(msg);
17
+ await this.heroku.delete(dyno ? `/apps/${app}/dynos/${encodeURIComponent(dyno)}` : `/apps/${app}/dynos`);
18
+ core_1.ux.action.stop();
19
+ }
20
+ }
21
+ exports.default = Restart;
22
+ Restart.description = 'restart app dynos';
23
+ Restart.topic = 'ps';
24
+ Restart.aliases = ['dyno:restart'];
25
+ Restart.hiddenAliases = ['restart'];
26
+ Restart.examples = [
27
+ '$ heroku ps:restart web.1',
28
+ '$ heroku ps:restart web',
29
+ '$ heroku ps:restart',
30
+ ];
31
+ Restart.help = 'if DYNO is not specified, restarts all dynos on app';
32
+ Restart.args = {
33
+ dyno: core_1.Args.string({ required: false }),
34
+ };
35
+ Restart.flags = {
36
+ app: command_1.flags.app({ required: true }),
37
+ remote: command_1.flags.remote(),
38
+ };
@@ -0,0 +1,13 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Scale extends Command {
3
+ static strict: boolean;
4
+ static description: string;
5
+ static examples: string[];
6
+ static aliases: string[];
7
+ static hiddenAliases: string[];
8
+ static flags: {
9
+ app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
10
+ remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const color_1 = require("@heroku-cli/color");
5
+ const command_1 = require("@heroku-cli/command");
6
+ const core_1 = require("@oclif/core");
7
+ const lodash_1 = require("lodash");
8
+ const tsheredoc_1 = require("tsheredoc");
9
+ const emptyFormationErr = (app) => {
10
+ return new Error(`No process types on ${color_1.default.magenta(app)}.\nUpload a Procfile to add process types.\nhttps://devcenter.heroku.com/articles/procfile`);
11
+ };
12
+ class Scale extends command_1.Command {
13
+ async run() {
14
+ const _a = await this.parse(Scale), { flags } = _a, restParse = tslib_1.__rest(_a, ["flags"]);
15
+ const argv = restParse.argv;
16
+ const { app } = flags;
17
+ // will remove this flag once we have
18
+ // successfully launched larger dyno sizes
19
+ let isLargerDyno = false;
20
+ const { body: largerDynoFeatureFlag } = await this.heroku.get('/account/features/frontend-larger-dynos')
21
+ .catch((error) => {
22
+ if (error.statusCode === 404) {
23
+ return { body: { enabled: false } };
24
+ }
25
+ throw error;
26
+ });
27
+ function parse(args) {
28
+ return (0, lodash_1.compact)(args.map(arg => {
29
+ const change = arg.match(/^([\w-]+)([=+-]\d+)(?::([\w-]+))?$/);
30
+ if (!change)
31
+ return;
32
+ const quantity = change[2][0] === '=' ? change[2].slice(1) : change[2];
33
+ if (change[3])
34
+ change[3] = change[3].replace('Shield-', 'Private-');
35
+ return { type: change[1], quantity, size: change[3] };
36
+ }));
37
+ }
38
+ const changes = parse(argv);
39
+ // checks for larger dyno sizes
40
+ // if the feature is not enabled
41
+ if (!largerDynoFeatureFlag.enabled) {
42
+ changes.forEach(({ size }) => {
43
+ const largerDynoNames = /^(?!standard-[12]x$)(performance|private|shield)-(l-ram|xl|2xl)$/i;
44
+ isLargerDyno = largerDynoNames.test(size);
45
+ if (isLargerDyno) {
46
+ const availableDynoSizes = 'eco, basic, standard-1x, standard-2x, performance-m, performance-l, private-s, private-m, private-l, shield-s, shield-m, shield-l';
47
+ core_1.ux.error(`No such size as ${size}. Use ${availableDynoSizes}.`, { exit: 1 });
48
+ }
49
+ });
50
+ }
51
+ if (changes.length === 0) {
52
+ const { body: formation } = await this.heroku.get(`/apps/${app}/formation`);
53
+ const { body: appProps } = await this.heroku.get(`/apps/${app}`);
54
+ const shielded = appProps.space && appProps.space.shield;
55
+ if (shielded) {
56
+ formation.forEach(d => {
57
+ if (d.size !== undefined) {
58
+ d.size = d.size.replace('Private-', 'Shield-');
59
+ }
60
+ });
61
+ }
62
+ if (formation.length === 0) {
63
+ throw emptyFormationErr(app);
64
+ }
65
+ core_1.ux.log(formation.map(d => `${d.type}=${d.quantity}:${d.size}`)
66
+ .sort()
67
+ .join(' '));
68
+ }
69
+ else {
70
+ core_1.ux.action.start('Scaling dynos');
71
+ const { body: appProps } = await this.heroku.get(`/apps/${app}`);
72
+ const { body: formation } = await this.heroku.patch(`/apps/${app}/formation`, { body: { updates: changes } });
73
+ const shielded = appProps.space && appProps.space.shield;
74
+ if (shielded) {
75
+ formation.forEach(d => {
76
+ if (d.size !== undefined) {
77
+ d.size = d.size.replace('Private-', 'Shield-');
78
+ }
79
+ });
80
+ }
81
+ const output = formation.filter(f => changes.find(c => c.type === f.type))
82
+ .map(d => `${color_1.default.green(d.type || '')} at ${d.quantity}:${d.size}`);
83
+ core_1.ux.action.stop(`done, now running ${output.join(', ')}`);
84
+ }
85
+ }
86
+ }
87
+ exports.default = Scale;
88
+ Scale.strict = false;
89
+ Scale.description = (0, tsheredoc_1.default) `
90
+ scale dyno quantity up or down
91
+ Appending a size (eg. web=2:Standard-2X) allows simultaneous scaling and resizing.
92
+
93
+ Omitting any arguments will display the app's current dyno formation, in a
94
+ format suitable for passing back into ps:scale.
95
+ `;
96
+ Scale.examples = [(0, tsheredoc_1.default) `
97
+ $ heroku ps:scale web=3:Standard-2X worker+1 --app APP
98
+ Scaling dynos... done, now running web at 3:Standard-2X, worker at 1:Standard-1X.
99
+ `, (0, tsheredoc_1.default) `
100
+ $ heroku ps:scale --app APP
101
+ web=3:Standard-2X worker=1:Standard-1X
102
+ `];
103
+ Scale.aliases = ['dyno:scale'];
104
+ Scale.hiddenAliases = ['scale'];
105
+ Scale.flags = {
106
+ app: command_1.flags.app({ required: true }),
107
+ remote: command_1.flags.remote(),
108
+ };
@@ -0,0 +1,17 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Stop extends Command {
3
+ static description: string;
4
+ static topic: string;
5
+ static aliases: string[];
6
+ static hiddenAliases: string[];
7
+ static examples: string[];
8
+ static help: string;
9
+ static args: {
10
+ dyno: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
11
+ };
12
+ static flags: {
13
+ app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
14
+ remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const command_1 = require("@heroku-cli/command");
4
+ const color_1 = require("@heroku-cli/color");
5
+ const core_1 = require("@oclif/core");
6
+ class Stop extends command_1.Command {
7
+ async run() {
8
+ const { args, flags } = await this.parse(Stop);
9
+ const app = flags.app;
10
+ const dyno = args.dyno;
11
+ const type = dyno.includes('.') ? 'ps' : 'type';
12
+ core_1.ux.action.start(`Stopping ${color_1.default.cyan(dyno)} ${type === 'ps' ? 'dyno' : 'dynos'} on ${color_1.default.app(app)}`);
13
+ await this.heroku.post(`/apps/${app}/dynos/${dyno}/actions/stop`);
14
+ core_1.ux.action.stop();
15
+ }
16
+ }
17
+ exports.default = Stop;
18
+ Stop.description = 'stop app dyno';
19
+ Stop.topic = 'ps';
20
+ Stop.aliases = ['dyno:stop', 'ps:kill', 'dyno:kill'];
21
+ Stop.hiddenAliases = ['stop', 'kill'];
22
+ Stop.examples = [
23
+ '$ heroku ps:stop run.1828',
24
+ '$ heroku ps:stop run',
25
+ ];
26
+ Stop.help = 'stop app dyno or dyno type';
27
+ Stop.args = {
28
+ dyno: core_1.Args.string({ required: true }),
29
+ };
30
+ Stop.flags = {
31
+ app: command_1.flags.app({ required: true }),
32
+ remote: command_1.flags.remote(),
33
+ };
@@ -0,0 +1,12 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Type extends Command {
3
+ static strict: boolean;
4
+ static description: string;
5
+ static aliases: string[];
6
+ static hiddenAliases: string[];
7
+ static flags: {
8
+ app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
9
+ remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const color_1 = require("@heroku-cli/color");
5
+ const command_1 = require("@heroku-cli/command");
6
+ const core_1 = require("@oclif/core");
7
+ const lodash_1 = require("lodash");
8
+ const tsheredoc_1 = require("tsheredoc");
9
+ const COST_MONTHLY = {
10
+ Free: 0,
11
+ Eco: 0,
12
+ Hobby: 7,
13
+ Basic: 7,
14
+ 'Standard-1X': 25,
15
+ 'Standard-2X': 50,
16
+ 'Performance-M': 250,
17
+ Performance: 500,
18
+ 'Performance-L': 500,
19
+ '1X': 36,
20
+ '2X': 72,
21
+ PX: 576,
22
+ 'Performance-L-RAM': 500,
23
+ 'Performance-XL': 750,
24
+ 'Performance-2XL': 1500,
25
+ };
26
+ const calculateHourly = (size) => COST_MONTHLY[size] / 720;
27
+ const emptyFormationErr = (app) => {
28
+ return new Error(`No process types on ${app}.\nUpload a Procfile to add process types.\nhttps://devcenter.heroku.com/articles/procfile`);
29
+ };
30
+ const displayFormation = async (heroku, app) => {
31
+ const { body: formation } = await heroku.get(`/apps/${app}/formation`);
32
+ const { body: appProps } = await heroku.get(`/apps/${app}`);
33
+ const shielded = appProps.space && appProps.space.shield;
34
+ const dynoTotals = {};
35
+ let isShowingEcoCostMessage = false;
36
+ const formationTableData = (0, lodash_1.sortBy)(formation, 'type')
37
+ // this filter shouldn't be necessary, but it makes TS happy
38
+ .filter((f) => typeof f.size === 'string' && typeof f.quantity === 'number')
39
+ .map((d => {
40
+ if (d.size === 'Eco') {
41
+ isShowingEcoCostMessage = true;
42
+ }
43
+ if (shielded) {
44
+ d.size = d.size.replace('Private-', 'Shield-');
45
+ }
46
+ if (d.size in dynoTotals) {
47
+ dynoTotals[d.size] += d.quantity;
48
+ }
49
+ else {
50
+ dynoTotals[d.size] = d.quantity;
51
+ }
52
+ return {
53
+ // this rule does not realize `size` isn't used on an array
54
+ /* eslint-disable unicorn/explicit-length-check */
55
+ type: color_1.default.green(d.type || ''),
56
+ size: color_1.default.cyan(d.size),
57
+ qty: color_1.default.yellow(`${d.quantity}`),
58
+ 'cost/hour': calculateHourly(d.size) ?
59
+ '~$' + (calculateHourly(d.size) * (d.quantity || 1)).toFixed(3)
60
+ .toString() :
61
+ '',
62
+ 'max cost/month': COST_MONTHLY[d.size] ?
63
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
64
+ // @ts-ignore
65
+ '$' + (COST_MONTHLY[d.size] * d.quantity).toString() :
66
+ '',
67
+ };
68
+ }));
69
+ const dynoTotalsTableData = Object.keys(dynoTotals)
70
+ .map(k => ({
71
+ type: color_1.default.green(k), total: color_1.default.yellow((dynoTotals[k]).toString()),
72
+ }));
73
+ if (formation.length === 0) {
74
+ throw emptyFormationErr(app);
75
+ }
76
+ core_1.ux.styledHeader('Dyno Types');
77
+ core_1.ux.table(formationTableData, {
78
+ type: {},
79
+ size: {},
80
+ qty: {},
81
+ 'cost/hour': {},
82
+ 'max cost/month': {},
83
+ });
84
+ core_1.ux.styledHeader('Dyno Totals');
85
+ core_1.ux.table(dynoTotalsTableData, {
86
+ type: {},
87
+ total: {},
88
+ });
89
+ if (isShowingEcoCostMessage) {
90
+ core_1.ux.log('\n$5 (flat monthly fee, shared across all Eco dynos)');
91
+ }
92
+ };
93
+ class Type extends command_1.Command {
94
+ async run() {
95
+ const _a = await this.parse(Type), { flags } = _a, restParse = tslib_1.__rest(_a, ["flags"]);
96
+ const argv = restParse.argv;
97
+ const { app } = flags;
98
+ // will remove this flag once we have
99
+ // successfully launched larger dyno sizes
100
+ let isLargerDyno = false;
101
+ const { body: largerDynoFeatureFlag } = await this.heroku.get('/account/features/frontend-larger-dynos')
102
+ .catch((error) => {
103
+ if (error.statusCode === 404) {
104
+ return { body: { enabled: false } };
105
+ }
106
+ throw error;
107
+ });
108
+ const parse = async () => {
109
+ if (!argv || argv.length === 0)
110
+ return [];
111
+ const { body: formation } = await this.heroku.get(`/apps/${app}/formation`);
112
+ if (argv.find(a => a.match(/=/))) {
113
+ return (0, lodash_1.compact)(argv.map(arg => {
114
+ const match = arg.match(/^([a-zA-Z0-9_]+)=([\w-]+)$/);
115
+ const type = match && match[1];
116
+ const size = match && match[2];
117
+ if (!type || !size || !formation.find(p => p.type === type)) {
118
+ throw new Error(`Type ${color_1.default.red(type || '')} not found in process formation.\nTypes: ${color_1.default.yellow(formation.map(f => f.type)
119
+ .join(', '))}`);
120
+ }
121
+ return { type, size };
122
+ }));
123
+ }
124
+ return formation.map(p => ({ type: p.type, size: argv[0] }));
125
+ };
126
+ const changes = await parse();
127
+ // checks for larger dyno sizes
128
+ // if the feature is not enabled
129
+ if (!largerDynoFeatureFlag.enabled) {
130
+ changes.forEach(({ size }) => {
131
+ const largerDynoNames = /^(?!standard-[12]x$)(performance|private|shield)-(l-ram|xl|2xl)$/i;
132
+ isLargerDyno = largerDynoNames.test(size);
133
+ if (isLargerDyno) {
134
+ const availableDynoSizes = 'eco, basic, standard-1x, standard-2x, performance-m, performance-l, private-s, private-m, private-l, shield-s, shield-m, shield-l';
135
+ core_1.ux.error(`No such size as ${size}. Use ${availableDynoSizes}.`, { exit: 1 });
136
+ }
137
+ });
138
+ }
139
+ if (changes.length > 0) {
140
+ core_1.ux.action.start(`Scaling dynos on ${color_1.default.magenta(app)}`);
141
+ await this.heroku.patch(`/apps/${app}/formation`, { body: { updates: changes } });
142
+ core_1.ux.action.stop();
143
+ }
144
+ await displayFormation(this.heroku, app);
145
+ }
146
+ }
147
+ exports.default = Type;
148
+ Type.strict = false;
149
+ Type.description = (0, tsheredoc_1.default) `
150
+ manage dyno sizes
151
+ Called with no arguments shows the current dyno size.
152
+
153
+ Called with one argument sets the size.
154
+ Where SIZE is one of eco|basic|standard-1x|standard-2x|performance
155
+
156
+ Called with 1..n TYPE=SIZE arguments sets the quantity per type.
157
+ `;
158
+ Type.aliases = ['ps:resize', 'dyno:resize'];
159
+ Type.hiddenAliases = ['resize', 'dyno:type'];
160
+ Type.flags = {
161
+ app: command_1.flags.app({ required: true }),
162
+ remote: command_1.flags.remote(),
163
+ };
@@ -0,0 +1,15 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Cli extends Command {
3
+ static topic: string;
4
+ static description: string;
5
+ static flags: {
6
+ confirm: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
7
+ app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
8
+ remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
9
+ };
10
+ static args: {
11
+ database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
12
+ };
13
+ static examples: string[];
14
+ run(): Promise<void>;
15
+ }