heroku 9.0.0-dev.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) 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 +20 -0
  13. package/lib/commands/addons/create.js +96 -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 +2 -1
  43. package/lib/commands/apps/favorites/add.js +1 -0
  44. package/lib/commands/apps/favorites/remove.d.ts +2 -1
  45. package/lib/commands/apps/favorites/remove.js +1 -0
  46. package/lib/commands/apps/index.d.ts +16 -0
  47. package/lib/commands/apps/index.js +119 -0
  48. package/lib/commands/apps/info.d.ts +19 -0
  49. package/lib/commands/apps/info.js +162 -0
  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 +15 -0
  57. package/lib/commands/apps/open.js +30 -0
  58. package/lib/commands/apps/rename.d.ts +16 -0
  59. package/lib/commands/apps/rename.js +51 -0
  60. package/lib/commands/apps/stacks/index.d.ts +3 -2
  61. package/lib/commands/apps/stacks/index.js +2 -1
  62. package/lib/commands/apps/stacks/set.d.ts +4 -4
  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.d.ts +3 -3
  70. package/lib/commands/authorizations/create.js +5 -1
  71. package/lib/commands/authorizations/info.d.ts +1 -1
  72. package/lib/commands/authorizations/info.js +5 -1
  73. package/lib/commands/authorizations/revoke.d.ts +1 -1
  74. package/lib/commands/authorizations/revoke.js +5 -1
  75. package/lib/commands/authorizations/rotate.d.ts +1 -1
  76. package/lib/commands/authorizations/rotate.js +5 -1
  77. package/lib/commands/authorizations/update.d.ts +4 -4
  78. package/lib/commands/authorizations/update.js +5 -1
  79. package/lib/commands/autocomplete/doctor.js +2 -2
  80. package/lib/commands/autocomplete/options.d.ts +2 -2
  81. package/lib/commands/autocomplete/options.js +2 -2
  82. package/lib/commands/autocomplete/script.d.ts +1 -1
  83. package/lib/commands/buildpacks/add.d.ts +4 -4
  84. package/lib/commands/buildpacks/clear.d.ts +2 -2
  85. package/lib/commands/buildpacks/index.d.ts +2 -2
  86. package/lib/commands/buildpacks/info.d.ts +1 -1
  87. package/lib/commands/buildpacks/remove.d.ts +4 -4
  88. package/lib/commands/buildpacks/search.d.ts +4 -4
  89. package/lib/commands/buildpacks/set.d.ts +4 -4
  90. package/lib/commands/buildpacks/versions.d.ts +1 -1
  91. package/lib/commands/certs/add.d.ts +16 -0
  92. package/lib/commands/certs/add.js +98 -0
  93. package/lib/commands/certs/auto/disable.d.ts +11 -0
  94. package/lib/commands/certs/auto/disable.js +34 -0
  95. package/lib/commands/certs/auto/enable.d.ts +11 -0
  96. package/lib/commands/certs/auto/enable.js +51 -0
  97. package/lib/commands/certs/auto/index.d.ts +12 -0
  98. package/lib/commands/certs/auto/index.js +94 -0
  99. package/lib/commands/certs/auto/refresh.d.ts +10 -0
  100. package/lib/commands/certs/auto/refresh.js +19 -0
  101. package/lib/commands/certs/generate.d.ts +26 -0
  102. package/lib/commands/certs/generate.js +111 -0
  103. package/lib/commands/certs/index.d.ts +10 -0
  104. package/lib/commands/certs/index.js +26 -0
  105. package/lib/commands/certs/info.d.ts +13 -0
  106. package/lib/commands/certs/info.js +43 -0
  107. package/lib/commands/certs/remove.d.ts +13 -0
  108. package/lib/commands/certs/remove.js +32 -0
  109. package/lib/commands/certs/update.d.ts +18 -0
  110. package/lib/commands/certs/update.js +54 -0
  111. package/lib/commands/ci/config/get.d.ts +4 -3
  112. package/lib/commands/ci/config/get.js +3 -2
  113. package/lib/commands/ci/config/index.d.ts +3 -2
  114. package/lib/commands/ci/config/index.js +3 -2
  115. package/lib/commands/ci/config/set.d.ts +3 -2
  116. package/lib/commands/ci/config/set.js +2 -1
  117. package/lib/commands/ci/config/unset.d.ts +3 -3
  118. package/lib/commands/ci/config/unset.js +3 -3
  119. package/lib/commands/ci/debug.d.ts +2 -2
  120. package/lib/commands/ci/index.d.ts +3 -2
  121. package/lib/commands/ci/index.js +1 -0
  122. package/lib/commands/ci/info.d.ts +5 -4
  123. package/lib/commands/ci/info.js +1 -0
  124. package/lib/commands/ci/last.d.ts +4 -3
  125. package/lib/commands/ci/last.js +1 -0
  126. package/lib/commands/ci/open.d.ts +3 -2
  127. package/lib/commands/ci/open.js +1 -0
  128. package/lib/commands/ci/rerun.d.ts +4 -3
  129. package/lib/commands/ci/rerun.js +1 -0
  130. package/lib/commands/ci/run.d.ts +2 -2
  131. package/lib/commands/clients/create.d.ts +2 -2
  132. package/lib/commands/clients/destroy.d.ts +1 -1
  133. package/lib/commands/clients/info.d.ts +1 -1
  134. package/lib/commands/clients/rotate.d.ts +1 -1
  135. package/lib/commands/clients/update.d.ts +3 -3
  136. package/lib/commands/config/edit.d.ts +3 -3
  137. package/lib/commands/config/get.d.ts +3 -3
  138. package/lib/commands/config/index.d.ts +2 -2
  139. package/lib/commands/config/set.d.ts +12 -0
  140. package/lib/commands/config/set.js +60 -0
  141. package/lib/commands/config/unset.d.ts +2 -2
  142. package/lib/commands/console.d.ts +4 -4
  143. package/lib/commands/container/index.d.ts +6 -0
  144. package/lib/commands/container/index.js +13 -0
  145. package/lib/commands/container/login.d.ts +9 -0
  146. package/lib/commands/container/login.js +57 -0
  147. package/lib/commands/container/logout.d.ts +9 -0
  148. package/lib/commands/container/logout.js +37 -0
  149. package/lib/commands/container/pull.d.ts +14 -0
  150. package/lib/commands/container/pull.js +43 -0
  151. package/lib/commands/container/push.d.ts +16 -0
  152. package/lib/commands/container/push.js +103 -0
  153. package/lib/commands/container/release.d.ts +14 -0
  154. package/lib/commands/container/release.js +91 -0
  155. package/lib/commands/container/rm.d.ts +13 -0
  156. package/lib/commands/container/rm.js +39 -0
  157. package/lib/commands/container/run.d.ts +15 -0
  158. package/lib/commands/container/run.js +66 -0
  159. package/lib/commands/dashboard.d.ts +7 -0
  160. package/lib/commands/dashboard.js +164 -0
  161. package/lib/commands/domains/add.d.ts +4 -4
  162. package/lib/commands/domains/clear.d.ts +2 -2
  163. package/lib/commands/domains/index.d.ts +10 -10
  164. package/lib/commands/domains/info.d.ts +3 -3
  165. package/lib/commands/domains/remove.d.ts +3 -3
  166. package/lib/commands/domains/update.d.ts +4 -4
  167. package/lib/commands/domains/wait.d.ts +3 -3
  168. package/lib/commands/drains/add.d.ts +12 -0
  169. package/lib/commands/drains/add.js +23 -0
  170. package/lib/commands/drains/index.d.ts +11 -0
  171. package/lib/commands/drains/index.js +50 -0
  172. package/lib/commands/drains/remove.d.ts +13 -0
  173. package/lib/commands/drains/remove.js +22 -0
  174. package/lib/commands/features/disable.d.ts +12 -0
  175. package/lib/commands/features/disable.js +30 -0
  176. package/lib/commands/features/enable.d.ts +12 -0
  177. package/lib/commands/features/enable.js +29 -0
  178. package/lib/commands/features/index.d.ts +10 -0
  179. package/lib/commands/features/index.js +37 -0
  180. package/lib/commands/features/info.d.ts +13 -0
  181. package/lib/commands/features/info.js +33 -0
  182. package/lib/commands/git/clone.d.ts +3 -3
  183. package/lib/commands/git/credentials.d.ts +1 -1
  184. package/lib/commands/git/remote.d.ts +2 -2
  185. package/lib/commands/keys/add.d.ts +14 -0
  186. package/lib/commands/keys/add.js +101 -0
  187. package/lib/commands/keys/clear.d.ts +5 -0
  188. package/lib/commands/keys/clear.js +17 -0
  189. package/lib/commands/keys/index.d.ts +9 -0
  190. package/lib/commands/keys/index.js +36 -0
  191. package/lib/commands/keys/remove.d.ts +9 -0
  192. package/lib/commands/keys/remove.js +29 -0
  193. package/lib/commands/labs/enable.d.ts +13 -0
  194. package/lib/commands/labs/enable.js +47 -0
  195. package/lib/commands/labs/index.d.ts +11 -0
  196. package/lib/commands/labs/index.js +71 -0
  197. package/lib/commands/labs/info.d.ts +14 -0
  198. package/lib/commands/labs/info.js +49 -0
  199. package/lib/commands/local/index.d.ts +5 -5
  200. package/lib/commands/local/index.js +8 -3
  201. package/lib/commands/local/run.d.ts +2 -2
  202. package/lib/commands/local/run.js +8 -3
  203. package/lib/commands/logs.d.ts +6 -6
  204. package/lib/commands/maintenance/index.d.ts +10 -0
  205. package/lib/commands/maintenance/index.js +19 -0
  206. package/lib/commands/maintenance/off.d.ts +10 -0
  207. package/lib/commands/maintenance/off.js +20 -0
  208. package/lib/commands/maintenance/on.d.ts +10 -0
  209. package/lib/commands/maintenance/on.js +20 -0
  210. package/lib/commands/members/add.d.ts +13 -0
  211. package/lib/commands/members/add.js +33 -0
  212. package/lib/commands/members/index.d.ts +12 -0
  213. package/lib/commands/members/index.js +76 -0
  214. package/lib/commands/members/remove.d.ts +10 -0
  215. package/lib/commands/members/remove.js +58 -0
  216. package/lib/commands/members/set.d.ts +11 -0
  217. package/lib/commands/members/set.js +21 -0
  218. package/lib/commands/notifications/index.d.ts +13 -0
  219. package/lib/commands/notifications/index.js +62 -0
  220. package/lib/commands/orgs/index.d.ts +11 -0
  221. package/lib/commands/orgs/index.js +27 -0
  222. package/lib/commands/orgs/open.d.ts +10 -0
  223. package/lib/commands/orgs/open.js +24 -0
  224. package/lib/commands/pg/backups/cancel.d.ts +15 -0
  225. package/lib/commands/pg/backups/cancel.js +49 -0
  226. package/lib/commands/pg/backups/capture.d.ts +15 -0
  227. package/lib/commands/pg/backups/capture.js +65 -0
  228. package/lib/commands/pg/backups/delete.d.ts +15 -0
  229. package/lib/commands/pg/backups/delete.js +38 -0
  230. package/lib/commands/pg/backups/download.d.ts +14 -0
  231. package/lib/commands/pg/backups/download.js +58 -0
  232. package/lib/commands/pg/backups/index.d.ts +20 -0
  233. package/lib/commands/pg/backups/index.js +129 -0
  234. package/lib/commands/pg/backups/info.d.ts +17 -0
  235. package/lib/commands/pg/backups/info.js +92 -0
  236. package/lib/commands/pg/backups/restore.d.ts +19 -0
  237. package/lib/commands/pg/backups/restore.js +107 -0
  238. package/lib/commands/pg/backups/schedule.d.ts +21 -0
  239. package/lib/commands/pg/backups/schedule.js +82 -0
  240. package/lib/commands/pg/backups/schedules.d.ts +10 -0
  241. package/lib/commands/pg/backups/schedules.js +31 -0
  242. package/lib/commands/pg/backups/unschedule.d.ts +13 -0
  243. package/lib/commands/pg/backups/unschedule.js +44 -0
  244. package/lib/commands/pg/backups/url.d.ts +13 -0
  245. package/lib/commands/pg/backups/url.js +41 -0
  246. package/lib/commands/pg/bloat.d.ts +13 -0
  247. package/lib/commands/pg/bloat.js +87 -0
  248. package/lib/commands/pg/blocking.d.ts +13 -0
  249. package/lib/commands/pg/blocking.js +42 -0
  250. package/lib/commands/pg/connection-pooling/attach.d.ts +15 -0
  251. package/lib/commands/pg/connection-pooling/attach.js +41 -0
  252. package/lib/commands/pg/copy.d.ts +18 -0
  253. package/lib/commands/pg/copy.js +86 -0
  254. package/lib/commands/pg/credentials/create.d.ts +14 -0
  255. package/lib/commands/pg/credentials/create.js +40 -0
  256. package/lib/commands/pg/credentials/destroy.d.ts +16 -0
  257. package/lib/commands/pg/credentials/destroy.js +48 -0
  258. package/lib/commands/pg/credentials/repair-default.d.ts +15 -0
  259. package/lib/commands/pg/credentials/repair-default.js +39 -0
  260. package/lib/commands/pg/credentials/rotate.d.ts +16 -0
  261. package/lib/commands/pg/credentials/rotate.js +82 -0
  262. package/lib/commands/pg/credentials/url.d.ts +14 -0
  263. package/lib/commands/pg/credentials/url.js +64 -0
  264. package/lib/commands/pg/credentials.d.ts +16 -0
  265. package/lib/commands/pg/credentials.js +61 -0
  266. package/lib/commands/pg/diagnose.d.ts +18 -0
  267. package/lib/commands/pg/diagnose.js +109 -0
  268. package/lib/commands/pg/info.d.ts +14 -0
  269. package/lib/commands/pg/info.js +92 -0
  270. package/lib/commands/pg/kill.d.ts +15 -0
  271. package/lib/commands/pg/kill.js +32 -0
  272. package/lib/commands/pg/killall.d.ts +13 -0
  273. package/lib/commands/pg/killall.js +26 -0
  274. package/lib/commands/pg/links/create.d.ts +15 -0
  275. package/lib/commands/pg/links/create.js +58 -0
  276. package/lib/commands/pg/links/destroy.d.ts +16 -0
  277. package/lib/commands/pg/links/destroy.js +42 -0
  278. package/lib/commands/pg/links/index.d.ts +13 -0
  279. package/lib/commands/pg/links/index.js +59 -0
  280. package/lib/commands/pg/locks.d.ts +15 -0
  281. package/lib/commands/pg/locks.js +53 -0
  282. package/lib/commands/pg/maintenance/index.d.ts +13 -0
  283. package/lib/commands/pg/maintenance/index.js +29 -0
  284. package/lib/commands/pg/maintenance/run.d.ts +14 -0
  285. package/lib/commands/pg/maintenance/run.js +37 -0
  286. package/lib/commands/pg/maintenance/window.d.ts +15 -0
  287. package/lib/commands/pg/maintenance/window.js +41 -0
  288. package/lib/commands/pg/outliers.d.ts +19 -0
  289. package/lib/commands/pg/outliers.js +97 -0
  290. package/lib/commands/pg/promote.d.ts +14 -0
  291. package/lib/commands/pg/promote.js +169 -0
  292. package/lib/commands/pg/ps.d.ts +14 -0
  293. package/lib/commands/pg/ps.js +52 -0
  294. package/lib/commands/pg/psql.d.ts +16 -0
  295. package/lib/commands/pg/psql.js +49 -0
  296. package/lib/commands/pg/pull.d.ts +18 -0
  297. package/lib/commands/pg/pull.js +87 -0
  298. package/lib/commands/pg/push.d.ts +18 -0
  299. package/lib/commands/pg/push.js +84 -0
  300. package/lib/commands/pg/reset.d.ts +15 -0
  301. package/lib/commands/pg/reset.js +44 -0
  302. package/lib/commands/pg/settings/auto-explain/log-analyze.d.ts +13 -0
  303. package/lib/commands/pg/settings/auto-explain/log-analyze.js +32 -0
  304. package/lib/commands/pg/settings/auto-explain/log-buffers.d.ts +13 -0
  305. package/lib/commands/pg/settings/auto-explain/log-buffers.js +30 -0
  306. package/lib/commands/pg/settings/auto-explain/log-min-duration.d.ts +16 -0
  307. package/lib/commands/pg/settings/auto-explain/log-min-duration.js +33 -0
  308. package/lib/commands/pg/settings/auto-explain/log-nested-statements.d.ts +12 -0
  309. package/lib/commands/pg/settings/auto-explain/log-nested-statements.js +25 -0
  310. package/lib/commands/pg/settings/auto-explain/log-triggers.d.ts +13 -0
  311. package/lib/commands/pg/settings/auto-explain/log-triggers.js +30 -0
  312. package/lib/commands/pg/settings/auto-explain/log-verbose.d.ts +17 -0
  313. package/lib/commands/pg/settings/auto-explain/log-verbose.js +33 -0
  314. package/lib/commands/pg/settings/auto-explain.d.ts +18 -0
  315. package/lib/commands/pg/settings/auto-explain.js +38 -0
  316. package/lib/commands/pg/settings/index.d.ts +13 -0
  317. package/lib/commands/pg/settings/index.js +34 -0
  318. package/lib/commands/pg/settings/log-connections.d.ts +17 -0
  319. package/lib/commands/pg/settings/log-connections.js +34 -0
  320. package/lib/commands/pg/settings/log-lock-waits.d.ts +13 -0
  321. package/lib/commands/pg/settings/log-lock-waits.js +31 -0
  322. package/lib/commands/pg/settings/log-min-duration-statement.d.ts +15 -0
  323. package/lib/commands/pg/settings/log-min-duration-statement.js +33 -0
  324. package/lib/commands/pg/settings/log-statement.d.ts +12 -0
  325. package/lib/commands/pg/settings/log-statement.js +30 -0
  326. package/lib/commands/pg/settings/track-functions.d.ts +12 -0
  327. package/lib/commands/pg/settings/track-functions.js +29 -0
  328. package/lib/commands/pg/unfollow.d.ts +14 -0
  329. package/lib/commands/pg/unfollow.js +40 -0
  330. package/lib/commands/pg/upgrade.d.ts +15 -0
  331. package/lib/commands/pg/upgrade.js +58 -0
  332. package/lib/commands/pg/vacuum-stats.d.ts +13 -0
  333. package/lib/commands/pg/vacuum-stats.js +65 -0
  334. package/lib/commands/pg/wait.d.ts +15 -0
  335. package/lib/commands/pg/wait.js +79 -0
  336. package/lib/commands/pipelines/add.d.ts +4 -4
  337. package/lib/commands/pipelines/connect.d.ts +2 -2
  338. package/lib/commands/pipelines/connect.js +1 -1
  339. package/lib/commands/pipelines/create.d.ts +5 -5
  340. package/lib/commands/pipelines/destroy.d.ts +1 -1
  341. package/lib/commands/pipelines/diff.d.ts +2 -2
  342. package/lib/commands/pipelines/diff.js +1 -1
  343. package/lib/commands/pipelines/info.d.ts +1 -1
  344. package/lib/commands/pipelines/open.d.ts +1 -1
  345. package/lib/commands/pipelines/promote.d.ts +3 -3
  346. package/lib/commands/pipelines/remove.d.ts +2 -2
  347. package/lib/commands/pipelines/rename.d.ts +2 -2
  348. package/lib/commands/pipelines/setup.d.ts +3 -3
  349. package/lib/commands/pipelines/transfer.d.ts +3 -3
  350. package/lib/commands/pipelines/update.d.ts +3 -3
  351. package/lib/commands/ps/autoscale/disable.d.ts +2 -2
  352. package/lib/commands/ps/autoscale/enable.d.ts +5 -5
  353. package/lib/commands/ps/index.d.ts +15 -0
  354. package/lib/commands/ps/index.js +195 -0
  355. package/lib/commands/ps/restart.d.ts +17 -0
  356. package/lib/commands/ps/restart.js +38 -0
  357. package/lib/commands/ps/scale.d.ts +13 -0
  358. package/lib/commands/ps/scale.js +108 -0
  359. package/lib/commands/ps/stop.d.ts +17 -0
  360. package/lib/commands/ps/stop.js +33 -0
  361. package/lib/commands/ps/type.d.ts +12 -0
  362. package/lib/commands/ps/type.js +163 -0
  363. package/lib/commands/ps/wait.d.ts +4 -4
  364. package/lib/commands/rake.d.ts +4 -4
  365. package/lib/commands/redis/cli.d.ts +15 -0
  366. package/lib/commands/redis/cli.js +204 -0
  367. package/lib/commands/redis/credentials.d.ts +14 -0
  368. package/lib/commands/redis/credentials.js +32 -0
  369. package/lib/commands/redis/info.d.ts +15 -0
  370. package/lib/commands/redis/info.js +25 -0
  371. package/lib/commands/redis/keyspace-notifications.d.ts +14 -0
  372. package/lib/commands/redis/keyspace-notifications.js +47 -0
  373. package/lib/commands/redis/maintenance.d.ts +16 -0
  374. package/lib/commands/redis/maintenance.js +63 -0
  375. package/lib/commands/redis/maxmemory.d.ts +14 -0
  376. package/lib/commands/redis/maxmemory.js +40 -0
  377. package/lib/commands/redis/promote.d.ts +13 -0
  378. package/lib/commands/redis/promote.js +39 -0
  379. package/lib/commands/redis/stats-reset.d.ts +14 -0
  380. package/lib/commands/redis/stats-reset.js +36 -0
  381. package/lib/commands/redis/timeout.d.ts +14 -0
  382. package/lib/commands/redis/timeout.js +35 -0
  383. package/lib/commands/redis/upgrade.d.ts +15 -0
  384. package/lib/commands/redis/upgrade.js +37 -0
  385. package/lib/commands/redis/wait.d.ts +14 -0
  386. package/lib/commands/redis/wait.js +60 -0
  387. package/lib/commands/releases/index.d.ts +14 -0
  388. package/lib/commands/releases/index.js +124 -0
  389. package/lib/commands/releases/info.d.ts +15 -0
  390. package/lib/commands/releases/info.js +56 -0
  391. package/lib/commands/releases/output.d.ts +13 -0
  392. package/lib/commands/releases/output.js +37 -0
  393. package/lib/commands/releases/rollback.d.ts +14 -0
  394. package/lib/commands/releases/rollback.js +48 -0
  395. package/lib/commands/reviewapps/disable.d.ts +3 -3
  396. package/lib/commands/reviewapps/enable.d.ts +3 -3
  397. package/lib/commands/run/detached.d.ts +7 -8
  398. package/lib/commands/run/detached.js +16 -20
  399. package/lib/commands/run/index.d.ts +10 -11
  400. package/lib/commands/run/index.js +16 -17
  401. package/lib/commands/run/inside.d.ts +5 -7
  402. package/lib/commands/run/inside.js +10 -14
  403. package/lib/commands/sessions/destroy.d.ts +1 -1
  404. package/lib/commands/spaces/create.d.ts +22 -0
  405. package/lib/commands/spaces/create.js +73 -0
  406. package/lib/commands/spaces/destroy.d.ts +14 -0
  407. package/lib/commands/spaces/destroy.js +49 -0
  408. package/lib/commands/spaces/drains/get.d.ts +12 -0
  409. package/lib/commands/spaces/drains/get.js +27 -0
  410. package/lib/commands/spaces/drains/set.d.ts +14 -0
  411. package/lib/commands/spaces/drains/set.js +29 -0
  412. package/lib/commands/spaces/hosts.d.ts +14 -0
  413. package/lib/commands/spaces/hosts.js +37 -0
  414. package/lib/commands/spaces/index.d.ts +16 -0
  415. package/lib/commands/spaces/index.js +55 -0
  416. package/lib/commands/spaces/info.d.ts +14 -0
  417. package/lib/commands/spaces/info.js +47 -0
  418. package/lib/commands/spaces/peerings/accept.d.ts +15 -0
  419. package/lib/commands/spaces/peerings/accept.js +36 -0
  420. package/lib/commands/spaces/peerings/destroy.d.ts +15 -0
  421. package/lib/commands/spaces/peerings/destroy.js +45 -0
  422. package/lib/commands/spaces/peerings/index.d.ts +13 -0
  423. package/lib/commands/spaces/peerings/index.js +33 -0
  424. package/lib/commands/spaces/peerings/info.d.ts +15 -0
  425. package/lib/commands/spaces/peerings/info.js +59 -0
  426. package/lib/commands/spaces/ps.d.ts +15 -0
  427. package/lib/commands/spaces/ps.js +82 -0
  428. package/lib/commands/spaces/rename.d.ts +11 -0
  429. package/lib/commands/spaces/rename.js +26 -0
  430. package/lib/commands/spaces/topology.d.ts +32 -0
  431. package/lib/commands/spaces/topology.js +89 -0
  432. package/lib/commands/spaces/transfer.d.ts +11 -0
  433. package/lib/commands/spaces/transfer.js +35 -0
  434. package/lib/commands/spaces/trusted-ips/add.d.ts +16 -0
  435. package/lib/commands/spaces/trusted-ips/add.js +43 -0
  436. package/lib/commands/spaces/trusted-ips/index.d.ts +15 -0
  437. package/lib/commands/spaces/trusted-ips/index.js +52 -0
  438. package/lib/commands/spaces/trusted-ips/remove.d.ts +15 -0
  439. package/lib/commands/spaces/trusted-ips/remove.js +44 -0
  440. package/lib/commands/spaces/vpn/config.d.ts +14 -0
  441. package/lib/commands/spaces/vpn/config.js +54 -0
  442. package/lib/commands/spaces/vpn/connect.d.ts +15 -0
  443. package/lib/commands/spaces/vpn/connect.js +48 -0
  444. package/lib/commands/spaces/vpn/connections.d.ts +17 -0
  445. package/lib/commands/spaces/vpn/connections.js +57 -0
  446. package/lib/commands/spaces/vpn/destroy.d.ts +14 -0
  447. package/lib/commands/spaces/vpn/destroy.js +38 -0
  448. package/lib/commands/spaces/vpn/info.d.ts +16 -0
  449. package/lib/commands/spaces/vpn/info.js +82 -0
  450. package/lib/commands/spaces/vpn/update.d.ts +14 -0
  451. package/lib/commands/spaces/vpn/update.js +39 -0
  452. package/lib/commands/spaces/vpn/wait.d.ts +16 -0
  453. package/lib/commands/spaces/vpn/wait.js +70 -0
  454. package/lib/commands/spaces/wait.d.ts +17 -0
  455. package/lib/commands/spaces/wait.js +89 -0
  456. package/lib/commands/status.js +4 -4
  457. package/lib/commands/teams/index.d.ts +9 -0
  458. package/lib/commands/teams/index.js +29 -0
  459. package/lib/commands/webhooks/add.d.ts +8 -8
  460. package/lib/commands/webhooks/deliveries/index.d.ts +4 -4
  461. package/lib/commands/webhooks/deliveries/info.d.ts +4 -4
  462. package/lib/commands/webhooks/events/index.d.ts +3 -3
  463. package/lib/commands/webhooks/events/info.d.ts +4 -4
  464. package/lib/commands/webhooks/index.d.ts +3 -3
  465. package/lib/commands/webhooks/info.d.ts +4 -4
  466. package/lib/commands/webhooks/remove.d.ts +4 -4
  467. package/lib/commands/webhooks/update.d.ts +9 -9
  468. package/lib/global_telemetry.js +10 -4
  469. package/lib/hooks/postrun/performance_analytics.js +5 -4
  470. package/lib/hooks/prerun/analytics.js +3 -0
  471. package/lib/lib/addons/addons_wait.d.ts +78 -0
  472. package/lib/lib/addons/addons_wait.js +56 -0
  473. package/lib/lib/addons/create_addon.d.ts +7 -0
  474. package/lib/lib/addons/create_addon.js +59 -0
  475. package/lib/lib/addons/destroy_addon.d.ts +3 -0
  476. package/lib/lib/addons/destroy_addon.js +48 -0
  477. package/lib/lib/addons/resolve.d.ts +39 -0
  478. package/lib/lib/addons/resolve.js +180 -0
  479. package/lib/lib/addons/util.d.ts +9 -0
  480. package/lib/lib/addons/util.js +72 -0
  481. package/lib/lib/apps/app-transfer.d.ts +10 -0
  482. package/lib/lib/apps/app-transfer.js +35 -0
  483. package/lib/lib/apps/error_info.d.ts +7 -0
  484. package/lib/lib/apps/error_info.js +185 -0
  485. package/lib/lib/autocomplete/base.d.ts +1 -1
  486. package/lib/lib/autocomplete/completions.d.ts +5 -1
  487. package/lib/lib/autocomplete/completions.js +6 -1
  488. package/lib/lib/certs/certificate_details.d.ts +2 -0
  489. package/lib/lib/certs/certificate_details.js +37 -0
  490. package/lib/lib/certs/display_table.d.ts +2 -0
  491. package/lib/lib/certs/display_table.js +51 -0
  492. package/lib/lib/certs/domains.d.ts +3 -0
  493. package/lib/lib/certs/domains.js +45 -0
  494. package/lib/lib/certs/flags.d.ts +7 -0
  495. package/lib/lib/certs/flags.js +42 -0
  496. package/lib/lib/certs/format_date.d.ts +1 -0
  497. package/lib/lib/certs/format_date.js +11 -0
  498. package/lib/lib/certs/get_cert_and_key.d.ts +9 -0
  499. package/lib/lib/certs/get_cert_and_key.js +11 -0
  500. package/lib/lib/ci/git.d.ts +7 -1
  501. package/lib/lib/ci/git.js +44 -1
  502. package/lib/lib/ci/interfaces/kolkrabbi.d.ts +1 -1
  503. package/lib/lib/ci/source.js +3 -3
  504. package/lib/lib/ci/test-run.js +2 -2
  505. package/lib/lib/config/quote.js +1 -1
  506. package/lib/lib/confirmCommand.d.ts +1 -0
  507. package/lib/lib/confirmCommand.js +23 -0
  508. package/lib/lib/container/debug.d.ts +2 -0
  509. package/lib/lib/container/debug.js +5 -0
  510. package/lib/lib/container/docker_helper.d.ts +24 -0
  511. package/lib/lib/container/docker_helper.js +168 -0
  512. package/lib/lib/container/helpers.d.ts +8 -0
  513. package/lib/lib/container/helpers.js +26 -0
  514. package/lib/lib/container/streamer.d.ts +1 -0
  515. package/lib/lib/container/streamer.js +31 -0
  516. package/lib/lib/domains/domains.d.ts +6 -0
  517. package/lib/lib/domains/domains.js +104 -0
  518. package/lib/lib/git/git.d.ts +3 -0
  519. package/lib/lib/git/git.js +22 -3
  520. package/lib/lib/local/run-foreman.d.ts +1 -0
  521. package/lib/lib/local/run-foreman.js +229 -1
  522. package/lib/lib/members/util.d.ts +3 -0
  523. package/lib/lib/members/util.js +25 -0
  524. package/lib/lib/members/utils.d.ts +2 -0
  525. package/lib/lib/members/utils.js +14 -0
  526. package/lib/lib/notify.d.ts +1 -0
  527. package/lib/lib/notify.js +23 -0
  528. package/lib/lib/orgs/utils.d.ts +5 -0
  529. package/lib/lib/orgs/utils.js +24 -0
  530. package/lib/lib/pg/backups.d.ts +17 -0
  531. package/lib/lib/pg/backups.js +164 -0
  532. package/lib/lib/pg/bastion.d.ts +29 -0
  533. package/lib/lib/pg/bastion.js +121 -0
  534. package/lib/lib/pg/config.d.ts +2 -0
  535. package/lib/lib/pg/config.js +13 -0
  536. package/lib/lib/pg/download.d.ts +5 -0
  537. package/lib/lib/pg/download.js +34 -0
  538. package/lib/lib/pg/fetcher.d.ts +39 -0
  539. package/lib/lib/pg/fetcher.js +138 -0
  540. package/lib/lib/pg/host.d.ts +1 -0
  541. package/lib/lib/pg/host.js +7 -0
  542. package/lib/lib/pg/psql.d.ts +48 -0
  543. package/lib/lib/pg/psql.js +252 -0
  544. package/lib/lib/pg/push_pull.d.ts +13 -0
  545. package/lib/lib/pg/push_pull.js +118 -0
  546. package/lib/lib/pg/setter.d.ts +16 -0
  547. package/lib/lib/pg/setter.js +65 -0
  548. package/lib/lib/pg/types.d.ts +230 -0
  549. package/lib/lib/pg/types.js +2 -0
  550. package/lib/lib/pg/util.d.ts +36 -0
  551. package/lib/lib/pg/util.js +183 -0
  552. package/lib/lib/redis/api.d.ts +65 -0
  553. package/lib/lib/redis/api.js +122 -0
  554. package/lib/lib/releases/output.d.ts +1 -0
  555. package/lib/lib/releases/output.js +14 -0
  556. package/lib/lib/releases/releases.d.ts +6 -0
  557. package/lib/lib/releases/releases.js +32 -0
  558. package/lib/lib/releases/status_helper.d.ts +5 -0
  559. package/lib/lib/releases/status_helper.js +25 -0
  560. package/lib/lib/run/dyno.js +2 -2
  561. package/lib/lib/run/log-displayer.d.ts +1 -1
  562. package/lib/lib/spaces/format.d.ts +4 -0
  563. package/lib/lib/spaces/format.js +60 -0
  564. package/lib/lib/spaces/hosts.d.ts +9 -0
  565. package/lib/lib/spaces/hosts.js +34 -0
  566. package/lib/lib/spaces/outbound-rules.d.ts +4 -0
  567. package/lib/lib/spaces/outbound-rules.js +78 -0
  568. package/lib/lib/spaces/parsers.d.ts +8 -0
  569. package/lib/lib/spaces/parsers.js +17 -0
  570. package/lib/lib/spaces/peering.d.ts +4 -0
  571. package/lib/lib/spaces/peering.js +53 -0
  572. package/lib/lib/spaces/spaces.d.ts +4 -0
  573. package/lib/lib/spaces/spaces.js +37 -0
  574. package/lib/lib/spaces/vpn-connections.d.ts +2 -0
  575. package/lib/lib/spaces/vpn-connections.js +22 -0
  576. package/lib/lib/teamUtils.d.ts +3 -0
  577. package/lib/lib/teamUtils.js +18 -0
  578. package/lib/lib/time.d.ts +2 -0
  579. package/lib/lib/time.js +29 -0
  580. package/lib/lib/types/app_errors.d.ts +6 -0
  581. package/lib/lib/types/app_errors.js +2 -0
  582. package/lib/lib/types/domain.d.ts +61 -0
  583. package/lib/lib/types/domain.js +5 -0
  584. package/lib/lib/types/notifications.d.ts +20 -0
  585. package/lib/lib/types/notifications.js +2 -0
  586. package/lib/lib/utils/multisort.d.ts +32 -0
  587. package/lib/lib/utils/multisort.js +66 -0
  588. package/lib/lib/utils/uuid-validate.d.ts +1 -0
  589. package/lib/lib/utils/uuid-validate.js +7 -0
  590. package/lib/user-config.js +2 -2
  591. package/oclif.manifest.json +12686 -2676
  592. package/package.json +115 -65
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable complexity */
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 tsheredoc_1 = require("tsheredoc");
8
+ const fetcher_1 = require("../../lib/pg/fetcher");
9
+ const host_1 = require("../../lib/pg/host");
10
+ class Promote extends command_1.Command {
11
+ async run() {
12
+ var _a, _b, _c;
13
+ const { flags, args } = await this.parse(Promote);
14
+ const { force, app } = flags;
15
+ const { database } = args;
16
+ const attachment = await (0, fetcher_1.getAttachment)(this.heroku, app, database);
17
+ core_1.ux.action.start(`Ensuring an alternate alias for existing ${color_1.default.green('DATABASE_URL')}`);
18
+ const { body: attachments } = await this.heroku.get(`/apps/${app}/addon-attachments`);
19
+ const current = attachments.find(a => a.name === 'DATABASE');
20
+ if (!current)
21
+ return;
22
+ // eslint-disable-next-line eqeqeq
23
+ if (((_a = current.addon) === null || _a === void 0 ? void 0 : _a.name) === attachment.addon.name && current.namespace == attachment.namespace) {
24
+ if (attachment.namespace) {
25
+ core_1.ux.error(`${color_1.default.cyan(attachment.name)} is already promoted on ${color_1.default.app(app)}`);
26
+ }
27
+ else {
28
+ core_1.ux.error(`${color_1.default.addon(attachment.addon.name)} is already promoted on ${color_1.default.app(app)}`);
29
+ }
30
+ }
31
+ const existing = attachments.filter(a => { var _a, _b; return ((_a = a.addon) === null || _a === void 0 ? void 0 : _a.id) === ((_b = current.addon) === null || _b === void 0 ? void 0 : _b.id) && a.namespace === current.namespace; })
32
+ .find(a => a.name !== 'DATABASE');
33
+ if (existing) {
34
+ core_1.ux.action.stop(color_1.default.green(existing.name + '_URL'));
35
+ }
36
+ else {
37
+ // The current add-on occupying the DATABASE attachment has no
38
+ // other attachments. In order to promote this database without
39
+ // error, we can create a secondary attachment, just-in-time.
40
+ const { body: backup } = await this.heroku.post('/addon-attachments', {
41
+ body: {
42
+ app: { name: app },
43
+ addon: { name: (_b = current.addon) === null || _b === void 0 ? void 0 : _b.name },
44
+ namespace: current.namespace,
45
+ confirm: app,
46
+ },
47
+ });
48
+ core_1.ux.action.stop(color_1.default.green(backup.name + '_URL'));
49
+ }
50
+ if (!force) {
51
+ const { body: status } = await this.heroku.get(`/client/v11/databases/${attachment.addon.id}/wait_status`, {
52
+ hostname: (0, host_1.default)(),
53
+ });
54
+ if (status['waiting?']) {
55
+ core_1.ux.error((0, tsheredoc_1.default)(`
56
+ Database cannot be promoted while in state: ${status.message}
57
+
58
+ Promoting this database can lead to application errors and outage. Please run ${color_1.default.cmd('heroku pg:wait')} to wait for database to become available.
59
+
60
+ To ignore this error, you can pass the --force flag to promote the database and risk application issues.
61
+ `));
62
+ }
63
+ }
64
+ let promotionMessage;
65
+ if (attachment.namespace) {
66
+ promotionMessage = `Promoting ${color_1.default.cyan(attachment.name)} to ${color_1.default.green('DATABASE_URL')} on ${color_1.default.app(app)}`;
67
+ }
68
+ else {
69
+ promotionMessage = `Promoting ${color_1.default.addon(attachment.addon.name)} to ${color_1.default.green('DATABASE_URL')} on ${color_1.default.app(app)}`;
70
+ }
71
+ core_1.ux.action.start(promotionMessage);
72
+ await this.heroku.post('/addon-attachments', {
73
+ body: {
74
+ name: 'DATABASE',
75
+ app: { name: app },
76
+ addon: { name: attachment.addon.name },
77
+ namespace: attachment.namespace || null,
78
+ confirm: app,
79
+ },
80
+ });
81
+ core_1.ux.action.stop();
82
+ const currentPooler = attachments.find(a => { var _a, _b; return a.namespace === 'connection-pooling:default' && ((_a = a.addon) === null || _a === void 0 ? void 0 : _a.id) === ((_b = current.addon) === null || _b === void 0 ? void 0 : _b.id) && a.name === 'DATABASE_CONNECTION_POOL'; });
83
+ if (currentPooler) {
84
+ core_1.ux.action.start('Reattaching pooler to new leader');
85
+ await this.heroku.post('/addon-attachments', {
86
+ body: {
87
+ name: currentPooler.name,
88
+ app: { name: app },
89
+ addon: { name: attachment.addon.name },
90
+ namespace: 'connection-pooling:default',
91
+ confirm: app,
92
+ },
93
+ });
94
+ core_1.ux.action.stop();
95
+ }
96
+ const { body: promotedDatabaseDetails } = await this.heroku.get(`/client/v11/databases/${attachment.addon.id}`, {
97
+ hostname: (0, host_1.default)(),
98
+ });
99
+ if (promotedDatabaseDetails.following) {
100
+ const unfollowLeaderCmd = `heroku pg:unfollow ${attachment.addon.name}`;
101
+ core_1.ux.warn((0, tsheredoc_1.default)(`
102
+ Your database has been promoted but it is currently a follower database in read-only mode.
103
+
104
+ Promoting a database with ${color_1.default.cmd('heroku pg:promote')} doesn't automatically unfollow its leader.
105
+
106
+ Use ${color_1.default.cmd(unfollowLeaderCmd)} to stop this follower from replicating from its leader (${color_1.default.yellow(promotedDatabaseDetails.leader)}) and convert it into a writable database.
107
+ `));
108
+ }
109
+ const { body: formation } = await this.heroku.get(`/apps/${app}/formation`);
110
+ const releasePhase = formation.find(process => process.type === 'release');
111
+ if (releasePhase) {
112
+ core_1.ux.action.start('Checking release phase');
113
+ const { body: releases } = await this.heroku.get(`/apps/${app}/releases`, {
114
+ partial: true,
115
+ headers: {
116
+ Range: 'version ..; max=5, order=desc',
117
+ },
118
+ });
119
+ const attach = releases.find(release => { var _a; return (_a = release.description) === null || _a === void 0 ? void 0 : _a.includes('Attach DATABASE'); });
120
+ const detach = releases.find(release => { var _a; return (_a = release.description) === null || _a === void 0 ? void 0 : _a.includes('Detach DATABASE'); });
121
+ if (!attach || !detach) {
122
+ core_1.ux.error('Unable to check release phase. Check your Attach DATABASE release for failures.');
123
+ }
124
+ const endTime = Date.now() + 900000; // 15 minutes from now
125
+ const [attachId, detachId] = [attach === null || attach === void 0 ? void 0 : attach.id, detach === null || detach === void 0 ? void 0 : detach.id];
126
+ while (true) {
127
+ const attach = await (0, fetcher_1.getRelease)(this.heroku, app, attachId);
128
+ if (attach && attach.status === 'succeeded') {
129
+ let msg = 'pg:promote succeeded.';
130
+ const detach = await (0, fetcher_1.getRelease)(this.heroku, app, detachId);
131
+ if (detach && detach.status === 'failed') {
132
+ msg += ` It is safe to ignore the failed ${detach.description} release.`;
133
+ }
134
+ core_1.ux.action.stop(msg);
135
+ return;
136
+ }
137
+ if (attach && attach.status === 'failed') {
138
+ let msg = `pg:promote failed because ${attach.description} release was unsuccessful. Your application is currently running `;
139
+ const detach = await (0, fetcher_1.getRelease)(this.heroku, app, detachId);
140
+ if (detach && detach.status === 'succeeded') {
141
+ msg += 'without an attached DATABASE_URL.';
142
+ }
143
+ else {
144
+ msg += `with ${(_c = current.addon) === null || _c === void 0 ? void 0 : _c.name} attached as DATABASE_URL.`;
145
+ }
146
+ msg += ' Check your release phase logs for failure causes.';
147
+ core_1.ux.action.stop(msg);
148
+ return;
149
+ }
150
+ if (Date.now() > endTime) {
151
+ core_1.ux.action.stop('timeout. Check your Attach DATABASE release for failures.');
152
+ return;
153
+ }
154
+ await new Promise(resolve => setTimeout(resolve, 5000));
155
+ }
156
+ }
157
+ }
158
+ }
159
+ exports.default = Promote;
160
+ Promote.topic = 'pg';
161
+ Promote.description = 'sets DATABASE as your DATABASE_URL';
162
+ Promote.flags = {
163
+ force: command_1.flags.boolean({ char: 'f' }),
164
+ app: command_1.flags.app({ required: true }),
165
+ remote: command_1.flags.remote(),
166
+ };
167
+ Promote.args = {
168
+ database: core_1.Args.string({ required: true }),
169
+ };
@@ -0,0 +1,14 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Ps extends Command {
3
+ static topic: string;
4
+ static description: string;
5
+ static flags: {
6
+ verbose: 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: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
@@ -0,0 +1,52 @@
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 tsheredoc_1 = require("tsheredoc");
6
+ const fetcher_1 = require("../../lib/pg/fetcher");
7
+ const psql_1 = require("../../lib/pg/psql");
8
+ class Ps extends command_1.Command {
9
+ async run() {
10
+ const { flags, args } = await this.parse(Ps);
11
+ const { database: databaseName } = args;
12
+ const { verbose, app } = flags;
13
+ const db = await (0, fetcher_1.database)(this.heroku, app, databaseName);
14
+ const num = Math.random();
15
+ const waitingMarker = `${num}${num}`;
16
+ const waitingQuery = (0, tsheredoc_1.default)(`
17
+ SELECT '${num}' || '${num}'
18
+ WHERE EXISTS
19
+ (SELECT 1
20
+ FROM information_schema.columns
21
+ WHERE table_schema = 'pg_catalog'
22
+ AND TABLE_NAME = 'pg_stat_activity'
23
+ AND COLUMN_NAME = 'waiting')
24
+ `);
25
+ const waitingOutput = await (0, psql_1.exec)(db, waitingQuery);
26
+ const waiting = waitingOutput.includes(waitingMarker) ? 'waiting' : 'wait_event IS NOT NULL AS waiting';
27
+ const query = (0, tsheredoc_1.default)(`SELECT pid,
28
+ state,
29
+ application_name AS SOURCE,
30
+ usename AS username,
31
+ age(now(), xact_start) AS running_for,
32
+ xact_start AS transaction_start, ${waiting}, query
33
+ FROM pg_stat_activity
34
+ WHERE query <> '<insufficient privilege>' ${verbose ? '' : "AND state <> 'idle'"}
35
+ AND pid <> pg_backend_pid()
36
+ ORDER BY query_start DESC
37
+ `);
38
+ const output = await (0, psql_1.exec)(db, query);
39
+ process.stdout.write(output);
40
+ }
41
+ }
42
+ exports.default = Ps;
43
+ Ps.topic = 'pg';
44
+ Ps.description = 'view active queries with execution time';
45
+ Ps.flags = {
46
+ verbose: command_1.flags.boolean({ char: 'v' }),
47
+ app: command_1.flags.app({ required: true }),
48
+ remote: command_1.flags.remote(),
49
+ };
50
+ Ps.args = {
51
+ database: core_1.Args.string(),
52
+ };
@@ -0,0 +1,16 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Psql extends Command {
3
+ static description: string;
4
+ static flags: {
5
+ command: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
6
+ file: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
7
+ credential: 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
+ static aliases: string[];
15
+ run(): Promise<void>;
16
+ }
@@ -0,0 +1,49 @@
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 fetcher_1 = require("../../lib/pg/fetcher");
7
+ const psql_1 = require("../../lib/pg/psql");
8
+ class Psql extends command_1.Command {
9
+ async run() {
10
+ const { flags, args } = await this.parse(Psql);
11
+ const { app, command, credential, file } = flags;
12
+ const namespace = credential ? `credential:${credential}` : undefined;
13
+ let db;
14
+ try {
15
+ db = await (0, fetcher_1.database)(this.heroku, app, args.database, namespace);
16
+ }
17
+ catch (error) {
18
+ if (namespace && error instanceof Error && error.message === "Couldn't find that addon.") {
19
+ throw new Error("Credential doesn't match, make sure credential is attached");
20
+ }
21
+ throw error;
22
+ }
23
+ console.error(`--> Connecting to ${color_1.default.yellow(db.attachment.addon.name)}`);
24
+ if (command) {
25
+ const output = await (0, psql_1.exec)(db, command);
26
+ process.stdout.write(output);
27
+ }
28
+ else if (file) {
29
+ const output = await (0, psql_1.execFile)(db, file);
30
+ process.stdout.write(output);
31
+ }
32
+ else {
33
+ await (0, psql_1.interactive)(db);
34
+ }
35
+ }
36
+ }
37
+ exports.default = Psql;
38
+ Psql.description = 'open a psql shell to the database';
39
+ Psql.flags = {
40
+ command: command_1.flags.string({ char: 'c', description: 'SQL command to run' }),
41
+ file: command_1.flags.string({ char: 'f', description: 'SQL file to run' }),
42
+ credential: command_1.flags.string({ description: 'credential to use' }),
43
+ app: command_1.flags.app({ required: true }),
44
+ remote: command_1.flags.remote(),
45
+ };
46
+ Psql.args = {
47
+ database: core_1.Args.string(),
48
+ };
49
+ Psql.aliases = ['psql'];
@@ -0,0 +1,18 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ import { ConnectionDetails } from '../../lib/pg/util';
3
+ export default class Pull extends Command {
4
+ static topic: string;
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ 'exclude-table-data': 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
+ source: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
14
+ target: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
15
+ };
16
+ run(): Promise<void>;
17
+ protected pull(sourceIn: ConnectionDetails, targetIn: ConnectionDetails, exclusions: string[]): Promise<void>;
18
+ }
@@ -0,0 +1,87 @@
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 util_1 = require("../../lib/pg/util");
9
+ const push_pull_1 = require("../../lib/pg/push_pull");
10
+ const node_child_process_1 = require("node:child_process");
11
+ const env = process.env;
12
+ class Pull extends command_1.Command {
13
+ async run() {
14
+ const { flags, args } = await this.parse(Pull);
15
+ const { app, 'exclude-table-data': excludeTableData } = flags;
16
+ const exclusions = (0, push_pull_1.parseExclusions)(excludeTableData);
17
+ const source = await (0, fetcher_1.database)(this.heroku, app, args.source);
18
+ const target = (0, util_1.parsePostgresConnectionString)(args.target);
19
+ core_1.ux.log(`Pulling ${color_1.default.cyan(source.attachment.addon.name)} to ${color_1.default.addon(args.target)}`);
20
+ await this.pull(source, target, exclusions);
21
+ core_1.ux.log('Pulling complete.');
22
+ }
23
+ async pull(sourceIn, targetIn, exclusions) {
24
+ await (0, push_pull_1.prepare)(targetIn);
25
+ const source = await (0, push_pull_1.maybeTunnel)(sourceIn);
26
+ const target = await (0, push_pull_1.maybeTunnel)(targetIn);
27
+ const exclude = exclusions.map(function (e) {
28
+ return '--exclude-table-data=' + e;
29
+ }).join(' ');
30
+ const dumpFlags = ['--verbose', '-F', 'c', '-Z', '0', '-N', '_heroku', ...(0, push_pull_1.connArgs)(source, true)];
31
+ if (exclude !== '')
32
+ dumpFlags.push(exclude);
33
+ const dumpOptions = {
34
+ env: Object.assign({ PGSSLMODE: 'prefer' }, env),
35
+ stdio: ['pipe', 'pipe', 2],
36
+ shell: true,
37
+ };
38
+ if (source.password)
39
+ dumpOptions.env.PGPASSWORD = source.password;
40
+ const restoreFlags = ['--verbose', '-F', 'c', '--no-acl', '--no-owner', ...(0, push_pull_1.connArgs)(target)];
41
+ const restoreOptions = {
42
+ env: Object.assign({}, env),
43
+ stdio: ['pipe', 'pipe', 2],
44
+ shell: true,
45
+ };
46
+ if (target.password)
47
+ restoreOptions.env.PGPASSWORD = target.password;
48
+ const pgDump = (0, node_child_process_1.spawn)('pg_dump', dumpFlags, dumpOptions);
49
+ const pgRestore = (0, node_child_process_1.spawn)('pg_restore', restoreFlags, restoreOptions);
50
+ await (0, push_pull_1.spawnPipe)(pgDump, pgRestore);
51
+ if (source._tunnel)
52
+ source._tunnel.close();
53
+ if (target._tunnel)
54
+ target._tunnel.close();
55
+ await (0, push_pull_1.verifyExtensionsMatch)(sourceIn, targetIn);
56
+ }
57
+ }
58
+ exports.default = Pull;
59
+ Pull.topic = 'pg';
60
+ Pull.description = (0, tsheredoc_1.default) `
61
+ pull Heroku database into local or remote database
62
+ Pull from SOURCE into TARGET.
63
+
64
+ TARGET must be one of:
65
+ * a database name (i.e. on a local PostgreSQL server) => TARGET must not exist and will be created
66
+ * a fully qualified URL to a local PostgreSQL server => TARGET must not exist and will be created
67
+ * a fully qualified URL to a remote PostgreSQL server => TARGET must exist and be empty
68
+
69
+ To delete a local database run ${color_1.default.cmd('dropdb TARGET')}.
70
+ To create an empty remote database, run ${color_1.default.cmd('createdb')} with connection command-line options (run ${color_1.default.cmd('createdb --help')} for details).
71
+ `;
72
+ Pull.examples = [(0, tsheredoc_1.default) `
73
+ # pull Heroku DB named postgresql-swimmingly-100 into local DB mylocaldb that must not exist
74
+ $ heroku pg:pull postgresql-swimmingly-100 mylocaldb --app sushi
75
+ `, (0, tsheredoc_1.default) `
76
+ # pull Heroku DB named postgresql-swimmingly-100 into empty remote DB at postgres://myhost/mydb
77
+ $ heroku pg:pull postgresql-swimmingly-100 postgres://myhost/mydb --app sushi
78
+ `];
79
+ Pull.flags = {
80
+ 'exclude-table-data': command_1.flags.string({ description: 'tables for which data should be excluded (use \';\' to split multiple names)', hasValue: true }),
81
+ app: command_1.flags.app({ required: true }),
82
+ remote: command_1.flags.remote(),
83
+ };
84
+ Pull.args = {
85
+ source: core_1.Args.string({ required: true }),
86
+ target: core_1.Args.string({ required: true }),
87
+ };
@@ -0,0 +1,18 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ import { ConnectionDetails } from '../../lib/pg/util';
3
+ export default class Push extends Command {
4
+ static topic: string;
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ 'exclude-table-data': 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
+ source: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
14
+ target: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
15
+ };
16
+ run(): Promise<void>;
17
+ protected push(sourceIn: ConnectionDetails, targetIn: ConnectionDetails, exclusions: string[]): Promise<void>;
18
+ }
@@ -0,0 +1,84 @@
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 util_1 = require("../../lib/pg/util");
9
+ const push_pull_1 = require("../../lib/pg/push_pull");
10
+ const node_child_process_1 = require("node:child_process");
11
+ const env = process.env;
12
+ class Push extends command_1.Command {
13
+ async run() {
14
+ const { flags, args } = await this.parse(Push);
15
+ const { app, 'exclude-table-data': excludeTableData } = flags;
16
+ const exclusions = (0, push_pull_1.parseExclusions)(excludeTableData);
17
+ const source = (0, util_1.parsePostgresConnectionString)(args.source);
18
+ const target = await (0, fetcher_1.database)(this.heroku, app, args.target);
19
+ core_1.ux.log(`Pushing ${color_1.default.cyan(args.source)} to ${color_1.default.addon(target.attachment.addon.name)}`);
20
+ await this.push(source, target, exclusions);
21
+ core_1.ux.log('Pushing complete.');
22
+ }
23
+ async push(sourceIn, targetIn, exclusions) {
24
+ await (0, push_pull_1.prepare)(targetIn);
25
+ const source = await (0, push_pull_1.maybeTunnel)(sourceIn);
26
+ const target = await (0, push_pull_1.maybeTunnel)(targetIn);
27
+ const exclude = exclusions.map(function (e) {
28
+ return '--exclude-table-data=' + e;
29
+ }).join(' ');
30
+ const dumpFlags = ['--verbose', '-F', 'c', '-Z', '0', '-N', '_heroku', ...(0, push_pull_1.connArgs)(source, true)];
31
+ if (exclude !== '')
32
+ dumpFlags.push(exclude);
33
+ const dumpOptions = {
34
+ env: Object.assign({ PGSSLMODE: 'prefer' }, env),
35
+ stdio: ['pipe', 'pipe', 2],
36
+ shell: true,
37
+ };
38
+ if (source.password)
39
+ dumpOptions.env.PGPASSWORD = source.password;
40
+ const restoreFlags = ['--verbose', '-F', 'c', '--no-acl', '--no-owner', ...(0, push_pull_1.connArgs)(target)];
41
+ const restoreOptions = {
42
+ env: Object.assign({}, env),
43
+ stdio: ['pipe', 'pipe', 2],
44
+ shell: true,
45
+ };
46
+ if (target.password)
47
+ restoreOptions.env.PGPASSWORD = target.password;
48
+ const pgDump = (0, node_child_process_1.spawn)('pg_dump', dumpFlags, dumpOptions);
49
+ const pgRestore = (0, node_child_process_1.spawn)('pg_restore', restoreFlags, restoreOptions);
50
+ await (0, push_pull_1.spawnPipe)(pgDump, pgRestore);
51
+ if (source._tunnel)
52
+ source._tunnel.close();
53
+ if (target._tunnel)
54
+ target._tunnel.close();
55
+ await (0, push_pull_1.verifyExtensionsMatch)(sourceIn, targetIn);
56
+ }
57
+ }
58
+ exports.default = Push;
59
+ Push.topic = 'pg';
60
+ Push.description = (0, tsheredoc_1.default) `
61
+ push local or remote into Heroku database
62
+ Push from SOURCE into TARGET. TARGET must be empty.
63
+
64
+ To empty a Heroku database for push run ${color_1.default.cmd('heroku pg:reset')}
65
+
66
+ SOURCE must be either the name of a database existing on your localhost or the
67
+ fully qualified URL of a remote database.
68
+ `;
69
+ Push.examples = [(0, tsheredoc_1.default) `
70
+ # push mylocaldb into a Heroku DB named postgresql-swimmingly-100
71
+ $ heroku pg:push mylocaldb postgresql-swimmingly-100 --app sushi
72
+ `, (0, tsheredoc_1.default) `
73
+ # push remote DB at postgres://myhost/mydb into a Heroku DB named postgresql-swimmingly-100
74
+ $ heroku pg:push postgres://myhost/mydb postgresql-swimmingly-100 --app sushi
75
+ `];
76
+ Push.flags = {
77
+ 'exclude-table-data': command_1.flags.string({ description: 'tables for which data should be excluded (use \';\' to split multiple names)', hasValue: true }),
78
+ app: command_1.flags.app({ required: true }),
79
+ remote: command_1.flags.remote(),
80
+ };
81
+ Push.args = {
82
+ source: core_1.Args.string({ required: true }),
83
+ target: core_1.Args.string({ required: true }),
84
+ };
@@ -0,0 +1,15 @@
1
+ import { Command } from '@heroku-cli/command';
2
+ export default class Reset extends Command {
3
+ static topic: string;
4
+ static description: string;
5
+ static flags: {
6
+ extensions: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
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,44 @@
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 host_1 = require("../../lib/pg/host");
8
+ const fetcher_1 = require("../../lib/pg/fetcher");
9
+ const tsheredoc_1 = require("tsheredoc");
10
+ class Reset extends command_1.Command {
11
+ async run() {
12
+ const { flags, args } = await this.parse(Reset);
13
+ const { app, confirm, extensions } = flags;
14
+ const db = await (0, fetcher_1.getAddon)(this.heroku, app, args.database);
15
+ let extensionsArray;
16
+ if (extensions) {
17
+ extensionsArray = extensions.split(',')
18
+ .map(ext => ext.trim()
19
+ .toLowerCase())
20
+ .sort();
21
+ }
22
+ await (0, confirmCommand_1.default)(app, confirm, (0, tsheredoc_1.default)(`
23
+ Destructive action
24
+ ${color_1.default.addon(db.name)} will lose all of its data
25
+ `));
26
+ core_1.ux.action.start(`Resetting ${color_1.default.addon(db.name)}`);
27
+ await this.heroku.put(`/client/v11/databases/${db.id}/reset`, {
28
+ body: { extensions: extensionsArray }, hostname: (0, host_1.default)(),
29
+ });
30
+ core_1.ux.action.stop();
31
+ }
32
+ }
33
+ exports.default = Reset;
34
+ Reset.topic = 'pg';
35
+ Reset.description = 'delete all data in DATABASE';
36
+ Reset.flags = {
37
+ extensions: command_1.flags.string({ char: 'e', description: 'comma-separated list of extensions to pre-install in the public schema' }),
38
+ confirm: command_1.flags.string({ char: 'c' }),
39
+ app: command_1.flags.app({ required: true }),
40
+ remote: command_1.flags.remote(),
41
+ };
42
+ Reset.args = {
43
+ database: core_1.Args.string(),
44
+ };
@@ -0,0 +1,13 @@
1
+ import { PGSettingsCommand, BooleanAsString } from '../../../../lib/pg/setter';
2
+ import { SettingKey, Setting } from '../../../../lib/pg/types';
3
+ export default class LogAnalyze extends PGSettingsCommand {
4
+ static topic: string;
5
+ static description: string;
6
+ static args: {
7
+ database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
8
+ value: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
9
+ };
10
+ protected settingKey: SettingKey;
11
+ protected convertValue(val: BooleanAsString): boolean;
12
+ protected explain(setting: Setting<boolean>): "EXPLAIN ANALYZE execution plans will be logged." | "EXPLAIN ANALYZE execution plans will not be logged.";
13
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const tsheredoc_1 = require("tsheredoc");
5
+ const setter_1 = require("../../../../lib/pg/setter");
6
+ class LogAnalyze extends setter_1.PGSettingsCommand {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.settingKey = 'auto_explain.log_analyze';
10
+ }
11
+ convertValue(val) {
12
+ return (0, setter_1.booleanConverter)(val);
13
+ }
14
+ explain(setting) {
15
+ if (setting.value) {
16
+ return 'EXPLAIN ANALYZE execution plans will be logged.';
17
+ }
18
+ return 'EXPLAIN ANALYZE execution plans will not be logged.';
19
+ }
20
+ }
21
+ exports.default = LogAnalyze;
22
+ LogAnalyze.topic = 'pg';
23
+ LogAnalyze.description = (0, tsheredoc_1.default)(`
24
+ Shows actual run times on the execution plan.
25
+ This is equivalent to calling EXPLAIN ANALYZE.
26
+
27
+ WARNING: EXPLAIN ANALYZE will be run on ALL queries, not just logged queries. This can cause significant performance impacts to your database and should be used with caution.
28
+ `);
29
+ LogAnalyze.args = {
30
+ database: core_1.Args.string(),
31
+ value: core_1.Args.string(),
32
+ };
@@ -0,0 +1,13 @@
1
+ import { BooleanAsString, PGSettingsCommand } from '../../../../lib/pg/setter';
2
+ import { Setting, SettingKey } from '../../../../lib/pg/types';
3
+ export default class LogBuffersWaits extends PGSettingsCommand {
4
+ static topic: string;
5
+ static description: string;
6
+ static args: {
7
+ database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
8
+ value: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
9
+ };
10
+ protected settingKey: SettingKey;
11
+ protected convertValue(val: BooleanAsString): boolean;
12
+ protected explain(setting: Setting<boolean>): "Buffer statistics have been enabled for auto_explain." | "Buffer statistics have been disabled for auto_explain.";
13
+ }