@wootsup/mcp 0.1.0 → 0.4.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 (208) hide show
  1. package/CHANGELOG.md +157 -83
  2. package/README.md +31 -27
  3. package/SECURITY.md +15 -6
  4. package/dist/auth/keychain.d.ts +27 -1
  5. package/dist/auth/keychain.js +48 -2
  6. package/dist/auth/keychain.js.map +1 -1
  7. package/dist/catalog/build-catalog.d.ts +31 -0
  8. package/dist/catalog/build-catalog.js +68 -0
  9. package/dist/catalog/build-catalog.js.map +1 -0
  10. package/dist/cli-hint.d.ts +22 -0
  11. package/dist/cli-hint.js +55 -0
  12. package/dist/cli-hint.js.map +1 -0
  13. package/dist/index.js +129 -22
  14. package/dist/index.js.map +1 -1
  15. package/dist/install-skill.js +1 -1
  16. package/dist/modules/apimapper/auto-layout.d.ts +21 -0
  17. package/dist/modules/apimapper/auto-layout.js +54 -0
  18. package/dist/modules/apimapper/auto-layout.js.map +1 -0
  19. package/dist/modules/apimapper/cache.js +25 -17
  20. package/dist/modules/apimapper/cache.js.map +1 -1
  21. package/dist/modules/apimapper/client.d.ts +115 -4
  22. package/dist/modules/apimapper/client.js +699 -304
  23. package/dist/modules/apimapper/client.js.map +1 -1
  24. package/dist/modules/apimapper/connections-format.d.ts +31 -1
  25. package/dist/modules/apimapper/connections-format.js +97 -5
  26. package/dist/modules/apimapper/connections-format.js.map +1 -1
  27. package/dist/modules/apimapper/connections.d.ts +9 -7
  28. package/dist/modules/apimapper/connections.js +449 -127
  29. package/dist/modules/apimapper/connections.js.map +1 -1
  30. package/dist/modules/apimapper/credential-sanitizer.d.ts +5 -0
  31. package/dist/modules/apimapper/credential-sanitizer.js +60 -1
  32. package/dist/modules/apimapper/credential-sanitizer.js.map +1 -1
  33. package/dist/modules/apimapper/credentials.js +105 -61
  34. package/dist/modules/apimapper/credentials.js.map +1 -1
  35. package/dist/modules/apimapper/diagnose.js +21 -2
  36. package/dist/modules/apimapper/diagnose.js.map +1 -1
  37. package/dist/modules/apimapper/elicitation.d.ts +29 -0
  38. package/dist/modules/apimapper/elicitation.js +62 -0
  39. package/dist/modules/apimapper/elicitation.js.map +1 -1
  40. package/dist/modules/apimapper/example-extract.d.ts +13 -0
  41. package/dist/modules/apimapper/example-extract.js +111 -0
  42. package/dist/modules/apimapper/example-extract.js.map +1 -0
  43. package/dist/modules/apimapper/filter-operators.d.ts +24 -0
  44. package/dist/modules/apimapper/filter-operators.js +103 -0
  45. package/dist/modules/apimapper/filter-operators.js.map +1 -0
  46. package/dist/modules/apimapper/flows-format.js +92 -22
  47. package/dist/modules/apimapper/flows-format.js.map +1 -1
  48. package/dist/modules/apimapper/flows.d.ts +8 -7
  49. package/dist/modules/apimapper/flows.js +275 -120
  50. package/dist/modules/apimapper/flows.js.map +1 -1
  51. package/dist/modules/apimapper/gateway/advanced-read-tool.d.ts +9 -0
  52. package/dist/modules/apimapper/gateway/advanced-read-tool.js +172 -0
  53. package/dist/modules/apimapper/gateway/advanced-read-tool.js.map +1 -0
  54. package/dist/modules/apimapper/gateway/advanced-tool.js +66 -106
  55. package/dist/modules/apimapper/gateway/advanced-tool.js.map +1 -1
  56. package/dist/modules/apimapper/gateway/collect-module-tools.d.ts +17 -0
  57. package/dist/modules/apimapper/gateway/collect-module-tools.js +44 -0
  58. package/dist/modules/apimapper/gateway/collect-module-tools.js.map +1 -0
  59. package/dist/modules/apimapper/gateway/essentials.d.ts +1 -1
  60. package/dist/modules/apimapper/gateway/essentials.js +21 -2
  61. package/dist/modules/apimapper/gateway/essentials.js.map +1 -1
  62. package/dist/modules/apimapper/gateway/gateway-shared.d.ts +21 -0
  63. package/dist/modules/apimapper/gateway/gateway-shared.js +124 -0
  64. package/dist/modules/apimapper/gateway/gateway-shared.js.map +1 -0
  65. package/dist/modules/apimapper/gateway/test-support.d.ts +1 -17
  66. package/dist/modules/apimapper/gateway/test-support.js +4 -33
  67. package/dist/modules/apimapper/gateway/test-support.js.map +1 -1
  68. package/dist/modules/apimapper/get-skill-cores.d.ts +4 -0
  69. package/dist/modules/apimapper/get-skill-cores.js +220 -0
  70. package/dist/modules/apimapper/get-skill-cores.js.map +1 -0
  71. package/dist/modules/apimapper/get-skill.d.ts +1 -1
  72. package/dist/modules/apimapper/get-skill.js +74 -9
  73. package/dist/modules/apimapper/get-skill.js.map +1 -1
  74. package/dist/modules/apimapper/graph-builder.d.ts +85 -2
  75. package/dist/modules/apimapper/graph-builder.js +151 -15
  76. package/dist/modules/apimapper/graph-builder.js.map +1 -1
  77. package/dist/modules/apimapper/graph.js +152 -48
  78. package/dist/modules/apimapper/graph.js.map +1 -1
  79. package/dist/modules/apimapper/index.js +27 -13
  80. package/dist/modules/apimapper/index.js.map +1 -1
  81. package/dist/modules/apimapper/jmespath-test.d.ts +4 -0
  82. package/dist/modules/apimapper/jmespath-test.js +152 -0
  83. package/dist/modules/apimapper/jmespath-test.js.map +1 -0
  84. package/dist/modules/apimapper/library.js +553 -88
  85. package/dist/modules/apimapper/library.js.map +1 -1
  86. package/dist/modules/apimapper/license.js +12 -36
  87. package/dist/modules/apimapper/license.js.map +1 -1
  88. package/dist/modules/apimapper/list-footer.d.ts +27 -0
  89. package/dist/modules/apimapper/list-footer.js +57 -0
  90. package/dist/modules/apimapper/list-footer.js.map +1 -0
  91. package/dist/modules/apimapper/local-sources.js +100 -57
  92. package/dist/modules/apimapper/local-sources.js.map +1 -1
  93. package/dist/modules/apimapper/mcp-client-identity.d.ts +32 -0
  94. package/dist/modules/apimapper/mcp-client-identity.js +70 -0
  95. package/dist/modules/apimapper/mcp-client-identity.js.map +1 -0
  96. package/dist/modules/apimapper/merge-constants.d.ts +6 -0
  97. package/dist/modules/apimapper/merge-constants.js +26 -0
  98. package/dist/modules/apimapper/merge-constants.js.map +1 -0
  99. package/dist/modules/apimapper/misc.js +13 -27
  100. package/dist/modules/apimapper/misc.js.map +1 -1
  101. package/dist/modules/apimapper/node-schema.d.ts +52 -2
  102. package/dist/modules/apimapper/node-schema.js +95 -4
  103. package/dist/modules/apimapper/node-schema.js.map +1 -1
  104. package/dist/modules/apimapper/onboarding.d.ts +59 -1
  105. package/dist/modules/apimapper/onboarding.js +231 -28
  106. package/dist/modules/apimapper/onboarding.js.map +1 -1
  107. package/dist/modules/apimapper/read-cache.d.ts +16 -3
  108. package/dist/modules/apimapper/read-cache.js +59 -4
  109. package/dist/modules/apimapper/read-cache.js.map +1 -1
  110. package/dist/modules/apimapper/render/index.js +26 -5
  111. package/dist/modules/apimapper/render/index.js.map +1 -1
  112. package/dist/modules/apimapper/resource-id.d.ts +13 -0
  113. package/dist/modules/apimapper/resource-id.js +69 -0
  114. package/dist/modules/apimapper/resource-id.js.map +1 -0
  115. package/dist/modules/apimapper/schema.js +9 -18
  116. package/dist/modules/apimapper/schema.js.map +1 -1
  117. package/dist/modules/apimapper/settings.js +49 -52
  118. package/dist/modules/apimapper/settings.js.map +1 -1
  119. package/dist/modules/apimapper/sites-tools.d.ts +29 -0
  120. package/dist/modules/apimapper/sites-tools.js +165 -0
  121. package/dist/modules/apimapper/sites-tools.js.map +1 -0
  122. package/dist/modules/apimapper/tool-result.d.ts +66 -0
  123. package/dist/modules/apimapper/tool-result.js +125 -0
  124. package/dist/modules/apimapper/tool-result.js.map +1 -0
  125. package/dist/modules/apimapper/toolslist-size.d.ts +12 -11
  126. package/dist/modules/apimapper/toolslist-size.js +34 -21
  127. package/dist/modules/apimapper/toolslist-size.js.map +1 -1
  128. package/dist/modules/apimapper/types.d.ts +34 -0
  129. package/dist/modules/apimapper/types.js +1 -1
  130. package/dist/modules/apimapper/types.js.map +1 -1
  131. package/dist/modules/apimapper/whitelist-drift.d.ts +85 -0
  132. package/dist/modules/apimapper/whitelist-drift.js +375 -0
  133. package/dist/modules/apimapper/whitelist-drift.js.map +1 -0
  134. package/dist/modules/apimapper/workflows.js +302 -58
  135. package/dist/modules/apimapper/workflows.js.map +1 -1
  136. package/dist/modules/apimapper/yootheme-binding.d.ts +35 -0
  137. package/dist/modules/apimapper/yootheme-binding.js +267 -0
  138. package/dist/modules/apimapper/yootheme-binding.js.map +1 -0
  139. package/dist/platform/index.d.ts +56 -0
  140. package/dist/platform/index.js +158 -2
  141. package/dist/platform/index.js.map +1 -1
  142. package/dist/proxy/bridge.d.ts +35 -0
  143. package/dist/proxy/bridge.js +129 -0
  144. package/dist/proxy/bridge.js.map +1 -0
  145. package/dist/proxy/mode.d.ts +9 -0
  146. package/dist/proxy/mode.js +20 -0
  147. package/dist/proxy/mode.js.map +1 -0
  148. package/dist/setup/detect-clients.d.ts +40 -1
  149. package/dist/setup/detect-clients.js +148 -1
  150. package/dist/setup/detect-clients.js.map +1 -1
  151. package/dist/setup/probe-auth.d.ts +51 -0
  152. package/dist/setup/probe-auth.js +141 -0
  153. package/dist/setup/probe-auth.js.map +1 -0
  154. package/dist/setup/probe-handshake.js +40 -7
  155. package/dist/setup/probe-handshake.js.map +1 -1
  156. package/dist/setup/remove-config.d.ts +8 -0
  157. package/dist/setup/remove-config.js +145 -0
  158. package/dist/setup/remove-config.js.map +1 -0
  159. package/dist/setup/uninstall.d.ts +34 -0
  160. package/dist/setup/uninstall.js +147 -0
  161. package/dist/setup/uninstall.js.map +1 -0
  162. package/dist/setup-cli.d.ts +16 -0
  163. package/dist/setup-cli.js +63 -1
  164. package/dist/setup-cli.js.map +1 -1
  165. package/dist/sites/loader.d.ts +48 -0
  166. package/dist/sites/loader.js +134 -0
  167. package/dist/sites/loader.js.map +1 -0
  168. package/dist/sites/schema.d.ts +69 -0
  169. package/dist/sites/schema.js +71 -0
  170. package/dist/sites/schema.js.map +1 -0
  171. package/dist/sites/secret-resolver.d.ts +47 -0
  172. package/dist/sites/secret-resolver.js +150 -0
  173. package/dist/sites/secret-resolver.js.map +1 -0
  174. package/dist/skill-instructions.d.ts +14 -1
  175. package/dist/skill-instructions.js +35 -6
  176. package/dist/skill-instructions.js.map +1 -1
  177. package/dist/transports/stdio.js +4 -4
  178. package/dist/transports/stdio.js.map +1 -1
  179. package/dist/uninstall-skill.d.ts +27 -0
  180. package/dist/uninstall-skill.js +89 -0
  181. package/dist/uninstall-skill.js.map +1 -0
  182. package/docs/architecture.md +21 -21
  183. package/docs/customgraph-internal-migration.md +4 -4
  184. package/docs/security.md +2 -21
  185. package/docs/tools.md +40 -12
  186. package/manifest.json +77 -79
  187. package/package.json +69 -65
  188. package/skills/apimapper/SKILL.md +128 -7
  189. package/skills/apimapper/reference/conditional-style-multi-items.md +114 -0
  190. package/skills/apimapper/reference/dynamize-existing-layout.md +158 -0
  191. package/skills/apimapper/reference/jmespath-cookbook.md +241 -0
  192. package/skills/apimapper/reference/jmespath-pitfalls.md +189 -0
  193. package/skills/apimapper/reference/joomla.md +1 -1
  194. package/skills/apimapper/reference/library-template-discovery.md +65 -0
  195. package/skills/apimapper/reference/merge-two-sources-on-key.md +204 -0
  196. package/skills/apimapper/reference/oauth.md +143 -52
  197. package/skills/apimapper/reference/troubleshooting.md +22 -2
  198. package/skills/apimapper/reference/yootheme-source-to-builder-handoff.md +348 -0
  199. package/skills/apimapper/reference/yootheme.md +75 -44
  200. package/dist/auth/oauth-provider.d.ts +0 -68
  201. package/dist/auth/oauth-provider.js +0 -232
  202. package/dist/auth/oauth-provider.js.map +0 -1
  203. package/dist/server-http.d.ts +0 -22
  204. package/dist/server-http.js +0 -159
  205. package/dist/server-http.js.map +0 -1
  206. package/dist/transports/http.d.ts +0 -29
  207. package/dist/transports/http.js +0 -267
  208. package/dist/transports/http.js.map +0 -1
@@ -6,7 +6,7 @@
6
6
  //
7
7
  // The module accepts an injectable DetectEnv so that tests can pretend
8
8
  // to be running on any OS without touching the real filesystem.
9
- import { existsSync as realExistsSync } from "node:fs";
9
+ import { existsSync as realExistsSync, readFileSync as realReadFileSync } from "node:fs";
10
10
  import { platform as realPlatform, homedir as realHomedir } from "node:os";
11
11
  import { dirname } from "node:path";
12
12
  const PSEP = (home) => (home.includes("\\") ? "\\" : "/");
@@ -130,6 +130,7 @@ const REAL_ENV = {
130
130
  homedir: () => realHomedir(),
131
131
  env: process.env,
132
132
  existsSync: (p) => realExistsSync(p),
133
+ readFile: (p) => realReadFileSync(p, "utf8"),
133
134
  };
134
135
  export async function detectClients(env = REAL_ENV) {
135
136
  const plat = env.platform();
@@ -147,6 +148,152 @@ export async function detectClients(env = REAL_ENV) {
147
148
  });
148
149
  return out;
149
150
  }
151
+ // ── uninstall detection ──────────────────────────────────────────────────
152
+ //
153
+ // detectInstalledClients() is the reverse-of-setup discovery: instead of
154
+ // "where COULD a client live", it answers "which client configs actually
155
+ // contain one of OUR server entries", returning the matched key names so
156
+ // the remover knows exactly what to delete.
157
+ /**
158
+ * Canonical + legacy keys this CLI has ever written for the MCP server
159
+ * entry. The setup wizard currently writes "API Mapper MCP" and migrates
160
+ * away from the two legacy keys; the uninstall scan checks all three plus a
161
+ * command/args substring match (below) to catch arbitrarily-renamed
162
+ * leftovers.
163
+ *
164
+ * Keep in sync with setup-cli.ts's write key + `legacyKeys`.
165
+ */
166
+ export const OUR_SERVER_KEYS = [
167
+ "API Mapper MCP",
168
+ "apimapper-mcp",
169
+ "apimapper",
170
+ "WootsUp!? - API Mapper",
171
+ ];
172
+ /** The npm package substring that identifies our entry by command/args. */
173
+ export const OUR_PACKAGE_SUBSTRING = "@wootsup/mcp";
174
+ /** True iff a JSON server-entry value references our package by command/args. */
175
+ function jsonEntryIsOurs(value) {
176
+ if (!value || typeof value !== "object" || Array.isArray(value))
177
+ return false;
178
+ const v = value;
179
+ if (typeof v.command === "string" && v.command.includes(OUR_PACKAGE_SUBSTRING)) {
180
+ return true;
181
+ }
182
+ if (Array.isArray(v.args)) {
183
+ return v.args.some((a) => typeof a === "string" && a.includes(OUR_PACKAGE_SUBSTRING));
184
+ }
185
+ return false;
186
+ }
187
+ /** Collect matched server keys from a JSON config string. */
188
+ function matchedKeysInJson(text) {
189
+ let parsed;
190
+ try {
191
+ parsed = JSON.parse(text);
192
+ }
193
+ catch {
194
+ return [];
195
+ }
196
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
197
+ return [];
198
+ const servers = parsed.mcpServers;
199
+ if (!servers || typeof servers !== "object" || Array.isArray(servers)) {
200
+ return [];
201
+ }
202
+ const ourKeys = new Set(OUR_SERVER_KEYS);
203
+ const matched = [];
204
+ for (const [key, value] of Object.entries(servers)) {
205
+ if (ourKeys.has(key) || jsonEntryIsOurs(value)) {
206
+ matched.push(key);
207
+ }
208
+ }
209
+ return matched;
210
+ }
211
+ /**
212
+ * Collect matched table names from a Codex TOML config string. A block runs
213
+ * from its `[mcp_servers.<name>]` header to the next top-level `[...]` header
214
+ * (sub-tables like `[mcp_servers.<name>.env]` belong to the block). A block
215
+ * matches if its name is one of OUR_SERVER_KEYS OR any line in the block
216
+ * references our package substring.
217
+ */
218
+ function matchedKeysInToml(text) {
219
+ const lines = text.split("\n");
220
+ const ourKeys = new Set(OUR_SERVER_KEYS);
221
+ const matched = [];
222
+ const headerRe = /^\s*\[mcp_servers\.(.+?)\]\s*$/;
223
+ let i = 0;
224
+ while (i < lines.length) {
225
+ const m = headerRe.exec(lines[i]);
226
+ if (!m) {
227
+ i += 1;
228
+ continue;
229
+ }
230
+ const name = m[1];
231
+ // Skip sub-tables (name contains a dot we treat as <key>.<sub>); the
232
+ // base block is captured when its own header is seen first. We still
233
+ // collect the body to scan for the package substring.
234
+ const baseName = name.includes(".") ? name.slice(0, name.indexOf(".")) : name;
235
+ let body = lines[i];
236
+ let j = i + 1;
237
+ for (; j < lines.length; j++) {
238
+ const t = lines[j].trim();
239
+ if (t.startsWith("[") && t.endsWith("]")) {
240
+ // A nested `[mcp_servers.<base>.x]` belongs to this block.
241
+ const sub = headerRe.exec(lines[j]);
242
+ if (sub && sub[1].startsWith(`${baseName}.`)) {
243
+ body += `\n${lines[j]}`;
244
+ continue;
245
+ }
246
+ break;
247
+ }
248
+ body += `\n${lines[j]}`;
249
+ }
250
+ if (!name.includes(".")) {
251
+ if (ourKeys.has(baseName) || body.includes(OUR_PACKAGE_SUBSTRING)) {
252
+ matched.push(baseName);
253
+ }
254
+ }
255
+ i = j;
256
+ }
257
+ return matched;
258
+ }
259
+ /**
260
+ * Scan every known client config for OUR server entries. Returns one
261
+ * {@link InstalledClient} per config that has ≥1 matching entry, with the
262
+ * matched key names. Missing files, unreadable files, and malformed configs
263
+ * are skipped silently (they simply contribute no matches).
264
+ */
265
+ export async function detectInstalledClients(env = REAL_ENV) {
266
+ const plat = env.platform();
267
+ const home = env.homedir();
268
+ const ctx = { home, appdata: getAppdata(env, home) };
269
+ const readFile = env.readFile ?? ((p) => realReadFileSync(p, "utf8"));
270
+ const out = [];
271
+ for (const def of CLIENT_DEFS) {
272
+ const configPath = pickPath(def, plat, ctx);
273
+ if (!env.existsSync(configPath))
274
+ continue;
275
+ let text;
276
+ try {
277
+ text = readFile(configPath);
278
+ }
279
+ catch {
280
+ continue;
281
+ }
282
+ const matchedKeys = def.format === "toml"
283
+ ? matchedKeysInToml(text)
284
+ : matchedKeysInJson(text);
285
+ if (matchedKeys.length > 0) {
286
+ out.push({
287
+ id: def.id,
288
+ label: def.label,
289
+ configPath,
290
+ format: def.format,
291
+ matchedKeys,
292
+ });
293
+ }
294
+ }
295
+ return out;
296
+ }
150
297
  // Re-export the helper for use by other setup modules (write-config etc.).
151
298
  export { joinPath, dirname };
152
299
  //# sourceMappingURL=detect-clients.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect-clients.js","sourceRoot":"","sources":["../../src/setup/detect-clients.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect-clients.js","sourceRoot":"","sources":["../../src/setup/detect-clients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Recovery recipe shown when the authenticated probe is rejected (401/403)
3
+ * — the pasted MCP key is wrong, revoked, or expired.
4
+ *
5
+ * Kept verbatim-equal to `MCP_KEY_AUTH_HINT` in
6
+ * `modules/apimapper/client.ts` so the customer sees the SAME recovery steps
7
+ * during setup and at tool-call time. We intentionally do NOT import that
8
+ * constant: `client.ts` has heavyweight module-level side effects (an undici
9
+ * global dispatcher and a `NODE_ENV === "production"` fail-fast `process.exit`
10
+ * that fires when the site URL / token env vars are still unset) — and the
11
+ * setup wizard runs BEFORE those env vars exist. Importing it here would risk
12
+ * crashing `npx @wootsup/mcp setup` on a production-tagged shell. A sync test
13
+ * (probe-auth.test.ts) asserts the two strings never drift.
14
+ */
15
+ export declare const SETUP_AUTH_RECOVERY_HINT: string;
16
+ export type ProbePlatform = "wordpress" | "joomla" | "unknown";
17
+ export interface ProbeAuthOptions {
18
+ /** Customer's site URL (trailing slashes are trimmed). */
19
+ siteUrl: string;
20
+ /** The MCP key the customer just pasted (sent as a Bearer token). */
21
+ token: string;
22
+ /**
23
+ * The platform detected by probeIdentity. When `"unknown"` both the WP
24
+ * and Joomla arms are probed in parallel.
25
+ */
26
+ platform: ProbePlatform;
27
+ }
28
+ export interface ProbeAuthResult {
29
+ /** True iff a bearer-required endpoint answered 2xx with the pasted key. */
30
+ ok: boolean;
31
+ /**
32
+ * True iff the (only / every responding) probe returned HTTP 401/403 —
33
+ * i.e. the key is wrong, revoked, or expired. Distinct from a generic
34
+ * not-ok (5xx, network) so the wizard can surface the MCP-key recovery
35
+ * hint rather than a connectivity message.
36
+ */
37
+ authFailed?: boolean;
38
+ /** The observed HTTP status (single-arm probes only). */
39
+ status?: number;
40
+ /** Human-facing failure detail for the generic (non-auth) failure path. */
41
+ error?: string;
42
+ }
43
+ /**
44
+ * Perform ONE authenticated probe with the pasted key. See module header for
45
+ * the full contract.
46
+ *
47
+ * @returns {@link ProbeAuthResult}: `{ ok: true }` on a 2xx; `{ ok: false,
48
+ * authFailed: true, status }` on 401/403; `{ ok: false, status?, error? }`
49
+ * on any other failure.
50
+ */
51
+ export declare function probeAuth(opts: ProbeAuthOptions): Promise<ProbeAuthResult>;
@@ -0,0 +1,141 @@
1
+ // src/setup/probe-auth.ts — F117 (authenticated setup probe).
2
+ //
3
+ // The pre-F117 setup probes were both auth-blind:
4
+ // - probeIdentity (setup-cli.ts) hits the PUBLIC /identity endpoint → 200
5
+ // with ANY key (even a typo / expired / wrong-site key).
6
+ // - probeHandshake (probe-handshake.ts) does only initialize + tools/list
7
+ // and checks that apimapper_health is in the (statically registered)
8
+ // list — also key-blind.
9
+ //
10
+ // So a customer who pasted a wrong key still saw "🎉 Setup complete"; the
11
+ // FIRST real tool-call 401'd far from the setup context (and seeded the
12
+ // F118 onboarding blindness).
13
+ //
14
+ // probeAuth() closes that gap with ONE authenticated round-trip against a
15
+ // bearer-required endpoint (GET /connections) using the pasted key. A
16
+ // 401/403 → `authFailed`, which the wizard turns into the MCP-key recovery
17
+ // hint + a rollback instead of the success banner.
18
+ //
19
+ // The endpoint shape mirrors probeIdentity():
20
+ // - WordPress: GET {base}/wp-json/api-mapper/v1/connections
21
+ // - Joomla: GET {base}/index.php?option=com_ajax&plugin=apimapper
22
+ // &task=listConnections&format=json
23
+ // both carrying `Authorization: Bearer <token>`. When the platform is
24
+ // already known (from probeIdentity) we hit only that arm; for "unknown" we
25
+ // probe BOTH in parallel and treat the site as authenticated if EITHER arm
26
+ // answers 2xx (the live arm), and as auth-failed only when EVERY responding
27
+ // arm returns 401/403.
28
+ const PROBE_TIMEOUT_MS = 5_000;
29
+ /**
30
+ * Recovery recipe shown when the authenticated probe is rejected (401/403)
31
+ * — the pasted MCP key is wrong, revoked, or expired.
32
+ *
33
+ * Kept verbatim-equal to `MCP_KEY_AUTH_HINT` in
34
+ * `modules/apimapper/client.ts` so the customer sees the SAME recovery steps
35
+ * during setup and at tool-call time. We intentionally do NOT import that
36
+ * constant: `client.ts` has heavyweight module-level side effects (an undici
37
+ * global dispatcher and a `NODE_ENV === "production"` fail-fast `process.exit`
38
+ * that fires when the site URL / token env vars are still unset) — and the
39
+ * setup wizard runs BEFORE those env vars exist. Importing it here would risk
40
+ * crashing `npx @wootsup/mcp setup` on a production-tagged shell. A sync test
41
+ * (probe-auth.test.ts) asserts the two strings never drift.
42
+ */
43
+ export const SETUP_AUTH_RECOVERY_HINT = "Auth failed (HTTP 401/403). Your MCP key (APIMAPPER_TOKEN) is " +
44
+ "invalid, revoked, or expired. Recovery steps: " +
45
+ "(1) Open API Mapper → ⋮ menu → Settings → MCP Access. " +
46
+ "(2) Revoke the old key if you suspect it was leaked. " +
47
+ "(3) Click 'New API key' and copy the value. " +
48
+ "(4) Re-run `npx -y @wootsup/mcp setup` and paste the new key — " +
49
+ "the wizard rewrites your AI client config in place. " +
50
+ "(5) Restart your AI client (Claude Desktop / Cursor / etc.).";
51
+ /**
52
+ * Probe a single bearer-required endpoint. Resolves with the HTTP status on
53
+ * any response (including 401/403/5xx); rejects only on a transport error.
54
+ */
55
+ async function fetchArm(url, token, signal) {
56
+ const r = await fetch(url, {
57
+ signal,
58
+ headers: { Authorization: `Bearer ${token}` },
59
+ });
60
+ return { status: r.status };
61
+ }
62
+ function isAuthStatus(status) {
63
+ return status === 401 || status === 403;
64
+ }
65
+ function wpUrl(base) {
66
+ return `${base}/wp-json/api-mapper/v1/connections`;
67
+ }
68
+ function joomlaUrl(base) {
69
+ return `${base}/index.php?option=com_ajax&plugin=apimapper&task=listConnections&format=json`;
70
+ }
71
+ /**
72
+ * Perform ONE authenticated probe with the pasted key. See module header for
73
+ * the full contract.
74
+ *
75
+ * @returns {@link ProbeAuthResult}: `{ ok: true }` on a 2xx; `{ ok: false,
76
+ * authFailed: true, status }` on 401/403; `{ ok: false, status?, error? }`
77
+ * on any other failure.
78
+ */
79
+ export async function probeAuth(opts) {
80
+ const base = opts.siteUrl.replace(/\/+$/, "");
81
+ const ctrl = new AbortController();
82
+ const deadline = setTimeout(() => ctrl.abort(), PROBE_TIMEOUT_MS);
83
+ try {
84
+ // Known platform → single arm. The status maps directly.
85
+ if (opts.platform === "wordpress" || opts.platform === "joomla") {
86
+ const url = opts.platform === "wordpress" ? wpUrl(base) : joomlaUrl(base);
87
+ const { status } = await fetchArm(url, opts.token, ctrl.signal);
88
+ if (status >= 200 && status < 300)
89
+ return { ok: true, status };
90
+ if (isAuthStatus(status))
91
+ return { ok: false, authFailed: true, status };
92
+ return {
93
+ ok: false,
94
+ status,
95
+ error: `Authenticated probe failed (HTTP ${status}).`,
96
+ };
97
+ }
98
+ // Unknown platform → probe both arms in parallel. The site runs exactly
99
+ // one CMS, so at most one arm is the "real" one; the other typically 404s
100
+ // (no such route) or errors. We treat the site as authenticated if EITHER
101
+ // arm answers 2xx, and as auth-failed only when EVERY arm that responded
102
+ // returned 401/403 (never on a lone 404 from the wrong-CMS arm).
103
+ const arms = await Promise.allSettled([
104
+ fetchArm(wpUrl(base), opts.token, ctrl.signal),
105
+ fetchArm(joomlaUrl(base), opts.token, ctrl.signal),
106
+ ]);
107
+ const statuses = [];
108
+ const errors = [];
109
+ for (const a of arms) {
110
+ if (a.status === "fulfilled")
111
+ statuses.push(a.value.status);
112
+ else
113
+ errors.push(a.reason instanceof Error ? a.reason.message : String(a.reason));
114
+ }
115
+ if (statuses.some((s) => s >= 200 && s < 300)) {
116
+ return { ok: true };
117
+ }
118
+ // Auth-failed only when there IS at least one response and every response
119
+ // is a 401/403. A lone 404 (wrong-CMS arm) must not masquerade as auth.
120
+ if (statuses.length > 0 && statuses.every(isAuthStatus)) {
121
+ return { ok: false, authFailed: true };
122
+ }
123
+ const detail = statuses.length > 0
124
+ ? `HTTP ${statuses.join("/")}`
125
+ : errors.join("; ") || "no endpoint responded";
126
+ return {
127
+ ok: false,
128
+ error: `Authenticated probe failed (${detail}).`,
129
+ };
130
+ }
131
+ catch (err) {
132
+ return {
133
+ ok: false,
134
+ error: err instanceof Error ? err.message : String(err),
135
+ };
136
+ }
137
+ finally {
138
+ clearTimeout(deadline);
139
+ }
140
+ }
141
+ //# sourceMappingURL=probe-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe-auth.js","sourceRoot":"","sources":["../../src/setup/probe-auth.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,12 @@ async function runHandshake(proc, timeoutMs) {
33
33
  const pending = new Map();
34
34
  let nextId = 1;
35
35
  let buf = "";
36
- proc.stdout.on("data", (chunk) => {
36
+ // DEF-LOW-3 (Wave-B audit, 2026-06-03): keep a reference to the data listener
37
+ // + the deadline timer so the deadline branch can detach the listener, clear
38
+ // the timer, and reject every still-pending resolver. Without this, a timeout
39
+ // left the stdout "data" listener attached and the pending Promises' resolvers
40
+ // dangling until proc.kill() (in the caller's finally) tore the stream down.
41
+ const onData = (chunk) => {
37
42
  buf += chunk.toString("utf8");
38
43
  // Process newline-delimited JSON.
39
44
  // (MCP stdio transport uses newline-delimited JSONRPC.)
@@ -64,7 +69,25 @@ async function runHandshake(proc, timeoutMs) {
64
69
  }
65
70
  }
66
71
  }
67
- });
72
+ };
73
+ proc.stdout.on("data", onData);
74
+ let deadlineTimer;
75
+ // Cleanup is idempotent: detach the stdout listener, clear the deadline timer,
76
+ // and reject any resolver still in the pending map so no Promise is left
77
+ // hanging. Called from both the success and the deadline/error paths.
78
+ const cleanup = (rejectPendingWith) => {
79
+ proc.stdout.off("data", onData);
80
+ if (deadlineTimer !== undefined) {
81
+ clearTimeout(deadlineTimer);
82
+ deadlineTimer = undefined;
83
+ }
84
+ if (rejectPendingWith) {
85
+ for (const [id, p] of pending) {
86
+ pending.delete(id);
87
+ p.reject(rejectPendingWith);
88
+ }
89
+ }
90
+ };
68
91
  function send(method, params) {
69
92
  const id = nextId++;
70
93
  const message = { jsonrpc: "2.0", id, method, params };
@@ -73,11 +96,16 @@ async function runHandshake(proc, timeoutMs) {
73
96
  proc.stdin.write(`${JSON.stringify(message)}\n`);
74
97
  });
75
98
  }
76
- // Wrap the whole handshake in a deadline.
99
+ // Wrap the whole handshake in a deadline. On fire, the cleanup detaches the
100
+ // listener, clears the timer, and rejects every pending request.
77
101
  const deadline = new Promise((_, reject) => {
78
- setTimeout(() => reject(new Error("Handshake timed out")), timeoutMs);
102
+ deadlineTimer = setTimeout(() => {
103
+ const err = new Error("Handshake timed out");
104
+ cleanup(err);
105
+ reject(err);
106
+ }, timeoutMs);
79
107
  });
80
- const handshake = (async () => {
108
+ try {
81
109
  // 1. initialize
82
110
  await Promise.race([
83
111
  send("initialize", {
@@ -99,8 +127,13 @@ async function runHandshake(proc, timeoutMs) {
99
127
  .map((t) => (typeof t?.name === "string" ? t.name : null))
100
128
  .filter((n) => n !== null);
101
129
  return names;
102
- })();
103
- return handshake;
130
+ }
131
+ finally {
132
+ // Success or thrown error (other than the deadline, which already cleaned
133
+ // up): detach the listener + clear the timer. Pending resolvers from the
134
+ // deadline path are already rejected; on the happy path the map is empty.
135
+ cleanup();
136
+ }
104
137
  }
105
138
  export async function probeHandshake(opts) {
106
139
  const spawnFn = opts.spawn ?? defaultSpawn;
@@ -1 +1 @@
1
- {"version":3,"file":"probe-handshake.js","sourceRoot":"","sources":["../../src/setup/probe-handshake.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"probe-handshake.js","sourceRoot":"","sources":["../../src/setup/probe-handshake.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface RemoveConfigResult {
2
+ /** True iff at least one matching entry/table was deleted. */
3
+ removed: boolean;
4
+ /** The keys actually removed (subset of the requested keys). */
5
+ removedKeys: string[];
6
+ }
7
+ export declare function removeJsonConfig(path: string, keys: string[]): Promise<RemoveConfigResult>;
8
+ export declare function removeTomlConfig(path: string, keys: string[]): Promise<RemoveConfigResult>;