@zuplo/cli 6.43.10 → 6.43.12

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 (145) hide show
  1. package/README.md +31 -31
  2. package/dist/__tests__/archive-utils.test.js +2 -2
  3. package/dist/__tests__/archive-utils.test.js.map +1 -1
  4. package/dist/cli.js +1 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/cmds/build.js +2 -2
  7. package/dist/cmds/build.js.map +1 -1
  8. package/dist/cmds/compile.js +4 -4
  9. package/dist/cmds/compile.js.map +1 -1
  10. package/dist/cmds/convert.js +1 -1
  11. package/dist/cmds/convert.js.map +1 -1
  12. package/dist/cmds/delete.d.ts.map +1 -1
  13. package/dist/cmds/delete.js +7 -6
  14. package/dist/cmds/delete.js.map +1 -1
  15. package/dist/cmds/deploy.d.ts.map +1 -1
  16. package/dist/cmds/deploy.js +4 -4
  17. package/dist/cmds/deploy.js.map +1 -1
  18. package/dist/cmds/dev.js +3 -3
  19. package/dist/cmds/dev.js.map +1 -1
  20. package/dist/cmds/editor.js +2 -2
  21. package/dist/cmds/editor.js.map +1 -1
  22. package/dist/cmds/link.d.ts.map +1 -1
  23. package/dist/cmds/link.js +4 -4
  24. package/dist/cmds/link.js.map +1 -1
  25. package/dist/cmds/list.d.ts.map +1 -1
  26. package/dist/cmds/list.js +3 -3
  27. package/dist/cmds/list.js.map +1 -1
  28. package/dist/cmds/login.d.ts.map +1 -1
  29. package/dist/cmds/login.js +3 -8
  30. package/dist/cmds/login.js.map +1 -1
  31. package/dist/cmds/project/import-openapi.js +1 -1
  32. package/dist/cmds/project/import-openapi.js.map +1 -1
  33. package/dist/cmds/project/update.js +2 -2
  34. package/dist/cmds/project/update.js.map +1 -1
  35. package/dist/cmds/test.js +3 -3
  36. package/dist/cmds/test.js.map +1 -1
  37. package/dist/cmds/tunnel/create.d.ts.map +1 -1
  38. package/dist/cmds/tunnel/create.js +4 -3
  39. package/dist/cmds/tunnel/create.js.map +1 -1
  40. package/dist/cmds/tunnel/delete.d.ts.map +1 -1
  41. package/dist/cmds/tunnel/delete.js +3 -3
  42. package/dist/cmds/tunnel/delete.js.map +1 -1
  43. package/dist/cmds/tunnel/describe.d.ts.map +1 -1
  44. package/dist/cmds/tunnel/describe.js +4 -3
  45. package/dist/cmds/tunnel/describe.js.map +1 -1
  46. package/dist/cmds/tunnel/list.js +1 -1
  47. package/dist/cmds/tunnel/list.js.map +1 -1
  48. package/dist/cmds/tunnel/rotate-token.d.ts.map +1 -1
  49. package/dist/cmds/tunnel/rotate-token.js +4 -3
  50. package/dist/cmds/tunnel/rotate-token.js.map +1 -1
  51. package/dist/cmds/tunnel/services/describe.d.ts.map +1 -1
  52. package/dist/cmds/tunnel/services/describe.js +4 -3
  53. package/dist/cmds/tunnel/services/describe.js.map +1 -1
  54. package/dist/cmds/tunnel/services/update.d.ts.map +1 -1
  55. package/dist/cmds/tunnel/services/update.js +4 -3
  56. package/dist/cmds/tunnel/services/update.js.map +1 -1
  57. package/dist/cmds/variable/create.d.ts.map +1 -1
  58. package/dist/cmds/variable/create.js +4 -3
  59. package/dist/cmds/variable/create.js.map +1 -1
  60. package/dist/cmds/variable/update.d.ts.map +1 -1
  61. package/dist/cmds/variable/update.js +9 -3
  62. package/dist/cmds/variable/update.js.map +1 -1
  63. package/dist/common/middleware/authentication.d.ts +4 -0
  64. package/dist/common/middleware/authentication.d.ts.map +1 -0
  65. package/dist/common/middleware/authentication.js +46 -0
  66. package/dist/common/middleware/authentication.js.map +1 -0
  67. package/dist/common/middleware/user-configuration.js +1 -1
  68. package/dist/common/middleware/user-configuration.js.map +1 -1
  69. package/dist/common/middleware/user-identification.js.map +1 -1
  70. package/dist/common/settings.d.ts +0 -1
  71. package/dist/common/settings.d.ts.map +1 -1
  72. package/dist/common/settings.js +0 -3
  73. package/dist/common/settings.js.map +1 -1
  74. package/dist/common/upgraders/package-json-upgrader.js +4 -4
  75. package/dist/common/upgraders/package-json-upgrader.js.map +1 -1
  76. package/dist/delete/handler.d.ts +1 -1
  77. package/dist/delete/handler.js +2 -2
  78. package/dist/delete/handler.js.map +1 -1
  79. package/dist/delete/poll-deployment.js +1 -1
  80. package/dist/delete/poll-deployment.js.map +1 -1
  81. package/dist/deploy/environments.js +2 -2
  82. package/dist/deploy/environments.js.map +1 -1
  83. package/dist/deploy/handler.d.ts +1 -1
  84. package/dist/deploy/handler.js +4 -4
  85. package/dist/deploy/handler.js.map +1 -1
  86. package/dist/deploy/poll-deployment.js +2 -2
  87. package/dist/deploy/poll-deployment.js.map +1 -1
  88. package/dist/link/handler.d.ts +1 -1
  89. package/dist/link/handler.js +4 -4
  90. package/dist/link/handler.js.map +1 -1
  91. package/dist/link/populate.d.ts +1 -1
  92. package/dist/link/populate.d.ts.map +1 -1
  93. package/dist/link/populate.js +3 -3
  94. package/dist/link/populate.js.map +1 -1
  95. package/dist/list/handler.d.ts +1 -1
  96. package/dist/list/handler.js +2 -2
  97. package/dist/list/handler.js.map +1 -1
  98. package/dist/login/handler.d.ts +1 -4
  99. package/dist/login/handler.d.ts.map +1 -1
  100. package/dist/login/handler.js +3 -6
  101. package/dist/login/handler.js.map +1 -1
  102. package/dist/login/html.d.ts +2 -0
  103. package/dist/login/html.d.ts.map +1 -0
  104. package/dist/login/html.js +84 -0
  105. package/dist/login/html.js.map +1 -0
  106. package/dist/login/server.d.ts.map +1 -1
  107. package/dist/login/server.js +4 -2
  108. package/dist/login/server.js.map +1 -1
  109. package/dist/tsconfig.tsbuildinfo +1 -1
  110. package/dist/tunnel/create/handler.d.ts +1 -1
  111. package/dist/tunnel/create/handler.js +1 -1
  112. package/dist/tunnel/create/handler.js.map +1 -1
  113. package/dist/tunnel/delete/handler.d.ts +1 -1
  114. package/dist/tunnel/delete/handler.js +1 -1
  115. package/dist/tunnel/delete/handler.js.map +1 -1
  116. package/dist/tunnel/delete/poll-teardown-operation.js +2 -2
  117. package/dist/tunnel/delete/poll-teardown-operation.js.map +1 -1
  118. package/dist/tunnel/describe/handler.d.ts +1 -1
  119. package/dist/tunnel/describe/handler.js +1 -1
  120. package/dist/tunnel/describe/handler.js.map +1 -1
  121. package/dist/tunnel/list/handler.d.ts +1 -1
  122. package/dist/tunnel/list/handler.js +1 -1
  123. package/dist/tunnel/list/handler.js.map +1 -1
  124. package/dist/tunnel/rotate-token/handler.d.ts +1 -1
  125. package/dist/tunnel/rotate-token/handler.js +1 -1
  126. package/dist/tunnel/rotate-token/handler.js.map +1 -1
  127. package/dist/tunnel/services/describe/handler.d.ts +1 -1
  128. package/dist/tunnel/services/describe/handler.js +1 -1
  129. package/dist/tunnel/services/describe/handler.js.map +1 -1
  130. package/dist/tunnel/services/update/handler.d.ts +1 -1
  131. package/dist/tunnel/services/update/handler.js +1 -1
  132. package/dist/tunnel/services/update/handler.js.map +1 -1
  133. package/dist/tunnel/services/update/poll-provisioning-operations.js +2 -2
  134. package/dist/tunnel/services/update/poll-provisioning-operations.js.map +1 -1
  135. package/dist/variable/create/handler.js +1 -1
  136. package/dist/variable/create/handler.js.map +1 -1
  137. package/dist/variable/models.d.ts +1 -1
  138. package/dist/variable/models.js.map +1 -1
  139. package/dist/variable/update/handler.js +1 -1
  140. package/dist/variable/update/handler.js.map +1 -1
  141. package/package.json +4 -4
  142. package/dist/common/validators/login-state-validator.d.ts +0 -14
  143. package/dist/common/validators/login-state-validator.d.ts.map +0 -1
  144. package/dist/common/validators/login-state-validator.js +0 -39
  145. package/dist/common/validators/login-state-validator.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/link/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { select } from \"@inquirer/prompts\";\nimport { Environment, Project } from \"../common/api/lib.js\";\nimport { logger } from \"../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printResultToConsoleAndExitGracefully,\n textOrJson,\n} from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { pullSystemConfig, safeMergeConfig } from \"./populate.js\";\n\nexport interface Arguments {\n dir: string;\n \"api-key\": string;\n account?: string;\n project?: string;\n environment?: string;\n}\n\nfunction prettyPrintEnvironmentPrompt(\n env: Environment,\n hasSingleDevelopmentInstance: boolean\n) {\n let environmentType = env.environmentType.toLowerCase();\n let branchName = env.branchName;\n let name = env.name;\n\n switch (environmentType) {\n case \"working-copy\":\n case \"working_copy\":\n case \"development\":\n if (hasSingleDevelopmentInstance) {\n name = \"Default for local development\";\n environmentType = \"development\";\n branchName = \"\";\n return `${name} (${environmentType})`;\n } else {\n // For the case of working copy the branch name is actually \"main\" but it doesn't mean anything\n environmentType = \"development\";\n branchName = \"\";\n return `${name} (${environmentType})`;\n }\n }\n return `${name} (${environmentType}, ${branchName})`;\n}\n\nexport async function link(argv: Arguments) {\n const account = argv.account;\n let environment = argv.environment;\n\n // List the projects\n let project = argv.project;\n if (!environment && !project) {\n const projectResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/projects`,\n {\n headers: {\n authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n }\n );\n\n if (!projectResponse.ok) {\n logger.error(\n {\n status: projectResponse.status,\n statusText: projectResponse.statusText,\n response: textOrJson(await projectResponse.text()),\n },\n \"Failed to list projects.\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to list your projects. Try again later.\"\n );\n }\n\n // Ask the user to select a project, if necessary\n const projectJson = (await projectResponse.json()) as { data: Project[] };\n if (projectJson.data.length === 1) {\n project = projectJson.data[0].name;\n } else {\n project = await select({\n message: \"Select the project to work with\",\n choices: projectJson.data.map((prj) => {\n return {\n name: prj.name,\n value: prj.name,\n };\n }),\n });\n }\n }\n\n if (!environment) {\n const baseUrl = `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/environments`;\n\n const queryParams: Record<string, string> = {\n // This is safe because of the flow above where we finalize the account and project\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n accountName: account!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n projectName: project!,\n };\n\n // Create the query string using URLSearchParams\n const url = new URL(baseUrl);\n url.search = new URLSearchParams(queryParams).toString();\n let environmentResponseFromDeveloperAPI = await fetch(url, {\n headers: {\n authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n });\n\n if (!environmentResponseFromDeveloperAPI.ok) {\n logger.error(\n {\n status: environmentResponseFromDeveloperAPI.status,\n statusText: environmentResponseFromDeveloperAPI.statusText,\n },\n \"Failed to link to a project in your account\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Check that the project specified in your zuplo.jsonc exists and that you have access to it.\"\n );\n }\n\n let environmentJsonFromDeveloperAPI =\n (await environmentResponseFromDeveloperAPI.json()) as {\n data: Environment[];\n };\n\n let numDevelopmentEnvironments =\n environmentJsonFromDeveloperAPI.data.filter((env) => {\n return env.environmentType === \"development\";\n }).length;\n\n if (numDevelopmentEnvironments <= 0) {\n // Create one on-the-fly\n const createDevelopmenEnvironmentResponse = await fetch(`${baseUrl}`, {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${argv[\"api-key\"]}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n accountName: account,\n projectName: project,\n environmentType: \"development\",\n }),\n });\n\n if (!createDevelopmenEnvironmentResponse.ok) {\n logger.debug(\n {\n status: createDevelopmenEnvironmentResponse.status,\n statusText: createDevelopmenEnvironmentResponse.statusText,\n },\n \"Failed to create a new instance of development environment\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Failed to create a new development environment. Please try again later.\"\n );\n }\n\n numDevelopmentEnvironments++;\n\n // Re-fetch\n environmentResponseFromDeveloperAPI = await fetch(url, {\n headers: {\n authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n });\n\n environmentJsonFromDeveloperAPI =\n (await environmentResponseFromDeveloperAPI.json()) as {\n data: Environment[];\n };\n }\n\n const environments = Object.assign(\n {},\n environmentJsonFromDeveloperAPI.data\n .map((env) => {\n return {\n [prettyPrintEnvironmentPrompt(\n env,\n numDevelopmentEnvironments == 1\n )]: env.name,\n };\n })\n .reduce((acc, curr) => {\n return { ...acc, ...curr };\n })\n );\n\n if (Object.values(environments).length === 1) {\n environment = Object.values(environments)[0];\n } else {\n environment = await select({\n message: \"Select the environment to work with\",\n choices: Object.entries(environments).map(([key, value]) => {\n return {\n name: key,\n value,\n };\n }),\n });\n }\n }\n\n argv.environment = environment;\n\n // Safely merge the values in the .zuplo.jsonc file\n if (project) {\n await safeMergeConfig(argv.dir, project);\n }\n\n // Safely merge in other auxillary files\n await pullSystemConfig(argv);\n\n await printResultToConsoleAndExitGracefully(`\nSuccessfully linked your local directory to the ${project} project in the ${account} account.\n.env.zuplo and zuplo.jsonc have been updated with the new values.`);\n}\n"]}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/link/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,oCAAoC,EACpC,qCAAqC,EACrC,UAAU,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAUlE,SAAS,4BAA4B,CACnC,GAAgB,EAChB,4BAAqC;IAErC,IAAI,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;IACxD,IAAI,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IAChC,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAEpB,QAAQ,eAAe,EAAE,CAAC;QACxB,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc,CAAC;QACpB,KAAK,aAAa;YAChB,IAAI,4BAA4B,EAAE,CAAC;gBACjC,IAAI,GAAG,+BAA+B,CAAC;gBACvC,eAAe,GAAG,aAAa,CAAC;gBAChC,UAAU,GAAG,EAAE,CAAC;gBAChB,OAAO,GAAG,IAAI,KAAK,eAAe,GAAG,CAAC;YACxC,CAAC;iBAAM,CAAC;gBAEN,eAAe,GAAG,aAAa,CAAC;gBAChC,UAAU,GAAG,EAAE,CAAC;gBAChB,OAAO,GAAG,IAAI,KAAK,eAAe,GAAG,CAAC;YACxC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,IAAI,KAAK,eAAe,KAAK,UAAU,GAAG,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAe;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAGnC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC3B,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,eAAe,GAAG,MAAM,KAAK,CACjC,GAAG,QAAQ,CAAC,4BAA4B,cAAc,EACtD;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;aAC1C;SACF,CACF,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CACV;gBACE,MAAM,EAAE,eAAe,CAAC,MAAM;gBAC9B,UAAU,EAAE,eAAe,CAAC,UAAU;gBACtC,QAAQ,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC;aACnD,EACD,0BAA0B,CAC3B,CAAC;YACF,MAAM,oCAAoC,CACxC,uDAAuD,CACxD,CAAC;QACJ,CAAC;QAGD,MAAM,WAAW,GAAG,CAAC,MAAM,eAAe,CAAC,IAAI,EAAE,CAAwB,CAAC;QAC1E,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,MAAM,MAAM,CAAC;gBACrB,OAAO,EAAE,iCAAiC;gBAC1C,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACpC,OAAO;wBACL,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,KAAK,EAAE,GAAG,CAAC,IAAI;qBAChB,CAAC;gBACJ,CAAC,CAAC;aACH,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,GAAG,QAAQ,CAAC,4BAA4B,kBAAkB,CAAC;QAE3E,MAAM,WAAW,GAA2B;YAG1C,WAAW,EAAE,OAAQ;YAErB,WAAW,EAAE,OAAQ;SACtB,CAAC;QAGF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,GAAG,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,mCAAmC,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACzD,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;aAC1C;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,mCAAmC,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CACV;gBACE,MAAM,EAAE,mCAAmC,CAAC,MAAM;gBAClD,UAAU,EAAE,mCAAmC,CAAC,UAAU;aAC3D,EACD,6CAA6C,CAC9C,CAAC;YACF,MAAM,oCAAoC,CACxC,6FAA6F,CAC9F,CAAC;QACJ,CAAC;QAED,IAAI,+BAA+B,GACjC,CAAC,MAAM,mCAAmC,CAAC,IAAI,EAAE,CAEhD,CAAC;QAEJ,IAAI,0BAA0B,GAC5B,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAClD,OAAO,GAAG,CAAC,eAAe,KAAK,aAAa,CAAC;QAC/C,CAAC,CAAC,CAAC,MAAM,CAAC;QAEZ,IAAI,0BAA0B,IAAI,CAAC,EAAE,CAAC;YAEpC,MAAM,mCAAmC,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,EAAE,EAAE;gBACpE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;oBACzC,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,WAAW,EAAE,OAAO;oBACpB,WAAW,EAAE,OAAO;oBACpB,eAAe,EAAE,aAAa;iBAC/B,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,mCAAmC,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,CAAC,KAAK,CACV;oBACE,MAAM,EAAE,mCAAmC,CAAC,MAAM;oBAClD,UAAU,EAAE,mCAAmC,CAAC,UAAU;iBAC3D,EACD,4DAA4D,CAC7D,CAAC;gBACF,MAAM,oCAAoC,CACxC,yEAAyE,CAC1E,CAAC;YACJ,CAAC;YAED,0BAA0B,EAAE,CAAC;YAG7B,mCAAmC,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBACrD,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;iBAC1C;aACF,CAAC,CAAC;YAEH,+BAA+B;gBAC7B,CAAC,MAAM,mCAAmC,CAAC,IAAI,EAAE,CAEhD,CAAC;QACN,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAChC,EAAE,EACF,+BAA+B,CAAC,IAAI;aACjC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,OAAO;gBACL,CAAC,4BAA4B,CAC3B,GAAG,EACH,0BAA0B,IAAI,CAAC,CAChC,CAAC,EAAE,GAAG,CAAC,IAAI;aACb,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACpB,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QAC7B,CAAC,CAAC,CACL,CAAC;QAEF,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,MAAM,MAAM,CAAC;gBACzB,OAAO,EAAE,qCAAqC;gBAC9C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBACzD,OAAO;wBACL,IAAI,EAAE,GAAG;wBACT,KAAK;qBACN,CAAC;gBACJ,CAAC,CAAC;aACH,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAG/B,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAGD,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,qCAAqC,CAAC;kDACI,OAAO,mBAAmB,OAAO;kEACjB,CAAC,CAAC;AACpE,CAAC","sourcesContent":["import { select } from \"@inquirer/prompts\";\nimport { Environment, Project } from \"../common/api/lib.js\";\nimport { logger } from \"../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printResultToConsoleAndExitGracefully,\n textOrJson,\n} from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { pullSystemConfig, safeMergeConfig } from \"./populate.js\";\n\nexport interface Arguments {\n dir: string;\n authToken: string;\n account?: string;\n project?: string;\n environment?: string;\n}\n\nfunction prettyPrintEnvironmentPrompt(\n env: Environment,\n hasSingleDevelopmentInstance: boolean\n) {\n let environmentType = env.environmentType.toLowerCase();\n let branchName = env.branchName;\n let name = env.name;\n\n switch (environmentType) {\n case \"working-copy\":\n case \"working_copy\":\n case \"development\":\n if (hasSingleDevelopmentInstance) {\n name = \"Default for local development\";\n environmentType = \"development\";\n branchName = \"\";\n return `${name} (${environmentType})`;\n } else {\n // For the case of working copy the branch name is actually \"main\" but it doesn't mean anything\n environmentType = \"development\";\n branchName = \"\";\n return `${name} (${environmentType})`;\n }\n }\n return `${name} (${environmentType}, ${branchName})`;\n}\n\nexport async function link(argv: Arguments) {\n const account = argv.account;\n let environment = argv.environment;\n\n // List the projects\n let project = argv.project;\n if (!environment && !project) {\n const projectResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/projects`,\n {\n headers: {\n authorization: `Bearer ${argv.authToken}`,\n },\n }\n );\n\n if (!projectResponse.ok) {\n logger.error(\n {\n status: projectResponse.status,\n statusText: projectResponse.statusText,\n response: textOrJson(await projectResponse.text()),\n },\n \"Failed to list projects.\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to list your projects. Try again later.\"\n );\n }\n\n // Ask the user to select a project, if necessary\n const projectJson = (await projectResponse.json()) as { data: Project[] };\n if (projectJson.data.length === 1) {\n project = projectJson.data[0].name;\n } else {\n project = await select({\n message: \"Select the project to work with\",\n choices: projectJson.data.map((prj) => {\n return {\n name: prj.name,\n value: prj.name,\n };\n }),\n });\n }\n }\n\n if (!environment) {\n const baseUrl = `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/environments`;\n\n const queryParams: Record<string, string> = {\n // This is safe because of the flow above where we finalize the account and project\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n accountName: account!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n projectName: project!,\n };\n\n // Create the query string using URLSearchParams\n const url = new URL(baseUrl);\n url.search = new URLSearchParams(queryParams).toString();\n let environmentResponseFromDeveloperAPI = await fetch(url, {\n headers: {\n authorization: `Bearer ${argv.authToken}`,\n },\n });\n\n if (!environmentResponseFromDeveloperAPI.ok) {\n logger.error(\n {\n status: environmentResponseFromDeveloperAPI.status,\n statusText: environmentResponseFromDeveloperAPI.statusText,\n },\n \"Failed to link to a project in your account\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Check that the project specified in your zuplo.jsonc exists and that you have access to it.\"\n );\n }\n\n let environmentJsonFromDeveloperAPI =\n (await environmentResponseFromDeveloperAPI.json()) as {\n data: Environment[];\n };\n\n let numDevelopmentEnvironments =\n environmentJsonFromDeveloperAPI.data.filter((env) => {\n return env.environmentType === \"development\";\n }).length;\n\n if (numDevelopmentEnvironments <= 0) {\n // Create one on-the-fly\n const createDevelopmenEnvironmentResponse = await fetch(`${baseUrl}`, {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${argv.authToken}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n accountName: account,\n projectName: project,\n environmentType: \"development\",\n }),\n });\n\n if (!createDevelopmenEnvironmentResponse.ok) {\n logger.debug(\n {\n status: createDevelopmenEnvironmentResponse.status,\n statusText: createDevelopmenEnvironmentResponse.statusText,\n },\n \"Failed to create a new instance of development environment\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Failed to create a new development environment. Please try again later.\"\n );\n }\n\n numDevelopmentEnvironments++;\n\n // Re-fetch\n environmentResponseFromDeveloperAPI = await fetch(url, {\n headers: {\n authorization: `Bearer ${argv.authToken}`,\n },\n });\n\n environmentJsonFromDeveloperAPI =\n (await environmentResponseFromDeveloperAPI.json()) as {\n data: Environment[];\n };\n }\n\n const environments = Object.assign(\n {},\n environmentJsonFromDeveloperAPI.data\n .map((env) => {\n return {\n [prettyPrintEnvironmentPrompt(\n env,\n numDevelopmentEnvironments == 1\n )]: env.name,\n };\n })\n .reduce((acc, curr) => {\n return { ...acc, ...curr };\n })\n );\n\n if (Object.values(environments).length === 1) {\n environment = Object.values(environments)[0];\n } else {\n environment = await select({\n message: \"Select the environment to work with\",\n choices: Object.entries(environments).map(([key, value]) => {\n return {\n name: key,\n value,\n };\n }),\n });\n }\n }\n\n argv.environment = environment;\n\n // Safely merge the values in the .zuplo.jsonc file\n if (project) {\n await safeMergeConfig(argv.dir, project);\n }\n\n // Safely merge in other auxillary files\n await pullSystemConfig(argv);\n\n await printResultToConsoleAndExitGracefully(`\nSuccessfully linked your local directory to the ${project} project in the ${account} account.\n.env.zuplo and zuplo.jsonc have been updated with the new values.`);\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import { Arguments } from "../link/handler.js";
2
2
  export declare function safeMergeConfig(dir: string, project: string): Promise<void>;
3
- export declare function pullSystemConfig(argv: Pick<Arguments, "dir" | "environment" | "api-key">): Promise<void>;
3
+ export declare function pullSystemConfig(argv: Pick<Arguments, "dir" | "environment" | "authToken">): Promise<void>;
4
4
  //# sourceMappingURL=populate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../src/link/populate.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAkDjE;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,aAAa,GAAG,SAAS,CAAC,iBAkDzD"}
1
+ {"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../src/link/populate.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAkDjE;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,aAAa,GAAG,WAAW,CAAC,iBAkD3D"}
@@ -52,7 +52,7 @@ export async function pullSystemConfig(argv) {
52
52
  const zuploPreferredConfigFile = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);
53
53
  const environmentResponseFromDeveloperAPI = await fetch(`${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/environments/${argv.environment}/configurations`, {
54
54
  headers: {
55
- authorization: `Bearer ${argv["api-key"]}`,
55
+ authorization: `Bearer ${argv.authToken}`,
56
56
  },
57
57
  });
58
58
  if (!environmentResponseFromDeveloperAPI.ok) {
@@ -70,8 +70,8 @@ export async function pullSystemConfig(argv) {
70
70
  }
71
71
  const payload = await environmentResponseFromDeveloperAPI.json();
72
72
  const content = `
73
- # This file is auto-generated from zup link. Please do not edit it manually.
74
- # It will be auto-generated afresh the next time you run zup link.
73
+ # This file is auto-generated from zuplo link. Please do not edit it manually.
74
+ # It will be auto-generated afresh the next time you run zuplo link.
75
75
  # If you wish to add your own environment variables, create a separate .env file.
76
76
 
77
77
  ZUPLO_ACCOUNT_NAME=${payload.accountName}
@@ -1 +1 @@
1
- {"version":3,"file":"populate.js","sourceRoot":"","sources":["../../src/link/populate.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyEdits, modify } from \"jsonc-parser\";\nimport { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\nimport { format } from \"prettier\";\nimport {\n ZUPLO_FALLBACK_JSON_FILE,\n ZUPLO_PREFERRED_JSON_FILE,\n ZUPLO_SYSTEM_ENV_VAR,\n} from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport { printCriticalFailureToConsoleAndExit } from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { Arguments } from \"../link/handler.js\";\n\nexport async function safeMergeConfig(dir: string, project: string) {\n const normalizedDir = join(relative(process.cwd(), dir));\n const zuploPreferredConfigFile = join(\n normalizedDir,\n ZUPLO_PREFERRED_JSON_FILE\n );\n const zuploFallbackConfigFile = join(normalizedDir, ZUPLO_FALLBACK_JSON_FILE);\n if (existsSync(zuploPreferredConfigFile)) {\n // Process the file, while respecting comments\n // Apply the edits sequentially\n const originalContents = await readFile(zuploPreferredConfigFile, \"utf-8\");\n const modifyProjectEdit = modify(originalContents, [\"project\"], project, {\n getInsertionIndex: () => 2,\n });\n const contentsPostProject = applyEdits(originalContents, modifyProjectEdit);\n const formatted = await format(contentsPostProject, {\n parser: \"json\",\n quoteProps: \"as-needed\",\n });\n await writeFile(zuploPreferredConfigFile, formatted);\n } else if (existsSync(zuploFallbackConfigFile)) {\n // Copy the file over\n const config = JSON.parse(await readFile(zuploFallbackConfigFile, \"utf-8\"));\n const formatted = await format(\n JSON.stringify({\n version: 1,\n project: project,\n compatibilityDate: config.compatibilityDate,\n }),\n {\n parser: \"json\",\n quoteProps: \"as-needed\",\n }\n );\n await writeFile(zuploPreferredConfigFile, formatted);\n } else {\n // Create new file\n const formatted = await format(\n JSON.stringify({\n version: 1,\n project: project,\n compatibilityDate: \"2023-03-14\",\n }),\n {\n parser: \"json\",\n quoteProps: \"as-needed\",\n }\n );\n await writeFile(zuploPreferredConfigFile, formatted);\n }\n}\n\nexport async function pullSystemConfig(\n argv: Pick<Arguments, \"dir\" | \"environment\" | \"api-key\">\n) {\n const normalizedDir = join(relative(process.cwd(), argv.dir));\n const zuploPreferredConfigFile = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n\n const environmentResponseFromDeveloperAPI = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/environments/${argv.environment}/configurations`,\n {\n headers: {\n authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n }\n );\n\n if (!environmentResponseFromDeveloperAPI.ok) {\n if (\n environmentResponseFromDeveloperAPI.status === 404 ||\n environmentResponseFromDeveloperAPI.status === 401\n ) {\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to link data from the environment. The environment you specified doesn't exist or you don't have access to it.\"\n );\n } else {\n logger.error(\n {\n status: environmentResponseFromDeveloperAPI.status,\n statusText: environmentResponseFromDeveloperAPI.statusText,\n },\n `Failed to link data from ${argv.environment}`\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to link data from the environment. Please try again later.\"\n );\n }\n }\n\n const payload = await environmentResponseFromDeveloperAPI.json();\n\n const content = `\n# This file is auto-generated from zup link. Please do not edit it manually.\n# It will be auto-generated afresh the next time you run zup link.\n# If you wish to add your own environment variables, create a separate .env file.\n\nZUPLO_ACCOUNT_NAME=${payload.accountName}\nZUPLO_PROJECT_NAME=${payload.projectName}\nZUPLO_ENVIRONMENT_TYPE=${payload.environmentType}\nZUPLO_SYSTEM_CONFIGURATIONS=${payload[\"systemConfigurations\"]}\n`;\n\n await writeFile(zuploPreferredConfigFile, content);\n}\n"]}
1
+ {"version":3,"file":"populate.js","sourceRoot":"","sources":["../../src/link/populate.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyEdits, modify } from \"jsonc-parser\";\nimport { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\nimport { format } from \"prettier\";\nimport {\n ZUPLO_FALLBACK_JSON_FILE,\n ZUPLO_PREFERRED_JSON_FILE,\n ZUPLO_SYSTEM_ENV_VAR,\n} from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport { printCriticalFailureToConsoleAndExit } from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { Arguments } from \"../link/handler.js\";\n\nexport async function safeMergeConfig(dir: string, project: string) {\n const normalizedDir = join(relative(process.cwd(), dir));\n const zuploPreferredConfigFile = join(\n normalizedDir,\n ZUPLO_PREFERRED_JSON_FILE\n );\n const zuploFallbackConfigFile = join(normalizedDir, ZUPLO_FALLBACK_JSON_FILE);\n if (existsSync(zuploPreferredConfigFile)) {\n // Process the file, while respecting comments\n // Apply the edits sequentially\n const originalContents = await readFile(zuploPreferredConfigFile, \"utf-8\");\n const modifyProjectEdit = modify(originalContents, [\"project\"], project, {\n getInsertionIndex: () => 2,\n });\n const contentsPostProject = applyEdits(originalContents, modifyProjectEdit);\n const formatted = await format(contentsPostProject, {\n parser: \"json\",\n quoteProps: \"as-needed\",\n });\n await writeFile(zuploPreferredConfigFile, formatted);\n } else if (existsSync(zuploFallbackConfigFile)) {\n // Copy the file over\n const config = JSON.parse(await readFile(zuploFallbackConfigFile, \"utf-8\"));\n const formatted = await format(\n JSON.stringify({\n version: 1,\n project: project,\n compatibilityDate: config.compatibilityDate,\n }),\n {\n parser: \"json\",\n quoteProps: \"as-needed\",\n }\n );\n await writeFile(zuploPreferredConfigFile, formatted);\n } else {\n // Create new file\n const formatted = await format(\n JSON.stringify({\n version: 1,\n project: project,\n compatibilityDate: \"2023-03-14\",\n }),\n {\n parser: \"json\",\n quoteProps: \"as-needed\",\n }\n );\n await writeFile(zuploPreferredConfigFile, formatted);\n }\n}\n\nexport async function pullSystemConfig(\n argv: Pick<Arguments, \"dir\" | \"environment\" | \"authToken\">\n) {\n const normalizedDir = join(relative(process.cwd(), argv.dir));\n const zuploPreferredConfigFile = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n\n const environmentResponseFromDeveloperAPI = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/environments/${argv.environment}/configurations`,\n {\n headers: {\n authorization: `Bearer ${argv.authToken}`,\n },\n }\n );\n\n if (!environmentResponseFromDeveloperAPI.ok) {\n if (\n environmentResponseFromDeveloperAPI.status === 404 ||\n environmentResponseFromDeveloperAPI.status === 401\n ) {\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to link data from the environment. The environment you specified doesn't exist or you don't have access to it.\"\n );\n } else {\n logger.error(\n {\n status: environmentResponseFromDeveloperAPI.status,\n statusText: environmentResponseFromDeveloperAPI.statusText,\n },\n `Failed to link data from ${argv.environment}`\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to link data from the environment. Please try again later.\"\n );\n }\n }\n\n const payload = await environmentResponseFromDeveloperAPI.json();\n\n const content = `\n# This file is auto-generated from zuplo link. Please do not edit it manually.\n# It will be auto-generated afresh the next time you run zuplo link.\n# If you wish to add your own environment variables, create a separate .env file.\n\nZUPLO_ACCOUNT_NAME=${payload.accountName}\nZUPLO_PROJECT_NAME=${payload.projectName}\nZUPLO_ENVIRONMENT_TYPE=${payload.environmentType}\nZUPLO_SYSTEM_CONFIGURATIONS=${payload[\"systemConfigurations\"]}\n`;\n\n await writeFile(zuploPreferredConfigFile, content);\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  export interface Arguments {
2
2
  account: string;
3
3
  project: string;
4
- "api-key": string;
4
+ authToken: string;
5
5
  "self-hosted-endpoint"?: string;
6
6
  }
7
7
  export declare function list(argv: Arguments): Promise<void>;
@@ -16,7 +16,7 @@ async function listFromSaas(argv) {
16
16
  const listResponse = await fetch(`${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/projects/${project}/deployments`, {
17
17
  method: "GET",
18
18
  headers: {
19
- Authorization: `Bearer ${argv["api-key"]}`,
19
+ Authorization: `Bearer ${argv.authToken}`,
20
20
  },
21
21
  });
22
22
  if (listResponse.ok) {
@@ -41,7 +41,7 @@ async function listFromSelfHosted(argv) {
41
41
  const listResponse = await fetch(`${endpoint}/v1/deployments`, {
42
42
  method: "GET",
43
43
  headers: {
44
- Authorization: `Bearer ${argv["api-key"]}`,
44
+ Authorization: `Bearer ${argv.authToken}`,
45
45
  },
46
46
  });
47
47
  if (listResponse.ok) {
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/list/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,oCAAoC,EACpC,yBAAyB,EACzB,qCAAqC,EACrC,UAAU,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AA2BvD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAe;IACxC,IAAI,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAsB,CAAC;QACpC,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAe;IACzC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,cAAc,EACjG;QACE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,EAAE;SAC3C;KACF,CACF,CAAC;IAEF,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GACzB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAG,WAAW;aACvB,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;aACtC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;aACnC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,QAAQ,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;SAChD,EACD,8BAA8B,CAC/B,CAAC;QACF,yBAAyB,CACvB,uDAAuD,CACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAQD,KAAK,UAAU,kBAAkB,CAAC,IAAoB;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAE5D,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,iBAAiB,EAAE;QAC7D,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,EAAE;SAC3C;KACF,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GACzB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAG,WAAW;aACvB,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;aAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV,IAAI,CAAC,SAAS,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAClD,0DAA0D,CAC3D,CAAC;QACF,MAAM,oCAAoC,CACxC,iEAAiE,CAClE,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { logger } from \"../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n textOrJson,\n} from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { RequiredProperties } from \"../common/utils/types.js\";\nimport { normalizeUrl } from \"../common/utils/urls.js\";\n\nexport interface Arguments {\n account: string;\n project: string;\n \"api-key\": string;\n \"self-hosted-endpoint\"?: string;\n}\n\ninterface Deployment {\n name: string;\n createdOn: string;\n loggingId: string;\n environment: string;\n accountName: string;\n projectName: string;\n state: \"IS_STARTING\" | \"STARTED\" | \"STOPPED\" | \"ERRORED\";\n message: null;\n branchName: string;\n userSub: string;\n url: string;\n environmentType: \"PRODUCTION\" | \"PREVIEW\" | \"WORKING_COPY\";\n}\n\ntype SimplifiedDeployment = Pick<Deployment, \"url\">;\ntype SelfHostedArgs = RequiredProperties<Arguments, \"self-hosted-endpoint\">;\n\nexport async function list(argv: Arguments) {\n if (argv[\"self-hosted-endpoint\"]) {\n const args = argv as SelfHostedArgs;\n await listFromSelfHosted(args);\n } else {\n await listFromSaas(argv);\n }\n}\n\nasync function listFromSaas(argv: Arguments) {\n const { account, project } = argv;\n const listResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/projects/${project}/deployments`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n }\n );\n\n if (listResponse.ok) {\n const { data: deployments }: { data: SimplifiedDeployment[] } =\n await listResponse.json();\n\n const output = deployments\n .filter((deployment) => deployment.url)\n .map((deployment) => deployment.url)\n .join(\"\\n\");\n\n await printResultToConsoleAndExitGracefully(output);\n } else {\n logger.error(\n {\n status: listResponse.status,\n statusText: listResponse.statusText,\n response: textOrJson(await listResponse.text()),\n },\n \"Failed to list deployed zups\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to list deployed zups. Try again later.\"\n );\n }\n}\n\nexport interface SelfHostedDeployment {\n projectName: string;\n deploymentName: string;\n deploymentUrl: string;\n}\n\nasync function listFromSelfHosted(argv: SelfHostedArgs) {\n const endpoint = normalizeUrl(argv[\"self-hosted-endpoint\"]);\n\n const listResponse = await fetch(`${endpoint}/v1/deployments`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n });\n\n if (listResponse.ok) {\n const { data: deployments }: { data: SelfHostedDeployment[] } =\n await listResponse.json();\n\n const output = deployments\n .map((deployment) => deployment.deploymentUrl)\n .join(\"\\n\");\n\n await printResultToConsoleAndExitGracefully(output);\n } else {\n logger.error(\n JSON.stringify(await listResponse.json(), null, 2),\n \"Failed to list deployments at self-hosted build endpoint\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to list deployments at self-hosted build endpoint\"\n );\n }\n}\n"]}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/list/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,oCAAoC,EACpC,yBAAyB,EACzB,qCAAqC,EACrC,UAAU,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AA2BvD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAe;IACxC,IAAI,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAsB,CAAC;QACpC,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAe;IACzC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,cAAc,EACjG;QACE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;SAC1C;KACF,CACF,CAAC;IAEF,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GACzB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAG,WAAW;aACvB,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;aACtC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;aACnC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,QAAQ,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;SAChD,EACD,8BAA8B,CAC/B,CAAC;QACF,yBAAyB,CACvB,uDAAuD,CACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAQD,KAAK,UAAU,kBAAkB,CAAC,IAAoB;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAE5D,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,iBAAiB,EAAE;QAC7D,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;SAC1C;KACF,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GACzB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAG,WAAW;aACvB,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;aAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV,IAAI,CAAC,SAAS,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAClD,0DAA0D,CAC3D,CAAC;QACF,MAAM,oCAAoC,CACxC,iEAAiE,CAClE,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { logger } from \"../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n textOrJson,\n} from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { RequiredProperties } from \"../common/utils/types.js\";\nimport { normalizeUrl } from \"../common/utils/urls.js\";\n\nexport interface Arguments {\n account: string;\n project: string;\n authToken: string;\n \"self-hosted-endpoint\"?: string;\n}\n\ninterface Deployment {\n name: string;\n createdOn: string;\n loggingId: string;\n environment: string;\n accountName: string;\n projectName: string;\n state: \"IS_STARTING\" | \"STARTED\" | \"STOPPED\" | \"ERRORED\";\n message: null;\n branchName: string;\n userSub: string;\n url: string;\n environmentType: \"PRODUCTION\" | \"PREVIEW\" | \"WORKING_COPY\";\n}\n\ntype SimplifiedDeployment = Pick<Deployment, \"url\">;\ntype SelfHostedArgs = RequiredProperties<Arguments, \"self-hosted-endpoint\">;\n\nexport async function list(argv: Arguments) {\n if (argv[\"self-hosted-endpoint\"]) {\n const args = argv as SelfHostedArgs;\n await listFromSelfHosted(args);\n } else {\n await listFromSaas(argv);\n }\n}\n\nasync function listFromSaas(argv: Arguments) {\n const { account, project } = argv;\n const listResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/projects/${project}/deployments`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${argv.authToken}`,\n },\n }\n );\n\n if (listResponse.ok) {\n const { data: deployments }: { data: SimplifiedDeployment[] } =\n await listResponse.json();\n\n const output = deployments\n .filter((deployment) => deployment.url)\n .map((deployment) => deployment.url)\n .join(\"\\n\");\n\n await printResultToConsoleAndExitGracefully(output);\n } else {\n logger.error(\n {\n status: listResponse.status,\n statusText: listResponse.statusText,\n response: textOrJson(await listResponse.text()),\n },\n \"Failed to list deployed zups\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to list deployed zups. Try again later.\"\n );\n }\n}\n\nexport interface SelfHostedDeployment {\n projectName: string;\n deploymentName: string;\n deploymentUrl: string;\n}\n\nasync function listFromSelfHosted(argv: SelfHostedArgs) {\n const endpoint = normalizeUrl(argv[\"self-hosted-endpoint\"]);\n\n const listResponse = await fetch(`${endpoint}/v1/deployments`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${argv.authToken}`,\n },\n });\n\n if (listResponse.ok) {\n const { data: deployments }: { data: SelfHostedDeployment[] } =\n await listResponse.json();\n\n const output = deployments\n .map((deployment) => deployment.deploymentUrl)\n .join(\"\\n\");\n\n await printResultToConsoleAndExitGracefully(output);\n } else {\n logger.error(\n JSON.stringify(await listResponse.json(), null, 2),\n \"Failed to list deployments at self-hosted build endpoint\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to list deployments at self-hosted build endpoint\"\n );\n }\n}\n"]}
@@ -7,8 +7,5 @@ export declare const decode: (value: string) => string;
7
7
  export declare const createRandomString: () => string;
8
8
  export declare const bufferToBase64UrlEncoded: (input: number[] | Uint8Array) => string;
9
9
  export declare const sha256: (s: string) => Promise<any>;
10
- export interface Arguments {
11
- "print-token": boolean;
12
- }
13
- export declare function login(args: Arguments): Promise<void>;
10
+ export declare function login(): Promise<void>;
14
11
  //# sourceMappingURL=handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/login/handler.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,SAAS,qCAAqC,CAAC;AAC5D,eAAO,MAAM,YAAY,4BAA0C,CAAC;AACpE,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAE7C,eAAO,MAAM,MAAM,UAAW,MAAM,WAAgB,CAAC;AACrD,eAAO,MAAM,MAAM,UAAW,MAAM,WAAgB,CAAC;AAErD,eAAO,MAAM,kBAAkB,cAO9B,CAAC;AAOF,eAAO,MAAM,wBAAwB,UAAW,MAAM,EAAE,GAAG,UAAU,WAGpE,CAAC;AAEF,eAAO,MAAM,MAAM,MAAa,MAAM,iBAQrC,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,SAAS,iBAiD1C"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/login/handler.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,SAAS,qCAAqC,CAAC;AAC5D,eAAO,MAAM,YAAY,4BAA0C,CAAC;AACpE,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAE7C,eAAO,MAAM,MAAM,UAAW,MAAM,WAAgB,CAAC;AACrD,eAAO,MAAM,MAAM,UAAW,MAAM,WAAgB,CAAC;AAErD,eAAO,MAAM,kBAAkB,cAO9B,CAAC;AAOF,eAAO,MAAM,wBAAwB,UAAW,MAAM,EAAE,GAAG,UAAU,WAGpE,CAAC;AAEF,eAAO,MAAM,MAAM,MAAa,MAAM,iBAQrC,CAAC;AAEF,wBAAsB,KAAK,kBA6C1B"}
@@ -3,7 +3,7 @@ import { existsSync, mkdirSync } from "node:fs";
3
3
  import { writeFile } from "node:fs/promises";
4
4
  import { join } from "node:path";
5
5
  import { ZUPLO_AUTH_FILE_NAME } from "../common/constants.js";
6
- import { printResultToConsole, printResultToConsoleAndExitGracefully, } from "../common/output.js";
6
+ import { printResultToConsoleAndExitGracefully } from "../common/output.js";
7
7
  import { ZUPLO_XDG_STATE_HOME } from "../common/xdg/lib.js";
8
8
  import { browserAuth } from "./server.js";
9
9
  export const AUTH_SERVER_PORT = 57801;
@@ -31,7 +31,7 @@ export const sha256 = async (s) => {
31
31
  const digestOp = crypto.subtle.digest({ name: "SHA-256" }, new TextEncoder().encode(s));
32
32
  return await digestOp;
33
33
  };
34
- export async function login(args) {
34
+ export async function login() {
35
35
  const code_verifier = createRandomString();
36
36
  const code_challengeBuffer = await sha256(code_verifier);
37
37
  const code_challenge = bufferToBase64UrlEncoded(code_challengeBuffer);
@@ -42,7 +42,7 @@ export async function login(args) {
42
42
  authUrl.searchParams.set("client_id", CLIENT_ID);
43
43
  authUrl.searchParams.set("redirect_uri", CALLBACK_URL);
44
44
  authUrl.searchParams.set("scope", "openid profile email");
45
- authUrl.searchParams.set("audience", "https://api.zuplo.com/");
45
+ authUrl.searchParams.set("audience", "https://dev.zuplo.com/");
46
46
  const params = await browserAuth(authUrl.toString());
47
47
  const code = params.get("code");
48
48
  if (code === null) {
@@ -67,9 +67,6 @@ export async function login(args) {
67
67
  }
68
68
  const tokenPath = join(ZUPLO_XDG_STATE_HOME, ZUPLO_AUTH_FILE_NAME);
69
69
  await writeFile(tokenPath, JSON.stringify(result));
70
- if (args["print-token"]) {
71
- printResultToConsole(result.access_token);
72
- }
73
70
  await printResultToConsoleAndExitGracefully("Successfully authenticated.");
74
71
  }
75
72
  //# sourceMappingURL=handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/login/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"node:crypto\";\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { ZUPLO_AUTH_FILE_NAME } from \"../common/constants.js\";\nimport {\n printResultToConsole,\n printResultToConsoleAndExitGracefully,\n} from \"../common/output.js\";\nimport { ZUPLO_XDG_STATE_HOME } from \"../common/xdg/lib.js\";\nimport { browserAuth } from \"./server.js\";\n\nexport const AUTH_SERVER_PORT = 57801;\nexport const CLIENT_ID = \"mYLGcH7kB4P0pw0HAk6GH7raRwYhSlW4\";\nexport const CALLBACK_URL = `http://localhost:${AUTH_SERVER_PORT}/`;\nexport const AUTH0_DOMAIN = \"auth.zuplo.com\";\n\nexport const encode = (value: string) => btoa(value);\nexport const decode = (value: string) => atob(value);\n\nexport const createRandomString = () => {\n const charset =\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.\";\n let random = \"\";\n const randomValues = Array.from(crypto.getRandomValues(new Uint8Array(43)));\n randomValues.forEach((v) => (random += charset[v % charset.length]));\n return random;\n};\n\nconst urlEncodeB64 = (input: string) => {\n const b64Chars: { [index: string]: string } = { \"+\": \"-\", \"/\": \"_\", \"=\": \"\" };\n return input.replace(/[+/=]/g, (m: string) => b64Chars[m]);\n};\n\nexport const bufferToBase64UrlEncoded = (input: number[] | Uint8Array) => {\n const ie11SafeInput = new Uint8Array(input);\n return urlEncodeB64(btoa(String.fromCharCode(...Array.from(ie11SafeInput))));\n};\n\nexport const sha256 = async (s: string) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const digestOp: any = crypto.subtle.digest(\n { name: \"SHA-256\" },\n new TextEncoder().encode(s)\n );\n\n return await digestOp;\n};\n\nexport interface Arguments {\n \"print-token\": boolean;\n}\n\nexport async function login(args: Arguments) {\n const code_verifier = createRandomString();\n const code_challengeBuffer = await sha256(code_verifier);\n const code_challenge = bufferToBase64UrlEncoded(code_challengeBuffer);\n\n const authUrl = new URL(`https://${AUTH0_DOMAIN}/authorize`);\n\n authUrl.searchParams.set(\"response_type\", \"code\");\n authUrl.searchParams.set(\"code_challenge\", code_challenge);\n authUrl.searchParams.set(\"code_challenge_method\", \"S256\");\n authUrl.searchParams.set(\"client_id\", CLIENT_ID);\n authUrl.searchParams.set(\"redirect_uri\", CALLBACK_URL);\n authUrl.searchParams.set(\"scope\", \"openid profile email\");\n authUrl.searchParams.set(\"audience\", \"https://api.zuplo.com/\");\n\n const params = await browserAuth(authUrl.toString());\n const code = params.get(\"code\");\n if (code === null) {\n throw new Error(\"No code\");\n }\n\n const tokenParams = new URLSearchParams();\n tokenParams.set(\"grant_type\", \"authorization_code\");\n tokenParams.set(\"client_id\", CLIENT_ID);\n tokenParams.set(\"code_verifier\", code_verifier);\n tokenParams.set(\"code\", code);\n tokenParams.set(\"redirect_uri\", CALLBACK_URL);\n\n const response = await fetch(`https://${AUTH0_DOMAIN}/oauth/token`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: tokenParams,\n });\n\n const result = (await response.json()) as { access_token: string };\n\n if (!existsSync(ZUPLO_XDG_STATE_HOME)) {\n mkdirSync(ZUPLO_XDG_STATE_HOME, { recursive: true });\n }\n const tokenPath = join(ZUPLO_XDG_STATE_HOME, ZUPLO_AUTH_FILE_NAME);\n await writeFile(tokenPath, JSON.stringify(result));\n\n if (args[\"print-token\"]) {\n printResultToConsole(result.access_token);\n }\n\n await printResultToConsoleAndExitGracefully(\"Successfully authenticated.\");\n}\n"]}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/login/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"node:crypto\";\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { ZUPLO_AUTH_FILE_NAME } from \"../common/constants.js\";\nimport { printResultToConsoleAndExitGracefully } from \"../common/output.js\";\nimport { ZUPLO_XDG_STATE_HOME } from \"../common/xdg/lib.js\";\nimport { browserAuth } from \"./server.js\";\n\nexport const AUTH_SERVER_PORT = 57801;\nexport const CLIENT_ID = \"mYLGcH7kB4P0pw0HAk6GH7raRwYhSlW4\";\nexport const CALLBACK_URL = `http://localhost:${AUTH_SERVER_PORT}/`;\nexport const AUTH0_DOMAIN = \"auth.zuplo.com\";\n\nexport const encode = (value: string) => btoa(value);\nexport const decode = (value: string) => atob(value);\n\nexport const createRandomString = () => {\n const charset =\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.\";\n let random = \"\";\n const randomValues = Array.from(crypto.getRandomValues(new Uint8Array(43)));\n randomValues.forEach((v) => (random += charset[v % charset.length]));\n return random;\n};\n\nconst urlEncodeB64 = (input: string) => {\n const b64Chars: { [index: string]: string } = { \"+\": \"-\", \"/\": \"_\", \"=\": \"\" };\n return input.replace(/[+/=]/g, (m: string) => b64Chars[m]);\n};\n\nexport const bufferToBase64UrlEncoded = (input: number[] | Uint8Array) => {\n const ie11SafeInput = new Uint8Array(input);\n return urlEncodeB64(btoa(String.fromCharCode(...Array.from(ie11SafeInput))));\n};\n\nexport const sha256 = async (s: string) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const digestOp: any = crypto.subtle.digest(\n { name: \"SHA-256\" },\n new TextEncoder().encode(s)\n );\n\n return await digestOp;\n};\n\nexport async function login() {\n const code_verifier = createRandomString();\n const code_challengeBuffer = await sha256(code_verifier);\n const code_challenge = bufferToBase64UrlEncoded(code_challengeBuffer);\n\n const authUrl = new URL(`https://${AUTH0_DOMAIN}/authorize`);\n\n authUrl.searchParams.set(\"response_type\", \"code\");\n authUrl.searchParams.set(\"code_challenge\", code_challenge);\n authUrl.searchParams.set(\"code_challenge_method\", \"S256\");\n authUrl.searchParams.set(\"client_id\", CLIENT_ID);\n authUrl.searchParams.set(\"redirect_uri\", CALLBACK_URL);\n authUrl.searchParams.set(\"scope\", \"openid profile email\");\n authUrl.searchParams.set(\"audience\", \"https://dev.zuplo.com/\");\n\n const params = await browserAuth(authUrl.toString());\n const code = params.get(\"code\");\n if (code === null) {\n throw new Error(\"No code\");\n }\n\n const tokenParams = new URLSearchParams();\n tokenParams.set(\"grant_type\", \"authorization_code\");\n tokenParams.set(\"client_id\", CLIENT_ID);\n tokenParams.set(\"code_verifier\", code_verifier);\n tokenParams.set(\"code\", code);\n tokenParams.set(\"redirect_uri\", CALLBACK_URL);\n\n const response = await fetch(`https://${AUTH0_DOMAIN}/oauth/token`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: tokenParams,\n });\n\n const result = (await response.json()) as { access_token: string };\n\n if (!existsSync(ZUPLO_XDG_STATE_HOME)) {\n mkdirSync(ZUPLO_XDG_STATE_HOME, { recursive: true });\n }\n const tokenPath = join(ZUPLO_XDG_STATE_HOME, ZUPLO_AUTH_FILE_NAME);\n await writeFile(tokenPath, JSON.stringify(result));\n\n await printResultToConsoleAndExitGracefully(\"Successfully authenticated.\");\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const html = "<html>\n <head>\n <title>Authorization Successful</title>\n <style>\n body {\n font-family:\n -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica,\n Arial, sans-serif;\n background-color: #f9fafb;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100vh;\n margin: 0;\n }\n .container {\n max-width: 400px;\n padding: 2rem;\n background-color: white;\n border-radius: 0.5rem;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n text-align: center;\n border: 1px solid #e5e7eb;\n }\n .icon {\n background-color: #ffe0f7;\n color: #ff00bd;\n border-radius: 9999px;\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto 1rem auto;\n }\n h1 {\n color: #111827;\n font-size: 1.5rem;\n margin-bottom: 0.5rem;\n }\n p {\n color: #6b7280;\n margin-bottom: 1.5rem;\n }\n button {\n background-color: #ff00bd;\n color: white;\n border: none;\n padding: 0.5rem 1rem;\n border-radius: 0.375rem;\n font-size: 0.875rem;\n cursor: pointer;\n }\n button:hover {\n background-color: #d600a0;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <div class=\"icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5 13L9 17L19 7\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <h1>Authorization successful</h1>\n <p>Close this tab and return to the Zuplo CLI.</p>\n <button onclick=\"window.close()\">Close this tab</button>\n </div>\n </body>\n</html>";
2
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/login/html.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,wlEAkFT,CAAC"}
@@ -0,0 +1,84 @@
1
+ export const html = `<html>
2
+ <head>
3
+ <title>Authorization Successful</title>
4
+ <style>
5
+ body {
6
+ font-family:
7
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica,
8
+ Arial, sans-serif;
9
+ background-color: #f9fafb;
10
+ display: flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ height: 100vh;
14
+ margin: 0;
15
+ }
16
+ .container {
17
+ max-width: 400px;
18
+ padding: 2rem;
19
+ background-color: white;
20
+ border-radius: 0.5rem;
21
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
22
+ text-align: center;
23
+ border: 1px solid #e5e7eb;
24
+ }
25
+ .icon {
26
+ background-color: #ffe0f7;
27
+ color: #ff00bd;
28
+ border-radius: 9999px;
29
+ width: 48px;
30
+ height: 48px;
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ margin: 0 auto 1rem auto;
35
+ }
36
+ h1 {
37
+ color: #111827;
38
+ font-size: 1.5rem;
39
+ margin-bottom: 0.5rem;
40
+ }
41
+ p {
42
+ color: #6b7280;
43
+ margin-bottom: 1.5rem;
44
+ }
45
+ button {
46
+ background-color: #ff00bd;
47
+ color: white;
48
+ border: none;
49
+ padding: 0.5rem 1rem;
50
+ border-radius: 0.375rem;
51
+ font-size: 0.875rem;
52
+ cursor: pointer;
53
+ }
54
+ button:hover {
55
+ background-color: #d600a0;
56
+ }
57
+ </style>
58
+ </head>
59
+ <body>
60
+ <div class="container">
61
+ <div class="icon">
62
+ <svg
63
+ width="24"
64
+ height="24"
65
+ viewBox="0 0 24 24"
66
+ fill="none"
67
+ xmlns="http://www.w3.org/2000/svg"
68
+ >
69
+ <path
70
+ d="M5 13L9 17L19 7"
71
+ stroke="currentColor"
72
+ strokeWidth="2"
73
+ strokeLinecap="round"
74
+ strokeLinejoin="round"
75
+ />
76
+ </svg>
77
+ </div>
78
+ <h1>Authorization successful</h1>
79
+ <p>Close this tab and return to the Zuplo CLI.</p>
80
+ <button onclick="window.close()">Close this tab</button>
81
+ </div>
82
+ </body>
83
+ </html>`;
84
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/login/html.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkFZ,CAAC","sourcesContent":["export const html = `<html>\n <head>\n <title>Authorization Successful</title>\n <style>\n body {\n font-family:\n -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica,\n Arial, sans-serif;\n background-color: #f9fafb;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100vh;\n margin: 0;\n }\n .container {\n max-width: 400px;\n padding: 2rem;\n background-color: white;\n border-radius: 0.5rem;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n text-align: center;\n border: 1px solid #e5e7eb;\n }\n .icon {\n background-color: #ffe0f7;\n color: #ff00bd;\n border-radius: 9999px;\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto 1rem auto;\n }\n h1 {\n color: #111827;\n font-size: 1.5rem;\n margin-bottom: 0.5rem;\n }\n p {\n color: #6b7280;\n margin-bottom: 1.5rem;\n }\n button {\n background-color: #ff00bd;\n color: white;\n border: none;\n padding: 0.5rem 1rem;\n border-radius: 0.375rem;\n font-size: 0.875rem;\n cursor: pointer;\n }\n button:hover {\n background-color: #d600a0;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <div class=\"icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5 13L9 17L19 7\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <h1>Authorization successful</h1>\n <p>Close this tab and return to the Zuplo CLI.</p>\n <button onclick=\"window.close()\">Close this tab</button>\n </div>\n </body>\n</html>`;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/login/server.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAAC,gBAAgB,EAAE,MAAM,4BAqCzD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/login/server.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,gBAAgB,EAAE,MAAM,4BAsCzD"}
@@ -2,6 +2,7 @@ import http from "node:http";
2
2
  import opn from "open";
3
3
  import { printCriticalFailureToConsoleAndExit } from "../common/output.js";
4
4
  import { AUTH_SERVER_PORT } from "./handler.js";
5
+ import { html } from "./html.js";
5
6
  export async function browserAuth(authorizationUrl) {
6
7
  let params;
7
8
  const handler = (req, res) => {
@@ -11,7 +12,8 @@ export async function browserAuth(authorizationUrl) {
11
12
  const url = new URL(req.url, `http://localhost:${AUTH_SERVER_PORT}`);
12
13
  if (url.pathname === "/") {
13
14
  params = url.searchParams;
14
- res.end("You can close this browser now.");
15
+ res.writeHead(200, { "Content-Type": "text/html" });
16
+ res.end(html);
15
17
  }
16
18
  else {
17
19
  res.end("Unsupported route for login server.");
@@ -23,7 +25,7 @@ export async function browserAuth(authorizationUrl) {
23
25
  while (params === undefined) {
24
26
  if (iterations++ > 600) {
25
27
  server.close();
26
- await printCriticalFailureToConsoleAndExit("Timed out waiting for login in the browser. Run the zup login command again.");
28
+ await printCriticalFailureToConsoleAndExit("Timed out waiting for login in the browser. Run the zuplo login command again.");
27
29
  }
28
30
  else {
29
31
  await new Promise((resolve) => setTimeout(resolve, 500));
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/login/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,MAAM,CAAC;AACvB,OAAO,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,gBAAwB;IACxD,IAAI,MAAmC,CAAC;IAExC,MAAM,OAAO,GAAG,CAAC,GAAyB,EAAE,GAAwB,EAAE,EAAE;QACtE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,gBAAgB,EAAE,CAAC,CAAC;QAErE,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC;YAC1B,GAAG,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;IAGF,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAGnE,MAAM,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE5B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,UAAU,EAAE,GAAG,GAAG,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,oCAAoC,CACxC,8EAA8E,CAC/E,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import http from \"node:http\";\nimport opn from \"open\";\nimport { printCriticalFailureToConsoleAndExit } from \"../common/output.js\";\nimport { AUTH_SERVER_PORT } from \"./handler.js\";\n\nexport async function browserAuth(authorizationUrl: string) {\n let params: URLSearchParams | undefined;\n\n const handler = (req: http.IncomingMessage, res: http.ServerResponse) => {\n if (!req.url) {\n throw new Error(\"Bad url\");\n }\n const url = new URL(req.url, `http://localhost:${AUTH_SERVER_PORT}`);\n // In here when the server gets a request\n if (url.pathname === \"/\") {\n params = url.searchParams;\n res.end(\"You can close this browser now.\");\n } else {\n res.end(\"Unsupported route for login server.\");\n }\n };\n\n // Very simple webserver, using Nodes standard http module\n const server = http.createServer(handler).listen(AUTH_SERVER_PORT); // static local port\n\n // Open authorization url in preferred browser, works cross-platform\n await opn(authorizationUrl);\n\n let iterations = 0;\n while (params === undefined) {\n if (iterations++ > 600) {\n server.close();\n await printCriticalFailureToConsoleAndExit(\n \"Timed out waiting for login in the browser. Run the zup login command again.\"\n );\n } else {\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n\n server.close();\n return params;\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/login/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,MAAM,CAAC;AACvB,OAAO,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,gBAAwB;IACxD,IAAI,MAAmC,CAAC;IAExC,MAAM,OAAO,GAAG,CAAC,GAAyB,EAAE,GAAwB,EAAE,EAAE;QACtE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,gBAAgB,EAAE,CAAC,CAAC;QAErE,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;IAGF,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAGnE,MAAM,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE5B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,UAAU,EAAE,GAAG,GAAG,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,oCAAoC,CACxC,gFAAgF,CACjF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import http from \"node:http\";\nimport opn from \"open\";\nimport { printCriticalFailureToConsoleAndExit } from \"../common/output.js\";\nimport { AUTH_SERVER_PORT } from \"./handler.js\";\nimport { html } from \"./html.js\";\n\nexport async function browserAuth(authorizationUrl: string) {\n let params: URLSearchParams | undefined;\n\n const handler = (req: http.IncomingMessage, res: http.ServerResponse) => {\n if (!req.url) {\n throw new Error(\"Bad url\");\n }\n const url = new URL(req.url, `http://localhost:${AUTH_SERVER_PORT}`);\n // In here when the server gets a request\n if (url.pathname === \"/\") {\n params = url.searchParams;\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(html);\n } else {\n res.end(\"Unsupported route for login server.\");\n }\n };\n\n // Very simple webserver, using Nodes standard http module\n const server = http.createServer(handler).listen(AUTH_SERVER_PORT); // static local port\n\n // Open authorization url in preferred browser, works cross-platform\n await opn(authorizationUrl);\n\n let iterations = 0;\n while (params === undefined) {\n if (iterations++ > 600) {\n server.close();\n await printCriticalFailureToConsoleAndExit(\n \"Timed out waiting for login in the browser. Run the zuplo login command again.\"\n );\n } else {\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n\n server.close();\n return params;\n}\n"]}
@@ -1 +1 @@
1
- {"root":["../src/cli.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/engine.test.ts","../src/__tests__/import-openapi-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/oas-test-data.ts","../src/__tests__/outdated.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/convert.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/editor.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/test.ts","../src/cmds/project/import-openapi.ts","../src/cmds/project/index.ts","../src/cmds/project/update.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/settings.ts","../src/common/worker-output.ts","../src/common/analytics/lib.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/ports.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/login-state-validator.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/convert/engine.ts","../src/convert/handler.ts","../src/convert/routes.legacy.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/editor/handler.ts","../src/editor/assets/index-03352ce7.js","../src/editor/server/cors-plugin.ts","../src/editor/server/server.ts","../src/editor/server/xfs.ts","../src/link/handler.ts","../src/link/populate.ts","../src/list/handler.ts","../src/login/handler.ts","../src/login/server.ts","../src/project/import-openapi/handler.ts","../src/project/import-openapi/interfaces.ts","../src/project/import-openapi/utils.ts","../src/project/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts"],"version":"5.7.3"}
1
+ {"root":["../src/cli.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/engine.test.ts","../src/__tests__/import-openapi-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/oas-test-data.ts","../src/__tests__/outdated.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/convert.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/editor.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/test.ts","../src/cmds/project/import-openapi.ts","../src/cmds/project/index.ts","../src/cmds/project/update.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/settings.ts","../src/common/worker-output.ts","../src/common/analytics/lib.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/ports.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/convert/engine.ts","../src/convert/handler.ts","../src/convert/routes.legacy.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/editor/handler.ts","../src/editor/assets/index-03352ce7.js","../src/editor/server/cors-plugin.ts","../src/editor/server/server.ts","../src/editor/server/xfs.ts","../src/link/handler.ts","../src/link/populate.ts","../src/list/handler.ts","../src/login/handler.ts","../src/login/html.ts","../src/login/server.ts","../src/project/import-openapi/handler.ts","../src/project/import-openapi/interfaces.ts","../src/project/import-openapi/utils.ts","../src/project/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts"],"version":"5.7.3"}
@@ -1,7 +1,7 @@
1
1
  export interface Arguments {
2
2
  account: string;
3
3
  "tunnel-name": string;
4
- "api-key": string;
4
+ authToken: string;
5
5
  }
6
6
  export declare function create(argv: Arguments): Promise<void>;
7
7
  //# sourceMappingURL=handler.d.ts.map
@@ -6,7 +6,7 @@ export async function create(argv) {
6
6
  const createResponse = await fetch(`${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/tunnels`, {
7
7
  method: "POST",
8
8
  headers: {
9
- Authorization: `Bearer ${argv["api-key"]}`,
9
+ Authorization: `Bearer ${argv.authToken}`,
10
10
  "Content-Type": "application/json",
11
11
  },
12
12
  body: JSON.stringify({ name: argv["tunnel-name"] }),
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/tunnel/create/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,oCAAoC,EACpC,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAShD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAe;IAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,UAAU,EACzE;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,EAAE;YAC1C,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;KACpD,CACF,CAAC;IAEF,IAAI,cAAc,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,MAAM,GAAW,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,oCAAoC,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,QAAQ,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;SAClD,EACD,qCAAqC,CACtC,CAAC;QACF,yBAAyB,CACvB,uEAAuE,CACxE,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport {\n printDiagnosticsToConsole,\n printTableToConsoleAndExitGracefully,\n textOrJson,\n} from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { Tunnel } from \"../models.js\";\n\nexport interface Arguments {\n account: string;\n \"tunnel-name\": string;\n \"api-key\": string;\n}\n\nexport async function create(argv: Arguments) {\n const { account } = argv;\n const createResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/tunnels`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ name: argv[\"tunnel-name\"] }),\n }\n );\n\n if (createResponse.ok) {\n const tunnel: Tunnel = await createResponse.json();\n await printTableToConsoleAndExitGracefully(tunnel);\n } else {\n logger.error(\n {\n status: createResponse.status,\n statusText: createResponse.statusText,\n response: textOrJson(await createResponse.text()),\n },\n \"Failed to create tunnel for account\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to create tunnel for your account. Check the arguments.\"\n );\n }\n}\n"]}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/tunnel/create/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,oCAAoC,EACpC,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAShD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAe;IAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,UAAU,EACzE;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;YACzC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;KACpD,CACF,CAAC;IAEF,IAAI,cAAc,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,MAAM,GAAW,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,oCAAoC,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,QAAQ,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;SAClD,EACD,qCAAqC,CACtC,CAAC;QACF,yBAAyB,CACvB,uEAAuE,CACxE,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport {\n printDiagnosticsToConsole,\n printTableToConsoleAndExitGracefully,\n textOrJson,\n} from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { Tunnel } from \"../models.js\";\n\nexport interface Arguments {\n account: string;\n \"tunnel-name\": string;\n authToken: string;\n}\n\nexport async function create(argv: Arguments) {\n const { account } = argv;\n const createResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/tunnels`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${argv.authToken}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ name: argv[\"tunnel-name\"] }),\n }\n );\n\n if (createResponse.ok) {\n const tunnel: Tunnel = await createResponse.json();\n await printTableToConsoleAndExitGracefully(tunnel);\n } else {\n logger.error(\n {\n status: createResponse.status,\n statusText: createResponse.statusText,\n response: textOrJson(await createResponse.text()),\n },\n \"Failed to create tunnel for account\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to create tunnel for your account. Check the arguments.\"\n );\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  export interface Arguments {
2
2
  account: string;
3
3
  "tunnel-id": string;
4
- "api-key": string;
4
+ authToken: string;
5
5
  }
6
6
  export declare function deleteTunnel(argv: Arguments): Promise<void>;
7
7
  //# sourceMappingURL=handler.d.ts.map
@@ -7,7 +7,7 @@ export async function deleteTunnel(argv) {
7
7
  const deleteResponse = await fetch(`${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/tunnels/${argv["tunnel-id"]}`, {
8
8
  method: "DELETE",
9
9
  headers: {
10
- Authorization: `Bearer ${argv["api-key"]}`,
10
+ Authorization: `Bearer ${argv.authToken}`,
11
11
  },
12
12
  });
13
13
  if (deleteResponse.ok) {
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/tunnel/delete/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,oCAAoC,EACpC,yBAAyB,EACzB,qCAAqC,EACrC,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQrE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAe;IAEhD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,YAAY,IAAI,CAAC,WAAW,CAAC,EAAE,EAC9F;QACE,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,EAAE;SAC3C;KACF,CACF,CAAC;IAEF,IAAI,cAAc,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,iBAAiB,GAAsB,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QACzE,yBAAyB,CACvB,mBAAmB,IAAI,CAAC,WAAW,CAAC,eAAe,OAAO,KAAK,CAChE,CAAC;QAGF,MAAM,uBAAuB,GAAG,MAAM,qBAAqB,CAAC;YAC1D,IAAI;YACJ,OAAO;YACP,mBAAmB,EAAE,iBAAiB,CAAC,EAAE;SAC1C,CAAC,CAAC;QAEH,IAAI,uBAAuB,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjD,MAAM,qCAAqC,CACzC,UAAU,IAAI,CAAC,WAAW,CAAC,wBAAwB,CACpD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,yBAAyB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,oCAAoC,CACxC,UAAU,IAAI,CAAC,WAAW,CAAC,wCAAwC,uBAAuB,CAAC,OAAO,EAAE,CACrG,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,QAAQ;SACT,EACD,qCAAqC,CACtC,CAAC;QACF,yBAAyB,CACvB,2EAA2E,EAC3E,QAAQ,CACT,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n textOrJson,\n} from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { TeardownOperation } from \"../models.js\";\nimport { pollTeardownOperation } from \"./poll-teardown-operation.js\";\n\nexport interface Arguments {\n account: string;\n \"tunnel-id\": string;\n \"api-key\": string;\n}\n\nexport async function deleteTunnel(argv: Arguments) {\n // 1. Initiate a deletion for the tunnel\n const { account } = argv;\n const deleteResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/tunnels/${argv[\"tunnel-id\"]}`,\n {\n method: \"DELETE\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n }\n );\n\n if (deleteResponse.ok) {\n const teardownOperation: TeardownOperation = await deleteResponse.json();\n printDiagnosticsToConsole(\n `Deleting tunnel ${argv[\"tunnel-id\"]} on account ${account}...`\n );\n\n // 2. Poll for status\n const polledTearDownOperation = await pollTeardownOperation({\n argv,\n account,\n teardownOperationId: teardownOperation.id,\n });\n\n if (polledTearDownOperation.status === \"success\") {\n await printResultToConsoleAndExitGracefully(\n `Tunnel ${argv[\"tunnel-id\"]} deleted successfully.`\n );\n } else {\n printDiagnosticsToConsole(polledTearDownOperation.details);\n await printCriticalFailureToConsoleAndExit(\n `Tunnel ${argv[\"tunnel-id\"]} failed to delete. Here's the error: ${polledTearDownOperation.message}`\n );\n }\n } else {\n const response = textOrJson(await deleteResponse.text());\n logger.error(\n {\n status: deleteResponse.status,\n statusText: deleteResponse.statusText,\n response,\n },\n \"Failed to delete tunnel for account\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to delete the tunnel for your account. Check the arguments.\",\n response\n );\n }\n}\n"]}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/tunnel/delete/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,oCAAoC,EACpC,yBAAyB,EACzB,qCAAqC,EACrC,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQrE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAe;IAEhD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,YAAY,IAAI,CAAC,WAAW,CAAC,EAAE,EAC9F;QACE,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;SAC1C;KACF,CACF,CAAC;IAEF,IAAI,cAAc,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,iBAAiB,GAAsB,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QACzE,yBAAyB,CACvB,mBAAmB,IAAI,CAAC,WAAW,CAAC,eAAe,OAAO,KAAK,CAChE,CAAC;QAGF,MAAM,uBAAuB,GAAG,MAAM,qBAAqB,CAAC;YAC1D,IAAI;YACJ,OAAO;YACP,mBAAmB,EAAE,iBAAiB,CAAC,EAAE;SAC1C,CAAC,CAAC;QAEH,IAAI,uBAAuB,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjD,MAAM,qCAAqC,CACzC,UAAU,IAAI,CAAC,WAAW,CAAC,wBAAwB,CACpD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,yBAAyB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,oCAAoC,CACxC,UAAU,IAAI,CAAC,WAAW,CAAC,wCAAwC,uBAAuB,CAAC,OAAO,EAAE,CACrG,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,QAAQ;SACT,EACD,qCAAqC,CACtC,CAAC;QACF,yBAAyB,CACvB,2EAA2E,EAC3E,QAAQ,CACT,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n textOrJson,\n} from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { TeardownOperation } from \"../models.js\";\nimport { pollTeardownOperation } from \"./poll-teardown-operation.js\";\n\nexport interface Arguments {\n account: string;\n \"tunnel-id\": string;\n authToken: string;\n}\n\nexport async function deleteTunnel(argv: Arguments) {\n // 1. Initiate a deletion for the tunnel\n const { account } = argv;\n const deleteResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/tunnels/${argv[\"tunnel-id\"]}`,\n {\n method: \"DELETE\",\n headers: {\n Authorization: `Bearer ${argv.authToken}`,\n },\n }\n );\n\n if (deleteResponse.ok) {\n const teardownOperation: TeardownOperation = await deleteResponse.json();\n printDiagnosticsToConsole(\n `Deleting tunnel ${argv[\"tunnel-id\"]} on account ${account}...`\n );\n\n // 2. Poll for status\n const polledTearDownOperation = await pollTeardownOperation({\n argv,\n account,\n teardownOperationId: teardownOperation.id,\n });\n\n if (polledTearDownOperation.status === \"success\") {\n await printResultToConsoleAndExitGracefully(\n `Tunnel ${argv[\"tunnel-id\"]} deleted successfully.`\n );\n } else {\n printDiagnosticsToConsole(polledTearDownOperation.details);\n await printCriticalFailureToConsoleAndExit(\n `Tunnel ${argv[\"tunnel-id\"]} failed to delete. Here's the error: ${polledTearDownOperation.message}`\n );\n }\n } else {\n const response = textOrJson(await deleteResponse.text());\n logger.error(\n {\n status: deleteResponse.status,\n statusText: deleteResponse.statusText,\n response,\n },\n \"Failed to delete tunnel for account\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to delete the tunnel for your account. Check the arguments.\",\n response\n );\n }\n}\n"]}
@@ -5,14 +5,14 @@ function wait(duration = settings.PROVISIONING_POLL_INTERVAL) {
5
5
  return new Promise((resolve) => setTimeout(resolve, duration));
6
6
  }
7
7
  export async function pollTeardownOperation(args) {
8
- const apiKey = args.argv["api-key"];
8
+ const authToken = args.argv.authToken;
9
9
  const tunnelId = args.argv["tunnel-id"];
10
10
  for (let pollRetry = 0; pollRetry < settings.MAX_PROVISIONING_RETRIES; pollRetry++) {
11
11
  printDiagnosticsToConsole(`Polling for teardown operation status... (${pollRetry}/${settings.MAX_PROVISIONING_RETRIES})`);
12
12
  const response = await fetch(`${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${args.account}/tunnels/${tunnelId}/teardown-operations/${args.teardownOperationId}`, {
13
13
  method: "GET",
14
14
  headers: {
15
- Authorization: `Bearer ${apiKey}`,
15
+ Authorization: `Bearer ${authToken}`,
16
16
  },
17
17
  });
18
18
  if (response.ok) {
@@ -1 +1 @@
1
- {"version":3,"file":"poll-teardown-operation.js","sourceRoot":"","sources":["../../../src/tunnel/delete/poll-teardown-operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAIhD,SAAS,IAAI,CACX,WAAmB,QAAQ,CAAC,0BAA0B;IAEtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAI3C;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAExC,KACE,IAAI,SAAS,GAAG,CAAC,EACjB,SAAS,GAAG,QAAQ,CAAC,wBAAwB,EAC7C,SAAS,EAAE,EACX,CAAC;QACD,yBAAyB,CACvB,6CAA6C,SAAS,IAAI,QAAQ,CAAC,wBAAwB,GAAG,CAC/F,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,IAAI,CAAC,OAAO,YAAY,QAAQ,wBAAwB,IAAI,CAAC,mBAAmB,EAAE,EAC1I;YACE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;SACF,CACF,CAAC;QAEF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,iBAAiB,GAAsB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnE,QAAQ,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBACjC,KAAK,OAAO;oBACV,OAAO,iBAAiB,CAAC;gBAC3B,KAAK,aAAa;oBAChB,MAAM,IAAI,EAAE,CAAC;oBACb,SAAS;gBACX,KAAK,SAAS;oBACZ,OAAO,iBAAiB,CAAC;YAC7B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CACV,6EACE,QAAQ,CAAC,MACX,IAAI,QAAQ,CAAC,UAAU,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CACnD,CAAC;YACF,MAAM,IAAI,KAAK,CACb,gFAAgF,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACzH,CAAC;QACJ,CAAC;IACH,CAAC;IAID,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;AACJ,CAAC","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport { printDiagnosticsToConsole } from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { TeardownOperation } from \"../models.js\";\nimport { Arguments } from \"./handler.js\";\n\nfunction wait(\n duration: number = settings.PROVISIONING_POLL_INTERVAL\n): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, duration));\n}\n\nexport async function pollTeardownOperation(args: {\n argv: Arguments;\n account: string;\n teardownOperationId: string;\n}): Promise<TeardownOperation> {\n const apiKey = args.argv[\"api-key\"];\n const tunnelId = args.argv[\"tunnel-id\"];\n\n for (\n let pollRetry = 0;\n pollRetry < settings.MAX_PROVISIONING_RETRIES;\n pollRetry++\n ) {\n printDiagnosticsToConsole(\n `Polling for teardown operation status... (${pollRetry}/${settings.MAX_PROVISIONING_RETRIES})`\n );\n\n const response = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${args.account}/tunnels/${tunnelId}/teardown-operations/${args.teardownOperationId}`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n }\n );\n\n if (response.ok) {\n const teardownOperation: TeardownOperation = await response.json();\n switch (teardownOperation.status) {\n case \"error\":\n return teardownOperation;\n case \"in-progress\":\n await wait();\n continue;\n case \"success\":\n return teardownOperation;\n }\n } else {\n logger.error(\n `Unexpected error from server while polling for teardown operation status: ${\n response.status\n } ${response.statusText} ${await response.json()}`\n );\n throw new Error(\n `Unexpected response from server while polling for teardown operation status: ${response.status} ${response.statusText}`\n );\n }\n }\n\n // We will not get here because we will always execute the loop at least once\n // This is to appease the TypeScript compiler\n throw new Error(\n \"Unexpected error while polling for teardown operation status\"\n );\n}\n"]}
1
+ {"version":3,"file":"poll-teardown-operation.js","sourceRoot":"","sources":["../../../src/tunnel/delete/poll-teardown-operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAIhD,SAAS,IAAI,CACX,WAAmB,QAAQ,CAAC,0BAA0B;IAEtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAI3C;IACC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAExC,KACE,IAAI,SAAS,GAAG,CAAC,EACjB,SAAS,GAAG,QAAQ,CAAC,wBAAwB,EAC7C,SAAS,EAAE,EACX,CAAC;QACD,yBAAyB,CACvB,6CAA6C,SAAS,IAAI,QAAQ,CAAC,wBAAwB,GAAG,CAC/F,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,IAAI,CAAC,OAAO,YAAY,QAAQ,wBAAwB,IAAI,CAAC,mBAAmB,EAAE,EAC1I;YACE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,SAAS,EAAE;aACrC;SACF,CACF,CAAC;QAEF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,iBAAiB,GAAsB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnE,QAAQ,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBACjC,KAAK,OAAO;oBACV,OAAO,iBAAiB,CAAC;gBAC3B,KAAK,aAAa;oBAChB,MAAM,IAAI,EAAE,CAAC;oBACb,SAAS;gBACX,KAAK,SAAS;oBACZ,OAAO,iBAAiB,CAAC;YAC7B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CACV,6EACE,QAAQ,CAAC,MACX,IAAI,QAAQ,CAAC,UAAU,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CACnD,CAAC;YACF,MAAM,IAAI,KAAK,CACb,gFAAgF,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACzH,CAAC;QACJ,CAAC;IACH,CAAC;IAID,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;AACJ,CAAC","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport { printDiagnosticsToConsole } from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { TeardownOperation } from \"../models.js\";\nimport { Arguments } from \"./handler.js\";\n\nfunction wait(\n duration: number = settings.PROVISIONING_POLL_INTERVAL\n): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, duration));\n}\n\nexport async function pollTeardownOperation(args: {\n argv: Arguments;\n account: string;\n teardownOperationId: string;\n}): Promise<TeardownOperation> {\n const authToken = args.argv.authToken;\n const tunnelId = args.argv[\"tunnel-id\"];\n\n for (\n let pollRetry = 0;\n pollRetry < settings.MAX_PROVISIONING_RETRIES;\n pollRetry++\n ) {\n printDiagnosticsToConsole(\n `Polling for teardown operation status... (${pollRetry}/${settings.MAX_PROVISIONING_RETRIES})`\n );\n\n const response = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${args.account}/tunnels/${tunnelId}/teardown-operations/${args.teardownOperationId}`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${authToken}`,\n },\n }\n );\n\n if (response.ok) {\n const teardownOperation: TeardownOperation = await response.json();\n switch (teardownOperation.status) {\n case \"error\":\n return teardownOperation;\n case \"in-progress\":\n await wait();\n continue;\n case \"success\":\n return teardownOperation;\n }\n } else {\n logger.error(\n `Unexpected error from server while polling for teardown operation status: ${\n response.status\n } ${response.statusText} ${await response.json()}`\n );\n throw new Error(\n `Unexpected response from server while polling for teardown operation status: ${response.status} ${response.statusText}`\n );\n }\n }\n\n // We will not get here because we will always execute the loop at least once\n // This is to appease the TypeScript compiler\n throw new Error(\n \"Unexpected error while polling for teardown operation status\"\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  export interface Arguments {
2
2
  account: string;
3
3
  "tunnel-id": string;
4
- "api-key": string;
4
+ authToken: string;
5
5
  }
6
6
  export declare function describe(argv: Arguments): Promise<void>;
7
7
  //# sourceMappingURL=handler.d.ts.map