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
|
@@ -3,10 +3,11 @@ export default class AppsRename extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static help: string;
|
|
5
5
|
static topic: string;
|
|
6
|
-
static
|
|
6
|
+
static hiddenAliases: string[];
|
|
7
7
|
static examples: string[];
|
|
8
8
|
static flags: {
|
|
9
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>;
|
|
10
11
|
};
|
|
11
12
|
static args: {
|
|
12
13
|
newname: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
@@ -38,12 +38,13 @@ exports.default = AppsRename;
|
|
|
38
38
|
AppsRename.description = 'rename an app';
|
|
39
39
|
AppsRename.help = 'This will locally update the git remote if it is set to the old app.';
|
|
40
40
|
AppsRename.topic = 'apps';
|
|
41
|
-
AppsRename.
|
|
41
|
+
AppsRename.hiddenAliases = ['rename'];
|
|
42
42
|
AppsRename.examples = [
|
|
43
43
|
'$ heroku apps:rename --app oldname newname',
|
|
44
44
|
];
|
|
45
45
|
AppsRename.flags = {
|
|
46
46
|
app: command_1.flags.app({ required: true }),
|
|
47
|
+
remote: command_1.flags.remote(),
|
|
47
48
|
};
|
|
48
49
|
AppsRename.args = {
|
|
49
50
|
newname: core_1.Args.string({ required: true }),
|
|
@@ -2,9 +2,10 @@ import { Command } from '@heroku-cli/command';
|
|
|
2
2
|
export default class StacksIndex extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static topic: string;
|
|
5
|
-
static
|
|
5
|
+
static hiddenAliases: string[];
|
|
6
6
|
static flags: {
|
|
7
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>;
|
|
8
9
|
};
|
|
9
10
|
run(): Promise<void>;
|
|
10
11
|
}
|
|
@@ -37,7 +37,8 @@ class StacksIndex extends command_1.Command {
|
|
|
37
37
|
exports.default = StacksIndex;
|
|
38
38
|
StacksIndex.description = 'show the list of available stacks';
|
|
39
39
|
StacksIndex.topic = 'apps';
|
|
40
|
-
StacksIndex.
|
|
40
|
+
StacksIndex.hiddenAliases = ['stack'];
|
|
41
41
|
StacksIndex.flags = {
|
|
42
42
|
app: command_1.flags.app({ required: true }),
|
|
43
|
+
remote: command_1.flags.remote(),
|
|
43
44
|
};
|
|
@@ -2,7 +2,7 @@ import { Command } from '@heroku-cli/command';
|
|
|
2
2
|
export default class Set extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static example: string;
|
|
5
|
-
static
|
|
5
|
+
static hiddenAliases: string[];
|
|
6
6
|
static flags: {
|
|
7
7
|
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
8
|
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
@@ -31,7 +31,7 @@ Set.example = `$ heroku stack:set heroku-22 -a myapp
|
|
|
31
31
|
Setting stack to heroku-22... done
|
|
32
32
|
You will need to redeploy myapp for the change to take effect.
|
|
33
33
|
Run git push heroku main to trigger a new build on myapp.`;
|
|
34
|
-
Set.
|
|
34
|
+
Set.hiddenAliases = ['stack:set'];
|
|
35
35
|
Set.flags = {
|
|
36
36
|
app: command_1.flags.app({ required: true }),
|
|
37
37
|
remote: command_1.flags.remote(),
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class AppsTransfer extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
locked: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
bulk: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, 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
|
+
confirm: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
static args: {
|
|
13
|
+
recipient: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
14
|
+
};
|
|
15
|
+
static examples: string[];
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
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 lodash_1 = require("lodash");
|
|
7
|
+
const inquirer = require("inquirer");
|
|
8
|
+
const teamUtils_1 = require("../../lib/teamUtils");
|
|
9
|
+
const lock_1 = require("./lock");
|
|
10
|
+
const app_transfer_1 = require("../../lib/apps/app-transfer");
|
|
11
|
+
const confirmCommand_1 = require("../../lib/confirmCommand");
|
|
12
|
+
function getAppsToTransfer(apps) {
|
|
13
|
+
return inquirer.prompt([{
|
|
14
|
+
type: 'checkbox',
|
|
15
|
+
name: 'choices',
|
|
16
|
+
pageSize: 20,
|
|
17
|
+
message: 'Select applications you would like to transfer',
|
|
18
|
+
choices: apps.map(function (app) {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
return {
|
|
21
|
+
name: `${app.name} (${(0, teamUtils_1.getOwner)((_a = app.owner) === null || _a === void 0 ? void 0 : _a.email)})`, value: { name: app.name, owner: (_b = app.owner) === null || _b === void 0 ? void 0 : _b.email },
|
|
22
|
+
};
|
|
23
|
+
}),
|
|
24
|
+
}]);
|
|
25
|
+
}
|
|
26
|
+
class AppsTransfer extends command_1.Command {
|
|
27
|
+
async run() {
|
|
28
|
+
var _a, _b, _c, _d;
|
|
29
|
+
const { flags, args } = await this.parse(AppsTransfer);
|
|
30
|
+
const { app, bulk, locked, confirm } = flags;
|
|
31
|
+
const recipient = args.recipient;
|
|
32
|
+
if (bulk) {
|
|
33
|
+
const { body: allApps } = await this.heroku.get('/apps');
|
|
34
|
+
const selectedApps = await getAppsToTransfer((0, lodash_1.sortBy)(allApps, 'name'));
|
|
35
|
+
core_1.ux.warn(`Transferring applications to ${color_1.default.magenta(recipient)}...\n`);
|
|
36
|
+
for (const app of selectedApps.choices) {
|
|
37
|
+
try {
|
|
38
|
+
await (0, app_transfer_1.appTransfer)({
|
|
39
|
+
heroku: this.heroku,
|
|
40
|
+
appName: app.name,
|
|
41
|
+
recipient: recipient,
|
|
42
|
+
personalToPersonal: (0, teamUtils_1.isValidEmail)(recipient) && !(0, teamUtils_1.isTeamApp)(app.owner),
|
|
43
|
+
bulk: true,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const { message } = error;
|
|
48
|
+
core_1.ux.error(message);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const { body: appInfo } = await this.heroku.get(`/apps/${app}`);
|
|
54
|
+
const appName = (_b = (_a = appInfo.name) !== null && _a !== void 0 ? _a : app) !== null && _b !== void 0 ? _b : '';
|
|
55
|
+
if ((0, teamUtils_1.isValidEmail)(recipient) && (0, teamUtils_1.isTeamApp)((_c = appInfo.owner) === null || _c === void 0 ? void 0 : _c.email)) {
|
|
56
|
+
await (0, confirmCommand_1.default)(appName, confirm, 'All collaborators will be removed from this app');
|
|
57
|
+
}
|
|
58
|
+
await (0, app_transfer_1.appTransfer)({
|
|
59
|
+
heroku: this.heroku,
|
|
60
|
+
appName,
|
|
61
|
+
recipient,
|
|
62
|
+
personalToPersonal: (0, teamUtils_1.isValidEmail)(recipient) && !(0, teamUtils_1.isTeamApp)((_d = appInfo.owner) === null || _d === void 0 ? void 0 : _d.email),
|
|
63
|
+
bulk,
|
|
64
|
+
});
|
|
65
|
+
if (locked) {
|
|
66
|
+
await lock_1.default.run(['--app', appName], this.config);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.default = AppsTransfer;
|
|
72
|
+
AppsTransfer.topic = 'apps';
|
|
73
|
+
AppsTransfer.description = 'transfer applications to another user or team';
|
|
74
|
+
AppsTransfer.flags = {
|
|
75
|
+
locked: command_1.flags.boolean({ char: 'l', required: false, description: 'lock the app upon transfer' }),
|
|
76
|
+
bulk: command_1.flags.boolean({ required: false, description: 'transfer applications in bulk' }),
|
|
77
|
+
app: command_1.flags.app(),
|
|
78
|
+
remote: command_1.flags.remote({ char: 'r' }),
|
|
79
|
+
confirm: command_1.flags.string({ char: 'c', hidden: true }),
|
|
80
|
+
};
|
|
81
|
+
AppsTransfer.args = {
|
|
82
|
+
recipient: core_1.Args.string({ description: 'user or team to transfer applications to', required: true }),
|
|
83
|
+
};
|
|
84
|
+
AppsTransfer.examples = [`$ heroku apps:transfer collaborator@example.com
|
|
85
|
+
Transferring example to collaborator@example.com... done
|
|
86
|
+
|
|
87
|
+
$ heroku apps:transfer acme-widgets
|
|
88
|
+
Transferring example to acme-widgets... done
|
|
89
|
+
|
|
90
|
+
$ heroku apps:transfer --bulk acme-widgets
|
|
91
|
+
...`];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Unlock extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static aliases: string[];
|
|
6
|
+
static flags: {
|
|
7
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
class Unlock extends command_1.Command {
|
|
7
|
+
async run() {
|
|
8
|
+
var _a;
|
|
9
|
+
const { flags } = await this.parse(Unlock);
|
|
10
|
+
const { app } = flags;
|
|
11
|
+
const { body: appResponse } = await this.heroku.get(`/teams/apps/${app}`);
|
|
12
|
+
const appName = (_a = appResponse.name) !== null && _a !== void 0 ? _a : app;
|
|
13
|
+
if (!appResponse.locked) {
|
|
14
|
+
core_1.ux.error(`cannot unlock ${color_1.default.cyan(appName)}\nThis app is not locked.`, { exit: 1 });
|
|
15
|
+
}
|
|
16
|
+
core_1.ux.action.start(`Unlocking ${color_1.default.cyan(appName)}`);
|
|
17
|
+
await this.heroku.patch(`/teams/apps/${appName}`, {
|
|
18
|
+
body: { locked: false },
|
|
19
|
+
});
|
|
20
|
+
core_1.ux.action.stop();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.default = Unlock;
|
|
24
|
+
Unlock.topic = 'apps';
|
|
25
|
+
Unlock.description = 'unlock an app so any team member can join';
|
|
26
|
+
Unlock.aliases = ['unlock'];
|
|
27
|
+
Unlock.flags = {
|
|
28
|
+
app: command_1.flags.app({ required: true }),
|
|
29
|
+
remote: command_1.flags.remote(),
|
|
30
|
+
};
|
|
@@ -11,10 +11,11 @@ class AuthToken extends command_1.Command {
|
|
|
11
11
|
try {
|
|
12
12
|
const { body: tokens } = await this.heroku.get('/oauth/authorizations', { retryAuth: false });
|
|
13
13
|
const token = tokens.find((t) => t.access_token && t.access_token.token === this.heroku.auth);
|
|
14
|
+
const isInternal = token ? token.user.email.includes('@heroku.com') : false;
|
|
14
15
|
if (token && token.access_token.expires_in) {
|
|
15
16
|
const d = new Date();
|
|
16
17
|
d.setSeconds(d.getSeconds() + token.access_token.expires_in);
|
|
17
|
-
this.warn(`token will expire ${(0, date_fns_1.formatRelative)(d, new Date())}\
|
|
18
|
+
this.warn(`token will expire ${(0, date_fns_1.formatRelative)(d, new Date())}\n${isInternal ? 'All tokens expire one year after we generate it.' : `To generate a token that expires in one year, use ${color_1.default.cmd('heroku authorizations:create')}.`}`);
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
catch (error) {
|
|
@@ -8,7 +8,7 @@ class AuthorizationsCreate extends command_1.Command {
|
|
|
8
8
|
async run() {
|
|
9
9
|
const { flags } = await this.parse(AuthorizationsCreate);
|
|
10
10
|
core_1.ux.action.start('Creating OAuth Authorization');
|
|
11
|
-
const { body: auth } = await this.heroku.post('/oauth/authorizations', {
|
|
11
|
+
const { body: auth, headers } = await this.heroku.post('/oauth/authorizations', {
|
|
12
12
|
body: {
|
|
13
13
|
description: flags.description,
|
|
14
14
|
scope: flags.scope ? flags.scope.split(',') : undefined,
|
|
@@ -16,6 +16,10 @@ class AuthorizationsCreate extends command_1.Command {
|
|
|
16
16
|
},
|
|
17
17
|
});
|
|
18
18
|
core_1.ux.action.stop();
|
|
19
|
+
const apiWarnings = headers['warning-message'] || '';
|
|
20
|
+
if (apiWarnings) {
|
|
21
|
+
core_1.ux.warn(apiWarnings);
|
|
22
|
+
}
|
|
19
23
|
if (flags.short) {
|
|
20
24
|
core_1.ux.log(auth.access_token && auth.access_token.token);
|
|
21
25
|
}
|
|
@@ -6,7 +6,11 @@ const authorizations_1 = require("../../lib/authorizations/authorizations");
|
|
|
6
6
|
class AuthorizationsInfo extends command_1.Command {
|
|
7
7
|
async run() {
|
|
8
8
|
const { args, flags } = await this.parse(AuthorizationsInfo);
|
|
9
|
-
const { body: authentication } = await this.heroku.get(`/oauth/authorizations/${args.id}`);
|
|
9
|
+
const { body: authentication, headers } = await this.heroku.get(`/oauth/authorizations/${args.id}`);
|
|
10
|
+
const apiWarnings = headers['warning-message'] || '';
|
|
11
|
+
if (apiWarnings) {
|
|
12
|
+
core_1.ux.warn(apiWarnings);
|
|
13
|
+
}
|
|
10
14
|
if (flags.json) {
|
|
11
15
|
core_1.ux.styledJSON(authentication);
|
|
12
16
|
}
|
|
@@ -7,7 +7,11 @@ class AuthorizationsRevoke extends command_1.Command {
|
|
|
7
7
|
async run() {
|
|
8
8
|
const { args } = await this.parse(AuthorizationsRevoke);
|
|
9
9
|
core_1.ux.action.start('Revoking OAuth Authorization');
|
|
10
|
-
const { body: auth } = await this.heroku.delete(`/oauth/authorizations/${encodeURIComponent(args.id)}`);
|
|
10
|
+
const { body: auth, headers } = await this.heroku.delete(`/oauth/authorizations/${encodeURIComponent(args.id)}`);
|
|
11
|
+
const apiWarnings = headers['warning-message'] || '';
|
|
12
|
+
if (apiWarnings) {
|
|
13
|
+
core_1.ux.warn(apiWarnings);
|
|
14
|
+
}
|
|
11
15
|
core_1.ux.action.stop(`done, revoked authorization from ${color_1.default.cyan(auth.description)}`);
|
|
12
16
|
}
|
|
13
17
|
}
|
|
@@ -7,7 +7,11 @@ class AuthorizationsRotate extends command_1.Command {
|
|
|
7
7
|
async run() {
|
|
8
8
|
const { args } = await this.parse(AuthorizationsRotate);
|
|
9
9
|
core_1.ux.action.start('Rotating OAuth Authorization');
|
|
10
|
-
const { body: authorization } = await this.heroku.post(`/oauth/authorizations/${encodeURIComponent(args.id)}/actions/regenerate-tokens`);
|
|
10
|
+
const { body: authorization, headers } = await this.heroku.post(`/oauth/authorizations/${encodeURIComponent(args.id)}/actions/regenerate-tokens`);
|
|
11
|
+
const apiWarnings = headers['warning-message'] || '';
|
|
12
|
+
if (apiWarnings) {
|
|
13
|
+
core_1.ux.warn(apiWarnings);
|
|
14
|
+
}
|
|
11
15
|
core_1.ux.action.stop();
|
|
12
16
|
(0, authorizations_1.display)(authorization);
|
|
13
17
|
}
|
|
@@ -14,12 +14,16 @@ class AuthorizationsUpdate extends command_1.Command {
|
|
|
14
14
|
secret: flags['client-secret'],
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
-
const { body: authentication } = await this.heroku.patch(`/oauth/authorizations/${args.id}`, {
|
|
17
|
+
const { body: authentication, headers } = await this.heroku.patch(`/oauth/authorizations/${args.id}`, {
|
|
18
18
|
body: {
|
|
19
19
|
description: flags.description,
|
|
20
20
|
client,
|
|
21
21
|
},
|
|
22
22
|
});
|
|
23
|
+
const apiWarnings = headers['warning-message'] || '';
|
|
24
|
+
if (apiWarnings) {
|
|
25
|
+
core_1.ux.warn(apiWarnings);
|
|
26
|
+
}
|
|
23
27
|
core_1.ux.action.stop();
|
|
24
28
|
(0, authorizations_1.display)(authentication);
|
|
25
29
|
}
|
|
@@ -22,8 +22,8 @@ class Doctor extends base_1.AutocompleteBase {
|
|
|
22
22
|
const shellProfilePath = path.join(process.env.HOME || '', shell === 'zsh' ? '.zshrc' : '.bashrc');
|
|
23
23
|
const shellProfile = fs.readFileSync(shellProfilePath);
|
|
24
24
|
const regex = /AC_\w+_SETUP_PATH/;
|
|
25
|
-
const
|
|
26
|
-
data.push({ name: `~/${shell === 'zsh' ? '.zshrc' : '.bashrc'} shimmed`, value:
|
|
25
|
+
const shimValue = regex.exec(shellProfile.toString()) ? 'present' : 'missing';
|
|
26
|
+
data.push({ name: `~/${shell === 'zsh' ? '.zshrc' : '.bashrc'} shimmed`, value: shimValue });
|
|
27
27
|
// check shell shim
|
|
28
28
|
const shellCompletion = path.join(this.autocompleteCacheDir, `${shell}_setup`);
|
|
29
29
|
const shellCompletionValue = fs.existsSync(shellCompletion) ? 'present' : 'missing';
|
|
@@ -18,7 +18,7 @@ class Options extends base_1.AutocompleteBase {
|
|
|
18
18
|
// Klass: (class) Command class
|
|
19
19
|
// completion: (object) object with data/methods to build/retrive options from cache
|
|
20
20
|
// curPosition*: the current argv position the shell is trying to complete
|
|
21
|
-
// options: (string) white-space
|
|
21
|
+
// options: (string) white-space separated list of values for the shell to use for completion
|
|
22
22
|
async run() {
|
|
23
23
|
this.errorIfWindows();
|
|
24
24
|
// ex: heroku autocomplete:options 'heroku addons:destroy -a myapp myaddon'
|
|
@@ -164,7 +164,7 @@ class Options extends base_1.AutocompleteBase {
|
|
|
164
164
|
return false;
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
-
// --app=my-app is
|
|
167
|
+
// --app=my-app is considered a flag & not a flag value
|
|
168
168
|
// the shell's autocomplete handles partial value matching
|
|
169
169
|
// add parsedFlag
|
|
170
170
|
if (wildSplit.length === 2 && name)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Add extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static strict: boolean;
|
|
5
|
+
static description: string;
|
|
6
|
+
static examples: string[];
|
|
7
|
+
static flags: {
|
|
8
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
static args: {
|
|
12
|
+
CRT: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
13
|
+
KEY: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
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 domains_1 = require("../../lib/certs/domains");
|
|
7
|
+
const inquirer_1 = require("inquirer");
|
|
8
|
+
const get_cert_and_key_1 = require("../../lib/certs/get_cert_and_key");
|
|
9
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
10
|
+
const certificate_details_1 = require("../../lib/certs/certificate_details");
|
|
11
|
+
async function configureDomains(app, heroku, cert) {
|
|
12
|
+
const certDomains = cert.ssl_cert.cert_domains;
|
|
13
|
+
const apiDomains = await (0, domains_1.waitForDomains)(app, heroku);
|
|
14
|
+
const appDomains = apiDomains === null || apiDomains === void 0 ? void 0 : apiDomains.map((domain) => domain.hostname);
|
|
15
|
+
const matchedDomains = matchDomains(certDomains, appDomains !== null && appDomains !== void 0 ? appDomains : []);
|
|
16
|
+
if (matchedDomains.length > 0) {
|
|
17
|
+
core_1.ux.styledHeader('Almost done! Which of these domains on this application would you like this certificate associated with?');
|
|
18
|
+
const selections = await (0, inquirer_1.prompt)([{
|
|
19
|
+
type: 'checkbox',
|
|
20
|
+
name: 'domains',
|
|
21
|
+
message: 'Select domains',
|
|
22
|
+
choices: matchedDomains,
|
|
23
|
+
}]);
|
|
24
|
+
await Promise.all(selections === null || selections === void 0 ? void 0 : selections.domains.map(domain => {
|
|
25
|
+
return heroku.patch(`/apps/${app}/domains/${domain}`, {
|
|
26
|
+
body: { sni_endpoint: cert.name },
|
|
27
|
+
});
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
class Add extends command_1.Command {
|
|
32
|
+
async run() {
|
|
33
|
+
const { flags, args } = await this.parse(Add);
|
|
34
|
+
const { app } = flags;
|
|
35
|
+
const files = await (0, get_cert_and_key_1.getCertAndKey)(args);
|
|
36
|
+
core_1.ux.action.start(`Adding SSL certificate to ${color_1.default.magenta(app)}`);
|
|
37
|
+
const { body: sniEndpoint } = await this.heroku.post(`/apps/${app}/sni-endpoints`, {
|
|
38
|
+
body: {
|
|
39
|
+
certificate_chain: files.crt.toString(),
|
|
40
|
+
private_key: files.key.toString(),
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
core_1.ux.action.stop();
|
|
44
|
+
(0, certificate_details_1.displayCertificateDetails)(sniEndpoint);
|
|
45
|
+
await configureDomains(app, this.heroku, sniEndpoint);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.default = Add;
|
|
49
|
+
Add.topic = 'certs';
|
|
50
|
+
Add.strict = true;
|
|
51
|
+
Add.description = `Add an SSL certificate to an app.
|
|
52
|
+
|
|
53
|
+
Note: certificates with PEM encoding are also valid.
|
|
54
|
+
`;
|
|
55
|
+
Add.examples = [
|
|
56
|
+
(0, tsheredoc_1.default)(`$ heroku certs:add example.com.crt example.com.key
|
|
57
|
+
If you require intermediate certificates, refer to this article on merging certificates to get a complete chain:
|
|
58
|
+
https://help.salesforce.com/s/articleView?id=000333504&type=1`),
|
|
59
|
+
];
|
|
60
|
+
Add.flags = {
|
|
61
|
+
app: command_1.flags.app({ required: true }),
|
|
62
|
+
remote: command_1.flags.remote(),
|
|
63
|
+
};
|
|
64
|
+
Add.args = {
|
|
65
|
+
CRT: core_1.Args.string({ required: true }),
|
|
66
|
+
KEY: core_1.Args.string({ required: true }),
|
|
67
|
+
};
|
|
68
|
+
function splitDomains(domains) {
|
|
69
|
+
return domains.map(domain => {
|
|
70
|
+
return [domain.slice(0, 1), domain.slice(1)];
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function createMatcherFromSplitDomain([firstChar, rest]) {
|
|
74
|
+
const matcherContents = [];
|
|
75
|
+
if (firstChar === '*') {
|
|
76
|
+
matcherContents.push('^[\\w\\-]+');
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
matcherContents.push(firstChar);
|
|
80
|
+
}
|
|
81
|
+
const escapedRest = rest.replace(/\./g, '\\.');
|
|
82
|
+
matcherContents.push(escapedRest);
|
|
83
|
+
return new RegExp(matcherContents.join(''));
|
|
84
|
+
}
|
|
85
|
+
function matchDomains(certDomains, appDomains) {
|
|
86
|
+
const splitCertDomains = splitDomains(certDomains);
|
|
87
|
+
const matchers = splitCertDomains.map(splitDomain => createMatcherFromSplitDomain(splitDomain));
|
|
88
|
+
if (splitCertDomains.some(domain => (domain[0] === '*'))) {
|
|
89
|
+
const matchedDomains = [];
|
|
90
|
+
appDomains.forEach(appDomain => {
|
|
91
|
+
if (matchers.some(matcher => matcher.test(appDomain))) {
|
|
92
|
+
matchedDomains.push(appDomain);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
return matchedDomains;
|
|
96
|
+
}
|
|
97
|
+
return certDomains.filter(domain => appDomains.includes(domain));
|
|
98
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Disable extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
confirm: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
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 tsheredoc_1 = require("tsheredoc");
|
|
8
|
+
class Disable extends command_1.Command {
|
|
9
|
+
async run() {
|
|
10
|
+
const { flags } = await this.parse(Disable);
|
|
11
|
+
const { app, confirm } = flags;
|
|
12
|
+
const warning = (0, tsheredoc_1.default)(`
|
|
13
|
+
This command will disable Automatic Certificate Management from ${color_1.default.app(app)}.
|
|
14
|
+
This will cause the certificate to be removed from ${color_1.default.app(app)} causing SSL
|
|
15
|
+
validation errors. In order to avoid downtime, the recommended steps
|
|
16
|
+
are preferred which will also disable Automatic Certificate Management.
|
|
17
|
+
|
|
18
|
+
1) Request a new SSL certificate for your domains names from your certificate provider
|
|
19
|
+
2) heroku certs:update CRT KEY
|
|
20
|
+
`);
|
|
21
|
+
await (0, confirmCommand_1.default)(app, confirm, warning);
|
|
22
|
+
core_1.ux.action.start('Disabling Automatic Certificate Management');
|
|
23
|
+
await this.heroku.delete(`/apps/${app}/acm`);
|
|
24
|
+
core_1.ux.action.stop();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.default = Disable;
|
|
28
|
+
Disable.topic = 'certs';
|
|
29
|
+
Disable.description = 'disable ACM for an app';
|
|
30
|
+
Disable.flags = {
|
|
31
|
+
confirm: command_1.flags.string({ char: 'c', hidden: true }),
|
|
32
|
+
app: command_1.flags.app({ required: true }),
|
|
33
|
+
remote: command_1.flags.remote(),
|
|
34
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Enable extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
wait: 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
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
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 domains_1 = require("../../../lib/domains/domains");
|
|
7
|
+
const notify_1 = require("../../../lib/notify");
|
|
8
|
+
class Enable extends command_1.Command {
|
|
9
|
+
async run() {
|
|
10
|
+
const { flags } = await this.parse(Enable);
|
|
11
|
+
const { app, wait } = flags;
|
|
12
|
+
core_1.ux.action.start('Enabling Automatic Certificate Management');
|
|
13
|
+
const domainsBeforeEnable = await (0, domains_1.getDomains)(this.heroku, app);
|
|
14
|
+
await this.heroku.post(`/apps/${app}/acm`, { body: {} });
|
|
15
|
+
if (wait) {
|
|
16
|
+
core_1.ux.action.stop(`${color_1.default.yellow('starting')}.`);
|
|
17
|
+
try {
|
|
18
|
+
await (0, domains_1.waitForCertIssuedOnDomains)(this.heroku, app);
|
|
19
|
+
(0, notify_1.default)('heroku certs:auto:enable', 'Certificate issued to all domains');
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
(0, notify_1.default)('heroku certs:auto:enable', 'An error occurred', false);
|
|
23
|
+
core_1.ux.styledHeader(`${color_1.default.red('Error')}: The certificate could not be issued to all domains. See status with ${color_1.default.cmd('heroku certs:auto')}.`);
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
core_1.ux.action.stop(`${color_1.default.yellow('starting')}. See status with ${color_1.default.cmd('heroku certs:auto')} or wait until active with ${color_1.default.cmd('heroku certs:auto --wait')}`);
|
|
29
|
+
}
|
|
30
|
+
const domains = await (0, domains_1.waitForDomains)(this.heroku, app);
|
|
31
|
+
const changedCnames = domains.filter(function (domain) {
|
|
32
|
+
const domainBeforeEnable = domainsBeforeEnable.find(domainBefore => domain.hostname === domainBefore.hostname);
|
|
33
|
+
return domainBeforeEnable && domain.cname !== domainBeforeEnable.cname;
|
|
34
|
+
});
|
|
35
|
+
const message = `Your certificate will now be managed by Heroku. Check the status by running ${color_1.default.cmd('heroku certs:auto')}.`;
|
|
36
|
+
if (domains.length === 0 || changedCnames.length > 0) {
|
|
37
|
+
(0, domains_1.printDomains)(changedCnames, message);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
core_1.ux.styledHeader(message);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.default = Enable;
|
|
45
|
+
Enable.topic = 'certs';
|
|
46
|
+
Enable.description = 'enable ACM status for an app';
|
|
47
|
+
Enable.flags = {
|
|
48
|
+
wait: command_1.flags.boolean({ description: 'watch ACM status and exit when complete' }),
|
|
49
|
+
app: command_1.flags.app({ required: true }),
|
|
50
|
+
remote: command_1.flags.remote(),
|
|
51
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Index extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static command: 'auto';
|
|
5
|
+
static description: string;
|
|
6
|
+
static flags: {
|
|
7
|
+
wait: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|