heroku 9.0.0-dev.0 → 9.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +20 -0
- package/lib/commands/addons/create.js +96 -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 +28 -0
- package/lib/commands/apps/create.js +201 -0
- package/lib/commands/apps/destroy.d.ts +15 -0
- package/lib/commands/apps/destroy.js +47 -0
- package/lib/commands/apps/errors.d.ts +13 -0
- package/lib/commands/apps/errors.js +120 -0
- package/lib/commands/apps/favorites/add.d.ts +2 -1
- package/lib/commands/apps/favorites/add.js +1 -0
- package/lib/commands/apps/favorites/remove.d.ts +2 -1
- package/lib/commands/apps/favorites/remove.js +1 -0
- package/lib/commands/apps/index.d.ts +16 -0
- package/lib/commands/apps/index.js +119 -0
- package/lib/commands/apps/info.d.ts +19 -0
- package/lib/commands/apps/info.js +162 -0
- 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 +15 -0
- package/lib/commands/apps/open.js +30 -0
- package/lib/commands/apps/rename.d.ts +16 -0
- package/lib/commands/apps/rename.js +51 -0
- package/lib/commands/apps/stacks/index.d.ts +3 -2
- package/lib/commands/apps/stacks/index.js +2 -1
- package/lib/commands/apps/stacks/set.d.ts +4 -4
- 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.d.ts +3 -3
- package/lib/commands/authorizations/create.js +5 -1
- package/lib/commands/authorizations/info.d.ts +1 -1
- package/lib/commands/authorizations/info.js +5 -1
- package/lib/commands/authorizations/revoke.d.ts +1 -1
- package/lib/commands/authorizations/revoke.js +5 -1
- package/lib/commands/authorizations/rotate.d.ts +1 -1
- package/lib/commands/authorizations/rotate.js +5 -1
- package/lib/commands/authorizations/update.d.ts +4 -4
- package/lib/commands/authorizations/update.js +5 -1
- package/lib/commands/autocomplete/doctor.js +2 -2
- package/lib/commands/autocomplete/options.d.ts +2 -2
- package/lib/commands/autocomplete/options.js +2 -2
- package/lib/commands/autocomplete/script.d.ts +1 -1
- package/lib/commands/buildpacks/add.d.ts +4 -4
- package/lib/commands/buildpacks/clear.d.ts +2 -2
- package/lib/commands/buildpacks/index.d.ts +2 -2
- package/lib/commands/buildpacks/info.d.ts +1 -1
- package/lib/commands/buildpacks/remove.d.ts +4 -4
- package/lib/commands/buildpacks/search.d.ts +4 -4
- package/lib/commands/buildpacks/set.d.ts +4 -4
- package/lib/commands/buildpacks/versions.d.ts +1 -1
- 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 +4 -3
- package/lib/commands/ci/config/get.js +3 -2
- package/lib/commands/ci/config/index.d.ts +3 -2
- package/lib/commands/ci/config/index.js +3 -2
- package/lib/commands/ci/config/set.d.ts +3 -2
- package/lib/commands/ci/config/set.js +2 -1
- package/lib/commands/ci/config/unset.d.ts +3 -3
- package/lib/commands/ci/config/unset.js +3 -3
- package/lib/commands/ci/debug.d.ts +2 -2
- package/lib/commands/ci/index.d.ts +3 -2
- package/lib/commands/ci/index.js +1 -0
- package/lib/commands/ci/info.d.ts +5 -4
- package/lib/commands/ci/info.js +1 -0
- package/lib/commands/ci/last.d.ts +4 -3
- package/lib/commands/ci/last.js +1 -0
- package/lib/commands/ci/open.d.ts +3 -2
- package/lib/commands/ci/open.js +1 -0
- package/lib/commands/ci/rerun.d.ts +4 -3
- package/lib/commands/ci/rerun.js +1 -0
- package/lib/commands/ci/run.d.ts +2 -2
- package/lib/commands/clients/create.d.ts +2 -2
- package/lib/commands/clients/destroy.d.ts +1 -1
- package/lib/commands/clients/info.d.ts +1 -1
- package/lib/commands/clients/rotate.d.ts +1 -1
- package/lib/commands/clients/update.d.ts +3 -3
- package/lib/commands/config/edit.d.ts +3 -3
- package/lib/commands/config/get.d.ts +3 -3
- package/lib/commands/config/index.d.ts +2 -2
- package/lib/commands/config/set.d.ts +12 -0
- package/lib/commands/config/set.js +60 -0
- package/lib/commands/config/unset.d.ts +2 -2
- package/lib/commands/console.d.ts +4 -4
- 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 +43 -0
- package/lib/commands/container/push.d.ts +16 -0
- package/lib/commands/container/push.js +103 -0
- package/lib/commands/container/release.d.ts +14 -0
- package/lib/commands/container/release.js +91 -0
- package/lib/commands/container/rm.d.ts +13 -0
- package/lib/commands/container/rm.js +39 -0
- package/lib/commands/container/run.d.ts +15 -0
- package/lib/commands/container/run.js +66 -0
- package/lib/commands/dashboard.d.ts +7 -0
- package/lib/commands/dashboard.js +164 -0
- package/lib/commands/domains/add.d.ts +4 -4
- package/lib/commands/domains/clear.d.ts +2 -2
- package/lib/commands/domains/index.d.ts +14 -10
- package/lib/commands/domains/index.js +47 -3
- package/lib/commands/domains/info.d.ts +3 -3
- package/lib/commands/domains/remove.d.ts +3 -3
- package/lib/commands/domains/update.d.ts +4 -4
- package/lib/commands/domains/wait.d.ts +3 -3
- package/lib/commands/drains/add.d.ts +12 -0
- package/lib/commands/drains/add.js +23 -0
- package/lib/commands/drains/index.d.ts +11 -0
- package/lib/commands/drains/index.js +50 -0
- package/lib/commands/drains/remove.d.ts +13 -0
- package/lib/commands/drains/remove.js +22 -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/git/clone.d.ts +3 -3
- package/lib/commands/git/credentials.d.ts +1 -1
- package/lib/commands/git/remote.d.ts +2 -2
- 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 +5 -5
- package/lib/commands/local/index.js +8 -3
- package/lib/commands/local/run.d.ts +2 -2
- package/lib/commands/local/run.js +8 -3
- package/lib/commands/logs.d.ts +6 -6
- 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/add.d.ts +4 -4
- package/lib/commands/pipelines/connect.d.ts +2 -2
- package/lib/commands/pipelines/connect.js +1 -1
- package/lib/commands/pipelines/create.d.ts +5 -5
- package/lib/commands/pipelines/destroy.d.ts +1 -1
- package/lib/commands/pipelines/diff.d.ts +2 -2
- package/lib/commands/pipelines/diff.js +1 -1
- package/lib/commands/pipelines/info.d.ts +1 -1
- package/lib/commands/pipelines/open.d.ts +1 -1
- package/lib/commands/pipelines/promote.d.ts +3 -3
- package/lib/commands/pipelines/remove.d.ts +2 -2
- package/lib/commands/pipelines/rename.d.ts +2 -2
- package/lib/commands/pipelines/setup.d.ts +3 -3
- package/lib/commands/pipelines/transfer.d.ts +3 -3
- package/lib/commands/pipelines/update.d.ts +3 -3
- package/lib/commands/ps/autoscale/disable.d.ts +2 -2
- package/lib/commands/ps/autoscale/enable.d.ts +5 -5
- 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/ps/wait.d.ts +4 -4
- package/lib/commands/rake.d.ts +4 -4
- 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/reviewapps/disable.d.ts +3 -3
- package/lib/commands/reviewapps/enable.d.ts +3 -3
- 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/sessions/destroy.d.ts +1 -1
- 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/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 +48 -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 +38 -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 +39 -0
- package/lib/commands/spaces/vpn/wait.d.ts +16 -0
- package/lib/commands/spaces/vpn/wait.js +70 -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/commands/webhooks/add.d.ts +8 -8
- package/lib/commands/webhooks/deliveries/index.d.ts +4 -4
- package/lib/commands/webhooks/deliveries/info.d.ts +4 -4
- package/lib/commands/webhooks/events/index.d.ts +3 -3
- package/lib/commands/webhooks/events/info.d.ts +4 -4
- package/lib/commands/webhooks/index.d.ts +3 -3
- package/lib/commands/webhooks/info.d.ts +4 -4
- package/lib/commands/webhooks/remove.d.ts +4 -4
- package/lib/commands/webhooks/update.d.ts +9 -9
- 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 +39 -0
- package/lib/lib/addons/resolve.js +180 -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/apps/error_info.d.ts +7 -0
- package/lib/lib/apps/error_info.js +185 -0
- package/lib/lib/autocomplete/base.d.ts +1 -1
- package/lib/lib/autocomplete/completions.d.ts +5 -1
- 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/git.d.ts +7 -1
- package/lib/lib/ci/git.js +44 -1
- 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/confirmCommand.js +23 -0
- 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/helpers.d.ts +8 -0
- package/lib/lib/container/helpers.js +29 -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/git/git.d.ts +3 -0
- package/lib/lib/git/git.js +22 -3
- 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/keyValueParser.d.ts +4 -0
- package/lib/lib/utils/keyValueParser.js +9 -0
- package/lib/lib/utils/multisort.d.ts +32 -0
- package/lib/lib/utils/multisort.js +66 -0
- package/lib/lib/utils/paginator.d.ts +2 -0
- package/lib/lib/utils/paginator.js +29 -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 +12684 -2674
- package/package.json +116 -65
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
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 certificate_details_1 = require("../../../lib/certs/certificate_details");
|
|
7
|
+
const domains_1 = require("../../../lib/domains/domains");
|
|
8
|
+
const date_fns_1 = require("date-fns");
|
|
9
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
10
|
+
function humanize(value) {
|
|
11
|
+
if (!value) {
|
|
12
|
+
return color_1.default.yellow('Waiting');
|
|
13
|
+
}
|
|
14
|
+
if (value === 'ok') {
|
|
15
|
+
return color_1.default.green('OK');
|
|
16
|
+
}
|
|
17
|
+
if (value === 'failed') {
|
|
18
|
+
return color_1.default.red('Failed');
|
|
19
|
+
}
|
|
20
|
+
if (value === 'verified') {
|
|
21
|
+
return color_1.default.yellow('In Progress');
|
|
22
|
+
}
|
|
23
|
+
if (value === 'dns-verified') {
|
|
24
|
+
return color_1.default.yellow('DNS Verified');
|
|
25
|
+
}
|
|
26
|
+
return value.split('-')
|
|
27
|
+
.map(word => word.replace(/(^[a-z])/, text => text.toUpperCase()))
|
|
28
|
+
.join(' ');
|
|
29
|
+
}
|
|
30
|
+
class Index extends command_1.Command {
|
|
31
|
+
async run() {
|
|
32
|
+
const { flags } = await this.parse(Index);
|
|
33
|
+
const [{ body: app }, { body: sniEndpoints }] = await Promise.all([
|
|
34
|
+
this.heroku.get(`/apps/${flags.app}`),
|
|
35
|
+
this.heroku.get(`/apps/${flags.app}/sni-endpoints`),
|
|
36
|
+
]);
|
|
37
|
+
if (!app.acm) {
|
|
38
|
+
core_1.ux.styledHeader(`Automatic Certificate Management is ${color_1.default.yellow('disabled')} on ${flags.app}`);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
core_1.ux.styledHeader(`Automatic Certificate Management is ${color_1.default.green('enabled')} on ${flags.app}`);
|
|
42
|
+
if (sniEndpoints.length === 1 && sniEndpoints[0].ssl_cert.acm) {
|
|
43
|
+
(0, certificate_details_1.displayCertificateDetails)(sniEndpoints[0]);
|
|
44
|
+
core_1.ux.log('');
|
|
45
|
+
}
|
|
46
|
+
if (flags.wait) {
|
|
47
|
+
await (0, domains_1.waitForCertIssuedOnDomains)(this.heroku, flags.app).catch(() => { });
|
|
48
|
+
}
|
|
49
|
+
let { body: domains } = await this.heroku.get(`/apps/${flags.app}/domains`);
|
|
50
|
+
domains = domains.filter(domain => domain.kind === 'custom');
|
|
51
|
+
let message;
|
|
52
|
+
if (domains.length === 0) {
|
|
53
|
+
message = `Add a custom domain to your app by running: ${color_1.default.cmd('heroku domains:add <yourdomain.com>')}`;
|
|
54
|
+
}
|
|
55
|
+
else if (domains.some(domain => domain.acm_status === 'failed')) {
|
|
56
|
+
message = (0, tsheredoc_1.default) `
|
|
57
|
+
Some domains failed validation after multiple attempts, retry by running: ${color_1.default.cmd('heroku certs:auto:refresh')}
|
|
58
|
+
See our documentation at https://devcenter.heroku.com/articles/automated-certificate-management#failure-reasons`;
|
|
59
|
+
}
|
|
60
|
+
else if (domains.some(domain => domain.acm_status === 'failing')) {
|
|
61
|
+
message = (0, tsheredoc_1.default) `
|
|
62
|
+
Some domains are failing validation, please verify that your DNS matches: ${color_1.default.cmd('heroku domains')}
|
|
63
|
+
See our documentation at https://devcenter.heroku.com/articles/automated-certificate-management#failure-reasons`;
|
|
64
|
+
}
|
|
65
|
+
if (domains.length > 0) {
|
|
66
|
+
core_1.ux.table(domains, Object.assign(Object.assign({ Domain: {
|
|
67
|
+
get: (domain) => domain.hostname,
|
|
68
|
+
}, Status: {
|
|
69
|
+
get: (domain) => humanize(domain.acm_status),
|
|
70
|
+
} }, (domains.some(d => d.acm_status_reason) ? {
|
|
71
|
+
Reason: {
|
|
72
|
+
get: (domain) => domain.acm_status_reason ? domain.acm_status_reason : '',
|
|
73
|
+
},
|
|
74
|
+
} : {})), { lastUpdated: {
|
|
75
|
+
header: 'Last Updated',
|
|
76
|
+
get: (domain) => (0, date_fns_1.formatDistanceToNow)(new Date(domain.updated_at)),
|
|
77
|
+
} }));
|
|
78
|
+
if (message) {
|
|
79
|
+
core_1.ux.log('');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (message) {
|
|
83
|
+
core_1.ux.styledHeader(message);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.default = Index;
|
|
88
|
+
Index.topic = 'certs';
|
|
89
|
+
Index.description = 'show ACM status for an app';
|
|
90
|
+
Index.flags = {
|
|
91
|
+
wait: command_1.flags.boolean({ description: 'watch ACM status and display the status when complete' }),
|
|
92
|
+
app: command_1.flags.app({ required: true }),
|
|
93
|
+
remote: command_1.flags.remote(),
|
|
94
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Refresh extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const command_1 = require("@heroku-cli/command");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
class Refresh extends command_1.Command {
|
|
6
|
+
async run() {
|
|
7
|
+
const { flags } = await this.parse(Refresh);
|
|
8
|
+
core_1.ux.action.start('Refreshing Automatic Certificate Management');
|
|
9
|
+
await this.heroku.patch(`/apps/${flags.app}/acm`, { body: { acm_refresh: true } });
|
|
10
|
+
core_1.ux.action.stop();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.default = Refresh;
|
|
14
|
+
Refresh.topic = 'certs';
|
|
15
|
+
Refresh.description = 'refresh ACM for an app';
|
|
16
|
+
Refresh.flags = {
|
|
17
|
+
app: command_1.flags.app({ required: true }),
|
|
18
|
+
remote: command_1.flags.remote(),
|
|
19
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Generate extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static help: string;
|
|
6
|
+
static flags: {
|
|
7
|
+
selfsigned: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
keysize: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
owner: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
country: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
11
|
+
area: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
12
|
+
city: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
13
|
+
subject: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
14
|
+
now: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
16
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
17
|
+
};
|
|
18
|
+
static args: {
|
|
19
|
+
domain: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
20
|
+
};
|
|
21
|
+
private parsed;
|
|
22
|
+
run(): Promise<void>;
|
|
23
|
+
protected requiresPrompt(flags: Awaited<typeof this.parsed>['flags']): boolean | undefined;
|
|
24
|
+
protected getSubject(args: Awaited<typeof this.parsed>['args'], flags: Awaited<typeof this.parsed>['flags']): string;
|
|
25
|
+
protected spawnOpenSSL(args: ReadonlyArray<string>): Promise<unknown>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const command_1 = require("@heroku-cli/command");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const node_child_process_1 = require("node:child_process");
|
|
6
|
+
const inquirer = require("inquirer");
|
|
7
|
+
function getCommand(certs, domain) {
|
|
8
|
+
const shouldUpdate = certs
|
|
9
|
+
.map(cert => { var _a; return (_a = cert === null || cert === void 0 ? void 0 : cert.ssl_cert) === null || _a === void 0 ? void 0 : _a.cert_domains; })
|
|
10
|
+
.filter(certDomains => certDomains === null || certDomains === void 0 ? void 0 : certDomains.length)
|
|
11
|
+
.flat()
|
|
12
|
+
.includes(domain);
|
|
13
|
+
return shouldUpdate ? 'update' : 'add';
|
|
14
|
+
}
|
|
15
|
+
class Generate extends command_1.Command {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
this.parsed = this.parse(Generate);
|
|
19
|
+
}
|
|
20
|
+
async run() {
|
|
21
|
+
const { flags, args } = await this.parsed;
|
|
22
|
+
const { app, selfsigned } = flags;
|
|
23
|
+
if (this.requiresPrompt(flags)) {
|
|
24
|
+
const { owner, country, area, city } = await inquirer.prompt([
|
|
25
|
+
{ type: 'input', message: 'Owner of this certificate', name: 'owner' },
|
|
26
|
+
{ type: 'input', message: 'Country of owner (two-letter ISO code)', name: 'country' },
|
|
27
|
+
{ type: 'input', message: 'State/province/etc. of owner', name: 'area' },
|
|
28
|
+
{ type: 'input', message: 'City of owner', name: 'city' },
|
|
29
|
+
]);
|
|
30
|
+
Object.assign(flags, { owner, country, area, city });
|
|
31
|
+
}
|
|
32
|
+
const subject = this.getSubject(args, flags);
|
|
33
|
+
const domain = args.domain;
|
|
34
|
+
const keysize = flags.keysize || 2048;
|
|
35
|
+
const keyfile = `${domain}.key`;
|
|
36
|
+
const { body: certs } = await this.heroku.get(`/apps/${app}/sni-endpoints`);
|
|
37
|
+
const command = getCommand(certs, domain);
|
|
38
|
+
if (selfsigned) {
|
|
39
|
+
const crtfile = `${domain}.crt`;
|
|
40
|
+
await this.spawnOpenSSL(['req', '-new', '-newkey', `rsa:${keysize}`, '-nodes', '-keyout', keyfile, '-out', crtfile, '-subj', subject, '-x509']);
|
|
41
|
+
console.error('Your key and self-signed certificate have been generated.');
|
|
42
|
+
console.error('Next, run:');
|
|
43
|
+
console.error(`$ heroku certs:${command} ${crtfile} ${keyfile}`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const csrfile = `${domain}.csr`;
|
|
47
|
+
await this.spawnOpenSSL(['req', '-new', '-newkey', `rsa:${keysize}`, '-nodes', '-keyout', keyfile, '-out', csrfile, '-subj', subject]);
|
|
48
|
+
console.error('Your key and certificate signing request have been generated.');
|
|
49
|
+
console.error(`Submit the CSR in '${csrfile}' to your preferred certificate authority.`);
|
|
50
|
+
console.error('When you\'ve received your certificate, run:');
|
|
51
|
+
console.error(`$ heroku certs:${command} CERTFILE ${keyfile}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
requiresPrompt(flags) {
|
|
55
|
+
if (flags.subject) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
const args = [flags.owner, flags.country, flags.area, flags.city];
|
|
59
|
+
if (!flags.now && args.every((arg) => !arg)) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
getSubject(args, flags) {
|
|
64
|
+
const { domain } = args;
|
|
65
|
+
const { owner, country, area, city, subject } = flags;
|
|
66
|
+
if (subject) {
|
|
67
|
+
return subject;
|
|
68
|
+
}
|
|
69
|
+
let constructedSubject = '';
|
|
70
|
+
if (country) {
|
|
71
|
+
constructedSubject += `/C=${country}`;
|
|
72
|
+
}
|
|
73
|
+
if (area) {
|
|
74
|
+
constructedSubject += `/ST=${area}`;
|
|
75
|
+
}
|
|
76
|
+
if (city) {
|
|
77
|
+
constructedSubject += `/L=${city}`;
|
|
78
|
+
}
|
|
79
|
+
if (owner) {
|
|
80
|
+
constructedSubject += `/O=${owner}`;
|
|
81
|
+
}
|
|
82
|
+
constructedSubject += `/CN=${domain}`;
|
|
83
|
+
return constructedSubject;
|
|
84
|
+
}
|
|
85
|
+
async spawnOpenSSL(args) {
|
|
86
|
+
return new Promise((resolve, reject) => {
|
|
87
|
+
const process = (0, node_child_process_1.spawn)('openssl', args, { stdio: 'inherit' });
|
|
88
|
+
process.once('error', reject);
|
|
89
|
+
process.once('close', (code) => code ? reject(new Error(`Non zero openssl error ${code}`)) : resolve(code));
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.default = Generate;
|
|
94
|
+
Generate.topic = 'certs';
|
|
95
|
+
Generate.description = 'generate a key and a CSR or self-signed certificate';
|
|
96
|
+
Generate.help = 'Generate a key and certificate signing request (or self-signed certificate)\nfor an app. Prompts for information to put in the certificate unless --now\nis used, or at least one of the --subject, --owner, --country, --area, or\n--city options is specified.';
|
|
97
|
+
Generate.flags = {
|
|
98
|
+
selfsigned: command_1.flags.boolean({ required: false, description: 'generate a self-signed certificate instead of a CSR' }),
|
|
99
|
+
keysize: command_1.flags.string({ optional: true, description: 'RSA key size in bits (default: 2048)' }),
|
|
100
|
+
owner: command_1.flags.string({ optional: true, description: 'name of organization certificate belongs to' }),
|
|
101
|
+
country: command_1.flags.string({ optional: true, description: 'country of owner, as a two-letter ISO country code' }),
|
|
102
|
+
area: command_1.flags.string({ optional: true, description: 'sub-country area (state, province, etc.) of owner' }),
|
|
103
|
+
city: command_1.flags.string({ optional: true, description: 'city of owner' }),
|
|
104
|
+
subject: command_1.flags.string({ optional: true, description: 'specify entire certificate subject' }),
|
|
105
|
+
now: command_1.flags.boolean({ required: false, description: 'do not prompt for any owner information' }),
|
|
106
|
+
app: command_1.flags.app({ required: true }),
|
|
107
|
+
remote: command_1.flags.remote(),
|
|
108
|
+
};
|
|
109
|
+
Generate.args = {
|
|
110
|
+
domain: core_1.Args.string({ required: true }),
|
|
111
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Index extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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 display_table_1 = require("../../lib/certs/display_table");
|
|
7
|
+
class Index extends command_1.Command {
|
|
8
|
+
async run() {
|
|
9
|
+
const { flags } = await this.parse(Index);
|
|
10
|
+
const { body: certs } = await this.heroku.get(`/apps/${flags.app}/sni-endpoints`);
|
|
11
|
+
if (certs.length === 0) {
|
|
12
|
+
core_1.ux.log(`${color_1.default.magenta(flags.app)} has no SSL certificates.\nUse ${color_1.default.cmd('heroku certs:add CRT KEY')} to add one.`);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
const sortedCerts = certs.sort((a, b) => a.name > b.name ? 1 : (b.name > a.name ? -1 : 0));
|
|
16
|
+
(0, display_table_1.default)(sortedCerts);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.default = Index;
|
|
21
|
+
Index.topic = 'certs';
|
|
22
|
+
Index.description = 'list SSL certificates for an app';
|
|
23
|
+
Index.flags = {
|
|
24
|
+
app: command_1.flags.app({ required: true }),
|
|
25
|
+
remote: command_1.flags.remote(),
|
|
26
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Info extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
name: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
endpoint: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
'show-domains': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
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 flags_1 = require("../../lib/certs/flags");
|
|
7
|
+
const certificate_details_1 = require("../../lib/certs/certificate_details");
|
|
8
|
+
class Info extends command_1.Command {
|
|
9
|
+
async run() {
|
|
10
|
+
const { flags } = await this.parse(Info);
|
|
11
|
+
const { app } = flags;
|
|
12
|
+
const endpoint = await (0, flags_1.default)(flags, this.heroku);
|
|
13
|
+
core_1.ux.action.start(`Fetching SSL certificate ${endpoint.name} info for ${color_1.default.app(app)}`);
|
|
14
|
+
// This is silly, we just fetched all SNI Endpoints and filtered to get the one we want just
|
|
15
|
+
// to use the name on the start action message, but then we re-fetch the exact same SNI Endpoint we
|
|
16
|
+
// already have.
|
|
17
|
+
const { body: cert } = await this.heroku.get(`/apps/${app}/sni-endpoints/${endpoint.name}`);
|
|
18
|
+
core_1.ux.action.stop();
|
|
19
|
+
if (flags['show-domains']) {
|
|
20
|
+
core_1.ux.action.start(`Fetching domains for ${endpoint.name}`);
|
|
21
|
+
const domains = await Promise.all(endpoint.domains.map(async (domain) => {
|
|
22
|
+
const { body: response } = await this.heroku.get(`/apps/${app}/domains/${domain}`);
|
|
23
|
+
return response.hostname;
|
|
24
|
+
}));
|
|
25
|
+
core_1.ux.action.stop();
|
|
26
|
+
cert.domains = domains;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
cert.domains = [];
|
|
30
|
+
}
|
|
31
|
+
(0, certificate_details_1.displayCertificateDetails)(cert);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.default = Info;
|
|
35
|
+
Info.topic = 'certs';
|
|
36
|
+
Info.description = 'show certificate information for an SSL certificate';
|
|
37
|
+
Info.flags = {
|
|
38
|
+
name: command_1.flags.string({ description: 'name to check info on' }),
|
|
39
|
+
endpoint: command_1.flags.string({ description: 'endpoint to check info on' }),
|
|
40
|
+
'show-domains': command_1.flags.boolean({ description: 'show associated domains' }),
|
|
41
|
+
app: command_1.flags.app({ required: true }),
|
|
42
|
+
remote: command_1.flags.remote(),
|
|
43
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Remove 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
|
+
name: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
endpoint: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
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 flags_1 = require("../../lib/certs/flags");
|
|
7
|
+
const confirmCommand_1 = require("../../lib/confirmCommand");
|
|
8
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
9
|
+
class Remove extends command_1.Command {
|
|
10
|
+
async run() {
|
|
11
|
+
const { flags } = await this.parse(Remove);
|
|
12
|
+
const { app, confirm } = flags;
|
|
13
|
+
const sniEndpoint = await (0, flags_1.default)(flags, this.heroku);
|
|
14
|
+
await (0, confirmCommand_1.default)(app, confirm, (0, tsheredoc_1.default) `
|
|
15
|
+
WARNING: Destructive Action - you cannot rollback this change
|
|
16
|
+
This command will remove the endpoint ${sniEndpoint.name} from ${color_1.default.magenta(app)}.
|
|
17
|
+
`);
|
|
18
|
+
core_1.ux.action.start(`Removing SSL certificate ${sniEndpoint.name} from ${color_1.default.magenta(app)}`);
|
|
19
|
+
await this.heroku.request(`/apps/${app}/sni-endpoints/${sniEndpoint.name}`, { method: 'DELETE' });
|
|
20
|
+
core_1.ux.action.stop();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.default = Remove;
|
|
24
|
+
Remove.topic = 'certs';
|
|
25
|
+
Remove.description = 'remove an SSL certificate from an app';
|
|
26
|
+
Remove.flags = {
|
|
27
|
+
confirm: command_1.flags.string({ hidden: true }),
|
|
28
|
+
name: command_1.flags.string({ description: 'name to remove' }),
|
|
29
|
+
endpoint: command_1.flags.string({ description: 'endpoint to remove' }),
|
|
30
|
+
app: command_1.flags.app({ required: true }),
|
|
31
|
+
remote: command_1.flags.remote(),
|
|
32
|
+
};
|