heroku 9.0.0-alpha.1 → 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.
- package/README.md +6 -11
- package/lib/commands/access/add.d.ts +14 -0
- package/lib/commands/access/add.js +55 -0
- package/lib/commands/access/index.d.ts +11 -0
- package/lib/commands/access/index.js +86 -0
- package/lib/commands/access/remove.d.ts +12 -0
- package/lib/commands/access/remove.js +25 -0
- package/lib/commands/access/update.d.ts +14 -0
- package/lib/commands/access/update.js +39 -0
- package/lib/commands/addons/attach.d.ts +16 -0
- package/lib/commands/addons/attach.js +51 -0
- package/lib/commands/addons/create.d.ts +19 -0
- package/lib/commands/addons/create.js +84 -0
- package/lib/commands/addons/destroy.d.ts +19 -0
- package/lib/commands/addons/destroy.js +61 -0
- package/lib/commands/addons/detach.d.ts +13 -0
- package/lib/commands/addons/detach.js +31 -0
- package/lib/commands/addons/docs.d.ts +14 -0
- package/lib/commands/addons/docs.js +36 -0
- package/lib/commands/addons/index.d.ts +16 -0
- package/lib/commands/addons/index.js +246 -0
- package/lib/commands/addons/info.d.ts +14 -0
- package/lib/commands/addons/info.js +44 -0
- package/lib/commands/addons/open.d.ts +75 -0
- package/lib/commands/addons/open.js +87 -0
- package/lib/commands/addons/plans.d.ts +12 -0
- package/lib/commands/addons/plans.js +47 -0
- package/lib/commands/addons/rename.d.ts +10 -0
- package/lib/commands/addons/rename.js +20 -0
- package/lib/commands/addons/services.d.ts +9 -0
- package/lib/commands/addons/services.js +34 -0
- package/lib/commands/addons/upgrade.d.ts +28 -0
- package/lib/commands/addons/upgrade.js +145 -0
- package/lib/commands/addons/wait.d.ts +14 -0
- package/lib/commands/addons/wait.js +70 -0
- package/lib/commands/apps/create.d.ts +2 -2
- package/lib/commands/apps/create.js +13 -6
- package/lib/commands/apps/destroy.d.ts +2 -1
- package/lib/commands/apps/destroy.js +4 -3
- package/lib/commands/apps/errors.d.ts +1 -0
- package/lib/commands/apps/errors.js +1 -0
- package/lib/commands/apps/favorites/add.d.ts +1 -0
- package/lib/commands/apps/favorites/add.js +1 -0
- package/lib/commands/apps/favorites/remove.d.ts +1 -0
- package/lib/commands/apps/favorites/remove.js +1 -0
- package/lib/commands/apps/index.d.ts +1 -1
- package/lib/commands/apps/index.js +1 -1
- package/lib/commands/apps/info.d.ts +2 -1
- package/lib/commands/apps/info.js +3 -4
- package/lib/commands/apps/join.d.ts +11 -0
- package/lib/commands/apps/join.js +25 -0
- package/lib/commands/apps/leave.d.ts +12 -0
- package/lib/commands/apps/leave.js +25 -0
- package/lib/commands/apps/lock.d.ts +11 -0
- package/lib/commands/apps/lock.js +30 -0
- package/lib/commands/apps/open.d.ts +2 -1
- package/lib/commands/apps/open.js +2 -1
- package/lib/commands/apps/rename.d.ts +2 -1
- package/lib/commands/apps/rename.js +2 -1
- package/lib/commands/apps/stacks/index.d.ts +2 -1
- package/lib/commands/apps/stacks/index.js +2 -1
- package/lib/commands/apps/stacks/set.d.ts +1 -1
- package/lib/commands/apps/stacks/set.js +1 -1
- package/lib/commands/apps/transfer.d.ts +17 -0
- package/lib/commands/apps/transfer.js +91 -0
- package/lib/commands/apps/unlock.d.ts +11 -0
- package/lib/commands/apps/unlock.js +30 -0
- package/lib/commands/auth/token.js +2 -1
- package/lib/commands/authorizations/create.js +5 -1
- package/lib/commands/authorizations/info.js +5 -1
- package/lib/commands/authorizations/revoke.js +5 -1
- package/lib/commands/authorizations/rotate.js +5 -1
- package/lib/commands/authorizations/update.js +5 -1
- package/lib/commands/autocomplete/doctor.js +2 -2
- package/lib/commands/autocomplete/options.js +2 -2
- package/lib/commands/certs/add.d.ts +16 -0
- package/lib/commands/certs/add.js +98 -0
- package/lib/commands/certs/auto/disable.d.ts +11 -0
- package/lib/commands/certs/auto/disable.js +34 -0
- package/lib/commands/certs/auto/enable.d.ts +11 -0
- package/lib/commands/certs/auto/enable.js +51 -0
- package/lib/commands/certs/auto/index.d.ts +12 -0
- package/lib/commands/certs/auto/index.js +94 -0
- package/lib/commands/certs/auto/refresh.d.ts +10 -0
- package/lib/commands/certs/auto/refresh.js +19 -0
- package/lib/commands/certs/generate.d.ts +26 -0
- package/lib/commands/certs/generate.js +111 -0
- package/lib/commands/certs/index.d.ts +10 -0
- package/lib/commands/certs/index.js +26 -0
- package/lib/commands/certs/info.d.ts +13 -0
- package/lib/commands/certs/info.js +43 -0
- package/lib/commands/certs/remove.d.ts +13 -0
- package/lib/commands/certs/remove.js +32 -0
- package/lib/commands/certs/update.d.ts +18 -0
- package/lib/commands/certs/update.js +54 -0
- package/lib/commands/ci/config/get.d.ts +1 -0
- package/lib/commands/ci/config/get.js +1 -0
- package/lib/commands/ci/config/set.d.ts +1 -0
- package/lib/commands/ci/config/set.js +1 -0
- package/lib/commands/ci/config/unset.d.ts +1 -0
- package/lib/commands/ci/config/unset.js +1 -0
- package/lib/commands/ci/index.d.ts +1 -0
- package/lib/commands/ci/index.js +1 -0
- package/lib/commands/ci/info.d.ts +1 -0
- package/lib/commands/ci/info.js +1 -0
- package/lib/commands/ci/last.d.ts +1 -0
- package/lib/commands/ci/last.js +1 -0
- package/lib/commands/ci/open.d.ts +1 -0
- package/lib/commands/ci/open.js +1 -0
- package/lib/commands/ci/rerun.d.ts +1 -0
- package/lib/commands/ci/rerun.js +1 -0
- package/lib/commands/config/set.d.ts +2 -1
- package/lib/commands/config/set.js +2 -1
- package/lib/commands/container/index.d.ts +6 -0
- package/lib/commands/container/index.js +13 -0
- package/lib/commands/container/login.d.ts +9 -0
- package/lib/commands/container/login.js +57 -0
- package/lib/commands/container/logout.d.ts +9 -0
- package/lib/commands/container/logout.js +37 -0
- package/lib/commands/container/pull.d.ts +14 -0
- package/lib/commands/container/pull.js +40 -0
- package/lib/commands/container/push.d.ts +16 -0
- package/lib/commands/container/push.js +101 -0
- package/lib/commands/container/release.d.ts +14 -0
- package/lib/commands/container/release.js +89 -0
- package/lib/commands/container/rm.d.ts +13 -0
- package/lib/commands/container/rm.js +36 -0
- package/lib/commands/container/run.d.ts +15 -0
- package/lib/commands/container/run.js +63 -0
- package/lib/commands/dashboard.d.ts +7 -0
- package/lib/commands/dashboard.js +164 -0
- package/lib/commands/domains/index.d.ts +2 -2
- package/lib/commands/drains/add.d.ts +1 -0
- package/lib/commands/drains/add.js +1 -0
- package/lib/commands/drains/index.d.ts +1 -0
- package/lib/commands/drains/index.js +1 -0
- package/lib/commands/drains/remove.d.ts +1 -0
- package/lib/commands/drains/remove.js +1 -0
- package/lib/commands/features/disable.d.ts +12 -0
- package/lib/commands/features/disable.js +30 -0
- package/lib/commands/features/enable.d.ts +12 -0
- package/lib/commands/features/enable.js +29 -0
- package/lib/commands/features/index.d.ts +10 -0
- package/lib/commands/features/index.js +37 -0
- package/lib/commands/features/info.d.ts +13 -0
- package/lib/commands/features/info.js +33 -0
- package/lib/commands/keys/add.d.ts +14 -0
- package/lib/commands/keys/add.js +101 -0
- package/lib/commands/keys/clear.d.ts +5 -0
- package/lib/commands/keys/clear.js +17 -0
- package/lib/commands/keys/index.d.ts +9 -0
- package/lib/commands/keys/index.js +36 -0
- package/lib/commands/keys/remove.d.ts +9 -0
- package/lib/commands/keys/remove.js +29 -0
- package/lib/commands/labs/enable.d.ts +13 -0
- package/lib/commands/labs/enable.js +47 -0
- package/lib/commands/labs/index.d.ts +11 -0
- package/lib/commands/labs/index.js +71 -0
- package/lib/commands/labs/info.d.ts +14 -0
- package/lib/commands/labs/info.js +49 -0
- package/lib/commands/local/index.d.ts +1 -1
- package/lib/commands/local/index.js +8 -3
- package/lib/commands/local/run.d.ts +1 -1
- package/lib/commands/local/run.js +8 -3
- package/lib/commands/maintenance/index.d.ts +10 -0
- package/lib/commands/maintenance/index.js +19 -0
- package/lib/commands/maintenance/off.d.ts +10 -0
- package/lib/commands/maintenance/off.js +20 -0
- package/lib/commands/maintenance/on.d.ts +10 -0
- package/lib/commands/maintenance/on.js +20 -0
- package/lib/commands/members/add.d.ts +13 -0
- package/lib/commands/members/add.js +33 -0
- package/lib/commands/members/index.d.ts +12 -0
- package/lib/commands/members/index.js +76 -0
- package/lib/commands/members/remove.d.ts +10 -0
- package/lib/commands/members/remove.js +58 -0
- package/lib/commands/members/set.d.ts +11 -0
- package/lib/commands/members/set.js +21 -0
- package/lib/commands/notifications/index.d.ts +13 -0
- package/lib/commands/notifications/index.js +62 -0
- package/lib/commands/orgs/index.d.ts +11 -0
- package/lib/commands/orgs/index.js +27 -0
- package/lib/commands/orgs/open.d.ts +10 -0
- package/lib/commands/orgs/open.js +24 -0
- package/lib/commands/pg/backups/cancel.d.ts +15 -0
- package/lib/commands/pg/backups/cancel.js +49 -0
- package/lib/commands/pg/backups/capture.d.ts +15 -0
- package/lib/commands/pg/backups/capture.js +65 -0
- package/lib/commands/pg/backups/delete.d.ts +15 -0
- package/lib/commands/pg/backups/delete.js +38 -0
- package/lib/commands/pg/backups/download.d.ts +14 -0
- package/lib/commands/pg/backups/download.js +58 -0
- package/lib/commands/pg/backups/index.d.ts +20 -0
- package/lib/commands/pg/backups/index.js +129 -0
- package/lib/commands/pg/backups/info.d.ts +17 -0
- package/lib/commands/pg/backups/info.js +92 -0
- package/lib/commands/pg/backups/restore.d.ts +19 -0
- package/lib/commands/pg/backups/restore.js +107 -0
- package/lib/commands/pg/backups/schedule.d.ts +21 -0
- package/lib/commands/pg/backups/schedule.js +82 -0
- package/lib/commands/pg/backups/schedules.d.ts +10 -0
- package/lib/commands/pg/backups/schedules.js +31 -0
- package/lib/commands/pg/backups/unschedule.d.ts +13 -0
- package/lib/commands/pg/backups/unschedule.js +44 -0
- package/lib/commands/pg/backups/url.d.ts +13 -0
- package/lib/commands/pg/backups/url.js +41 -0
- package/lib/commands/pg/bloat.d.ts +13 -0
- package/lib/commands/pg/bloat.js +87 -0
- package/lib/commands/pg/blocking.d.ts +13 -0
- package/lib/commands/pg/blocking.js +42 -0
- package/lib/commands/pg/connection-pooling/attach.d.ts +15 -0
- package/lib/commands/pg/connection-pooling/attach.js +41 -0
- package/lib/commands/pg/copy.d.ts +18 -0
- package/lib/commands/pg/copy.js +86 -0
- package/lib/commands/pg/credentials/create.d.ts +14 -0
- package/lib/commands/pg/credentials/create.js +40 -0
- package/lib/commands/pg/credentials/destroy.d.ts +16 -0
- package/lib/commands/pg/credentials/destroy.js +48 -0
- package/lib/commands/pg/credentials/repair-default.d.ts +15 -0
- package/lib/commands/pg/credentials/repair-default.js +39 -0
- package/lib/commands/pg/credentials/rotate.d.ts +16 -0
- package/lib/commands/pg/credentials/rotate.js +82 -0
- package/lib/commands/pg/credentials/url.d.ts +14 -0
- package/lib/commands/pg/credentials/url.js +64 -0
- package/lib/commands/pg/credentials.d.ts +16 -0
- package/lib/commands/pg/credentials.js +61 -0
- package/lib/commands/pg/diagnose.d.ts +18 -0
- package/lib/commands/pg/diagnose.js +109 -0
- package/lib/commands/pg/info.d.ts +14 -0
- package/lib/commands/pg/info.js +92 -0
- package/lib/commands/pg/kill.d.ts +15 -0
- package/lib/commands/pg/kill.js +32 -0
- package/lib/commands/pg/killall.d.ts +13 -0
- package/lib/commands/pg/killall.js +26 -0
- package/lib/commands/pg/links/create.d.ts +15 -0
- package/lib/commands/pg/links/create.js +58 -0
- package/lib/commands/pg/links/destroy.d.ts +16 -0
- package/lib/commands/pg/links/destroy.js +42 -0
- package/lib/commands/pg/links/index.d.ts +13 -0
- package/lib/commands/pg/links/index.js +59 -0
- package/lib/commands/pg/locks.d.ts +15 -0
- package/lib/commands/pg/locks.js +53 -0
- package/lib/commands/pg/maintenance/index.d.ts +13 -0
- package/lib/commands/pg/maintenance/index.js +29 -0
- package/lib/commands/pg/maintenance/run.d.ts +14 -0
- package/lib/commands/pg/maintenance/run.js +37 -0
- package/lib/commands/pg/maintenance/window.d.ts +15 -0
- package/lib/commands/pg/maintenance/window.js +41 -0
- package/lib/commands/pg/outliers.d.ts +19 -0
- package/lib/commands/pg/outliers.js +97 -0
- package/lib/commands/pg/promote.d.ts +14 -0
- package/lib/commands/pg/promote.js +169 -0
- package/lib/commands/pg/ps.d.ts +14 -0
- package/lib/commands/pg/ps.js +52 -0
- package/lib/commands/pg/psql.d.ts +16 -0
- package/lib/commands/pg/psql.js +49 -0
- package/lib/commands/pg/pull.d.ts +18 -0
- package/lib/commands/pg/pull.js +87 -0
- package/lib/commands/pg/push.d.ts +18 -0
- package/lib/commands/pg/push.js +84 -0
- package/lib/commands/pg/reset.d.ts +15 -0
- package/lib/commands/pg/reset.js +44 -0
- package/lib/commands/pg/settings/auto-explain/log-analyze.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-analyze.js +32 -0
- package/lib/commands/pg/settings/auto-explain/log-buffers.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-buffers.js +30 -0
- package/lib/commands/pg/settings/auto-explain/log-min-duration.d.ts +16 -0
- package/lib/commands/pg/settings/auto-explain/log-min-duration.js +33 -0
- package/lib/commands/pg/settings/auto-explain/log-nested-statements.d.ts +12 -0
- package/lib/commands/pg/settings/auto-explain/log-nested-statements.js +25 -0
- package/lib/commands/pg/settings/auto-explain/log-triggers.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-triggers.js +30 -0
- package/lib/commands/pg/settings/auto-explain/log-verbose.d.ts +17 -0
- package/lib/commands/pg/settings/auto-explain/log-verbose.js +33 -0
- package/lib/commands/pg/settings/auto-explain.d.ts +18 -0
- package/lib/commands/pg/settings/auto-explain.js +38 -0
- package/lib/commands/pg/settings/index.d.ts +13 -0
- package/lib/commands/pg/settings/index.js +34 -0
- package/lib/commands/pg/settings/log-connections.d.ts +17 -0
- package/lib/commands/pg/settings/log-connections.js +34 -0
- package/lib/commands/pg/settings/log-lock-waits.d.ts +13 -0
- package/lib/commands/pg/settings/log-lock-waits.js +31 -0
- package/lib/commands/pg/settings/log-min-duration-statement.d.ts +15 -0
- package/lib/commands/pg/settings/log-min-duration-statement.js +33 -0
- package/lib/commands/pg/settings/log-statement.d.ts +12 -0
- package/lib/commands/pg/settings/log-statement.js +30 -0
- package/lib/commands/pg/settings/track-functions.d.ts +12 -0
- package/lib/commands/pg/settings/track-functions.js +29 -0
- package/lib/commands/pg/unfollow.d.ts +14 -0
- package/lib/commands/pg/unfollow.js +40 -0
- package/lib/commands/pg/upgrade.d.ts +15 -0
- package/lib/commands/pg/upgrade.js +58 -0
- package/lib/commands/pg/vacuum-stats.d.ts +13 -0
- package/lib/commands/pg/vacuum-stats.js +65 -0
- package/lib/commands/pg/wait.d.ts +15 -0
- package/lib/commands/pg/wait.js +79 -0
- package/lib/commands/pipelines/connect.js +1 -1
- package/lib/commands/pipelines/diff.js +1 -1
- package/lib/commands/ps/index.d.ts +15 -0
- package/lib/commands/ps/index.js +195 -0
- package/lib/commands/ps/restart.d.ts +17 -0
- package/lib/commands/ps/restart.js +38 -0
- package/lib/commands/ps/scale.d.ts +13 -0
- package/lib/commands/ps/scale.js +108 -0
- package/lib/commands/ps/stop.d.ts +17 -0
- package/lib/commands/ps/stop.js +33 -0
- package/lib/commands/ps/type.d.ts +12 -0
- package/lib/commands/ps/type.js +163 -0
- package/lib/commands/redis/cli.d.ts +15 -0
- package/lib/commands/redis/cli.js +204 -0
- package/lib/commands/redis/credentials.d.ts +14 -0
- package/lib/commands/redis/credentials.js +32 -0
- package/lib/commands/redis/info.d.ts +15 -0
- package/lib/commands/redis/info.js +25 -0
- package/lib/commands/redis/keyspace-notifications.d.ts +14 -0
- package/lib/commands/redis/keyspace-notifications.js +47 -0
- package/lib/commands/redis/maintenance.d.ts +16 -0
- package/lib/commands/redis/maintenance.js +63 -0
- package/lib/commands/redis/maxmemory.d.ts +14 -0
- package/lib/commands/redis/maxmemory.js +40 -0
- package/lib/commands/redis/promote.d.ts +13 -0
- package/lib/commands/redis/promote.js +39 -0
- package/lib/commands/redis/stats-reset.d.ts +14 -0
- package/lib/commands/redis/stats-reset.js +36 -0
- package/lib/commands/redis/timeout.d.ts +14 -0
- package/lib/commands/redis/timeout.js +35 -0
- package/lib/commands/redis/upgrade.d.ts +15 -0
- package/lib/commands/redis/upgrade.js +37 -0
- package/lib/commands/redis/wait.d.ts +14 -0
- package/lib/commands/redis/wait.js +60 -0
- package/lib/commands/releases/index.d.ts +14 -0
- package/lib/commands/releases/index.js +124 -0
- package/lib/commands/releases/info.d.ts +15 -0
- package/lib/commands/releases/info.js +56 -0
- package/lib/commands/releases/output.d.ts +13 -0
- package/lib/commands/releases/output.js +37 -0
- package/lib/commands/releases/rollback.d.ts +14 -0
- package/lib/commands/releases/rollback.js +48 -0
- package/lib/commands/run/detached.d.ts +7 -8
- package/lib/commands/run/detached.js +16 -20
- package/lib/commands/run/index.d.ts +10 -11
- package/lib/commands/run/index.js +16 -17
- package/lib/commands/run/inside.d.ts +5 -7
- package/lib/commands/run/inside.js +10 -14
- package/lib/commands/spaces/create.d.ts +22 -0
- package/lib/commands/spaces/create.js +73 -0
- package/lib/commands/spaces/destroy.d.ts +14 -0
- package/lib/commands/spaces/destroy.js +49 -0
- package/lib/commands/spaces/drains/get.d.ts +12 -0
- package/lib/commands/spaces/drains/get.js +27 -0
- package/lib/commands/spaces/drains/set.d.ts +14 -0
- package/lib/commands/spaces/drains/set.js +29 -0
- package/lib/commands/spaces/hosts.d.ts +14 -0
- package/lib/commands/spaces/hosts.js +37 -0
- package/lib/commands/spaces/index.d.ts +16 -0
- package/lib/commands/spaces/index.js +55 -0
- package/lib/commands/spaces/info.d.ts +14 -0
- package/lib/commands/spaces/info.js +47 -0
- package/lib/commands/spaces/outbound-rules/add.d.ts +15 -0
- package/lib/commands/spaces/outbound-rules/add.js +81 -0
- package/lib/commands/spaces/outbound-rules/index.d.ts +15 -0
- package/lib/commands/spaces/outbound-rules/index.js +49 -0
- package/lib/commands/spaces/outbound-rules/remove.d.ts +17 -0
- package/lib/commands/spaces/outbound-rules/remove.js +53 -0
- package/lib/commands/spaces/peerings/accept.d.ts +15 -0
- package/lib/commands/spaces/peerings/accept.js +36 -0
- package/lib/commands/spaces/peerings/destroy.d.ts +15 -0
- package/lib/commands/spaces/peerings/destroy.js +45 -0
- package/lib/commands/spaces/peerings/index.d.ts +13 -0
- package/lib/commands/spaces/peerings/index.js +33 -0
- package/lib/commands/spaces/peerings/info.d.ts +15 -0
- package/lib/commands/spaces/peerings/info.js +59 -0
- package/lib/commands/spaces/ps.d.ts +15 -0
- package/lib/commands/spaces/ps.js +82 -0
- package/lib/commands/spaces/rename.d.ts +11 -0
- package/lib/commands/spaces/rename.js +26 -0
- package/lib/commands/spaces/topology.d.ts +32 -0
- package/lib/commands/spaces/topology.js +89 -0
- package/lib/commands/spaces/transfer.d.ts +11 -0
- package/lib/commands/spaces/transfer.js +35 -0
- package/lib/commands/spaces/trusted-ips/add.d.ts +16 -0
- package/lib/commands/spaces/trusted-ips/add.js +43 -0
- package/lib/commands/spaces/trusted-ips/index.d.ts +15 -0
- package/lib/commands/spaces/trusted-ips/index.js +52 -0
- package/lib/commands/spaces/trusted-ips/remove.d.ts +15 -0
- package/lib/commands/spaces/trusted-ips/remove.js +44 -0
- package/lib/commands/spaces/vpn/config.d.ts +14 -0
- package/lib/commands/spaces/vpn/config.js +54 -0
- package/lib/commands/spaces/vpn/connect.d.ts +15 -0
- package/lib/commands/spaces/vpn/connect.js +45 -0
- package/lib/commands/spaces/vpn/connections.d.ts +17 -0
- package/lib/commands/spaces/vpn/connections.js +57 -0
- package/lib/commands/spaces/vpn/destroy.d.ts +14 -0
- package/lib/commands/spaces/vpn/destroy.js +35 -0
- package/lib/commands/spaces/vpn/info.d.ts +16 -0
- package/lib/commands/spaces/vpn/info.js +82 -0
- package/lib/commands/spaces/vpn/update.d.ts +14 -0
- package/lib/commands/spaces/vpn/update.js +36 -0
- package/lib/commands/spaces/vpn/wait.d.ts +13 -0
- package/lib/commands/spaces/vpn/wait.js +53 -0
- package/lib/commands/spaces/wait.d.ts +17 -0
- package/lib/commands/spaces/wait.js +89 -0
- package/lib/commands/status.js +4 -4
- package/lib/commands/teams/index.d.ts +9 -0
- package/lib/commands/teams/index.js +29 -0
- package/lib/global_telemetry.js +10 -4
- package/lib/hooks/postrun/performance_analytics.js +5 -4
- package/lib/hooks/prerun/analytics.js +3 -0
- package/lib/lib/addons/addons_wait.d.ts +78 -0
- package/lib/lib/addons/addons_wait.js +56 -0
- package/lib/lib/addons/create_addon.d.ts +7 -0
- package/lib/lib/addons/create_addon.js +59 -0
- package/lib/lib/addons/destroy_addon.d.ts +3 -0
- package/lib/lib/addons/destroy_addon.js +48 -0
- package/lib/lib/addons/resolve.d.ts +38 -0
- package/lib/lib/addons/resolve.js +179 -0
- package/lib/lib/addons/util.d.ts +9 -0
- package/lib/lib/addons/util.js +72 -0
- package/lib/lib/apps/app-transfer.d.ts +10 -0
- package/lib/lib/apps/app-transfer.js +35 -0
- package/lib/lib/autocomplete/completions.d.ts +4 -0
- package/lib/lib/autocomplete/completions.js +6 -1
- package/lib/lib/certs/certificate_details.d.ts +2 -0
- package/lib/lib/certs/certificate_details.js +37 -0
- package/lib/lib/certs/display_table.d.ts +2 -0
- package/lib/lib/certs/display_table.js +51 -0
- package/lib/lib/certs/domains.d.ts +3 -0
- package/lib/lib/certs/domains.js +45 -0
- package/lib/lib/certs/flags.d.ts +7 -0
- package/lib/lib/certs/flags.js +42 -0
- package/lib/lib/certs/format_date.d.ts +1 -0
- package/lib/lib/certs/format_date.js +11 -0
- package/lib/lib/certs/get_cert_and_key.d.ts +9 -0
- package/lib/lib/certs/get_cert_and_key.js +11 -0
- package/lib/lib/ci/interfaces/kolkrabbi.d.ts +1 -1
- package/lib/lib/ci/source.js +3 -3
- package/lib/lib/ci/test-run.js +2 -2
- package/lib/lib/config/quote.js +1 -1
- package/lib/lib/confirmCommand.d.ts +1 -0
- package/lib/lib/{apps/confirm-app.js → confirmCommand.js} +2 -2
- package/lib/lib/container/debug.d.ts +2 -0
- package/lib/lib/container/debug.js +5 -0
- package/lib/lib/container/docker_helper.d.ts +24 -0
- package/lib/lib/container/docker_helper.js +168 -0
- package/lib/lib/container/streamer.d.ts +1 -0
- package/lib/lib/container/streamer.js +31 -0
- package/lib/lib/domains/domains.d.ts +6 -0
- package/lib/lib/domains/domains.js +104 -0
- package/lib/lib/local/run-foreman.d.ts +1 -0
- package/lib/lib/local/run-foreman.js +229 -1
- package/lib/lib/members/util.d.ts +3 -0
- package/lib/lib/members/util.js +25 -0
- package/lib/lib/members/utils.d.ts +2 -0
- package/lib/lib/members/utils.js +14 -0
- package/lib/lib/notify.d.ts +1 -0
- package/lib/lib/notify.js +23 -0
- package/lib/lib/orgs/utils.d.ts +5 -0
- package/lib/lib/orgs/utils.js +24 -0
- package/lib/lib/pg/backups.d.ts +17 -0
- package/lib/lib/pg/backups.js +164 -0
- package/lib/lib/pg/bastion.d.ts +29 -0
- package/lib/lib/pg/bastion.js +121 -0
- package/lib/lib/pg/config.d.ts +2 -0
- package/lib/lib/pg/config.js +13 -0
- package/lib/lib/pg/download.d.ts +5 -0
- package/lib/lib/pg/download.js +34 -0
- package/lib/lib/pg/fetcher.d.ts +39 -0
- package/lib/lib/pg/fetcher.js +137 -0
- package/lib/lib/pg/host.d.ts +1 -0
- package/lib/lib/pg/host.js +7 -0
- package/lib/lib/pg/psql.d.ts +48 -0
- package/lib/lib/pg/psql.js +252 -0
- package/lib/lib/pg/push_pull.d.ts +13 -0
- package/lib/lib/pg/push_pull.js +118 -0
- package/lib/lib/pg/setter.d.ts +16 -0
- package/lib/lib/pg/setter.js +65 -0
- package/lib/lib/pg/types.d.ts +230 -0
- package/lib/lib/pg/types.js +2 -0
- package/lib/lib/pg/util.d.ts +36 -0
- package/lib/lib/pg/util.js +183 -0
- package/lib/lib/redis/api.d.ts +65 -0
- package/lib/lib/redis/api.js +122 -0
- package/lib/lib/releases/output.d.ts +1 -0
- package/lib/lib/releases/output.js +14 -0
- package/lib/lib/releases/releases.d.ts +6 -0
- package/lib/lib/releases/releases.js +32 -0
- package/lib/lib/releases/status_helper.d.ts +5 -0
- package/lib/lib/releases/status_helper.js +25 -0
- package/lib/lib/run/dyno.js +2 -2
- package/lib/lib/run/log-displayer.d.ts +1 -1
- package/lib/lib/spaces/format.d.ts +4 -0
- package/lib/lib/spaces/format.js +60 -0
- package/lib/lib/spaces/hosts.d.ts +9 -0
- package/lib/lib/spaces/hosts.js +34 -0
- package/lib/lib/spaces/outbound-rules.d.ts +4 -0
- package/lib/lib/spaces/outbound-rules.js +78 -0
- package/lib/lib/spaces/parsers.d.ts +8 -0
- package/lib/lib/spaces/parsers.js +17 -0
- package/lib/lib/spaces/peering.d.ts +4 -0
- package/lib/lib/spaces/peering.js +53 -0
- package/lib/lib/spaces/spaces.d.ts +4 -0
- package/lib/lib/spaces/spaces.js +37 -0
- package/lib/lib/spaces/vpn-connections.d.ts +2 -0
- package/lib/lib/spaces/vpn-connections.js +22 -0
- package/lib/lib/teamUtils.d.ts +3 -0
- package/lib/lib/teamUtils.js +18 -0
- package/lib/lib/time.d.ts +2 -0
- package/lib/lib/time.js +29 -0
- package/lib/lib/types/app_errors.d.ts +6 -0
- package/lib/lib/types/app_errors.js +2 -0
- package/lib/lib/types/domain.d.ts +61 -0
- package/lib/lib/types/domain.js +5 -0
- package/lib/lib/types/notifications.d.ts +20 -0
- package/lib/lib/types/notifications.js +2 -0
- package/lib/lib/utils/multisort.d.ts +32 -0
- package/lib/lib/utils/multisort.js +66 -0
- package/lib/lib/utils/uuid-validate.d.ts +1 -0
- package/lib/lib/utils/uuid-validate.js +7 -0
- package/lib/user-config.js +2 -2
- package/oclif.manifest.json +12776 -3097
- package/package.json +108 -61
- package/lib/lib/apps/confirm-app.d.ts +0 -1
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import * as Heroku from '@heroku-cli/schema';
|
|
2
|
+
export declare type TransferSchedule = {
|
|
3
|
+
hour: number;
|
|
4
|
+
name: string;
|
|
5
|
+
timezone: string;
|
|
6
|
+
uuid: string;
|
|
7
|
+
};
|
|
8
|
+
export declare type PublicUrlResponse = {
|
|
9
|
+
url: string;
|
|
10
|
+
};
|
|
11
|
+
declare type TransferTargetType = 'pg_dump' | 'pg_restore' | 'gof3r' | 'htcat';
|
|
12
|
+
export declare type BackupTransfer = {
|
|
13
|
+
uuid: string;
|
|
14
|
+
num: number;
|
|
15
|
+
from_name: string;
|
|
16
|
+
from_type: TransferTargetType;
|
|
17
|
+
from_url: string;
|
|
18
|
+
to_name: string;
|
|
19
|
+
to_type: TransferTargetType;
|
|
20
|
+
to_url: string;
|
|
21
|
+
options: {
|
|
22
|
+
[k: string]: unknown;
|
|
23
|
+
};
|
|
24
|
+
source_bytes: number;
|
|
25
|
+
processed_bytes: number;
|
|
26
|
+
succeeded: boolean;
|
|
27
|
+
warnings: number;
|
|
28
|
+
created_at: string;
|
|
29
|
+
started_at: string;
|
|
30
|
+
canceled_at: string;
|
|
31
|
+
updated_at: string;
|
|
32
|
+
finished_at: string;
|
|
33
|
+
deleted_at: string;
|
|
34
|
+
purged_at: string;
|
|
35
|
+
num_keep: number;
|
|
36
|
+
schedule?: {
|
|
37
|
+
uuid: string;
|
|
38
|
+
};
|
|
39
|
+
logs: Array<{
|
|
40
|
+
created_at: string;
|
|
41
|
+
level: string;
|
|
42
|
+
message: string;
|
|
43
|
+
}>;
|
|
44
|
+
};
|
|
45
|
+
export declare type AddOnWithRelatedData = Required<Heroku.AddOnAttachment['addon']> & {
|
|
46
|
+
attachment_names?: string[];
|
|
47
|
+
links?: Link[];
|
|
48
|
+
plan: Required<Heroku.AddOn['plan']>;
|
|
49
|
+
};
|
|
50
|
+
declare type ServiceInfo = 'Status' | 'Fork/Follow' | 'Rollback' | 'Created' | 'Region' | 'Data Encryption' | 'Continuous Protection' | 'Enhanced Certificates' | 'Upgradable Extensions' | 'Plan' | 'HA Status' | 'Behind By' | 'Data Size' | 'Tables' | 'PG Version' | 'Connections' | 'Connection Pooling' | 'Credentials' | 'Restricted Credentials' | 'Mutual TLS' | 'Customer Encryption Key' | 'Following' | 'Forked From' | 'Followers' | 'Forks' | 'Maintenance' | 'Maintenance window' | 'Infrastructure' | 'Warning';
|
|
51
|
+
export declare type PgDatabaseService = {
|
|
52
|
+
addon_id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
heroku_resource_id: string;
|
|
55
|
+
formation?: {
|
|
56
|
+
id: string;
|
|
57
|
+
primary: string;
|
|
58
|
+
};
|
|
59
|
+
metaas_source: string;
|
|
60
|
+
num_tables: number;
|
|
61
|
+
num_connections: number;
|
|
62
|
+
num_connections_waiting: number;
|
|
63
|
+
num_bytes: number;
|
|
64
|
+
postgres_version: string;
|
|
65
|
+
current_transaction: number;
|
|
66
|
+
is_in_recovery?: boolean;
|
|
67
|
+
plan: {
|
|
68
|
+
id: number;
|
|
69
|
+
name: string;
|
|
70
|
+
};
|
|
71
|
+
created_at: string;
|
|
72
|
+
'standalone?'?: boolean;
|
|
73
|
+
port: number;
|
|
74
|
+
database_name: string;
|
|
75
|
+
database_user: string;
|
|
76
|
+
'hot_standby?'?: boolean;
|
|
77
|
+
status_updated_at?: string;
|
|
78
|
+
following?: string;
|
|
79
|
+
forked_from: string;
|
|
80
|
+
target_transaction: string | null;
|
|
81
|
+
available_for_ingress: boolean;
|
|
82
|
+
resource_url: string;
|
|
83
|
+
database_password: string;
|
|
84
|
+
'waiting?': boolean;
|
|
85
|
+
credentials: number;
|
|
86
|
+
leader: string | null;
|
|
87
|
+
info: Array<{
|
|
88
|
+
name: ServiceInfo;
|
|
89
|
+
values: string[];
|
|
90
|
+
}>;
|
|
91
|
+
};
|
|
92
|
+
export declare type PgStatus = {
|
|
93
|
+
'waiting?': boolean;
|
|
94
|
+
'error?': boolean;
|
|
95
|
+
message: string;
|
|
96
|
+
};
|
|
97
|
+
declare type TenantInfoNames = 'Plan' | 'Status' | 'Connections' | 'PG Version' | 'Created' | 'Data Size' | 'Tables' | 'Fork/Follow' | 'Rollback' | 'Continuous Protection' | 'Billing App' | 'Add-on';
|
|
98
|
+
export declare type TenantInfo = {
|
|
99
|
+
name: TenantInfoNames;
|
|
100
|
+
values: string[];
|
|
101
|
+
resolve_db_name?: boolean;
|
|
102
|
+
};
|
|
103
|
+
export declare type PgDatabaseTenant = {
|
|
104
|
+
addon_id: string;
|
|
105
|
+
name: string;
|
|
106
|
+
plan: string;
|
|
107
|
+
created_at: string;
|
|
108
|
+
database_user: string;
|
|
109
|
+
database_name: string;
|
|
110
|
+
following?: string;
|
|
111
|
+
resource_url: string;
|
|
112
|
+
'waiting?': boolean;
|
|
113
|
+
num_bytes: number;
|
|
114
|
+
info: Array<TenantInfo>;
|
|
115
|
+
};
|
|
116
|
+
export declare type PgDatabase = PgDatabaseService & PgDatabaseTenant;
|
|
117
|
+
export declare type AddOnWithPlan = Required<Heroku.AddOnAttachment['addon']> & {
|
|
118
|
+
plan: Required<Heroku.AddOn['plan']>;
|
|
119
|
+
};
|
|
120
|
+
export declare type AddOnAttachmentWithConfigVarsAndPlan = Required<Heroku.AddOnAttachment> & {
|
|
121
|
+
config_vars: Heroku.AddOn['config_vars'];
|
|
122
|
+
addon: AddOnWithRelatedData;
|
|
123
|
+
};
|
|
124
|
+
export declare type Link = {
|
|
125
|
+
attachment_name?: string;
|
|
126
|
+
created_at: string;
|
|
127
|
+
message: string;
|
|
128
|
+
name: string;
|
|
129
|
+
remote?: Link;
|
|
130
|
+
};
|
|
131
|
+
declare type CredentialState = 'enabling' | 'active' | 'revoking' | 'revoked' | 'archived';
|
|
132
|
+
export declare type Credential = {
|
|
133
|
+
user: string;
|
|
134
|
+
password: string;
|
|
135
|
+
state: CredentialState;
|
|
136
|
+
connections?: number | null;
|
|
137
|
+
};
|
|
138
|
+
declare type CredentialStoreState = 'provisioning' | 'wait_for_provisioning' | 'active' | 'rotating' | 'rotation_completed' | 'revoking' | 'archived';
|
|
139
|
+
export declare type CredentialInfo = {
|
|
140
|
+
uuid: string;
|
|
141
|
+
name: string;
|
|
142
|
+
state: CredentialStoreState;
|
|
143
|
+
database: string;
|
|
144
|
+
host: string;
|
|
145
|
+
port: number;
|
|
146
|
+
credentials: Array<Credential>;
|
|
147
|
+
};
|
|
148
|
+
export declare type CredentialsInfo = Array<CredentialInfo>;
|
|
149
|
+
export declare type MaintenanceApiResponse = {
|
|
150
|
+
message: string;
|
|
151
|
+
};
|
|
152
|
+
export declare type PgDatabaseConfig = {
|
|
153
|
+
[key: string]: any;
|
|
154
|
+
'log_lock_waits': {
|
|
155
|
+
value: boolean;
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
export declare type SettingKey = 'log_lock_waits' | 'log_connections' | 'log_min_duration_statement' | 'log_statement' | 'track_functions' | 'pgbouncer_max_client_conn' | 'pg_bouncer_max_db_conns' | 'pg_bouncer_default_pool_size' | 'auto_explain' | 'auto_explain.log_min_duration' | 'auto_explain.log_analyze' | 'auto_explain.log_triggers' | 'auto_explain.log_buffers' | 'auto_explain.log_verbose' | 'auto_explain.log_nested_statements';
|
|
159
|
+
export declare type Setting<T> = {
|
|
160
|
+
value: T;
|
|
161
|
+
values: Record<string, string>;
|
|
162
|
+
desc: string;
|
|
163
|
+
default: T;
|
|
164
|
+
};
|
|
165
|
+
export declare type SettingsResponse = Record<SettingKey, Setting<unknown>>;
|
|
166
|
+
export declare type PGDiagnoseResponse = {
|
|
167
|
+
id: string;
|
|
168
|
+
app: string;
|
|
169
|
+
database: string;
|
|
170
|
+
created_at: string;
|
|
171
|
+
checks: [
|
|
172
|
+
PGDiagnoseCheck<ConnCountResult>,
|
|
173
|
+
PGDiagnoseCheck<QueriesResult>,
|
|
174
|
+
PGDiagnoseCheck<QueriesResult>,
|
|
175
|
+
PGDiagnoseCheck<UnusedIndexesResult>,
|
|
176
|
+
PGDiagnoseCheck<BloatResult>,
|
|
177
|
+
PGDiagnoseCheck<HitRateResult>,
|
|
178
|
+
PGDiagnoseCheck<BlockingResult>
|
|
179
|
+
];
|
|
180
|
+
};
|
|
181
|
+
export declare type PGDiagnoseCheck<T extends PGDiagnoseResult = PGDiagnoseResult> = {
|
|
182
|
+
name: string;
|
|
183
|
+
status: 'red' | 'yellow' | 'green';
|
|
184
|
+
results: T[];
|
|
185
|
+
};
|
|
186
|
+
export declare type PGDiagnoseResult = ConnCountResult | QueriesResult | UnusedIndexesResult | BloatResult | HitRateResult | BlockingResult;
|
|
187
|
+
export declare type ConnCountResult = {
|
|
188
|
+
count: number;
|
|
189
|
+
};
|
|
190
|
+
export declare type QueriesResult = {
|
|
191
|
+
pid: number;
|
|
192
|
+
duration: string;
|
|
193
|
+
query: string;
|
|
194
|
+
};
|
|
195
|
+
export declare type UnusedIndexesResult = {
|
|
196
|
+
reason: string;
|
|
197
|
+
index: string;
|
|
198
|
+
index_scan_pct: string;
|
|
199
|
+
scans_per_write: string;
|
|
200
|
+
index_size: string;
|
|
201
|
+
table_size: string;
|
|
202
|
+
};
|
|
203
|
+
export declare type BloatResult = {
|
|
204
|
+
type: string;
|
|
205
|
+
object: string;
|
|
206
|
+
bloat: number;
|
|
207
|
+
waste: string;
|
|
208
|
+
};
|
|
209
|
+
export declare type HitRateResult = {
|
|
210
|
+
name: string;
|
|
211
|
+
ratio: number;
|
|
212
|
+
};
|
|
213
|
+
export declare type BlockingResult = {
|
|
214
|
+
blocked_pid: number;
|
|
215
|
+
blocking_statement: string;
|
|
216
|
+
blocking_duration: string;
|
|
217
|
+
blocking_pid: number;
|
|
218
|
+
blocked_statement: string;
|
|
219
|
+
blocked_duration: string;
|
|
220
|
+
};
|
|
221
|
+
export declare type PGDiagnoseRequest = {
|
|
222
|
+
url: string;
|
|
223
|
+
plan: string;
|
|
224
|
+
app: string;
|
|
225
|
+
database: string;
|
|
226
|
+
metrics?: unknown[];
|
|
227
|
+
burst_data_present?: boolean;
|
|
228
|
+
burst_status?: string;
|
|
229
|
+
};
|
|
230
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { AddOnAttachment } from '@heroku-cli/schema';
|
|
3
|
+
import type { AddOnAttachmentWithConfigVarsAndPlan, CredentialsInfo } from './types';
|
|
4
|
+
import { Server } from 'net';
|
|
5
|
+
export declare function getConfigVarName(configVars: string[]): string;
|
|
6
|
+
export declare const essentialNumPlan: (addon: AddOnAttachmentWithConfigVarsAndPlan) => boolean;
|
|
7
|
+
export declare const legacyEssentialPlan: (addon: AddOnAttachmentWithConfigVarsAndPlan) => boolean;
|
|
8
|
+
export declare function essentialPlan(addon: AddOnAttachmentWithConfigVarsAndPlan): boolean;
|
|
9
|
+
export declare function getConfigVarNameFromAttachment(attachment: Required<AddOnAttachment & {
|
|
10
|
+
addon: AddOnAttachmentWithConfigVarsAndPlan;
|
|
11
|
+
}>, config?: Record<string, string>): string;
|
|
12
|
+
export declare function presentCredentialAttachments(app: string, credAttachments: Required<AddOnAttachment>[], credentials: CredentialsInfo, cred: string): string;
|
|
13
|
+
export declare type ConnectionDetails = {
|
|
14
|
+
user: string;
|
|
15
|
+
password: string;
|
|
16
|
+
database: string;
|
|
17
|
+
host: string;
|
|
18
|
+
port: string;
|
|
19
|
+
pathname: string;
|
|
20
|
+
url: string;
|
|
21
|
+
bastionKey?: string;
|
|
22
|
+
bastionHost?: string;
|
|
23
|
+
_tunnel?: Server;
|
|
24
|
+
};
|
|
25
|
+
export declare type ConnectionDetailsWithAttachment = ConnectionDetails & {
|
|
26
|
+
attachment: Required<AddOnAttachment & {
|
|
27
|
+
addon: AddOnAttachmentWithConfigVarsAndPlan;
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
30
|
+
export declare const getConnectionDetails: (attachment: Required<AddOnAttachment & {
|
|
31
|
+
addon: AddOnAttachmentWithConfigVarsAndPlan;
|
|
32
|
+
}>, configVars?: Record<string, string>) => ConnectionDetailsWithAttachment;
|
|
33
|
+
export declare const bastionKeyPlan: (a: AddOnAttachmentWithConfigVarsAndPlan) => boolean;
|
|
34
|
+
export declare const configVarNamesFromValue: (config: Record<string, string>, value: string) => string[];
|
|
35
|
+
export declare const databaseNameFromUrl: (uri: string, config: Record<string, string>) => any;
|
|
36
|
+
export declare const parsePostgresConnectionString: (db: string) => ConnectionDetails;
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parsePostgresConnectionString = exports.databaseNameFromUrl = exports.configVarNamesFromValue = exports.bastionKeyPlan = exports.getConnectionDetails = exports.presentCredentialAttachments = exports.getConfigVarNameFromAttachment = exports.essentialPlan = exports.legacyEssentialPlan = exports.essentialNumPlan = exports.getConfigVarName = void 0;
|
|
4
|
+
const color_1 = require("@heroku-cli/color");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const debug_1 = require("debug");
|
|
7
|
+
const addons_1 = require("../../commands/addons");
|
|
8
|
+
const multisort_1 = require("../utils/multisort");
|
|
9
|
+
const bastion_1 = require("./bastion");
|
|
10
|
+
const process_1 = require("process");
|
|
11
|
+
function getConfigVarName(configVars) {
|
|
12
|
+
const connStringVars = configVars.filter(cv => (cv.endsWith('_URL')));
|
|
13
|
+
if (connStringVars.length === 0)
|
|
14
|
+
throw new Error('Database URL not found for this addon');
|
|
15
|
+
return connStringVars[0];
|
|
16
|
+
}
|
|
17
|
+
exports.getConfigVarName = getConfigVarName;
|
|
18
|
+
const essentialNumPlan = (addon) => { var _a, _b; return Boolean((_b = (_a = addon === null || addon === void 0 ? void 0 : addon.plan) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.split(':')[1].match(/^essential/)); };
|
|
19
|
+
exports.essentialNumPlan = essentialNumPlan;
|
|
20
|
+
const legacyEssentialPlan = (addon) => { var _a, _b; return Boolean((_b = (_a = addon === null || addon === void 0 ? void 0 : addon.plan) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.split(':')[1].match(/(dev|basic|mini)$/)); };
|
|
21
|
+
exports.legacyEssentialPlan = legacyEssentialPlan;
|
|
22
|
+
function essentialPlan(addon) {
|
|
23
|
+
return (0, exports.essentialNumPlan)(addon) || (0, exports.legacyEssentialPlan)(addon);
|
|
24
|
+
}
|
|
25
|
+
exports.essentialPlan = essentialPlan;
|
|
26
|
+
function getConfigVarNameFromAttachment(attachment, config = {}) {
|
|
27
|
+
var _a, _b;
|
|
28
|
+
const configVars = (_b = (_a = attachment.config_vars) === null || _a === void 0 ? void 0 : _a.filter((cv) => {
|
|
29
|
+
var _a;
|
|
30
|
+
return (_a = config[cv]) === null || _a === void 0 ? void 0 : _a.startsWith('postgres://');
|
|
31
|
+
})) !== null && _b !== void 0 ? _b : [];
|
|
32
|
+
if (configVars.length === 0) {
|
|
33
|
+
core_1.ux.error(`No config vars found for ${attachment.name}; perhaps they were removed as a side effect of ${color_1.default.cmd('heroku rollback')}? Use ${color_1.default.cmd('heroku addons:attach')} to create a new attachment and then ${color_1.default.cmd('heroku addons:detach')} to remove the current attachment.`);
|
|
34
|
+
}
|
|
35
|
+
const configVarName = `${attachment.name}_URL`;
|
|
36
|
+
if (configVars.includes(configVarName) && configVarName in config) {
|
|
37
|
+
return configVarName;
|
|
38
|
+
}
|
|
39
|
+
return getConfigVarName(configVars);
|
|
40
|
+
}
|
|
41
|
+
exports.getConfigVarNameFromAttachment = getConfigVarNameFromAttachment;
|
|
42
|
+
function presentCredentialAttachments(app, credAttachments, credentials, cred) {
|
|
43
|
+
const isForeignApp = (attOrAddon) => attOrAddon.app.name === app ? 0 : 1;
|
|
44
|
+
const comparators = [
|
|
45
|
+
(a, b) => {
|
|
46
|
+
const fa = isForeignApp(a);
|
|
47
|
+
const fb = isForeignApp(b);
|
|
48
|
+
return fa < fb ? -1 : (fb < fa ? 1 : 0);
|
|
49
|
+
},
|
|
50
|
+
(a, b) => a.name.localeCompare(b.name),
|
|
51
|
+
(a, b) => { var _a, _b, _c, _d, _e; return (_e = (_b = (_a = a.app) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.localeCompare((_d = (_c = b.app) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '')) !== null && _e !== void 0 ? _e : 0; },
|
|
52
|
+
];
|
|
53
|
+
credAttachments.sort((0, multisort_1.multiSortCompareFn)(comparators));
|
|
54
|
+
// render each attachment under the credential
|
|
55
|
+
const attLines = credAttachments.map(function (attachment, idx) {
|
|
56
|
+
const isLast = (idx === credAttachments.length - 1);
|
|
57
|
+
return (0, addons_1.renderAttachment)(attachment, app, isLast);
|
|
58
|
+
});
|
|
59
|
+
const rotationLines = [];
|
|
60
|
+
const credentialStore = credentials.find(a => a.name === cred);
|
|
61
|
+
if ((credentialStore === null || credentialStore === void 0 ? void 0 : credentialStore.state) === 'rotating') {
|
|
62
|
+
const formatted = credentialStore === null || credentialStore === void 0 ? void 0 : credentialStore.credentials.map(credential => {
|
|
63
|
+
return {
|
|
64
|
+
user: credential.user,
|
|
65
|
+
state: credential.state,
|
|
66
|
+
connections: credential.connections,
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
// eslint-disable-next-line no-eq-null, eqeqeq
|
|
70
|
+
const connectionInformationAvailable = formatted.some(c => c.connections != null);
|
|
71
|
+
if (connectionInformationAvailable) {
|
|
72
|
+
const prefix = ' ';
|
|
73
|
+
rotationLines.push(`${prefix}Usernames currently active for this credential:`);
|
|
74
|
+
core_1.ux.table(formatted, {
|
|
75
|
+
user: {
|
|
76
|
+
get(row) {
|
|
77
|
+
return `${prefix}${row.user}`;
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
state: {
|
|
81
|
+
get(row) {
|
|
82
|
+
return row.state === 'revoking' ? 'waiting for no connections to be revoked' : row.state;
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
connections: {
|
|
86
|
+
get(row) {
|
|
87
|
+
return `${row.connections} connections`;
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
}, {
|
|
91
|
+
'no-header': true,
|
|
92
|
+
printLine(line) {
|
|
93
|
+
rotationLines.push(line);
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return [cred, ...attLines, ...rotationLines].join('\n');
|
|
99
|
+
}
|
|
100
|
+
exports.presentCredentialAttachments = presentCredentialAttachments;
|
|
101
|
+
const getConnectionDetails = (attachment, configVars = {}) => {
|
|
102
|
+
const connStringVar = getConfigVarNameFromAttachment(attachment, configVars);
|
|
103
|
+
// remove _URL from the end of the config var name
|
|
104
|
+
const baseName = connStringVar.slice(0, -4);
|
|
105
|
+
// build the default payload for non-bastion dbs
|
|
106
|
+
(0, debug_1.default)(`Using "${connStringVar}" to connect to your database…`);
|
|
107
|
+
const conn = (0, exports.parsePostgresConnectionString)(configVars[connStringVar]);
|
|
108
|
+
const payload = {
|
|
109
|
+
user: conn.user,
|
|
110
|
+
password: conn.password,
|
|
111
|
+
database: conn.database,
|
|
112
|
+
host: conn.host,
|
|
113
|
+
port: conn.port,
|
|
114
|
+
pathname: conn.pathname,
|
|
115
|
+
url: conn.url,
|
|
116
|
+
attachment,
|
|
117
|
+
};
|
|
118
|
+
// If bastion creds exist, graft it into the payload
|
|
119
|
+
const bastion = (0, bastion_1.getBastion)(configVars, baseName);
|
|
120
|
+
if (bastion) {
|
|
121
|
+
Object.assign(payload, bastion);
|
|
122
|
+
}
|
|
123
|
+
return payload;
|
|
124
|
+
};
|
|
125
|
+
exports.getConnectionDetails = getConnectionDetails;
|
|
126
|
+
const bastionKeyPlan = (a) => Boolean(a.plan.name.match(/private/));
|
|
127
|
+
exports.bastionKeyPlan = bastionKeyPlan;
|
|
128
|
+
const configVarNamesFromValue = (config, value) => {
|
|
129
|
+
const keys = [];
|
|
130
|
+
for (const key of Object.keys(config)) {
|
|
131
|
+
const configVal = config[key];
|
|
132
|
+
if (configVal === value) {
|
|
133
|
+
keys.push(key);
|
|
134
|
+
}
|
|
135
|
+
else if (configVal.startsWith('postgres://')) {
|
|
136
|
+
try {
|
|
137
|
+
const configURL = new URL(configVal);
|
|
138
|
+
const ourURL = new URL(value);
|
|
139
|
+
const components = ['protocol', 'hostname', 'port', 'pathname'];
|
|
140
|
+
if (components.every(component => ourURL[component] === configURL[component])) {
|
|
141
|
+
keys.push(key);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (_a) {
|
|
145
|
+
// ignore -- this is not a valid URL so not a matching URL
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const comparator = (a, b) => {
|
|
150
|
+
const isDatabaseUrlA = Number(a === 'DATABASE_URL');
|
|
151
|
+
const isDatabaseUrlB = Number(b === 'DATABASE_URL');
|
|
152
|
+
return isDatabaseUrlA < isDatabaseUrlB ? -1 : (isDatabaseUrlB < isDatabaseUrlA ? 1 : 0);
|
|
153
|
+
};
|
|
154
|
+
return keys.sort(comparator);
|
|
155
|
+
};
|
|
156
|
+
exports.configVarNamesFromValue = configVarNamesFromValue;
|
|
157
|
+
const databaseNameFromUrl = (uri, config) => {
|
|
158
|
+
const names = (0, exports.configVarNamesFromValue)(config, uri);
|
|
159
|
+
let name = names.pop();
|
|
160
|
+
while (names.length > 0 && name === 'DATABASE_URL')
|
|
161
|
+
name = names.pop();
|
|
162
|
+
if (name) {
|
|
163
|
+
return color_1.default.configVar(name.replace(/_URL$/, ''));
|
|
164
|
+
}
|
|
165
|
+
const conn = (0, exports.parsePostgresConnectionString)(uri);
|
|
166
|
+
return `${conn.host}:${conn.port}${conn.pathname}`;
|
|
167
|
+
};
|
|
168
|
+
exports.databaseNameFromUrl = databaseNameFromUrl;
|
|
169
|
+
const parsePostgresConnectionString = (db) => {
|
|
170
|
+
const dbPath = db.match(/:\/\//) ? db : `postgres:///${db}`;
|
|
171
|
+
const url = new URL(dbPath);
|
|
172
|
+
const { username, password, hostname, pathname, port } = url;
|
|
173
|
+
return {
|
|
174
|
+
user: username,
|
|
175
|
+
password,
|
|
176
|
+
database: pathname.charAt(0) === '/' ? pathname.slice(1) : pathname,
|
|
177
|
+
host: hostname,
|
|
178
|
+
port: port || process_1.env.PGPORT || (hostname && '5432'),
|
|
179
|
+
pathname,
|
|
180
|
+
url: dbPath,
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
exports.parsePostgresConnectionString = parsePostgresConnectionString;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as Heroku from '@heroku-cli/schema';
|
|
2
|
+
import { APIClient } from '@heroku-cli/command';
|
|
3
|
+
export declare type RedisFormationResponse = {
|
|
4
|
+
addon_id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
plan: string;
|
|
7
|
+
created_at: string;
|
|
8
|
+
formation: {
|
|
9
|
+
id: string;
|
|
10
|
+
primary: string | null;
|
|
11
|
+
};
|
|
12
|
+
metaas_source: string;
|
|
13
|
+
port: number;
|
|
14
|
+
resource_url: string;
|
|
15
|
+
info: {
|
|
16
|
+
name: string;
|
|
17
|
+
values: string[];
|
|
18
|
+
}[];
|
|
19
|
+
version: string;
|
|
20
|
+
prefer_native_tls: boolean;
|
|
21
|
+
customer_encryption_key?: string;
|
|
22
|
+
};
|
|
23
|
+
declare type RedisEvictionPolicies = 'noeviction' | 'allkeys-lru' | 'volatile-lru' | 'allkeys-random' | 'volatile-random' | 'volatile-ttl' | 'allkeys-lfu' | 'volatile-lfu';
|
|
24
|
+
export declare type RedisApiResponse = {
|
|
25
|
+
message: string;
|
|
26
|
+
};
|
|
27
|
+
export declare type RedisFormationConfigResponse = {
|
|
28
|
+
maxmemory_policy: {
|
|
29
|
+
desc: string;
|
|
30
|
+
value: RedisEvictionPolicies;
|
|
31
|
+
default: RedisEvictionPolicies;
|
|
32
|
+
values: Record<RedisEvictionPolicies, string>;
|
|
33
|
+
};
|
|
34
|
+
notify_keyspace_events: {
|
|
35
|
+
desc: string;
|
|
36
|
+
value: string;
|
|
37
|
+
default: string;
|
|
38
|
+
};
|
|
39
|
+
timeout: {
|
|
40
|
+
desc: string;
|
|
41
|
+
value: number;
|
|
42
|
+
default: number;
|
|
43
|
+
};
|
|
44
|
+
standby_segv_workaround: {
|
|
45
|
+
desc: string;
|
|
46
|
+
value: boolean;
|
|
47
|
+
default: boolean;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
export declare type RedisMaintenanceWindowResponse = {
|
|
51
|
+
window: string | null;
|
|
52
|
+
scheduled_at?: string;
|
|
53
|
+
};
|
|
54
|
+
export declare type RedisFormationWaitResponse = {
|
|
55
|
+
message: string;
|
|
56
|
+
'waiting?': boolean;
|
|
57
|
+
};
|
|
58
|
+
declare type HttpVerb = 'GET' | 'POST' | 'PATCH' | 'DELETE' | 'PUT';
|
|
59
|
+
declare const _default: (app: string, database: string | undefined, json: boolean, heroku: APIClient) => {
|
|
60
|
+
request<T>(path: string, method?: HttpVerb, body?: {}): Promise<import("http-call").HTTP<T>>;
|
|
61
|
+
makeAddonsFilter(filter: string | undefined): (addons: Required<Heroku.AddOn>[]) => Required<Heroku.AddOn>[];
|
|
62
|
+
getRedisAddon(addons?: Required<Heroku.AddOn>[]): Promise<Required<Heroku.AddOn>>;
|
|
63
|
+
info(): Promise<void>;
|
|
64
|
+
};
|
|
65
|
+
export default _default;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
exports.default = (app, database, json, heroku) => {
|
|
6
|
+
const HOST = process.env.HEROKU_REDIS_HOST || 'api.data.heroku.com';
|
|
7
|
+
const ADDON = process.env.HEROKU_REDIS_ADDON_NAME || 'heroku-redis';
|
|
8
|
+
return {
|
|
9
|
+
request(path, method = 'GET', body = {}) {
|
|
10
|
+
const headers = { Accept: 'application/json' };
|
|
11
|
+
if (process.env.HEROKU_HEADERS) {
|
|
12
|
+
Object.assign(headers, JSON.parse(process.env.HEROKU_HEADERS));
|
|
13
|
+
}
|
|
14
|
+
return heroku.request(path, {
|
|
15
|
+
hostname: HOST,
|
|
16
|
+
method,
|
|
17
|
+
headers,
|
|
18
|
+
body,
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
|
+
makeAddonsFilter(filter) {
|
|
22
|
+
if (filter) {
|
|
23
|
+
filter = filter.toUpperCase();
|
|
24
|
+
}
|
|
25
|
+
function matches(addon) {
|
|
26
|
+
const configVars = addon.config_vars || [];
|
|
27
|
+
for (const configVar of configVars) {
|
|
28
|
+
const cfgName = configVar.toUpperCase();
|
|
29
|
+
if (filter && cfgName.includes(filter)) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (addon.name && filter && addon.name.toUpperCase().includes(filter)) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
function onResponse(addons) {
|
|
39
|
+
var _a;
|
|
40
|
+
const redisAddons = [];
|
|
41
|
+
for (const addon of addons) {
|
|
42
|
+
const service = (_a = addon === null || addon === void 0 ? void 0 : addon.addon_service) === null || _a === void 0 ? void 0 : _a.name;
|
|
43
|
+
if (service && service.indexOf(ADDON) === 0 && (!filter || matches(addon))) {
|
|
44
|
+
redisAddons.push(addon);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return redisAddons;
|
|
48
|
+
}
|
|
49
|
+
return onResponse;
|
|
50
|
+
},
|
|
51
|
+
async getRedisAddon(addons) {
|
|
52
|
+
if (!addons) {
|
|
53
|
+
({ body: addons } = await heroku.get(`/apps/${app}/addons`));
|
|
54
|
+
}
|
|
55
|
+
const addonsFilter = this.makeAddonsFilter(database);
|
|
56
|
+
const redisAddons = addonsFilter(addons);
|
|
57
|
+
if (redisAddons.length === 0) {
|
|
58
|
+
core_1.ux.error('No Redis instances found.', { exit: 1 });
|
|
59
|
+
}
|
|
60
|
+
else if (redisAddons.length > 1) {
|
|
61
|
+
const names = redisAddons.map(function (addon) {
|
|
62
|
+
return addon.name;
|
|
63
|
+
});
|
|
64
|
+
core_1.ux.error(`Please specify a single instance. Found: ${names.join(', ')}`, { exit: 1 });
|
|
65
|
+
}
|
|
66
|
+
return redisAddons[0];
|
|
67
|
+
},
|
|
68
|
+
async info() {
|
|
69
|
+
let { body: addons } = await heroku.get(`/apps/${app}/addons`);
|
|
70
|
+
// filter out non-redis addons
|
|
71
|
+
addons = this.makeAddonsFilter(database)(addons);
|
|
72
|
+
// get info for each db
|
|
73
|
+
const databases = addons.map(addon => {
|
|
74
|
+
return {
|
|
75
|
+
addon: addon,
|
|
76
|
+
redis: this.request(`/redis/v0/databases/${addon.name}`).catch(function (error) {
|
|
77
|
+
if (error.statusCode !== 404) {
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}),
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
if (json) {
|
|
85
|
+
const redii = [];
|
|
86
|
+
for (const db of databases) {
|
|
87
|
+
const { body: redis } = await db.redis || {};
|
|
88
|
+
if (!redis) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const json_data = redis;
|
|
92
|
+
json_data.app = db.addon.app;
|
|
93
|
+
json_data.config_vars = db.addon.config_vars;
|
|
94
|
+
const { formation, metaas_source, port } = json_data, filteredRedis = tslib_1.__rest(json_data, ["formation", "metaas_source", "port"]);
|
|
95
|
+
redii.push(filteredRedis);
|
|
96
|
+
}
|
|
97
|
+
core_1.ux.styledJSON(redii);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// print out the info of the addon and redis db info
|
|
101
|
+
for (const db of databases) {
|
|
102
|
+
const { body: redis } = await db.redis || {};
|
|
103
|
+
if (!redis) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
let uxHeader = db.addon.name;
|
|
107
|
+
if (db.addon && db.addon.config_vars) {
|
|
108
|
+
uxHeader += ` (${db.addon.config_vars.join(', ')})`;
|
|
109
|
+
}
|
|
110
|
+
if (uxHeader) {
|
|
111
|
+
core_1.ux.styledHeader(uxHeader);
|
|
112
|
+
core_1.ux.styledObject(
|
|
113
|
+
// eslint-disable-next-line unicorn/no-array-reduce
|
|
114
|
+
redis.info.reduce(function (memo, row) {
|
|
115
|
+
memo[row.name] = row.values;
|
|
116
|
+
return memo;
|
|
117
|
+
}, {}), redis.info.map(row => row.name));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const stream: (url: string) => Promise<unknown>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stream = void 0;
|
|
4
|
+
const got_1 = require("got");
|
|
5
|
+
const stream = function (url) {
|
|
6
|
+
return new Promise(function (resolve, reject) {
|
|
7
|
+
const stream = got_1.default.stream(url);
|
|
8
|
+
stream.on('error', reject);
|
|
9
|
+
stream.on('end', resolve);
|
|
10
|
+
const piped = stream.pipe(process.stdout);
|
|
11
|
+
piped.on('error', reject);
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
exports.stream = stream;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { APIClient } from '@heroku-cli/command';
|
|
2
|
+
import * as Heroku from '@heroku-cli/schema';
|
|
3
|
+
export declare const findRelease: (heroku: APIClient, app: string, search: (releases: Heroku.Release[]) => Heroku.Release) => Promise<Heroku.Release>;
|
|
4
|
+
export declare const getRelease: (heroku: APIClient, app: string, release: string) => Promise<Heroku.Release>;
|
|
5
|
+
export declare const findByLatestOrId: (heroku: APIClient, app: string, release?: string) => Promise<Heroku.Release>;
|
|
6
|
+
export declare const findByPreviousOrId: (heroku: APIClient, app: string, release?: string) => Promise<Heroku.Release>;
|