@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.
Files changed (311) hide show
  1. package/assets/dev-env.lando.template.yml.ejs +1 -1
  2. package/dist/bin/vip-app-deploy-token-generate.js +110 -78
  3. package/dist/bin/vip-app-deploy-token.js +24 -16
  4. package/dist/bin/vip-app-deploy-validate.js +45 -41
  5. package/dist/bin/vip-app-deploy.js +222 -215
  6. package/dist/bin/vip-app-list.js +59 -43
  7. package/dist/bin/vip-app.js +97 -66
  8. package/dist/bin/vip-backup-db.js +36 -29
  9. package/dist/bin/vip-backup.js +16 -9
  10. package/dist/bin/vip-cache-purge-url.js +93 -55
  11. package/dist/bin/vip-cache.js +23 -14
  12. package/dist/bin/vip-config-envvar-delete.js +74 -73
  13. package/dist/bin/vip-config-envvar-get-all.js +68 -68
  14. package/dist/bin/vip-config-envvar-get.js +46 -46
  15. package/dist/bin/vip-config-envvar-list.js +54 -57
  16. package/dist/bin/vip-config-envvar-set.js +102 -96
  17. package/dist/bin/vip-config-envvar.js +38 -24
  18. package/dist/bin/vip-config-software-get.js +88 -75
  19. package/dist/bin/vip-config-software-update.js +116 -120
  20. package/dist/bin/vip-config-software.js +31 -21
  21. package/dist/bin/vip-config.js +25 -17
  22. package/dist/bin/vip-db-phpmyadmin.js +40 -39
  23. package/dist/bin/vip-db.js +13 -12
  24. package/dist/bin/vip-defensive-mode-configure.js +197 -197
  25. package/dist/bin/vip-defensive-mode-disable.js +43 -35
  26. package/dist/bin/vip-defensive-mode-enable.js +47 -38
  27. package/dist/bin/vip-defensive-mode.js +28 -17
  28. package/dist/bin/vip-dev-env-create.js +147 -104
  29. package/dist/bin/vip-dev-env-destroy.js +48 -39
  30. package/dist/bin/vip-dev-env-envvar-delete.js +60 -49
  31. package/dist/bin/vip-dev-env-envvar-get-all.js +52 -45
  32. package/dist/bin/vip-dev-env-envvar-get.js +48 -37
  33. package/dist/bin/vip-dev-env-envvar-list.js +48 -41
  34. package/dist/bin/vip-dev-env-envvar-set.js +83 -70
  35. package/dist/bin/vip-dev-env-envvar.js +38 -23
  36. package/dist/bin/vip-dev-env-exec.js +81 -74
  37. package/dist/bin/vip-dev-env-import-media.js +34 -26
  38. package/dist/bin/vip-dev-env-import-sql.js +65 -51
  39. package/dist/bin/vip-dev-env-import.js +23 -14
  40. package/dist/bin/vip-dev-env-info.js +59 -50
  41. package/dist/bin/vip-dev-env-list.js +34 -31
  42. package/dist/bin/vip-dev-env-logs.js +59 -49
  43. package/dist/bin/vip-dev-env-purge.js +71 -63
  44. package/dist/bin/vip-dev-env-shell.js +82 -71
  45. package/dist/bin/vip-dev-env-start.js +77 -65
  46. package/dist/bin/vip-dev-env-stop.js +80 -74
  47. package/dist/bin/vip-dev-env-sync-sql.js +80 -72
  48. package/dist/bin/vip-dev-env-sync.js +18 -11
  49. package/dist/bin/vip-dev-env-update.js +93 -84
  50. package/dist/bin/vip-dev-env.js +25 -8
  51. package/dist/bin/vip-edge-workers-build.js +82 -54
  52. package/dist/bin/vip-edge-workers-delete.js +84 -52
  53. package/dist/bin/vip-edge-workers-deploy.js +186 -126
  54. package/dist/bin/vip-edge-workers-disable.js +75 -44
  55. package/dist/bin/vip-edge-workers-enable.js +86 -54
  56. package/dist/bin/vip-edge-workers-get.js +108 -88
  57. package/dist/bin/vip-edge-workers-init.js +83 -53
  58. package/dist/bin/vip-edge-workers-list.js +89 -54
  59. package/dist/bin/vip-edge-workers-new.js +98 -69
  60. package/dist/bin/vip-edge-workers-validate.js +123 -82
  61. package/dist/bin/vip-edge-workers.js +19 -6
  62. package/dist/bin/vip-export-sql.js +75 -69
  63. package/dist/bin/vip-export.js +12 -7
  64. package/dist/bin/vip-import-media-abort.js +99 -73
  65. package/dist/bin/vip-import-media-status.js +83 -51
  66. package/dist/bin/vip-import-media.js +165 -166
  67. package/dist/bin/vip-import-sql-status.js +75 -45
  68. package/dist/bin/vip-import-sql.js +536 -596
  69. package/dist/bin/vip-import-validate-files.js +122 -141
  70. package/dist/bin/vip-import-validate-sql.js +52 -16
  71. package/dist/bin/vip-import.js +16 -7
  72. package/dist/bin/vip-logout.js +17 -13
  73. package/dist/bin/vip-logs.js +209 -183
  74. package/dist/bin/vip-search-replace.js +85 -53
  75. package/dist/bin/vip-slowlogs.js +168 -147
  76. package/dist/bin/vip-sync.js +163 -133
  77. package/dist/bin/vip-whoami.js +71 -35
  78. package/dist/bin/vip-wp.js +506 -549
  79. package/dist/bin/vip.js +161 -116
  80. package/dist/commands/backup-db.js +183 -149
  81. package/dist/commands/dev-env-import-sql.js +162 -117
  82. package/dist/commands/dev-env-sync-sql.js +372 -330
  83. package/dist/commands/export-sql.js +441 -425
  84. package/dist/commands/phpmyadmin.js +232 -212
  85. package/dist/commands/wp-ssh.js +218 -187
  86. package/dist/lib/analytics/clients/tracks.js +84 -91
  87. package/dist/lib/analytics/index.js +27 -27
  88. package/dist/lib/api/app.js +37 -36
  89. package/dist/lib/api/cache-purge.js +17 -20
  90. package/dist/lib/api/constants.js +5 -6
  91. package/dist/lib/api/edge-workers.js +84 -135
  92. package/dist/lib/api/error-debug.js +10 -13
  93. package/dist/lib/api/feature-flags.js +16 -17
  94. package/dist/lib/api/http.js +47 -48
  95. package/dist/lib/api/user.js +17 -18
  96. package/dist/lib/api.js +107 -116
  97. package/dist/lib/app-logs/app-logs.js +24 -25
  98. package/dist/lib/app-slowlogs/app-slowlogs.js +23 -24
  99. package/dist/lib/app-slowlogs/types.js +2 -1
  100. package/dist/lib/app.js +6 -8
  101. package/dist/lib/backup-storage-availability/backup-storage-availability.js +119 -119
  102. package/dist/lib/backup-storage-availability/docker-machine-not-found-error.js +5 -6
  103. package/dist/lib/cli/apiConfig.js +71 -41
  104. package/dist/lib/cli/command.js +1120 -873
  105. package/dist/lib/cli/config.js +29 -29
  106. package/dist/lib/cli/envAlias.js +35 -50
  107. package/dist/lib/cli/exit.js +19 -19
  108. package/dist/lib/cli/format.js +172 -172
  109. package/dist/lib/cli/progress.js +193 -236
  110. package/dist/lib/cli/prompt.js +14 -15
  111. package/dist/lib/cli/runtime-mode.js +5 -6
  112. package/dist/lib/client-file-uploader.js +489 -641
  113. package/dist/lib/config/software.js +206 -212
  114. package/dist/lib/constants/dev-environment.js +40 -37
  115. package/dist/lib/constants/file-size.js +6 -7
  116. package/dist/lib/constants/vipgo.js +24 -12
  117. package/dist/lib/custom-deploy/custom-deploy.js +138 -120
  118. package/dist/lib/database.js +88 -85
  119. package/dist/lib/defensive-mode/api.js +41 -46
  120. package/dist/lib/defensive-mode/cli-helpers.js +40 -40
  121. package/dist/lib/dev-environment/dev-environment-cli.js +776 -735
  122. package/dist/lib/dev-environment/dev-environment-configuration-file.js +224 -191
  123. package/dist/lib/dev-environment/dev-environment-core.js +697 -732
  124. package/dist/lib/dev-environment/dev-environment-database.js +57 -41
  125. package/dist/lib/dev-environment/dev-environment-lando.js +734 -666
  126. package/dist/lib/dev-environment/docker-utils.js +96 -90
  127. package/dist/lib/dev-environment/env-vars.js +61 -59
  128. package/dist/lib/dev-environment/lando-loader.js +6 -7
  129. package/dist/lib/dev-environment/types.js +2 -1
  130. package/dist/lib/edge-workers/confirmation.js +42 -36
  131. package/dist/lib/edge-workers/deployment.js +150 -159
  132. package/dist/lib/edge-workers/index.js +68 -85
  133. package/dist/lib/edge-workers/location.js +26 -26
  134. package/dist/lib/edge-workers/output.js +14 -15
  135. package/dist/lib/edge-workers/project.js +123 -132
  136. package/dist/lib/edge-workers/toolchains/assemblyscript/constants.js +6 -8
  137. package/dist/lib/edge-workers/toolchains/assemblyscript/index.js +100 -101
  138. package/dist/lib/edge-workers/toolchains/assemblyscript/templates.js +31 -33
  139. package/dist/lib/edge-workers/toolchains/index.js +15 -15
  140. package/dist/lib/edge-workers/types.js +10 -38
  141. package/dist/lib/edge-workers/validation.js +161 -150
  142. package/dist/lib/env.js +16 -17
  143. package/dist/lib/envvar/api-delete.js +16 -18
  144. package/dist/lib/envvar/api-get-all.js +15 -19
  145. package/dist/lib/envvar/api-get.js +8 -9
  146. package/dist/lib/envvar/api-list.js +16 -21
  147. package/dist/lib/envvar/api-set.js +20 -19
  148. package/dist/lib/envvar/api.js +34 -29
  149. package/dist/lib/envvar/input.js +29 -34
  150. package/dist/lib/envvar/logging.js +9 -11
  151. package/dist/lib/envvar/read-file.js +6 -7
  152. package/dist/lib/http/download-file.js +76 -44
  153. package/dist/lib/http/proxy-agent.js +37 -40
  154. package/dist/lib/http/proxy-dispatcher.js +69 -71
  155. package/dist/lib/keychain/insecure.js +40 -36
  156. package/dist/lib/keychain/keychain.js +2 -1
  157. package/dist/lib/keychain/secure.js +16 -15
  158. package/dist/lib/keychain.js +22 -22
  159. package/dist/lib/live-backup-copy.js +117 -115
  160. package/dist/lib/logout.js +17 -19
  161. package/dist/lib/media-import/config.js +15 -14
  162. package/dist/lib/media-import/media-file-import.js +9 -13
  163. package/dist/lib/media-import/progress.js +53 -65
  164. package/dist/lib/media-import/status.js +241 -256
  165. package/dist/lib/media-import/utils.js +15 -15
  166. package/dist/lib/node-version-check.js +16 -16
  167. package/dist/lib/promise.js +16 -17
  168. package/dist/lib/read-file.js +48 -16
  169. package/dist/lib/rechallenge/client.js +37 -43
  170. package/dist/lib/rechallenge/errors.js +38 -37
  171. package/dist/lib/rechallenge/flow.js +148 -123
  172. package/dist/lib/rechallenge/index.js +23 -24
  173. package/dist/lib/rechallenge/link.js +153 -151
  174. package/dist/lib/rechallenge/open-browser.js +14 -17
  175. package/dist/lib/rechallenge/token-cache.js +83 -86
  176. package/dist/lib/rechallenge/types.js +5 -14
  177. package/dist/lib/retry.js +93 -129
  178. package/dist/lib/search-and-replace.js +164 -148
  179. package/dist/lib/site-import/db-file-import.js +12 -16
  180. package/dist/lib/site-import/status.js +291 -291
  181. package/dist/lib/token.js +86 -87
  182. package/dist/lib/tracker.js +51 -62
  183. package/dist/lib/types/graphql/rate-limit-exceeded-error.js +2 -1
  184. package/dist/lib/types.js +2 -1
  185. package/dist/lib/user-error.js +6 -8
  186. package/dist/lib/utils.js +81 -87
  187. package/dist/lib/validations/custom-deploy.js +218 -186
  188. package/dist/lib/validations/is-multi-site-sql-dump.js +6 -6
  189. package/dist/lib/validations/is-multi-site.js +83 -50
  190. package/dist/lib/validations/is-multisite-domain-mapped.js +92 -62
  191. package/dist/lib/validations/line-by-line.js +78 -46
  192. package/dist/lib/validations/site-type.js +59 -63
  193. package/dist/lib/validations/sql-insert-parser.js +415 -0
  194. package/dist/lib/validations/sql.js +551 -431
  195. package/dist/lib/validations/utils.js +27 -29
  196. package/dist/lib/vip-import-validate-files.js +481 -490
  197. package/dist/lib/wp/helpers.js +41 -45
  198. package/dist/lib/wp/readline.js +21 -57
  199. package/dist/lib/xdg-data.js +11 -12
  200. package/helpers/mark-cli-executable.js +9 -0
  201. package/node_modules/@apollo/client/CHANGELOG.md +10 -0
  202. package/node_modules/@apollo/client/__cjs/cache/inmemory/helpers.cjs +5 -0
  203. package/node_modules/@apollo/client/__cjs/cache/inmemory/helpers.cjs.map +1 -1
  204. package/node_modules/@apollo/client/__cjs/cache/inmemory/inMemoryCache.cjs +2 -1
  205. package/node_modules/@apollo/client/__cjs/cache/inmemory/inMemoryCache.cjs.map +1 -1
  206. package/node_modules/@apollo/client/__cjs/cache/inmemory/key-extractor.cjs +14 -2
  207. package/node_modules/@apollo/client/__cjs/cache/inmemory/key-extractor.cjs.map +1 -1
  208. package/node_modules/@apollo/client/__cjs/cache/inmemory/policies.cjs +16 -0
  209. package/node_modules/@apollo/client/__cjs/cache/inmemory/policies.cjs.map +1 -1
  210. package/node_modules/@apollo/client/__cjs/cache/inmemory/policies.d.cts +2 -0
  211. package/node_modules/@apollo/client/__cjs/cache/inmemory/writeToStore.cjs +3 -2
  212. package/node_modules/@apollo/client/__cjs/cache/inmemory/writeToStore.cjs.map +1 -1
  213. package/node_modules/@apollo/client/__cjs/core/QueryInfo.cjs +9 -1
  214. package/node_modules/@apollo/client/__cjs/core/QueryInfo.cjs.map +1 -1
  215. package/node_modules/@apollo/client/__cjs/core/QueryInfo.d.cts +1 -1
  216. package/node_modules/@apollo/client/__cjs/core/QueryManager.cjs +10 -3
  217. package/node_modules/@apollo/client/__cjs/core/QueryManager.cjs.map +1 -1
  218. package/node_modules/@apollo/client/__cjs/react/hooks/useFragment.cjs.map +1 -1
  219. package/node_modules/@apollo/client/__cjs/react/hooks/useFragment.d.cts +42 -43
  220. package/node_modules/@apollo/client/__cjs/version.cjs +1 -1
  221. package/node_modules/@apollo/client/cache/inmemory/helpers.js +5 -0
  222. package/node_modules/@apollo/client/cache/inmemory/helpers.js.map +1 -1
  223. package/node_modules/@apollo/client/cache/inmemory/inMemoryCache.js +2 -1
  224. package/node_modules/@apollo/client/cache/inmemory/inMemoryCache.js.map +1 -1
  225. package/node_modules/@apollo/client/cache/inmemory/key-extractor.js +14 -2
  226. package/node_modules/@apollo/client/cache/inmemory/key-extractor.js.map +1 -1
  227. package/node_modules/@apollo/client/cache/inmemory/policies.d.ts +2 -0
  228. package/node_modules/@apollo/client/cache/inmemory/policies.js +17 -1
  229. package/node_modules/@apollo/client/cache/inmemory/policies.js.map +1 -1
  230. package/node_modules/@apollo/client/cache/inmemory/writeToStore.js +3 -2
  231. package/node_modules/@apollo/client/cache/inmemory/writeToStore.js.map +1 -1
  232. package/node_modules/@apollo/client/core/QueryInfo.d.ts +1 -1
  233. package/node_modules/@apollo/client/core/QueryInfo.js +10 -2
  234. package/node_modules/@apollo/client/core/QueryInfo.js.map +1 -1
  235. package/node_modules/@apollo/client/core/QueryManager.js +10 -3
  236. package/node_modules/@apollo/client/core/QueryManager.js.map +1 -1
  237. package/node_modules/@apollo/client/package.json +1 -1
  238. package/node_modules/@apollo/client/react/hooks/useFragment.d.ts +42 -43
  239. package/node_modules/@apollo/client/react/hooks/useFragment.js.map +1 -1
  240. package/node_modules/@apollo/client/react/hooks-compiled/useFragment.d.ts +42 -43
  241. package/node_modules/@apollo/client/react/hooks-compiled/useFragment.js.map +1 -1
  242. package/node_modules/@apollo/client/version.js +1 -1
  243. package/node_modules/@automattic/vip-search-replace/README.md +6 -1
  244. package/node_modules/@automattic/vip-search-replace/lib/index.js +46 -14
  245. package/node_modules/@automattic/vip-search-replace/package.json +1 -1
  246. package/node_modules/@types/node/README.md +1 -1
  247. package/node_modules/@types/node/package.json +2 -2
  248. package/node_modules/@types/node/zlib.d.ts +752 -0
  249. package/node_modules/check-disk-space/README.md +92 -32
  250. package/node_modules/check-disk-space/dist/check-disk-space.d.mts +58 -0
  251. package/node_modules/check-disk-space/dist/check-disk-space.mjs +170 -190
  252. package/node_modules/check-disk-space/package.json +43 -71
  253. package/node_modules/cpu-features/build/Makefile +2 -2
  254. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/filesystem.o.d +1 -1
  255. 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
  256. 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
  257. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_windows.o.d +1 -1
  258. 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
  259. 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
  260. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_ppc_linux.o.d +1 -1
  261. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_freebsd.o.d +1 -1
  262. 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
  263. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_macos.o.d +1 -1
  264. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_windows.o.d +1 -1
  265. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/stack_line_reader.o.d +1 -1
  266. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/string_view.o.d +1 -1
  267. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpufeatures/src/binding.o.d +157 -145
  268. package/node_modules/cpu-features/build/Release/cpufeatures.node +0 -0
  269. package/node_modules/cpu-features/build/Release/obj.target/cpufeatures/src/binding.o +0 -0
  270. package/node_modules/cpu-features/build/Release/obj.target/cpufeatures.node +0 -0
  271. package/node_modules/cpu-features/build/config.gypi +100 -31
  272. package/node_modules/cpu-features/build/cpufeatures.target.mk +14 -14
  273. package/node_modules/cpu-features/build/deps/cpu_features/cpu_features.target.mk +14 -14
  274. package/node_modules/ssh2/lib/protocol/crypto/build/Makefile +2 -2
  275. package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto/src/binding.o.d.raw +136 -0
  276. package/node_modules/ssh2/lib/protocol/crypto/build/sshcrypto.target.mk +14 -14
  277. package/node_modules/undici/docs/docs/api/Interceptors.md +15 -2
  278. package/node_modules/undici/lib/dispatcher/client-h2.js +78 -3
  279. package/node_modules/undici/lib/dispatcher/pool-base.js +20 -3
  280. package/node_modules/undici/package.json +3 -3
  281. package/node_modules/undici/types/api.d.ts +1 -1
  282. package/node_modules/undici/types/utility.d.ts +4 -4
  283. package/package.json +44 -13
  284. package/dist/lib/analytics/clients/client.js +0 -1
  285. package/dist/lib/analytics/clients/pendo.js +0 -78
  286. package/helpers/check-version.js +0 -16
  287. package/node_modules/check-disk-space/dist/check-disk-space.cjs +0 -210
  288. package/node_modules/check-disk-space/dist/check-disk-space.d.ts +0 -53
  289. package/node_modules/fetch-retry/.eslintignore +0 -1
  290. package/node_modules/fetch-retry/.eslintrc.yml +0 -20
  291. package/node_modules/fetch-retry/.github/workflows/node.js.yml +0 -32
  292. package/node_modules/fetch-retry/.husky/pre-commit +0 -6
  293. package/node_modules/fetch-retry/.nycrc.json +0 -24
  294. package/node_modules/fetch-retry/.travis.yml +0 -3
  295. package/node_modules/fetch-retry/LICENSE +0 -21
  296. package/node_modules/fetch-retry/README.md +0 -128
  297. package/node_modules/fetch-retry/dist/fetch-retry.umd.js +0 -151
  298. package/node_modules/fetch-retry/index.d.ts +0 -29
  299. package/node_modules/fetch-retry/index.js +0 -143
  300. package/node_modules/fetch-retry/package.json +0 -41
  301. package/node_modules/fetch-retry/rollup.config.js +0 -12
  302. package/node_modules/fetch-retry/test/.eslintrc.yml +0 -7
  303. package/node_modules/fetch-retry/test/integration/index.js +0 -212
  304. package/node_modules/fetch-retry/test/integration/mock-api/index.js +0 -42
  305. package/node_modules/fetch-retry/test/unit/index.js +0 -1169
  306. package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto/src/binding.o.d +0 -265
  307. package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto.node.d +0 -1
  308. package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/sshcrypto.node.d +0 -1
  309. package/node_modules/ssh2/lib/protocol/crypto/build/Release/obj.target/sshcrypto/src/binding.o +0 -0
  310. package/node_modules/ssh2/lib/protocol/crypto/build/Release/obj.target/sshcrypto.node +0 -0
  311. package/node_modules/ssh2/lib/protocol/crypto/build/Release/sshcrypto.node +0 -0
@@ -1,30 +1,61 @@
1
1
  "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.WPCliCommandOverSSH = exports.NonZeroExitCodeError = exports.APIError = void 0;
5
- var _core = require("@apollo/client/core");
6
- var _chalk = _interopRequireDefault(require("chalk"));
7
- var _debug = _interopRequireDefault(require("debug"));
8
- var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
9
- var ssh2 = _interopRequireWildcard(require("ssh2"));
10
- var _package = _interopRequireDefault(require("../../package.json"));
11
- var _api = _interopRequireDefault(require("../lib/api"));
12
- var _tracker = require("../lib/tracker");
13
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
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 debug = (0, _debug.default)('@automattic/vip:wp/ssh');
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, _graphqlTag.default)`
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
- guid;
46
- exitCode;
47
- constructor(message, guid, exitCode) {
48
- super(message);
49
- this.guid = guid;
50
- this.exitCode = exitCode;
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
- track;
58
- constructor(app, env) {
59
- this.app = app;
60
- this.env = env;
61
- this.track = (0, _tracker.makeCommandTracker)('wp', {
62
- app: app.id,
63
- env: env.id,
64
- execution_type: 'ssh'
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
- async executeCommandOverSSH({
135
- host,
136
- port,
137
- username,
138
- privateKey,
139
- passphrase,
140
- guid,
141
- inputToken
142
- }) {
143
- return new Promise((resolve, reject) => {
144
- const conn = new ssh2.Client();
145
- const columns = process.stdout.columns || NON_TTY_COLUMNS;
146
- const rows = process.stdout.rows || NON_TTY_ROWS;
147
- const isTTY = process.stdout.isTTY ? 'true' : 'false';
148
- let commandStarted = false;
149
- conn.on('ready', () => {
150
- conn.exec(`GUID=${guid} INPUT_TOKEN=${inputToken} VERSION=${_package.default.version} ROWS=${rows} COLUMNS=${columns} TTY=${isTTY}`, (err, stream) => {
151
- if (err) {
152
- reject(err);
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
- commandStarted = true;
161
- const handleSIGINT = () => {
162
- process.removeListener('SIGINT', handleSIGINT);
163
- console.log('SIGINT received. Canceling command...');
164
- stream.end('\x03');
165
- };
166
- process.on('SIGINT', handleSIGINT);
167
- const handleSIGTERM = () => {
168
- process.removeListener('SIGTERM', handleSIGTERM);
169
- console.log('SIGTERM received. Canceling command...');
170
- stream.end('\x1F');
171
- };
172
- process.on('SIGTERM', handleSIGTERM);
173
- stream.pipe(process.stdout);
174
- process.stdin.pipe(stream);
175
- stream.on('close', () => {
176
- process.removeListener('SIGINT', handleSIGINT);
177
- process.removeListener('SIGTERM', handleSIGTERM);
178
- conn.end();
179
- resolve();
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
- }).on('error', err => {
183
- reject(err);
184
- }).on('close', () => {
185
- if (!commandStarted) {
186
- reject(new Error('Connection closed before command started'));
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
- }).connect({
189
- host,
190
- port,
191
- username,
192
- privateKey,
193
- passphrase,
194
- readyTimeout: SSH_HANDSHAKE_TIMEOUT_MS
195
- });
196
- });
197
- }
198
- async getSSHAuthForCommand(command, extraTrackingInfo) {
199
- const api = (0, _api.default)();
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
- exports.__esModule = true;
4
- exports.default = void 0;
5
- var _debug = _interopRequireDefault(require("debug"));
6
- var _querystring = _interopRequireDefault(require("querystring"));
7
- var _undici = require("undici");
8
- var _apiConfig = require("../../cli/apiConfig");
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- const debug = (0, _debug.default)('@automattic/vip:analytics:clients:tracks');
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
- userAgent;
22
- baseParams;
23
- static ENDPOINT = 'https://public-api.wordpress.com/rest/v1.1/tracks/record';
24
- constructor(userId, userType, eventPrefix, env) {
25
- this.eventPrefix = eventPrefix;
26
- this.userAgent = env.userAgent;
27
- this.baseParams = {
28
- 'commonProps[_ui]': userId,
29
- 'commonProps[_ut]': userType,
30
- 'commonProps[_via_ua]': this.userAgent
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
- if (!validEventOrPropNamePattern.test(name)) {
38
- debug(`Error: Invalid event name detected: ${name} -- this event will be rejected during ETL`);
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
- Object.keys(eventProps).forEach(propName => {
41
- if (!validEventOrPropNamePattern.test(propName)) {
42
- debug(`Error: Invalid prop name detected: ${propName} -- this event will be rejected during ETL`);
43
- }
44
- });
45
- eventProps.is_vip = await (0, _apiConfig.checkIfUserIsVip)(); // Add `is_vip` flag to every Tracks event recorded
46
-
47
- const event = {
48
- _en: name,
49
- ...eventProps
50
- };
51
-
52
- // For when we want to support batched events
53
- const events = [event];
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;