heroku 9.0.0-alpha.0 → 9.0.0-alpha.2

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 (544) hide show
  1. package/README.md +9 -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 +28 -0
  37. package/lib/commands/apps/create.js +201 -0
  38. package/lib/commands/apps/destroy.d.ts +15 -0
  39. package/lib/commands/apps/destroy.js +47 -0
  40. package/lib/commands/apps/errors.d.ts +13 -0
  41. package/lib/commands/apps/errors.js +120 -0
  42. package/lib/commands/apps/favorites/add.d.ts +10 -0
  43. package/lib/commands/apps/favorites/add.js +38 -0
  44. package/lib/commands/apps/favorites/index.d.ts +9 -0
  45. package/lib/commands/apps/favorites/index.js +25 -0
  46. package/lib/commands/apps/favorites/remove.d.ts +10 -0
  47. package/lib/commands/apps/favorites/remove.js +28 -0
  48. package/lib/commands/apps/index.d.ts +16 -0
  49. package/lib/commands/apps/index.js +119 -0
  50. package/lib/commands/apps/info.d.ts +19 -0
  51. package/lib/commands/apps/info.js +162 -0
  52. package/lib/commands/apps/join.d.ts +11 -0
  53. package/lib/commands/apps/join.js +25 -0
  54. package/lib/commands/apps/leave.d.ts +12 -0
  55. package/lib/commands/apps/leave.js +25 -0
  56. package/lib/commands/apps/lock.d.ts +11 -0
  57. package/lib/commands/apps/lock.js +30 -0
  58. package/lib/commands/apps/open.d.ts +15 -0
  59. package/lib/commands/apps/open.js +30 -0
  60. package/lib/commands/apps/rename.d.ts +16 -0
  61. package/lib/commands/apps/rename.js +51 -0
  62. package/lib/commands/apps/stacks/index.d.ts +11 -0
  63. package/lib/commands/apps/stacks/index.js +44 -0
  64. package/lib/commands/apps/stacks/set.d.ts +14 -0
  65. package/lib/commands/apps/stacks/set.js +41 -0
  66. package/lib/commands/apps/transfer.d.ts +17 -0
  67. package/lib/commands/apps/transfer.js +91 -0
  68. package/lib/commands/apps/unlock.d.ts +11 -0
  69. package/lib/commands/apps/unlock.js +30 -0
  70. package/lib/commands/auth/logout.js +1 -0
  71. package/lib/commands/auth/token.js +2 -1
  72. package/lib/commands/authorizations/create.js +5 -1
  73. package/lib/commands/authorizations/info.js +5 -1
  74. package/lib/commands/authorizations/revoke.js +5 -1
  75. package/lib/commands/authorizations/rotate.js +5 -1
  76. package/lib/commands/authorizations/update.js +5 -1
  77. package/lib/commands/autocomplete/doctor.js +2 -2
  78. package/lib/commands/autocomplete/options.js +2 -2
  79. package/lib/commands/certs/add.d.ts +16 -0
  80. package/lib/commands/certs/add.js +98 -0
  81. package/lib/commands/certs/auto/disable.d.ts +11 -0
  82. package/lib/commands/certs/auto/disable.js +34 -0
  83. package/lib/commands/certs/auto/enable.d.ts +11 -0
  84. package/lib/commands/certs/auto/enable.js +51 -0
  85. package/lib/commands/certs/auto/index.d.ts +12 -0
  86. package/lib/commands/certs/auto/index.js +94 -0
  87. package/lib/commands/certs/auto/refresh.d.ts +10 -0
  88. package/lib/commands/certs/auto/refresh.js +19 -0
  89. package/lib/commands/certs/generate.d.ts +26 -0
  90. package/lib/commands/certs/generate.js +111 -0
  91. package/lib/commands/certs/index.d.ts +10 -0
  92. package/lib/commands/certs/index.js +26 -0
  93. package/lib/commands/certs/info.d.ts +13 -0
  94. package/lib/commands/certs/info.js +43 -0
  95. package/lib/commands/certs/remove.d.ts +13 -0
  96. package/lib/commands/certs/remove.js +32 -0
  97. package/lib/commands/certs/update.d.ts +18 -0
  98. package/lib/commands/certs/update.js +54 -0
  99. package/lib/commands/ci/config/get.d.ts +1 -0
  100. package/lib/commands/ci/config/get.js +1 -0
  101. package/lib/commands/ci/config/index.d.ts +12 -0
  102. package/lib/commands/ci/config/index.js +43 -0
  103. package/lib/commands/ci/config/set.d.ts +3 -2
  104. package/lib/commands/ci/config/set.js +3 -6
  105. package/lib/commands/ci/config/unset.d.ts +14 -0
  106. package/lib/commands/ci/config/unset.js +36 -0
  107. package/lib/commands/ci/index.d.ts +1 -0
  108. package/lib/commands/ci/index.js +1 -0
  109. package/lib/commands/ci/info.d.ts +1 -0
  110. package/lib/commands/ci/info.js +1 -0
  111. package/lib/commands/ci/last.d.ts +1 -0
  112. package/lib/commands/ci/last.js +1 -0
  113. package/lib/commands/ci/migrate-manifest.d.ts +7 -0
  114. package/lib/commands/ci/migrate-manifest.js +74 -0
  115. package/lib/commands/ci/open.d.ts +1 -0
  116. package/lib/commands/ci/open.js +1 -0
  117. package/lib/commands/ci/rerun.d.ts +1 -0
  118. package/lib/commands/ci/rerun.js +1 -0
  119. package/lib/commands/config/set.d.ts +12 -0
  120. package/lib/commands/config/set.js +60 -0
  121. package/lib/commands/container/index.d.ts +6 -0
  122. package/lib/commands/container/index.js +13 -0
  123. package/lib/commands/container/login.d.ts +9 -0
  124. package/lib/commands/container/login.js +57 -0
  125. package/lib/commands/container/logout.d.ts +9 -0
  126. package/lib/commands/container/logout.js +37 -0
  127. package/lib/commands/container/pull.d.ts +14 -0
  128. package/lib/commands/container/pull.js +40 -0
  129. package/lib/commands/container/push.d.ts +16 -0
  130. package/lib/commands/container/push.js +101 -0
  131. package/lib/commands/container/release.d.ts +14 -0
  132. package/lib/commands/container/release.js +89 -0
  133. package/lib/commands/container/rm.d.ts +13 -0
  134. package/lib/commands/container/rm.js +36 -0
  135. package/lib/commands/container/run.d.ts +15 -0
  136. package/lib/commands/container/run.js +63 -0
  137. package/lib/commands/dashboard.d.ts +7 -0
  138. package/lib/commands/dashboard.js +164 -0
  139. package/lib/commands/domains/index.d.ts +3 -3
  140. package/lib/commands/drains/add.d.ts +12 -0
  141. package/lib/commands/drains/add.js +23 -0
  142. package/lib/commands/drains/index.d.ts +11 -0
  143. package/lib/commands/drains/index.js +50 -0
  144. package/lib/commands/drains/remove.d.ts +13 -0
  145. package/lib/commands/drains/remove.js +22 -0
  146. package/lib/commands/features/disable.d.ts +12 -0
  147. package/lib/commands/features/disable.js +30 -0
  148. package/lib/commands/features/enable.d.ts +12 -0
  149. package/lib/commands/features/enable.js +29 -0
  150. package/lib/commands/features/index.d.ts +10 -0
  151. package/lib/commands/features/index.js +37 -0
  152. package/lib/commands/features/info.d.ts +13 -0
  153. package/lib/commands/features/info.js +33 -0
  154. package/lib/commands/keys/add.d.ts +14 -0
  155. package/lib/commands/keys/add.js +101 -0
  156. package/lib/commands/keys/clear.d.ts +5 -0
  157. package/lib/commands/keys/clear.js +17 -0
  158. package/lib/commands/keys/index.d.ts +9 -0
  159. package/lib/commands/keys/index.js +36 -0
  160. package/lib/commands/keys/remove.d.ts +9 -0
  161. package/lib/commands/keys/remove.js +29 -0
  162. package/lib/commands/labs/enable.d.ts +13 -0
  163. package/lib/commands/labs/enable.js +47 -0
  164. package/lib/commands/labs/index.d.ts +11 -0
  165. package/lib/commands/labs/index.js +71 -0
  166. package/lib/commands/labs/info.d.ts +14 -0
  167. package/lib/commands/labs/info.js +49 -0
  168. package/lib/commands/local/index.d.ts +1 -1
  169. package/lib/commands/local/index.js +8 -3
  170. package/lib/commands/local/run.d.ts +1 -1
  171. package/lib/commands/local/run.js +8 -3
  172. package/lib/commands/maintenance/index.d.ts +10 -0
  173. package/lib/commands/maintenance/index.js +19 -0
  174. package/lib/commands/maintenance/off.d.ts +10 -0
  175. package/lib/commands/maintenance/off.js +20 -0
  176. package/lib/commands/maintenance/on.d.ts +10 -0
  177. package/lib/commands/maintenance/on.js +20 -0
  178. package/lib/commands/members/add.d.ts +13 -0
  179. package/lib/commands/members/add.js +33 -0
  180. package/lib/commands/members/index.d.ts +12 -0
  181. package/lib/commands/members/index.js +76 -0
  182. package/lib/commands/members/remove.d.ts +10 -0
  183. package/lib/commands/members/remove.js +58 -0
  184. package/lib/commands/members/set.d.ts +11 -0
  185. package/lib/commands/members/set.js +21 -0
  186. package/lib/commands/notifications/index.d.ts +13 -0
  187. package/lib/commands/notifications/index.js +62 -0
  188. package/lib/commands/orgs/index.d.ts +11 -0
  189. package/lib/commands/orgs/index.js +27 -0
  190. package/lib/commands/orgs/open.d.ts +10 -0
  191. package/lib/commands/orgs/open.js +24 -0
  192. package/lib/commands/pg/backups/cancel.d.ts +15 -0
  193. package/lib/commands/pg/backups/cancel.js +49 -0
  194. package/lib/commands/pg/backups/capture.d.ts +15 -0
  195. package/lib/commands/pg/backups/capture.js +65 -0
  196. package/lib/commands/pg/backups/delete.d.ts +15 -0
  197. package/lib/commands/pg/backups/delete.js +38 -0
  198. package/lib/commands/pg/backups/download.d.ts +14 -0
  199. package/lib/commands/pg/backups/download.js +58 -0
  200. package/lib/commands/pg/backups/index.d.ts +20 -0
  201. package/lib/commands/pg/backups/index.js +129 -0
  202. package/lib/commands/pg/backups/info.d.ts +17 -0
  203. package/lib/commands/pg/backups/info.js +92 -0
  204. package/lib/commands/pg/backups/restore.d.ts +19 -0
  205. package/lib/commands/pg/backups/restore.js +107 -0
  206. package/lib/commands/pg/backups/schedule.d.ts +21 -0
  207. package/lib/commands/pg/backups/schedule.js +82 -0
  208. package/lib/commands/pg/backups/schedules.d.ts +10 -0
  209. package/lib/commands/pg/backups/schedules.js +31 -0
  210. package/lib/commands/pg/backups/unschedule.d.ts +13 -0
  211. package/lib/commands/pg/backups/unschedule.js +44 -0
  212. package/lib/commands/pg/backups/url.d.ts +13 -0
  213. package/lib/commands/pg/backups/url.js +41 -0
  214. package/lib/commands/pg/bloat.d.ts +13 -0
  215. package/lib/commands/pg/bloat.js +87 -0
  216. package/lib/commands/pg/blocking.d.ts +13 -0
  217. package/lib/commands/pg/blocking.js +42 -0
  218. package/lib/commands/pg/connection-pooling/attach.d.ts +15 -0
  219. package/lib/commands/pg/connection-pooling/attach.js +41 -0
  220. package/lib/commands/pg/copy.d.ts +18 -0
  221. package/lib/commands/pg/copy.js +86 -0
  222. package/lib/commands/pg/credentials/create.d.ts +14 -0
  223. package/lib/commands/pg/credentials/create.js +40 -0
  224. package/lib/commands/pg/credentials/destroy.d.ts +16 -0
  225. package/lib/commands/pg/credentials/destroy.js +48 -0
  226. package/lib/commands/pg/credentials/repair-default.d.ts +15 -0
  227. package/lib/commands/pg/credentials/repair-default.js +39 -0
  228. package/lib/commands/pg/credentials/rotate.d.ts +16 -0
  229. package/lib/commands/pg/credentials/rotate.js +82 -0
  230. package/lib/commands/pg/credentials/url.d.ts +14 -0
  231. package/lib/commands/pg/credentials/url.js +64 -0
  232. package/lib/commands/pg/credentials.d.ts +16 -0
  233. package/lib/commands/pg/credentials.js +61 -0
  234. package/lib/commands/pg/diagnose.d.ts +18 -0
  235. package/lib/commands/pg/diagnose.js +109 -0
  236. package/lib/commands/pg/info.d.ts +14 -0
  237. package/lib/commands/pg/info.js +92 -0
  238. package/lib/commands/pg/kill.d.ts +15 -0
  239. package/lib/commands/pg/kill.js +32 -0
  240. package/lib/commands/pg/killall.d.ts +13 -0
  241. package/lib/commands/pg/killall.js +26 -0
  242. package/lib/commands/pg/links/create.d.ts +15 -0
  243. package/lib/commands/pg/links/create.js +58 -0
  244. package/lib/commands/pg/links/destroy.d.ts +16 -0
  245. package/lib/commands/pg/links/destroy.js +42 -0
  246. package/lib/commands/pg/links/index.d.ts +13 -0
  247. package/lib/commands/pg/links/index.js +59 -0
  248. package/lib/commands/pg/locks.d.ts +15 -0
  249. package/lib/commands/pg/locks.js +53 -0
  250. package/lib/commands/pg/maintenance/index.d.ts +13 -0
  251. package/lib/commands/pg/maintenance/index.js +29 -0
  252. package/lib/commands/pg/maintenance/run.d.ts +14 -0
  253. package/lib/commands/pg/maintenance/run.js +37 -0
  254. package/lib/commands/pg/maintenance/window.d.ts +15 -0
  255. package/lib/commands/pg/maintenance/window.js +41 -0
  256. package/lib/commands/pg/outliers.d.ts +19 -0
  257. package/lib/commands/pg/outliers.js +97 -0
  258. package/lib/commands/pg/promote.d.ts +14 -0
  259. package/lib/commands/pg/promote.js +169 -0
  260. package/lib/commands/pg/ps.d.ts +14 -0
  261. package/lib/commands/pg/ps.js +52 -0
  262. package/lib/commands/pg/psql.d.ts +16 -0
  263. package/lib/commands/pg/psql.js +49 -0
  264. package/lib/commands/pg/pull.d.ts +18 -0
  265. package/lib/commands/pg/pull.js +87 -0
  266. package/lib/commands/pg/push.d.ts +18 -0
  267. package/lib/commands/pg/push.js +84 -0
  268. package/lib/commands/pg/reset.d.ts +15 -0
  269. package/lib/commands/pg/reset.js +44 -0
  270. package/lib/commands/pg/settings/auto-explain/log-analyze.d.ts +13 -0
  271. package/lib/commands/pg/settings/auto-explain/log-analyze.js +32 -0
  272. package/lib/commands/pg/settings/auto-explain/log-buffers.d.ts +13 -0
  273. package/lib/commands/pg/settings/auto-explain/log-buffers.js +30 -0
  274. package/lib/commands/pg/settings/auto-explain/log-min-duration.d.ts +16 -0
  275. package/lib/commands/pg/settings/auto-explain/log-min-duration.js +33 -0
  276. package/lib/commands/pg/settings/auto-explain/log-nested-statements.d.ts +12 -0
  277. package/lib/commands/pg/settings/auto-explain/log-nested-statements.js +25 -0
  278. package/lib/commands/pg/settings/auto-explain/log-triggers.d.ts +13 -0
  279. package/lib/commands/pg/settings/auto-explain/log-triggers.js +30 -0
  280. package/lib/commands/pg/settings/auto-explain/log-verbose.d.ts +17 -0
  281. package/lib/commands/pg/settings/auto-explain/log-verbose.js +33 -0
  282. package/lib/commands/pg/settings/auto-explain.d.ts +18 -0
  283. package/lib/commands/pg/settings/auto-explain.js +38 -0
  284. package/lib/commands/pg/settings/index.d.ts +13 -0
  285. package/lib/commands/pg/settings/index.js +34 -0
  286. package/lib/commands/pg/settings/log-connections.d.ts +17 -0
  287. package/lib/commands/pg/settings/log-connections.js +34 -0
  288. package/lib/commands/pg/settings/log-lock-waits.d.ts +13 -0
  289. package/lib/commands/pg/settings/log-lock-waits.js +31 -0
  290. package/lib/commands/pg/settings/log-min-duration-statement.d.ts +15 -0
  291. package/lib/commands/pg/settings/log-min-duration-statement.js +33 -0
  292. package/lib/commands/pg/settings/log-statement.d.ts +12 -0
  293. package/lib/commands/pg/settings/log-statement.js +30 -0
  294. package/lib/commands/pg/settings/track-functions.d.ts +12 -0
  295. package/lib/commands/pg/settings/track-functions.js +29 -0
  296. package/lib/commands/pg/unfollow.d.ts +14 -0
  297. package/lib/commands/pg/unfollow.js +40 -0
  298. package/lib/commands/pg/upgrade.d.ts +15 -0
  299. package/lib/commands/pg/upgrade.js +58 -0
  300. package/lib/commands/pg/vacuum-stats.d.ts +13 -0
  301. package/lib/commands/pg/vacuum-stats.js +65 -0
  302. package/lib/commands/pg/wait.d.ts +15 -0
  303. package/lib/commands/pg/wait.js +79 -0
  304. package/lib/commands/pipelines/connect.js +1 -1
  305. package/lib/commands/pipelines/diff.js +1 -1
  306. package/lib/commands/ps/index.d.ts +15 -0
  307. package/lib/commands/ps/index.js +195 -0
  308. package/lib/commands/ps/restart.d.ts +17 -0
  309. package/lib/commands/ps/restart.js +38 -0
  310. package/lib/commands/ps/scale.d.ts +13 -0
  311. package/lib/commands/ps/scale.js +108 -0
  312. package/lib/commands/ps/stop.d.ts +17 -0
  313. package/lib/commands/ps/stop.js +33 -0
  314. package/lib/commands/ps/type.d.ts +12 -0
  315. package/lib/commands/ps/type.js +163 -0
  316. package/lib/commands/redis/cli.d.ts +15 -0
  317. package/lib/commands/redis/cli.js +204 -0
  318. package/lib/commands/redis/credentials.d.ts +14 -0
  319. package/lib/commands/redis/credentials.js +32 -0
  320. package/lib/commands/redis/info.d.ts +15 -0
  321. package/lib/commands/redis/info.js +25 -0
  322. package/lib/commands/redis/keyspace-notifications.d.ts +14 -0
  323. package/lib/commands/redis/keyspace-notifications.js +47 -0
  324. package/lib/commands/redis/maintenance.d.ts +16 -0
  325. package/lib/commands/redis/maintenance.js +63 -0
  326. package/lib/commands/redis/maxmemory.d.ts +14 -0
  327. package/lib/commands/redis/maxmemory.js +40 -0
  328. package/lib/commands/redis/promote.d.ts +13 -0
  329. package/lib/commands/redis/promote.js +39 -0
  330. package/lib/commands/redis/stats-reset.d.ts +14 -0
  331. package/lib/commands/redis/stats-reset.js +36 -0
  332. package/lib/commands/redis/timeout.d.ts +14 -0
  333. package/lib/commands/redis/timeout.js +35 -0
  334. package/lib/commands/redis/upgrade.d.ts +15 -0
  335. package/lib/commands/redis/upgrade.js +37 -0
  336. package/lib/commands/redis/wait.d.ts +14 -0
  337. package/lib/commands/redis/wait.js +60 -0
  338. package/lib/commands/releases/index.d.ts +14 -0
  339. package/lib/commands/releases/index.js +124 -0
  340. package/lib/commands/releases/info.d.ts +15 -0
  341. package/lib/commands/releases/info.js +56 -0
  342. package/lib/commands/releases/output.d.ts +13 -0
  343. package/lib/commands/releases/output.js +37 -0
  344. package/lib/commands/releases/rollback.d.ts +14 -0
  345. package/lib/commands/releases/rollback.js +48 -0
  346. package/lib/commands/run/detached.d.ts +7 -8
  347. package/lib/commands/run/detached.js +16 -20
  348. package/lib/commands/run/index.d.ts +10 -11
  349. package/lib/commands/run/index.js +16 -17
  350. package/lib/commands/run/inside.d.ts +5 -7
  351. package/lib/commands/run/inside.js +10 -14
  352. package/lib/commands/spaces/create.d.ts +22 -0
  353. package/lib/commands/spaces/create.js +73 -0
  354. package/lib/commands/spaces/destroy.d.ts +14 -0
  355. package/lib/commands/spaces/destroy.js +49 -0
  356. package/lib/commands/spaces/drains/get.d.ts +12 -0
  357. package/lib/commands/spaces/drains/get.js +27 -0
  358. package/lib/commands/spaces/drains/set.d.ts +14 -0
  359. package/lib/commands/spaces/drains/set.js +29 -0
  360. package/lib/commands/spaces/hosts.d.ts +14 -0
  361. package/lib/commands/spaces/hosts.js +37 -0
  362. package/lib/commands/spaces/index.d.ts +16 -0
  363. package/lib/commands/spaces/index.js +55 -0
  364. package/lib/commands/spaces/info.d.ts +14 -0
  365. package/lib/commands/spaces/info.js +47 -0
  366. package/lib/commands/spaces/outbound-rules/add.d.ts +15 -0
  367. package/lib/commands/spaces/outbound-rules/add.js +81 -0
  368. package/lib/commands/spaces/outbound-rules/index.d.ts +15 -0
  369. package/lib/commands/spaces/outbound-rules/index.js +49 -0
  370. package/lib/commands/spaces/outbound-rules/remove.d.ts +17 -0
  371. package/lib/commands/spaces/outbound-rules/remove.js +53 -0
  372. package/lib/commands/spaces/peerings/accept.d.ts +15 -0
  373. package/lib/commands/spaces/peerings/accept.js +36 -0
  374. package/lib/commands/spaces/peerings/destroy.d.ts +15 -0
  375. package/lib/commands/spaces/peerings/destroy.js +45 -0
  376. package/lib/commands/spaces/peerings/index.d.ts +13 -0
  377. package/lib/commands/spaces/peerings/index.js +33 -0
  378. package/lib/commands/spaces/peerings/info.d.ts +15 -0
  379. package/lib/commands/spaces/peerings/info.js +59 -0
  380. package/lib/commands/spaces/ps.d.ts +15 -0
  381. package/lib/commands/spaces/ps.js +82 -0
  382. package/lib/commands/spaces/rename.d.ts +11 -0
  383. package/lib/commands/spaces/rename.js +26 -0
  384. package/lib/commands/spaces/topology.d.ts +32 -0
  385. package/lib/commands/spaces/topology.js +89 -0
  386. package/lib/commands/spaces/transfer.d.ts +11 -0
  387. package/lib/commands/spaces/transfer.js +35 -0
  388. package/lib/commands/spaces/trusted-ips/add.d.ts +16 -0
  389. package/lib/commands/spaces/trusted-ips/add.js +43 -0
  390. package/lib/commands/spaces/trusted-ips/index.d.ts +15 -0
  391. package/lib/commands/spaces/trusted-ips/index.js +52 -0
  392. package/lib/commands/spaces/trusted-ips/remove.d.ts +15 -0
  393. package/lib/commands/spaces/trusted-ips/remove.js +44 -0
  394. package/lib/commands/spaces/vpn/config.d.ts +14 -0
  395. package/lib/commands/spaces/vpn/config.js +54 -0
  396. package/lib/commands/spaces/vpn/connect.d.ts +15 -0
  397. package/lib/commands/spaces/vpn/connect.js +45 -0
  398. package/lib/commands/spaces/vpn/connections.d.ts +17 -0
  399. package/lib/commands/spaces/vpn/connections.js +57 -0
  400. package/lib/commands/spaces/vpn/destroy.d.ts +14 -0
  401. package/lib/commands/spaces/vpn/destroy.js +35 -0
  402. package/lib/commands/spaces/vpn/info.d.ts +16 -0
  403. package/lib/commands/spaces/vpn/info.js +82 -0
  404. package/lib/commands/spaces/vpn/update.d.ts +14 -0
  405. package/lib/commands/spaces/vpn/update.js +36 -0
  406. package/lib/commands/spaces/vpn/wait.d.ts +13 -0
  407. package/lib/commands/spaces/vpn/wait.js +53 -0
  408. package/lib/commands/spaces/wait.d.ts +17 -0
  409. package/lib/commands/spaces/wait.js +89 -0
  410. package/lib/commands/status.js +4 -4
  411. package/lib/commands/teams/index.d.ts +9 -0
  412. package/lib/commands/teams/index.js +29 -0
  413. package/lib/global_telemetry.js +10 -4
  414. package/lib/hooks/postrun/performance_analytics.js +5 -4
  415. package/lib/hooks/prerun/analytics.js +3 -0
  416. package/lib/lib/addons/addons_wait.d.ts +78 -0
  417. package/lib/lib/addons/addons_wait.js +56 -0
  418. package/lib/lib/addons/create_addon.d.ts +7 -0
  419. package/lib/lib/addons/create_addon.js +59 -0
  420. package/lib/lib/addons/destroy_addon.d.ts +3 -0
  421. package/lib/lib/addons/destroy_addon.js +48 -0
  422. package/lib/lib/addons/resolve.d.ts +38 -0
  423. package/lib/lib/addons/resolve.js +179 -0
  424. package/lib/lib/addons/util.d.ts +9 -0
  425. package/lib/lib/addons/util.js +72 -0
  426. package/lib/lib/api.d.ts +1 -1
  427. package/lib/lib/apps/app-transfer.d.ts +10 -0
  428. package/lib/lib/apps/app-transfer.js +35 -0
  429. package/lib/lib/apps/error_info.d.ts +7 -0
  430. package/lib/lib/apps/error_info.js +185 -0
  431. package/lib/lib/autocomplete/completions.d.ts +4 -0
  432. package/lib/lib/autocomplete/completions.js +6 -1
  433. package/lib/lib/buildpacks/buildpacks.js +3 -4
  434. package/lib/lib/certs/certificate_details.d.ts +2 -0
  435. package/lib/lib/certs/certificate_details.js +37 -0
  436. package/lib/lib/certs/display_table.d.ts +2 -0
  437. package/lib/lib/certs/display_table.js +51 -0
  438. package/lib/lib/certs/domains.d.ts +3 -0
  439. package/lib/lib/certs/domains.js +45 -0
  440. package/lib/lib/certs/flags.d.ts +7 -0
  441. package/lib/lib/certs/flags.js +42 -0
  442. package/lib/lib/certs/format_date.d.ts +1 -0
  443. package/lib/lib/certs/format_date.js +11 -0
  444. package/lib/lib/certs/get_cert_and_key.d.ts +9 -0
  445. package/lib/lib/certs/get_cert_and_key.js +11 -0
  446. package/lib/lib/ci/git.d.ts +7 -1
  447. package/lib/lib/ci/git.js +44 -1
  448. package/lib/lib/ci/interfaces/kolkrabbi.d.ts +1 -1
  449. package/lib/lib/ci/source.js +3 -3
  450. package/lib/lib/ci/test-run.js +2 -2
  451. package/lib/lib/ci/validate.d.ts +2 -0
  452. package/lib/lib/ci/validate.js +10 -0
  453. package/lib/lib/config/quote.js +1 -1
  454. package/lib/lib/confirmCommand.d.ts +1 -0
  455. package/lib/lib/confirmCommand.js +23 -0
  456. package/lib/lib/container/debug.d.ts +2 -0
  457. package/lib/lib/container/debug.js +5 -0
  458. package/lib/lib/container/docker_helper.d.ts +24 -0
  459. package/lib/lib/container/docker_helper.js +168 -0
  460. package/lib/lib/container/streamer.d.ts +1 -0
  461. package/lib/lib/container/streamer.js +31 -0
  462. package/lib/lib/domains/domains.d.ts +6 -0
  463. package/lib/lib/domains/domains.js +104 -0
  464. package/lib/lib/git/git.d.ts +3 -0
  465. package/lib/lib/git/git.js +19 -0
  466. package/lib/lib/git/push.d.ts +1 -0
  467. package/lib/lib/git/push.js +6 -0
  468. package/lib/lib/local/run-foreman.d.ts +1 -0
  469. package/lib/lib/local/run-foreman.js +229 -1
  470. package/lib/lib/members/util.d.ts +3 -0
  471. package/lib/lib/members/util.js +25 -0
  472. package/lib/lib/members/utils.d.ts +2 -0
  473. package/lib/lib/members/utils.js +14 -0
  474. package/lib/lib/notify.d.ts +1 -0
  475. package/lib/lib/notify.js +23 -0
  476. package/lib/lib/orgs/utils.d.ts +5 -0
  477. package/lib/lib/orgs/utils.js +24 -0
  478. package/lib/lib/pg/backups.d.ts +17 -0
  479. package/lib/lib/pg/backups.js +164 -0
  480. package/lib/lib/pg/bastion.d.ts +29 -0
  481. package/lib/lib/pg/bastion.js +121 -0
  482. package/lib/lib/pg/config.d.ts +2 -0
  483. package/lib/lib/pg/config.js +13 -0
  484. package/lib/lib/pg/download.d.ts +5 -0
  485. package/lib/lib/pg/download.js +34 -0
  486. package/lib/lib/pg/fetcher.d.ts +39 -0
  487. package/lib/lib/pg/fetcher.js +137 -0
  488. package/lib/lib/pg/host.d.ts +1 -0
  489. package/lib/lib/pg/host.js +7 -0
  490. package/lib/lib/pg/psql.d.ts +48 -0
  491. package/lib/lib/pg/psql.js +252 -0
  492. package/lib/lib/pg/push_pull.d.ts +13 -0
  493. package/lib/lib/pg/push_pull.js +118 -0
  494. package/lib/lib/pg/setter.d.ts +16 -0
  495. package/lib/lib/pg/setter.js +65 -0
  496. package/lib/lib/pg/types.d.ts +230 -0
  497. package/lib/lib/pg/types.js +2 -0
  498. package/lib/lib/pg/util.d.ts +36 -0
  499. package/lib/lib/pg/util.js +183 -0
  500. package/lib/lib/redis/api.d.ts +65 -0
  501. package/lib/lib/redis/api.js +122 -0
  502. package/lib/lib/releases/output.d.ts +1 -0
  503. package/lib/lib/releases/output.js +14 -0
  504. package/lib/lib/releases/releases.d.ts +6 -0
  505. package/lib/lib/releases/releases.js +32 -0
  506. package/lib/lib/releases/status_helper.d.ts +5 -0
  507. package/lib/lib/releases/status_helper.js +25 -0
  508. package/lib/lib/run/dyno.js +2 -2
  509. package/lib/lib/run/log-displayer.d.ts +1 -1
  510. package/lib/lib/spaces/format.d.ts +4 -0
  511. package/lib/lib/spaces/format.js +60 -0
  512. package/lib/lib/spaces/hosts.d.ts +9 -0
  513. package/lib/lib/spaces/hosts.js +34 -0
  514. package/lib/lib/spaces/outbound-rules.d.ts +4 -0
  515. package/lib/lib/spaces/outbound-rules.js +78 -0
  516. package/lib/lib/spaces/parsers.d.ts +8 -0
  517. package/lib/lib/spaces/parsers.js +17 -0
  518. package/lib/lib/spaces/peering.d.ts +4 -0
  519. package/lib/lib/spaces/peering.js +53 -0
  520. package/lib/lib/spaces/spaces.d.ts +4 -0
  521. package/lib/lib/spaces/spaces.js +37 -0
  522. package/lib/lib/spaces/vpn-connections.d.ts +2 -0
  523. package/lib/lib/spaces/vpn-connections.js +22 -0
  524. package/lib/lib/teamUtils.d.ts +3 -0
  525. package/lib/lib/teamUtils.js +18 -0
  526. package/lib/lib/time.d.ts +2 -0
  527. package/lib/lib/time.js +29 -0
  528. package/lib/lib/types/app_errors.d.ts +6 -0
  529. package/lib/lib/types/app_errors.js +2 -0
  530. package/lib/lib/types/domain.d.ts +61 -0
  531. package/lib/lib/types/domain.js +5 -0
  532. package/lib/lib/types/favorites.d.ts +7 -0
  533. package/lib/lib/types/favorites.js +2 -0
  534. package/lib/lib/types/notifications.d.ts +20 -0
  535. package/lib/lib/types/notifications.js +2 -0
  536. package/lib/lib/utils/multisort.d.ts +32 -0
  537. package/lib/lib/utils/multisort.js +66 -0
  538. package/lib/lib/utils/uuid-validate.d.ts +1 -0
  539. package/lib/lib/utils/uuid-validate.js +7 -0
  540. package/lib/user-config.js +2 -2
  541. package/oclif.manifest.json +12920 -2534
  542. package/package.json +111 -60
  543. package/lib/lib/buildpacks/push.d.ts +0 -0
  544. package/lib/lib/buildpacks/push.js +0 -4
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const color_1 = require("@heroku-cli/color");
4
+ const command_1 = require("@heroku-cli/command");
5
+ const core_1 = require("@oclif/core");
6
+ const host_1 = require("../../lib/pg/host");
7
+ const backups_1 = require("../../lib/pg/backups");
8
+ const fetcher_1 = require("../../lib/pg/fetcher");
9
+ const util_1 = require("../../lib/pg/util");
10
+ const confirmCommand_1 = require("../../lib/confirmCommand");
11
+ const getAttachmentInfo = async function (heroku, db, app) {
12
+ if (db.match(/^postgres:\/\//)) {
13
+ const conn = (0, util_1.parsePostgresConnectionString)(db);
14
+ const host = `${conn.host}:${conn.port}`;
15
+ return {
16
+ name: conn.database ? `database ${conn.database} on ${host}` : `database on ${host}`,
17
+ url: db,
18
+ confirm: conn.database || conn.host,
19
+ };
20
+ }
21
+ const attachment = await (0, fetcher_1.getAttachment)(heroku, app, db);
22
+ if (!attachment)
23
+ throw new Error(`${db} not found on ${color_1.default.magenta(app)}`);
24
+ const { body: addon } = await heroku.get(`/addons/${attachment.addon.name}`);
25
+ const { body: config } = await heroku.get(`/apps/${attachment.app.name}/config-vars`);
26
+ const formattedConfig = Object.fromEntries(Object.entries(config).map(([k, v]) => [k.toUpperCase(), v]));
27
+ return {
28
+ name: attachment.name.replace(/^HEROKU_POSTGRESQL_/, '')
29
+ .replace(/_URL$/, ''),
30
+ url: formattedConfig[attachment.name.toUpperCase() + '_URL'],
31
+ attachment: Object.assign(Object.assign({}, attachment), { addon }),
32
+ confirm: app,
33
+ };
34
+ };
35
+ class Copy extends command_1.Command {
36
+ async run() {
37
+ var _a;
38
+ const { flags, args } = await this.parse(Copy);
39
+ const { 'wait-interval': waitInterval, verbose, confirm, app } = flags;
40
+ const pgbackups = (0, backups_1.default)(app, this.heroku);
41
+ const interval = Math.max(3, Number.parseInt(waitInterval || '0')) || 3;
42
+ const [source, target] = await Promise.all([getAttachmentInfo(this.heroku, args.source, app), getAttachmentInfo(this.heroku, args.target, app)]);
43
+ if (source.url === target.url)
44
+ throw new Error('Cannot copy database onto itself');
45
+ await (0, confirmCommand_1.default)(target.confirm || args.target, confirm, `WARNING: Destructive action\nThis command will remove all data from ${color_1.default.yellow(target.name)}\nData from ${color_1.default.yellow(source.name)} will then be transferred to ${color_1.default.yellow(target.name)}`);
46
+ core_1.ux.action.start(`Starting copy of ${color_1.default.yellow(source.name)} to ${color_1.default.yellow(target.name)}`);
47
+ const attachment = target.attachment || source.attachment;
48
+ if (!attachment) {
49
+ throw new Error('Heroku PostgreSQL database must be source or target');
50
+ }
51
+ const { body: copy } = await this.heroku.post(`/client/v11/databases/${attachment.addon.id}/transfers`, {
52
+ body: {
53
+ from_name: source.name, from_url: source.url, to_name: target.name, to_url: target.url,
54
+ },
55
+ hostname: (0, host_1.default)(),
56
+ });
57
+ core_1.ux.action.stop();
58
+ if (source.attachment) {
59
+ const { body: credentials } = await this.heroku.get(`/postgres/v0/databases/${source.attachment.addon.name}/credentials`, {
60
+ hostname: (0, host_1.default)(),
61
+ headers: {
62
+ Authorization: `Basic ${Buffer.from(`:${this.heroku.auth}`).toString('base64')}`,
63
+ },
64
+ });
65
+ if (credentials.length > 1) {
66
+ core_1.ux.warn('pg:copy will only copy your default credential and the data it has access to. Any additional credentials and data that only they can access will not be copied.');
67
+ }
68
+ }
69
+ await pgbackups.wait('Copying', copy.uuid, interval, verbose, ((_a = attachment.addon.app) === null || _a === void 0 ? void 0 : _a.name) || app);
70
+ }
71
+ }
72
+ exports.default = Copy;
73
+ Copy.topic = 'pg';
74
+ Copy.description = 'copy all data from source db to target';
75
+ Copy.help = 'at least one of the databases must be a Heroku PostgreSQL DB';
76
+ Copy.flags = {
77
+ 'wait-interval': command_1.flags.string(),
78
+ verbose: command_1.flags.boolean(),
79
+ confirm: command_1.flags.string(),
80
+ app: command_1.flags.app({ required: true }),
81
+ remote: command_1.flags.remote(),
82
+ };
83
+ Copy.args = {
84
+ source: core_1.Args.string({ required: true }),
85
+ target: core_1.Args.string({ required: true }),
86
+ };
@@ -0,0 +1,14 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Create extends Command {
3
+ static topic: string;
4
+ static description: string;
5
+ static flags: {
6
+ name: import("@oclif/core/lib/interfaces").OptionFlag<string, 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
+ run(): Promise<void>;
14
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const color_1 = require("@heroku-cli/color");
4
+ const command_1 = require("@heroku-cli/command");
5
+ const core_1 = require("@oclif/core");
6
+ const tsheredoc_1 = require("tsheredoc");
7
+ const fetcher_1 = require("../../../lib/pg/fetcher");
8
+ const host_1 = require("../../../lib/pg/host");
9
+ const util_1 = require("../../../lib/pg/util");
10
+ class Create extends command_1.Command {
11
+ async run() {
12
+ const { flags, args } = await this.parse(Create);
13
+ const { app, name } = flags;
14
+ const { addon: db } = await (0, fetcher_1.getAttachment)(this.heroku, app, args.database);
15
+ if ((0, util_1.essentialPlan)(db)) {
16
+ throw new Error("You can't create a custom credential on Essential-tier databases.");
17
+ }
18
+ const data = { name };
19
+ core_1.ux.action.start(`Creating credential ${color_1.default.cyan.bold(name)}`);
20
+ await this.heroku.post(`/postgres/v0/databases/${db.name}/credentials`, { hostname: (0, host_1.default)(), body: data });
21
+ core_1.ux.action.stop();
22
+ const attachCmd = `heroku addons:attach ${db.name} --credential ${name} -a ${app}`;
23
+ const psqlCmd = `heroku pg:psql ${db.name} -a ${app}`;
24
+ core_1.ux.log((0, tsheredoc_1.default)(`
25
+
26
+ Please attach the credential to the apps you want to use it in by running ${color_1.default.cyan.bold(attachCmd)}.
27
+ Please define the new grants for the credential within Postgres: ${color_1.default.cyan.bold(psqlCmd)}.`));
28
+ }
29
+ }
30
+ exports.default = Create;
31
+ Create.topic = 'pg';
32
+ Create.description = 'create credential within database\nExample:\n\n heroku pg:credentials:create postgresql-something-12345 --name new-cred-name\n';
33
+ Create.flags = {
34
+ name: command_1.flags.string({ char: 'n', required: true, description: 'name of the new credential within the database' }),
35
+ app: command_1.flags.app({ required: true }),
36
+ remote: command_1.flags.remote(),
37
+ };
38
+ Create.args = {
39
+ database: core_1.Args.string(),
40
+ };
@@ -0,0 +1,16 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Destroy extends Command {
3
+ static topic: string;
4
+ static description: string;
5
+ static example: string;
6
+ static flags: {
7
+ name: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
8
+ confirm: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
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
+ static args: {
13
+ database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const color_1 = require("@heroku-cli/color");
4
+ const command_1 = require("@heroku-cli/command");
5
+ const core_1 = require("@oclif/core");
6
+ const util_1 = require("../../../lib/pg/util");
7
+ const fetcher_1 = require("../../../lib/pg/fetcher");
8
+ const host_1 = require("../../../lib/pg/host");
9
+ const confirmCommand_1 = require("../../../lib/confirmCommand");
10
+ class Destroy extends command_1.Command {
11
+ async run() {
12
+ const { flags, args } = await this.parse(Destroy);
13
+ const { database } = args;
14
+ const { app, name, confirm } = flags;
15
+ if (name === 'default') {
16
+ throw new Error('Default credential cannot be destroyed.');
17
+ }
18
+ const db = await (0, fetcher_1.getAddon)(this.heroku, app, database);
19
+ if ((0, util_1.essentialPlan)(db)) {
20
+ throw new Error("You can't destroy the default credential on Essential-tier databases.");
21
+ }
22
+ const { body: attachments } = await this.heroku.get(`/addons/${db.name}/addon-attachments`);
23
+ const credAttachments = attachments.filter(a => a.namespace === `credential:${name}`);
24
+ const credAttachmentApps = Array.from(new Set(credAttachments.map(a => { var _a; return (_a = a.app) === null || _a === void 0 ? void 0 : _a.name; })));
25
+ if (credAttachmentApps.length > 0)
26
+ throw new Error(`Credential ${name} must be detached from the app${credAttachmentApps.length > 1 ? 's' : ''} ${credAttachmentApps.map(appName => color_1.default.app(appName || ''))
27
+ .join(', ')} before destroying.`);
28
+ await (0, confirmCommand_1.default)(app, confirm);
29
+ core_1.ux.action.start(`Destroying credential ${color_1.default.cyan.bold(name)}`);
30
+ await this.heroku.delete(`/postgres/v0/databases/${db.name}/credentials/${encodeURIComponent(name)}`, { hostname: (0, host_1.default)() });
31
+ core_1.ux.action.stop();
32
+ core_1.ux.log(`The credential has been destroyed within ${db.name}.`);
33
+ core_1.ux.log(`Database objects owned by ${name} will be assigned to the default credential.`);
34
+ }
35
+ }
36
+ exports.default = Destroy;
37
+ Destroy.topic = 'pg';
38
+ Destroy.description = 'destroy credential within database';
39
+ Destroy.example = '$ heroku pg:credentials:destroy postgresql-transparent-56874 --name cred-name -a woodstock-production';
40
+ Destroy.flags = {
41
+ name: command_1.flags.string({ char: 'n', required: true, description: 'unique identifier for the credential' }),
42
+ confirm: command_1.flags.string({ char: 'c' }),
43
+ app: command_1.flags.app({ required: true }),
44
+ remote: command_1.flags.remote(),
45
+ };
46
+ Destroy.args = {
47
+ database: core_1.Args.string(),
48
+ };
@@ -0,0 +1,15 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class RepairDefault extends Command {
3
+ static topic: string;
4
+ static description: string;
5
+ static example: string;
6
+ static flags: {
7
+ confirm: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
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
+ static args: {
12
+ database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const command_1 = require("@heroku-cli/command");
4
+ const core_1 = require("@oclif/core");
5
+ const fetcher_1 = require("../../../lib/pg/fetcher");
6
+ const util_1 = require("../../../lib/pg/util");
7
+ const confirmCommand_1 = require("../../../lib/confirmCommand");
8
+ const tsheredoc_1 = require("tsheredoc");
9
+ const host_1 = require("../../../lib/pg/host");
10
+ class RepairDefault extends command_1.Command {
11
+ async run() {
12
+ const { flags, args } = await this.parse(RepairDefault);
13
+ const { app, confirm } = flags;
14
+ const { database } = args;
15
+ const db = await (0, fetcher_1.getAddon)(this.heroku, app, database);
16
+ if ((0, util_1.essentialPlan)(db))
17
+ throw new Error("You can't perform this operation on Essential-tier databases.");
18
+ await (0, confirmCommand_1.default)(app, confirm, (0, tsheredoc_1.default)(`
19
+ Destructive Action
20
+ Ownership of all database objects owned by additional credentials will be transferred to the default credential.
21
+ This command will also grant the default credential admin option for all additional credentials.
22
+ `));
23
+ core_1.ux.action.start('Resetting permissions and object ownership for default role to factory settings');
24
+ await this.heroku.post(`/postgres/v0/databases/${db.name}/repair-default`, { hostname: (0, host_1.default)() });
25
+ core_1.ux.action.stop();
26
+ }
27
+ }
28
+ exports.default = RepairDefault;
29
+ RepairDefault.topic = 'pg';
30
+ RepairDefault.description = 'repair the permissions of the default credential within database';
31
+ RepairDefault.example = '$ heroku pg:credentials:repair-default postgresql-something-12345';
32
+ RepairDefault.flags = {
33
+ confirm: command_1.flags.string({ char: 'c' }),
34
+ app: command_1.flags.app({ required: true }),
35
+ remote: command_1.flags.remote(),
36
+ };
37
+ RepairDefault.args = {
38
+ database: core_1.Args.string(),
39
+ };
@@ -0,0 +1,16 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Rotate extends Command {
3
+ static topic: string;
4
+ static description: string;
5
+ static flags: {
6
+ name: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
7
+ all: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
8
+ confirm: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
9
+ force: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
+ app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
11
+ };
12
+ static args: {
13
+ database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const color_1 = require("@heroku-cli/color");
4
+ const command_1 = require("@heroku-cli/command");
5
+ const core_1 = require("@oclif/core");
6
+ const confirmCommand_1 = require("../../../lib/confirmCommand");
7
+ const fetcher_1 = require("../../../lib/pg/fetcher");
8
+ const host_1 = require("../../../lib/pg/host");
9
+ const util_1 = require("../../../lib/pg/util");
10
+ class Rotate extends command_1.Command {
11
+ async run() {
12
+ const { flags, args } = await this.parse(Rotate);
13
+ const { app, all, confirm, name, force } = flags;
14
+ const { addon: db } = await (0, fetcher_1.getAttachment)(this.heroku, app, args.database);
15
+ const warnings = [];
16
+ const cred = name || 'default';
17
+ if (all && name !== undefined) {
18
+ throw new Error('cannot pass both --all and --name');
19
+ }
20
+ if ((0, util_1.legacyEssentialPlan)(db) && cred !== 'default') {
21
+ throw new Error('Legacy Essential-tier databases do not support named credentials.');
22
+ }
23
+ if (all && force) {
24
+ warnings.push('This forces rotation on all credentials including the default credential.');
25
+ }
26
+ let { body: attachments } = await this.heroku.get(`/addons/${db.name}/addon-attachments`);
27
+ if (name) {
28
+ attachments = attachments.filter(a => a.namespace === `credential:${cred}`);
29
+ }
30
+ if (!all) {
31
+ warnings.push(`The password for the ${cred} credential will rotate.`);
32
+ }
33
+ if (all || force || cred === 'default') {
34
+ warnings.push('Connections will be reset and applications will be restarted.');
35
+ }
36
+ else {
37
+ warnings.push('Connections older than 30 minutes will be reset, and a temporary rotation username will be used during the process.');
38
+ }
39
+ if (force) {
40
+ warnings.push(`Any followers lagging in replication (see ${color_1.default.cyan.bold('heroku pg:info')}) will be inaccessible until caught up.`);
41
+ }
42
+ if (attachments.length > 0) {
43
+ const uniqueAttachments = [...new Set(attachments.map(attachment => color_1.default.app(attachment.app.name || '')))]
44
+ .sort()
45
+ .join(', ');
46
+ warnings.push(`This command will affect the app${(attachments.length > 1) ? 's' : ''} ${uniqueAttachments}.`);
47
+ }
48
+ await (0, confirmCommand_1.default)(app, confirm, `Destructive Action\n${warnings.join('\n')}`);
49
+ const options = {
50
+ hostname: (0, host_1.default)(),
51
+ body: { forced: force !== null && force !== void 0 ? force : undefined },
52
+ headers: {
53
+ Authorization: `Basic ${Buffer.from(`:${this.heroku.auth}`).toString('base64')}`,
54
+ },
55
+ };
56
+ if (all) {
57
+ core_1.ux.action.start(`Rotating all credentials on ${color_1.default.yellow(db.name)}`);
58
+ await this.heroku.post(`/postgres/v0/databases/${db.name}/credentials_rotation`, options);
59
+ }
60
+ else {
61
+ core_1.ux.action.start(`Rotating ${cred} on ${color_1.default.yellow(db.name)}`);
62
+ await this.heroku.post(`/postgres/v0/databases/${db.name}/credentials/${encodeURIComponent(cred)}/credentials_rotation`, options);
63
+ }
64
+ core_1.ux.action.stop();
65
+ }
66
+ }
67
+ exports.default = Rotate;
68
+ Rotate.topic = 'pg';
69
+ Rotate.description = 'rotate the database credentials';
70
+ Rotate.flags = {
71
+ name: command_1.flags.string({
72
+ char: 'n',
73
+ description: 'which credential to rotate (default credentials if not specified and --all is not used)',
74
+ }),
75
+ all: command_1.flags.boolean({ description: 'rotate all credentials', exclusive: ['name'] }),
76
+ confirm: command_1.flags.string({ char: 'c' }),
77
+ force: command_1.flags.boolean({ description: 'forces rotating the targeted credentials' }),
78
+ app: command_1.flags.app({ required: true }),
79
+ };
80
+ Rotate.args = {
81
+ database: core_1.Args.string(),
82
+ };
@@ -0,0 +1,14 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Url extends Command {
3
+ static topic: string;
4
+ static description: string;
5
+ static flags: {
6
+ name: import("@oclif/core/lib/interfaces").OptionFlag<string, 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
+ run(): Promise<void>;
14
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const color_1 = require("@heroku-cli/color");
4
+ const command_1 = require("@heroku-cli/command");
5
+ const core_1 = require("@oclif/core");
6
+ const util_1 = require("../../../lib/pg/util");
7
+ const fetcher_1 = require("../../../lib/pg/fetcher");
8
+ const host_1 = require("../../../lib/pg/host");
9
+ const url_1 = require("url");
10
+ const tsheredoc_1 = require("tsheredoc");
11
+ class Url extends command_1.Command {
12
+ async run() {
13
+ const { flags, args } = await this.parse(Url);
14
+ const { app, name } = flags;
15
+ const { database } = args;
16
+ const db = await (0, fetcher_1.getAddon)(this.heroku, app, database);
17
+ if ((0, util_1.legacyEssentialPlan)(db) && name !== 'default') {
18
+ core_1.ux.error('Legacy Essential-tier databases do not support named credentials.');
19
+ }
20
+ const { body: credInfo } = await this.heroku.get(`/postgres/v0/databases/${db.name}/credentials/${encodeURIComponent(name)}`, {
21
+ hostname: (0, host_1.default)(),
22
+ headers: {
23
+ Authorization: `Basic ${Buffer.from(`:${this.heroku.auth}`).toString('base64')}`,
24
+ },
25
+ });
26
+ const activeCreds = credInfo.credentials.find(c => c.state === 'active');
27
+ if (!activeCreds) {
28
+ core_1.ux.error(`Could not find any active credentials for ${name}`, { exit: 1 });
29
+ }
30
+ const creds = Object.assign({}, db, {
31
+ database: credInfo.database, host: credInfo.host, port: credInfo.port,
32
+ }, {
33
+ user: activeCreds === null || activeCreds === void 0 ? void 0 : activeCreds.user, password: activeCreds === null || activeCreds === void 0 ? void 0 : activeCreds.password,
34
+ });
35
+ const connUrl = new url_1.URL(`postgres://${creds.host}/${creds.database}`);
36
+ connUrl.port = creds.port.toString();
37
+ if (creds.user && creds.password) {
38
+ connUrl.username = creds.user;
39
+ connUrl.password = creds.password;
40
+ }
41
+ core_1.ux.log((0, tsheredoc_1.default)(`
42
+ Connection information for ${color_1.default.yellow(name)} credential.
43
+ Connection info string:
44
+ "dbname=${creds.database} host=${creds.host} port=${creds.port} user=${creds.user} password=${creds.password} sslmode=require"
45
+ Connection URL:
46
+ ${connUrl}
47
+ `));
48
+ }
49
+ }
50
+ exports.default = Url;
51
+ Url.topic = 'pg';
52
+ Url.description = 'show information on a database credential';
53
+ Url.flags = {
54
+ name: command_1.flags.string({
55
+ char: 'n',
56
+ description: 'which credential to show (default credentials if not specified)',
57
+ default: 'default',
58
+ }),
59
+ app: command_1.flags.app({ required: true }),
60
+ remote: command_1.flags.remote(),
61
+ };
62
+ Url.args = {
63
+ database: core_1.Args.string(),
64
+ };
@@ -0,0 +1,16 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ import { CredentialInfo, CredentialsInfo } from '../../lib/pg/types';
3
+ export default class Credentials extends Command {
4
+ static topic: string;
5
+ static description: string;
6
+ static flags: {
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
+ run(): Promise<void>;
14
+ protected sortByDefaultAndName(credentials: CredentialsInfo): CredentialsInfo;
15
+ protected isDefaultCredential(cred: CredentialInfo): boolean;
16
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const command_1 = require("@heroku-cli/command");
4
+ const core_1 = require("@oclif/core");
5
+ const host_1 = require("../../lib/pg/host");
6
+ const fetcher_1 = require("../../lib/pg/fetcher");
7
+ const util_1 = require("../../lib/pg/util");
8
+ class Credentials extends command_1.Command {
9
+ async run() {
10
+ const { flags, args } = await this.parse(Credentials);
11
+ const { app } = flags;
12
+ const { database } = args;
13
+ const addon = await (0, fetcher_1.getAddon)(this.heroku, app, database);
14
+ const { body: credentials } = await this.heroku.get(`/postgres/v0/databases/${addon.id}/credentials`, {
15
+ hostname: (0, host_1.default)(),
16
+ headers: {
17
+ Authorization: `Basic ${Buffer.from(`:${this.heroku.auth}`).toString('base64')}`,
18
+ },
19
+ });
20
+ const sortedCredentials = this.sortByDefaultAndName(credentials);
21
+ const { body: attachments } = await this.heroku.get(`/addons/${addon.id}/addon-attachments`);
22
+ const presentCredential = (cred) => {
23
+ let credAttachments = [];
24
+ if (cred.name === 'default') {
25
+ credAttachments = attachments.filter(a => a.namespace === null);
26
+ }
27
+ else {
28
+ credAttachments = attachments.filter(a => a.namespace === `credential:${cred.name}`);
29
+ }
30
+ return (0, util_1.presentCredentialAttachments)(app, credAttachments, sortedCredentials, cred.name);
31
+ };
32
+ core_1.ux.table(credentials, {
33
+ Credential: {
34
+ get: presentCredential,
35
+ },
36
+ State: {
37
+ get: cred => cred.state,
38
+ },
39
+ });
40
+ }
41
+ sortByDefaultAndName(credentials) {
42
+ return credentials.sort((a, b) => {
43
+ const isDefaultA = this.isDefaultCredential(a);
44
+ const isDefaultB = this.isDefaultCredential(b);
45
+ return isDefaultB < isDefaultA ? -1 : (isDefaultA < isDefaultB ? 1 : a.name.localeCompare(b.name));
46
+ });
47
+ }
48
+ isDefaultCredential(cred) {
49
+ return cred.name === 'default';
50
+ }
51
+ }
52
+ exports.default = Credentials;
53
+ Credentials.topic = 'pg';
54
+ Credentials.description = 'show information on credentials in the database';
55
+ Credentials.flags = {
56
+ app: command_1.flags.app({ required: true }),
57
+ remote: command_1.flags.remote(),
58
+ };
59
+ Credentials.args = {
60
+ database: core_1.Args.string(),
61
+ };
@@ -0,0 +1,18 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Diagnose extends Command {
3
+ static topic: string;
4
+ static description: string;
5
+ static flags: {
6
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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|REPORT_ID': import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
12
+ };
13
+ run(): Promise<void>;
14
+ private displayReport;
15
+ private display;
16
+ private generateParams;
17
+ private generateReport;
18
+ }
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const command_1 = require("@heroku-cli/command");
4
+ const core_1 = require("@oclif/core");
5
+ const util_1 = require("@oclif/core/lib/util");
6
+ const tsheredoc_1 = require("tsheredoc");
7
+ const fetcher_1 = require("../../lib/pg/fetcher");
8
+ const host_1 = require("../../lib/pg/host");
9
+ const util_2 = require("../../lib/pg/util");
10
+ const color_1 = require("@heroku-cli/color");
11
+ const uuid_validate_1 = require("../../lib/utils/uuid-validate");
12
+ const PGDIAGNOSE_HOST = process.env.PGDIAGNOSE_URL || 'pgdiagnose.herokai.com';
13
+ class Diagnose extends command_1.Command {
14
+ async run() {
15
+ const { flags, args } = await this.parse(Diagnose);
16
+ const id = args['DATABASE|REPORT_ID'];
17
+ let report;
18
+ if (id && (0, uuid_validate_1.uuidValidate)(id)) {
19
+ ({ body: report } = await this.heroku.get(`/reports/${encodeURIComponent(id)}`, { hostname: PGDIAGNOSE_HOST }));
20
+ }
21
+ else {
22
+ report = await this.generateReport(id, flags.app);
23
+ }
24
+ this.displayReport(report, flags.json);
25
+ }
26
+ displayReport(report, json) {
27
+ if (json) {
28
+ core_1.ux.styledJSON(report);
29
+ return;
30
+ }
31
+ core_1.ux.log(`Report ${report.id} for ${report.app}::${report.database}\navailable for one month after creation on ${report.created_at}\n`);
32
+ this.display(report.checks.filter(c => c.status === 'red'));
33
+ this.display(report.checks.filter(c => c.status === 'yellow'));
34
+ this.display(report.checks.filter(c => c.status === 'green'));
35
+ this.display(report.checks.filter(c => !['red', 'yellow', 'green'].includes(c.status)));
36
+ }
37
+ display(checks) {
38
+ checks.forEach(check => {
39
+ var _a;
40
+ const colorFn = color_1.default[check.status] || ((txt) => txt);
41
+ core_1.ux.log(colorFn(`${check.status.toUpperCase()}: ${check.name}`));
42
+ const isNonEmptyArray = Array.isArray(check.results) && check.results.length > 0;
43
+ const resultsKeys = Object.keys((_a = check.results) !== null && _a !== void 0 ? _a : {});
44
+ if (check.status === 'green' || (!isNonEmptyArray && resultsKeys.length === 0)) {
45
+ return;
46
+ }
47
+ if (isNonEmptyArray) {
48
+ const keys = Object.keys(check.results[0]);
49
+ const cols = {};
50
+ keys.forEach(key => {
51
+ cols[(0, util_1.capitalize)(key)] = {
52
+ get: (row) => row[key],
53
+ };
54
+ });
55
+ core_1.ux.table(check.results, cols);
56
+ }
57
+ else {
58
+ const [key] = resultsKeys;
59
+ core_1.ux.log(`${key.split('_')
60
+ .map(s => (0, util_1.capitalize)(s))
61
+ .join(' ')} ${check.results[key]}`);
62
+ }
63
+ });
64
+ }
65
+ async generateParams(url, db, dbName) {
66
+ const base_params = {
67
+ url,
68
+ plan: db.plan.name.split(':')[1],
69
+ app: db.app.name,
70
+ database: dbName,
71
+ };
72
+ if (!(0, util_2.essentialPlan)(db)) {
73
+ const { body: metrics } = await this.heroku.get(`/client/v11/databases/${db.id}/metrics`, { hostname: (0, host_1.default)() });
74
+ base_params.metrics = metrics;
75
+ const { body: burstData } = await this.heroku.get(`/client/v11/databases/${db.id}/burst_status`, { hostname: (0, host_1.default)() });
76
+ if (burstData && Object.keys(burstData).length > 0) {
77
+ base_params.burst_data_present = true;
78
+ base_params.burst_status = burstData.burst_status;
79
+ }
80
+ }
81
+ return base_params;
82
+ }
83
+ async generateReport(database, app) {
84
+ const attachment = await (0, fetcher_1.getAttachment)(this.heroku, app, database);
85
+ const { addon: db } = attachment;
86
+ const { body: config } = await this.heroku.get(`/apps/${app}/config-vars`);
87
+ const { url } = (0, util_2.getConnectionDetails)(attachment, config);
88
+ const dbName = (0, util_2.getConfigVarNameFromAttachment)(attachment, config);
89
+ const body = await this.generateParams(url, db, dbName);
90
+ const { body: report } = await this.heroku.post('/reports', { hostname: PGDIAGNOSE_HOST, body });
91
+ return report;
92
+ }
93
+ }
94
+ exports.default = Diagnose;
95
+ Diagnose.topic = 'pg';
96
+ Diagnose.description = (0, tsheredoc_1.default)(`
97
+ run or view diagnostics report
98
+ defaults to DATABASE_URL database if no DATABASE is specified
99
+ if REPORT_ID is specified instead, a previous report is displayed
100
+
101
+ `);
102
+ Diagnose.flags = {
103
+ json: command_1.flags.boolean({ description: 'format output as JSON' }),
104
+ app: command_1.flags.app({ required: true }),
105
+ remote: command_1.flags.remote(),
106
+ };
107
+ Diagnose.args = {
108
+ 'DATABASE|REPORT_ID': core_1.Args.string(),
109
+ };