heroku 11.0.0-alpha.11 → 11.0.0-alpha.13
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 +17 -2
- package/lib/commands/access/add.d.ts +5 -5
- package/lib/commands/access/add.js +13 -13
- package/lib/commands/access/index.d.ts +2 -2
- package/lib/commands/access/index.js +7 -8
- package/lib/commands/access/remove.d.ts +1 -1
- package/lib/commands/access/remove.js +5 -5
- package/lib/commands/access/update.d.ts +5 -5
- package/lib/commands/access/update.js +9 -9
- package/lib/commands/accounts/add.d.ts +1 -1
- package/lib/commands/accounts/add.js +3 -2
- package/lib/commands/accounts/current.js +4 -5
- package/lib/commands/accounts/index.js +2 -1
- package/lib/commands/accounts/remove.d.ts +1 -1
- package/lib/commands/accounts/remove.js +3 -2
- package/lib/commands/accounts/set.d.ts +1 -1
- package/lib/commands/accounts/set.js +3 -2
- package/lib/commands/addons/attach.d.ts +6 -6
- package/lib/commands/addons/attach.js +14 -14
- package/lib/commands/addons/create.d.ts +9 -10
- package/lib/commands/addons/create.js +31 -29
- package/lib/commands/addons/destroy.d.ts +9 -9
- package/lib/commands/addons/destroy.js +19 -19
- package/lib/commands/addons/detach.d.ts +4 -4
- package/lib/commands/addons/detach.js +9 -9
- package/lib/commands/addons/docs.d.ts +5 -5
- package/lib/commands/addons/docs.js +9 -9
- package/lib/commands/addons/index.d.ts +5 -5
- package/lib/commands/addons/index.js +32 -30
- package/lib/commands/addons/info.d.ts +4 -4
- package/lib/commands/addons/info.js +18 -14
- package/lib/commands/addons/open.d.ts +26 -27
- package/lib/commands/addons/open.js +21 -24
- package/lib/commands/addons/rename.d.ts +2 -2
- package/lib/commands/addons/rename.js +6 -6
- package/lib/commands/addons/services.d.ts +1 -1
- package/lib/commands/addons/services.js +5 -4
- package/lib/commands/addons/upgrade.d.ts +10 -11
- package/lib/commands/addons/upgrade.js +74 -70
- package/lib/commands/addons/wait.d.ts +5 -5
- package/lib/commands/addons/wait.js +10 -10
- package/lib/commands/apps/create.d.ts +12 -12
- package/lib/commands/apps/create.js +50 -58
- package/lib/commands/apps/destroy.d.ts +6 -6
- package/lib/commands/apps/destroy.js +10 -10
- package/lib/commands/apps/errors.d.ts +3 -3
- package/lib/commands/apps/errors.js +24 -12
- package/lib/commands/apps/favorites/add.d.ts +1 -1
- package/lib/commands/apps/favorites/add.js +4 -4
- package/lib/commands/apps/favorites/index.d.ts +1 -1
- package/lib/commands/apps/favorites/index.js +4 -4
- package/lib/commands/apps/favorites/remove.d.ts +1 -1
- package/lib/commands/apps/favorites/remove.js +3 -3
- package/lib/commands/apps/index.d.ts +4 -4
- package/lib/commands/apps/index.js +21 -21
- package/lib/commands/apps/info.d.ts +8 -8
- package/lib/commands/apps/info.js +31 -31
- package/lib/commands/apps/join.d.ts +2 -2
- package/lib/commands/apps/join.js +3 -3
- package/lib/commands/apps/leave.d.ts +1 -1
- package/lib/commands/apps/leave.js +3 -3
- package/lib/commands/apps/lock.d.ts +2 -2
- package/lib/commands/apps/lock.js +5 -5
- package/lib/commands/apps/open.d.ts +5 -5
- package/lib/commands/apps/open.js +11 -9
- package/lib/commands/apps/rename.d.ts +6 -6
- package/lib/commands/apps/rename.js +13 -13
- package/lib/commands/apps/stacks/index.d.ts +2 -2
- package/lib/commands/apps/stacks/index.js +5 -6
- package/lib/commands/apps/stacks/set.d.ts +4 -4
- package/lib/commands/apps/stacks/set.js +9 -9
- package/lib/commands/apps/transfer.d.ts +8 -8
- package/lib/commands/apps/transfer.js +33 -32
- package/lib/commands/apps/unlock.d.ts +2 -2
- package/lib/commands/apps/unlock.js +3 -3
- package/lib/commands/auth/2fa/disable.d.ts +1 -1
- package/lib/commands/auth/2fa/disable.js +3 -2
- package/lib/commands/auth/2fa/index.d.ts +1 -1
- package/lib/commands/auth/2fa/index.js +4 -4
- package/lib/commands/auth/login.d.ts +3 -3
- package/lib/commands/auth/login.js +6 -6
- package/lib/commands/auth/logout.js +1 -0
- package/lib/commands/auth/token.js +4 -2
- package/lib/commands/authorizations/create.js +2 -1
- package/lib/commands/authorizations/index.js +3 -4
- package/lib/commands/authorizations/revoke.d.ts +2 -2
- package/lib/commands/authorizations/revoke.js +6 -6
- package/lib/commands/autocomplete/create.d.ts +29 -0
- package/lib/commands/autocomplete/create.js +223 -0
- package/lib/commands/autocomplete/doctor.d.ts +12 -0
- package/lib/commands/autocomplete/doctor.js +111 -0
- package/lib/commands/autocomplete/index.d.ts +12 -0
- package/lib/commands/autocomplete/index.js +65 -0
- package/lib/commands/autocomplete/options.d.ts +25 -0
- package/lib/commands/autocomplete/options.js +208 -0
- package/lib/commands/autocomplete/script.d.ts +10 -0
- package/lib/commands/autocomplete/script.js +20 -0
- package/lib/commands/buildpacks/index.js +2 -3
- package/lib/commands/buildpacks/remove.d.ts +4 -4
- package/lib/commands/buildpacks/remove.js +9 -8
- package/lib/commands/certs/add.d.ts +8 -8
- package/lib/commands/certs/add.js +27 -29
- package/lib/commands/certs/auto/disable.d.ts +2 -2
- package/lib/commands/certs/auto/disable.js +4 -4
- package/lib/commands/certs/auto/enable.d.ts +2 -2
- package/lib/commands/certs/auto/enable.js +8 -9
- package/lib/commands/certs/auto/index.d.ts +2 -2
- package/lib/commands/certs/auto/index.js +16 -17
- package/lib/commands/certs/generate.d.ts +2 -3
- package/lib/commands/certs/generate.js +1 -2
- package/lib/commands/certs/index.d.ts +1 -1
- package/lib/commands/certs/index.js +3 -3
- package/lib/commands/certs/info.d.ts +4 -4
- package/lib/commands/certs/info.js +6 -6
- package/lib/commands/certs/remove.d.ts +3 -3
- package/lib/commands/certs/remove.js +5 -5
- package/lib/commands/certs/update.d.ts +8 -8
- package/lib/commands/certs/update.js +19 -19
- package/lib/commands/ci/config/get.d.ts +5 -5
- package/lib/commands/ci/config/get.js +8 -8
- package/lib/commands/ci/config/index.d.ts +2 -2
- package/lib/commands/ci/config/index.js +8 -9
- package/lib/commands/ci/config/set.d.ts +2 -2
- package/lib/commands/ci/config/set.js +10 -10
- package/lib/commands/ci/config/unset.d.ts +3 -3
- package/lib/commands/ci/config/unset.js +6 -5
- package/lib/commands/ci/index.d.ts +2 -2
- package/lib/commands/ci/index.js +5 -4
- package/lib/commands/ci/info.js +3 -2
- package/lib/commands/ci/last.d.ts +1 -1
- package/lib/commands/ci/last.js +4 -3
- package/lib/commands/ci/migrate-manifest.d.ts +1 -1
- package/lib/commands/ci/migrate-manifest.js +4 -4
- package/lib/commands/ci/open.d.ts +2 -2
- package/lib/commands/ci/open.js +4 -3
- package/lib/commands/ci/rerun.d.ts +4 -4
- package/lib/commands/ci/rerun.js +9 -8
- package/lib/commands/ci/run.d.ts +1 -1
- package/lib/commands/ci/run.js +9 -7
- package/lib/commands/clients/create.js +4 -3
- package/lib/commands/clients/destroy.d.ts +1 -1
- package/lib/commands/clients/destroy.js +4 -4
- package/lib/commands/clients/index.js +5 -4
- package/lib/commands/clients/info.d.ts +3 -3
- package/lib/commands/clients/info.js +5 -5
- package/lib/commands/clients/rotate.d.ts +3 -3
- package/lib/commands/clients/rotate.js +5 -6
- package/lib/commands/clients/update.d.ts +3 -3
- package/lib/commands/clients/update.js +5 -5
- package/lib/commands/config/edit.d.ts +5 -5
- package/lib/commands/config/edit.js +21 -22
- package/lib/commands/config/get.d.ts +5 -4
- package/lib/commands/config/get.js +34 -13
- package/lib/commands/config/index.d.ts +1 -1
- package/lib/commands/config/index.js +4 -5
- package/lib/commands/config/set.d.ts +2 -2
- package/lib/commands/config/set.js +17 -18
- package/lib/commands/config/unset.d.ts +1 -1
- package/lib/commands/config/unset.js +12 -11
- package/lib/commands/container/pull.d.ts +4 -4
- package/lib/commands/container/pull.js +12 -12
- package/lib/commands/container/push.d.ts +6 -6
- package/lib/commands/container/push.js +18 -18
- package/lib/commands/container/release.d.ts +4 -4
- package/lib/commands/container/release.js +16 -15
- package/lib/commands/container/rm.d.ts +4 -4
- package/lib/commands/container/rm.js +10 -9
- package/lib/commands/container/run.d.ts +5 -5
- package/lib/commands/container/run.js +14 -14
- package/lib/commands/dashboard.d.ts +1 -1
- package/lib/commands/dashboard.js +19 -20
- package/lib/commands/domains/add.d.ts +5 -5
- package/lib/commands/domains/add.js +17 -18
- package/lib/commands/domains/clear.js +2 -2
- package/lib/commands/domains/index.d.ts +5 -3
- package/lib/commands/domains/index.js +99 -69
- package/lib/commands/domains/info.js +2 -1
- package/lib/commands/domains/remove.d.ts +3 -3
- package/lib/commands/domains/remove.js +5 -5
- package/lib/commands/domains/update.d.ts +4 -4
- package/lib/commands/domains/update.js +8 -8
- package/lib/commands/drains/add.d.ts +3 -3
- package/lib/commands/drains/add.js +7 -7
- package/lib/commands/drains/index.d.ts +1 -1
- package/lib/commands/drains/index.js +5 -6
- package/lib/commands/drains/remove.d.ts +4 -4
- package/lib/commands/drains/remove.js +6 -6
- package/lib/commands/features/disable.d.ts +3 -3
- package/lib/commands/features/disable.js +8 -8
- package/lib/commands/features/enable.d.ts +3 -3
- package/lib/commands/features/enable.js +8 -8
- package/lib/commands/features/index.js +2 -3
- package/lib/commands/features/info.d.ts +4 -4
- package/lib/commands/features/info.js +10 -9
- package/lib/commands/git/clone.d.ts +2 -2
- package/lib/commands/git/clone.js +7 -6
- package/lib/commands/git/remote.js +6 -5
- package/lib/commands/keys/add.d.ts +3 -4
- package/lib/commands/keys/add.js +20 -18
- package/lib/commands/keys/index.js +4 -5
- package/lib/commands/keys/remove.d.ts +2 -2
- package/lib/commands/keys/remove.js +8 -8
- package/lib/commands/labs/disable.d.ts +3 -3
- package/lib/commands/labs/disable.js +13 -13
- package/lib/commands/labs/enable.d.ts +4 -4
- package/lib/commands/labs/enable.js +11 -11
- package/lib/commands/labs/index.d.ts +2 -2
- package/lib/commands/labs/index.js +6 -7
- package/lib/commands/labs/info.d.ts +3 -3
- package/lib/commands/labs/info.js +8 -7
- package/lib/commands/local/index.d.ts +4 -4
- package/lib/commands/local/index.js +21 -21
- package/lib/commands/local/run.d.ts +1 -1
- package/lib/commands/local/run.js +4 -3
- package/lib/commands/logs.d.ts +1 -1
- package/lib/commands/logs.js +22 -21
- package/lib/commands/maintenance/off.d.ts +1 -1
- package/lib/commands/maintenance/off.js +2 -2
- package/lib/commands/maintenance/on.d.ts +1 -1
- package/lib/commands/maintenance/on.js +2 -2
- package/lib/commands/members/index.d.ts +3 -3
- package/lib/commands/members/index.js +18 -13
- package/lib/commands/members/remove.d.ts +1 -1
- package/lib/commands/members/remove.js +6 -6
- package/lib/commands/notifications/index.d.ts +3 -3
- package/lib/commands/notifications/index.js +9 -10
- package/lib/commands/orgs/open.js +2 -2
- package/lib/commands/pg/backups/cancel.d.ts +13 -0
- package/lib/commands/pg/backups/cancel.js +43 -0
- package/lib/commands/pg/backups/capture.d.ts +15 -0
- package/lib/commands/pg/backups/capture.js +62 -0
- package/lib/commands/pg/backups/delete.d.ts +15 -0
- package/lib/commands/pg/backups/delete.js +34 -0
- package/lib/commands/pg/backups/download.d.ts +14 -0
- package/lib/commands/pg/backups/download.js +54 -0
- package/lib/commands/pg/backups/index.d.ts +20 -0
- package/lib/commands/pg/backups/index.js +121 -0
- package/lib/commands/pg/backups/info.d.ts +17 -0
- package/lib/commands/pg/backups/info.js +86 -0
- package/lib/commands/pg/backups/restore.d.ts +20 -0
- package/lib/commands/pg/backups/restore.js +134 -0
- package/lib/commands/pg/backups/schedule.d.ts +21 -0
- package/lib/commands/pg/backups/schedule.js +69 -0
- package/lib/commands/pg/backups/schedules.d.ts +10 -0
- package/lib/commands/pg/backups/schedules.js +27 -0
- package/lib/commands/pg/backups/unschedule.d.ts +13 -0
- package/lib/commands/pg/backups/unschedule.js +42 -0
- package/lib/commands/pg/backups/url.d.ts +13 -0
- package/lib/commands/pg/backups/url.js +37 -0
- package/lib/commands/pg/bloat.d.ts +13 -0
- package/lib/{oldCommands → commands}/pg/bloat.js +23 -30
- 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 +38 -0
- package/lib/commands/pg/copy.d.ts +18 -0
- package/lib/commands/pg/copy.js +83 -0
- package/lib/commands/pg/credentials/create.d.ts +15 -0
- package/lib/commands/pg/credentials/create.js +39 -0
- package/lib/commands/pg/credentials/destroy.d.ts +16 -0
- package/lib/commands/pg/credentials/destroy.js +45 -0
- package/lib/commands/pg/credentials/repair-default.d.ts +15 -0
- package/lib/commands/pg/credentials/repair-default.js +38 -0
- package/lib/commands/pg/credentials/rotate.d.ts +17 -0
- package/lib/commands/pg/credentials/rotate.js +79 -0
- package/lib/commands/pg/credentials/url.d.ts +14 -0
- package/lib/commands/pg/credentials/url.js +59 -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 +106 -0
- package/lib/commands/pg/info.d.ts +14 -0
- package/lib/commands/pg/info.js +91 -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 +24 -0
- package/lib/commands/pg/links/create.d.ts +16 -0
- package/lib/commands/pg/links/create.js +57 -0
- package/lib/commands/pg/links/destroy.d.ts +16 -0
- package/lib/commands/pg/links/destroy.js +40 -0
- package/lib/commands/pg/links/index.d.ts +13 -0
- package/lib/commands/pg/links/index.js +62 -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 +27 -0
- package/lib/commands/pg/maintenance/run.d.ts +14 -0
- package/lib/commands/pg/maintenance/run.js +34 -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 +100 -0
- package/lib/commands/pg/promote.d.ts +14 -0
- package/lib/commands/pg/promote.js +167 -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 +47 -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 +83 -0
- package/lib/commands/pg/reset.d.ts +15 -0
- package/lib/commands/pg/reset.js +43 -0
- package/lib/commands/pg/settings/auto-explain/log-analyze.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-analyze.js +28 -0
- package/lib/commands/pg/settings/auto-explain/log-buffers.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-buffers.js +26 -0
- package/lib/commands/pg/settings/auto-explain/log-format.d.ts +12 -0
- package/lib/commands/pg/settings/auto-explain/log-format.js +22 -0
- package/lib/commands/pg/settings/auto-explain/log-min-duration.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-min-duration.js +29 -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 +20 -0
- package/lib/commands/pg/settings/auto-explain/log-triggers.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-triggers.js +26 -0
- package/lib/commands/pg/settings/auto-explain/log-verbose.d.ts +17 -0
- package/lib/commands/pg/settings/auto-explain/log-verbose.js +29 -0
- package/lib/commands/pg/settings/auto-explain.d.ts +18 -0
- package/lib/commands/pg/settings/auto-explain.js +34 -0
- package/lib/commands/pg/settings/data-connector-details-logs.d.ts +17 -0
- package/lib/commands/pg/settings/data-connector-details-logs.js +30 -0
- package/lib/commands/pg/settings/index.d.ts +13 -0
- package/lib/commands/pg/settings/index.js +33 -0
- package/lib/commands/pg/settings/log-connections.d.ts +17 -0
- package/lib/commands/pg/settings/log-connections.js +30 -0
- package/lib/commands/pg/settings/log-lock-waits.d.ts +13 -0
- package/lib/commands/pg/settings/log-lock-waits.js +27 -0
- package/lib/commands/pg/settings/log-min-duration-statement.d.ts +12 -0
- package/lib/commands/pg/settings/log-min-duration-statement.js +29 -0
- package/lib/commands/pg/settings/log-min-error-statement.d.ts +12 -0
- package/lib/commands/pg/settings/log-min-error-statement.js +23 -0
- package/lib/commands/pg/settings/log-statement.d.ts +12 -0
- package/lib/commands/pg/settings/log-statement.js +26 -0
- package/lib/commands/pg/settings/track-functions.d.ts +12 -0
- package/lib/commands/pg/settings/track-functions.js +25 -0
- package/lib/commands/pg/unfollow.d.ts +14 -0
- package/lib/commands/pg/unfollow.js +38 -0
- package/lib/commands/pg/upgrade/cancel.d.ts +13 -0
- package/lib/commands/pg/upgrade/cancel.js +50 -0
- package/lib/commands/pg/upgrade/dryrun.d.ts +14 -0
- package/lib/commands/pg/upgrade/dryrun.js +50 -0
- package/lib/commands/pg/upgrade/index.d.ts +15 -0
- package/lib/commands/pg/upgrade/index.js +73 -0
- package/lib/commands/pg/upgrade/prepare.d.ts +14 -0
- package/lib/commands/pg/upgrade/prepare.js +51 -0
- package/lib/commands/pg/upgrade/run.d.ts +16 -0
- package/lib/commands/pg/upgrade/run.js +95 -0
- package/lib/commands/pg/upgrade/wait.d.ts +16 -0
- package/lib/commands/pg/upgrade/wait.js +105 -0
- package/lib/commands/pg/vacuum-stats.d.ts +13 -0
- package/lib/{oldCommands → commands}/pg/vacuum-stats.js +25 -29
- package/lib/commands/pg/wait.d.ts +15 -0
- package/lib/commands/pg/wait.js +79 -0
- package/lib/commands/pipelines/add.d.ts +3 -3
- package/lib/commands/pipelines/add.js +13 -13
- package/lib/commands/pipelines/connect.js +2 -1
- package/lib/commands/pipelines/create.d.ts +3 -3
- package/lib/commands/pipelines/create.js +20 -20
- package/lib/commands/pipelines/destroy.d.ts +2 -2
- package/lib/commands/pipelines/destroy.js +5 -5
- package/lib/commands/pipelines/diff.d.ts +3 -3
- package/lib/commands/pipelines/diff.js +12 -13
- package/lib/commands/pipelines/index.js +3 -3
- package/lib/commands/pipelines/info.d.ts +3 -3
- package/lib/commands/pipelines/info.js +10 -9
- package/lib/commands/pipelines/open.d.ts +9 -0
- package/lib/commands/pipelines/open.js +19 -0
- package/lib/commands/pipelines/promote.d.ts +12 -0
- package/lib/commands/pipelines/promote.js +209 -0
- package/lib/commands/pipelines/remove.d.ts +10 -0
- package/lib/commands/pipelines/remove.js +20 -0
- package/lib/commands/pipelines/rename.d.ts +10 -0
- package/lib/commands/pipelines/rename.js +34 -0
- package/lib/commands/pipelines/setup.d.ts +16 -0
- package/lib/commands/pipelines/setup.js +88 -0
- package/lib/commands/pipelines/transfer.d.ts +13 -0
- package/lib/commands/pipelines/transfer.js +60 -0
- package/lib/commands/pipelines/update.d.ts +11 -0
- package/lib/commands/pipelines/update.js +29 -0
- package/lib/commands/prompt.d.ts +1 -1
- package/lib/commands/prompt.js +4 -3
- package/lib/commands/ps/autoscale/disable.d.ts +10 -0
- package/lib/commands/ps/autoscale/disable.js +33 -0
- package/lib/commands/ps/autoscale/enable.d.ts +14 -0
- package/lib/commands/ps/autoscale/enable.js +84 -0
- package/lib/commands/ps/index.d.ts +15 -0
- package/lib/commands/ps/index.js +199 -0
- package/lib/commands/ps/restart.d.ts +18 -0
- package/lib/commands/ps/restart.js +68 -0
- package/lib/commands/ps/scale.d.ts +13 -0
- package/lib/commands/ps/scale.js +81 -0
- package/lib/commands/ps/stop.d.ts +18 -0
- package/lib/commands/ps/stop.js +62 -0
- package/lib/commands/ps/type.d.ts +12 -0
- package/lib/commands/ps/type.js +168 -0
- package/lib/commands/ps/wait.d.ts +13 -0
- package/lib/commands/ps/wait.js +73 -0
- package/lib/commands/regions.d.ts +2 -2
- package/lib/commands/regions.js +6 -5
- package/lib/commands/releases/index.d.ts +14 -0
- package/lib/commands/releases/index.js +155 -0
- package/lib/commands/releases/info.d.ts +15 -0
- package/lib/commands/releases/info.js +75 -0
- package/lib/commands/releases/output.d.ts +13 -0
- package/lib/commands/releases/output.js +33 -0
- package/lib/commands/releases/retry.d.ts +11 -0
- package/lib/commands/releases/retry.js +46 -0
- package/lib/commands/releases/rollback.d.ts +14 -0
- package/lib/commands/releases/rollback.js +54 -0
- package/lib/commands/repl.d.ts +1 -1
- package/lib/commands/repl.js +3 -2
- package/lib/commands/reviewapps/disable.d.ts +3 -3
- package/lib/commands/reviewapps/disable.js +11 -10
- package/lib/commands/reviewapps/enable.d.ts +2 -2
- package/lib/commands/reviewapps/enable.js +9 -8
- package/lib/commands/run/detached.d.ts +16 -0
- package/lib/commands/run/detached.js +54 -0
- package/lib/commands/run/index.d.ts +19 -0
- package/lib/commands/run/index.js +69 -0
- package/lib/commands/run/inside.d.ts +18 -0
- package/lib/commands/run/inside.js +77 -0
- package/lib/commands/sessions/destroy.d.ts +1 -1
- package/lib/commands/sessions/destroy.js +4 -4
- package/lib/commands/sessions/index.js +2 -3
- package/lib/commands/spaces/create.d.ts +23 -0
- package/lib/commands/spaces/create.js +87 -0
- package/lib/commands/spaces/destroy.d.ts +14 -0
- package/lib/commands/spaces/destroy.js +61 -0
- package/lib/commands/spaces/drains/get.d.ts +11 -0
- package/lib/commands/spaces/drains/get.js +23 -0
- package/lib/commands/spaces/drains/set.d.ts +13 -0
- package/lib/commands/spaces/drains/set.js +25 -0
- package/lib/commands/spaces/hosts.d.ts +14 -0
- package/lib/commands/spaces/hosts.js +35 -0
- package/lib/commands/spaces/index.d.ts +16 -0
- package/lib/commands/spaces/index.js +65 -0
- package/lib/commands/spaces/info.d.ts +14 -0
- package/lib/commands/spaces/info.js +48 -0
- package/lib/commands/spaces/peerings/accept.d.ts +15 -0
- package/lib/commands/spaces/peerings/accept.js +33 -0
- package/lib/commands/spaces/peerings/destroy.d.ts +15 -0
- package/lib/commands/spaces/peerings/destroy.js +43 -0
- package/lib/commands/spaces/peerings/index.d.ts +13 -0
- package/lib/commands/spaces/peerings/index.js +31 -0
- package/lib/commands/spaces/peerings/info.d.ts +15 -0
- package/lib/{oldCommands → commands}/spaces/peerings/info.js +32 -40
- package/lib/commands/spaces/ps.d.ts +15 -0
- package/lib/commands/spaces/ps.js +77 -0
- package/lib/commands/spaces/rename.d.ts +11 -0
- package/lib/commands/spaces/rename.js +24 -0
- package/lib/commands/spaces/topology.d.ts +18 -0
- package/lib/commands/spaces/topology.js +87 -0
- package/lib/commands/spaces/transfer.d.ts +11 -0
- package/lib/commands/spaces/transfer.js +33 -0
- package/lib/commands/spaces/trusted-ips/add.d.ts +16 -0
- package/lib/commands/spaces/trusted-ips/add.js +49 -0
- package/lib/commands/spaces/trusted-ips/index.d.ts +15 -0
- package/lib/commands/spaces/trusted-ips/index.js +59 -0
- package/lib/commands/spaces/trusted-ips/remove.d.ts +15 -0
- package/lib/commands/spaces/trusted-ips/remove.js +51 -0
- package/lib/commands/spaces/vpn/config.d.ts +14 -0
- package/lib/commands/spaces/vpn/config.js +53 -0
- package/lib/commands/spaces/vpn/connect.d.ts +15 -0
- package/lib/commands/spaces/vpn/connect.js +46 -0
- package/lib/commands/spaces/vpn/connections.d.ts +17 -0
- package/lib/commands/spaces/vpn/connections.js +55 -0
- package/lib/commands/spaces/vpn/destroy.d.ts +14 -0
- package/lib/commands/spaces/vpn/destroy.js +36 -0
- package/lib/commands/spaces/vpn/info.d.ts +16 -0
- package/lib/commands/spaces/vpn/info.js +85 -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 +16 -0
- package/lib/commands/spaces/vpn/wait.js +69 -0
- package/lib/commands/spaces/wait.d.ts +17 -0
- package/lib/commands/spaces/wait.js +87 -0
- package/lib/commands/status.js +14 -13
- package/lib/commands/teams/index.d.ts +1 -1
- package/lib/commands/teams/index.js +4 -5
- package/lib/commands/telemetry/add.d.ts +6 -5
- package/lib/commands/telemetry/add.js +43 -18
- package/lib/commands/telemetry/index.d.ts +4 -4
- package/lib/commands/telemetry/index.js +19 -17
- package/lib/commands/telemetry/info.d.ts +2 -2
- package/lib/commands/telemetry/info.js +5 -4
- package/lib/commands/telemetry/update.d.ts +3 -3
- package/lib/commands/telemetry/update.js +8 -9
- package/lib/commands/usage/addons.d.ts +2 -2
- package/lib/commands/usage/addons.js +17 -18
- package/lib/commands/webhooks/add.d.ts +16 -0
- package/lib/commands/webhooks/add.js +43 -0
- package/lib/commands/webhooks/deliveries/index.d.ts +12 -0
- package/lib/commands/webhooks/deliveries/index.js +75 -0
- package/lib/commands/webhooks/deliveries/info.d.ts +14 -0
- package/lib/commands/webhooks/deliveries/info.js +40 -0
- package/lib/commands/webhooks/index.d.ts +11 -0
- package/lib/commands/webhooks/index.js +42 -0
- package/lib/commands/webhooks/info.d.ts +14 -0
- package/lib/commands/webhooks/info.js +29 -0
- package/lib/commands/webhooks/remove.d.ts +14 -0
- package/lib/commands/webhooks/remove.js +24 -0
- package/lib/commands/webhooks/update.d.ts +19 -0
- package/lib/commands/webhooks/update.js +36 -0
- package/lib/global_telemetry.d.ts +2 -2
- package/lib/global_telemetry.js +34 -36
- package/lib/lib/addons/addons_wait.d.ts +1 -1
- package/lib/lib/addons/addons_wait.js +2 -2
- package/lib/lib/addons/create_addon.d.ts +5 -3
- package/lib/lib/addons/create_addon.js +12 -9
- package/lib/lib/addons/destroy_addon.js +17 -9
- package/lib/lib/addons/resolve.d.ts +10 -11
- package/lib/lib/addons/resolve.js +19 -18
- package/lib/lib/addons/util.d.ts +2 -2
- package/lib/lib/addons/util.js +22 -16
- package/lib/lib/api.d.ts +1 -1
- package/lib/lib/api.js +19 -23
- package/lib/lib/apps/app-transfer.d.ts +3 -3
- package/lib/lib/apps/app-transfer.js +11 -11
- package/lib/lib/autocomplete/base.d.ts +11 -1
- package/lib/lib/autocomplete/base.js +33 -49
- package/lib/lib/autocomplete/cache.js +9 -7
- package/lib/lib/autocomplete/completions.d.ts +41 -1
- package/lib/lib/autocomplete/completions.js +258 -290
- package/lib/lib/buildpacks/buildpacks.d.ts +11 -11
- package/lib/lib/buildpacks/buildpacks.js +71 -71
- package/lib/lib/certs/certificate_details.js +3 -4
- package/lib/lib/certs/flags.d.ts +2 -2
- package/lib/lib/certs/flags.js +5 -8
- package/lib/lib/certs/get_cert_and_key.js +2 -2
- package/lib/lib/ci/git.d.ts +12 -2
- package/lib/lib/ci/git.js +20 -6
- package/lib/lib/ci/pipelines.d.ts +5 -5
- package/lib/lib/ci/pipelines.js +17 -17
- package/lib/lib/ci/source.d.ts +8 -0
- package/lib/lib/ci/source.js +22 -10
- package/lib/lib/ci/test-run.js +18 -15
- package/lib/lib/config/quote.js +4 -4
- package/lib/lib/config/util.d.ts +3 -0
- package/lib/lib/config/util.js +5 -0
- package/lib/lib/confirmCommand.js +6 -7
- package/lib/lib/container/docker_helper.d.ts +12 -12
- package/lib/lib/container/docker_helper.js +71 -74
- package/lib/lib/container/helpers.js +2 -2
- package/lib/lib/container/streamer.js +4 -4
- package/lib/lib/data/baseCommand.d.ts +4 -0
- package/lib/lib/data/baseCommand.js +15 -0
- package/lib/lib/data/createPool.d.ts +4 -0
- package/lib/lib/data/createPool.js +6 -0
- package/lib/lib/data/credentialUtils.d.ts +3 -0
- package/lib/lib/data/credentialUtils.js +23 -0
- package/lib/lib/data/displayQuota.d.ts +19 -0
- package/lib/lib/data/displayQuota.js +59 -0
- package/lib/lib/data/parseProvisionOpts.d.ts +15 -0
- package/lib/lib/data/parseProvisionOpts.js +31 -0
- package/lib/lib/data/types.d.ts +181 -0
- package/lib/lib/data/types.js +3 -0
- package/lib/lib/data-scrubber/patterns.d.ts +4 -0
- package/lib/lib/data-scrubber/patterns.js +13 -0
- package/lib/lib/data-scrubber/presets.d.ts +64 -0
- package/lib/lib/data-scrubber/presets.js +112 -0
- package/lib/lib/data-scrubber/scrubber.d.ts +131 -0
- package/lib/lib/data-scrubber/scrubber.js +256 -0
- package/lib/lib/data-scrubber/types.d.ts +169 -0
- package/lib/lib/domains/domains.js +10 -10
- package/lib/lib/domains/wait-for-domain.js +2 -3
- package/lib/lib/local/env-file-validator.js +2 -2
- package/lib/lib/local/fork-foreman.js +3 -2
- package/lib/lib/members/util.js +7 -7
- package/lib/lib/orgs/utils.js +2 -3
- package/lib/lib/pg/backups.d.ts +17 -1
- package/lib/lib/pg/backups.js +132 -156
- package/lib/lib/pg/download.js +7 -7
- package/lib/lib/pg/fetcher.d.ts +3 -1
- package/lib/lib/pg/fetcher.js +3 -162
- package/lib/lib/pg/psql.d.ts +17 -1
- package/lib/lib/pg/psql.js +59 -269
- package/lib/lib/pg/push_pull.d.ts +12 -0
- package/lib/lib/pg/push_pull.js +97 -119
- package/lib/lib/pg/setter.d.ts +16 -1
- package/lib/lib/pg/setter.js +61 -73
- package/lib/lib/pg/types.d.ts +10 -33
- package/lib/lib/pg/util.d.ts +8 -1
- package/lib/lib/pg/util.js +102 -211
- package/lib/lib/pipelines/disambiguate.js +9 -11
- package/lib/lib/pipelines/ownership.d.ts +1 -1
- package/lib/lib/pipelines/ownership.js +6 -12
- package/lib/lib/pipelines/render-pipeline.d.ts +2 -2
- package/lib/lib/pipelines/render-pipeline.js +10 -9
- package/lib/lib/pipelines/setup/create-apps.js +7 -9
- package/lib/lib/pipelines/setup/get-ci-settings.js +2 -2
- package/lib/lib/pipelines/setup/get-github-token.js +1 -3
- package/lib/lib/pipelines/setup/get-name-and-repo.js +27 -22
- package/lib/lib/pipelines/setup/get-settings.js +12 -12
- package/lib/lib/pipelines/setup/poll-app-setups.js +3 -5
- package/lib/lib/pipelines/setup/setup-pipeline.js +1 -3
- package/lib/lib/pipelines/setup/validate.d.ts +1 -1
- package/lib/lib/pipelines/setup/validate.js +2 -2
- package/lib/lib/pipelines/stages.d.ts +2 -2
- package/lib/lib/pipelines/stages.js +4 -4
- package/lib/lib/redis/api.d.ts +22 -22
- package/lib/lib/redis/api.js +62 -67
- package/lib/lib/releases/output.js +1 -1
- package/lib/lib/releases/status_helper.d.ts +1 -1
- package/lib/lib/releases/status_helper.js +16 -8
- package/lib/lib/run/colorize.js +73 -40
- package/lib/lib/run/dyno.d.ts +22 -30
- package/lib/lib/run/dyno.js +184 -180
- package/lib/lib/run/helpers.d.ts +25 -0
- package/lib/lib/run/helpers.js +119 -3
- package/lib/lib/run/log-displayer.d.ts +3 -3
- package/lib/lib/run/log-displayer.js +21 -21
- package/lib/lib/spaces/format.js +36 -23
- package/lib/lib/spaces/hosts.d.ts +9 -1
- package/lib/lib/spaces/hosts.js +28 -41
- package/lib/lib/spaces/peering.d.ts +4 -1
- package/lib/lib/spaces/peering.js +45 -52
- package/lib/lib/spaces/spaces.d.ts +6 -1
- package/lib/lib/spaces/spaces.js +30 -39
- package/lib/lib/spaces/vpn-connections.js +16 -16
- package/lib/lib/telemetry/util.d.ts +1 -1
- package/lib/lib/telemetry/util.js +3 -3
- package/lib/lib/types/completion.d.ts +15 -0
- package/lib/lib/utils/multisort.d.ts +4 -7
- package/lib/lib/utils/multisort.js +8 -32
- package/lib/lib/utils/packageParser.js +2 -2
- package/lib/lib/utils/uuid-validate.js +1 -3
- package/lib/lib/webhooks/base.d.ts +2 -2
- package/lib/lib/webhooks/base.js +3 -3
- package/lib/nls-data.d.ts +10 -0
- package/lib/nls-data.js +10 -0
- package/lib/nls.d.ts +1 -1
- package/lib/nls.js +1 -1
- package/npm-shrinkwrap.json +17653 -18259
- package/oclif.manifest.json +9918 -3293
- package/package.json +26 -237
- package/lib/lib/pg/bastion.js +0 -137
- package/lib/lib/pg/config.d.ts +0 -2
- package/lib/lib/pg/config.js +0 -9
- package/lib/lib/pg/host.d.ts +0 -1
- package/lib/lib/pg/host.js +0 -3
- package/lib/lib/spaces/outbound-rules.js +0 -85
- package/lib/oldCommands/autocomplete/create.d.ts +0 -1
- package/lib/oldCommands/autocomplete/create.js +0 -254
- package/lib/oldCommands/autocomplete/doctor.d.ts +0 -1
- package/lib/oldCommands/autocomplete/doctor.js +0 -110
- package/lib/oldCommands/autocomplete/index.d.ts +0 -1
- package/lib/oldCommands/autocomplete/index.js +0 -80
- package/lib/oldCommands/autocomplete/options.d.ts +0 -1
- package/lib/oldCommands/autocomplete/options.js +0 -240
- package/lib/oldCommands/autocomplete/script.d.ts +0 -1
- package/lib/oldCommands/autocomplete/script.js +0 -35
- package/lib/oldCommands/pg/backups/cancel.d.ts +0 -1
- package/lib/oldCommands/pg/backups/cancel.js +0 -56
- package/lib/oldCommands/pg/backups/capture.d.ts +0 -1
- package/lib/oldCommands/pg/backups/capture.js +0 -77
- package/lib/oldCommands/pg/backups/delete.d.ts +0 -1
- package/lib/oldCommands/pg/backups/delete.js +0 -45
- package/lib/oldCommands/pg/backups/download.d.ts +0 -1
- package/lib/oldCommands/pg/backups/download.js +0 -64
- package/lib/oldCommands/pg/backups/index.d.ts +0 -1
- package/lib/oldCommands/pg/backups/index.js +0 -141
- package/lib/oldCommands/pg/backups/info.d.ts +0 -1
- package/lib/oldCommands/pg/backups/info.js +0 -102
- package/lib/oldCommands/pg/backups/restore.d.ts +0 -1
- package/lib/oldCommands/pg/backups/restore.js +0 -150
- package/lib/oldCommands/pg/backups/schedule.d.ts +0 -1
- package/lib/oldCommands/pg/backups/schedule.js +0 -107
- package/lib/oldCommands/pg/backups/schedules.d.ts +0 -1
- package/lib/oldCommands/pg/backups/schedules.js +0 -34
- package/lib/oldCommands/pg/backups/unschedule.d.ts +0 -1
- package/lib/oldCommands/pg/backups/unschedule.js +0 -60
- package/lib/oldCommands/pg/backups/url.d.ts +0 -1
- package/lib/oldCommands/pg/backups/url.js +0 -46
- package/lib/oldCommands/pg/bloat.d.ts +0 -1
- package/lib/oldCommands/pg/blocking.d.ts +0 -1
- package/lib/oldCommands/pg/blocking.js +0 -48
- package/lib/oldCommands/pg/connection-pooling/attach.d.ts +0 -1
- package/lib/oldCommands/pg/connection-pooling/attach.js +0 -53
- package/lib/oldCommands/pg/copy.d.ts +0 -1
- package/lib/oldCommands/pg/copy.js +0 -104
- package/lib/oldCommands/pg/credentials/create.d.ts +0 -1
- package/lib/oldCommands/pg/credentials/create.js +0 -47
- package/lib/oldCommands/pg/credentials/destroy.d.ts +0 -1
- package/lib/oldCommands/pg/credentials/destroy.js +0 -56
- package/lib/oldCommands/pg/credentials/repair-default.d.ts +0 -1
- package/lib/oldCommands/pg/credentials/repair-default.js +0 -43
- package/lib/oldCommands/pg/credentials/rotate.d.ts +0 -1
- package/lib/oldCommands/pg/credentials/rotate.js +0 -97
- package/lib/oldCommands/pg/credentials/url.d.ts +0 -1
- package/lib/oldCommands/pg/credentials/url.js +0 -75
- package/lib/oldCommands/pg/credentials.d.ts +0 -1
- package/lib/oldCommands/pg/credentials.js +0 -77
- package/lib/oldCommands/pg/diagnose.d.ts +0 -1
- package/lib/oldCommands/pg/diagnose.js +0 -136
- package/lib/oldCommands/pg/info.d.ts +0 -1
- package/lib/oldCommands/pg/info.js +0 -110
- package/lib/oldCommands/pg/kill.d.ts +0 -1
- package/lib/oldCommands/pg/kill.js +0 -37
- package/lib/oldCommands/pg/killall.d.ts +0 -1
- package/lib/oldCommands/pg/killall.js +0 -31
- package/lib/oldCommands/pg/links/create.d.ts +0 -1
- package/lib/oldCommands/pg/links/create.js +0 -70
- package/lib/oldCommands/pg/links/destroy.d.ts +0 -1
- package/lib/oldCommands/pg/links/destroy.js +0 -51
- package/lib/oldCommands/pg/links/index.d.ts +0 -1
- package/lib/oldCommands/pg/links/index.js +0 -64
- package/lib/oldCommands/pg/locks.d.ts +0 -1
- package/lib/oldCommands/pg/locks.js +0 -60
- package/lib/oldCommands/pg/maintenance/index.d.ts +0 -1
- package/lib/oldCommands/pg/maintenance/index.js +0 -34
- package/lib/oldCommands/pg/maintenance/run.d.ts +0 -1
- package/lib/oldCommands/pg/maintenance/run.js +0 -44
- package/lib/oldCommands/pg/maintenance/window.d.ts +0 -1
- package/lib/oldCommands/pg/maintenance/window.js +0 -52
- package/lib/oldCommands/pg/outliers.d.ts +0 -1
- package/lib/oldCommands/pg/outliers.js +0 -110
- package/lib/oldCommands/pg/promote.d.ts +0 -1
- package/lib/oldCommands/pg/promote.js +0 -183
- package/lib/oldCommands/pg/ps.d.ts +0 -1
- package/lib/oldCommands/pg/ps.js +0 -56
- package/lib/oldCommands/pg/psql.d.ts +0 -1
- package/lib/oldCommands/pg/psql.js +0 -53
- package/lib/oldCommands/pg/pull.d.ts +0 -1
- package/lib/oldCommands/pg/pull.js +0 -114
- package/lib/oldCommands/pg/push.d.ts +0 -1
- package/lib/oldCommands/pg/push.js +0 -111
- package/lib/oldCommands/pg/reset.d.ts +0 -1
- package/lib/oldCommands/pg/reset.js +0 -49
- package/lib/oldCommands/pg/settings/auto-explain/log-analyze.d.ts +0 -1
- package/lib/oldCommands/pg/settings/auto-explain/log-analyze.js +0 -37
- package/lib/oldCommands/pg/settings/auto-explain/log-buffers.d.ts +0 -1
- package/lib/oldCommands/pg/settings/auto-explain/log-buffers.js +0 -35
- package/lib/oldCommands/pg/settings/auto-explain/log-format.d.ts +0 -1
- package/lib/oldCommands/pg/settings/auto-explain/log-format.js +0 -30
- package/lib/oldCommands/pg/settings/auto-explain/log-min-duration.d.ts +0 -1
- package/lib/oldCommands/pg/settings/auto-explain/log-min-duration.js +0 -39
- package/lib/oldCommands/pg/settings/auto-explain/log-nested-statements.d.ts +0 -1
- package/lib/oldCommands/pg/settings/auto-explain/log-nested-statements.js +0 -30
- package/lib/oldCommands/pg/settings/auto-explain/log-triggers.d.ts +0 -1
- package/lib/oldCommands/pg/settings/auto-explain/log-triggers.js +0 -35
- package/lib/oldCommands/pg/settings/auto-explain/log-verbose.d.ts +0 -1
- package/lib/oldCommands/pg/settings/auto-explain/log-verbose.js +0 -40
- package/lib/oldCommands/pg/settings/auto-explain.d.ts +0 -1
- package/lib/oldCommands/pg/settings/auto-explain.js +0 -45
- package/lib/oldCommands/pg/settings/data-connector-details-logs.d.ts +0 -1
- package/lib/oldCommands/pg/settings/data-connector-details-logs.js +0 -40
- package/lib/oldCommands/pg/settings/index.d.ts +0 -1
- package/lib/oldCommands/pg/settings/index.js +0 -41
- package/lib/oldCommands/pg/settings/log-connections.d.ts +0 -1
- package/lib/oldCommands/pg/settings/log-connections.js +0 -40
- package/lib/oldCommands/pg/settings/log-lock-waits.d.ts +0 -1
- package/lib/oldCommands/pg/settings/log-lock-waits.js +0 -36
- package/lib/oldCommands/pg/settings/log-min-duration-statement.d.ts +0 -1
- package/lib/oldCommands/pg/settings/log-min-duration-statement.js +0 -39
- package/lib/oldCommands/pg/settings/log-min-error-statement.d.ts +0 -1
- package/lib/oldCommands/pg/settings/log-min-error-statement.js +0 -31
- package/lib/oldCommands/pg/settings/log-statement.d.ts +0 -1
- package/lib/oldCommands/pg/settings/log-statement.js +0 -33
- package/lib/oldCommands/pg/settings/track-functions.d.ts +0 -1
- package/lib/oldCommands/pg/settings/track-functions.js +0 -33
- package/lib/oldCommands/pg/unfollow.d.ts +0 -1
- package/lib/oldCommands/pg/unfollow.js +0 -46
- package/lib/oldCommands/pg/upgrade/cancel.d.ts +0 -1
- package/lib/oldCommands/pg/upgrade/cancel.js +0 -62
- package/lib/oldCommands/pg/upgrade/dryrun.d.ts +0 -1
- package/lib/oldCommands/pg/upgrade/dryrun.js +0 -62
- package/lib/oldCommands/pg/upgrade/index.d.ts +0 -1
- package/lib/oldCommands/pg/upgrade/index.js +0 -85
- package/lib/oldCommands/pg/upgrade/prepare.d.ts +0 -1
- package/lib/oldCommands/pg/upgrade/prepare.js +0 -64
- package/lib/oldCommands/pg/upgrade/run.d.ts +0 -1
- package/lib/oldCommands/pg/upgrade/run.js +0 -106
- package/lib/oldCommands/pg/upgrade/wait.d.ts +0 -1
- package/lib/oldCommands/pg/upgrade/wait.js +0 -121
- package/lib/oldCommands/pg/upgrade.d.ts +0 -1
- package/lib/oldCommands/pg/upgrade.js +0 -66
- package/lib/oldCommands/pg/vacuum-stats.d.ts +0 -1
- package/lib/oldCommands/pg/wait.d.ts +0 -1
- package/lib/oldCommands/pg/wait.js +0 -96
- package/lib/oldCommands/pipelines/open.d.ts +0 -1
- package/lib/oldCommands/pipelines/open.js +0 -25
- package/lib/oldCommands/pipelines/promote.d.ts +0 -1
- package/lib/oldCommands/pipelines/promote.js +0 -269
- package/lib/oldCommands/pipelines/remove.d.ts +0 -1
- package/lib/oldCommands/pipelines/remove.js +0 -29
- package/lib/oldCommands/pipelines/rename.d.ts +0 -1
- package/lib/oldCommands/pipelines/rename.js +0 -42
- package/lib/oldCommands/pipelines/setup.d.ts +0 -1
- package/lib/oldCommands/pipelines/setup.js +0 -117
- package/lib/oldCommands/pipelines/transfer.d.ts +0 -1
- package/lib/oldCommands/pipelines/transfer.js +0 -78
- package/lib/oldCommands/pipelines/update.d.ts +0 -1
- package/lib/oldCommands/pipelines/update.js +0 -39
- package/lib/oldCommands/ps/autoscale/disable.d.ts +0 -1
- package/lib/oldCommands/ps/autoscale/disable.js +0 -43
- package/lib/oldCommands/ps/autoscale/enable.d.ts +0 -1
- package/lib/oldCommands/ps/autoscale/enable.js +0 -103
- package/lib/oldCommands/ps/index.d.ts +0 -1
- package/lib/oldCommands/ps/index.js +0 -254
- package/lib/oldCommands/ps/restart.d.ts +0 -1
- package/lib/oldCommands/ps/restart.js +0 -78
- package/lib/oldCommands/ps/scale.d.ts +0 -1
- package/lib/oldCommands/ps/scale.js +0 -95
- package/lib/oldCommands/ps/stop.d.ts +0 -1
- package/lib/oldCommands/ps/stop.js +0 -73
- package/lib/oldCommands/ps/type.d.ts +0 -1
- package/lib/oldCommands/ps/type.js +0 -190
- package/lib/oldCommands/ps/wait.d.ts +0 -1
- package/lib/oldCommands/ps/wait.js +0 -93
- package/lib/oldCommands/releases/index.d.ts +0 -1
- package/lib/oldCommands/releases/index.js +0 -156
- package/lib/oldCommands/releases/info.d.ts +0 -1
- package/lib/oldCommands/releases/info.js +0 -68
- package/lib/oldCommands/releases/output.d.ts +0 -1
- package/lib/oldCommands/releases/output.js +0 -42
- package/lib/oldCommands/releases/retry.d.ts +0 -1
- package/lib/oldCommands/releases/retry.js +0 -59
- package/lib/oldCommands/releases/rollback.d.ts +0 -1
- package/lib/oldCommands/releases/rollback.js +0 -65
- package/lib/oldCommands/run/detached.d.ts +0 -1
- package/lib/oldCommands/run/detached.js +0 -61
- package/lib/oldCommands/run/index.d.ts +0 -1
- package/lib/oldCommands/run/index.js +0 -72
- package/lib/oldCommands/run/inside.d.ts +0 -1
- package/lib/oldCommands/run/inside.js +0 -93
- package/lib/oldCommands/spaces/create.d.ts +0 -1
- package/lib/oldCommands/spaces/create.js +0 -99
- package/lib/oldCommands/spaces/destroy.d.ts +0 -1
- package/lib/oldCommands/spaces/destroy.js +0 -79
- package/lib/oldCommands/spaces/drains/get.d.ts +0 -1
- package/lib/oldCommands/spaces/drains/get.js +0 -33
- package/lib/oldCommands/spaces/drains/set.d.ts +0 -1
- package/lib/oldCommands/spaces/drains/set.js +0 -33
- package/lib/oldCommands/spaces/hosts.d.ts +0 -1
- package/lib/oldCommands/spaces/hosts.js +0 -42
- package/lib/oldCommands/spaces/index.d.ts +0 -1
- package/lib/oldCommands/spaces/index.js +0 -74
- package/lib/oldCommands/spaces/info.d.ts +0 -1
- package/lib/oldCommands/spaces/info.js +0 -59
- package/lib/oldCommands/spaces/peerings/accept.d.ts +0 -1
- package/lib/oldCommands/spaces/peerings/accept.js +0 -41
- package/lib/oldCommands/spaces/peerings/destroy.d.ts +0 -1
- package/lib/oldCommands/spaces/peerings/destroy.js +0 -51
- package/lib/oldCommands/spaces/peerings/index.d.ts +0 -1
- package/lib/oldCommands/spaces/peerings/index.js +0 -39
- package/lib/oldCommands/spaces/peerings/info.d.ts +0 -1
- package/lib/oldCommands/spaces/ps.d.ts +0 -1
- package/lib/oldCommands/spaces/ps.js +0 -97
- package/lib/oldCommands/spaces/rename.d.ts +0 -1
- package/lib/oldCommands/spaces/rename.js +0 -29
- package/lib/oldCommands/spaces/topology.d.ts +0 -1
- package/lib/oldCommands/spaces/topology.js +0 -95
- package/lib/oldCommands/spaces/transfer.d.ts +0 -1
- package/lib/oldCommands/spaces/transfer.js +0 -37
- package/lib/oldCommands/spaces/trusted-ips/add.d.ts +0 -1
- package/lib/oldCommands/spaces/trusted-ips/add.js +0 -48
- package/lib/oldCommands/spaces/trusted-ips/index.d.ts +0 -1
- package/lib/oldCommands/spaces/trusted-ips/index.js +0 -57
- package/lib/oldCommands/spaces/trusted-ips/remove.d.ts +0 -1
- package/lib/oldCommands/spaces/trusted-ips/remove.js +0 -50
- package/lib/oldCommands/spaces/vpn/config.d.ts +0 -1
- package/lib/oldCommands/spaces/vpn/config.js +0 -61
- package/lib/oldCommands/spaces/vpn/connect.d.ts +0 -1
- package/lib/oldCommands/spaces/vpn/connect.js +0 -54
- package/lib/oldCommands/spaces/vpn/connections.d.ts +0 -1
- package/lib/oldCommands/spaces/vpn/connections.js +0 -70
- package/lib/oldCommands/spaces/vpn/destroy.d.ts +0 -1
- package/lib/oldCommands/spaces/vpn/destroy.js +0 -48
- package/lib/oldCommands/spaces/vpn/info.d.ts +0 -1
- package/lib/oldCommands/spaces/vpn/info.js +0 -89
- package/lib/oldCommands/spaces/vpn/update.d.ts +0 -1
- package/lib/oldCommands/spaces/vpn/update.js +0 -46
- package/lib/oldCommands/spaces/vpn/wait.d.ts +0 -1
- package/lib/oldCommands/spaces/vpn/wait.js +0 -80
- package/lib/oldCommands/spaces/wait.d.ts +0 -1
- package/lib/oldCommands/spaces/wait.js +0 -106
- package/lib/oldCommands/webhooks/add.d.ts +0 -1
- package/lib/oldCommands/webhooks/add.js +0 -56
- package/lib/oldCommands/webhooks/deliveries/index.d.ts +0 -1
- package/lib/oldCommands/webhooks/deliveries/index.js +0 -90
- package/lib/oldCommands/webhooks/deliveries/info.d.ts +0 -1
- package/lib/oldCommands/webhooks/deliveries/info.js +0 -54
- package/lib/oldCommands/webhooks/index.d.ts +0 -1
- package/lib/oldCommands/webhooks/index.js +0 -55
- package/lib/oldCommands/webhooks/info.d.ts +0 -1
- package/lib/oldCommands/webhooks/info.js +0 -41
- package/lib/oldCommands/webhooks/remove.d.ts +0 -1
- package/lib/oldCommands/webhooks/remove.js +0 -37
- package/lib/oldCommands/webhooks/update.d.ts +0 -1
- package/lib/oldCommands/webhooks/update.js +0 -50
- package/lib/package.nls.json +0 -6
- /package/lib/lib/{pg/bastion.d.ts → data-scrubber/types.js} +0 -0
- /package/lib/lib/{spaces/outbound-rules.d.ts → types/completion.js} +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regex patterns for detecting PII in string content
|
|
3
|
+
*/
|
|
4
|
+
export const PII_PATTERNS = [
|
|
5
|
+
// Social Security Numbers (US)
|
|
6
|
+
/\b\d{3}-\d{2}-\d{4}\b/g,
|
|
7
|
+
// Email addresses
|
|
8
|
+
/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,
|
|
9
|
+
// Phone numbers (US format)
|
|
10
|
+
/\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g,
|
|
11
|
+
// JWT tokens
|
|
12
|
+
/\beyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,
|
|
13
|
+
];
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heroku-specific sensitive field patterns
|
|
3
|
+
*
|
|
4
|
+
* Consolidated list of field names and patterns that contain sensitive data in Heroku applications.
|
|
5
|
+
*
|
|
6
|
+
* Use this preset to ensure consistent PII handling across Heroku services.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { HEROKU_FIELDS } from '@heroku/js-blanket/core/presets';
|
|
11
|
+
* import { Scrubber } from '@heroku/js-blanket';
|
|
12
|
+
*
|
|
13
|
+
* const scrubber = new Scrubber({ fields: HEROKU_FIELDS });
|
|
14
|
+
* const result = scrubber.scrub(data);
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare const HEROKU_FIELDS: (string | RegExp)[];
|
|
18
|
+
/**
|
|
19
|
+
* GDPR-relevant PII field patterns
|
|
20
|
+
*
|
|
21
|
+
* Field names that typically contain personally identifiable information (PII)
|
|
22
|
+
* regulated by GDPR (General Data Protection Regulation).
|
|
23
|
+
*
|
|
24
|
+
* Use this preset when handling EU user data to ensure compliance with GDPR requirements.
|
|
25
|
+
*
|
|
26
|
+
* @see {@link https://gdpr.eu/what-is-gdpr/|GDPR Official Documentation}
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* import { GDPR_FIELDS, HEROKU_FIELDS } from '@heroku/js-blanket/core/presets';
|
|
31
|
+
* import { Scrubber } from '@heroku/js-blanket';
|
|
32
|
+
*
|
|
33
|
+
* // Combine multiple presets
|
|
34
|
+
* const scrubber = new Scrubber({
|
|
35
|
+
* fields: [...HEROKU_FIELDS, ...GDPR_FIELDS]
|
|
36
|
+
* });
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare const GDPR_FIELDS: string[];
|
|
40
|
+
/**
|
|
41
|
+
* PCI-DSS relevant field patterns
|
|
42
|
+
*
|
|
43
|
+
* Field names that typically contain payment card information regulated by
|
|
44
|
+
* PCI-DSS (Payment Card Industry Data Security Standard).
|
|
45
|
+
*
|
|
46
|
+
* Use this preset when handling payment card data to help maintain PCI-DSS compliance.
|
|
47
|
+
*
|
|
48
|
+
* **Important**: This preset helps reduce exposure of sensitive payment data in logs and
|
|
49
|
+
* error reports, but is not a substitute for full PCI-DSS compliance measures.
|
|
50
|
+
*
|
|
51
|
+
* @see {@link https://www.pcisecuritystandards.org/|PCI Security Standards Council}
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* import { PCI_FIELDS } from '@heroku/js-blanket/core/presets';
|
|
56
|
+
* import { Scrubber } from '@heroku/js-blanket';
|
|
57
|
+
*
|
|
58
|
+
* const scrubber = new Scrubber({
|
|
59
|
+
* fields: PCI_FIELDS,
|
|
60
|
+
* patterns: [/\d{4}-\d{4}-\d{4}-\d{4}/g] // Also scrub card numbers in text
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare const PCI_FIELDS: string[];
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heroku-specific sensitive field patterns
|
|
3
|
+
*
|
|
4
|
+
* Consolidated list of field names and patterns that contain sensitive data in Heroku applications.
|
|
5
|
+
*
|
|
6
|
+
* Use this preset to ensure consistent PII handling across Heroku services.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { HEROKU_FIELDS } from '@heroku/js-blanket/core/presets';
|
|
11
|
+
* import { Scrubber } from '@heroku/js-blanket';
|
|
12
|
+
*
|
|
13
|
+
* const scrubber = new Scrubber({ fields: HEROKU_FIELDS });
|
|
14
|
+
* const result = scrubber.scrub(data);
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export const HEROKU_FIELDS = [
|
|
18
|
+
// Authentication & Sessions
|
|
19
|
+
'access_token',
|
|
20
|
+
/api[-_]?key/i,
|
|
21
|
+
'authenticity_token',
|
|
22
|
+
'heroku_oauth_token',
|
|
23
|
+
'heroku_session_nonce',
|
|
24
|
+
'heroku_user_session',
|
|
25
|
+
'oauth_token',
|
|
26
|
+
'sudo_oauth_token',
|
|
27
|
+
'super_user_session_secret',
|
|
28
|
+
'user_session_secret',
|
|
29
|
+
'postgres_session_nonce',
|
|
30
|
+
// Passwords & Secrets
|
|
31
|
+
'password',
|
|
32
|
+
'passwd',
|
|
33
|
+
'old_secret',
|
|
34
|
+
'secret',
|
|
35
|
+
'secret_token',
|
|
36
|
+
'confirm_password',
|
|
37
|
+
'password_confirmation',
|
|
38
|
+
/client[-_]?secret/i,
|
|
39
|
+
// Tokens
|
|
40
|
+
'token',
|
|
41
|
+
'bouncer.token',
|
|
42
|
+
'bouncer.refresh_token',
|
|
43
|
+
// Headers (case-insensitive)
|
|
44
|
+
/authorization/i,
|
|
45
|
+
/cookie/i,
|
|
46
|
+
/x-refresh-token/i,
|
|
47
|
+
// SSO & Sessions
|
|
48
|
+
'www-sso-session',
|
|
49
|
+
// Payment
|
|
50
|
+
'payment_method',
|
|
51
|
+
// Infrastructure
|
|
52
|
+
'logplexUrl',
|
|
53
|
+
];
|
|
54
|
+
/**
|
|
55
|
+
* GDPR-relevant PII field patterns
|
|
56
|
+
*
|
|
57
|
+
* Field names that typically contain personally identifiable information (PII)
|
|
58
|
+
* regulated by GDPR (General Data Protection Regulation).
|
|
59
|
+
*
|
|
60
|
+
* Use this preset when handling EU user data to ensure compliance with GDPR requirements.
|
|
61
|
+
*
|
|
62
|
+
* @see {@link https://gdpr.eu/what-is-gdpr/|GDPR Official Documentation}
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* import { GDPR_FIELDS, HEROKU_FIELDS } from '@heroku/js-blanket/core/presets';
|
|
67
|
+
* import { Scrubber } from '@heroku/js-blanket';
|
|
68
|
+
*
|
|
69
|
+
* // Combine multiple presets
|
|
70
|
+
* const scrubber = new Scrubber({
|
|
71
|
+
* fields: [...HEROKU_FIELDS, ...GDPR_FIELDS]
|
|
72
|
+
* });
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export const GDPR_FIELDS = [
|
|
76
|
+
'email',
|
|
77
|
+
'phone',
|
|
78
|
+
'address',
|
|
79
|
+
'postal_code',
|
|
80
|
+
'ssn',
|
|
81
|
+
'tax_id',
|
|
82
|
+
];
|
|
83
|
+
/**
|
|
84
|
+
* PCI-DSS relevant field patterns
|
|
85
|
+
*
|
|
86
|
+
* Field names that typically contain payment card information regulated by
|
|
87
|
+
* PCI-DSS (Payment Card Industry Data Security Standard).
|
|
88
|
+
*
|
|
89
|
+
* Use this preset when handling payment card data to help maintain PCI-DSS compliance.
|
|
90
|
+
*
|
|
91
|
+
* **Important**: This preset helps reduce exposure of sensitive payment data in logs and
|
|
92
|
+
* error reports, but is not a substitute for full PCI-DSS compliance measures.
|
|
93
|
+
*
|
|
94
|
+
* @see {@link https://www.pcisecuritystandards.org/|PCI Security Standards Council}
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* import { PCI_FIELDS } from '@heroku/js-blanket/core/presets';
|
|
99
|
+
* import { Scrubber } from '@heroku/js-blanket';
|
|
100
|
+
*
|
|
101
|
+
* const scrubber = new Scrubber({
|
|
102
|
+
* fields: PCI_FIELDS,
|
|
103
|
+
* patterns: [/\d{4}-\d{4}-\d{4}-\d{4}/g] // Also scrub card numbers in text
|
|
104
|
+
* });
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export const PCI_FIELDS = [
|
|
108
|
+
'card_number',
|
|
109
|
+
'cvv',
|
|
110
|
+
'credit_card',
|
|
111
|
+
'payment_method',
|
|
112
|
+
];
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { ScrubConfig, ScrubResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Core Scrubber - Deep object traversal with PII scrubbing
|
|
4
|
+
*
|
|
5
|
+
* A high-performance, immutable scrubbing engine that removes sensitive data from structured objects.
|
|
6
|
+
* Supports three scrubbing modes:
|
|
7
|
+
* - **Field-based**: Scrubs values based on field names (e.g., 'password', 'apiToken')
|
|
8
|
+
* - **Path-based**: Scrubs values at specific paths (e.g., 'user.email', 'request.headers.authorization')
|
|
9
|
+
* - **Pattern-based**: Scrubs content matching regex patterns (e.g., SSN, credit cards)
|
|
10
|
+
*
|
|
11
|
+
* ### Design Principles
|
|
12
|
+
* - **Immutable**: All operations create new objects, never mutate inputs
|
|
13
|
+
* - **Type-safe**: Preserves TypeScript types through generic constraints
|
|
14
|
+
* - **Circular-safe**: Handles circular references without crashing
|
|
15
|
+
* - **Performance**: <1ms p95 for logging, <10ms p95 for exception handling (544k+ ops/sec)
|
|
16
|
+
*
|
|
17
|
+
* ### Pattern Adoption
|
|
18
|
+
* Patterns adopted from `@heroku/oauth-provider-adapters-for-mcp/src/logging/redaction.ts`:
|
|
19
|
+
* - Deep recursive traversal with circular reference detection
|
|
20
|
+
* - Immutable cloning strategy with fallback for complex objects
|
|
21
|
+
* - Nested path resolution (e.g., 'user.profile.email')
|
|
22
|
+
* - General array path handling (e.g., 'users[0].password')
|
|
23
|
+
* - Type-safe generics preserving input types
|
|
24
|
+
*
|
|
25
|
+
* Enhanced with:
|
|
26
|
+
* - Field-based matching supporting both strings and regular expressions
|
|
27
|
+
* - Pattern-based content scrubbing for SSN, credit cards, etc.
|
|
28
|
+
* - Dual scrubbing: both field/path matching AND content pattern replacement
|
|
29
|
+
*
|
|
30
|
+
* @example Basic Usage
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const scrubber = new Scrubber({
|
|
33
|
+
* fields: ['password', 'apiToken'],
|
|
34
|
+
* replacement: '[REDACTED]'
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* const result = scrubber.scrub({
|
|
38
|
+
* user: { name: 'John', password: 'secret123' }
|
|
39
|
+
* });
|
|
40
|
+
* // Result: { user: { name: 'John', password: '[REDACTED]' } }
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example Advanced Usage with All Modes
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const scrubber = new Scrubber({
|
|
46
|
+
* fields: ['password', /api[-_]?key/i], // Regex matches api_key, api-key, apikey
|
|
47
|
+
* paths: ['user.email', 'request.headers.authorization'],
|
|
48
|
+
* patterns: [/\b\d{3}-\d{2}-\d{4}\b/g], // SSN pattern
|
|
49
|
+
* replacement: '[SCRUBBED]'
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* const result = scrubber.scrub({
|
|
53
|
+
* user: { name: 'John', email: 'john@example.com', password: 'secret' },
|
|
54
|
+
* request: { headers: { authorization: 'Bearer token123' } },
|
|
55
|
+
* message: 'User SSN is 123-45-6789'
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare class Scrubber {
|
|
60
|
+
private config;
|
|
61
|
+
private circularRefs;
|
|
62
|
+
private pathSet;
|
|
63
|
+
/**
|
|
64
|
+
* Creates a new Scrubber instance with the specified configuration
|
|
65
|
+
*
|
|
66
|
+
* @param config - Scrubbing configuration
|
|
67
|
+
* @param config.fields - Field names to scrub (strings or regex patterns)
|
|
68
|
+
* @param config.paths - Dot-notation paths to scrub (e.g., 'user.email', 'items[0].password')
|
|
69
|
+
* @param config.patterns - Regex patterns for content scrubbing (must include global flag for multiple matches)
|
|
70
|
+
* @param config.replacement - Replacement string for scrubbed values (default: '[SCRUBBED]')
|
|
71
|
+
* @param config.recursive - Whether to recursively scrub nested objects (default: true)
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const scrubber = new Scrubber({
|
|
76
|
+
* fields: ['password', /api[-_]?key/i],
|
|
77
|
+
* paths: ['user.email'],
|
|
78
|
+
* patterns: [/\b\d{3}-\d{2}-\d{4}\b/g],
|
|
79
|
+
* replacement: '[REDACTED]'
|
|
80
|
+
* });
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
constructor(config: ScrubConfig);
|
|
84
|
+
/**
|
|
85
|
+
* Scrubs sensitive data from an object
|
|
86
|
+
*
|
|
87
|
+
* This is the main entry point for the scrubbing engine. It performs three types of scrubbing:
|
|
88
|
+
* 1. **Field-based**: Replaces values of fields matching configured field names/patterns
|
|
89
|
+
* 2. **Path-based**: Replaces values at specific dot-notation paths
|
|
90
|
+
* 3. **Pattern-based**: Replaces content within string values matching regex patterns
|
|
91
|
+
*
|
|
92
|
+
* The operation is immutable - the input object is not modified. A deep clone is created
|
|
93
|
+
* and scrubbed values are replaced in the clone.
|
|
94
|
+
*
|
|
95
|
+
* ### Performance Characteristics
|
|
96
|
+
* - Small objects (typical logs): ~0.003ms p95
|
|
97
|
+
* - Medium objects (typical errors): ~0.034ms p95
|
|
98
|
+
* - Large objects (10KB+): ~1.2ms p95
|
|
99
|
+
* - Throughput: 54,000+ events/sec
|
|
100
|
+
*
|
|
101
|
+
* @template T - The type of the input object (preserved in output)
|
|
102
|
+
* @param obj - The object to scrub
|
|
103
|
+
* @returns A result object containing the scrubbed data, whether scrubbing occurred, and which paths were scrubbed
|
|
104
|
+
*
|
|
105
|
+
* @example Basic scrubbing
|
|
106
|
+
* ```typescript
|
|
107
|
+
* const scrubber = new Scrubber({ fields: ['password'] });
|
|
108
|
+
* const result = scrubber.scrub({ user: 'john', password: 'secret' });
|
|
109
|
+
* // result.data === { user: 'john', password: '[SCRUBBED]' }
|
|
110
|
+
* // result.scrubbed === true
|
|
111
|
+
* // result.scrubbedPaths === ['password']
|
|
112
|
+
* ```
|
|
113
|
+
*
|
|
114
|
+
* @example Type preservation
|
|
115
|
+
* ```typescript
|
|
116
|
+
* interface User { name: string; email: string; password: string; }
|
|
117
|
+
* const scrubber = new Scrubber({ fields: ['password', 'email'] });
|
|
118
|
+
* const user: User = { name: 'John', email: 'john@example.com', password: 'secret' };
|
|
119
|
+
* const result = scrubber.scrub(user);
|
|
120
|
+
* // result.data is still typed as User
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
scrub<T>(obj: T): ScrubResult<T>;
|
|
124
|
+
private scrubObject;
|
|
125
|
+
private scrubValue;
|
|
126
|
+
/**
|
|
127
|
+
* Check if a field name matches any configured sensitive field patterns
|
|
128
|
+
*/
|
|
129
|
+
private isSensitiveField;
|
|
130
|
+
private deepClone;
|
|
131
|
+
}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Scrubber - Deep object traversal with PII scrubbing
|
|
3
|
+
*
|
|
4
|
+
* A high-performance, immutable scrubbing engine that removes sensitive data from structured objects.
|
|
5
|
+
* Supports three scrubbing modes:
|
|
6
|
+
* - **Field-based**: Scrubs values based on field names (e.g., 'password', 'apiToken')
|
|
7
|
+
* - **Path-based**: Scrubs values at specific paths (e.g., 'user.email', 'request.headers.authorization')
|
|
8
|
+
* - **Pattern-based**: Scrubs content matching regex patterns (e.g., SSN, credit cards)
|
|
9
|
+
*
|
|
10
|
+
* ### Design Principles
|
|
11
|
+
* - **Immutable**: All operations create new objects, never mutate inputs
|
|
12
|
+
* - **Type-safe**: Preserves TypeScript types through generic constraints
|
|
13
|
+
* - **Circular-safe**: Handles circular references without crashing
|
|
14
|
+
* - **Performance**: <1ms p95 for logging, <10ms p95 for exception handling (544k+ ops/sec)
|
|
15
|
+
*
|
|
16
|
+
* ### Pattern Adoption
|
|
17
|
+
* Patterns adopted from `@heroku/oauth-provider-adapters-for-mcp/src/logging/redaction.ts`:
|
|
18
|
+
* - Deep recursive traversal with circular reference detection
|
|
19
|
+
* - Immutable cloning strategy with fallback for complex objects
|
|
20
|
+
* - Nested path resolution (e.g., 'user.profile.email')
|
|
21
|
+
* - General array path handling (e.g., 'users[0].password')
|
|
22
|
+
* - Type-safe generics preserving input types
|
|
23
|
+
*
|
|
24
|
+
* Enhanced with:
|
|
25
|
+
* - Field-based matching supporting both strings and regular expressions
|
|
26
|
+
* - Pattern-based content scrubbing for SSN, credit cards, etc.
|
|
27
|
+
* - Dual scrubbing: both field/path matching AND content pattern replacement
|
|
28
|
+
*
|
|
29
|
+
* @example Basic Usage
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const scrubber = new Scrubber({
|
|
32
|
+
* fields: ['password', 'apiToken'],
|
|
33
|
+
* replacement: '[REDACTED]'
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* const result = scrubber.scrub({
|
|
37
|
+
* user: { name: 'John', password: 'secret123' }
|
|
38
|
+
* });
|
|
39
|
+
* // Result: { user: { name: 'John', password: '[REDACTED]' } }
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @example Advanced Usage with All Modes
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const scrubber = new Scrubber({
|
|
45
|
+
* fields: ['password', /api[-_]?key/i], // Regex matches api_key, api-key, apikey
|
|
46
|
+
* paths: ['user.email', 'request.headers.authorization'],
|
|
47
|
+
* patterns: [/\b\d{3}-\d{2}-\d{4}\b/g], // SSN pattern
|
|
48
|
+
* replacement: '[SCRUBBED]'
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* const result = scrubber.scrub({
|
|
52
|
+
* user: { name: 'John', email: 'john@example.com', password: 'secret' },
|
|
53
|
+
* request: { headers: { authorization: 'Bearer token123' } },
|
|
54
|
+
* message: 'User SSN is 123-45-6789'
|
|
55
|
+
* });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export class Scrubber {
|
|
59
|
+
config;
|
|
60
|
+
circularRefs = new WeakSet();
|
|
61
|
+
pathSet;
|
|
62
|
+
/**
|
|
63
|
+
* Creates a new Scrubber instance with the specified configuration
|
|
64
|
+
*
|
|
65
|
+
* @param config - Scrubbing configuration
|
|
66
|
+
* @param config.fields - Field names to scrub (strings or regex patterns)
|
|
67
|
+
* @param config.paths - Dot-notation paths to scrub (e.g., 'user.email', 'items[0].password')
|
|
68
|
+
* @param config.patterns - Regex patterns for content scrubbing (must include global flag for multiple matches)
|
|
69
|
+
* @param config.replacement - Replacement string for scrubbed values (default: '[SCRUBBED]')
|
|
70
|
+
* @param config.recursive - Whether to recursively scrub nested objects (default: true)
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* const scrubber = new Scrubber({
|
|
75
|
+
* fields: ['password', /api[-_]?key/i],
|
|
76
|
+
* paths: ['user.email'],
|
|
77
|
+
* patterns: [/\b\d{3}-\d{2}-\d{4}\b/g],
|
|
78
|
+
* replacement: '[REDACTED]'
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
constructor(config) {
|
|
83
|
+
this.config = {
|
|
84
|
+
fields: config.fields || [],
|
|
85
|
+
paths: config.paths || [],
|
|
86
|
+
patterns: config.patterns || [],
|
|
87
|
+
replacement: config.replacement || '[SCRUBBED]',
|
|
88
|
+
recursive: config.recursive === undefined ? true : config.recursive,
|
|
89
|
+
};
|
|
90
|
+
// Pre-compute path set for O(1) lookups
|
|
91
|
+
this.pathSet = new Set(this.config.paths);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Scrubs sensitive data from an object
|
|
95
|
+
*
|
|
96
|
+
* This is the main entry point for the scrubbing engine. It performs three types of scrubbing:
|
|
97
|
+
* 1. **Field-based**: Replaces values of fields matching configured field names/patterns
|
|
98
|
+
* 2. **Path-based**: Replaces values at specific dot-notation paths
|
|
99
|
+
* 3. **Pattern-based**: Replaces content within string values matching regex patterns
|
|
100
|
+
*
|
|
101
|
+
* The operation is immutable - the input object is not modified. A deep clone is created
|
|
102
|
+
* and scrubbed values are replaced in the clone.
|
|
103
|
+
*
|
|
104
|
+
* ### Performance Characteristics
|
|
105
|
+
* - Small objects (typical logs): ~0.003ms p95
|
|
106
|
+
* - Medium objects (typical errors): ~0.034ms p95
|
|
107
|
+
* - Large objects (10KB+): ~1.2ms p95
|
|
108
|
+
* - Throughput: 54,000+ events/sec
|
|
109
|
+
*
|
|
110
|
+
* @template T - The type of the input object (preserved in output)
|
|
111
|
+
* @param obj - The object to scrub
|
|
112
|
+
* @returns A result object containing the scrubbed data, whether scrubbing occurred, and which paths were scrubbed
|
|
113
|
+
*
|
|
114
|
+
* @example Basic scrubbing
|
|
115
|
+
* ```typescript
|
|
116
|
+
* const scrubber = new Scrubber({ fields: ['password'] });
|
|
117
|
+
* const result = scrubber.scrub({ user: 'john', password: 'secret' });
|
|
118
|
+
* // result.data === { user: 'john', password: '[SCRUBBED]' }
|
|
119
|
+
* // result.scrubbed === true
|
|
120
|
+
* // result.scrubbedPaths === ['password']
|
|
121
|
+
* ```
|
|
122
|
+
*
|
|
123
|
+
* @example Type preservation
|
|
124
|
+
* ```typescript
|
|
125
|
+
* interface User { name: string; email: string; password: string; }
|
|
126
|
+
* const scrubber = new Scrubber({ fields: ['password', 'email'] });
|
|
127
|
+
* const user: User = { name: 'John', email: 'john@example.com', password: 'secret' };
|
|
128
|
+
* const result = scrubber.scrub(user);
|
|
129
|
+
* // result.data is still typed as User
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
scrub(obj) {
|
|
133
|
+
const scrubbedPaths = [];
|
|
134
|
+
const cloned = this.deepClone(obj);
|
|
135
|
+
// Reset circular refs tracker for each scrub operation
|
|
136
|
+
this.circularRefs = new WeakSet();
|
|
137
|
+
const scrubbed = this.scrubObject(cloned, '', scrubbedPaths);
|
|
138
|
+
return {
|
|
139
|
+
data: scrubbed,
|
|
140
|
+
scrubbed: scrubbedPaths.length > 0,
|
|
141
|
+
scrubbedPaths,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
scrubObject(obj, path, paths) {
|
|
145
|
+
// Handle circular references
|
|
146
|
+
if (obj && typeof obj === 'object') {
|
|
147
|
+
if (this.circularRefs.has(obj)) {
|
|
148
|
+
return '[Circular Reference]';
|
|
149
|
+
}
|
|
150
|
+
this.circularRefs.add(obj);
|
|
151
|
+
}
|
|
152
|
+
// Handle primitives
|
|
153
|
+
if (obj === null || typeof obj !== 'object') {
|
|
154
|
+
return this.scrubValue(obj, path, paths);
|
|
155
|
+
}
|
|
156
|
+
// Handle arrays
|
|
157
|
+
if (Array.isArray(obj)) {
|
|
158
|
+
return obj.map((item, index) => {
|
|
159
|
+
const indexStr = index.toString();
|
|
160
|
+
const arrayPath = path ? `${path}[${index}]` : indexStr;
|
|
161
|
+
// Check if this specific array index path should be scrubbed
|
|
162
|
+
if (this.pathSet.has(indexStr) || this.pathSet.has(arrayPath)) {
|
|
163
|
+
paths.push(arrayPath);
|
|
164
|
+
return this.config.replacement;
|
|
165
|
+
}
|
|
166
|
+
// Recursively scrub array items
|
|
167
|
+
return this.scrubObject(item, arrayPath, paths);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
// Handle objects - create new object (immutable approach)
|
|
171
|
+
const result = {};
|
|
172
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
173
|
+
const keyPath = path ? `${path}.${key}` : key;
|
|
174
|
+
// Check if this specific path should be scrubbed
|
|
175
|
+
if (this.pathSet.has(key) || this.pathSet.has(keyPath)) {
|
|
176
|
+
result[key] = this.config.replacement;
|
|
177
|
+
paths.push(keyPath);
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
// Check if key matches sensitive field pattern
|
|
181
|
+
if (this.isSensitiveField(key)) {
|
|
182
|
+
result[key] = this.config.replacement;
|
|
183
|
+
paths.push(keyPath);
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
// Recursively scrub value
|
|
187
|
+
result[key] = this.config.recursive
|
|
188
|
+
? this.scrubObject(value, keyPath, paths)
|
|
189
|
+
: this.scrubValue(value, keyPath, paths);
|
|
190
|
+
}
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
scrubValue(value, path, paths) {
|
|
194
|
+
if (typeof value !== 'string') {
|
|
195
|
+
return value;
|
|
196
|
+
}
|
|
197
|
+
let scrubbed = value;
|
|
198
|
+
let didScrub = false;
|
|
199
|
+
// Check against patterns (SSN, credit cards, etc.)
|
|
200
|
+
for (const pattern of this.config.patterns) {
|
|
201
|
+
if (pattern.test(scrubbed)) {
|
|
202
|
+
scrubbed = scrubbed.replace(pattern, this.config.replacement);
|
|
203
|
+
didScrub = true;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (didScrub) {
|
|
207
|
+
paths.push(path);
|
|
208
|
+
}
|
|
209
|
+
return scrubbed;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Check if a field name matches any configured sensitive field patterns
|
|
213
|
+
*/
|
|
214
|
+
isSensitiveField(key) {
|
|
215
|
+
return this.config.fields.some((field) => {
|
|
216
|
+
if (field instanceof RegExp) {
|
|
217
|
+
return field.test(key);
|
|
218
|
+
}
|
|
219
|
+
return key.toLowerCase().includes(field.toLowerCase());
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
deepClone(obj) {
|
|
223
|
+
try {
|
|
224
|
+
// Fast path for JSON-serializable objects
|
|
225
|
+
return JSON.parse(JSON.stringify(obj));
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
// Fallback for objects with circular references
|
|
229
|
+
const seen = new WeakMap();
|
|
230
|
+
// eslint-disable-next-line no-inner-declarations
|
|
231
|
+
function clone(value) {
|
|
232
|
+
if (value === null || typeof value !== 'object') {
|
|
233
|
+
return value;
|
|
234
|
+
}
|
|
235
|
+
if (seen.has(value)) {
|
|
236
|
+
return seen.get(value);
|
|
237
|
+
}
|
|
238
|
+
if (Array.isArray(value)) {
|
|
239
|
+
const arr = [];
|
|
240
|
+
seen.set(value, arr);
|
|
241
|
+
value.forEach((item, i) => {
|
|
242
|
+
arr[i] = clone(item);
|
|
243
|
+
});
|
|
244
|
+
return arr;
|
|
245
|
+
}
|
|
246
|
+
const obj = {};
|
|
247
|
+
seen.set(value, obj);
|
|
248
|
+
Object.keys(value).forEach(key => {
|
|
249
|
+
obj[key] = clone(value[key]);
|
|
250
|
+
});
|
|
251
|
+
return obj;
|
|
252
|
+
}
|
|
253
|
+
return clone(obj);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|