heroku 9.0.0-alpha.1 → 9.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -11
- package/lib/commands/access/add.d.ts +14 -0
- package/lib/commands/access/add.js +55 -0
- package/lib/commands/access/index.d.ts +11 -0
- package/lib/commands/access/index.js +86 -0
- package/lib/commands/access/remove.d.ts +12 -0
- package/lib/commands/access/remove.js +25 -0
- package/lib/commands/access/update.d.ts +14 -0
- package/lib/commands/access/update.js +39 -0
- package/lib/commands/addons/attach.d.ts +16 -0
- package/lib/commands/addons/attach.js +51 -0
- package/lib/commands/addons/create.d.ts +19 -0
- package/lib/commands/addons/create.js +84 -0
- package/lib/commands/addons/destroy.d.ts +19 -0
- package/lib/commands/addons/destroy.js +61 -0
- package/lib/commands/addons/detach.d.ts +13 -0
- package/lib/commands/addons/detach.js +31 -0
- package/lib/commands/addons/docs.d.ts +14 -0
- package/lib/commands/addons/docs.js +36 -0
- package/lib/commands/addons/index.d.ts +16 -0
- package/lib/commands/addons/index.js +246 -0
- package/lib/commands/addons/info.d.ts +14 -0
- package/lib/commands/addons/info.js +44 -0
- package/lib/commands/addons/open.d.ts +75 -0
- package/lib/commands/addons/open.js +87 -0
- package/lib/commands/addons/plans.d.ts +12 -0
- package/lib/commands/addons/plans.js +47 -0
- package/lib/commands/addons/rename.d.ts +10 -0
- package/lib/commands/addons/rename.js +20 -0
- package/lib/commands/addons/services.d.ts +9 -0
- package/lib/commands/addons/services.js +34 -0
- package/lib/commands/addons/upgrade.d.ts +28 -0
- package/lib/commands/addons/upgrade.js +145 -0
- package/lib/commands/addons/wait.d.ts +14 -0
- package/lib/commands/addons/wait.js +70 -0
- package/lib/commands/apps/create.d.ts +2 -2
- package/lib/commands/apps/create.js +13 -6
- package/lib/commands/apps/destroy.d.ts +2 -1
- package/lib/commands/apps/destroy.js +4 -3
- package/lib/commands/apps/errors.d.ts +1 -0
- package/lib/commands/apps/errors.js +1 -0
- package/lib/commands/apps/favorites/add.d.ts +1 -0
- package/lib/commands/apps/favorites/add.js +1 -0
- package/lib/commands/apps/favorites/remove.d.ts +1 -0
- package/lib/commands/apps/favorites/remove.js +1 -0
- package/lib/commands/apps/index.d.ts +1 -1
- package/lib/commands/apps/index.js +1 -1
- package/lib/commands/apps/info.d.ts +2 -1
- package/lib/commands/apps/info.js +3 -4
- package/lib/commands/apps/join.d.ts +11 -0
- package/lib/commands/apps/join.js +25 -0
- package/lib/commands/apps/leave.d.ts +12 -0
- package/lib/commands/apps/leave.js +25 -0
- package/lib/commands/apps/lock.d.ts +11 -0
- package/lib/commands/apps/lock.js +30 -0
- package/lib/commands/apps/open.d.ts +2 -1
- package/lib/commands/apps/open.js +2 -1
- package/lib/commands/apps/rename.d.ts +2 -1
- package/lib/commands/apps/rename.js +2 -1
- package/lib/commands/apps/stacks/index.d.ts +2 -1
- package/lib/commands/apps/stacks/index.js +2 -1
- package/lib/commands/apps/stacks/set.d.ts +1 -1
- package/lib/commands/apps/stacks/set.js +1 -1
- package/lib/commands/apps/transfer.d.ts +17 -0
- package/lib/commands/apps/transfer.js +91 -0
- package/lib/commands/apps/unlock.d.ts +11 -0
- package/lib/commands/apps/unlock.js +30 -0
- package/lib/commands/auth/token.js +2 -1
- package/lib/commands/authorizations/create.js +5 -1
- package/lib/commands/authorizations/info.js +5 -1
- package/lib/commands/authorizations/revoke.js +5 -1
- package/lib/commands/authorizations/rotate.js +5 -1
- package/lib/commands/authorizations/update.js +5 -1
- package/lib/commands/autocomplete/doctor.js +2 -2
- package/lib/commands/autocomplete/options.js +2 -2
- package/lib/commands/certs/add.d.ts +16 -0
- package/lib/commands/certs/add.js +98 -0
- package/lib/commands/certs/auto/disable.d.ts +11 -0
- package/lib/commands/certs/auto/disable.js +34 -0
- package/lib/commands/certs/auto/enable.d.ts +11 -0
- package/lib/commands/certs/auto/enable.js +51 -0
- package/lib/commands/certs/auto/index.d.ts +12 -0
- package/lib/commands/certs/auto/index.js +94 -0
- package/lib/commands/certs/auto/refresh.d.ts +10 -0
- package/lib/commands/certs/auto/refresh.js +19 -0
- package/lib/commands/certs/generate.d.ts +26 -0
- package/lib/commands/certs/generate.js +111 -0
- package/lib/commands/certs/index.d.ts +10 -0
- package/lib/commands/certs/index.js +26 -0
- package/lib/commands/certs/info.d.ts +13 -0
- package/lib/commands/certs/info.js +43 -0
- package/lib/commands/certs/remove.d.ts +13 -0
- package/lib/commands/certs/remove.js +32 -0
- package/lib/commands/certs/update.d.ts +18 -0
- package/lib/commands/certs/update.js +54 -0
- package/lib/commands/ci/config/get.d.ts +1 -0
- package/lib/commands/ci/config/get.js +1 -0
- package/lib/commands/ci/config/set.d.ts +1 -0
- package/lib/commands/ci/config/set.js +1 -0
- package/lib/commands/ci/config/unset.d.ts +1 -0
- package/lib/commands/ci/config/unset.js +1 -0
- package/lib/commands/ci/index.d.ts +1 -0
- package/lib/commands/ci/index.js +1 -0
- package/lib/commands/ci/info.d.ts +1 -0
- package/lib/commands/ci/info.js +1 -0
- package/lib/commands/ci/last.d.ts +1 -0
- package/lib/commands/ci/last.js +1 -0
- package/lib/commands/ci/open.d.ts +1 -0
- package/lib/commands/ci/open.js +1 -0
- package/lib/commands/ci/rerun.d.ts +1 -0
- package/lib/commands/ci/rerun.js +1 -0
- package/lib/commands/config/set.d.ts +2 -1
- package/lib/commands/config/set.js +2 -1
- package/lib/commands/container/index.d.ts +6 -0
- package/lib/commands/container/index.js +13 -0
- package/lib/commands/container/login.d.ts +9 -0
- package/lib/commands/container/login.js +57 -0
- package/lib/commands/container/logout.d.ts +9 -0
- package/lib/commands/container/logout.js +37 -0
- package/lib/commands/container/pull.d.ts +14 -0
- package/lib/commands/container/pull.js +40 -0
- package/lib/commands/container/push.d.ts +16 -0
- package/lib/commands/container/push.js +101 -0
- package/lib/commands/container/release.d.ts +14 -0
- package/lib/commands/container/release.js +89 -0
- package/lib/commands/container/rm.d.ts +13 -0
- package/lib/commands/container/rm.js +36 -0
- package/lib/commands/container/run.d.ts +15 -0
- package/lib/commands/container/run.js +63 -0
- package/lib/commands/dashboard.d.ts +7 -0
- package/lib/commands/dashboard.js +164 -0
- package/lib/commands/domains/index.d.ts +2 -2
- package/lib/commands/drains/add.d.ts +1 -0
- package/lib/commands/drains/add.js +1 -0
- package/lib/commands/drains/index.d.ts +1 -0
- package/lib/commands/drains/index.js +1 -0
- package/lib/commands/drains/remove.d.ts +1 -0
- package/lib/commands/drains/remove.js +1 -0
- package/lib/commands/features/disable.d.ts +12 -0
- package/lib/commands/features/disable.js +30 -0
- package/lib/commands/features/enable.d.ts +12 -0
- package/lib/commands/features/enable.js +29 -0
- package/lib/commands/features/index.d.ts +10 -0
- package/lib/commands/features/index.js +37 -0
- package/lib/commands/features/info.d.ts +13 -0
- package/lib/commands/features/info.js +33 -0
- package/lib/commands/keys/add.d.ts +14 -0
- package/lib/commands/keys/add.js +101 -0
- package/lib/commands/keys/clear.d.ts +5 -0
- package/lib/commands/keys/clear.js +17 -0
- package/lib/commands/keys/index.d.ts +9 -0
- package/lib/commands/keys/index.js +36 -0
- package/lib/commands/keys/remove.d.ts +9 -0
- package/lib/commands/keys/remove.js +29 -0
- package/lib/commands/labs/enable.d.ts +13 -0
- package/lib/commands/labs/enable.js +47 -0
- package/lib/commands/labs/index.d.ts +11 -0
- package/lib/commands/labs/index.js +71 -0
- package/lib/commands/labs/info.d.ts +14 -0
- package/lib/commands/labs/info.js +49 -0
- package/lib/commands/local/index.d.ts +1 -1
- package/lib/commands/local/index.js +8 -3
- package/lib/commands/local/run.d.ts +1 -1
- package/lib/commands/local/run.js +8 -3
- package/lib/commands/maintenance/index.d.ts +10 -0
- package/lib/commands/maintenance/index.js +19 -0
- package/lib/commands/maintenance/off.d.ts +10 -0
- package/lib/commands/maintenance/off.js +20 -0
- package/lib/commands/maintenance/on.d.ts +10 -0
- package/lib/commands/maintenance/on.js +20 -0
- package/lib/commands/members/add.d.ts +13 -0
- package/lib/commands/members/add.js +33 -0
- package/lib/commands/members/index.d.ts +12 -0
- package/lib/commands/members/index.js +76 -0
- package/lib/commands/members/remove.d.ts +10 -0
- package/lib/commands/members/remove.js +58 -0
- package/lib/commands/members/set.d.ts +11 -0
- package/lib/commands/members/set.js +21 -0
- package/lib/commands/notifications/index.d.ts +13 -0
- package/lib/commands/notifications/index.js +62 -0
- package/lib/commands/orgs/index.d.ts +11 -0
- package/lib/commands/orgs/index.js +27 -0
- package/lib/commands/orgs/open.d.ts +10 -0
- package/lib/commands/orgs/open.js +24 -0
- package/lib/commands/pg/backups/cancel.d.ts +15 -0
- package/lib/commands/pg/backups/cancel.js +49 -0
- package/lib/commands/pg/backups/capture.d.ts +15 -0
- package/lib/commands/pg/backups/capture.js +65 -0
- package/lib/commands/pg/backups/delete.d.ts +15 -0
- package/lib/commands/pg/backups/delete.js +38 -0
- package/lib/commands/pg/backups/download.d.ts +14 -0
- package/lib/commands/pg/backups/download.js +58 -0
- package/lib/commands/pg/backups/index.d.ts +20 -0
- package/lib/commands/pg/backups/index.js +129 -0
- package/lib/commands/pg/backups/info.d.ts +17 -0
- package/lib/commands/pg/backups/info.js +92 -0
- package/lib/commands/pg/backups/restore.d.ts +19 -0
- package/lib/commands/pg/backups/restore.js +107 -0
- package/lib/commands/pg/backups/schedule.d.ts +21 -0
- package/lib/commands/pg/backups/schedule.js +82 -0
- package/lib/commands/pg/backups/schedules.d.ts +10 -0
- package/lib/commands/pg/backups/schedules.js +31 -0
- package/lib/commands/pg/backups/unschedule.d.ts +13 -0
- package/lib/commands/pg/backups/unschedule.js +44 -0
- package/lib/commands/pg/backups/url.d.ts +13 -0
- package/lib/commands/pg/backups/url.js +41 -0
- package/lib/commands/pg/bloat.d.ts +13 -0
- package/lib/commands/pg/bloat.js +87 -0
- package/lib/commands/pg/blocking.d.ts +13 -0
- package/lib/commands/pg/blocking.js +42 -0
- package/lib/commands/pg/connection-pooling/attach.d.ts +15 -0
- package/lib/commands/pg/connection-pooling/attach.js +41 -0
- package/lib/commands/pg/copy.d.ts +18 -0
- package/lib/commands/pg/copy.js +86 -0
- package/lib/commands/pg/credentials/create.d.ts +14 -0
- package/lib/commands/pg/credentials/create.js +40 -0
- package/lib/commands/pg/credentials/destroy.d.ts +16 -0
- package/lib/commands/pg/credentials/destroy.js +48 -0
- package/lib/commands/pg/credentials/repair-default.d.ts +15 -0
- package/lib/commands/pg/credentials/repair-default.js +39 -0
- package/lib/commands/pg/credentials/rotate.d.ts +16 -0
- package/lib/commands/pg/credentials/rotate.js +82 -0
- package/lib/commands/pg/credentials/url.d.ts +14 -0
- package/lib/commands/pg/credentials/url.js +64 -0
- package/lib/commands/pg/credentials.d.ts +16 -0
- package/lib/commands/pg/credentials.js +61 -0
- package/lib/commands/pg/diagnose.d.ts +18 -0
- package/lib/commands/pg/diagnose.js +109 -0
- package/lib/commands/pg/info.d.ts +14 -0
- package/lib/commands/pg/info.js +92 -0
- package/lib/commands/pg/kill.d.ts +15 -0
- package/lib/commands/pg/kill.js +32 -0
- package/lib/commands/pg/killall.d.ts +13 -0
- package/lib/commands/pg/killall.js +26 -0
- package/lib/commands/pg/links/create.d.ts +15 -0
- package/lib/commands/pg/links/create.js +58 -0
- package/lib/commands/pg/links/destroy.d.ts +16 -0
- package/lib/commands/pg/links/destroy.js +42 -0
- package/lib/commands/pg/links/index.d.ts +13 -0
- package/lib/commands/pg/links/index.js +59 -0
- package/lib/commands/pg/locks.d.ts +15 -0
- package/lib/commands/pg/locks.js +53 -0
- package/lib/commands/pg/maintenance/index.d.ts +13 -0
- package/lib/commands/pg/maintenance/index.js +29 -0
- package/lib/commands/pg/maintenance/run.d.ts +14 -0
- package/lib/commands/pg/maintenance/run.js +37 -0
- package/lib/commands/pg/maintenance/window.d.ts +15 -0
- package/lib/commands/pg/maintenance/window.js +41 -0
- package/lib/commands/pg/outliers.d.ts +19 -0
- package/lib/commands/pg/outliers.js +97 -0
- package/lib/commands/pg/promote.d.ts +14 -0
- package/lib/commands/pg/promote.js +169 -0
- package/lib/commands/pg/ps.d.ts +14 -0
- package/lib/commands/pg/ps.js +52 -0
- package/lib/commands/pg/psql.d.ts +16 -0
- package/lib/commands/pg/psql.js +49 -0
- package/lib/commands/pg/pull.d.ts +18 -0
- package/lib/commands/pg/pull.js +87 -0
- package/lib/commands/pg/push.d.ts +18 -0
- package/lib/commands/pg/push.js +84 -0
- package/lib/commands/pg/reset.d.ts +15 -0
- package/lib/commands/pg/reset.js +44 -0
- package/lib/commands/pg/settings/auto-explain/log-analyze.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-analyze.js +32 -0
- package/lib/commands/pg/settings/auto-explain/log-buffers.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-buffers.js +30 -0
- package/lib/commands/pg/settings/auto-explain/log-min-duration.d.ts +16 -0
- package/lib/commands/pg/settings/auto-explain/log-min-duration.js +33 -0
- package/lib/commands/pg/settings/auto-explain/log-nested-statements.d.ts +12 -0
- package/lib/commands/pg/settings/auto-explain/log-nested-statements.js +25 -0
- package/lib/commands/pg/settings/auto-explain/log-triggers.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-triggers.js +30 -0
- package/lib/commands/pg/settings/auto-explain/log-verbose.d.ts +17 -0
- package/lib/commands/pg/settings/auto-explain/log-verbose.js +33 -0
- package/lib/commands/pg/settings/auto-explain.d.ts +18 -0
- package/lib/commands/pg/settings/auto-explain.js +38 -0
- package/lib/commands/pg/settings/index.d.ts +13 -0
- package/lib/commands/pg/settings/index.js +34 -0
- package/lib/commands/pg/settings/log-connections.d.ts +17 -0
- package/lib/commands/pg/settings/log-connections.js +34 -0
- package/lib/commands/pg/settings/log-lock-waits.d.ts +13 -0
- package/lib/commands/pg/settings/log-lock-waits.js +31 -0
- package/lib/commands/pg/settings/log-min-duration-statement.d.ts +15 -0
- package/lib/commands/pg/settings/log-min-duration-statement.js +33 -0
- package/lib/commands/pg/settings/log-statement.d.ts +12 -0
- package/lib/commands/pg/settings/log-statement.js +30 -0
- package/lib/commands/pg/settings/track-functions.d.ts +12 -0
- package/lib/commands/pg/settings/track-functions.js +29 -0
- package/lib/commands/pg/unfollow.d.ts +14 -0
- package/lib/commands/pg/unfollow.js +40 -0
- package/lib/commands/pg/upgrade.d.ts +15 -0
- package/lib/commands/pg/upgrade.js +58 -0
- package/lib/commands/pg/vacuum-stats.d.ts +13 -0
- package/lib/commands/pg/vacuum-stats.js +65 -0
- package/lib/commands/pg/wait.d.ts +15 -0
- package/lib/commands/pg/wait.js +79 -0
- package/lib/commands/pipelines/connect.js +1 -1
- package/lib/commands/pipelines/diff.js +1 -1
- package/lib/commands/ps/index.d.ts +15 -0
- package/lib/commands/ps/index.js +195 -0
- package/lib/commands/ps/restart.d.ts +17 -0
- package/lib/commands/ps/restart.js +38 -0
- package/lib/commands/ps/scale.d.ts +13 -0
- package/lib/commands/ps/scale.js +108 -0
- package/lib/commands/ps/stop.d.ts +17 -0
- package/lib/commands/ps/stop.js +33 -0
- package/lib/commands/ps/type.d.ts +12 -0
- package/lib/commands/ps/type.js +163 -0
- package/lib/commands/redis/cli.d.ts +15 -0
- package/lib/commands/redis/cli.js +204 -0
- package/lib/commands/redis/credentials.d.ts +14 -0
- package/lib/commands/redis/credentials.js +32 -0
- package/lib/commands/redis/info.d.ts +15 -0
- package/lib/commands/redis/info.js +25 -0
- package/lib/commands/redis/keyspace-notifications.d.ts +14 -0
- package/lib/commands/redis/keyspace-notifications.js +47 -0
- package/lib/commands/redis/maintenance.d.ts +16 -0
- package/lib/commands/redis/maintenance.js +63 -0
- package/lib/commands/redis/maxmemory.d.ts +14 -0
- package/lib/commands/redis/maxmemory.js +40 -0
- package/lib/commands/redis/promote.d.ts +13 -0
- package/lib/commands/redis/promote.js +39 -0
- package/lib/commands/redis/stats-reset.d.ts +14 -0
- package/lib/commands/redis/stats-reset.js +36 -0
- package/lib/commands/redis/timeout.d.ts +14 -0
- package/lib/commands/redis/timeout.js +35 -0
- package/lib/commands/redis/upgrade.d.ts +15 -0
- package/lib/commands/redis/upgrade.js +37 -0
- package/lib/commands/redis/wait.d.ts +14 -0
- package/lib/commands/redis/wait.js +60 -0
- package/lib/commands/releases/index.d.ts +14 -0
- package/lib/commands/releases/index.js +124 -0
- package/lib/commands/releases/info.d.ts +15 -0
- package/lib/commands/releases/info.js +56 -0
- package/lib/commands/releases/output.d.ts +13 -0
- package/lib/commands/releases/output.js +37 -0
- package/lib/commands/releases/rollback.d.ts +14 -0
- package/lib/commands/releases/rollback.js +48 -0
- package/lib/commands/run/detached.d.ts +7 -8
- package/lib/commands/run/detached.js +16 -20
- package/lib/commands/run/index.d.ts +10 -11
- package/lib/commands/run/index.js +16 -17
- package/lib/commands/run/inside.d.ts +5 -7
- package/lib/commands/run/inside.js +10 -14
- package/lib/commands/spaces/create.d.ts +22 -0
- package/lib/commands/spaces/create.js +73 -0
- package/lib/commands/spaces/destroy.d.ts +14 -0
- package/lib/commands/spaces/destroy.js +49 -0
- package/lib/commands/spaces/drains/get.d.ts +12 -0
- package/lib/commands/spaces/drains/get.js +27 -0
- package/lib/commands/spaces/drains/set.d.ts +14 -0
- package/lib/commands/spaces/drains/set.js +29 -0
- package/lib/commands/spaces/hosts.d.ts +14 -0
- package/lib/commands/spaces/hosts.js +37 -0
- package/lib/commands/spaces/index.d.ts +16 -0
- package/lib/commands/spaces/index.js +55 -0
- package/lib/commands/spaces/info.d.ts +14 -0
- package/lib/commands/spaces/info.js +47 -0
- package/lib/commands/spaces/outbound-rules/add.d.ts +15 -0
- package/lib/commands/spaces/outbound-rules/add.js +81 -0
- package/lib/commands/spaces/outbound-rules/index.d.ts +15 -0
- package/lib/commands/spaces/outbound-rules/index.js +49 -0
- package/lib/commands/spaces/outbound-rules/remove.d.ts +17 -0
- package/lib/commands/spaces/outbound-rules/remove.js +53 -0
- package/lib/commands/spaces/peerings/accept.d.ts +15 -0
- package/lib/commands/spaces/peerings/accept.js +36 -0
- package/lib/commands/spaces/peerings/destroy.d.ts +15 -0
- package/lib/commands/spaces/peerings/destroy.js +45 -0
- package/lib/commands/spaces/peerings/index.d.ts +13 -0
- package/lib/commands/spaces/peerings/index.js +33 -0
- package/lib/commands/spaces/peerings/info.d.ts +15 -0
- package/lib/commands/spaces/peerings/info.js +59 -0
- package/lib/commands/spaces/ps.d.ts +15 -0
- package/lib/commands/spaces/ps.js +82 -0
- package/lib/commands/spaces/rename.d.ts +11 -0
- package/lib/commands/spaces/rename.js +26 -0
- package/lib/commands/spaces/topology.d.ts +32 -0
- package/lib/commands/spaces/topology.js +89 -0
- package/lib/commands/spaces/transfer.d.ts +11 -0
- package/lib/commands/spaces/transfer.js +35 -0
- package/lib/commands/spaces/trusted-ips/add.d.ts +16 -0
- package/lib/commands/spaces/trusted-ips/add.js +43 -0
- package/lib/commands/spaces/trusted-ips/index.d.ts +15 -0
- package/lib/commands/spaces/trusted-ips/index.js +52 -0
- package/lib/commands/spaces/trusted-ips/remove.d.ts +15 -0
- package/lib/commands/spaces/trusted-ips/remove.js +44 -0
- package/lib/commands/spaces/vpn/config.d.ts +14 -0
- package/lib/commands/spaces/vpn/config.js +54 -0
- package/lib/commands/spaces/vpn/connect.d.ts +15 -0
- package/lib/commands/spaces/vpn/connect.js +45 -0
- package/lib/commands/spaces/vpn/connections.d.ts +17 -0
- package/lib/commands/spaces/vpn/connections.js +57 -0
- package/lib/commands/spaces/vpn/destroy.d.ts +14 -0
- package/lib/commands/spaces/vpn/destroy.js +35 -0
- package/lib/commands/spaces/vpn/info.d.ts +16 -0
- package/lib/commands/spaces/vpn/info.js +82 -0
- package/lib/commands/spaces/vpn/update.d.ts +14 -0
- package/lib/commands/spaces/vpn/update.js +36 -0
- package/lib/commands/spaces/vpn/wait.d.ts +13 -0
- package/lib/commands/spaces/vpn/wait.js +53 -0
- package/lib/commands/spaces/wait.d.ts +17 -0
- package/lib/commands/spaces/wait.js +89 -0
- package/lib/commands/status.js +4 -4
- package/lib/commands/teams/index.d.ts +9 -0
- package/lib/commands/teams/index.js +29 -0
- package/lib/global_telemetry.js +10 -4
- package/lib/hooks/postrun/performance_analytics.js +5 -4
- package/lib/hooks/prerun/analytics.js +3 -0
- package/lib/lib/addons/addons_wait.d.ts +78 -0
- package/lib/lib/addons/addons_wait.js +56 -0
- package/lib/lib/addons/create_addon.d.ts +7 -0
- package/lib/lib/addons/create_addon.js +59 -0
- package/lib/lib/addons/destroy_addon.d.ts +3 -0
- package/lib/lib/addons/destroy_addon.js +48 -0
- package/lib/lib/addons/resolve.d.ts +38 -0
- package/lib/lib/addons/resolve.js +179 -0
- package/lib/lib/addons/util.d.ts +9 -0
- package/lib/lib/addons/util.js +72 -0
- package/lib/lib/apps/app-transfer.d.ts +10 -0
- package/lib/lib/apps/app-transfer.js +35 -0
- package/lib/lib/autocomplete/completions.d.ts +4 -0
- package/lib/lib/autocomplete/completions.js +6 -1
- package/lib/lib/certs/certificate_details.d.ts +2 -0
- package/lib/lib/certs/certificate_details.js +37 -0
- package/lib/lib/certs/display_table.d.ts +2 -0
- package/lib/lib/certs/display_table.js +51 -0
- package/lib/lib/certs/domains.d.ts +3 -0
- package/lib/lib/certs/domains.js +45 -0
- package/lib/lib/certs/flags.d.ts +7 -0
- package/lib/lib/certs/flags.js +42 -0
- package/lib/lib/certs/format_date.d.ts +1 -0
- package/lib/lib/certs/format_date.js +11 -0
- package/lib/lib/certs/get_cert_and_key.d.ts +9 -0
- package/lib/lib/certs/get_cert_and_key.js +11 -0
- package/lib/lib/ci/interfaces/kolkrabbi.d.ts +1 -1
- package/lib/lib/ci/source.js +3 -3
- package/lib/lib/ci/test-run.js +2 -2
- package/lib/lib/config/quote.js +1 -1
- package/lib/lib/confirmCommand.d.ts +1 -0
- package/lib/lib/{apps/confirm-app.js → confirmCommand.js} +2 -2
- package/lib/lib/container/debug.d.ts +2 -0
- package/lib/lib/container/debug.js +5 -0
- package/lib/lib/container/docker_helper.d.ts +24 -0
- package/lib/lib/container/docker_helper.js +168 -0
- package/lib/lib/container/streamer.d.ts +1 -0
- package/lib/lib/container/streamer.js +31 -0
- package/lib/lib/domains/domains.d.ts +6 -0
- package/lib/lib/domains/domains.js +104 -0
- package/lib/lib/local/run-foreman.d.ts +1 -0
- package/lib/lib/local/run-foreman.js +229 -1
- package/lib/lib/members/util.d.ts +3 -0
- package/lib/lib/members/util.js +25 -0
- package/lib/lib/members/utils.d.ts +2 -0
- package/lib/lib/members/utils.js +14 -0
- package/lib/lib/notify.d.ts +1 -0
- package/lib/lib/notify.js +23 -0
- package/lib/lib/orgs/utils.d.ts +5 -0
- package/lib/lib/orgs/utils.js +24 -0
- package/lib/lib/pg/backups.d.ts +17 -0
- package/lib/lib/pg/backups.js +164 -0
- package/lib/lib/pg/bastion.d.ts +29 -0
- package/lib/lib/pg/bastion.js +121 -0
- package/lib/lib/pg/config.d.ts +2 -0
- package/lib/lib/pg/config.js +13 -0
- package/lib/lib/pg/download.d.ts +5 -0
- package/lib/lib/pg/download.js +34 -0
- package/lib/lib/pg/fetcher.d.ts +39 -0
- package/lib/lib/pg/fetcher.js +137 -0
- package/lib/lib/pg/host.d.ts +1 -0
- package/lib/lib/pg/host.js +7 -0
- package/lib/lib/pg/psql.d.ts +48 -0
- package/lib/lib/pg/psql.js +252 -0
- package/lib/lib/pg/push_pull.d.ts +13 -0
- package/lib/lib/pg/push_pull.js +118 -0
- package/lib/lib/pg/setter.d.ts +16 -0
- package/lib/lib/pg/setter.js +65 -0
- package/lib/lib/pg/types.d.ts +230 -0
- package/lib/lib/pg/types.js +2 -0
- package/lib/lib/pg/util.d.ts +36 -0
- package/lib/lib/pg/util.js +183 -0
- package/lib/lib/redis/api.d.ts +65 -0
- package/lib/lib/redis/api.js +122 -0
- package/lib/lib/releases/output.d.ts +1 -0
- package/lib/lib/releases/output.js +14 -0
- package/lib/lib/releases/releases.d.ts +6 -0
- package/lib/lib/releases/releases.js +32 -0
- package/lib/lib/releases/status_helper.d.ts +5 -0
- package/lib/lib/releases/status_helper.js +25 -0
- package/lib/lib/run/dyno.js +2 -2
- package/lib/lib/run/log-displayer.d.ts +1 -1
- package/lib/lib/spaces/format.d.ts +4 -0
- package/lib/lib/spaces/format.js +60 -0
- package/lib/lib/spaces/hosts.d.ts +9 -0
- package/lib/lib/spaces/hosts.js +34 -0
- package/lib/lib/spaces/outbound-rules.d.ts +4 -0
- package/lib/lib/spaces/outbound-rules.js +78 -0
- package/lib/lib/spaces/parsers.d.ts +8 -0
- package/lib/lib/spaces/parsers.js +17 -0
- package/lib/lib/spaces/peering.d.ts +4 -0
- package/lib/lib/spaces/peering.js +53 -0
- package/lib/lib/spaces/spaces.d.ts +4 -0
- package/lib/lib/spaces/spaces.js +37 -0
- package/lib/lib/spaces/vpn-connections.d.ts +2 -0
- package/lib/lib/spaces/vpn-connections.js +22 -0
- package/lib/lib/teamUtils.d.ts +3 -0
- package/lib/lib/teamUtils.js +18 -0
- package/lib/lib/time.d.ts +2 -0
- package/lib/lib/time.js +29 -0
- package/lib/lib/types/app_errors.d.ts +6 -0
- package/lib/lib/types/app_errors.js +2 -0
- package/lib/lib/types/domain.d.ts +61 -0
- package/lib/lib/types/domain.js +5 -0
- package/lib/lib/types/notifications.d.ts +20 -0
- package/lib/lib/types/notifications.js +2 -0
- package/lib/lib/utils/multisort.d.ts +32 -0
- package/lib/lib/utils/multisort.js +66 -0
- package/lib/lib/utils/uuid-validate.d.ts +1 -0
- package/lib/lib/utils/uuid-validate.js +7 -0
- package/lib/user-config.js +2 -2
- package/oclif.manifest.json +12776 -3097
- package/package.json +108 -61
- package/lib/lib/apps/confirm-app.d.ts +0 -1
|
@@ -0,0 +1,204 @@
|
|
|
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 readline = require("readline");
|
|
6
|
+
const ssh2_1 = require("ssh2");
|
|
7
|
+
const Parser = require("redis-parser");
|
|
8
|
+
const portfinder = require("portfinder");
|
|
9
|
+
const confirmCommand_1 = require("../../lib/confirmCommand");
|
|
10
|
+
const tls = require("tls");
|
|
11
|
+
const node_util_1 = require("node:util");
|
|
12
|
+
const net = require("net");
|
|
13
|
+
const api_1 = require("../../lib/redis/api");
|
|
14
|
+
const REPLY_OK = 'OK';
|
|
15
|
+
async function redisCLI(uri, client) {
|
|
16
|
+
const io = readline.createInterface(process.stdin, process.stdout);
|
|
17
|
+
const reply = new Parser({
|
|
18
|
+
returnReply(reply) {
|
|
19
|
+
switch (state) {
|
|
20
|
+
case 'monitoring':
|
|
21
|
+
if (reply !== REPLY_OK) {
|
|
22
|
+
console.log(reply);
|
|
23
|
+
}
|
|
24
|
+
break;
|
|
25
|
+
case 'subscriber':
|
|
26
|
+
if (Array.isArray(reply)) {
|
|
27
|
+
reply.forEach(function (value, i) {
|
|
28
|
+
console.log(`${i + 1}) ${value}`);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.log(reply);
|
|
33
|
+
}
|
|
34
|
+
break;
|
|
35
|
+
case 'connect':
|
|
36
|
+
if (reply !== REPLY_OK) {
|
|
37
|
+
console.log(reply);
|
|
38
|
+
}
|
|
39
|
+
state = 'normal';
|
|
40
|
+
io.prompt();
|
|
41
|
+
break;
|
|
42
|
+
case 'closing':
|
|
43
|
+
if (reply !== REPLY_OK) {
|
|
44
|
+
console.log(reply);
|
|
45
|
+
}
|
|
46
|
+
break;
|
|
47
|
+
default:
|
|
48
|
+
if (Array.isArray(reply)) {
|
|
49
|
+
reply.forEach(function (value, i) {
|
|
50
|
+
console.log(`${i + 1}) ${value}`);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.log(reply);
|
|
55
|
+
}
|
|
56
|
+
io.prompt();
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}, returnError(err) {
|
|
60
|
+
console.log(err.message);
|
|
61
|
+
io.prompt();
|
|
62
|
+
}, returnFatalError(err) {
|
|
63
|
+
client.emit('error', err);
|
|
64
|
+
console.dir(err);
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
let state = 'connect';
|
|
68
|
+
client.write(`AUTH ${uri.password}\n`);
|
|
69
|
+
io.setPrompt(uri.host + '> ');
|
|
70
|
+
io.on('line', function (line) {
|
|
71
|
+
switch (line.split(' ')[0]) {
|
|
72
|
+
case 'MONITOR':
|
|
73
|
+
state = 'monitoring';
|
|
74
|
+
break;
|
|
75
|
+
case 'PSUBSCRIBE':
|
|
76
|
+
case 'SUBSCRIBE':
|
|
77
|
+
state = 'subscriber';
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
client.write(`${line}\n`);
|
|
81
|
+
});
|
|
82
|
+
io.on('close', function () {
|
|
83
|
+
state = 'closing';
|
|
84
|
+
client.write('QUIT\n');
|
|
85
|
+
});
|
|
86
|
+
client.on('data', function (data) {
|
|
87
|
+
reply.execute(data);
|
|
88
|
+
});
|
|
89
|
+
return new Promise((resolve, reject) => {
|
|
90
|
+
client.on('error', reject);
|
|
91
|
+
client.on('end', function () {
|
|
92
|
+
console.log('\nDisconnected from instance.');
|
|
93
|
+
io.close();
|
|
94
|
+
resolve();
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async function bastionConnect(uri, bastions, config, preferNativeTls) {
|
|
99
|
+
const tunnel = await new Promise(resolve => {
|
|
100
|
+
var _a;
|
|
101
|
+
const ssh2 = new ssh2_1.Client();
|
|
102
|
+
resolve(ssh2);
|
|
103
|
+
ssh2.once('ready', () => resolve(ssh2));
|
|
104
|
+
ssh2.connect({
|
|
105
|
+
host: bastions.split(',')[0],
|
|
106
|
+
username: 'bastion',
|
|
107
|
+
privateKey: (_a = match(config, /_BASTION_KEY/)) !== null && _a !== void 0 ? _a : '',
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
const localPort = await portfinder.getPortPromise({ startPort: 49152, stopPort: 65535 });
|
|
111
|
+
const stream = await (0, node_util_1.promisify)(tunnel.forwardOut)('localhost', localPort, uri.hostname, Number.parseInt(uri.port, 10));
|
|
112
|
+
let client = stream;
|
|
113
|
+
if (preferNativeTls) {
|
|
114
|
+
client = tls.connect({
|
|
115
|
+
socket: stream,
|
|
116
|
+
port: Number.parseInt(uri.port, 10),
|
|
117
|
+
host: uri.hostname,
|
|
118
|
+
rejectUnauthorized: false,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
stream.on('close', () => tunnel.end());
|
|
122
|
+
stream.on('end', () => client.end());
|
|
123
|
+
return redisCLI(uri, client);
|
|
124
|
+
}
|
|
125
|
+
function match(config, lookup) {
|
|
126
|
+
for (const key in config) {
|
|
127
|
+
if (lookup.test(key)) {
|
|
128
|
+
return config[key];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
async function maybeTunnel(redis, config) {
|
|
134
|
+
var _a;
|
|
135
|
+
const bastions = match(config, /_BASTIONS/);
|
|
136
|
+
const hobby = redis.plan.indexOf('hobby') === 0;
|
|
137
|
+
const preferNativeTls = redis.prefer_native_tls;
|
|
138
|
+
const uri = preferNativeTls && hobby ? new URL((_a = match(config, /_TLS_URL/)) !== null && _a !== void 0 ? _a : '') : new URL(redis.resource_url);
|
|
139
|
+
if (bastions !== null) {
|
|
140
|
+
return bastionConnect(uri, bastions, config, preferNativeTls);
|
|
141
|
+
}
|
|
142
|
+
let client;
|
|
143
|
+
if (preferNativeTls) {
|
|
144
|
+
client = tls.connect({
|
|
145
|
+
port: Number.parseInt(uri.port, 10), host: uri.hostname, rejectUnauthorized: false,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
else if (hobby) {
|
|
149
|
+
client = net.connect({ port: Number.parseInt(uri.port, 10), host: uri.hostname });
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
client = tls.connect({
|
|
153
|
+
port: Number.parseInt(uri.port, 10) + 1, host: uri.hostname, rejectUnauthorized: false,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return redisCLI(uri, client);
|
|
157
|
+
}
|
|
158
|
+
class Cli extends command_1.Command {
|
|
159
|
+
async run() {
|
|
160
|
+
const { flags, args } = await this.parse(Cli);
|
|
161
|
+
const api = (0, api_1.default)(flags.app, args.database, false, this.heroku);
|
|
162
|
+
const addon = await api.getRedisAddon();
|
|
163
|
+
const configVars = await getRedisConfigVars(addon, this.heroku);
|
|
164
|
+
const { body: redis } = await api.request(`/redis/v0/databases/${addon.id}`);
|
|
165
|
+
if (redis.plan.startsWith('shield-')) {
|
|
166
|
+
core_1.ux.error('\n Using redis:cli on Heroku Redis shield plans is not supported.\n Please see Heroku DevCenter for more details: https://devcenter.heroku.com/articles/shield-private-space#shield-features\n ', { exit: 1 });
|
|
167
|
+
}
|
|
168
|
+
const hobby = redis.plan.indexOf('hobby') === 0;
|
|
169
|
+
const prefer_native_tls = redis.prefer_native_tls;
|
|
170
|
+
if (!prefer_native_tls && hobby) {
|
|
171
|
+
await (0, confirmCommand_1.default)(flags.app, flags.confirm, 'WARNING: Insecure action.\nAll data, including the Redis password, will not be encrypted.');
|
|
172
|
+
}
|
|
173
|
+
const nonBastionVars = Object.keys(configVars)
|
|
174
|
+
.filter(function (configVar) {
|
|
175
|
+
return !(/(?:BASTIONS|BASTION_KEY|BASTION_REKEYS_AFTER)$/.test(configVar));
|
|
176
|
+
})
|
|
177
|
+
.join(', ');
|
|
178
|
+
core_1.ux.log(`Connecting to ${addon.name} (${nonBastionVars}):`);
|
|
179
|
+
return maybeTunnel(redis, configVars);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.default = Cli;
|
|
183
|
+
Cli.topic = 'redis';
|
|
184
|
+
Cli.description = 'opens a redis prompt';
|
|
185
|
+
Cli.flags = {
|
|
186
|
+
confirm: command_1.flags.string({ char: 'c' }),
|
|
187
|
+
app: command_1.flags.app({ required: true }),
|
|
188
|
+
remote: command_1.flags.remote(),
|
|
189
|
+
};
|
|
190
|
+
Cli.args = {
|
|
191
|
+
database: core_1.Args.string(),
|
|
192
|
+
};
|
|
193
|
+
Cli.examples = [
|
|
194
|
+
'$ heroku redis:cli --app=my-app my-database',
|
|
195
|
+
'$ heroku redis:cli --app=my-app --confirm my-database',
|
|
196
|
+
];
|
|
197
|
+
async function getRedisConfigVars(addon, heroku) {
|
|
198
|
+
const { body: config } = await heroku.get(`/apps/${addon.billing_entity.name}/config-vars`);
|
|
199
|
+
const redisConfigVars = {};
|
|
200
|
+
addon.config_vars.forEach(configVar => {
|
|
201
|
+
redisConfigVars[configVar] = config[configVar];
|
|
202
|
+
});
|
|
203
|
+
return redisConfigVars;
|
|
204
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Credentials 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
|
+
reset: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
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 api_1 = require("../../lib/redis/api");
|
|
6
|
+
class Credentials extends command_1.Command {
|
|
7
|
+
async run() {
|
|
8
|
+
const { args, flags } = await this.parse(Credentials);
|
|
9
|
+
const { app, reset } = flags;
|
|
10
|
+
const { database } = args;
|
|
11
|
+
const addon = await (0, api_1.default)(app, database, false, this.heroku).getRedisAddon();
|
|
12
|
+
if (reset) {
|
|
13
|
+
core_1.ux.log(`Resetting credentials for ${addon.name}`);
|
|
14
|
+
await (0, api_1.default)(app, database, false, this.heroku).request(`/redis/v0/databases/${addon.name}/credentials_rotation`, 'POST');
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
const { body: redis } = await (0, api_1.default)(app, database, false, this.heroku).request(`/redis/v0/databases/${addon.name}`);
|
|
18
|
+
core_1.ux.log(redis.resource_url);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.default = Credentials;
|
|
23
|
+
Credentials.topic = 'redis';
|
|
24
|
+
Credentials.description = 'display credentials information';
|
|
25
|
+
Credentials.flags = {
|
|
26
|
+
app: command_1.flags.app({ required: true }),
|
|
27
|
+
remote: command_1.flags.remote(),
|
|
28
|
+
reset: command_1.flags.boolean({ description: 'reset credentials' }),
|
|
29
|
+
};
|
|
30
|
+
Credentials.args = {
|
|
31
|
+
database: core_1.Args.string({ required: false }),
|
|
32
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Info 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
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
};
|
|
11
|
+
static args: {
|
|
12
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
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 api_1 = require("../../lib/redis/api");
|
|
6
|
+
class Info extends command_1.Command {
|
|
7
|
+
async run() {
|
|
8
|
+
const { flags, args } = await this.parse(Info);
|
|
9
|
+
const { app, json } = flags;
|
|
10
|
+
const { database } = args;
|
|
11
|
+
return (0, api_1.default)(app, database, json, this.heroku).info();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.default = Info;
|
|
15
|
+
Info.topic = 'redis';
|
|
16
|
+
Info.description = 'gets information about redis';
|
|
17
|
+
Info.aliases = ['redis'];
|
|
18
|
+
Info.flags = {
|
|
19
|
+
app: command_1.flags.app({ required: true }),
|
|
20
|
+
remote: command_1.flags.remote(),
|
|
21
|
+
json: command_1.flags.boolean({ char: 'j', description: 'output in json format' }),
|
|
22
|
+
};
|
|
23
|
+
Info.args = {
|
|
24
|
+
database: core_1.Args.string(),
|
|
25
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class KeyspaceNotifications 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
|
+
config: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
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 api_1 = require("../../lib/redis/api");
|
|
6
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
7
|
+
const core_2 = require("@oclif/core");
|
|
8
|
+
class KeyspaceNotifications extends command_1.Command {
|
|
9
|
+
async run() {
|
|
10
|
+
const { flags, args } = await this.parse(KeyspaceNotifications);
|
|
11
|
+
const { app, config } = flags;
|
|
12
|
+
const { database } = args;
|
|
13
|
+
const api = (0, api_1.default)(app, database, false, this.heroku);
|
|
14
|
+
const addon = await api.getRedisAddon();
|
|
15
|
+
const { body: updated_config } = await api.request(`/redis/v0/databases/${addon.name}/config`, 'PATCH', { notify_keyspace_events: config });
|
|
16
|
+
core_2.ux.log(`Keyspace notifications for ${addon.name} (${addon.config_vars.join(', ')}) set to '${updated_config.notify_keyspace_events.value}'.`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.default = KeyspaceNotifications;
|
|
20
|
+
KeyspaceNotifications.topic = 'redis';
|
|
21
|
+
KeyspaceNotifications.description = (0, tsheredoc_1.default) `
|
|
22
|
+
set the keyspace notifications configuration
|
|
23
|
+
Set the configuration to enable keyspace notification events:
|
|
24
|
+
K Keyspace events, published with __keyspace@<db>__ prefix.
|
|
25
|
+
E Keyevent events, published with __keyevent@<db>__ prefix.
|
|
26
|
+
g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
|
|
27
|
+
$ String commands
|
|
28
|
+
l List commands
|
|
29
|
+
s Set commands
|
|
30
|
+
h Hash commands
|
|
31
|
+
z Sorted set commands
|
|
32
|
+
t Stream commands
|
|
33
|
+
x Expired events (events generated every time a key expires)
|
|
34
|
+
e Evicted events (events generated when a key is evicted for maxmemory)
|
|
35
|
+
m Key miss events (events generated when a key that doesn't exist is accessed)
|
|
36
|
+
A Alias for "g$lshztxe", so that the "AKE" string means all the events except "m".
|
|
37
|
+
|
|
38
|
+
pass an empty string ('') to disable keyspace notifications
|
|
39
|
+
`;
|
|
40
|
+
KeyspaceNotifications.flags = {
|
|
41
|
+
app: command_1.flags.app({ required: true }),
|
|
42
|
+
remote: command_1.flags.remote(),
|
|
43
|
+
config: command_1.flags.string({ char: 'c', description: 'set keyspace notifications configuration', hasValue: true, required: true }),
|
|
44
|
+
};
|
|
45
|
+
KeyspaceNotifications.args = {
|
|
46
|
+
database: core_1.Args.string(),
|
|
47
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Maintenance 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
|
+
window: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
run: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
force: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
static args: {
|
|
13
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
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 api_1 = require("../../lib/redis/api");
|
|
6
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
7
|
+
class Maintenance extends command_1.Command {
|
|
8
|
+
async run() {
|
|
9
|
+
var _a;
|
|
10
|
+
const { args, flags } = await this.parse(Maintenance);
|
|
11
|
+
const { app: appName, window, run, force } = flags;
|
|
12
|
+
const { database } = args;
|
|
13
|
+
const api = (0, api_1.default)(appName, database, false, this.heroku);
|
|
14
|
+
const addon = await api.getRedisAddon();
|
|
15
|
+
if ((_a = addon.plan.name) === null || _a === void 0 ? void 0 : _a.match(/hobby/)) {
|
|
16
|
+
core_1.ux.error('redis:maintenance is not available for hobby-dev instances', { exit: 1 });
|
|
17
|
+
}
|
|
18
|
+
if (window) {
|
|
19
|
+
if (!window.match(/[A-Za-z]{3,10} \d\d?:[03]0/)) {
|
|
20
|
+
core_1.ux.error('Maintenance windows must be "Day HH:MM", where MM is 00 or 30.', { exit: 1 });
|
|
21
|
+
}
|
|
22
|
+
const { body: maintenance } = await api.request(`/redis/v0/databases/${addon.name}/maintenance_window`, 'PUT', { description: window });
|
|
23
|
+
core_1.ux.log(`Maintenance window for ${addon.name} (${addon.config_vars.join(', ')}) set to ${maintenance.window}.`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (run) {
|
|
27
|
+
const { body: app } = await this.heroku.get(`/apps/${appName}`);
|
|
28
|
+
if (!app.maintenance && !force) {
|
|
29
|
+
core_1.ux.error('Application must be in maintenance mode or --force flag must be used', { exit: 1 });
|
|
30
|
+
}
|
|
31
|
+
const { body: maintenance } = await api.request(`/redis/v0/databases/${addon.name}/maintenance`, 'POST');
|
|
32
|
+
core_1.ux.log(maintenance.message);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const { body: maintenance } = await api.request(`/redis/v0/databases/${addon.name}/maintenance`, 'GET');
|
|
36
|
+
core_1.ux.log(maintenance.message);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.default = Maintenance;
|
|
40
|
+
Maintenance.topic = 'redis';
|
|
41
|
+
Maintenance.description = (0, tsheredoc_1.default) `
|
|
42
|
+
manage maintenance windows
|
|
43
|
+
Set or change the maintenance window for your Redis instance
|
|
44
|
+
`;
|
|
45
|
+
Maintenance.flags = {
|
|
46
|
+
app: command_1.flags.app({ required: true }),
|
|
47
|
+
remote: command_1.flags.remote(),
|
|
48
|
+
window: command_1.flags.string({
|
|
49
|
+
char: 'w',
|
|
50
|
+
description: 'set weekly UTC maintenance window (format: "Day HH:MM", where MM is 00 or 30)',
|
|
51
|
+
hasValue: true,
|
|
52
|
+
required: false,
|
|
53
|
+
}),
|
|
54
|
+
run: command_1.flags.boolean({ description: 'start maintenance', required: false }),
|
|
55
|
+
force: command_1.flags.boolean({
|
|
56
|
+
char: 'f',
|
|
57
|
+
description: 'start maintenance without entering application maintenance mode',
|
|
58
|
+
required: false,
|
|
59
|
+
}),
|
|
60
|
+
};
|
|
61
|
+
Maintenance.args = {
|
|
62
|
+
database: core_1.Args.string({ required: false }),
|
|
63
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class MaxMemory 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
|
+
policy: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const command_1 = require("@heroku-cli/command");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const api_1 = require("../../lib/redis/api");
|
|
6
|
+
class MaxMemory extends command_1.Command {
|
|
7
|
+
async run() {
|
|
8
|
+
const { flags, args } = await this.parse(MaxMemory);
|
|
9
|
+
const { app, policy } = flags;
|
|
10
|
+
const { database } = args;
|
|
11
|
+
const addon = await (0, api_1.default)(app, database, false, this.heroku).getRedisAddon();
|
|
12
|
+
const { body: config } = await (0, api_1.default)(app, database, false, this.heroku)
|
|
13
|
+
.request(`/redis/v0/databases/${addon.name}/config`, 'PATCH', { maxmemory_policy: policy });
|
|
14
|
+
const configVars = addon.config_vars || [];
|
|
15
|
+
core_1.ux.log(`Maxmemory policy for ${addon.name} (${configVars.join(', ')}) set to ${config.maxmemory_policy.value}.`);
|
|
16
|
+
core_1.ux.log(`${config.maxmemory_policy.value} ${config.maxmemory_policy.values[config.maxmemory_policy.value]}.`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.default = MaxMemory;
|
|
20
|
+
MaxMemory.topic = 'redis';
|
|
21
|
+
MaxMemory.description = `set the key eviction policy when instances reach their storage limit
|
|
22
|
+
Available policies for key eviction include:
|
|
23
|
+
|
|
24
|
+
noeviction # returns errors when memory limit is reached
|
|
25
|
+
allkeys-lfu # removes less frequently used keys first
|
|
26
|
+
volatile-lfu # removes less frequently used keys first that have an expiry set
|
|
27
|
+
allkeys-lru # removes less recently used keys first
|
|
28
|
+
volatile-lru # removes less recently used keys first that have an expiry set
|
|
29
|
+
allkeys-random # evicts random keys
|
|
30
|
+
volatile-random # evicts random keys but only those that have an expiry set
|
|
31
|
+
volatile-ttl # only evicts keys with an expiry set and a short TTL
|
|
32
|
+
`;
|
|
33
|
+
MaxMemory.flags = {
|
|
34
|
+
app: command_1.flags.app({ required: true }),
|
|
35
|
+
policy: command_1.flags.string({ char: 'p', description: 'set policy name', required: true }),
|
|
36
|
+
remote: command_1.flags.remote(),
|
|
37
|
+
};
|
|
38
|
+
MaxMemory.args = {
|
|
39
|
+
database: core_1.Args.string(),
|
|
40
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Promote 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
|
+
static args: {
|
|
10
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const command_1 = require("@heroku-cli/command");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const api_1 = require("../../lib/redis/api");
|
|
6
|
+
class Promote extends command_1.Command {
|
|
7
|
+
async run() {
|
|
8
|
+
const { flags, args } = await this.parse(Promote);
|
|
9
|
+
const api = (0, api_1.default)(flags.app, args.database, false, this.heroku);
|
|
10
|
+
const { body: addonsList } = await this.heroku.get(`/apps/${flags.app}/addons`);
|
|
11
|
+
const addon = await api.getRedisAddon(addonsList);
|
|
12
|
+
const redisFilter = api.makeAddonsFilter('REDIS_URL');
|
|
13
|
+
const redis = redisFilter(addonsList);
|
|
14
|
+
if (redis.length === 1 && redis[0].config_vars.filter((c) => c.endsWith('_URL')).length === 1) {
|
|
15
|
+
const attachment = redis[0];
|
|
16
|
+
await this.heroku.post('/addon-attachments', {
|
|
17
|
+
body: {
|
|
18
|
+
app: { name: flags.app }, addon: { name: attachment.name }, confirm: flags.app,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
core_1.ux.log(`Promoting ${addon.name} to REDIS_URL on ${flags.app}`);
|
|
23
|
+
await this.heroku.post('/addon-attachments', {
|
|
24
|
+
body: {
|
|
25
|
+
app: { name: flags.app }, addon: { name: addon.name }, confirm: flags.app, name: 'REDIS',
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.default = Promote;
|
|
31
|
+
Promote.topic = 'redis';
|
|
32
|
+
Promote.description = 'sets DATABASE as your REDIS_URL';
|
|
33
|
+
Promote.flags = {
|
|
34
|
+
app: command_1.flags.app({ required: true }),
|
|
35
|
+
remote: command_1.flags.remote(),
|
|
36
|
+
};
|
|
37
|
+
Promote.args = {
|
|
38
|
+
database: core_1.Args.string({ required: false }),
|
|
39
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class StatsReset 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
|
+
confirm: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
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 api_1 = require("../../lib/redis/api");
|
|
6
|
+
const confirmCommand_1 = require("../../lib/confirmCommand");
|
|
7
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
8
|
+
const color_1 = require("@heroku-cli/color");
|
|
9
|
+
class StatsReset extends command_1.Command {
|
|
10
|
+
async run() {
|
|
11
|
+
const { flags, args } = await this.parse(StatsReset);
|
|
12
|
+
const { app, confirm } = flags;
|
|
13
|
+
const { database } = args;
|
|
14
|
+
const addon = await (0, api_1.default)(app, database, false, this.heroku).getRedisAddon();
|
|
15
|
+
const warning = (0, tsheredoc_1.default)(`
|
|
16
|
+
WARNING: Irreversible action.
|
|
17
|
+
All stats covered by RESETSTAT will be reset on ${color_1.default.addon(addon.name || '')}.
|
|
18
|
+
`);
|
|
19
|
+
await (0, confirmCommand_1.default)(app, confirm, warning);
|
|
20
|
+
core_1.ux.action.start(`Resetting stats on ${color_1.default.addon(addon.name || '')}`);
|
|
21
|
+
const { body: response } = await (0, api_1.default)(app, database, false, this.heroku)
|
|
22
|
+
.request(`/redis/v0/databases/${addon.id}/stats/reset`, 'POST');
|
|
23
|
+
core_1.ux.action.stop(response.message);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.default = StatsReset;
|
|
27
|
+
StatsReset.topic = 'redis';
|
|
28
|
+
StatsReset.description = 'reset all stats covered by RESETSTAT (https://redis.io/commands/config-resetstat)';
|
|
29
|
+
StatsReset.flags = {
|
|
30
|
+
app: command_1.flags.app({ required: true }),
|
|
31
|
+
remote: command_1.flags.remote(),
|
|
32
|
+
confirm: command_1.flags.string({ char: 'c' }),
|
|
33
|
+
};
|
|
34
|
+
StatsReset.args = {
|
|
35
|
+
database: core_1.Args.string(),
|
|
36
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Timeout 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
|
+
seconds: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
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 api_1 = require("../../lib/redis/api");
|
|
6
|
+
class Timeout extends command_1.Command {
|
|
7
|
+
async run() {
|
|
8
|
+
const { flags, args } = await this.parse(Timeout);
|
|
9
|
+
const { app, seconds } = flags;
|
|
10
|
+
const { database } = args;
|
|
11
|
+
const addon = await (0, api_1.default)(app, database, false, this.heroku).getRedisAddon();
|
|
12
|
+
const { body: response } = await (0, api_1.default)(app, database, false, this.heroku)
|
|
13
|
+
.request(`/redis/v0/databases/${addon.id}/config`, 'PATCH', { timeout: seconds });
|
|
14
|
+
core_1.ux.log(`Timeout for ${addon.name} (${addon.config_vars.join(', ')}) set to ${response.timeout.value} seconds.`);
|
|
15
|
+
if (response.timeout.value === 0) {
|
|
16
|
+
core_1.ux.log('Connections to the Redis instance can idle indefinitely.');
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
core_1.ux.log(`Connections to the Redis instance will be stopped after idling for ${response.timeout.value} seconds.`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.default = Timeout;
|
|
24
|
+
Timeout.topic = 'redis';
|
|
25
|
+
Timeout.description = `set the number of seconds to wait before killing idle connections
|
|
26
|
+
A value of zero means that connections will not be closed.
|
|
27
|
+
`;
|
|
28
|
+
Timeout.flags = {
|
|
29
|
+
app: command_1.flags.app({ required: true }),
|
|
30
|
+
remote: command_1.flags.remote(),
|
|
31
|
+
seconds: command_1.flags.integer({ char: 's', description: 'set timeout value', required: true }),
|
|
32
|
+
};
|
|
33
|
+
Timeout.args = {
|
|
34
|
+
database: core_1.Args.string(),
|
|
35
|
+
};
|