@_davideast/stitch-mcp 0.4.0 → 0.5.0

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 (210) hide show
  1. package/dist/chunk-25wakzyb.js +137 -0
  2. package/dist/chunk-25wakzyb.js.map +10 -0
  3. package/dist/chunk-2cetsfw4.js +16531 -0
  4. package/dist/chunk-2cetsfw4.js.map +95 -0
  5. package/dist/chunk-2fcdwvrm.js +54 -0
  6. package/dist/chunk-2fcdwvrm.js.map +10 -0
  7. package/dist/chunk-2k7n0w2x.js +3980 -0
  8. package/dist/chunk-2k7n0w2x.js.map +16 -0
  9. package/dist/chunk-2kyqsrg2.js +403 -0
  10. package/dist/chunk-2kyqsrg2.js.map +10 -0
  11. package/dist/chunk-384jmtpy.js +11057 -0
  12. package/dist/chunk-384jmtpy.js.map +238 -0
  13. package/dist/chunk-3at4pjgn.js +22 -0
  14. package/dist/chunk-3at4pjgn.js.map +9 -0
  15. package/dist/chunk-3sfn889r.js +492 -0
  16. package/dist/chunk-3sfn889r.js.map +13 -0
  17. package/dist/chunk-45wx7tn7.js +94 -0
  18. package/dist/chunk-45wx7tn7.js.map +10 -0
  19. package/dist/chunk-48d17n29.js +10 -0
  20. package/dist/chunk-48d17n29.js.map +9 -0
  21. package/dist/chunk-4jwmvjb4.js +839 -0
  22. package/dist/chunk-4jwmvjb4.js.map +11 -0
  23. package/dist/chunk-4jygt4d6.js +14 -0
  24. package/dist/chunk-4jygt4d6.js.map +10 -0
  25. package/dist/chunk-4vxy1qce.js +68 -0
  26. package/dist/chunk-4vxy1qce.js.map +10 -0
  27. package/dist/chunk-7tx0wn04.js +11 -0
  28. package/dist/chunk-7tx0wn04.js.map +9 -0
  29. package/dist/chunk-7xh1y383.js +45188 -0
  30. package/dist/chunk-7xh1y383.js.map +258 -0
  31. package/dist/chunk-8yrtq2qs.js +18 -0
  32. package/dist/chunk-8yrtq2qs.js.map +9 -0
  33. package/dist/chunk-985f11w6.js +21 -0
  34. package/dist/chunk-985f11w6.js.map +9 -0
  35. package/dist/chunk-9tvppjaf.js +250 -0
  36. package/dist/chunk-9tvppjaf.js.map +14 -0
  37. package/dist/chunk-9wyra8hs.js +32 -0
  38. package/dist/chunk-9wyra8hs.js.map +9 -0
  39. package/dist/chunk-cwkb2wbe.js +733 -0
  40. package/dist/chunk-cwkb2wbe.js.map +16 -0
  41. package/dist/chunk-djhzzcgj.js +362 -0
  42. package/dist/chunk-djhzzcgj.js.map +13 -0
  43. package/dist/chunk-edp6faw2.js +7 -0
  44. package/dist/chunk-edp6faw2.js.map +9 -0
  45. package/dist/chunk-ezmw2j8c.js +14 -0
  46. package/dist/chunk-ezmw2j8c.js.map +9 -0
  47. package/dist/chunk-f2hq6bfv.js +22 -0
  48. package/dist/chunk-f2hq6bfv.js.map +10 -0
  49. package/dist/chunk-fwb4fnkp.js +31 -0
  50. package/dist/chunk-fwb4fnkp.js.map +10 -0
  51. package/dist/chunk-h18jrqed.js +9517 -0
  52. package/dist/chunk-h18jrqed.js.map +99 -0
  53. package/dist/chunk-hb3c6f6a.js +42 -0
  54. package/dist/chunk-hb3c6f6a.js.map +9 -0
  55. package/dist/chunk-jy2d17pr.js +252 -0
  56. package/dist/chunk-jy2d17pr.js.map +11 -0
  57. package/dist/chunk-kbtqrkwh.js +24 -0
  58. package/dist/chunk-kbtqrkwh.js.map +10 -0
  59. package/dist/chunk-knbnsf6s.js +92 -0
  60. package/dist/chunk-knbnsf6s.js.map +10 -0
  61. package/dist/chunk-mv9ssgmx.js +446 -0
  62. package/dist/chunk-mv9ssgmx.js.map +17 -0
  63. package/dist/chunk-nq68kghz.js +1647 -0
  64. package/dist/chunk-nq68kghz.js.map +10 -0
  65. package/dist/chunk-nthabjd9.js +3138 -0
  66. package/dist/chunk-nthabjd9.js.map +34 -0
  67. package/dist/chunk-nxpzt33t.js +278 -0
  68. package/dist/chunk-nxpzt33t.js.map +10 -0
  69. package/dist/chunk-pfyjtfex.js +172 -0
  70. package/dist/chunk-pfyjtfex.js.map +10 -0
  71. package/dist/chunk-q1nd6g0y.js +392 -0
  72. package/dist/chunk-q1nd6g0y.js.map +20 -0
  73. package/dist/chunk-q4js8r0z.js +4708 -0
  74. package/dist/chunk-q4js8r0z.js.map +29 -0
  75. package/dist/chunk-qv44tmn6.js +289 -0
  76. package/dist/chunk-qv44tmn6.js.map +13 -0
  77. package/dist/chunk-r2sg2nxa.js +20 -0
  78. package/dist/chunk-r2sg2nxa.js.map +9 -0
  79. package/dist/chunk-rp8wjzht.js +16959 -0
  80. package/dist/chunk-rp8wjzht.js.map +26 -0
  81. package/dist/chunk-rpxnm86e.js +372 -0
  82. package/dist/chunk-rpxnm86e.js.map +17 -0
  83. package/dist/chunk-sdp429xd.js +914 -0
  84. package/dist/chunk-sdp429xd.js.map +24 -0
  85. package/dist/chunk-t85nbjjb.js +113 -0
  86. package/dist/chunk-t85nbjjb.js.map +10 -0
  87. package/dist/chunk-tz7wnw4s.js +211 -0
  88. package/dist/chunk-tz7wnw4s.js.map +11 -0
  89. package/dist/chunk-v7117ywx.js +1477 -0
  90. package/dist/chunk-v7117ywx.js.map +23 -0
  91. package/dist/chunk-w8q7nsm7.js +2098 -0
  92. package/dist/chunk-w8q7nsm7.js.map +44 -0
  93. package/dist/chunk-wa64nz8b.js +47 -0
  94. package/dist/chunk-wa64nz8b.js.map +10 -0
  95. package/dist/chunk-wz8d5vzb.js +234 -0
  96. package/dist/chunk-wz8d5vzb.js.map +11 -0
  97. package/dist/chunk-ycfxp056.js +677 -0
  98. package/dist/chunk-ycfxp056.js.map +17 -0
  99. package/dist/chunk-z9d2xc83.js +3256 -0
  100. package/dist/chunk-z9d2xc83.js.map +84 -0
  101. package/dist/cli.js +111 -126055
  102. package/dist/cli.js.map +19 -0
  103. package/dist/commands/autoload.d.ts +2 -0
  104. package/dist/commands/doctor/command.d.ts +2 -1
  105. package/dist/commands/doctor/command.js +82 -0
  106. package/dist/commands/doctor/command.js.map +11 -0
  107. package/dist/commands/doctor/spec.d.ts +16 -8
  108. package/dist/commands/init/command.d.ts +2 -1
  109. package/dist/commands/init/command.js +98 -0
  110. package/dist/commands/init/command.js.map +11 -0
  111. package/dist/commands/init/spec.d.ts +29 -9
  112. package/dist/commands/logout/command.d.ts +2 -1
  113. package/dist/commands/logout/command.js +79 -0
  114. package/dist/commands/logout/command.js.map +11 -0
  115. package/dist/commands/logout/spec.d.ts +11 -0
  116. package/dist/commands/proxy/command.d.ts +2 -1
  117. package/dist/commands/proxy/command.js +56 -0
  118. package/dist/commands/proxy/command.js.map +11 -0
  119. package/dist/commands/proxy/spec.d.ts +15 -0
  120. package/dist/commands/screens/command.d.ts +2 -1
  121. package/dist/commands/screens/command.js +61 -0
  122. package/dist/commands/screens/command.js.map +11 -0
  123. package/dist/commands/screens/spec.d.ts +9 -0
  124. package/dist/commands/serve/command.d.ts +2 -1
  125. package/dist/commands/serve/command.js +65 -0
  126. package/dist/commands/serve/command.js.map +11 -0
  127. package/dist/commands/serve/spec.d.ts +9 -0
  128. package/dist/commands/site/command.d.ts +2 -1
  129. package/dist/commands/site/command.js +53 -0
  130. package/dist/commands/site/command.js.map +11 -0
  131. package/dist/commands/site/spec.d.ts +15 -0
  132. package/dist/commands/snapshot/command.d.ts +2 -1
  133. package/dist/commands/snapshot/command.js +59 -0
  134. package/dist/commands/snapshot/command.js.map +11 -0
  135. package/dist/commands/tool/command.d.ts +2 -1
  136. package/dist/commands/tool/command.js +79 -0
  137. package/dist/commands/tool/command.js.map +11 -0
  138. package/dist/commands/tool/handler.d.ts +17 -0
  139. package/dist/commands/tool/spec.d.ts +17 -0
  140. package/dist/commands/view/command.d.ts +2 -1
  141. package/dist/commands/view/command.js +52 -0
  142. package/dist/commands/view/command.js.map +11 -0
  143. package/dist/commands/view/spec.d.ts +24 -0
  144. package/dist/framework/CommandDefinition.d.ts +2 -2
  145. package/dist/index.js +26 -21607
  146. package/dist/index.js.map +9 -0
  147. package/dist/lib/services/site/schemas.d.ts +8 -8
  148. package/dist/services/config/handler.d.ts +12 -0
  149. package/dist/services/config/spec.d.ts +82 -0
  150. package/dist/services/gcloud/auth.d.ts +28 -0
  151. package/dist/services/gcloud/core.d.ts +21 -0
  152. package/dist/services/gcloud/handler.d.ts +6 -18
  153. package/dist/services/gcloud/install.d.ts +23 -0
  154. package/dist/services/gcloud/projects.d.ts +15 -0
  155. package/dist/services/gcloud/spec.d.ts +32 -24
  156. package/dist/services/mcp-client/client.d.ts +0 -5
  157. package/dist/services/mcp-client/spec.d.ts +6 -6
  158. package/dist/services/mcp-config/spec.d.ts +12 -12
  159. package/dist/services/project/spec.d.ts +4 -4
  160. package/dist/services/proxy/spec.d.ts +3 -3
  161. package/dist/services/stitch/api.d.ts +10 -0
  162. package/dist/services/stitch/connection.d.ts +5 -0
  163. package/dist/services/stitch/handler.d.ts +5 -3
  164. package/dist/services/stitch/iam.d.ts +11 -0
  165. package/dist/services/stitch/spec.d.ts +6 -6
  166. package/dist/services/view/spec.d.ts +7 -7
  167. package/dist/src/cli.d.ts +1 -0
  168. package/dist/src/commands/doctor/handler.d.ts +9 -0
  169. package/dist/src/commands/doctor/handler.test.d.ts +1 -0
  170. package/dist/src/commands/doctor/spec.d.ts +130 -0
  171. package/dist/src/commands/doctor/spec.test.d.ts +1 -0
  172. package/dist/src/commands/init/handler.d.ts +17 -0
  173. package/dist/src/commands/init/handler.test.d.ts +1 -0
  174. package/dist/src/commands/init/spec.d.ts +88 -0
  175. package/dist/src/commands/init/spec.test.d.ts +1 -0
  176. package/dist/src/commands/proxy/handler.d.ts +7 -0
  177. package/dist/src/commands/proxy/handler.test.d.ts +1 -0
  178. package/dist/src/index.d.ts +13 -0
  179. package/dist/src/platform/detector.d.ts +29 -0
  180. package/dist/src/platform/paths.d.ts +20 -0
  181. package/dist/src/platform/shell.d.ts +26 -0
  182. package/dist/src/services/gcloud/handler.d.ts +48 -0
  183. package/dist/src/services/gcloud/handler.test.d.ts +1 -0
  184. package/dist/src/services/gcloud/spec.d.ts +405 -0
  185. package/dist/src/services/mcp-config/handler.d.ts +12 -0
  186. package/dist/src/services/mcp-config/handler.test.d.ts +1 -0
  187. package/dist/src/services/mcp-config/spec.d.ts +88 -0
  188. package/dist/src/services/mcp-config/spec.test.d.ts +1 -0
  189. package/dist/src/services/project/handler.d.ts +11 -0
  190. package/dist/src/services/project/handler.test.d.ts +1 -0
  191. package/dist/src/services/project/spec.d.ts +86 -0
  192. package/dist/src/services/project/spec.test.d.ts +1 -0
  193. package/dist/src/services/proxy/handler.d.ts +15 -0
  194. package/dist/src/services/proxy/handler.test.d.ts +1 -0
  195. package/dist/src/services/proxy/spec.d.ts +83 -0
  196. package/dist/src/services/proxy/spec.test.d.ts +1 -0
  197. package/dist/src/services/stitch/handler.d.ts +15 -0
  198. package/dist/src/services/stitch/handler.test.d.ts +1 -0
  199. package/dist/src/services/stitch/spec.d.ts +262 -0
  200. package/dist/src/services/stitch/spec.test.d.ts +1 -0
  201. package/dist/src/ui/spinner.d.ts +11 -0
  202. package/dist/src/ui/theme.d.ts +18 -0
  203. package/dist/src/ui/wizard.d.ts +24 -0
  204. package/dist/tests/mocks/shell.d.ts +2 -0
  205. package/dist/ui/JsonTree.d.ts +1 -1
  206. package/package.json +2 -2
  207. package/dist/commands/registry.d.ts +0 -2
  208. package/dist/ui/copy-behaviors/index.d.ts +0 -8
  209. package/dist/ui/serve-behaviors/index.d.ts +0 -7
  210. /package/dist/ui/navigation-behaviors/{index.d.ts → handler.d.ts} +0 -0
@@ -0,0 +1,18 @@
1
+ import {
2
+ SiteBuilder
3
+ } from "./chunk-cwkb2wbe.js";
4
+ import"./chunk-wz8d5vzb.js";
5
+ import"./chunk-2cetsfw4.js";
6
+ import"./chunk-4jwmvjb4.js";
7
+ import"./chunk-7xh1y383.js";
8
+ import"./chunk-qv44tmn6.js";
9
+ import"./chunk-w8q7nsm7.js";
10
+ import"./chunk-nq68kghz.js";
11
+ import"./chunk-mv9ssgmx.js";
12
+ import"./chunk-3sfn889r.js";
13
+ import"./chunk-9wyra8hs.js";
14
+ export {
15
+ SiteBuilder
16
+ };
17
+
18
+ //# debugId=200F8EA45EB770C564756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "200F8EA45EB770C564756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,21 @@
1
+ import {
2
+ DoctorHandler
3
+ } from "./chunk-rpxnm86e.js";
4
+ import"./chunk-2kyqsrg2.js";
5
+ import"./chunk-sdp429xd.js";
6
+ import"./chunk-z9d2xc83.js";
7
+ import"./chunk-nq68kghz.js";
8
+ import"./chunk-mv9ssgmx.js";
9
+ import"./chunk-f2hq6bfv.js";
10
+ import"./chunk-nthabjd9.js";
11
+ import"./chunk-4jygt4d6.js";
12
+ import"./chunk-tz7wnw4s.js";
13
+ import"./chunk-kbtqrkwh.js";
14
+ import"./chunk-3sfn889r.js";
15
+ import"./chunk-2k7n0w2x.js";
16
+ import"./chunk-9wyra8hs.js";
17
+ export {
18
+ DoctorHandler
19
+ };
20
+
21
+ //# debugId=E58F6584DC6207F664756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "E58F6584DC6207F664756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,250 @@
1
+ import {
2
+ ConsoleUI
3
+ } from "./chunk-z9d2xc83.js";
4
+ import"./chunk-mv9ssgmx.js";
5
+ import {
6
+ runSteps
7
+ } from "./chunk-f2hq6bfv.js";
8
+ import {
9
+ GcloudHandler,
10
+ execCommand,
11
+ getGcloudConfigPath
12
+ } from "./chunk-nthabjd9.js";
13
+ import"./chunk-tz7wnw4s.js";
14
+ import {
15
+ icons,
16
+ theme
17
+ } from "./chunk-kbtqrkwh.js";
18
+ import"./chunk-3sfn889r.js";
19
+ import"./chunk-2k7n0w2x.js";
20
+ import"./chunk-9wyra8hs.js";
21
+
22
+ // src/commands/logout/steps/PrepareStep.ts
23
+ class PrepareStep {
24
+ id = "prepare";
25
+ name = "Preparation";
26
+ async shouldRun(context) {
27
+ return true;
28
+ }
29
+ async run(context) {
30
+ const result = await context.gcloudService.ensureInstalled({
31
+ minVersion: "400.0.0",
32
+ forceLocal: false
33
+ });
34
+ if (!result.success) {
35
+ return {
36
+ success: false,
37
+ error: new Error("Google Cloud CLI not found"),
38
+ errorCode: "GCLOUD_NOT_FOUND",
39
+ shouldExit: true
40
+ };
41
+ }
42
+ context.gcloudPath = result.data.path;
43
+ if (!context.input.force) {
44
+ const shouldLogout = await context.ui.promptConfirm("Are you sure you want to log out? This will revoke all credentials.", false);
45
+ if (!shouldLogout) {
46
+ context.ui.log(`
47
+ Logout cancelled.
48
+ `);
49
+ return { success: true, shouldExit: true, detail: "Cancelled" };
50
+ }
51
+ }
52
+ return { success: true };
53
+ }
54
+ }
55
+
56
+ // src/commands/logout/steps/RevokeUserStep.ts
57
+ class RevokeUserStep {
58
+ id = "revoke-user";
59
+ name = "Revoke user authentication";
60
+ async shouldRun(context) {
61
+ if (!context.gcloudPath) {
62
+ const result = await context.gcloudService.ensureInstalled({ minVersion: "400.0.0", forceLocal: false });
63
+ if (result.success)
64
+ context.gcloudPath = result.data.path;
65
+ else
66
+ return false;
67
+ }
68
+ return true;
69
+ }
70
+ async run(context) {
71
+ const activeAccount = await context.gcloudService.getActiveAccount();
72
+ if (activeAccount) {
73
+ context.ui.log(theme.gray("Revoking user authentication..."));
74
+ const userResult = await execCommand([context.gcloudPath, "auth", "revoke", "--all"], { env: this.getEnvironment() });
75
+ if (userResult.success || userResult.stderr?.includes("No credentialed accounts")) {
76
+ context.ui.log(theme.green(`${icons.success} User authentication revoked`));
77
+ context.userRevoked = true;
78
+ } else {
79
+ context.ui.log(theme.yellow(`${icons.warning} Failed to revoke user authentication`));
80
+ }
81
+ } else {
82
+ context.ui.log(theme.gray("No active user authentication found"));
83
+ context.userRevoked = true;
84
+ }
85
+ return { success: true };
86
+ }
87
+ getEnvironment() {
88
+ const configPath = getGcloudConfigPath();
89
+ const env = { ...process.env };
90
+ env.CLOUDSDK_CONFIG = configPath;
91
+ env.CLOUDSDK_CORE_DISABLE_PROMPTS = "1";
92
+ return env;
93
+ }
94
+ }
95
+
96
+ // src/commands/logout/steps/RevokeAdcStep.ts
97
+ class RevokeAdcStep {
98
+ id = "revoke-adc";
99
+ name = "Revoke Application Default Credentials";
100
+ async shouldRun(context) {
101
+ if (!context.gcloudPath) {
102
+ const result = await context.gcloudService.ensureInstalled({ minVersion: "400.0.0", forceLocal: false });
103
+ if (result.success)
104
+ context.gcloudPath = result.data.path;
105
+ else
106
+ return false;
107
+ }
108
+ return true;
109
+ }
110
+ async run(context) {
111
+ const hasADC = await context.gcloudService.hasADC();
112
+ if (hasADC) {
113
+ context.ui.log(theme.gray("Revoking Application Default Credentials..."));
114
+ const adcResult = await execCommand([context.gcloudPath, "auth", "application-default", "revoke"], { env: this.getEnvironment() });
115
+ if (adcResult.success || adcResult.stderr?.includes("No credentials")) {
116
+ context.ui.log(theme.green(`${icons.success} Application Default Credentials revoked`));
117
+ context.adcRevoked = true;
118
+ } else {
119
+ context.ui.log(theme.yellow(`${icons.warning} Failed to revoke Application Default Credentials`));
120
+ }
121
+ } else {
122
+ context.ui.log(theme.gray("No Application Default Credentials found"));
123
+ context.adcRevoked = true;
124
+ }
125
+ return { success: true };
126
+ }
127
+ getEnvironment() {
128
+ const configPath = getGcloudConfigPath();
129
+ const env = { ...process.env };
130
+ env.CLOUDSDK_CONFIG = configPath;
131
+ env.CLOUDSDK_CORE_DISABLE_PROMPTS = "1";
132
+ return env;
133
+ }
134
+ }
135
+
136
+ // src/commands/logout/steps/ClearConfigStep.ts
137
+ import fs from "node:fs";
138
+
139
+ class ClearConfigStep {
140
+ id = "clear-config";
141
+ name = "Clear configuration directory";
142
+ async shouldRun(context) {
143
+ return context.input.clearConfig;
144
+ }
145
+ async run(context) {
146
+ context.ui.log(theme.gray("Clearing gcloud configuration directory..."));
147
+ const configPath = getGcloudConfigPath();
148
+ try {
149
+ if (fs.existsSync(configPath)) {
150
+ fs.rmSync(configPath, { recursive: true, force: true });
151
+ context.ui.log(theme.green(`${icons.success} Configuration directory cleared`));
152
+ context.configCleared = true;
153
+ } else {
154
+ context.ui.log(theme.gray("Configuration directory does not exist"));
155
+ context.configCleared = true;
156
+ }
157
+ } catch (error) {
158
+ context.ui.log(theme.yellow(`${icons.warning} Failed to clear configuration directory`));
159
+ context.ui.log(theme.gray(` ${error instanceof Error ? error.message : String(error)}`));
160
+ }
161
+ return { success: true };
162
+ }
163
+ }
164
+
165
+ // src/commands/logout/handler.ts
166
+ class LogoutHandler {
167
+ gcloudService;
168
+ steps;
169
+ constructor(gcloudService = new GcloudHandler) {
170
+ this.gcloudService = gcloudService;
171
+ this.steps = [
172
+ new PrepareStep,
173
+ new RevokeUserStep,
174
+ new RevokeAdcStep,
175
+ new ClearConfigStep
176
+ ];
177
+ }
178
+ async execute(input) {
179
+ const context = {
180
+ input,
181
+ ui: new ConsoleUI,
182
+ gcloudService: this.gcloudService,
183
+ userRevoked: false,
184
+ adcRevoked: false,
185
+ configCleared: false
186
+ };
187
+ console.log(`
188
+ ${theme.blue("Logout from Google Cloud")}
189
+ `);
190
+ try {
191
+ const { stoppedAt } = await runSteps(this.steps, context, {
192
+ onAfterStep: (_step, result) => {
193
+ if (!result.success && result.errorCode === "GCLOUD_NOT_FOUND")
194
+ return true;
195
+ if (result.shouldExit)
196
+ return true;
197
+ return false;
198
+ }
199
+ });
200
+ if (stoppedAt) {
201
+ if (stoppedAt.result.errorCode === "GCLOUD_NOT_FOUND") {
202
+ return {
203
+ success: false,
204
+ error: {
205
+ code: "GCLOUD_NOT_FOUND",
206
+ message: stoppedAt.result.error?.message || "Gcloud not found",
207
+ recoverable: true
208
+ }
209
+ };
210
+ }
211
+ return {
212
+ success: true,
213
+ data: {
214
+ userRevoked: context.userRevoked,
215
+ adcRevoked: context.adcRevoked,
216
+ configCleared: context.configCleared
217
+ }
218
+ };
219
+ }
220
+ console.log(`
221
+ ${theme.green("Successfully logged out!")}
222
+ `);
223
+ console.log(theme.gray("To log back in, run:"));
224
+ console.log(theme.cyan(` stitch-mcp init
225
+ `));
226
+ return {
227
+ success: true,
228
+ data: {
229
+ userRevoked: context.userRevoked,
230
+ adcRevoked: context.adcRevoked,
231
+ configCleared: context.configCleared
232
+ }
233
+ };
234
+ } catch (error) {
235
+ return {
236
+ success: false,
237
+ error: {
238
+ code: "UNKNOWN_ERROR",
239
+ message: error instanceof Error ? error.message : String(error),
240
+ recoverable: false
241
+ }
242
+ };
243
+ }
244
+ }
245
+ }
246
+ export {
247
+ LogoutHandler
248
+ };
249
+
250
+ //# debugId=4666E2D2B6E78A9764756E2164756E21
@@ -0,0 +1,14 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/logout/steps/PrepareStep.ts", "../src/commands/logout/steps/RevokeUserStep.ts", "../src/commands/logout/steps/RevokeAdcStep.ts", "../src/commands/logout/steps/ClearConfigStep.ts", "../src/commands/logout/handler.ts"],
4
+ "sourcesContent": [
5
+ "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type LogoutContext } from '../context.js';\n\nexport class PrepareStep implements CommandStep<LogoutContext> {\n id = 'prepare';\n name = 'Preparation';\n\n async shouldRun(context: LogoutContext): Promise<boolean> {\n return true;\n }\n\n async run(context: LogoutContext): Promise<StepResult> {\n // Check for gcloud availability\n const result = await context.gcloudService.ensureInstalled({\n minVersion: '400.0.0',\n forceLocal: false,\n });\n\n if (!result.success) {\n return {\n success: false,\n error: new Error('Google Cloud CLI not found'),\n errorCode: 'GCLOUD_NOT_FOUND',\n shouldExit: true\n };\n }\n context.gcloudPath = result.data.path;\n\n if (!context.input.force) {\n const shouldLogout = await context.ui.promptConfirm(\n 'Are you sure you want to log out? This will revoke all credentials.',\n false\n );\n\n if (!shouldLogout) {\n context.ui.log('\\nLogout cancelled.\\n');\n return { success: true, shouldExit: true, detail: 'Cancelled' };\n }\n }\n\n return { success: true };\n }\n}\n",
6
+ "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type LogoutContext } from '../context.js';\nimport { execCommand } from '../../../platform/shell.js';\nimport { theme, icons } from '../../../ui/theme.js';\nimport { getGcloudConfigPath } from '../../../platform/detector.js';\n\nexport class RevokeUserStep implements CommandStep<LogoutContext> {\n id = 'revoke-user';\n name = 'Revoke user authentication';\n\n async shouldRun(context: LogoutContext): Promise<boolean> {\n // If force is true, we might not have set gcloudPath yet in ConfirmStep\n if (!context.gcloudPath) {\n const result = await context.gcloudService.ensureInstalled({ minVersion: '400.0.0', forceLocal: false });\n if (result.success) context.gcloudPath = result.data.path;\n else return false;\n }\n return true;\n }\n\n async run(context: LogoutContext): Promise<StepResult> {\n const activeAccount = await context.gcloudService.getActiveAccount();\n\n if (activeAccount) {\n context.ui.log(theme.gray('Revoking user authentication...'));\n const userResult = await execCommand(\n [context.gcloudPath!, 'auth', 'revoke', '--all'],\n { env: this.getEnvironment() }\n );\n\n if (userResult.success || userResult.stderr?.includes('No credentialed accounts')) {\n context.ui.log(theme.green(`${icons.success} User authentication revoked`));\n context.userRevoked = true;\n } else {\n context.ui.log(theme.yellow(`${icons.warning} Failed to revoke user authentication`));\n }\n } else {\n context.ui.log(theme.gray('No active user authentication found'));\n context.userRevoked = true;\n }\n\n return { success: true };\n }\n\n private getEnvironment(): Record<string, string> {\n const configPath = getGcloudConfigPath();\n const env: Record<string, string> = { ...process.env as Record<string, string> };\n env.CLOUDSDK_CONFIG = configPath;\n env.CLOUDSDK_CORE_DISABLE_PROMPTS = '1';\n return env;\n }\n}\n",
7
+ "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type LogoutContext } from '../context.js';\nimport { execCommand } from '../../../platform/shell.js';\nimport { theme, icons } from '../../../ui/theme.js';\nimport { getGcloudConfigPath } from '../../../platform/detector.js';\n\nexport class RevokeAdcStep implements CommandStep<LogoutContext> {\n id = 'revoke-adc';\n name = 'Revoke Application Default Credentials';\n\n async shouldRun(context: LogoutContext): Promise<boolean> {\n if (!context.gcloudPath) {\n const result = await context.gcloudService.ensureInstalled({ minVersion: '400.0.0', forceLocal: false });\n if (result.success) context.gcloudPath = result.data.path;\n else return false;\n }\n return true;\n }\n\n async run(context: LogoutContext): Promise<StepResult> {\n const hasADC = await context.gcloudService.hasADC();\n if (hasADC) {\n context.ui.log(theme.gray('Revoking Application Default Credentials...'));\n const adcResult = await execCommand(\n [context.gcloudPath!, 'auth', 'application-default', 'revoke'],\n { env: this.getEnvironment() }\n );\n\n if (adcResult.success || adcResult.stderr?.includes('No credentials')) {\n context.ui.log(theme.green(`${icons.success} Application Default Credentials revoked`));\n context.adcRevoked = true;\n } else {\n context.ui.log(theme.yellow(`${icons.warning} Failed to revoke Application Default Credentials`));\n }\n } else {\n context.ui.log(theme.gray('No Application Default Credentials found'));\n context.adcRevoked = true;\n }\n return { success: true };\n }\n\n private getEnvironment(): Record<string, string> {\n const configPath = getGcloudConfigPath();\n const env: Record<string, string> = { ...process.env as Record<string, string> };\n env.CLOUDSDK_CONFIG = configPath;\n env.CLOUDSDK_CORE_DISABLE_PROMPTS = '1';\n return env;\n }\n}\n",
8
+ "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type LogoutContext } from '../context.js';\nimport { theme, icons } from '../../../ui/theme.js';\nimport { getGcloudConfigPath } from '../../../platform/detector.js';\nimport fs from 'node:fs';\n\nexport class ClearConfigStep implements CommandStep<LogoutContext> {\n id = 'clear-config';\n name = 'Clear configuration directory';\n\n async shouldRun(context: LogoutContext): Promise<boolean> {\n return context.input.clearConfig;\n }\n\n async run(context: LogoutContext): Promise<StepResult> {\n context.ui.log(theme.gray('Clearing gcloud configuration directory...'));\n const configPath = getGcloudConfigPath();\n\n try {\n if (fs.existsSync(configPath)) {\n fs.rmSync(configPath, { recursive: true, force: true });\n context.ui.log(theme.green(`${icons.success} Configuration directory cleared`));\n context.configCleared = true;\n } else {\n context.ui.log(theme.gray('Configuration directory does not exist'));\n context.configCleared = true;\n }\n } catch (error) {\n context.ui.log(theme.yellow(`${icons.warning} Failed to clear configuration directory`));\n context.ui.log(theme.gray(` ${error instanceof Error ? error.message : String(error)}`));\n }\n return { success: true };\n }\n}\n",
9
+ "import { type LogoutCommand, type LogoutInput, type LogoutResult } from './spec.js';\nimport { GcloudHandler } from '../../services/gcloud/handler.js';\nimport { type GcloudService } from '../../services/gcloud/spec.js';\nimport { theme } from '../../ui/theme.js';\nimport { ConsoleUI } from '../../framework/ConsoleUI.js';\nimport { type LogoutContext } from './context.js';\nimport { type CommandStep } from '../../framework/CommandStep.js';\nimport { runSteps } from '../../framework/StepRunner.js';\n\nimport { PrepareStep } from './steps/PrepareStep.js';\nimport { RevokeUserStep } from './steps/RevokeUserStep.js';\nimport { RevokeAdcStep } from './steps/RevokeAdcStep.js';\nimport { ClearConfigStep } from './steps/ClearConfigStep.js';\n\nexport class LogoutHandler implements LogoutCommand {\n private steps: CommandStep<LogoutContext>[];\n\n constructor(private readonly gcloudService: GcloudService = new GcloudHandler()) {\n this.steps = [\n new PrepareStep(),\n new RevokeUserStep(),\n new RevokeAdcStep(),\n new ClearConfigStep(),\n ];\n }\n\n async execute(input: LogoutInput): Promise<LogoutResult> {\n const context: LogoutContext = {\n input,\n ui: new ConsoleUI(),\n gcloudService: this.gcloudService,\n userRevoked: false,\n adcRevoked: false,\n configCleared: false,\n };\n\n console.log(`\\n${theme.blue('Logout from Google Cloud')}\\n`);\n\n try {\n const { stoppedAt } = await runSteps(this.steps, context, {\n onAfterStep: (_step, result) => {\n if (!result.success && result.errorCode === 'GCLOUD_NOT_FOUND') return true;\n if (result.shouldExit) return true;\n return false;\n },\n });\n\n if (stoppedAt) {\n if (stoppedAt.result.errorCode === 'GCLOUD_NOT_FOUND') {\n return {\n success: false,\n error: {\n code: 'GCLOUD_NOT_FOUND',\n message: stoppedAt.result.error?.message || 'Gcloud not found',\n recoverable: true,\n },\n };\n }\n // shouldExit case — successful early exit\n return {\n success: true,\n data: {\n userRevoked: context.userRevoked,\n adcRevoked: context.adcRevoked,\n configCleared: context.configCleared,\n },\n };\n }\n\n console.log(`\\n${theme.green('Successfully logged out!')}\\n`);\n console.log(theme.gray('To log back in, run:'));\n console.log(theme.cyan(' stitch-mcp init\\n'));\n\n return {\n success: true,\n data: {\n userRevoked: context.userRevoked,\n adcRevoked: context.adcRevoked,\n configCleared: context.configCleared,\n },\n };\n\n } catch (error) {\n return {\n success: false,\n error: {\n code: 'UNKNOWN_ERROR',\n message: error instanceof Error ? error.message : String(error),\n recoverable: false,\n },\n };\n }\n }\n}\n"
10
+ ],
11
+ "mappings": "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",
12
+ "debugId": "4666E2D2B6E78A9764756E2164756E21",
13
+ "names": []
14
+ }
@@ -0,0 +1,32 @@
1
+ import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, {
22
+ get: all[name],
23
+ enumerable: true,
24
+ configurable: true,
25
+ set: (newValue) => all[name] = () => newValue
26
+ });
27
+ };
28
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
29
+
30
+ export { __toESM, __commonJS, __export, __require };
31
+
32
+ //# debugId=71A6F3EB5F31EF2A64756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "71A6F3EB5F31EF2A64756E2164756E21",
8
+ "names": []
9
+ }