@automattic/vip 4.1.6 → 4.1.8
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/assets/dev-env.lando.template.yml.ejs +1 -1
- package/dist/bin/vip-app-deploy-token-generate.js +110 -78
- package/dist/bin/vip-app-deploy-token.js +24 -16
- package/dist/bin/vip-app-deploy-validate.js +45 -41
- package/dist/bin/vip-app-deploy.js +222 -215
- package/dist/bin/vip-app-list.js +59 -43
- package/dist/bin/vip-app.js +97 -66
- package/dist/bin/vip-backup-db.js +36 -29
- package/dist/bin/vip-backup.js +16 -9
- package/dist/bin/vip-cache-purge-url.js +93 -55
- package/dist/bin/vip-cache.js +23 -14
- package/dist/bin/vip-config-envvar-delete.js +74 -73
- package/dist/bin/vip-config-envvar-get-all.js +68 -68
- package/dist/bin/vip-config-envvar-get.js +46 -46
- package/dist/bin/vip-config-envvar-list.js +54 -57
- package/dist/bin/vip-config-envvar-set.js +102 -96
- package/dist/bin/vip-config-envvar.js +38 -24
- package/dist/bin/vip-config-software-get.js +88 -75
- package/dist/bin/vip-config-software-update.js +116 -120
- package/dist/bin/vip-config-software.js +31 -21
- package/dist/bin/vip-config.js +25 -17
- package/dist/bin/vip-db-phpmyadmin.js +40 -39
- package/dist/bin/vip-db.js +13 -12
- package/dist/bin/vip-defensive-mode-configure.js +197 -197
- package/dist/bin/vip-defensive-mode-disable.js +43 -35
- package/dist/bin/vip-defensive-mode-enable.js +47 -38
- package/dist/bin/vip-defensive-mode.js +28 -17
- package/dist/bin/vip-dev-env-create.js +147 -104
- package/dist/bin/vip-dev-env-destroy.js +48 -39
- package/dist/bin/vip-dev-env-envvar-delete.js +60 -49
- package/dist/bin/vip-dev-env-envvar-get-all.js +52 -45
- package/dist/bin/vip-dev-env-envvar-get.js +48 -37
- package/dist/bin/vip-dev-env-envvar-list.js +48 -41
- package/dist/bin/vip-dev-env-envvar-set.js +83 -70
- package/dist/bin/vip-dev-env-envvar.js +38 -23
- package/dist/bin/vip-dev-env-exec.js +81 -74
- package/dist/bin/vip-dev-env-import-media.js +34 -26
- package/dist/bin/vip-dev-env-import-sql.js +65 -51
- package/dist/bin/vip-dev-env-import.js +23 -14
- package/dist/bin/vip-dev-env-info.js +59 -50
- package/dist/bin/vip-dev-env-list.js +34 -31
- package/dist/bin/vip-dev-env-logs.js +59 -49
- package/dist/bin/vip-dev-env-purge.js +71 -63
- package/dist/bin/vip-dev-env-shell.js +82 -71
- package/dist/bin/vip-dev-env-start.js +77 -65
- package/dist/bin/vip-dev-env-stop.js +80 -74
- package/dist/bin/vip-dev-env-sync-sql.js +80 -72
- package/dist/bin/vip-dev-env-sync.js +18 -11
- package/dist/bin/vip-dev-env-update.js +93 -84
- package/dist/bin/vip-dev-env.js +25 -8
- package/dist/bin/vip-edge-workers-build.js +82 -54
- package/dist/bin/vip-edge-workers-delete.js +84 -52
- package/dist/bin/vip-edge-workers-deploy.js +186 -126
- package/dist/bin/vip-edge-workers-disable.js +75 -44
- package/dist/bin/vip-edge-workers-enable.js +86 -54
- package/dist/bin/vip-edge-workers-get.js +108 -88
- package/dist/bin/vip-edge-workers-init.js +83 -53
- package/dist/bin/vip-edge-workers-list.js +89 -54
- package/dist/bin/vip-edge-workers-new.js +98 -69
- package/dist/bin/vip-edge-workers-validate.js +123 -82
- package/dist/bin/vip-edge-workers.js +19 -6
- package/dist/bin/vip-export-sql.js +75 -69
- package/dist/bin/vip-export.js +12 -7
- package/dist/bin/vip-import-media-abort.js +99 -73
- package/dist/bin/vip-import-media-status.js +83 -51
- package/dist/bin/vip-import-media.js +165 -166
- package/dist/bin/vip-import-sql-status.js +75 -45
- package/dist/bin/vip-import-sql.js +536 -596
- package/dist/bin/vip-import-validate-files.js +122 -141
- package/dist/bin/vip-import-validate-sql.js +52 -16
- package/dist/bin/vip-import.js +16 -7
- package/dist/bin/vip-logout.js +17 -13
- package/dist/bin/vip-logs.js +209 -183
- package/dist/bin/vip-search-replace.js +85 -53
- package/dist/bin/vip-slowlogs.js +168 -147
- package/dist/bin/vip-sync.js +163 -133
- package/dist/bin/vip-whoami.js +71 -35
- package/dist/bin/vip-wp.js +506 -549
- package/dist/bin/vip.js +161 -116
- package/dist/commands/backup-db.js +183 -149
- package/dist/commands/dev-env-import-sql.js +162 -117
- package/dist/commands/dev-env-sync-sql.js +372 -330
- package/dist/commands/export-sql.js +441 -425
- package/dist/commands/phpmyadmin.js +232 -212
- package/dist/commands/wp-ssh.js +218 -187
- package/dist/lib/analytics/clients/tracks.js +84 -91
- package/dist/lib/analytics/index.js +27 -27
- package/dist/lib/api/app.js +37 -36
- package/dist/lib/api/cache-purge.js +17 -20
- package/dist/lib/api/constants.js +5 -6
- package/dist/lib/api/edge-workers.js +84 -135
- package/dist/lib/api/error-debug.js +10 -13
- package/dist/lib/api/feature-flags.js +16 -17
- package/dist/lib/api/http.js +47 -48
- package/dist/lib/api/user.js +17 -18
- package/dist/lib/api.js +107 -116
- package/dist/lib/app-logs/app-logs.js +24 -25
- package/dist/lib/app-slowlogs/app-slowlogs.js +23 -24
- package/dist/lib/app-slowlogs/types.js +2 -1
- package/dist/lib/app.js +6 -8
- package/dist/lib/backup-storage-availability/backup-storage-availability.js +119 -119
- package/dist/lib/backup-storage-availability/docker-machine-not-found-error.js +5 -6
- package/dist/lib/cli/apiConfig.js +71 -41
- package/dist/lib/cli/command.js +1120 -873
- package/dist/lib/cli/config.js +29 -29
- package/dist/lib/cli/envAlias.js +35 -50
- package/dist/lib/cli/exit.js +19 -19
- package/dist/lib/cli/format.js +172 -172
- package/dist/lib/cli/progress.js +193 -236
- package/dist/lib/cli/prompt.js +14 -15
- package/dist/lib/cli/runtime-mode.js +5 -6
- package/dist/lib/client-file-uploader.js +489 -641
- package/dist/lib/config/software.js +206 -212
- package/dist/lib/constants/dev-environment.js +40 -37
- package/dist/lib/constants/file-size.js +6 -7
- package/dist/lib/constants/vipgo.js +24 -12
- package/dist/lib/custom-deploy/custom-deploy.js +138 -120
- package/dist/lib/database.js +88 -85
- package/dist/lib/defensive-mode/api.js +41 -46
- package/dist/lib/defensive-mode/cli-helpers.js +40 -40
- package/dist/lib/dev-environment/dev-environment-cli.js +776 -735
- package/dist/lib/dev-environment/dev-environment-configuration-file.js +224 -191
- package/dist/lib/dev-environment/dev-environment-core.js +697 -732
- package/dist/lib/dev-environment/dev-environment-database.js +57 -41
- package/dist/lib/dev-environment/dev-environment-lando.js +734 -666
- package/dist/lib/dev-environment/docker-utils.js +96 -90
- package/dist/lib/dev-environment/env-vars.js +61 -59
- package/dist/lib/dev-environment/lando-loader.js +6 -7
- package/dist/lib/dev-environment/types.js +2 -1
- package/dist/lib/edge-workers/confirmation.js +42 -36
- package/dist/lib/edge-workers/deployment.js +150 -159
- package/dist/lib/edge-workers/index.js +68 -85
- package/dist/lib/edge-workers/location.js +26 -26
- package/dist/lib/edge-workers/output.js +14 -15
- package/dist/lib/edge-workers/project.js +123 -132
- package/dist/lib/edge-workers/toolchains/assemblyscript/constants.js +6 -8
- package/dist/lib/edge-workers/toolchains/assemblyscript/index.js +100 -101
- package/dist/lib/edge-workers/toolchains/assemblyscript/templates.js +31 -33
- package/dist/lib/edge-workers/toolchains/index.js +15 -15
- package/dist/lib/edge-workers/types.js +10 -38
- package/dist/lib/edge-workers/validation.js +161 -150
- package/dist/lib/env.js +16 -17
- package/dist/lib/envvar/api-delete.js +16 -18
- package/dist/lib/envvar/api-get-all.js +15 -19
- package/dist/lib/envvar/api-get.js +8 -9
- package/dist/lib/envvar/api-list.js +16 -21
- package/dist/lib/envvar/api-set.js +20 -19
- package/dist/lib/envvar/api.js +34 -29
- package/dist/lib/envvar/input.js +29 -34
- package/dist/lib/envvar/logging.js +9 -11
- package/dist/lib/envvar/read-file.js +6 -7
- package/dist/lib/http/download-file.js +76 -44
- package/dist/lib/http/proxy-agent.js +37 -40
- package/dist/lib/http/proxy-dispatcher.js +69 -71
- package/dist/lib/keychain/insecure.js +40 -36
- package/dist/lib/keychain/keychain.js +2 -1
- package/dist/lib/keychain/secure.js +16 -15
- package/dist/lib/keychain.js +22 -22
- package/dist/lib/live-backup-copy.js +117 -115
- package/dist/lib/logout.js +17 -19
- package/dist/lib/media-import/config.js +15 -14
- package/dist/lib/media-import/media-file-import.js +9 -13
- package/dist/lib/media-import/progress.js +53 -65
- package/dist/lib/media-import/status.js +241 -256
- package/dist/lib/media-import/utils.js +15 -15
- package/dist/lib/node-version-check.js +16 -16
- package/dist/lib/promise.js +16 -17
- package/dist/lib/read-file.js +48 -16
- package/dist/lib/rechallenge/client.js +37 -43
- package/dist/lib/rechallenge/errors.js +38 -37
- package/dist/lib/rechallenge/flow.js +148 -123
- package/dist/lib/rechallenge/index.js +23 -24
- package/dist/lib/rechallenge/link.js +153 -151
- package/dist/lib/rechallenge/open-browser.js +14 -17
- package/dist/lib/rechallenge/token-cache.js +83 -86
- package/dist/lib/rechallenge/types.js +5 -14
- package/dist/lib/retry.js +93 -129
- package/dist/lib/search-and-replace.js +164 -148
- package/dist/lib/site-import/db-file-import.js +12 -16
- package/dist/lib/site-import/status.js +291 -291
- package/dist/lib/token.js +86 -87
- package/dist/lib/tracker.js +51 -62
- package/dist/lib/types/graphql/rate-limit-exceeded-error.js +2 -1
- package/dist/lib/types.js +2 -1
- package/dist/lib/user-error.js +6 -8
- package/dist/lib/utils.js +81 -87
- package/dist/lib/validations/custom-deploy.js +218 -186
- package/dist/lib/validations/is-multi-site-sql-dump.js +6 -6
- package/dist/lib/validations/is-multi-site.js +83 -50
- package/dist/lib/validations/is-multisite-domain-mapped.js +92 -62
- package/dist/lib/validations/line-by-line.js +78 -46
- package/dist/lib/validations/site-type.js +59 -63
- package/dist/lib/validations/sql-insert-parser.js +415 -0
- package/dist/lib/validations/sql.js +551 -431
- package/dist/lib/validations/utils.js +27 -29
- package/dist/lib/vip-import-validate-files.js +481 -490
- package/dist/lib/wp/helpers.js +41 -45
- package/dist/lib/wp/readline.js +21 -57
- package/dist/lib/xdg-data.js +11 -12
- package/helpers/mark-cli-executable.js +9 -0
- package/node_modules/@apollo/client/CHANGELOG.md +10 -0
- package/node_modules/@apollo/client/__cjs/cache/inmemory/helpers.cjs +5 -0
- package/node_modules/@apollo/client/__cjs/cache/inmemory/helpers.cjs.map +1 -1
- package/node_modules/@apollo/client/__cjs/cache/inmemory/inMemoryCache.cjs +2 -1
- package/node_modules/@apollo/client/__cjs/cache/inmemory/inMemoryCache.cjs.map +1 -1
- package/node_modules/@apollo/client/__cjs/cache/inmemory/key-extractor.cjs +14 -2
- package/node_modules/@apollo/client/__cjs/cache/inmemory/key-extractor.cjs.map +1 -1
- package/node_modules/@apollo/client/__cjs/cache/inmemory/policies.cjs +16 -0
- package/node_modules/@apollo/client/__cjs/cache/inmemory/policies.cjs.map +1 -1
- package/node_modules/@apollo/client/__cjs/cache/inmemory/policies.d.cts +2 -0
- package/node_modules/@apollo/client/__cjs/cache/inmemory/writeToStore.cjs +3 -2
- package/node_modules/@apollo/client/__cjs/cache/inmemory/writeToStore.cjs.map +1 -1
- package/node_modules/@apollo/client/__cjs/core/QueryInfo.cjs +9 -1
- package/node_modules/@apollo/client/__cjs/core/QueryInfo.cjs.map +1 -1
- package/node_modules/@apollo/client/__cjs/core/QueryInfo.d.cts +1 -1
- package/node_modules/@apollo/client/__cjs/core/QueryManager.cjs +10 -3
- package/node_modules/@apollo/client/__cjs/core/QueryManager.cjs.map +1 -1
- package/node_modules/@apollo/client/__cjs/react/hooks/useFragment.cjs.map +1 -1
- package/node_modules/@apollo/client/__cjs/react/hooks/useFragment.d.cts +42 -43
- package/node_modules/@apollo/client/__cjs/version.cjs +1 -1
- package/node_modules/@apollo/client/cache/inmemory/helpers.js +5 -0
- package/node_modules/@apollo/client/cache/inmemory/helpers.js.map +1 -1
- package/node_modules/@apollo/client/cache/inmemory/inMemoryCache.js +2 -1
- package/node_modules/@apollo/client/cache/inmemory/inMemoryCache.js.map +1 -1
- package/node_modules/@apollo/client/cache/inmemory/key-extractor.js +14 -2
- package/node_modules/@apollo/client/cache/inmemory/key-extractor.js.map +1 -1
- package/node_modules/@apollo/client/cache/inmemory/policies.d.ts +2 -0
- package/node_modules/@apollo/client/cache/inmemory/policies.js +17 -1
- package/node_modules/@apollo/client/cache/inmemory/policies.js.map +1 -1
- package/node_modules/@apollo/client/cache/inmemory/writeToStore.js +3 -2
- package/node_modules/@apollo/client/cache/inmemory/writeToStore.js.map +1 -1
- package/node_modules/@apollo/client/core/QueryInfo.d.ts +1 -1
- package/node_modules/@apollo/client/core/QueryInfo.js +10 -2
- package/node_modules/@apollo/client/core/QueryInfo.js.map +1 -1
- package/node_modules/@apollo/client/core/QueryManager.js +10 -3
- package/node_modules/@apollo/client/core/QueryManager.js.map +1 -1
- package/node_modules/@apollo/client/package.json +1 -1
- package/node_modules/@apollo/client/react/hooks/useFragment.d.ts +42 -43
- package/node_modules/@apollo/client/react/hooks/useFragment.js.map +1 -1
- package/node_modules/@apollo/client/react/hooks-compiled/useFragment.d.ts +42 -43
- package/node_modules/@apollo/client/react/hooks-compiled/useFragment.js.map +1 -1
- package/node_modules/@apollo/client/version.js +1 -1
- package/node_modules/@automattic/vip-search-replace/README.md +6 -1
- package/node_modules/@automattic/vip-search-replace/lib/index.js +46 -14
- package/node_modules/@automattic/vip-search-replace/package.json +1 -1
- package/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/node/package.json +2 -2
- package/node_modules/@types/node/zlib.d.ts +752 -0
- package/node_modules/check-disk-space/README.md +92 -32
- package/node_modules/check-disk-space/dist/check-disk-space.d.mts +58 -0
- package/node_modules/check-disk-space/dist/check-disk-space.mjs +170 -190
- package/node_modules/check-disk-space/package.json +43 -71
- package/node_modules/cpu-features/build/Makefile +2 -2
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/filesystem.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_linux_or_android.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_macos_or_iphone.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_windows.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_arm_linux_or_android.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_mips_linux_or_android.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_ppc_linux.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_freebsd.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_linux_or_android.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_macos.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_windows.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/stack_line_reader.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/string_view.o.d +1 -1
- package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpufeatures/src/binding.o.d +157 -145
- package/node_modules/cpu-features/build/Release/cpufeatures.node +0 -0
- package/node_modules/cpu-features/build/Release/obj.target/cpufeatures/src/binding.o +0 -0
- package/node_modules/cpu-features/build/Release/obj.target/cpufeatures.node +0 -0
- package/node_modules/cpu-features/build/config.gypi +100 -31
- package/node_modules/cpu-features/build/cpufeatures.target.mk +14 -14
- package/node_modules/cpu-features/build/deps/cpu_features/cpu_features.target.mk +14 -14
- package/node_modules/ssh2/lib/protocol/crypto/build/Makefile +2 -2
- package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto/src/binding.o.d.raw +136 -0
- package/node_modules/ssh2/lib/protocol/crypto/build/sshcrypto.target.mk +14 -14
- package/node_modules/undici/docs/docs/api/Interceptors.md +15 -2
- package/node_modules/undici/lib/dispatcher/client-h2.js +78 -3
- package/node_modules/undici/lib/dispatcher/pool-base.js +20 -3
- package/node_modules/undici/package.json +3 -3
- package/node_modules/undici/types/api.d.ts +1 -1
- package/node_modules/undici/types/utility.d.ts +4 -4
- package/package.json +44 -13
- package/dist/lib/analytics/clients/client.js +0 -1
- package/dist/lib/analytics/clients/pendo.js +0 -78
- package/helpers/check-version.js +0 -16
- package/node_modules/check-disk-space/dist/check-disk-space.cjs +0 -210
- package/node_modules/check-disk-space/dist/check-disk-space.d.ts +0 -53
- package/node_modules/fetch-retry/.eslintignore +0 -1
- package/node_modules/fetch-retry/.eslintrc.yml +0 -20
- package/node_modules/fetch-retry/.github/workflows/node.js.yml +0 -32
- package/node_modules/fetch-retry/.husky/pre-commit +0 -6
- package/node_modules/fetch-retry/.nycrc.json +0 -24
- package/node_modules/fetch-retry/.travis.yml +0 -3
- package/node_modules/fetch-retry/LICENSE +0 -21
- package/node_modules/fetch-retry/README.md +0 -128
- package/node_modules/fetch-retry/dist/fetch-retry.umd.js +0 -151
- package/node_modules/fetch-retry/index.d.ts +0 -29
- package/node_modules/fetch-retry/index.js +0 -143
- package/node_modules/fetch-retry/package.json +0 -41
- package/node_modules/fetch-retry/rollup.config.js +0 -12
- package/node_modules/fetch-retry/test/.eslintrc.yml +0 -7
- package/node_modules/fetch-retry/test/integration/index.js +0 -212
- package/node_modules/fetch-retry/test/integration/mock-api/index.js +0 -42
- package/node_modules/fetch-retry/test/unit/index.js +0 -1169
- package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto/src/binding.o.d +0 -265
- package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto.node.d +0 -1
- package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/sshcrypto.node.d +0 -1
- package/node_modules/ssh2/lib/protocol/crypto/build/Release/obj.target/sshcrypto/src/binding.o +0 -0
- package/node_modules/ssh2/lib/protocol/crypto/build/Release/obj.target/sshcrypto.node +0 -0
- package/node_modules/ssh2/lib/protocol/crypto/build/Release/sshcrypto.node +0 -0
package/dist/commands/wp-ssh.js
CHANGED
|
@@ -1,30 +1,61 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.WPCliCommandOverSSH = exports.APIError = exports.NonZeroExitCodeError = void 0;
|
|
15
40
|
/**
|
|
16
41
|
* External dependencies
|
|
17
42
|
*/
|
|
18
|
-
|
|
43
|
+
const core_1 = require("@apollo/client/core");
|
|
44
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
45
|
+
const debug_1 = __importDefault(require("debug"));
|
|
46
|
+
const graphql_tag_1 = __importDefault(require("graphql-tag"));
|
|
47
|
+
const ssh2 = __importStar(require("ssh2"));
|
|
19
48
|
/**
|
|
20
49
|
* Internal dependencies
|
|
21
50
|
*/
|
|
22
|
-
|
|
23
|
-
const
|
|
51
|
+
const package_json_1 = __importDefault(require("../../package.json"));
|
|
52
|
+
const api_1 = __importDefault(require("../lib/api"));
|
|
53
|
+
const tracker_1 = require("../lib/tracker");
|
|
54
|
+
const debug = (0, debug_1.default)('@automattic/vip:wp/ssh');
|
|
24
55
|
const NON_TTY_COLUMNS = 100;
|
|
25
56
|
const NON_TTY_ROWS = 15;
|
|
26
57
|
const SSH_HANDSHAKE_TIMEOUT_MS = 5000;
|
|
27
|
-
const TRIGGER_WP_CLI_COMMAND_MUTATION = (0,
|
|
58
|
+
const TRIGGER_WP_CLI_COMMAND_MUTATION = (0, graphql_tag_1.default) `
|
|
28
59
|
mutation TriggerWPCLICommandMutation($input: AppEnvironmentTriggerWPCLICommandInput) {
|
|
29
60
|
triggerWPCLICommandOnAppEnvironment(input: $input) {
|
|
30
61
|
inputToken
|
|
@@ -42,185 +73,185 @@ const TRIGGER_WP_CLI_COMMAND_MUTATION = (0, _graphqlTag.default)`
|
|
|
42
73
|
}
|
|
43
74
|
`;
|
|
44
75
|
class NonZeroExitCodeError extends Error {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
76
|
+
guid;
|
|
77
|
+
exitCode;
|
|
78
|
+
constructor(message, guid, exitCode) {
|
|
79
|
+
super(message);
|
|
80
|
+
this.guid = guid;
|
|
81
|
+
this.exitCode = exitCode;
|
|
82
|
+
}
|
|
52
83
|
}
|
|
53
84
|
exports.NonZeroExitCodeError = NonZeroExitCodeError;
|
|
54
|
-
class APIError extends Error {
|
|
85
|
+
class APIError extends Error {
|
|
86
|
+
}
|
|
55
87
|
exports.APIError = APIError;
|
|
56
88
|
class WPCliCommandOverSSH {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
async run(command, extraTrackingInfo = {}) {
|
|
68
|
-
if (!this.app.id || !this.env.id) {
|
|
69
|
-
await this.track('error', {
|
|
70
|
-
error: 'no_app_env_id',
|
|
71
|
-
message: 'No app or env ID provided',
|
|
72
|
-
...extraTrackingInfo
|
|
73
|
-
});
|
|
74
|
-
throw new Error('No app ID or environment ID provided');
|
|
75
|
-
}
|
|
76
|
-
debug("Requesting SSH authentication for command '%s'", command);
|
|
77
|
-
try {
|
|
78
|
-
const sshAuth = await this.getSSHAuthForCommand(command, extraTrackingInfo);
|
|
79
|
-
const data = sshAuth.data?.triggerWPCLICommandOnAppEnvironment;
|
|
80
|
-
if (!data) {
|
|
81
|
-
await this.track('error', {
|
|
82
|
-
error: 'no_ssh_auth_data',
|
|
83
|
-
message: 'No SSH authentication data received',
|
|
84
|
-
...extraTrackingInfo
|
|
89
|
+
app;
|
|
90
|
+
env;
|
|
91
|
+
track;
|
|
92
|
+
constructor(app, env) {
|
|
93
|
+
this.app = app;
|
|
94
|
+
this.env = env;
|
|
95
|
+
this.track = (0, tracker_1.makeCommandTracker)('wp', {
|
|
96
|
+
app: app.id,
|
|
97
|
+
env: env.id,
|
|
98
|
+
execution_type: 'ssh',
|
|
85
99
|
});
|
|
86
|
-
throw new Error('WP-CLI SSH Authentication failed');
|
|
87
|
-
}
|
|
88
|
-
debug('Connecting to SSH', {
|
|
89
|
-
host: data.sshAuthentication.host,
|
|
90
|
-
port: data.sshAuthentication.port,
|
|
91
|
-
username: data.sshAuthentication.username,
|
|
92
|
-
guid: data.command.guid
|
|
93
|
-
});
|
|
94
|
-
await this.executeCommandOverSSH({
|
|
95
|
-
host: data.sshAuthentication.host,
|
|
96
|
-
port: data.sshAuthentication.port,
|
|
97
|
-
username: data.sshAuthentication.username,
|
|
98
|
-
privateKey: data.sshAuthentication.privateKey,
|
|
99
|
-
passphrase: data.sshAuthentication.passphrase,
|
|
100
|
-
guid: data.command.guid,
|
|
101
|
-
inputToken: data.inputToken
|
|
102
|
-
});
|
|
103
|
-
await this.track('success', {
|
|
104
|
-
guid: data?.command.guid
|
|
105
|
-
});
|
|
106
|
-
} catch (err) {
|
|
107
|
-
if (err instanceof NonZeroExitCodeError) {
|
|
108
|
-
await this.track('error', {
|
|
109
|
-
guid: err.guid,
|
|
110
|
-
error: 'non_zero_exit_code',
|
|
111
|
-
message: `Command failed with exit code ${err.exitCode}`,
|
|
112
|
-
...extraTrackingInfo
|
|
113
|
-
});
|
|
114
|
-
process.exit(err.exitCode);
|
|
115
|
-
} else if (err instanceof APIError) {
|
|
116
|
-
console.error(`${_chalk.default.red('Error:')} ${err.message}`);
|
|
117
|
-
await this.track('error', {
|
|
118
|
-
error: 'api_error',
|
|
119
|
-
message: `API Error: ${err.message}`,
|
|
120
|
-
...extraTrackingInfo
|
|
121
|
-
});
|
|
122
|
-
process.exit(1);
|
|
123
|
-
}
|
|
124
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
125
|
-
console.error(`${_chalk.default.red('Error:')} ${message}`);
|
|
126
|
-
await this.track('error', {
|
|
127
|
-
error: 'ssh_command_failed',
|
|
128
|
-
message: `Error executing command over SSH: ${message}`,
|
|
129
|
-
...extraTrackingInfo
|
|
130
|
-
});
|
|
131
|
-
process.exit(1);
|
|
132
100
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
stream.on('exit', exitCode => {
|
|
156
|
-
if (exitCode !== 0) {
|
|
157
|
-
reject(new NonZeroExitCodeError(`Command failed`, guid, exitCode));
|
|
101
|
+
async run(command, extraTrackingInfo = {}) {
|
|
102
|
+
if (!this.app.id || !this.env.id) {
|
|
103
|
+
await this.track('error', {
|
|
104
|
+
error: 'no_app_env_id',
|
|
105
|
+
message: 'No app or env ID provided',
|
|
106
|
+
...extraTrackingInfo,
|
|
107
|
+
});
|
|
108
|
+
throw new Error('No app ID or environment ID provided');
|
|
109
|
+
}
|
|
110
|
+
debug("Requesting SSH authentication for command '%s'", command);
|
|
111
|
+
try {
|
|
112
|
+
const sshAuth = await this.getSSHAuthForCommand(command, extraTrackingInfo);
|
|
113
|
+
const data = sshAuth.data?.triggerWPCLICommandOnAppEnvironment;
|
|
114
|
+
if (!data) {
|
|
115
|
+
await this.track('error', {
|
|
116
|
+
error: 'no_ssh_auth_data',
|
|
117
|
+
message: 'No SSH authentication data received',
|
|
118
|
+
...extraTrackingInfo,
|
|
119
|
+
});
|
|
120
|
+
throw new Error('WP-CLI SSH Authentication failed');
|
|
158
121
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
122
|
+
debug('Connecting to SSH', {
|
|
123
|
+
host: data.sshAuthentication.host,
|
|
124
|
+
port: data.sshAuthentication.port,
|
|
125
|
+
username: data.sshAuthentication.username,
|
|
126
|
+
guid: data.command.guid,
|
|
127
|
+
});
|
|
128
|
+
await this.executeCommandOverSSH({
|
|
129
|
+
host: data.sshAuthentication.host,
|
|
130
|
+
port: data.sshAuthentication.port,
|
|
131
|
+
username: data.sshAuthentication.username,
|
|
132
|
+
privateKey: data.sshAuthentication.privateKey,
|
|
133
|
+
passphrase: data.sshAuthentication.passphrase,
|
|
134
|
+
guid: data.command.guid,
|
|
135
|
+
inputToken: data.inputToken,
|
|
136
|
+
});
|
|
137
|
+
await this.track('success', { guid: data?.command.guid });
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
if (err instanceof NonZeroExitCodeError) {
|
|
141
|
+
await this.track('error', {
|
|
142
|
+
guid: err.guid,
|
|
143
|
+
error: 'non_zero_exit_code',
|
|
144
|
+
message: `Command failed with exit code ${err.exitCode}`,
|
|
145
|
+
...extraTrackingInfo,
|
|
146
|
+
});
|
|
147
|
+
process.exit(err.exitCode);
|
|
148
|
+
}
|
|
149
|
+
else if (err instanceof APIError) {
|
|
150
|
+
console.error(`${chalk_1.default.red('Error:')} ${err.message}`);
|
|
151
|
+
await this.track('error', {
|
|
152
|
+
error: 'api_error',
|
|
153
|
+
message: `API Error: ${err.message}`,
|
|
154
|
+
...extraTrackingInfo,
|
|
155
|
+
});
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
159
|
+
console.error(`${chalk_1.default.red('Error:')} ${message}`);
|
|
160
|
+
await this.track('error', {
|
|
161
|
+
error: 'ssh_command_failed',
|
|
162
|
+
message: `Error executing command over SSH: ${message}`,
|
|
163
|
+
...extraTrackingInfo,
|
|
164
|
+
});
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async executeCommandOverSSH({ host, port, username, privateKey, passphrase, guid, inputToken, }) {
|
|
169
|
+
return new Promise((resolve, reject) => {
|
|
170
|
+
const conn = new ssh2.Client();
|
|
171
|
+
const columns = process.stdout.columns || NON_TTY_COLUMNS;
|
|
172
|
+
const rows = process.stdout.rows || NON_TTY_ROWS;
|
|
173
|
+
const isTTY = process.stdout.isTTY ? 'true' : 'false';
|
|
174
|
+
let commandStarted = false;
|
|
175
|
+
conn
|
|
176
|
+
.on('ready', () => {
|
|
177
|
+
conn.exec(`GUID=${guid} INPUT_TOKEN=${inputToken} VERSION=${package_json_1.default.version} ROWS=${rows} COLUMNS=${columns} TTY=${isTTY}`, (err, stream) => {
|
|
178
|
+
if (err) {
|
|
179
|
+
reject(err);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
stream.on('exit', (exitCode) => {
|
|
183
|
+
if (exitCode !== 0) {
|
|
184
|
+
reject(new NonZeroExitCodeError(`Command failed`, guid, exitCode));
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
commandStarted = true;
|
|
188
|
+
const handleSIGINT = () => {
|
|
189
|
+
process.removeListener('SIGINT', handleSIGINT);
|
|
190
|
+
console.log('SIGINT received. Canceling command...');
|
|
191
|
+
stream.end('\x03');
|
|
192
|
+
};
|
|
193
|
+
process.on('SIGINT', handleSIGINT);
|
|
194
|
+
const handleSIGTERM = () => {
|
|
195
|
+
process.removeListener('SIGTERM', handleSIGTERM);
|
|
196
|
+
console.log('SIGTERM received. Canceling command...');
|
|
197
|
+
stream.end('\x1F');
|
|
198
|
+
};
|
|
199
|
+
process.on('SIGTERM', handleSIGTERM);
|
|
200
|
+
stream.pipe(process.stdout);
|
|
201
|
+
process.stdin.pipe(stream);
|
|
202
|
+
stream.on('close', () => {
|
|
203
|
+
process.removeListener('SIGINT', handleSIGINT);
|
|
204
|
+
process.removeListener('SIGTERM', handleSIGTERM);
|
|
205
|
+
conn.end();
|
|
206
|
+
resolve();
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
})
|
|
210
|
+
.on('error', err => {
|
|
211
|
+
reject(err);
|
|
212
|
+
})
|
|
213
|
+
.on('close', () => {
|
|
214
|
+
if (!commandStarted) {
|
|
215
|
+
reject(new Error('Connection closed before command started'));
|
|
216
|
+
}
|
|
217
|
+
})
|
|
218
|
+
.connect({
|
|
219
|
+
host,
|
|
220
|
+
port,
|
|
221
|
+
username,
|
|
222
|
+
privateKey,
|
|
223
|
+
passphrase,
|
|
224
|
+
readyTimeout: SSH_HANDSHAKE_TIMEOUT_MS,
|
|
225
|
+
});
|
|
181
226
|
});
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
227
|
+
}
|
|
228
|
+
async getSSHAuthForCommand(command, extraTrackingInfo) {
|
|
229
|
+
const api = (0, api_1.default)();
|
|
230
|
+
try {
|
|
231
|
+
return await api.mutate({
|
|
232
|
+
mutation: TRIGGER_WP_CLI_COMMAND_MUTATION,
|
|
233
|
+
variables: {
|
|
234
|
+
input: {
|
|
235
|
+
id: this.app.id,
|
|
236
|
+
environmentId: this.env.id,
|
|
237
|
+
command,
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
});
|
|
187
241
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
try {
|
|
201
|
-
return await api.mutate({
|
|
202
|
-
mutation: TRIGGER_WP_CLI_COMMAND_MUTATION,
|
|
203
|
-
variables: {
|
|
204
|
-
input: {
|
|
205
|
-
id: this.app.id,
|
|
206
|
-
environmentId: this.env.id,
|
|
207
|
-
command
|
|
208
|
-
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
if (core_1.CombinedGraphQLErrors.is(error)) {
|
|
244
|
+
const message = error.errors.map(err => err.message).join('; ');
|
|
245
|
+
throw new APIError(message);
|
|
246
|
+
}
|
|
247
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
248
|
+
await this.track('error', {
|
|
249
|
+
error: 'trigger_failed',
|
|
250
|
+
message,
|
|
251
|
+
...extraTrackingInfo,
|
|
252
|
+
});
|
|
253
|
+
throw new Error(`Unable to trigger the WP-CLI command`);
|
|
209
254
|
}
|
|
210
|
-
});
|
|
211
|
-
} catch (error) {
|
|
212
|
-
if (_core.CombinedGraphQLErrors.is(error)) {
|
|
213
|
-
const message = error.errors.map(err => err.message).join('; ');
|
|
214
|
-
throw new APIError(message);
|
|
215
|
-
}
|
|
216
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
217
|
-
await this.track('error', {
|
|
218
|
-
error: 'trigger_failed',
|
|
219
|
-
message,
|
|
220
|
-
...extraTrackingInfo
|
|
221
|
-
});
|
|
222
|
-
throw new Error(`Unable to trigger the WP-CLI command`);
|
|
223
255
|
}
|
|
224
|
-
}
|
|
225
256
|
}
|
|
226
|
-
exports.WPCliCommandOverSSH = WPCliCommandOverSSH;
|
|
257
|
+
exports.WPCliCommandOverSSH = WPCliCommandOverSSH;
|
|
@@ -1,104 +1,97 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const debug = (0,
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const debug_1 = __importDefault(require("debug"));
|
|
7
|
+
const querystring_1 = __importDefault(require("querystring"));
|
|
8
|
+
const undici_1 = require("undici");
|
|
9
|
+
const apiConfig_1 = require("../../cli/apiConfig");
|
|
10
|
+
const debug = (0, debug_1.default)('@automattic/vip:analytics:clients:tracks');
|
|
11
11
|
const validEventOrPropNamePattern = /^[a-z_][a-z0-9_]*$/;
|
|
12
12
|
/**
|
|
13
13
|
* Simple class for tracking using Automattic Tracks.
|
|
14
14
|
*
|
|
15
15
|
* Implementation reference can be found in the Field Guide.
|
|
16
16
|
*/
|
|
17
|
-
|
|
18
17
|
// TODO: add batch support (can include multiples in `events` array)
|
|
19
|
-
|
|
20
18
|
class Tracks {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
async trackEvent(name, eventProps = {}) {
|
|
34
|
-
if (!name.startsWith(this.eventPrefix)) {
|
|
35
|
-
name = this.eventPrefix + name;
|
|
19
|
+
eventPrefix;
|
|
20
|
+
userAgent;
|
|
21
|
+
baseParams;
|
|
22
|
+
static ENDPOINT = 'https://public-api.wordpress.com/rest/v1.1/tracks/record';
|
|
23
|
+
constructor(userId, userType, eventPrefix, env) {
|
|
24
|
+
this.eventPrefix = eventPrefix;
|
|
25
|
+
this.userAgent = env.userAgent;
|
|
26
|
+
this.baseParams = {
|
|
27
|
+
'commonProps[_ui]': userId,
|
|
28
|
+
'commonProps[_ut]': userType,
|
|
29
|
+
'commonProps[_via_ua]': this.userAgent,
|
|
30
|
+
};
|
|
36
31
|
}
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
async trackEvent(name, eventProps = {}) {
|
|
33
|
+
if (!name.startsWith(this.eventPrefix)) {
|
|
34
|
+
name = this.eventPrefix + name;
|
|
35
|
+
}
|
|
36
|
+
if (!validEventOrPropNamePattern.test(name)) {
|
|
37
|
+
debug(`Error: Invalid event name detected: ${name} -- this event will be rejected during ETL`);
|
|
38
|
+
}
|
|
39
|
+
Object.keys(eventProps).forEach(propName => {
|
|
40
|
+
if (!validEventOrPropNamePattern.test(propName)) {
|
|
41
|
+
debug(`Error: Invalid prop name detected: ${propName} -- this event will be rejected during ETL`);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
eventProps.is_vip = await (0, apiConfig_1.checkIfUserIsVip)(); // Add `is_vip` flag to every Tracks event recorded
|
|
45
|
+
const event = {
|
|
46
|
+
_en: name,
|
|
47
|
+
...eventProps,
|
|
48
|
+
};
|
|
49
|
+
// For when we want to support batched events
|
|
50
|
+
const events = [event];
|
|
51
|
+
/**
|
|
52
|
+
* The API expects an indexed events array with event data.
|
|
53
|
+
*
|
|
54
|
+
* `querystring.stringify` does not handle nested arrays and objects very well.
|
|
55
|
+
*
|
|
56
|
+
* So we can just do it ourselves instead.
|
|
57
|
+
*
|
|
58
|
+
* Should end up with something like:
|
|
59
|
+
* - events[0][_en]=clickButton // event name
|
|
60
|
+
* - events[0][buttonName]=Deploy // event custom prop
|
|
61
|
+
* - events[1][_en]=loadPage
|
|
62
|
+
*/
|
|
63
|
+
const params = events.reduce((reduced, ev, index) => {
|
|
64
|
+
Object.keys(ev).forEach(key => {
|
|
65
|
+
const param = `events[${index}][${key}]`;
|
|
66
|
+
const value = event[key];
|
|
67
|
+
reduced[param] = value;
|
|
68
|
+
});
|
|
69
|
+
return reduced;
|
|
70
|
+
}, {});
|
|
71
|
+
debug('trackEvent()', params);
|
|
72
|
+
try {
|
|
73
|
+
return await this.send(params);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
debug(error);
|
|
77
|
+
}
|
|
78
|
+
// Resolve to false instead of rejecting
|
|
79
|
+
return false;
|
|
39
80
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* The API expects an indexed events array with event data.
|
|
57
|
-
*
|
|
58
|
-
* `querystring.stringify` does not handle nested arrays and objects very well.
|
|
59
|
-
*
|
|
60
|
-
* So we can just do it ourselves instead.
|
|
61
|
-
*
|
|
62
|
-
* Should end up with something like:
|
|
63
|
-
* - events[0][_en]=clickButton // event name
|
|
64
|
-
* - events[0][buttonName]=Deploy // event custom prop
|
|
65
|
-
* - events[1][_en]=loadPage
|
|
66
|
-
*/
|
|
67
|
-
const params = events.reduce((reduced, ev, index) => {
|
|
68
|
-
Object.keys(ev).forEach(key => {
|
|
69
|
-
const param = `events[${index}][${key}]`;
|
|
70
|
-
const value = event[key];
|
|
71
|
-
reduced[param] = value;
|
|
72
|
-
});
|
|
73
|
-
return reduced;
|
|
74
|
-
}, {});
|
|
75
|
-
debug('trackEvent()', params);
|
|
76
|
-
try {
|
|
77
|
-
return await this.send(params);
|
|
78
|
-
} catch (error) {
|
|
79
|
-
debug(error);
|
|
81
|
+
send(extraParams) {
|
|
82
|
+
const params = { ...this.baseParams, ...extraParams };
|
|
83
|
+
const method = 'POST';
|
|
84
|
+
const body = querystring_1.default.stringify(params);
|
|
85
|
+
const headers = {
|
|
86
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
87
|
+
'User-Agent': this.userAgent,
|
|
88
|
+
};
|
|
89
|
+
debug('send()', body);
|
|
90
|
+
return (0, undici_1.fetch)(Tracks.ENDPOINT, {
|
|
91
|
+
method,
|
|
92
|
+
body,
|
|
93
|
+
headers,
|
|
94
|
+
});
|
|
80
95
|
}
|
|
81
|
-
|
|
82
|
-
// Resolve to false instead of rejecting
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
send(extraParams) {
|
|
86
|
-
const params = {
|
|
87
|
-
...this.baseParams,
|
|
88
|
-
...extraParams
|
|
89
|
-
};
|
|
90
|
-
const method = 'POST';
|
|
91
|
-
const body = _querystring.default.stringify(params);
|
|
92
|
-
const headers = {
|
|
93
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
94
|
-
'User-Agent': this.userAgent
|
|
95
|
-
};
|
|
96
|
-
debug('send()', body);
|
|
97
|
-
return (0, _undici.fetch)(Tracks.ENDPOINT, {
|
|
98
|
-
method,
|
|
99
|
-
body,
|
|
100
|
-
headers
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
96
|
}
|
|
104
|
-
exports.default = Tracks;
|
|
97
|
+
exports.default = Tracks;
|