@zuplo/cli 6.69.6 → 6.69.9

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 (141) hide show
  1. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts +2 -0
  2. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts.map +1 -0
  3. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js +184 -0
  4. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js.map +1 -0
  5. package/dist/__tests__/integration/deploy.integration.test.js +1 -0
  6. package/dist/__tests__/integration/deploy.integration.test.js.map +1 -1
  7. package/dist/__tests__/integration/jest-mocks-setup.js +3 -0
  8. package/dist/__tests__/integration/jest-mocks-setup.js.map +1 -1
  9. package/dist/__tests__/integration/whoami.integration.test.js +27 -0
  10. package/dist/__tests__/integration/whoami.integration.test.js.map +1 -1
  11. package/dist/bucket/list/handler.d.ts +8 -0
  12. package/dist/bucket/list/handler.d.ts.map +1 -0
  13. package/dist/bucket/list/handler.js +54 -0
  14. package/dist/bucket/list/handler.js.map +1 -0
  15. package/dist/bucket/models.d.ts +23 -0
  16. package/dist/bucket/models.d.ts.map +1 -0
  17. package/dist/bucket/models.js +2 -0
  18. package/dist/bucket/models.js.map +1 -0
  19. package/dist/cli.js +4 -0
  20. package/dist/cli.js.map +1 -1
  21. package/dist/cmds/bucket/index.d.ts +4 -0
  22. package/dist/cmds/bucket/index.d.ts.map +1 -0
  23. package/dist/cmds/bucket/index.js +9 -0
  24. package/dist/cmds/bucket/index.js.map +1 -0
  25. package/dist/cmds/bucket/list.d.ts +9 -0
  26. package/dist/cmds/bucket/list.d.ts.map +1 -0
  27. package/dist/cmds/bucket/list.js +60 -0
  28. package/dist/cmds/bucket/list.js.map +1 -0
  29. package/dist/cmds/deploy.d.ts.map +1 -1
  30. package/dist/cmds/deploy.js +4 -1
  31. package/dist/cmds/deploy.js.map +1 -1
  32. package/dist/cmds/logout.d.ts +9 -0
  33. package/dist/cmds/logout.d.ts.map +1 -0
  34. package/dist/cmds/logout.js +23 -0
  35. package/dist/cmds/logout.js.map +1 -0
  36. package/dist/cmds/whoami.d.ts.map +1 -1
  37. package/dist/cmds/whoami.js +1 -2
  38. package/dist/cmds/whoami.js.map +1 -1
  39. package/dist/common/middleware/confirm-production-deploy.d.ts +4 -0
  40. package/dist/common/middleware/confirm-production-deploy.d.ts.map +1 -0
  41. package/dist/common/middleware/confirm-production-deploy.js +49 -0
  42. package/dist/common/middleware/confirm-production-deploy.js.map +1 -0
  43. package/dist/common/middleware/get-environment-param.d.ts +6 -0
  44. package/dist/common/middleware/get-environment-param.d.ts.map +1 -1
  45. package/dist/common/middleware/get-environment-param.js +15 -0
  46. package/dist/common/middleware/get-environment-param.js.map +1 -1
  47. package/dist/common/middleware/get-environment-param.test.d.ts +2 -0
  48. package/dist/common/middleware/get-environment-param.test.d.ts.map +1 -0
  49. package/dist/common/middleware/get-environment-param.test.js +33 -0
  50. package/dist/common/middleware/get-environment-param.test.js.map +1 -0
  51. package/dist/common/output.d.ts +3 -0
  52. package/dist/common/output.d.ts.map +1 -1
  53. package/dist/common/output.js +11 -0
  54. package/dist/common/output.js.map +1 -1
  55. package/dist/common/read-linked-config.d.ts +6 -1
  56. package/dist/common/read-linked-config.d.ts.map +1 -1
  57. package/dist/common/read-linked-config.js +14 -4
  58. package/dist/common/read-linked-config.js.map +1 -1
  59. package/dist/common/read-linked-config.test.js +97 -0
  60. package/dist/common/read-linked-config.test.js.map +1 -1
  61. package/dist/deploy/environments.d.ts +1 -0
  62. package/dist/deploy/environments.d.ts.map +1 -1
  63. package/dist/deploy/environments.js +11 -7
  64. package/dist/deploy/environments.js.map +1 -1
  65. package/dist/login/logout.d.ts +5 -0
  66. package/dist/login/logout.d.ts.map +1 -0
  67. package/dist/login/logout.js +6 -0
  68. package/dist/login/logout.js.map +1 -0
  69. package/dist/login/tokens.d.ts +1 -0
  70. package/dist/login/tokens.d.ts.map +1 -1
  71. package/dist/login/tokens.js +16 -1
  72. package/dist/login/tokens.js.map +1 -1
  73. package/dist/tsconfig.tsbuildinfo +1 -1
  74. package/dist/whoami/handler.d.ts +1 -1
  75. package/dist/whoami/handler.d.ts.map +1 -1
  76. package/dist/whoami/handler.js +8 -1
  77. package/dist/whoami/handler.js.map +1 -1
  78. package/node_modules/@zuplo/core/customer.cli.minified.js +225 -211
  79. package/node_modules/@zuplo/core/index.minified.js +237 -223
  80. package/node_modules/@zuplo/core/package.json +1 -1
  81. package/node_modules/@zuplo/editor/node_modules/find-my-way/.github/workflows/node.js.yml +1 -1
  82. package/node_modules/@zuplo/editor/node_modules/find-my-way/README.md +10 -0
  83. package/node_modules/@zuplo/editor/node_modules/find-my-way/index.d.ts +6 -0
  84. package/node_modules/@zuplo/editor/node_modules/find-my-way/index.js +37 -4
  85. package/node_modules/@zuplo/editor/node_modules/find-my-way/lib/handler-storage.js +2 -2
  86. package/node_modules/@zuplo/editor/node_modules/find-my-way/package.json +3 -3
  87. package/node_modules/@zuplo/editor/node_modules/find-my-way/test/repro-issue-414.test.js +57 -0
  88. package/node_modules/@zuplo/editor/node_modules/find-my-way/test/types/router.test-d.ts +1 -0
  89. package/node_modules/@zuplo/graphql/package.json +1 -1
  90. package/node_modules/@zuplo/openapi-tools/package.json +1 -1
  91. package/node_modules/@zuplo/otel/package.json +1 -1
  92. package/node_modules/@zuplo/runtime/out/esm/index.js +48 -48
  93. package/node_modules/@zuplo/runtime/out/esm/index.js.map +1 -1
  94. package/node_modules/@zuplo/runtime/out/types/index.d.ts +23 -2
  95. package/node_modules/@zuplo/runtime/package.json +1 -1
  96. package/node_modules/graphql/index.d.ts +1 -0
  97. package/node_modules/graphql/language/ast.d.ts +10 -1
  98. package/node_modules/graphql/language/ast.js +8 -1
  99. package/node_modules/graphql/language/ast.mjs +8 -1
  100. package/node_modules/graphql/language/directiveLocation.d.ts +1 -0
  101. package/node_modules/graphql/language/directiveLocation.js +1 -0
  102. package/node_modules/graphql/language/directiveLocation.mjs +1 -0
  103. package/node_modules/graphql/language/index.d.ts +1 -0
  104. package/node_modules/graphql/language/kinds.d.ts +1 -0
  105. package/node_modules/graphql/language/kinds.js +1 -0
  106. package/node_modules/graphql/language/kinds.mjs +1 -0
  107. package/node_modules/graphql/language/parser.d.ts +14 -0
  108. package/node_modules/graphql/language/parser.js +33 -0
  109. package/node_modules/graphql/language/parser.mjs +33 -0
  110. package/node_modules/graphql/language/predicates.js +3 -1
  111. package/node_modules/graphql/language/predicates.mjs +5 -1
  112. package/node_modules/graphql/language/printer.js +13 -1
  113. package/node_modules/graphql/language/printer.mjs +13 -1
  114. package/node_modules/graphql/package.json +1 -1
  115. package/node_modules/graphql/type/directives.d.ts +9 -1
  116. package/node_modules/graphql/type/directives.js +10 -1
  117. package/node_modules/graphql/type/directives.mjs +10 -1
  118. package/node_modules/graphql/type/introspection.js +24 -1
  119. package/node_modules/graphql/type/introspection.mjs +24 -1
  120. package/node_modules/graphql/utilities/buildASTSchema.js +4 -0
  121. package/node_modules/graphql/utilities/buildASTSchema.mjs +4 -0
  122. package/node_modules/graphql/utilities/buildClientSchema.js +1 -0
  123. package/node_modules/graphql/utilities/buildClientSchema.mjs +1 -0
  124. package/node_modules/graphql/utilities/extendSchema.js +58 -3
  125. package/node_modules/graphql/utilities/extendSchema.mjs +58 -3
  126. package/node_modules/graphql/utilities/getIntrospectionQuery.d.ts +16 -0
  127. package/node_modules/graphql/utilities/getIntrospectionQuery.js +31 -38
  128. package/node_modules/graphql/utilities/getIntrospectionQuery.mjs +31 -38
  129. package/node_modules/graphql/utilities/introspectionFromSchema.js +1 -0
  130. package/node_modules/graphql/utilities/introspectionFromSchema.mjs +1 -0
  131. package/node_modules/graphql/utilities/printSchema.js +1 -0
  132. package/node_modules/graphql/utilities/printSchema.mjs +1 -0
  133. package/node_modules/graphql/utilities/valueFromAST.js +12 -2
  134. package/node_modules/graphql/utilities/valueFromAST.mjs +12 -2
  135. package/node_modules/graphql/validation/rules/KnownDirectivesRule.js +4 -0
  136. package/node_modules/graphql/validation/rules/KnownDirectivesRule.mjs +4 -0
  137. package/node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.js +12 -0
  138. package/node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.mjs +12 -0
  139. package/node_modules/graphql/version.js +3 -3
  140. package/node_modules/graphql/version.mjs +3 -3
  141. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"environments.js","sourceRoot":"","sources":["../../src/deploy/environments.ts"],"names":[],"mappings":"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","sourcesContent":["import { Environment } from \"../common/api/lib.js\";\nimport { logger } from \"../common/logger.js\";\nimport settings from \"../common/settings.js\";\nimport { SelfHostedArgs } from \"./handler.js\";\n\nexport class UnableToAutoLinkToExistingProject extends Error {\n constructor(projectName: string) {\n super(\n `Unable to link environment and system variables for ${projectName}. Check that the project specified in your zuplo.jsonc exists in your account.`\n );\n Object.setPrototypeOf(this, UnableToAutoLinkToExistingProject.prototype);\n }\n}\n\nexport async function retrieveOrCreateEnvironment(\n branch: string,\n argv: SelfHostedArgs\n) {\n const environment = await retrieveFirstEnvironment(branch, argv);\n if (environment) {\n return environment;\n } else {\n return await createEnvironment(branch, argv);\n }\n}\n\nexport async function retrieveFirstEnvironment(\n branch: string,\n argv: SelfHostedArgs\n): Promise<Environment | undefined> {\n const { account, project } = argv;\n const baseUrl = `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/environments`;\n\n const queryParams: Record<string, string> = {\n accountName: account,\n projectName: project,\n };\n\n const url = new URL(baseUrl);\n url.search = new URLSearchParams(queryParams).toString();\n const readEnvironmentResponse = await fetch(url, {\n method: \"GET\",\n headers: {\n authorization: `Bearer ${argv.authToken}`,\n },\n });\n\n if (!readEnvironmentResponse.ok) {\n logger.debug(\n `Unable to auto-link environment and system variables for ${project} -- ${readEnvironmentResponse.status} ${readEnvironmentResponse.statusText}`\n );\n throw new UnableToAutoLinkToExistingProject(project);\n }\n\n const environmentJsonFromDeveloperAPI =\n (await readEnvironmentResponse.json()) as {\n data: Environment[];\n };\n\n return environmentJsonFromDeveloperAPI.data.find(\n (env) => env.branchName === branch\n );\n}\n\nexport async function createEnvironment(branch: string, argv: SelfHostedArgs) {\n const { account, project } = argv;\n const baseUrl = `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/environments`;\n\n // TODO: This is a heuristic for now since we don't have a way to determine the production branch for self-hosted from a DB\n let environmentType: \"production\" | \"preview\";\n if (branch === \"main\" || branch === \"master\" || branch === \"production\") {\n environmentType = \"production\";\n } else {\n environmentType = \"preview\";\n }\n\n const createEnvironmentResponse = 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 branchName: branch,\n environmentType,\n }),\n });\n\n if (createEnvironmentResponse.ok) {\n return await createEnvironmentResponse.json();\n } else {\n throw new Error(\n `Unable to create environment (project: ${project}, branch: ${branch}). Failed with ${createEnvironmentResponse.statusText}`\n );\n }\n}\n"]}
1
+ {"version":3,"file":"environments.js","sourceRoot":"","sources":["../../src/deploy/environments.ts"],"names":[],"mappings":"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","sourcesContent":["import { Environment } from \"../common/api/lib.js\";\nimport { logger } from \"../common/logger.js\";\nimport settings from \"../common/settings.js\";\nimport { SelfHostedArgs } from \"./handler.js\";\n\nconst PRODUCTION_BRANCH_NAMES: ReadonlySet<string> = new Set([\n \"main\",\n \"master\",\n \"production\",\n]);\n\n// Heuristic check used until dev-api exposes the project's `defaultBranch`\n// to the CLI. Tracked as a follow-up to the production-deploy confirmation\n// work — see PR #7693 review thread.\nexport function isProductionBranchName(name: string): boolean {\n return PRODUCTION_BRANCH_NAMES.has(name);\n}\n\nexport class UnableToAutoLinkToExistingProject extends Error {\n constructor(projectName: string) {\n super(\n `Unable to link environment and system variables for ${projectName}. Check that the project specified in your zuplo.jsonc exists in your account.`\n );\n Object.setPrototypeOf(this, UnableToAutoLinkToExistingProject.prototype);\n }\n}\n\nexport async function retrieveOrCreateEnvironment(\n branch: string,\n argv: SelfHostedArgs\n) {\n const environment = await retrieveFirstEnvironment(branch, argv);\n if (environment) {\n return environment;\n } else {\n return await createEnvironment(branch, argv);\n }\n}\n\nexport async function retrieveFirstEnvironment(\n branch: string,\n argv: SelfHostedArgs\n): Promise<Environment | undefined> {\n const { account, project } = argv;\n const baseUrl = `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/environments`;\n\n const queryParams: Record<string, string> = {\n accountName: account,\n projectName: project,\n };\n\n const url = new URL(baseUrl);\n url.search = new URLSearchParams(queryParams).toString();\n const readEnvironmentResponse = await fetch(url, {\n method: \"GET\",\n headers: {\n authorization: `Bearer ${argv.authToken}`,\n },\n });\n\n if (!readEnvironmentResponse.ok) {\n logger.debug(\n `Unable to auto-link environment and system variables for ${project} -- ${readEnvironmentResponse.status} ${readEnvironmentResponse.statusText}`\n );\n throw new UnableToAutoLinkToExistingProject(project);\n }\n\n const environmentJsonFromDeveloperAPI =\n (await readEnvironmentResponse.json()) as {\n data: Environment[];\n };\n\n return environmentJsonFromDeveloperAPI.data.find(\n (env) => env.branchName === branch\n );\n}\n\nexport async function createEnvironment(branch: string, argv: SelfHostedArgs) {\n const { account, project } = argv;\n const baseUrl = `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/environments`;\n\n // TODO: This is a heuristic for now since we don't have a way to determine the production branch for self-hosted from a DB\n const environmentType: \"production\" | \"preview\" = isProductionBranchName(\n branch\n )\n ? \"production\"\n : \"preview\";\n\n const createEnvironmentResponse = 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 branchName: branch,\n environmentType,\n }),\n });\n\n if (createEnvironmentResponse.ok) {\n return await createEnvironmentResponse.json();\n } else {\n throw new Error(\n `Unable to create environment (project: ${project}, branch: ${branch}). Failed with ${createEnvironmentResponse.statusText}`\n );\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export interface LogoutResult {
2
+ hadCredentials: boolean;
3
+ }
4
+ export declare function logout(): Promise<LogoutResult>;
5
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/login/logout.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,CAGpD"}
@@ -0,0 +1,6 @@
1
+ import { clearAuthState } from "./tokens.js";
2
+ export async function logout() {
3
+ const hadCredentials = await clearAuthState();
4
+ return { hadCredentials };
5
+ }
6
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/login/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAM7C,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,cAAc,GAAG,MAAM,cAAc,EAAE,CAAC;IAC9C,OAAO,EAAE,cAAc,EAAE,CAAC;AAC5B,CAAC","sourcesContent":["import { clearAuthState } from \"./tokens.js\";\n\nexport interface LogoutResult {\n hadCredentials: boolean;\n}\n\nexport async function logout(): Promise<LogoutResult> {\n const hadCredentials = await clearAuthState();\n return { hadCredentials };\n}\n"]}
@@ -11,4 +11,5 @@ export declare function refreshAccessToken(
11
11
  ): Promise<OAuthResponse>;
12
12
  export declare function getAuthToken(): Promise<string | undefined>;
13
13
  export declare function saveAuthState(result: OAuthResponse): Promise<void>;
14
+ export declare function clearAuthState(): Promise<boolean>;
14
15
  //# sourceMappingURL=tokens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/login/tokens.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,aAAa;IAE5B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,YAAY,EAAE,MAAM,CAAC;IAErB,QAAQ,EAAE,MAAM,CAAC;IAEjB,UAAU,EAAE,MAAM,CAAC;IAEnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAOD,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CA0DxB;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA8BhE;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxE"}
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/login/tokens.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,aAAa;IAE5B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,YAAY,EAAE,MAAM,CAAC;IAErB,QAAQ,EAAE,MAAM,CAAC;IAEjB,UAAU,EAAE,MAAM,CAAC;IAEnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAOD,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CA0DxB;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA8BhE;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxE;AAMD,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAevD"}
@@ -1,5 +1,5 @@
1
1
  import { existsSync, mkdirSync } from "node:fs";
2
- import { readFile, writeFile } from "node:fs/promises";
2
+ import { readFile, rm, writeFile } from "node:fs/promises";
3
3
  import { join } from "node:path";
4
4
  import { decodeJwt } from "jose";
5
5
  import { ZUPLO_AUTH_FILE_NAME } from "../common/constants.js";
@@ -84,4 +84,19 @@ export async function saveAuthState(result) {
84
84
  printDiagnosticsToConsole("Failed to save authorization state.");
85
85
  }
86
86
  }
87
+ export async function clearAuthState() {
88
+ const tokenPath = join(ZUPLO_XDG_STATE_HOME, ZUPLO_AUTH_FILE_NAME);
89
+ if (!existsSync(tokenPath)) {
90
+ return false;
91
+ }
92
+ try {
93
+ await rm(tokenPath, { force: true });
94
+ return true;
95
+ }
96
+ catch (error) {
97
+ logger.error({ error, tokenPath }, "Failed to remove auth state file");
98
+ printDiagnosticsToConsole(`Failed to remove the local credentials file at ${tokenPath}. You may need to remove it manually.`);
99
+ return false;
100
+ }
101
+ }
87
102
  //# sourceMappingURL=tokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/login/tokens.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { decodeJwt } from \"jose\";\nimport { ZUPLO_AUTH_FILE_NAME } from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport { printDiagnosticsToConsole } from \"../common/output.js\";\nimport { ZUPLO_XDG_STATE_HOME } from \"../common/xdg/lib.js\";\nimport { AUTH0_DOMAIN, CLIENT_ID } from \"./login.js\";\n\nexport interface OAuthResponse {\n // biome-ignore lint/style/useNamingConvention: API field\n refresh_token?: string;\n // biome-ignore lint/style/useNamingConvention: API field\n access_token: string;\n // biome-ignore lint/style/useNamingConvention: API field\n id_token: string;\n // biome-ignore lint/style/useNamingConvention: API field\n expires_in: number;\n // biome-ignore lint/style/useNamingConvention: API field\n token_type: string;\n scope: string;\n}\n\n/**\n * Refreshes the access token using the provided refresh token.\n * @param refreshToken The refresh token to use for obtaining a new access token.\n * @returns A promise resolving to the new authentication state.\n */\nexport async function refreshAccessToken(\n refreshToken: string\n): Promise<OAuthResponse> {\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: new URLSearchParams({\n // biome-ignore lint/style/useNamingConvention: External API property\n grant_type: \"refresh_token\",\n // biome-ignore lint/style/useNamingConvention: External API property\n client_id: CLIENT_ID,\n // biome-ignore lint/style/useNamingConvention: External API property\n refresh_token: refreshToken,\n }),\n });\n\n if (!response.ok) {\n // Parse the error response if available\n // biome-ignore lint/suspicious/noExplicitAny: Migrated from ESLint\n let errorDetails: any = {};\n try {\n errorDetails = await response.json();\n } catch {\n // If response body is not JSON, continue with status text\n }\n\n const Sentry = await import(\"@sentry/node\");\n const errorMessage =\n errorDetails.error_description ||\n errorDetails.error ||\n response.statusText;\n\n Sentry.captureException(\n new Error(`Failed to refresh token: ${errorMessage}`),\n {\n tags: {\n // biome-ignore lint/style/useNamingConvention: External API property\n oauth_error: errorDetails.error || \"refresh_token_failed\",\n source: \"cli_refresh_token\",\n // biome-ignore lint/style/useNamingConvention: External API property\n status_code: response.status,\n },\n extra: {\n // biome-ignore lint/style/useNamingConvention: External API property\n error_description: errorDetails.error_description,\n // biome-ignore lint/style/useNamingConvention: External API property\n error_details: errorDetails,\n status: response.status,\n // biome-ignore lint/style/useNamingConvention: External API property\n status_text: response.statusText,\n },\n }\n );\n\n throw new Error(`Failed to refresh token: ${errorMessage}`);\n }\n\n return response.json();\n}\n\nexport async function getAuthToken(): Promise<string | undefined> {\n // The auth file doesn't exist.\n if (!existsSync(join(ZUPLO_XDG_STATE_HOME, ZUPLO_AUTH_FILE_NAME))) {\n return;\n }\n\n const rawAuth = await readFile(\n join(ZUPLO_XDG_STATE_HOME, ZUPLO_AUTH_FILE_NAME),\n \"utf-8\"\n );\n const authJson = JSON.parse(rawAuth);\n const jwt = decodeJwt(authJson.access_token);\n\n // The credentials have expired\n if (!jwt.exp || jwt.exp < Date.now() / 1000) {\n logger.debug(\"Access token expired, attempting to get a new one\");\n // If we have a refresh token try to refresh\n if (authJson.refresh_token) {\n try {\n const newAuth = await refreshAccessToken(authJson.refresh_token);\n await saveAuthState(newAuth);\n return newAuth.access_token;\n } catch (error) {\n logger.error(error, `Failed to refresh access token`);\n return;\n }\n }\n return;\n }\n return authJson.access_token;\n}\n\nexport async function saveAuthState(result: OAuthResponse): Promise<void> {\n try {\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 } catch (error) {\n logger.error(error, \"Failed to save auth state\");\n printDiagnosticsToConsole(\"Failed to save authorization state.\");\n }\n}\n"]}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/login/tokens.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync } from \"node:fs\";\nimport { readFile, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { decodeJwt } from \"jose\";\nimport { ZUPLO_AUTH_FILE_NAME } from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport { printDiagnosticsToConsole } from \"../common/output.js\";\nimport { ZUPLO_XDG_STATE_HOME } from \"../common/xdg/lib.js\";\nimport { AUTH0_DOMAIN, CLIENT_ID } from \"./login.js\";\n\nexport interface OAuthResponse {\n // biome-ignore lint/style/useNamingConvention: API field\n refresh_token?: string;\n // biome-ignore lint/style/useNamingConvention: API field\n access_token: string;\n // biome-ignore lint/style/useNamingConvention: API field\n id_token: string;\n // biome-ignore lint/style/useNamingConvention: API field\n expires_in: number;\n // biome-ignore lint/style/useNamingConvention: API field\n token_type: string;\n scope: string;\n}\n\n/**\n * Refreshes the access token using the provided refresh token.\n * @param refreshToken The refresh token to use for obtaining a new access token.\n * @returns A promise resolving to the new authentication state.\n */\nexport async function refreshAccessToken(\n refreshToken: string\n): Promise<OAuthResponse> {\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: new URLSearchParams({\n // biome-ignore lint/style/useNamingConvention: External API property\n grant_type: \"refresh_token\",\n // biome-ignore lint/style/useNamingConvention: External API property\n client_id: CLIENT_ID,\n // biome-ignore lint/style/useNamingConvention: External API property\n refresh_token: refreshToken,\n }),\n });\n\n if (!response.ok) {\n // Parse the error response if available\n // biome-ignore lint/suspicious/noExplicitAny: Migrated from ESLint\n let errorDetails: any = {};\n try {\n errorDetails = await response.json();\n } catch {\n // If response body is not JSON, continue with status text\n }\n\n const Sentry = await import(\"@sentry/node\");\n const errorMessage =\n errorDetails.error_description ||\n errorDetails.error ||\n response.statusText;\n\n Sentry.captureException(\n new Error(`Failed to refresh token: ${errorMessage}`),\n {\n tags: {\n // biome-ignore lint/style/useNamingConvention: External API property\n oauth_error: errorDetails.error || \"refresh_token_failed\",\n source: \"cli_refresh_token\",\n // biome-ignore lint/style/useNamingConvention: External API property\n status_code: response.status,\n },\n extra: {\n // biome-ignore lint/style/useNamingConvention: External API property\n error_description: errorDetails.error_description,\n // biome-ignore lint/style/useNamingConvention: External API property\n error_details: errorDetails,\n status: response.status,\n // biome-ignore lint/style/useNamingConvention: External API property\n status_text: response.statusText,\n },\n }\n );\n\n throw new Error(`Failed to refresh token: ${errorMessage}`);\n }\n\n return response.json();\n}\n\nexport async function getAuthToken(): Promise<string | undefined> {\n // The auth file doesn't exist.\n if (!existsSync(join(ZUPLO_XDG_STATE_HOME, ZUPLO_AUTH_FILE_NAME))) {\n return;\n }\n\n const rawAuth = await readFile(\n join(ZUPLO_XDG_STATE_HOME, ZUPLO_AUTH_FILE_NAME),\n \"utf-8\"\n );\n const authJson = JSON.parse(rawAuth);\n const jwt = decodeJwt(authJson.access_token);\n\n // The credentials have expired\n if (!jwt.exp || jwt.exp < Date.now() / 1000) {\n logger.debug(\"Access token expired, attempting to get a new one\");\n // If we have a refresh token try to refresh\n if (authJson.refresh_token) {\n try {\n const newAuth = await refreshAccessToken(authJson.refresh_token);\n await saveAuthState(newAuth);\n return newAuth.access_token;\n } catch (error) {\n logger.error(error, `Failed to refresh access token`);\n return;\n }\n }\n return;\n }\n return authJson.access_token;\n}\n\nexport async function saveAuthState(result: OAuthResponse): Promise<void> {\n try {\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 } catch (error) {\n logger.error(error, \"Failed to save auth state\");\n printDiagnosticsToConsole(\"Failed to save authorization state.\");\n }\n}\n\n/**\n * Removes the persisted auth state from disk. Returns true if a credentials\n * file was removed, false if there was nothing to remove.\n */\nexport async function clearAuthState(): Promise<boolean> {\n const tokenPath = join(ZUPLO_XDG_STATE_HOME, ZUPLO_AUTH_FILE_NAME);\n if (!existsSync(tokenPath)) {\n return false;\n }\n try {\n await rm(tokenPath, { force: true });\n return true;\n } catch (error) {\n logger.error({ error, tokenPath }, \"Failed to remove auth state file\");\n printDiagnosticsToConsole(\n `Failed to remove the local credentials file at ${tokenPath}. You may need to remove it manually.`\n );\n return false;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"root":["../src/cli.ts","../src/internal.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/outdated.test.ts","../src/__tests__/populate.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/__tests__/integration/confirm-linked-config.integration.test.ts","../src/__tests__/integration/custom-domain.integration.test.ts","../src/__tests__/integration/delete.integration.test.ts","../src/__tests__/integration/deploy.integration.test.ts","../src/__tests__/integration/get-project-param.integration.test.ts","../src/__tests__/integration/info.integration.test.ts","../src/__tests__/integration/jest-mocks-setup.ts","../src/__tests__/integration/jest-setup.ts","../src/__tests__/integration/link.integration.test.ts","../src/__tests__/integration/linked-config-cascade.integration.test.ts","../src/__tests__/integration/list.integration.test.ts","../src/__tests__/integration/test-utils.ts","../src/__tests__/integration/tunnel.integration.test.ts","../src/__tests__/integration/variable.integration.test.ts","../src/__tests__/integration/whoami.integration.test.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/docs.ts","../src/cmds/editor.ts","../src/cmds/info.ts","../src/cmds/init.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/test.ts","../src/cmds/whoami.ts","../src/cmds/custom-domain/create.ts","../src/cmds/custom-domain/delete.ts","../src/cmds/custom-domain/index.ts","../src/cmds/custom-domain/list.ts","../src/cmds/custom-domain/update.ts","../src/cmds/mtls-certificates/create.ts","../src/cmds/mtls-certificates/delete.ts","../src/cmds/mtls-certificates/describe.ts","../src/cmds/mtls-certificates/disable.ts","../src/cmds/mtls-certificates/index.ts","../src/cmds/mtls-certificates/list.ts","../src/cmds/mtls-certificates/update.ts","../src/cmds/open-api/convert.ts","../src/cmds/open-api/index.ts","../src/cmds/open-api/merge.ts","../src/cmds/open-api/overlay.ts","../src/cmds/project/create.ts","../src/cmds/project/index.ts","../src/cmds/project/info.ts","../src/cmds/proxies/create.ts","../src/cmds/proxies/delete.ts","../src/cmds/proxies/describe.ts","../src/cmds/proxies/index.ts","../src/cmds/proxies/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/migrate.ts","../src/cmds/source/upgrade.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/populate.ts","../src/common/read-linked-config.test.ts","../src/common/read-linked-config.ts","../src/common/runner.ts","../src/common/settings.ts","../src/common/terminal.test.ts","../src/common/terminal.ts","../src/common/worker-output.ts","../src/common/analytics/lib.ts","../src/common/api/client.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/confirm-linked-config.ts","../src/common/middleware/get-account-param.ts","../src/common/middleware/get-environment-param.ts","../src/common/middleware/get-project-param.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/middleware/validate-fleet.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/branch.ts","../src/common/utils/build-environment-prompt-choices.test.ts","../src/common/utils/build-environment-prompt-choices.ts","../src/common/utils/format-environment-type.test.ts","../src/common/utils/format-environment-type.ts","../src/common/utils/ports.ts","../src/common/utils/prefixed-output.ts","../src/common/utils/pretty-print-environment-prompt.test.ts","../src/common/utils/pretty-print-environment-prompt.ts","../src/common/utils/sort-environments-for-prompt.test.ts","../src/common/utils/sort-environments-for-prompt.ts","../src/common/utils/stringify-config.test.ts","../src/common/utils/stringify-config.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/argument-validators.spec.ts","../src/common/validators/argument-validators.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/custom-domain/models.ts","../src/custom-domain/create/handler.ts","../src/custom-domain/delete/handler.ts","../src/custom-domain/list/handler.ts","../src/custom-domain/update/handler.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.local-registry.test.ts","../src/deploy/archive.test.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/docs/handler.ts","../src/editor/handler.ts","../src/editor/e2e/editor.spec.ts","../src/init/handler.ts","../src/link/handler.ts","../src/list/handler.ts","../src/login/login.ts","../src/login/tokens.ts","../src/mtls-certificates/models.ts","../src/mtls-certificates/create/handler.ts","../src/mtls-certificates/delete/handler.ts","../src/mtls-certificates/describe/handler.ts","../src/mtls-certificates/disable/handler.ts","../src/mtls-certificates/list/handler.ts","../src/mtls-certificates/update/handler.ts","../src/open-api/convert/handler.spec.ts","../src/open-api/convert/handler.ts","../src/open-api/merge/handler.spec.ts","../src/open-api/merge/handler.ts","../src/open-api/overlay/handler.spec.ts","../src/open-api/overlay/handler.ts","../src/project/create/handler.ts","../src/project/info/handler.ts","../src/proxies/models.ts","../src/proxies/create/handler.ts","../src/proxies/delete/handler.ts","../src/proxies/describe/handler.ts","../src/proxies/update/handler.ts","../src/source/migrate/dev-portal/handler.ts","../src/source/migrate/dev-portal/types.ts","../src/source/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.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","../src/whoami/handler.ts"],"version":"5.8.2"}
1
+ {"root":["../src/cli.ts","../src/internal.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/outdated.test.ts","../src/__tests__/populate.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/__tests__/integration/confirm-linked-config.integration.test.ts","../src/__tests__/integration/confirm-production-deploy.integration.test.ts","../src/__tests__/integration/custom-domain.integration.test.ts","../src/__tests__/integration/delete.integration.test.ts","../src/__tests__/integration/deploy.integration.test.ts","../src/__tests__/integration/get-project-param.integration.test.ts","../src/__tests__/integration/info.integration.test.ts","../src/__tests__/integration/jest-mocks-setup.ts","../src/__tests__/integration/jest-setup.ts","../src/__tests__/integration/link.integration.test.ts","../src/__tests__/integration/linked-config-cascade.integration.test.ts","../src/__tests__/integration/list.integration.test.ts","../src/__tests__/integration/test-utils.ts","../src/__tests__/integration/tunnel.integration.test.ts","../src/__tests__/integration/variable.integration.test.ts","../src/__tests__/integration/whoami.integration.test.ts","../src/bucket/models.ts","../src/bucket/list/handler.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/docs.ts","../src/cmds/editor.ts","../src/cmds/info.ts","../src/cmds/init.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/logout.ts","../src/cmds/test.ts","../src/cmds/whoami.ts","../src/cmds/bucket/index.ts","../src/cmds/bucket/list.ts","../src/cmds/custom-domain/create.ts","../src/cmds/custom-domain/delete.ts","../src/cmds/custom-domain/index.ts","../src/cmds/custom-domain/list.ts","../src/cmds/custom-domain/update.ts","../src/cmds/mtls-certificates/create.ts","../src/cmds/mtls-certificates/delete.ts","../src/cmds/mtls-certificates/describe.ts","../src/cmds/mtls-certificates/disable.ts","../src/cmds/mtls-certificates/index.ts","../src/cmds/mtls-certificates/list.ts","../src/cmds/mtls-certificates/update.ts","../src/cmds/open-api/convert.ts","../src/cmds/open-api/index.ts","../src/cmds/open-api/merge.ts","../src/cmds/open-api/overlay.ts","../src/cmds/project/create.ts","../src/cmds/project/index.ts","../src/cmds/project/info.ts","../src/cmds/proxies/create.ts","../src/cmds/proxies/delete.ts","../src/cmds/proxies/describe.ts","../src/cmds/proxies/index.ts","../src/cmds/proxies/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/migrate.ts","../src/cmds/source/upgrade.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/populate.ts","../src/common/read-linked-config.test.ts","../src/common/read-linked-config.ts","../src/common/runner.ts","../src/common/settings.ts","../src/common/terminal.test.ts","../src/common/terminal.ts","../src/common/worker-output.ts","../src/common/analytics/lib.ts","../src/common/api/client.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/confirm-linked-config.ts","../src/common/middleware/confirm-production-deploy.ts","../src/common/middleware/get-account-param.ts","../src/common/middleware/get-environment-param.test.ts","../src/common/middleware/get-environment-param.ts","../src/common/middleware/get-project-param.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/middleware/validate-fleet.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/branch.ts","../src/common/utils/build-environment-prompt-choices.test.ts","../src/common/utils/build-environment-prompt-choices.ts","../src/common/utils/format-environment-type.test.ts","../src/common/utils/format-environment-type.ts","../src/common/utils/ports.ts","../src/common/utils/prefixed-output.ts","../src/common/utils/pretty-print-environment-prompt.test.ts","../src/common/utils/pretty-print-environment-prompt.ts","../src/common/utils/sort-environments-for-prompt.test.ts","../src/common/utils/sort-environments-for-prompt.ts","../src/common/utils/stringify-config.test.ts","../src/common/utils/stringify-config.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/argument-validators.spec.ts","../src/common/validators/argument-validators.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/custom-domain/models.ts","../src/custom-domain/create/handler.ts","../src/custom-domain/delete/handler.ts","../src/custom-domain/list/handler.ts","../src/custom-domain/update/handler.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.local-registry.test.ts","../src/deploy/archive.test.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/docs/handler.ts","../src/editor/handler.ts","../src/editor/e2e/editor.spec.ts","../src/init/handler.ts","../src/link/handler.ts","../src/list/handler.ts","../src/login/login.ts","../src/login/logout.ts","../src/login/tokens.ts","../src/mtls-certificates/models.ts","../src/mtls-certificates/create/handler.ts","../src/mtls-certificates/delete/handler.ts","../src/mtls-certificates/describe/handler.ts","../src/mtls-certificates/disable/handler.ts","../src/mtls-certificates/list/handler.ts","../src/mtls-certificates/update/handler.ts","../src/open-api/convert/handler.spec.ts","../src/open-api/convert/handler.ts","../src/open-api/merge/handler.spec.ts","../src/open-api/merge/handler.ts","../src/open-api/overlay/handler.spec.ts","../src/open-api/overlay/handler.ts","../src/project/create/handler.ts","../src/project/info/handler.ts","../src/proxies/models.ts","../src/proxies/create/handler.ts","../src/proxies/delete/handler.ts","../src/proxies/describe/handler.ts","../src/proxies/update/handler.ts","../src/source/migrate/dev-portal/handler.ts","../src/source/migrate/dev-portal/types.ts","../src/source/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.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","../src/whoami/handler.ts"],"version":"5.8.2"}
@@ -1,5 +1,5 @@
1
1
  export interface Arguments {
2
- authToken: string;
2
+ "api-key"?: string;
3
3
  }
4
4
  export declare function whoami(argv: Arguments): Promise<void>;
5
5
  //# sourceMappingURL=handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/whoami/handler.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,iBAe3C"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/whoami/handler.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,iBAuB3C"}
@@ -1,7 +1,14 @@
1
1
  import { createApiClient } from "../common/api/client.js";
2
2
  import { printResultToConsoleAndExitGracefully } from "../common/output.js";
3
+ import { getAuthToken } from "../login/tokens.js";
3
4
  export async function whoami(argv) {
4
- const client = createApiClient({ authToken: argv.authToken });
5
+ const apiKey = argv["api-key"]?.trim();
6
+ const authToken = apiKey || (await getAuthToken());
7
+ if (!authToken) {
8
+ await printResultToConsoleAndExitGracefully("You are logged out");
9
+ return;
10
+ }
11
+ const client = createApiClient({ authToken });
5
12
  const data = await client.get("/v1/who-am-i", {
6
13
  operation: "Failed to determine current user",
7
14
  errorMessage: "Error: Failed to determine current user. Check your credentials.",
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/whoami/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAY5E,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAe;IAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,cAAc,EAAE;QAC5D,SAAS,EAAE,kCAAkC;QAC7C,YAAY,EACV,kEAAkE;KACrE,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACvE,MAAM,KAAK,GAAG,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,qCAAqC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,CAAC","sourcesContent":["import { createApiClient } from \"../common/api/client.js\";\nimport { printResultToConsoleAndExitGracefully } from \"../common/output.js\";\n\nexport interface Arguments {\n authToken: string;\n}\n\ninterface WhoAmIResponse {\n sub: string;\n account?: string;\n email?: string;\n}\n\nexport async function whoami(argv: Arguments) {\n const client = createApiClient({ authToken: argv.authToken });\n const data = await client.get<WhoAmIResponse>(\"/v1/who-am-i\", {\n operation: \"Failed to determine current user\",\n errorMessage:\n \"Error: Failed to determine current user. Check your credentials.\",\n });\n\n const identity = data.email ? `${data.email} (${data.sub})` : data.sub;\n const lines = [`Authenticated as ${identity}`];\n if (data.account) {\n lines.push(`Account: ${data.account}`);\n }\n\n await printResultToConsoleAndExitGracefully(lines.join(\"\\n\"));\n}\n"]}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/whoami/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAYlD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAe;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;IAEnD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,qCAAqC,CAAC,oBAAoB,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,cAAc,EAAE;QAC5D,SAAS,EAAE,kCAAkC;QAC7C,YAAY,EACV,kEAAkE;KACrE,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACvE,MAAM,KAAK,GAAG,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,qCAAqC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,CAAC","sourcesContent":["import { createApiClient } from \"../common/api/client.js\";\nimport { printResultToConsoleAndExitGracefully } from \"../common/output.js\";\nimport { getAuthToken } from \"../login/tokens.js\";\n\nexport interface Arguments {\n \"api-key\"?: string;\n}\n\ninterface WhoAmIResponse {\n sub: string;\n account?: string;\n email?: string;\n}\n\nexport async function whoami(argv: Arguments) {\n const apiKey = argv[\"api-key\"]?.trim();\n const authToken = apiKey || (await getAuthToken());\n\n if (!authToken) {\n await printResultToConsoleAndExitGracefully(\"You are logged out\");\n return;\n }\n\n const client = createApiClient({ authToken });\n const data = await client.get<WhoAmIResponse>(\"/v1/who-am-i\", {\n operation: \"Failed to determine current user\",\n errorMessage:\n \"Error: Failed to determine current user. Check your credentials.\",\n });\n\n const identity = data.email ? `${data.email} (${data.sub})` : data.sub;\n const lines = [`Authenticated as ${identity}`];\n if (data.account) {\n lines.push(`Account: ${data.account}`);\n }\n\n await printResultToConsoleAndExitGracefully(lines.join(\"\\n\"));\n}\n"]}