@zuplo/cli 7.10.0 → 7.11.1

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 (310) hide show
  1. package/dist/common/worker-output.d.ts +7 -0
  2. package/dist/common/worker-output.d.ts.map +1 -1
  3. package/dist/common/worker-output.js +39 -0
  4. package/dist/common/worker-output.js.map +1 -1
  5. package/dist/tsconfig.tsbuildinfo +1 -1
  6. package/node_modules/@hono/node-server/README.md +2 -0
  7. package/node_modules/@hono/node-server/dist/index.cjs +1 -1
  8. package/node_modules/@hono/node-server/dist/index.mjs +1 -1
  9. package/node_modules/@hono/node-server/dist/serve-static.cjs +2 -1
  10. package/node_modules/@hono/node-server/dist/serve-static.mjs +2 -1
  11. package/node_modules/@hono/node-server/package.json +1 -1
  12. package/node_modules/@posthog/core/dist/metrics/index.d.ts +9 -0
  13. package/node_modules/@posthog/core/dist/metrics/index.d.ts.map +1 -1
  14. package/node_modules/@posthog/core/dist/metrics/index.js +38 -3
  15. package/node_modules/@posthog/core/dist/metrics/index.mjs +38 -3
  16. package/node_modules/@posthog/core/dist/metrics/types.d.ts +7 -2
  17. package/node_modules/@posthog/core/dist/metrics/types.d.ts.map +1 -1
  18. package/node_modules/@posthog/core/dist/traces/ids.d.ts.map +1 -1
  19. package/node_modules/@posthog/core/dist/traces/ids.js +2 -2
  20. package/node_modules/@posthog/core/dist/traces/ids.mjs +2 -2
  21. package/node_modules/@posthog/core/dist/types.d.ts +1 -1
  22. package/node_modules/@posthog/core/dist/types.d.ts.map +1 -1
  23. package/node_modules/@posthog/core/package.json +4 -3
  24. package/node_modules/@posthog/core/src/metrics/index.spec.ts +75 -0
  25. package/node_modules/@posthog/core/src/metrics/index.ts +60 -0
  26. package/node_modules/@posthog/core/src/metrics/types.ts +7 -1
  27. package/node_modules/@posthog/core/src/traces/ids.ts +4 -2
  28. package/node_modules/@posthog/core/src/types.ts +1 -1
  29. package/node_modules/@posthog/types/dist/capture-metric.d.ts +10 -0
  30. package/node_modules/@posthog/types/dist/capture-metric.d.ts.map +1 -1
  31. package/node_modules/@posthog/types/dist/capture.d.ts +1 -1
  32. package/node_modules/@posthog/types/dist/capture.d.ts.map +1 -1
  33. package/node_modules/@posthog/types/dist/index.d.ts +1 -1
  34. package/node_modules/@posthog/types/dist/index.d.ts.map +1 -1
  35. package/node_modules/@posthog/types/package.json +1 -1
  36. package/node_modules/@posthog/types/src/capture-metric.ts +11 -0
  37. package/node_modules/@posthog/types/src/capture.ts +1 -1
  38. package/node_modules/@posthog/types/src/index.ts +1 -0
  39. package/node_modules/@zuplo/core/customer.cli.minified.js +272 -261
  40. package/node_modules/@zuplo/core/index.minified.js +276 -265
  41. package/node_modules/@zuplo/core/package.json +1 -1
  42. package/node_modules/@zuplo/graphql/package.json +1 -1
  43. package/node_modules/@zuplo/openapi-tools/package.json +5 -2
  44. package/node_modules/@zuplo/otel/package.json +1 -1
  45. package/node_modules/@zuplo/runtime/out/esm/{chunk-YJ2BHVUH.js → chunk-CDEAY3VY.js} +2 -2
  46. package/node_modules/@zuplo/runtime/out/esm/chunk-LVSZ3WTO.js +37 -0
  47. package/node_modules/@zuplo/runtime/out/esm/chunk-LVSZ3WTO.js.map +1 -0
  48. package/node_modules/@zuplo/runtime/out/esm/{chunk-VTO3F6DK.js → chunk-NUVXDVLJ.js} +2 -2
  49. package/node_modules/@zuplo/runtime/out/esm/{chunk-6YPRGG62.js → chunk-RHU3Z7DA.js} +108 -108
  50. package/node_modules/@zuplo/runtime/out/esm/chunk-RHU3Z7DA.js.map +1 -0
  51. package/node_modules/@zuplo/runtime/out/esm/index.js +1 -1
  52. package/node_modules/@zuplo/runtime/out/esm/internal/index.js +1 -1
  53. package/node_modules/@zuplo/runtime/out/esm/mcp-gateway/index.js +1 -1
  54. package/node_modules/@zuplo/runtime/out/esm/mocks/index.js +1 -1
  55. package/node_modules/@zuplo/runtime/out/esm/sdks/aws/index.js +1 -1
  56. package/node_modules/@zuplo/runtime/out/types/index.d.ts +15 -24
  57. package/node_modules/@zuplo/runtime/out/types/internal/index.d.ts +14 -0
  58. package/node_modules/@zuplo/runtime/package.json +1 -1
  59. package/package.json +15 -12
  60. package/dist/__tests__/archive-utils.test.d.ts +0 -2
  61. package/dist/__tests__/archive-utils.test.d.ts.map +0 -1
  62. package/dist/__tests__/archive-utils.test.js +0 -50
  63. package/dist/__tests__/archive-utils.test.js.map +0 -1
  64. package/dist/__tests__/import-openapi.test.d.ts +0 -2
  65. package/dist/__tests__/import-openapi.test.d.ts.map +0 -1
  66. package/dist/__tests__/import-openapi.test.js +0 -251
  67. package/dist/__tests__/import-openapi.test.js.map +0 -1
  68. package/dist/__tests__/integration/confirm-linked-config.integration.test.d.ts +0 -2
  69. package/dist/__tests__/integration/confirm-linked-config.integration.test.d.ts.map +0 -1
  70. package/dist/__tests__/integration/confirm-linked-config.integration.test.js +0 -202
  71. package/dist/__tests__/integration/confirm-linked-config.integration.test.js.map +0 -1
  72. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts +0 -2
  73. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts.map +0 -1
  74. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js +0 -184
  75. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js.map +0 -1
  76. package/dist/__tests__/integration/custom-domain.integration.test.d.ts +0 -2
  77. package/dist/__tests__/integration/custom-domain.integration.test.d.ts.map +0 -1
  78. package/dist/__tests__/integration/custom-domain.integration.test.js +0 -563
  79. package/dist/__tests__/integration/custom-domain.integration.test.js.map +0 -1
  80. package/dist/__tests__/integration/delete.integration.test.d.ts +0 -2
  81. package/dist/__tests__/integration/delete.integration.test.d.ts.map +0 -1
  82. package/dist/__tests__/integration/delete.integration.test.js +0 -262
  83. package/dist/__tests__/integration/delete.integration.test.js.map +0 -1
  84. package/dist/__tests__/integration/deploy.integration.test.d.ts +0 -2
  85. package/dist/__tests__/integration/deploy.integration.test.d.ts.map +0 -1
  86. package/dist/__tests__/integration/deploy.integration.test.js +0 -519
  87. package/dist/__tests__/integration/deploy.integration.test.js.map +0 -1
  88. package/dist/__tests__/integration/get-project-param.integration.test.d.ts +0 -2
  89. package/dist/__tests__/integration/get-project-param.integration.test.d.ts.map +0 -1
  90. package/dist/__tests__/integration/get-project-param.integration.test.js +0 -305
  91. package/dist/__tests__/integration/get-project-param.integration.test.js.map +0 -1
  92. package/dist/__tests__/integration/info.integration.test.d.ts +0 -2
  93. package/dist/__tests__/integration/info.integration.test.d.ts.map +0 -1
  94. package/dist/__tests__/integration/info.integration.test.js +0 -293
  95. package/dist/__tests__/integration/info.integration.test.js.map +0 -1
  96. package/dist/__tests__/integration/jest-mocks-setup.d.ts +0 -2
  97. package/dist/__tests__/integration/jest-mocks-setup.d.ts.map +0 -1
  98. package/dist/__tests__/integration/jest-mocks-setup.js +0 -104
  99. package/dist/__tests__/integration/jest-mocks-setup.js.map +0 -1
  100. package/dist/__tests__/integration/jest-setup.d.ts +0 -2
  101. package/dist/__tests__/integration/jest-setup.d.ts.map +0 -1
  102. package/dist/__tests__/integration/jest-setup.js +0 -12
  103. package/dist/__tests__/integration/jest-setup.js.map +0 -1
  104. package/dist/__tests__/integration/link.integration.test.d.ts +0 -2
  105. package/dist/__tests__/integration/link.integration.test.d.ts.map +0 -1
  106. package/dist/__tests__/integration/link.integration.test.js +0 -395
  107. package/dist/__tests__/integration/link.integration.test.js.map +0 -1
  108. package/dist/__tests__/integration/linked-config-cascade.integration.test.d.ts +0 -2
  109. package/dist/__tests__/integration/linked-config-cascade.integration.test.d.ts.map +0 -1
  110. package/dist/__tests__/integration/linked-config-cascade.integration.test.js +0 -179
  111. package/dist/__tests__/integration/linked-config-cascade.integration.test.js.map +0 -1
  112. package/dist/__tests__/integration/list.integration.test.d.ts +0 -2
  113. package/dist/__tests__/integration/list.integration.test.d.ts.map +0 -1
  114. package/dist/__tests__/integration/list.integration.test.js +0 -300
  115. package/dist/__tests__/integration/list.integration.test.js.map +0 -1
  116. package/dist/__tests__/integration/source-upgrade.integration.test.d.ts +0 -2
  117. package/dist/__tests__/integration/source-upgrade.integration.test.d.ts.map +0 -1
  118. package/dist/__tests__/integration/source-upgrade.integration.test.js +0 -100
  119. package/dist/__tests__/integration/source-upgrade.integration.test.js.map +0 -1
  120. package/dist/__tests__/integration/test-utils.d.ts +0 -30
  121. package/dist/__tests__/integration/test-utils.d.ts.map +0 -1
  122. package/dist/__tests__/integration/test-utils.js +0 -82
  123. package/dist/__tests__/integration/test-utils.js.map +0 -1
  124. package/dist/__tests__/integration/tunnel.integration.test.d.ts +0 -2
  125. package/dist/__tests__/integration/tunnel.integration.test.d.ts.map +0 -1
  126. package/dist/__tests__/integration/tunnel.integration.test.js +0 -486
  127. package/dist/__tests__/integration/tunnel.integration.test.js.map +0 -1
  128. package/dist/__tests__/integration/variable.integration.test.d.ts +0 -2
  129. package/dist/__tests__/integration/variable.integration.test.d.ts.map +0 -1
  130. package/dist/__tests__/integration/variable.integration.test.js +0 -258
  131. package/dist/__tests__/integration/variable.integration.test.js.map +0 -1
  132. package/dist/__tests__/integration/whoami.integration.test.d.ts +0 -2
  133. package/dist/__tests__/integration/whoami.integration.test.d.ts.map +0 -1
  134. package/dist/__tests__/integration/whoami.integration.test.js +0 -116
  135. package/dist/__tests__/integration/whoami.integration.test.js.map +0 -1
  136. package/dist/__tests__/outdated.test.d.ts +0 -2
  137. package/dist/__tests__/outdated.test.d.ts.map +0 -1
  138. package/dist/__tests__/outdated.test.js +0 -67
  139. package/dist/__tests__/outdated.test.js.map +0 -1
  140. package/dist/__tests__/populate.test.d.ts +0 -2
  141. package/dist/__tests__/populate.test.d.ts.map +0 -1
  142. package/dist/__tests__/populate.test.js +0 -445
  143. package/dist/__tests__/populate.test.js.map +0 -1
  144. package/dist/__tests__/tsconfig-upgrader.test.d.ts +0 -2
  145. package/dist/__tests__/tsconfig-upgrader.test.d.ts.map +0 -1
  146. package/dist/__tests__/tsconfig-upgrader.test.js +0 -31
  147. package/dist/__tests__/tsconfig-upgrader.test.js.map +0 -1
  148. package/dist/ca-certificate/validation.test.d.ts +0 -2
  149. package/dist/ca-certificate/validation.test.d.ts.map +0 -1
  150. package/dist/ca-certificate/validation.test.js +0 -131
  151. package/dist/ca-certificate/validation.test.js.map +0 -1
  152. package/dist/common/analytics/cli-invocation.test.d.ts +0 -2
  153. package/dist/common/analytics/cli-invocation.test.d.ts.map +0 -1
  154. package/dist/common/analytics/cli-invocation.test.js +0 -51
  155. package/dist/common/analytics/cli-invocation.test.js.map +0 -1
  156. package/dist/common/analytics/package-manager.test.d.ts +0 -2
  157. package/dist/common/analytics/package-manager.test.d.ts.map +0 -1
  158. package/dist/common/analytics/package-manager.test.js +0 -163
  159. package/dist/common/analytics/package-manager.test.js.map +0 -1
  160. package/dist/common/cli-dispatcher.test.d.ts +0 -2
  161. package/dist/common/cli-dispatcher.test.d.ts.map +0 -1
  162. package/dist/common/cli-dispatcher.test.js +0 -80
  163. package/dist/common/cli-dispatcher.test.js.map +0 -1
  164. package/dist/common/middleware/check-pnpm-lifecycle.test.d.ts +0 -2
  165. package/dist/common/middleware/check-pnpm-lifecycle.test.d.ts.map +0 -1
  166. package/dist/common/middleware/check-pnpm-lifecycle.test.js +0 -125
  167. package/dist/common/middleware/check-pnpm-lifecycle.test.js.map +0 -1
  168. package/dist/common/middleware/get-environment-param.test.d.ts +0 -2
  169. package/dist/common/middleware/get-environment-param.test.d.ts.map +0 -1
  170. package/dist/common/middleware/get-environment-param.test.js +0 -57
  171. package/dist/common/middleware/get-environment-param.test.js.map +0 -1
  172. package/dist/common/read-linked-config.test.d.ts +0 -2
  173. package/dist/common/read-linked-config.test.d.ts.map +0 -1
  174. package/dist/common/read-linked-config.test.js +0 -363
  175. package/dist/common/read-linked-config.test.js.map +0 -1
  176. package/dist/common/terminal.test.d.ts +0 -2
  177. package/dist/common/terminal.test.d.ts.map +0 -1
  178. package/dist/common/terminal.test.js +0 -101
  179. package/dist/common/terminal.test.js.map +0 -1
  180. package/dist/common/utils/build-environment-prompt-choices.test.d.ts +0 -2
  181. package/dist/common/utils/build-environment-prompt-choices.test.d.ts.map +0 -1
  182. package/dist/common/utils/build-environment-prompt-choices.test.js +0 -97
  183. package/dist/common/utils/build-environment-prompt-choices.test.js.map +0 -1
  184. package/dist/common/utils/format-environment-type.test.d.ts +0 -2
  185. package/dist/common/utils/format-environment-type.test.d.ts.map +0 -1
  186. package/dist/common/utils/format-environment-type.test.js +0 -32
  187. package/dist/common/utils/format-environment-type.test.js.map +0 -1
  188. package/dist/common/utils/pnpm-lifecycle.test.d.ts +0 -2
  189. package/dist/common/utils/pnpm-lifecycle.test.d.ts.map +0 -1
  190. package/dist/common/utils/pnpm-lifecycle.test.js +0 -196
  191. package/dist/common/utils/pnpm-lifecycle.test.js.map +0 -1
  192. package/dist/common/utils/pretty-print-environment-prompt.test.d.ts +0 -2
  193. package/dist/common/utils/pretty-print-environment-prompt.test.d.ts.map +0 -1
  194. package/dist/common/utils/pretty-print-environment-prompt.test.js +0 -42
  195. package/dist/common/utils/pretty-print-environment-prompt.test.js.map +0 -1
  196. package/dist/common/utils/sort-environments-for-prompt.test.d.ts +0 -2
  197. package/dist/common/utils/sort-environments-for-prompt.test.d.ts.map +0 -1
  198. package/dist/common/utils/sort-environments-for-prompt.test.js +0 -82
  199. package/dist/common/utils/sort-environments-for-prompt.test.js.map +0 -1
  200. package/dist/common/utils/stringify-config.test.d.ts +0 -2
  201. package/dist/common/utils/stringify-config.test.d.ts.map +0 -1
  202. package/dist/common/utils/stringify-config.test.js +0 -80
  203. package/dist/common/utils/stringify-config.test.js.map +0 -1
  204. package/dist/common/validators/argument-validators.spec.d.ts +0 -2
  205. package/dist/common/validators/argument-validators.spec.d.ts.map +0 -1
  206. package/dist/common/validators/argument-validators.spec.js +0 -181
  207. package/dist/common/validators/argument-validators.spec.js.map +0 -1
  208. package/dist/deploy/archive.local-registry.test.d.ts +0 -2
  209. package/dist/deploy/archive.local-registry.test.d.ts.map +0 -1
  210. package/dist/deploy/archive.local-registry.test.js +0 -100
  211. package/dist/deploy/archive.local-registry.test.js.map +0 -1
  212. package/dist/deploy/archive.test.d.ts +0 -2
  213. package/dist/deploy/archive.test.d.ts.map +0 -1
  214. package/dist/deploy/archive.test.js +0 -248
  215. package/dist/deploy/archive.test.js.map +0 -1
  216. package/dist/deploy/classify-build-probe.test.d.ts +0 -2
  217. package/dist/deploy/classify-build-probe.test.d.ts.map +0 -1
  218. package/dist/deploy/classify-build-probe.test.js +0 -51
  219. package/dist/deploy/classify-build-probe.test.js.map +0 -1
  220. package/dist/deploy/poll-deployment.test.d.ts +0 -2
  221. package/dist/deploy/poll-deployment.test.d.ts.map +0 -1
  222. package/dist/deploy/poll-deployment.test.js +0 -158
  223. package/dist/deploy/poll-deployment.test.js.map +0 -1
  224. package/dist/dev/zuplo-local-gitignore.test.d.ts +0 -2
  225. package/dist/dev/zuplo-local-gitignore.test.d.ts.map +0 -1
  226. package/dist/dev/zuplo-local-gitignore.test.js +0 -58
  227. package/dist/dev/zuplo-local-gitignore.test.js.map +0 -1
  228. package/dist/editor/e2e/editor.spec.d.ts +0 -2
  229. package/dist/editor/e2e/editor.spec.d.ts.map +0 -1
  230. package/dist/editor/e2e/editor.spec.js +0 -44
  231. package/dist/editor/e2e/editor.spec.js.map +0 -1
  232. package/dist/link/project-type.test.d.ts +0 -2
  233. package/dist/link/project-type.test.d.ts.map +0 -1
  234. package/dist/link/project-type.test.js +0 -225
  235. package/dist/link/project-type.test.js.map +0 -1
  236. package/dist/lint/resolve-binary.test.d.ts +0 -2
  237. package/dist/lint/resolve-binary.test.d.ts.map +0 -1
  238. package/dist/lint/resolve-binary.test.js +0 -155
  239. package/dist/lint/resolve-binary.test.js.map +0 -1
  240. package/dist/open-api/convert/handler.spec.d.ts +0 -2
  241. package/dist/open-api/convert/handler.spec.d.ts.map +0 -1
  242. package/dist/open-api/convert/handler.spec.js +0 -301
  243. package/dist/open-api/convert/handler.spec.js.map +0 -1
  244. package/dist/open-api/merge/handler.spec.d.ts +0 -2
  245. package/dist/open-api/merge/handler.spec.d.ts.map +0 -1
  246. package/dist/open-api/merge/handler.spec.js +0 -673
  247. package/dist/open-api/merge/handler.spec.js.map +0 -1
  248. package/dist/open-api/overlay/handler.spec.d.ts +0 -2
  249. package/dist/open-api/overlay/handler.spec.d.ts.map +0 -1
  250. package/dist/open-api/overlay/handler.spec.js +0 -346
  251. package/dist/open-api/overlay/handler.spec.js.map +0 -1
  252. package/dist/source/ai-gateway/files.test.d.ts +0 -2
  253. package/dist/source/ai-gateway/files.test.d.ts.map +0 -1
  254. package/dist/source/ai-gateway/files.test.js +0 -135
  255. package/dist/source/ai-gateway/files.test.js.map +0 -1
  256. package/dist/source/ai-gateway/handler.test.d.ts +0 -2
  257. package/dist/source/ai-gateway/handler.test.d.ts.map +0 -1
  258. package/dist/source/ai-gateway/handler.test.js +0 -113
  259. package/dist/source/ai-gateway/handler.test.js.map +0 -1
  260. package/dist/source/ai-gateway/package.test.d.ts +0 -2
  261. package/dist/source/ai-gateway/package.test.d.ts.map +0 -1
  262. package/dist/source/ai-gateway/package.test.js +0 -30
  263. package/dist/source/ai-gateway/package.test.js.map +0 -1
  264. package/dist/source/ai-gateway/planner.test.d.ts +0 -2
  265. package/dist/source/ai-gateway/planner.test.d.ts.map +0 -1
  266. package/dist/source/ai-gateway/planner.test.js +0 -330
  267. package/dist/source/ai-gateway/planner.test.js.map +0 -1
  268. package/dist/source/ai-gateway/release.test.d.ts +0 -2
  269. package/dist/source/ai-gateway/release.test.d.ts.map +0 -1
  270. package/dist/source/ai-gateway/release.test.js +0 -62
  271. package/dist/source/ai-gateway/release.test.js.map +0 -1
  272. package/dist/test/invoke-test.test.d.ts +0 -2
  273. package/dist/test/invoke-test.test.d.ts.map +0 -1
  274. package/dist/test/invoke-test.test.js +0 -150
  275. package/dist/test/invoke-test.test.js.map +0 -1
  276. package/dist/test/test-files.test.d.ts +0 -2
  277. package/dist/test/test-files.test.d.ts.map +0 -1
  278. package/dist/test/test-files.test.js +0 -57
  279. package/dist/test/test-files.test.js.map +0 -1
  280. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.d.ts +0 -2
  281. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.d.ts.map +0 -1
  282. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.js +0 -289
  283. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.js.map +0 -1
  284. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.d.ts +0 -2
  285. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.d.ts.map +0 -1
  286. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.js +0 -181
  287. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.js.map +0 -1
  288. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.d.ts +0 -2
  289. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.d.ts.map +0 -1
  290. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.js +0 -399
  291. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.js.map +0 -1
  292. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.d.ts +0 -2
  293. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.d.ts.map +0 -1
  294. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.js +0 -779
  295. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.js.map +0 -1
  296. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.d.ts +0 -2
  297. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.d.ts.map +0 -1
  298. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.js +0 -269
  299. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.js.map +0 -1
  300. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.d.ts +0 -2
  301. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.d.ts.map +0 -1
  302. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.js +0 -93
  303. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.js.map +0 -1
  304. package/node_modules/@zuplo/runtime/out/esm/chunk-6YPRGG62.js.map +0 -1
  305. package/node_modules/@zuplo/runtime/out/esm/chunk-PBDT4FDO.js +0 -37
  306. package/node_modules/@zuplo/runtime/out/esm/chunk-PBDT4FDO.js.map +0 -1
  307. /package/node_modules/@zuplo/runtime/out/esm/{chunk-YJ2BHVUH.js.map → chunk-CDEAY3VY.js.map} +0 -0
  308. /package/node_modules/@zuplo/runtime/out/esm/{chunk-PBDT4FDO.js.LEGAL.txt → chunk-LVSZ3WTO.js.LEGAL.txt} +0 -0
  309. /package/node_modules/@zuplo/runtime/out/esm/{chunk-VTO3F6DK.js.map → chunk-NUVXDVLJ.js.map} +0 -0
  310. /package/node_modules/@zuplo/runtime/out/esm/{chunk-6YPRGG62.js.LEGAL.txt → chunk-RHU3Z7DA.js.LEGAL.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"tunnel.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/tunnel.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Integration tests for the tunnel commands (create and list)\n */\n/// <reference types=\"jest\" />\n\nimport nock from \"nock\";\nimport tmp from \"tmp\";\nimport yargs from \"yargs/yargs\";\nimport tunnelCommand from \"../../cmds/tunnel/index.js\";\nimport {\n cleanupTest,\n RequestCapture,\n setupAuthenticatedNock,\n setupTestEnvironment,\n TEST_ACCOUNT_NAME,\n TEST_API_BASE,\n TEST_AUTH_TOKEN,\n} from \"./test-utils.js\";\n\n/**\n * Execute tunnel command with given arguments using actual yargs command\n */\nasync function executeTunnelCommand(\n subcommand: \"create\" | \"list\" | \"delete\" | \"describe\" | \"rotate-token\",\n args: {\n account?: string;\n \"api-key\"?: string;\n \"tunnel-name\"?: string;\n \"tunnel-id\"?: string;\n }\n) {\n const yargsInstance = yargs([])\n .command(tunnelCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n // Build command line arguments\n const commandArgs = [\"tunnel\", subcommand];\n\n if (args.account) {\n commandArgs.push(\"--account\", args.account);\n }\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n if (args[\"tunnel-name\"]) {\n commandArgs.push(\"--tunnel-name\", args[\"tunnel-name\"]);\n }\n\n if (args[\"tunnel-id\"]) {\n commandArgs.push(\"--tunnel-id\", args[\"tunnel-id\"]);\n }\n\n // Parse and execute the command\n return await yargsInstance.parse(commandArgs);\n}\n\n/**\n * Execute tunnel services command with given arguments using actual yargs command\n */\nasync function executeTunnelServicesCommand(\n subcommand: \"describe\" | \"update\",\n args: {\n account?: string;\n \"api-key\"?: string;\n \"tunnel-id\"?: string;\n \"configuration-file\"?: string;\n }\n) {\n const yargsInstance = yargs([])\n .command(tunnelCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n // Build command line arguments\n const commandArgs = [\"tunnel\", \"services\", subcommand];\n\n if (args.account) {\n commandArgs.push(\"--account\", args.account);\n }\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n if (args[\"tunnel-id\"]) {\n commandArgs.push(\"--tunnel-id\", args[\"tunnel-id\"]);\n }\n\n if (args[\"configuration-file\"]) {\n commandArgs.push(\"--configuration-file\", args[\"configuration-file\"]);\n }\n\n // Parse and execute the command\n return await yargsInstance.parse(commandArgs);\n}\n\n// Get the mocked functions\nconst mockPrintResult = jest.mocked(\n require(\"../../common/output.js\").printResultToConsoleAndExitGracefully\n);\nconst mockPrintTable = jest.mocked(\n require(\"../../common/output.js\").printTableToConsoleAndExitGracefully\n);\nconst mockPrintDiagnostics = jest.mocked(\n require(\"../../common/output.js\").printDiagnosticsToConsole\n);\n\ndescribe(\"Tunnel Command Integration Tests\", () => {\n let requestCapture: RequestCapture;\n\n beforeEach(() => {\n setupTestEnvironment();\n requestCapture = new RequestCapture();\n\n // Disable real HTTP requests\n nock.disableNetConnect();\n\n // Clear mock calls from previous tests\n jest.clearAllMocks();\n });\n\n afterEach(() => {\n cleanupTest();\n requestCapture.clear();\n });\n\n describe(\"Tunnel Create Command\", () => {\n it(\"should intercept POST request to create tunnel\", async () => {\n const testTunnelName = \"my-test-tunnel\";\n const mockResponse = {\n id: \"tunnel-123\",\n name: testTunnelName,\n token: \"tunnel-token-abc123\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .reply(201, mockResponse);\n\n // Capture requests for snapshot testing\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n // Execute the tunnel create command through yargs\n await executeTunnelCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-name\": testTunnelName,\n });\n\n // Verify the request was made\n expect(scope.isDone()).toBe(true);\n\n // Verify the output function was called with tunnel info\n expect(mockPrintTable).toHaveBeenCalledWith(mockResponse);\n\n // Snapshot test for captured requests\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-create-requests\");\n\n // Verify request body\n const request = capturedRequests[0];\n expect(request.method).toBe(\"POST\");\n expect(request.body).toEqual({\n name: testTunnelName,\n });\n });\n\n it(\"should handle tunnel creation error\", async () => {\n const testTunnelName = \"invalid-tunnel\";\n const errorResponse = {\n error: \"Bad Request\",\n message: \"Tunnel name already exists\",\n statusCode: 400,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .reply(400, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeTunnelCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-name\": testTunnelName,\n })\n ).rejects.toThrow(\"Failed to create tunnel for account\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-create-error-requests\");\n });\n });\n\n describe(\"Tunnel List Command\", () => {\n it(\"should intercept GET request to list tunnels\", async () => {\n const mockResponse = {\n data: [\n { id: \"tunnel-123\", name: \"tunnel-1\" },\n { id: \"tunnel-456\", name: \"tunnel-2\" },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n\n // Verify the output function was called with formatted table\n const expectedTable = [\n { \"tunnel-id\": \"tunnel-123\", name: \"tunnel-1\" },\n { \"tunnel-id\": \"tunnel-456\", name: \"tunnel-2\" },\n ];\n expect(mockPrintTable).toHaveBeenCalledWith(expectedTable);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-list-requests\");\n });\n\n it(\"should handle empty tunnels list\", async () => {\n const mockResponse = { data: [] };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\"No tunnels found\");\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-list-empty-requests\");\n });\n\n it(\"should handle API error responses\", async () => {\n const errorResponse = {\n error: \"Forbidden\",\n message: \"Access denied\",\n statusCode: 403,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .reply(403, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeTunnelCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n })\n ).rejects.toThrow(\"Failed to list tunnels for account\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-list-error-requests\");\n });\n });\n\n describe(\"Tunnel Delete Command\", () => {\n it(\"should intercept DELETE request to delete tunnel\", async () => {\n const tunnelId = \"test-tunnel-123\";\n const mockTeardownResponse = {\n id: \"teardown-op-456\",\n status: \"in-progress\",\n };\n\n const mockCompletedTeardown = {\n id: \"teardown-op-456\",\n status: \"success\",\n message: \"Tunnel deleted successfully\",\n };\n\n // Mock the delete initiation\n const deleteScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}`)\n .reply(200, mockTeardownResponse);\n\n // Mock the polling endpoint\n const pollScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/teardown-operations/teardown-op-456`\n )\n .reply(200, mockCompletedTeardown);\n\n deleteScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n pollScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(deleteScope.isDone()).toBe(true);\n expect(pollScope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\n \"Tunnel test-tunnel-123 deleted successfully.\"\n );\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-delete-requests\");\n });\n\n it(\"should handle tunnel deletion error\", async () => {\n const tunnelId = \"nonexistent-tunnel\";\n const errorResponse = {\n error: \"Not Found\",\n message: \"Tunnel not found\",\n statusCode: 404,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}`)\n .reply(404, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeTunnelCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n })\n ).rejects.toThrow(\"Failed to delete tunnel for account\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-delete-error-requests\");\n });\n });\n\n describe(\"Tunnel Describe Command\", () => {\n it(\"should intercept GET request to describe tunnel\", async () => {\n const tunnelId = \"test-tunnel-123\";\n const mockTunnelDetails = {\n id: tunnelId,\n name: \"Test Tunnel\",\n status: \"active\",\n endpoint: \"https://test-tunnel.zuplo.dev\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}`)\n .reply(200, mockTunnelDetails);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"describe\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith(mockTunnelDetails);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-describe-requests\");\n });\n\n it(\"should handle tunnel describe error\", async () => {\n const tunnelId = \"nonexistent-tunnel\";\n const errorResponse = {\n error: \"Not Found\",\n message: \"Tunnel not found\",\n statusCode: 404,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}`)\n .reply(404, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeTunnelCommand(\"describe\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n })\n ).rejects.toThrow(\"Failed to describe tunnel for account\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-describe-error-requests\"\n );\n });\n });\n\n describe(\"Tunnel Rotate Token Command\", () => {\n it(\"should intercept POST request to rotate tunnel token\", async () => {\n const tunnelId = \"test-tunnel-123\";\n const mockTokenResponse = {\n tunnelId: tunnelId,\n newToken: \"new-token-abc123\",\n message: \"Token rotated successfully\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/$rotate-token`\n )\n .reply(200, mockTokenResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"rotate-token\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith(mockTokenResponse);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-rotate-token-requests\");\n });\n\n it(\"should handle token rotation error\", async () => {\n const tunnelId = \"nonexistent-tunnel\";\n const errorResponse = {\n error: \"Forbidden\",\n message: \"Access denied\",\n statusCode: 403,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/$rotate-token`\n )\n .reply(403, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeTunnelCommand(\"rotate-token\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n })\n ).rejects.toThrow(\"Failed to rotate token for tunnel\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-rotate-token-error-requests\"\n );\n });\n });\n\n describe(\"Tunnel Services Describe Command\", () => {\n it(\"should intercept GET request to describe tunnel services\", async () => {\n const tunnelId = \"test-tunnel-123\";\n const mockServicesResponse = {\n tunnelId: tunnelId,\n services: [\n { name: \"api-service\", port: 3000, status: \"running\" },\n { name: \"web-service\", port: 8080, status: \"running\" },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/services-configuration`\n )\n .reply(200, mockServicesResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelServicesCommand(\"describe\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\n JSON.stringify(mockServicesResponse, null, 2)\n );\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-services-describe-requests\"\n );\n });\n\n it(\"should handle services describe error\", async () => {\n const tunnelId = \"nonexistent-tunnel\";\n const errorResponse = {\n error: \"Not Found\",\n message: \"Tunnel not found\",\n statusCode: 404,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/services-configuration`\n )\n .reply(404, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeTunnelServicesCommand(\"describe\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n })\n ).rejects.toThrow(\"Failed to describe services for tunnel\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-services-describe-error-requests\"\n );\n });\n });\n\n describe(\"Tunnel Services Update Command\", () => {\n it(\"should handle services update error due to file not found\", async () => {\n const tunnelId = \"test-tunnel-123\";\n const configFile = \"/nonexistent/config.json\";\n\n // This test will fail during argument validation when file doesn't exist\n await expect(\n executeTunnelServicesCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n \"configuration-file\": configFile,\n })\n ).rejects.toThrow(\"--configuration-file: File not found:\");\n });\n\n it(\"should handle services update API error\", async () => {\n const tunnelId = \"test-tunnel-123\";\n // Create a secure temporary config file for testing\n const fs = require(\"node:fs\");\n const tmpFile = tmp.fileSync({ postfix: \".json\" });\n fs.writeFileSync(tmpFile.fd, '{\"services\": []}');\n const tempConfigFile = tmpFile.name;\n\n try {\n const errorResponse = {\n error: \"Bad Request\",\n message: \"Invalid configuration file\",\n statusCode: 400,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .put(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/services-configuration`\n )\n .reply(400, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeTunnelServicesCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n \"configuration-file\": tempConfigFile,\n })\n ).rejects.toThrow(\"Failed to update tunnel for account\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-services-update-error-requests\"\n );\n } finally {\n // Clean up temp file\n try {\n if (tmpFile && typeof tmpFile.removeCallback === \"function\") {\n tmpFile.removeCallback();\n }\n } catch {\n // Ignore cleanup errors\n }\n }\n });\n });\n\n describe(\"Request validation\", () => {\n it(\"should include correct headers for create request\", async () => {\n const testTunnelName = \"test-tunnel\";\n const mockResponse = {\n id: \"tunnel-123\",\n name: testTunnelName,\n token: \"tunnel-token-abc123\",\n };\n\n const scope = nock(TEST_API_BASE)\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .matchHeader(\"authorization\", `Bearer ${TEST_AUTH_TOKEN}`)\n .matchHeader(\"content-type\", \"application/json\")\n .reply(201, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-name\": testTunnelName,\n });\n\n expect(scope.isDone()).toBe(true);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-create-headers-validation\"\n );\n });\n\n it(\"should include correct headers for list request\", async () => {\n const mockResponse = { data: [{ id: \"tunnel-123\", name: \"tunnel-1\" }] };\n\n const scope = nock(TEST_API_BASE)\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .matchHeader(\"authorization\", `Bearer ${TEST_AUTH_TOKEN}`)\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-list-headers-validation\"\n );\n\n // Verify it's a GET request with no body\n const request = capturedRequests[0];\n expect(request.method).toBe(\"GET\");\n expect(request.body).toBeUndefined();\n });\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=variable.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"variable.integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/variable.integration.test.ts"],"names":[],"mappings":""}
@@ -1,258 +0,0 @@
1
- import nock from "nock";
2
- import yargs from "yargs/yargs";
3
- import variableCommand from "../../cmds/variable/index.js";
4
- import { cleanupTest, RequestCapture, setupAuthenticatedNock, setupTestEnvironment, TEST_ACCOUNT_NAME, TEST_API_BASE, TEST_AUTH_TOKEN, TEST_PROJECT_NAME, } from "./test-utils.js";
5
- async function executeVariableCommand(subcommand, args) {
6
- const yargsInstance = yargs([])
7
- .command(variableCommand)
8
- .help(false)
9
- .version(false)
10
- .exitProcess(false);
11
- const commandArgs = ["variable", subcommand];
12
- if (args.account) {
13
- commandArgs.push("--account", args.account);
14
- }
15
- if (args.project) {
16
- commandArgs.push("--project", args.project);
17
- }
18
- if (args["api-key"]) {
19
- commandArgs.push("--api-key", args["api-key"]);
20
- }
21
- commandArgs.push("--name", args.name);
22
- commandArgs.push("--value", args.value);
23
- commandArgs.push("--branch", args.branch);
24
- if (subcommand === "create") {
25
- if (args["is-secret"]) {
26
- commandArgs.push("--is-secret");
27
- }
28
- else {
29
- commandArgs.push("--is-secret", "false");
30
- }
31
- }
32
- return await yargsInstance.parse(commandArgs);
33
- }
34
- const mockPrintResult = jest.mocked(require("../../common/output.js").printResultToConsole);
35
- const mockPrintDiagnostics = jest.mocked(require("../../common/output.js").printDiagnosticsToConsole);
36
- describe("Variable Command Integration Tests", () => {
37
- let requestCapture;
38
- beforeEach(() => {
39
- setupTestEnvironment();
40
- requestCapture = new RequestCapture();
41
- nock.disableNetConnect();
42
- jest.clearAllMocks();
43
- });
44
- afterEach(() => {
45
- cleanupTest();
46
- requestCapture.clear();
47
- });
48
- describe("Variable Create Command", () => {
49
- it("should intercept POST request to create variable", async () => {
50
- const testBranch = "main";
51
- const testVariableName = "API_URL";
52
- const testValue = "https://api.example.com";
53
- const mockResponse = {
54
- name: testVariableName,
55
- "is-secret": false,
56
- value: testValue,
57
- branch: testBranch,
58
- createdOn: "2024-01-01T00:00:00Z",
59
- updatedOn: "2024-01-01T00:00:00Z",
60
- };
61
- const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
62
- .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`)
63
- .reply(201, mockResponse);
64
- scope.on("request", (req, interceptor, body) => {
65
- requestCapture.capture(req, interceptor, body);
66
- });
67
- await executeVariableCommand("create", {
68
- account: TEST_ACCOUNT_NAME,
69
- project: TEST_PROJECT_NAME,
70
- "api-key": TEST_AUTH_TOKEN,
71
- name: testVariableName,
72
- value: testValue,
73
- branch: testBranch,
74
- "is-secret": false,
75
- });
76
- expect(scope.isDone()).toBe(true);
77
- expect(mockPrintResult).toHaveBeenCalledWith(`${testVariableName} created successfully`);
78
- const capturedRequests = requestCapture.getRequests();
79
- expect(capturedRequests).toMatchSnapshot("variable-create-requests");
80
- const request = capturedRequests[0];
81
- expect(request.method).toBe("POST");
82
- expect(request.body).toEqual({
83
- name: testVariableName,
84
- isSecret: false,
85
- value: testValue,
86
- });
87
- });
88
- it("should handle secret variable creation", async () => {
89
- const testBranch = "production";
90
- const testVariableName = "DATABASE_PASSWORD";
91
- const testValue = "super-secret-password";
92
- const mockResponse = {
93
- name: testVariableName,
94
- "is-secret": true,
95
- value: "[REDACTED]",
96
- branch: testBranch,
97
- createdOn: "2024-01-01T00:00:00Z",
98
- updatedOn: "2024-01-01T00:00:00Z",
99
- };
100
- const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
101
- .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`)
102
- .reply(201, mockResponse);
103
- scope.on("request", (req, interceptor, body) => {
104
- requestCapture.capture(req, interceptor, body);
105
- });
106
- await executeVariableCommand("create", {
107
- account: TEST_ACCOUNT_NAME,
108
- project: TEST_PROJECT_NAME,
109
- "api-key": TEST_AUTH_TOKEN,
110
- name: testVariableName,
111
- value: testValue,
112
- branch: testBranch,
113
- "is-secret": true,
114
- });
115
- expect(scope.isDone()).toBe(true);
116
- expect(mockPrintResult).toHaveBeenCalledWith(`${testVariableName} created successfully`);
117
- const capturedRequests = requestCapture.getRequests();
118
- expect(capturedRequests).toMatchSnapshot("variable-create-secret-requests");
119
- const request = capturedRequests[0];
120
- expect(request.body).toEqual({
121
- name: testVariableName,
122
- isSecret: true,
123
- value: testValue,
124
- });
125
- });
126
- it("should handle variable creation error", async () => {
127
- const testBranch = "main";
128
- const testVariableName = "INVALID_VAR";
129
- const testValue = "test-value";
130
- const errorResponse = {
131
- error: "Bad Request",
132
- message: "Variable name already exists",
133
- statusCode: 400,
134
- };
135
- const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
136
- .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`)
137
- .reply(400, errorResponse);
138
- scope.on("request", (req, interceptor, body) => {
139
- requestCapture.capture(req, interceptor, body);
140
- });
141
- await expect(executeVariableCommand("create", {
142
- account: TEST_ACCOUNT_NAME,
143
- project: TEST_PROJECT_NAME,
144
- "api-key": TEST_AUTH_TOKEN,
145
- name: testVariableName,
146
- value: testValue,
147
- branch: testBranch,
148
- "is-secret": false,
149
- })).rejects.toThrow("Failed to create variable");
150
- expect(scope.isDone()).toBe(true);
151
- expect(mockPrintDiagnostics).toHaveBeenCalled();
152
- const capturedRequests = requestCapture.getRequests();
153
- expect(capturedRequests).toMatchSnapshot("variable-create-error-requests");
154
- });
155
- });
156
- describe("Variable Update Command", () => {
157
- it("should intercept PATCH request to update variable", async () => {
158
- const testBranch = "main";
159
- const testVariableName = "API_URL";
160
- const testValue = "https://api-v2.example.com";
161
- const mockResponse = {
162
- name: testVariableName,
163
- "is-secret": false,
164
- value: testValue,
165
- branch: testBranch,
166
- createdOn: "2024-01-01T00:00:00Z",
167
- updatedOn: "2024-01-02T00:00:00Z",
168
- };
169
- const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
170
- .patch(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables/${encodeURIComponent(testVariableName)}`)
171
- .reply(200, mockResponse);
172
- scope.on("request", (req, interceptor, body) => {
173
- requestCapture.capture(req, interceptor, body);
174
- });
175
- await executeVariableCommand("update", {
176
- account: TEST_ACCOUNT_NAME,
177
- project: TEST_PROJECT_NAME,
178
- "api-key": TEST_AUTH_TOKEN,
179
- name: testVariableName,
180
- value: testValue,
181
- branch: testBranch,
182
- });
183
- expect(scope.isDone()).toBe(true);
184
- expect(mockPrintResult).toHaveBeenCalledWith(`${testVariableName} updated successfully`);
185
- const capturedRequests = requestCapture.getRequests();
186
- expect(capturedRequests).toMatchSnapshot("variable-update-requests");
187
- const request = capturedRequests[0];
188
- expect(request.method).toBe("PATCH");
189
- expect(request.body).toEqual({
190
- value: testValue,
191
- });
192
- });
193
- it("should handle variable not found error", async () => {
194
- const testBranch = "main";
195
- const testVariableName = "NONEXISTENT_VAR";
196
- const testValue = "new-value";
197
- const errorResponse = {
198
- error: "Not Found",
199
- message: "Variable not found",
200
- statusCode: 404,
201
- };
202
- const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
203
- .patch(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables/${encodeURIComponent(testVariableName)}`)
204
- .reply(404, errorResponse);
205
- scope.on("request", (req, interceptor, body) => {
206
- requestCapture.capture(req, interceptor, body);
207
- });
208
- await expect(executeVariableCommand("update", {
209
- account: TEST_ACCOUNT_NAME,
210
- project: TEST_PROJECT_NAME,
211
- "api-key": TEST_AUTH_TOKEN,
212
- name: testVariableName,
213
- value: testValue,
214
- branch: testBranch,
215
- })).rejects.toThrow("Failed to update variable");
216
- expect(scope.isDone()).toBe(true);
217
- expect(mockPrintDiagnostics).toHaveBeenCalled();
218
- const capturedRequests = requestCapture.getRequests();
219
- expect(capturedRequests).toMatchSnapshot("variable-update-error-requests");
220
- });
221
- });
222
- describe("Request validation", () => {
223
- it("should include correct headers and content-type", async () => {
224
- const testBranch = "main";
225
- const testVariableName = "TEST_VAR";
226
- const testValue = "test-value";
227
- const mockResponse = {
228
- name: testVariableName,
229
- "is-secret": false,
230
- value: testValue,
231
- branch: testBranch,
232
- createdOn: "2024-01-01T00:00:00Z",
233
- updatedOn: "2024-01-01T00:00:00Z",
234
- };
235
- const scope = nock(TEST_API_BASE)
236
- .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`)
237
- .matchHeader("authorization", `Bearer ${TEST_AUTH_TOKEN}`)
238
- .matchHeader("content-type", "application/json")
239
- .reply(201, mockResponse);
240
- scope.on("request", (req, interceptor, body) => {
241
- requestCapture.capture(req, interceptor, body);
242
- });
243
- await executeVariableCommand("create", {
244
- account: TEST_ACCOUNT_NAME,
245
- project: TEST_PROJECT_NAME,
246
- "api-key": TEST_AUTH_TOKEN,
247
- name: testVariableName,
248
- value: testValue,
249
- branch: testBranch,
250
- "is-secret": false,
251
- });
252
- expect(scope.isDone()).toBe(true);
253
- const capturedRequests = requestCapture.getRequests();
254
- expect(capturedRequests).toMatchSnapshot("variable-headers-validation");
255
- });
256
- });
257
- });
258
- //# sourceMappingURL=variable.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"variable.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/variable.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Integration tests for the variable commands (create and update)\n */\n/// <reference types=\"jest\" />\nimport nock from \"nock\";\nimport yargs from \"yargs/yargs\";\nimport variableCommand from \"../../cmds/variable/index.js\";\nimport {\n cleanupTest,\n RequestCapture,\n setupAuthenticatedNock,\n setupTestEnvironment,\n TEST_ACCOUNT_NAME,\n TEST_API_BASE,\n TEST_AUTH_TOKEN,\n TEST_PROJECT_NAME,\n} from \"./test-utils.js\";\n\n/**\n * Execute variable command with given arguments using actual yargs command\n */\nasync function executeVariableCommand(\n subcommand: \"create\" | \"update\",\n args: {\n account?: string;\n project?: string;\n \"api-key\"?: string;\n name: string;\n value: string;\n branch: string;\n \"is-secret\"?: boolean;\n }\n) {\n const yargsInstance = yargs([])\n .command(variableCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n // Build command line arguments\n const commandArgs = [\"variable\", subcommand];\n\n if (args.account) {\n commandArgs.push(\"--account\", args.account);\n }\n\n if (args.project) {\n commandArgs.push(\"--project\", args.project);\n }\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n commandArgs.push(\"--name\", args.name);\n commandArgs.push(\"--value\", args.value);\n commandArgs.push(\"--branch\", args.branch);\n\n if (subcommand === \"create\") {\n // is-secret is required for create command\n if (args[\"is-secret\"]) {\n commandArgs.push(\"--is-secret\");\n } else {\n commandArgs.push(\"--is-secret\", \"false\");\n }\n }\n\n // Parse and execute the command\n return await yargsInstance.parse(commandArgs);\n}\n\n// Get the mocked functions\nconst mockPrintResult = jest.mocked(\n require(\"../../common/output.js\").printResultToConsole\n);\nconst mockPrintDiagnostics = jest.mocked(\n require(\"../../common/output.js\").printDiagnosticsToConsole\n);\n\ndescribe(\"Variable Command Integration Tests\", () => {\n let requestCapture: RequestCapture;\n\n beforeEach(() => {\n setupTestEnvironment();\n requestCapture = new RequestCapture();\n\n // Disable real HTTP requests\n nock.disableNetConnect();\n\n // Clear mock calls from previous tests\n jest.clearAllMocks();\n });\n\n afterEach(() => {\n cleanupTest();\n requestCapture.clear();\n });\n\n describe(\"Variable Create Command\", () => {\n it(\"should intercept POST request to create variable\", async () => {\n const testBranch = \"main\";\n const testVariableName = \"API_URL\";\n const testValue = \"https://api.example.com\";\n const mockResponse = {\n name: testVariableName,\n \"is-secret\": false,\n value: testValue,\n branch: testBranch,\n createdOn: \"2024-01-01T00:00:00Z\",\n updatedOn: \"2024-01-01T00:00:00Z\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`\n )\n .reply(201, mockResponse);\n\n // Capture requests for snapshot testing\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n // Execute the variable create command through yargs\n await executeVariableCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n \"is-secret\": false,\n });\n\n // Verify the request was made\n expect(scope.isDone()).toBe(true);\n\n // Verify the output function was called\n expect(mockPrintResult).toHaveBeenCalledWith(\n `${testVariableName} created successfully`\n );\n\n // Snapshot test for captured requests\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"variable-create-requests\");\n\n // Verify request body\n const request = capturedRequests[0];\n expect(request.method).toBe(\"POST\");\n expect(request.body).toEqual({\n name: testVariableName,\n isSecret: false,\n value: testValue,\n });\n });\n\n it(\"should handle secret variable creation\", async () => {\n const testBranch = \"production\";\n const testVariableName = \"DATABASE_PASSWORD\";\n const testValue = \"super-secret-password\";\n const mockResponse = {\n name: testVariableName,\n \"is-secret\": true,\n value: \"[REDACTED]\",\n branch: testBranch,\n createdOn: \"2024-01-01T00:00:00Z\",\n updatedOn: \"2024-01-01T00:00:00Z\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`\n )\n .reply(201, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeVariableCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n \"is-secret\": true,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\n `${testVariableName} created successfully`\n );\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"variable-create-secret-requests\"\n );\n\n // Verify secret flag is set correctly\n const request = capturedRequests[0];\n expect(request.body).toEqual({\n name: testVariableName,\n isSecret: true,\n value: testValue,\n });\n });\n\n it(\"should handle variable creation error\", async () => {\n const testBranch = \"main\";\n const testVariableName = \"INVALID_VAR\";\n const testValue = \"test-value\";\n const errorResponse = {\n error: \"Bad Request\",\n message: \"Variable name already exists\",\n statusCode: 400,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`\n )\n .reply(400, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeVariableCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n \"is-secret\": false,\n })\n ).rejects.toThrow(\"Failed to create variable\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"variable-create-error-requests\"\n );\n });\n });\n\n describe(\"Variable Update Command\", () => {\n it(\"should intercept PATCH request to update variable\", async () => {\n const testBranch = \"main\";\n const testVariableName = \"API_URL\";\n const testValue = \"https://api-v2.example.com\";\n const mockResponse = {\n name: testVariableName,\n \"is-secret\": false,\n value: testValue,\n branch: testBranch,\n createdOn: \"2024-01-01T00:00:00Z\",\n updatedOn: \"2024-01-02T00:00:00Z\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .patch(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables/${encodeURIComponent(testVariableName)}`\n )\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeVariableCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\n `${testVariableName} updated successfully`\n );\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"variable-update-requests\");\n\n // Verify request body contains only value for update\n const request = capturedRequests[0];\n expect(request.method).toBe(\"PATCH\");\n expect(request.body).toEqual({\n value: testValue,\n });\n });\n\n it(\"should handle variable not found error\", async () => {\n const testBranch = \"main\";\n const testVariableName = \"NONEXISTENT_VAR\";\n const testValue = \"new-value\";\n const errorResponse = {\n error: \"Not Found\",\n message: \"Variable not found\",\n statusCode: 404,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .patch(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables/${encodeURIComponent(testVariableName)}`\n )\n .reply(404, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeVariableCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n })\n ).rejects.toThrow(\"Failed to update variable\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"variable-update-error-requests\"\n );\n });\n });\n\n describe(\"Request validation\", () => {\n it(\"should include correct headers and content-type\", async () => {\n const testBranch = \"main\";\n const testVariableName = \"TEST_VAR\";\n const testValue = \"test-value\";\n const mockResponse = {\n name: testVariableName,\n \"is-secret\": false,\n value: testValue,\n branch: testBranch,\n createdOn: \"2024-01-01T00:00:00Z\",\n updatedOn: \"2024-01-01T00:00:00Z\",\n };\n\n const scope = nock(TEST_API_BASE)\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`\n )\n .matchHeader(\"authorization\", `Bearer ${TEST_AUTH_TOKEN}`)\n .matchHeader(\"content-type\", \"application/json\")\n .reply(201, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeVariableCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n \"is-secret\": false,\n });\n\n expect(scope.isDone()).toBe(true);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"variable-headers-validation\");\n });\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=whoami.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/whoami.integration.test.ts"],"names":[],"mappings":""}
@@ -1,116 +0,0 @@
1
- import nock from "nock";
2
- import yargs from "yargs/yargs";
3
- import whoamiCommand from "../../cmds/whoami.js";
4
- import { getAuthToken } from "../../login/tokens.js";
5
- import { cleanupTest, RequestCapture, setupAuthenticatedNock, setupTestEnvironment, TEST_API_BASE, TEST_AUTH_TOKEN, } from "./test-utils.js";
6
- const TEST_SUB = "google-oauth2|123456789";
7
- const TEST_EMAIL = "user@example.com";
8
- const TEST_ACCOUNT = "chocolate-blizzard";
9
- async function executeWhoamiCommand(args) {
10
- const yargsInstance = yargs([])
11
- .command(whoamiCommand)
12
- .help(false)
13
- .version(false)
14
- .exitProcess(false);
15
- const commandArgs = ["whoami"];
16
- if (args["api-key"]) {
17
- commandArgs.push("--api-key", args["api-key"]);
18
- }
19
- return await yargsInstance.parse(commandArgs);
20
- }
21
- const mockPrintResult = jest.mocked(require("../../common/output.js").printResultToConsoleAndExitGracefully);
22
- const mockPrintCriticalFailure = jest.mocked(require("../../common/output.js").printCriticalFailureToConsoleAndExit);
23
- describe("Whoami Command Integration Tests", () => {
24
- let requestCapture;
25
- beforeEach(() => {
26
- setupTestEnvironment();
27
- nock.cleanAll();
28
- requestCapture = new RequestCapture();
29
- nock.disableNetConnect();
30
- jest.clearAllMocks();
31
- });
32
- afterEach(() => {
33
- cleanupTest();
34
- requestCapture.clear();
35
- });
36
- it("should print sub when only sub is returned", async () => {
37
- setupAuthenticatedNock(nock(TEST_API_BASE))
38
- .get("/v1/who-am-i")
39
- .reply(200, { sub: TEST_SUB });
40
- await executeWhoamiCommand({
41
- "api-key": TEST_AUTH_TOKEN,
42
- });
43
- expect(mockPrintResult).toHaveBeenCalledWith(`Authenticated as ${TEST_SUB}`);
44
- });
45
- it("should include email and account when returned", async () => {
46
- setupAuthenticatedNock(nock(TEST_API_BASE)).get("/v1/who-am-i").reply(200, {
47
- sub: TEST_SUB,
48
- email: TEST_EMAIL,
49
- account: TEST_ACCOUNT,
50
- });
51
- await executeWhoamiCommand({
52
- "api-key": TEST_AUTH_TOKEN,
53
- });
54
- expect(mockPrintResult).toHaveBeenCalledWith(`Authenticated as ${TEST_EMAIL} (${TEST_SUB})\nAccount: ${TEST_ACCOUNT}`);
55
- });
56
- it("should include account without email when only account is returned", async () => {
57
- setupAuthenticatedNock(nock(TEST_API_BASE))
58
- .get("/v1/who-am-i")
59
- .reply(200, { sub: TEST_SUB, account: TEST_ACCOUNT });
60
- await executeWhoamiCommand({
61
- "api-key": TEST_AUTH_TOKEN,
62
- });
63
- expect(mockPrintResult).toHaveBeenCalledWith(`Authenticated as ${TEST_SUB}\nAccount: ${TEST_ACCOUNT}`);
64
- });
65
- it("should include the authorization header", async () => {
66
- const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
67
- .get("/v1/who-am-i")
68
- .matchHeader("authorization", `Bearer ${TEST_AUTH_TOKEN}`)
69
- .reply(200, { sub: TEST_SUB });
70
- scope.on("request", (req, interceptor, body) => {
71
- requestCapture.capture(req, interceptor, body);
72
- });
73
- await executeWhoamiCommand({
74
- "api-key": TEST_AUTH_TOKEN,
75
- });
76
- expect(scope.isDone()).toBe(true);
77
- expect(mockPrintResult).toHaveBeenCalledWith(`Authenticated as ${TEST_SUB}`);
78
- });
79
- it("should fall back to the stored auth token when --api-key is omitted", async () => {
80
- const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
81
- .get("/v1/who-am-i")
82
- .matchHeader("authorization", `Bearer ${TEST_AUTH_TOKEN}`)
83
- .reply(200, { sub: TEST_SUB, email: TEST_EMAIL });
84
- await executeWhoamiCommand({});
85
- expect(scope.isDone()).toBe(true);
86
- expect(jest.mocked(getAuthToken)).toHaveBeenCalled();
87
- expect(mockPrintResult).toHaveBeenCalledWith(`Authenticated as ${TEST_EMAIL} (${TEST_SUB})`);
88
- });
89
- it("should fall back to the stored auth token when --api-key is empty", async () => {
90
- const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
91
- .get("/v1/who-am-i")
92
- .matchHeader("authorization", `Bearer ${TEST_AUTH_TOKEN}`)
93
- .reply(200, { sub: TEST_SUB });
94
- await executeWhoamiCommand({ "api-key": " " });
95
- expect(scope.isDone()).toBe(true);
96
- expect(jest.mocked(getAuthToken)).toHaveBeenCalled();
97
- expect(mockPrintResult).toHaveBeenCalledWith(`Authenticated as ${TEST_SUB}`);
98
- });
99
- it("should report logged out when no auth token is available", async () => {
100
- jest.mocked(getAuthToken).mockResolvedValueOnce(undefined);
101
- await executeWhoamiCommand({});
102
- expect(mockPrintResult).toHaveBeenCalledWith("You are logged out");
103
- expect(mockPrintCriticalFailure).not.toHaveBeenCalled();
104
- });
105
- it("should fail when the API returns an error", async () => {
106
- const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
107
- .get("/v1/who-am-i")
108
- .reply(401, { error: "Unauthorized" });
109
- await expect(executeWhoamiCommand({
110
- "api-key": TEST_AUTH_TOKEN,
111
- })).rejects.toThrow("Failed to determine current user");
112
- expect(scope.isDone()).toBe(true);
113
- expect(mockPrintCriticalFailure).not.toHaveBeenCalled();
114
- });
115
- });
116
- //# sourceMappingURL=whoami.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/whoami.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Integration tests for the whoami command\n */\n/// <reference types=\"jest\" />\nimport nock from \"nock\";\nimport yargs from \"yargs/yargs\";\nimport whoamiCommand from \"../../cmds/whoami.js\";\nimport { getAuthToken } from \"../../login/tokens.js\";\nimport {\n cleanupTest,\n RequestCapture,\n setupAuthenticatedNock,\n setupTestEnvironment,\n TEST_API_BASE,\n TEST_AUTH_TOKEN,\n} from \"./test-utils.js\";\n\nconst TEST_SUB = \"google-oauth2|123456789\";\nconst TEST_EMAIL = \"user@example.com\";\nconst TEST_ACCOUNT = \"chocolate-blizzard\";\n\nasync function executeWhoamiCommand(args: { \"api-key\"?: string }) {\n const yargsInstance = yargs([])\n .command(whoamiCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n const commandArgs = [\"whoami\"];\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n return await yargsInstance.parse(commandArgs);\n}\n\nconst mockPrintResult = jest.mocked(\n require(\"../../common/output.js\").printResultToConsoleAndExitGracefully\n);\nconst mockPrintCriticalFailure = jest.mocked(\n require(\"../../common/output.js\").printCriticalFailureToConsoleAndExit\n);\n\ndescribe(\"Whoami Command Integration Tests\", () => {\n let requestCapture: RequestCapture;\n\n beforeEach(() => {\n setupTestEnvironment();\n nock.cleanAll();\n requestCapture = new RequestCapture();\n\n nock.disableNetConnect();\n\n jest.clearAllMocks();\n });\n\n afterEach(() => {\n cleanupTest();\n requestCapture.clear();\n });\n\n it(\"should print sub when only sub is returned\", async () => {\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\"/v1/who-am-i\")\n .reply(200, { sub: TEST_SUB });\n\n await executeWhoamiCommand({\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(mockPrintResult).toHaveBeenCalledWith(\n `Authenticated as ${TEST_SUB}`\n );\n });\n\n it(\"should include email and account when returned\", async () => {\n setupAuthenticatedNock(nock(TEST_API_BASE)).get(\"/v1/who-am-i\").reply(200, {\n sub: TEST_SUB,\n email: TEST_EMAIL,\n account: TEST_ACCOUNT,\n });\n\n await executeWhoamiCommand({\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(mockPrintResult).toHaveBeenCalledWith(\n `Authenticated as ${TEST_EMAIL} (${TEST_SUB})\\nAccount: ${TEST_ACCOUNT}`\n );\n });\n\n it(\"should include account without email when only account is returned\", async () => {\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\"/v1/who-am-i\")\n .reply(200, { sub: TEST_SUB, account: TEST_ACCOUNT });\n\n await executeWhoamiCommand({\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(mockPrintResult).toHaveBeenCalledWith(\n `Authenticated as ${TEST_SUB}\\nAccount: ${TEST_ACCOUNT}`\n );\n });\n\n it(\"should include the authorization header\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\"/v1/who-am-i\")\n .matchHeader(\"authorization\", `Bearer ${TEST_AUTH_TOKEN}`)\n .reply(200, { sub: TEST_SUB });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeWhoamiCommand({\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\n `Authenticated as ${TEST_SUB}`\n );\n });\n\n it(\"should fall back to the stored auth token when --api-key is omitted\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\"/v1/who-am-i\")\n .matchHeader(\"authorization\", `Bearer ${TEST_AUTH_TOKEN}`)\n .reply(200, { sub: TEST_SUB, email: TEST_EMAIL });\n\n await executeWhoamiCommand({});\n\n expect(scope.isDone()).toBe(true);\n expect(jest.mocked(getAuthToken)).toHaveBeenCalled();\n expect(mockPrintResult).toHaveBeenCalledWith(\n `Authenticated as ${TEST_EMAIL} (${TEST_SUB})`\n );\n });\n\n it(\"should fall back to the stored auth token when --api-key is empty\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\"/v1/who-am-i\")\n .matchHeader(\"authorization\", `Bearer ${TEST_AUTH_TOKEN}`)\n .reply(200, { sub: TEST_SUB });\n\n await executeWhoamiCommand({ \"api-key\": \" \" });\n\n expect(scope.isDone()).toBe(true);\n expect(jest.mocked(getAuthToken)).toHaveBeenCalled();\n expect(mockPrintResult).toHaveBeenCalledWith(\n `Authenticated as ${TEST_SUB}`\n );\n });\n\n it(\"should report logged out when no auth token is available\", async () => {\n jest.mocked(getAuthToken).mockResolvedValueOnce(undefined);\n\n await executeWhoamiCommand({});\n\n expect(mockPrintResult).toHaveBeenCalledWith(\"You are logged out\");\n expect(mockPrintCriticalFailure).not.toHaveBeenCalled();\n });\n\n it(\"should fail when the API returns an error\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\"/v1/who-am-i\")\n .reply(401, { error: \"Unauthorized\" });\n\n await expect(\n executeWhoamiCommand({\n \"api-key\": TEST_AUTH_TOKEN,\n })\n ).rejects.toThrow(\"Failed to determine current user\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintCriticalFailure).not.toHaveBeenCalled();\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=outdated.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"outdated.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/outdated.test.ts"],"names":[],"mappings":""}