@wootsup/mcp 0.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/LICENSE +21 -0
  3. package/README.md +179 -0
  4. package/SECURITY.md +163 -0
  5. package/dist/auth/keychain.d.ts +47 -0
  6. package/dist/auth/keychain.js +262 -0
  7. package/dist/auth/keychain.js.map +1 -0
  8. package/dist/auth/oauth-provider.d.ts +68 -0
  9. package/dist/auth/oauth-provider.js +232 -0
  10. package/dist/auth/oauth-provider.js.map +1 -0
  11. package/dist/auth/profiles.d.ts +52 -0
  12. package/dist/auth/profiles.js +200 -0
  13. package/dist/auth/profiles.js.map +1 -0
  14. package/dist/auth/token.d.ts +27 -0
  15. package/dist/auth/token.js +88 -0
  16. package/dist/auth/token.js.map +1 -0
  17. package/dist/index.d.ts +13 -0
  18. package/dist/index.js +137 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/install-skill.d.ts +23 -0
  21. package/dist/install-skill.js +73 -0
  22. package/dist/install-skill.js.map +1 -0
  23. package/dist/modules/apimapper/cache.d.ts +2 -0
  24. package/dist/modules/apimapper/cache.js +71 -0
  25. package/dist/modules/apimapper/cache.js.map +1 -0
  26. package/dist/modules/apimapper/client.d.ts +85 -0
  27. package/dist/modules/apimapper/client.js +523 -0
  28. package/dist/modules/apimapper/client.js.map +1 -0
  29. package/dist/modules/apimapper/connections.d.ts +2 -0
  30. package/dist/modules/apimapper/connections.js +406 -0
  31. package/dist/modules/apimapper/connections.js.map +1 -0
  32. package/dist/modules/apimapper/credential-sanitizer.d.ts +7 -0
  33. package/dist/modules/apimapper/credential-sanitizer.js +70 -0
  34. package/dist/modules/apimapper/credential-sanitizer.js.map +1 -0
  35. package/dist/modules/apimapper/credentials.d.ts +2 -0
  36. package/dist/modules/apimapper/credentials.js +258 -0
  37. package/dist/modules/apimapper/credentials.js.map +1 -0
  38. package/dist/modules/apimapper/diagnose.d.ts +18 -0
  39. package/dist/modules/apimapper/diagnose.js +305 -0
  40. package/dist/modules/apimapper/diagnose.js.map +1 -0
  41. package/dist/modules/apimapper/flows.d.ts +2 -0
  42. package/dist/modules/apimapper/flows.js +372 -0
  43. package/dist/modules/apimapper/flows.js.map +1 -0
  44. package/dist/modules/apimapper/get-skill.d.ts +4 -0
  45. package/dist/modules/apimapper/get-skill.js +88 -0
  46. package/dist/modules/apimapper/get-skill.js.map +1 -0
  47. package/dist/modules/apimapper/graph-builder.d.ts +47 -0
  48. package/dist/modules/apimapper/graph-builder.js +117 -0
  49. package/dist/modules/apimapper/graph-builder.js.map +1 -0
  50. package/dist/modules/apimapper/graph.d.ts +2 -0
  51. package/dist/modules/apimapper/graph.js +117 -0
  52. package/dist/modules/apimapper/graph.js.map +1 -0
  53. package/dist/modules/apimapper/index.d.ts +2 -0
  54. package/dist/modules/apimapper/index.js +43 -0
  55. package/dist/modules/apimapper/index.js.map +1 -0
  56. package/dist/modules/apimapper/inspect.d.ts +20 -0
  57. package/dist/modules/apimapper/inspect.js +86 -0
  58. package/dist/modules/apimapper/inspect.js.map +1 -0
  59. package/dist/modules/apimapper/library.d.ts +2 -0
  60. package/dist/modules/apimapper/library.js +237 -0
  61. package/dist/modules/apimapper/library.js.map +1 -0
  62. package/dist/modules/apimapper/license.d.ts +2 -0
  63. package/dist/modules/apimapper/license.js +142 -0
  64. package/dist/modules/apimapper/license.js.map +1 -0
  65. package/dist/modules/apimapper/local-sources.d.ts +2 -0
  66. package/dist/modules/apimapper/local-sources.js +123 -0
  67. package/dist/modules/apimapper/local-sources.js.map +1 -0
  68. package/dist/modules/apimapper/misc.d.ts +2 -0
  69. package/dist/modules/apimapper/misc.js +149 -0
  70. package/dist/modules/apimapper/misc.js.map +1 -0
  71. package/dist/modules/apimapper/node-schema.d.ts +217 -0
  72. package/dist/modules/apimapper/node-schema.js +218 -0
  73. package/dist/modules/apimapper/node-schema.js.map +1 -0
  74. package/dist/modules/apimapper/normalizers.d.ts +13 -0
  75. package/dist/modules/apimapper/normalizers.js +37 -0
  76. package/dist/modules/apimapper/normalizers.js.map +1 -0
  77. package/dist/modules/apimapper/onboarding.d.ts +51 -0
  78. package/dist/modules/apimapper/onboarding.js +201 -0
  79. package/dist/modules/apimapper/onboarding.js.map +1 -0
  80. package/dist/modules/apimapper/schema.d.ts +2 -0
  81. package/dist/modules/apimapper/schema.js +84 -0
  82. package/dist/modules/apimapper/schema.js.map +1 -0
  83. package/dist/modules/apimapper/settings.d.ts +2 -0
  84. package/dist/modules/apimapper/settings.js +157 -0
  85. package/dist/modules/apimapper/settings.js.map +1 -0
  86. package/dist/modules/apimapper/skill-resources.d.ts +4 -0
  87. package/dist/modules/apimapper/skill-resources.js +85 -0
  88. package/dist/modules/apimapper/skill-resources.js.map +1 -0
  89. package/dist/modules/apimapper/types.d.ts +111 -0
  90. package/dist/modules/apimapper/types.js +14 -0
  91. package/dist/modules/apimapper/types.js.map +1 -0
  92. package/dist/modules/apimapper/use-profile.d.ts +34 -0
  93. package/dist/modules/apimapper/use-profile.js +176 -0
  94. package/dist/modules/apimapper/use-profile.js.map +1 -0
  95. package/dist/modules/apimapper/workflows.d.ts +2 -0
  96. package/dist/modules/apimapper/workflows.js +301 -0
  97. package/dist/modules/apimapper/workflows.js.map +1 -0
  98. package/dist/platform/index.d.ts +71 -0
  99. package/dist/platform/index.js +377 -0
  100. package/dist/platform/index.js.map +1 -0
  101. package/dist/server-http.d.ts +22 -0
  102. package/dist/server-http.js +159 -0
  103. package/dist/server-http.js.map +1 -0
  104. package/dist/setup/detect-clients.d.ts +39 -0
  105. package/dist/setup/detect-clients.js +152 -0
  106. package/dist/setup/detect-clients.js.map +1 -0
  107. package/dist/setup/probe-handshake.d.ts +26 -0
  108. package/dist/setup/probe-handshake.js +159 -0
  109. package/dist/setup/probe-handshake.js.map +1 -0
  110. package/dist/setup/write-config.d.ts +25 -0
  111. package/dist/setup/write-config.js +247 -0
  112. package/dist/setup/write-config.js.map +1 -0
  113. package/dist/setup-cli.d.ts +49 -0
  114. package/dist/setup-cli.js +292 -0
  115. package/dist/setup-cli.js.map +1 -0
  116. package/dist/skill-instructions.d.ts +10 -0
  117. package/dist/skill-instructions.js +68 -0
  118. package/dist/skill-instructions.js.map +1 -0
  119. package/dist/transports/http.d.ts +29 -0
  120. package/dist/transports/http.js +267 -0
  121. package/dist/transports/http.js.map +1 -0
  122. package/dist/transports/stdio.d.ts +9 -0
  123. package/dist/transports/stdio.js +19 -0
  124. package/dist/transports/stdio.js.map +1 -0
  125. package/docs/architecture.md +140 -0
  126. package/docs/customgraph-internal-migration.md +210 -0
  127. package/docs/security.md +126 -0
  128. package/docs/tools.md +230 -0
  129. package/manifest.json +76 -0
  130. package/package.json +61 -0
  131. package/skills/apimapper/SKILL.md +57 -0
  132. package/skills/apimapper/reference/joomla.md +85 -0
  133. package/skills/apimapper/reference/oauth.md +94 -0
  134. package/skills/apimapper/reference/troubleshooting.md +123 -0
  135. package/skills/apimapper/reference/yootheme.md +96 -0
@@ -0,0 +1,523 @@
1
+ // src/modules/apimapper/client.ts — Platform-driven REST client for API Mapper.
2
+ //
3
+ // Two-layer architecture (preserves backwards-compat with the 12 modules that
4
+ // import `request`, `hintFor`, `WP_BASE`, `WP_USER`, `authConfigured`):
5
+ //
6
+ // Layer 1 (NEW) — Platform-driven client
7
+ // createPlatformClient(platform).request(action, init) → ExtApiResponse
8
+ // The Platform tells us how to build the URL, attach auth, and unwrap
9
+ // the response envelope. Works for WordPress, Joomla, and (eventually)
10
+ // Standalone.
11
+ //
12
+ // Layer 2 (LEGACY) — Module-level `request()` function
13
+ // The existing `request(path, init, opts)` is preserved for the 12 modules
14
+ // that already call it. It's a thin wrapper that builds a default
15
+ // WordPressPlatform from APIMAPPER_WP_* env vars + uses Basic auth (legacy
16
+ // Application Password) instead of Bearer. New code should use
17
+ // createPlatformClient() directly.
18
+ //
19
+ // Defense-in-depth:
20
+ // - sanitizeErrorString() strips Authorization headers + base64 tokens
21
+ // before any error reaches MCP responses.
22
+ // - Bearer token / Basic token built once at client construction.
23
+ // - Missing credentials → fail-fast in production, silent in tests (legacy
24
+ // path only — Platform path is config-driven).
25
+ import { createHttpClient } from "@getimo/mcp-toolkit";
26
+ import { sanitizeSecrets } from "./credential-sanitizer.js";
27
+ import { WordPressPlatform, JoomlaPlatform } from "../../platform/index.js";
28
+ // DXT / setup-CLI environment bootstrap. The setup wizard writes the
29
+ // MCP key as APIMAPPER_TOKEN and the site URL as APIMAPPER_SITE_URL.
30
+ // Legacy callers (R7 verify scripts, CustomGraph internal use) still
31
+ // expose APIMAPPER_WP_BASE + APIMAPPER_WP_APP_PASS. We bridge both
32
+ // directions HERE — at the top of this module — because ESM hoists
33
+ // imports above any code in src/index.ts. If the env mapping lived in
34
+ // index.ts (the previous design), this client.ts would observe
35
+ // APIMAPPER_WP_APP_PASS=='' at module-evaluation time and produce a
36
+ // broken (un-authed) client even though APIMAPPER_TOKEN was set.
37
+ // Closes Finding #14 (2026-05-18 walkthrough).
38
+ if (process.env.APIMAPPER_TOKEN && !process.env.APIMAPPER_WP_APP_PASS) {
39
+ process.env.APIMAPPER_WP_APP_PASS = process.env.APIMAPPER_TOKEN;
40
+ }
41
+ if (process.env.APIMAPPER_SITE_URL && !process.env.APIMAPPER_WP_BASE) {
42
+ process.env.APIMAPPER_WP_BASE = process.env.APIMAPPER_SITE_URL;
43
+ }
44
+ export const WP_BASE = (process.env.APIMAPPER_WP_BASE || "https://dev.wootsup.com/wordpress").replace(/\/$/, "");
45
+ export const WP_USER = process.env.APIMAPPER_WP_USER || "getimo";
46
+ export const WP_APP_PASS = process.env.APIMAPPER_WP_APP_PASS || "";
47
+ // Auth-shape detection: the credential the customer pastes during setup can
48
+ // be either a WordPress Application Password (legacy / power-user path) or
49
+ // an MCP key in `amk_live_…` / `amk_test_…` shape (the new Phase-1 flow).
50
+ // We mirror this on the server (RestControllerTrait::checkPermissions
51
+ // accepts both); the client must too. Bearer tokens go straight through
52
+ // `Authorization: Bearer <token>`; App Passwords get base64'd as
53
+ // `Authorization: Basic base64(user:pass)`.
54
+ const IS_MCP_BEARER = /^amk_(live|test)_/.test(WP_APP_PASS);
55
+ const BASIC_TOKEN = !IS_MCP_BEARER && WP_APP_PASS
56
+ ? Buffer.from(`${WP_USER}:${WP_APP_PASS}`, "utf8").toString("base64")
57
+ : "";
58
+ const BEARER_TOKEN = IS_MCP_BEARER ? WP_APP_PASS : "";
59
+ if (!BASIC_TOKEN && !BEARER_TOKEN && process.env.NODE_ENV === "production") {
60
+ // Fail-fast: prevents silent unauthenticated client → opaque 401s downstream.
61
+ // In test/dev we keep the client buildable so unit tests don't require a vault.
62
+ console.error("[apimapper-rest] ERROR: APIMAPPER_WP_APP_PASS / APIMAPPER_TOKEN is not " +
63
+ "set. Set via 1Password (see README.md). Refusing to start in production.");
64
+ process.exit(2);
65
+ }
66
+ const rawApi = createHttpClient({
67
+ baseUrl: `${WP_BASE}/wp-json/api-mapper/v1`,
68
+ auth: BEARER_TOKEN
69
+ ? { type: "bearer", token: BEARER_TOKEN }
70
+ : BASIC_TOKEN
71
+ ? { type: "basic", token: BASIC_TOKEN }
72
+ : undefined,
73
+ defaultHeaders: { "X-Requested-With": "XMLHttpRequest" },
74
+ });
75
+ /**
76
+ * Sanitise an error string so it cannot leak the Basic-auth token, base64
77
+ * sequences, or upstream Authorization headers into MCP responses.
78
+ */
79
+ export function sanitizeErrorString(s) {
80
+ if (!s)
81
+ return s;
82
+ // Widened to cover any scheme (Basic, Bearer, Digest, JWT, etc.):
83
+ let out = s.replace(/Authorization:\s*[A-Za-z]+\s+[^\s,;"']+/gi, "Authorization: [REDACTED]");
84
+ if (BASIC_TOKEN)
85
+ out = out.replaceAll(BASIC_TOKEN, "[REDACTED]");
86
+ if (BEARER_TOKEN)
87
+ out = out.replaceAll(BEARER_TOKEN, "[REDACTED]");
88
+ if (WP_APP_PASS)
89
+ out = out.replaceAll(WP_APP_PASS, "[REDACTED]");
90
+ return out;
91
+ }
92
+ function classify(status) {
93
+ if (status === undefined)
94
+ return "network";
95
+ if (status === 401 || status === 403)
96
+ return "auth";
97
+ if (status === 404)
98
+ return "not_found";
99
+ if (status === 429)
100
+ return "rate_limit";
101
+ if (status >= 500)
102
+ return "server";
103
+ return "unknown";
104
+ }
105
+ const DEFAULT_TIMEOUT_MS = 45_000;
106
+ const MIN_TIMEOUT_MS = 1_000;
107
+ const MAX_TIMEOUT_MS = 300_000;
108
+ function resolveTimeout(opts) {
109
+ const t = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
110
+ return Math.max(MIN_TIMEOUT_MS, Math.min(MAX_TIMEOUT_MS, t));
111
+ }
112
+ /**
113
+ * Create a Platform-aware HTTP client. The Platform handles URL construction,
114
+ * auth header injection, and response envelope unwrap (e.g. Joomla's
115
+ * `{success, data, error}` shape).
116
+ *
117
+ * All errors are sanitised via `sanitizeErrorString()` before being returned.
118
+ */
119
+ export function createPlatformClient(platform) {
120
+ return {
121
+ platform,
122
+ request: async (action, init = {}, opts = {}) => {
123
+ let status;
124
+ const timeoutMs = resolveTimeout(opts);
125
+ try {
126
+ const url = platform.buildUrl(action);
127
+ const res = await fetch(url, {
128
+ ...init,
129
+ headers: {
130
+ Accept: "application/json",
131
+ "Content-Type": "application/json",
132
+ "X-Requested-With": "XMLHttpRequest",
133
+ ...platform.buildAuthHeaders(init.method ?? "GET"),
134
+ ...init.headers,
135
+ },
136
+ signal: AbortSignal.timeout(timeoutMs),
137
+ });
138
+ status = res.status;
139
+ const text = await res.text();
140
+ if (!res.ok) {
141
+ let parsed = text;
142
+ try {
143
+ parsed = JSON.parse(text);
144
+ }
145
+ catch {
146
+ // keep as text
147
+ }
148
+ const errMsg = typeof parsed === "object" && parsed && "message" in parsed
149
+ ? String(parsed.message)
150
+ : typeof parsed === "object" && parsed && "error" in parsed
151
+ ? String(parsed.error)
152
+ : `HTTP ${res.status}`;
153
+ return {
154
+ success: false,
155
+ error: sanitizeErrorString(errMsg),
156
+ status,
157
+ errorCode: classify(status),
158
+ };
159
+ }
160
+ if (!text)
161
+ return { success: true, data: {}, status };
162
+ let data;
163
+ try {
164
+ data = JSON.parse(text);
165
+ }
166
+ catch {
167
+ // Non-JSON body — pass through as text.
168
+ return { success: true, data: text, status };
169
+ }
170
+ // Run the platform-specific envelope unwrap. Joomla throws on
171
+ // success:false; we translate that to a structured failure so
172
+ // tools see a uniform shape regardless of platform.
173
+ let unwrapped;
174
+ try {
175
+ unwrapped = platform.parseResponse(data, init.method ?? "GET");
176
+ }
177
+ catch (e) {
178
+ return {
179
+ success: false,
180
+ error: sanitizeErrorString(e instanceof Error ? e.message : String(e)),
181
+ status,
182
+ errorCode: "unknown",
183
+ payloadFailed: true,
184
+ };
185
+ }
186
+ // unwrapInnerSuccess for WordPress: treat 200 + `{success:false}`
187
+ // payload as error (WP REST sometimes returns inner-success envelopes
188
+ // for connection_test, license_activate, etc.).
189
+ if (opts.unwrapInnerSuccess &&
190
+ unwrapped &&
191
+ typeof unwrapped === "object" &&
192
+ "success" in unwrapped) {
193
+ const inner = unwrapped.success;
194
+ if (inner === false) {
195
+ const innerErr = unwrapped.error !== undefined
196
+ ? String(unwrapped.error)
197
+ : "operation reported success:false in payload";
198
+ return {
199
+ success: false,
200
+ error: sanitizeErrorString(innerErr),
201
+ status,
202
+ errorCode: "unknown",
203
+ payloadFailed: true,
204
+ };
205
+ }
206
+ }
207
+ const out = opts.sanitize ? sanitizeSecrets(unwrapped) : unwrapped;
208
+ return { success: true, data: out, status };
209
+ }
210
+ catch (e) {
211
+ // AbortSignal.timeout fires "TimeoutError" or "AbortError" depending on
212
+ // Node version — classify both as network/timeout.
213
+ if (e instanceof Error && (e.name === "AbortError" || e.name === "TimeoutError")) {
214
+ return {
215
+ success: false,
216
+ error: `request timed out after ${Math.round(timeoutMs / 1000)}s`,
217
+ errorCode: "network",
218
+ };
219
+ }
220
+ return {
221
+ success: false,
222
+ error: sanitizeErrorString(e instanceof Error ? e.message : String(e)),
223
+ errorCode: "network",
224
+ };
225
+ }
226
+ },
227
+ };
228
+ }
229
+ // ── Layer 2: Legacy module-level request() (backwards-compat) ─────────
230
+ //
231
+ // The 13 existing tool modules import `request` and call it with a leading
232
+ // path segment like `/connections`. We preserve that signature by wiring it
233
+ // through a module-level Platform that depends on APIMAPPER_PLATFORM:
234
+ // - "wordpress" (default, includes legacy Application Password Basic auth)
235
+ // - "joomla" (uses JoomlaPlatform + Bearer token; pre-translates REST
236
+ // paths to com_ajax tasks via translateRestPath)
237
+ //
238
+ // Closes R9 Round-1 A2 P0 #1 (Joomla wiring dormant). Now every tool module
239
+ // using `request()` automatically routes through the right platform based
240
+ // on the env var the DXT/setup CLI wrote.
241
+ class WordPressBasicAuthPlatform extends WordPressPlatform {
242
+ basicToken;
243
+ bearerToken;
244
+ constructor(opts) {
245
+ super({ baseUrl: opts.baseUrl, token: opts.bearerToken ?? "" });
246
+ this.basicToken = opts.basicToken;
247
+ this.bearerToken = opts.bearerToken ?? "";
248
+ }
249
+ buildAuthHeaders() {
250
+ if (this.bearerToken)
251
+ return { Authorization: `Bearer ${this.bearerToken}` };
252
+ if (this.basicToken)
253
+ return { Authorization: `Basic ${this.basicToken}` };
254
+ return {};
255
+ }
256
+ }
257
+ const PLATFORM_KIND = (process.env.APIMAPPER_PLATFORM ?? "wordpress");
258
+ const legacyPlatform = PLATFORM_KIND === "joomla"
259
+ ? new JoomlaPlatform({
260
+ // Joomla uses the same APIMAPPER_WP_BASE env var (or APIMAPPER_SITE_URL
261
+ // alias bridged by the DXT bootstrap in src/index.ts). The token is the
262
+ // raw amk_live_... bearer the setup CLI stored in the keychain. We
263
+ // accept the WP_USER:WP_APP_PASS pair too — split on the colon and use
264
+ // the password as the bearer for ergonomic parity with the WP env vars.
265
+ baseUrl: WP_BASE,
266
+ token: process.env.APIMAPPER_TOKEN
267
+ ?? (BASIC_TOKEN ? Buffer.from(BASIC_TOKEN, "base64").toString().split(":")[1] ?? "" : ""),
268
+ })
269
+ : new WordPressBasicAuthPlatform({
270
+ baseUrl: WP_BASE,
271
+ basicToken: BASIC_TOKEN,
272
+ bearerToken: BEARER_TOKEN,
273
+ });
274
+ const legacyClient = createPlatformClient(legacyPlatform);
275
+ /**
276
+ * Issue a request through the toolkit HTTP client + capture HTTP status.
277
+ *
278
+ * Legacy signature: callers pass a path starting with "/" (e.g. "/connections")
279
+ * — we strip the leading slash and route through the Platform layer.
280
+ *
281
+ * Joomla routing: when APIMAPPER_PLATFORM=joomla, the WP-shape REST path is
282
+ * pre-translated to `{ action, params }` via JoomlaPlatform.translateRestPath
283
+ * BEFORE buildUrl runs. The translation table is pinned against the
284
+ * AjaxDispatcher match-arms.
285
+ *
286
+ * For new code, prefer `createPlatformClient(platform).request(action)`.
287
+ */
288
+ export async function request(path, init = {}, opts = {}) {
289
+ // Strip the leading "/" — Platform.buildUrl() takes a bare action name.
290
+ // Also tolerate the existing escape-hatch where `path` starts with "http"
291
+ // (absolute URL); fall back to raw fetch in that case.
292
+ if (path.startsWith("http")) {
293
+ return rawAbsoluteRequest(path, init, opts);
294
+ }
295
+ // Joomla branch — translate REST path → com_ajax task + params, fetch
296
+ // directly so we can pass the params dict (legacyClient.request doesn't
297
+ // surface params).
298
+ if (legacyPlatform instanceof JoomlaPlatform) {
299
+ return joomlaRequest(legacyPlatform, path, init, opts);
300
+ }
301
+ const action = path.replace(/^\/+/, "");
302
+ return legacyClient.request(action, init, opts);
303
+ }
304
+ /**
305
+ * Joomla-side legacy request — translates REST path → com_ajax task name
306
+ * via JoomlaPlatform.translateRestPath, then fetches with params embedded
307
+ * via the platform's own buildUrl().
308
+ */
309
+ async function joomlaRequest(platform, path, init, opts) {
310
+ let translated;
311
+ try {
312
+ translated = platform.translateRestPath(path, init.method ?? "GET");
313
+ }
314
+ catch (e) {
315
+ return {
316
+ success: false,
317
+ error: sanitizeErrorString(e instanceof Error ? e.message : String(e)),
318
+ errorCode: "unknown",
319
+ };
320
+ }
321
+ let status;
322
+ const timeoutMs = resolveTimeout(opts);
323
+ try {
324
+ const url = platform.buildUrl(translated.action, translated.params);
325
+ const res = await fetch(url, {
326
+ ...init,
327
+ headers: {
328
+ Accept: "application/json",
329
+ "Content-Type": "application/json",
330
+ "X-Requested-With": "XMLHttpRequest",
331
+ ...platform.buildAuthHeaders(init.method ?? "GET"),
332
+ ...init.headers,
333
+ },
334
+ signal: AbortSignal.timeout(timeoutMs),
335
+ });
336
+ status = res.status;
337
+ const text = await res.text();
338
+ if (!res.ok) {
339
+ let parsed = text;
340
+ try {
341
+ parsed = JSON.parse(text);
342
+ }
343
+ catch {
344
+ /* keep as text */
345
+ }
346
+ const errMsg = typeof parsed === "object" && parsed && "error" in parsed
347
+ ? String(parsed.error)
348
+ : `HTTP ${res.status}`;
349
+ return {
350
+ success: false,
351
+ error: sanitizeErrorString(errMsg),
352
+ status,
353
+ errorCode: classify(status),
354
+ };
355
+ }
356
+ if (!text)
357
+ return { success: true, data: {}, status };
358
+ let data;
359
+ try {
360
+ data = JSON.parse(text);
361
+ }
362
+ catch {
363
+ return { success: true, data: text, status };
364
+ }
365
+ let unwrapped;
366
+ try {
367
+ unwrapped = platform.parseResponse(data, init.method ?? "GET");
368
+ }
369
+ catch (e) {
370
+ return {
371
+ success: false,
372
+ error: sanitizeErrorString(e instanceof Error ? e.message : String(e)),
373
+ status,
374
+ errorCode: "unknown",
375
+ payloadFailed: true,
376
+ };
377
+ }
378
+ const out = opts.sanitize ? sanitizeSecrets(unwrapped) : unwrapped;
379
+ return { success: true, data: out, status };
380
+ }
381
+ catch (e) {
382
+ if (e instanceof Error && (e.name === "AbortError" || e.name === "TimeoutError")) {
383
+ return {
384
+ success: false,
385
+ error: `request timed out after ${Math.round(timeoutMs / 1000)}s`,
386
+ errorCode: "network",
387
+ };
388
+ }
389
+ return {
390
+ success: false,
391
+ error: sanitizeErrorString(e instanceof Error ? e.message : String(e)),
392
+ errorCode: "network",
393
+ };
394
+ }
395
+ }
396
+ /**
397
+ * Absolute-URL escape hatch: callers occasionally pass a fully-qualified
398
+ * URL (e.g. for cross-host paginated follow-ups). We can't route those
399
+ * through Platform because the host might not match WP_BASE — fall back
400
+ * to raw fetch but preserve the same auth + sanitisation semantics.
401
+ */
402
+ async function rawAbsoluteRequest(url, init, opts) {
403
+ let status;
404
+ const timeoutMs = resolveTimeout(opts);
405
+ try {
406
+ const res = await fetch(url, {
407
+ ...init,
408
+ headers: {
409
+ Accept: "application/json",
410
+ "Content-Type": "application/json",
411
+ "X-Requested-With": "XMLHttpRequest",
412
+ ...(BASIC_TOKEN ? { Authorization: `Basic ${BASIC_TOKEN}` } : {}),
413
+ ...init.headers,
414
+ },
415
+ signal: AbortSignal.timeout(timeoutMs),
416
+ });
417
+ status = res.status;
418
+ const text = await res.text();
419
+ if (!res.ok) {
420
+ let parsed = text;
421
+ try {
422
+ parsed = JSON.parse(text);
423
+ }
424
+ catch {
425
+ /* keep as text */
426
+ }
427
+ const errMsg = typeof parsed === "object" && parsed && "message" in parsed
428
+ ? String(parsed.message)
429
+ : typeof parsed === "object" && parsed && "error" in parsed
430
+ ? String(parsed.error)
431
+ : `HTTP ${res.status}`;
432
+ return {
433
+ success: false,
434
+ error: sanitizeErrorString(errMsg),
435
+ status,
436
+ errorCode: classify(status),
437
+ };
438
+ }
439
+ if (!text)
440
+ return { success: true, data: {}, status };
441
+ let data;
442
+ try {
443
+ data = JSON.parse(text);
444
+ }
445
+ catch {
446
+ if (opts.unwrapInnerSuccess && /success["']?\s*:\s*false/i.test(text)) {
447
+ return {
448
+ success: false,
449
+ error: sanitizeErrorString(`text response indicates success:false — ${text.slice(0, 200)}`),
450
+ status,
451
+ errorCode: "unknown",
452
+ payloadFailed: true,
453
+ };
454
+ }
455
+ return { success: true, data: text, status };
456
+ }
457
+ if (opts.unwrapInnerSuccess && data && typeof data === "object" && "success" in data) {
458
+ const inner = data.success;
459
+ if (inner === false) {
460
+ const innerErr = data.error !== undefined
461
+ ? String(data.error)
462
+ : "operation reported success:false in payload";
463
+ return {
464
+ success: false,
465
+ error: sanitizeErrorString(innerErr),
466
+ status,
467
+ errorCode: "unknown",
468
+ payloadFailed: true,
469
+ };
470
+ }
471
+ }
472
+ const out = opts.sanitize ? sanitizeSecrets(data) : data;
473
+ return { success: true, data: out, status };
474
+ }
475
+ catch (e) {
476
+ if (e instanceof Error && (e.name === "AbortError" || e.name === "TimeoutError")) {
477
+ return {
478
+ success: false,
479
+ error: `request timed out after ${Math.round(timeoutMs / 1000)}s`,
480
+ errorCode: "network",
481
+ };
482
+ }
483
+ return {
484
+ success: false,
485
+ error: sanitizeErrorString(e instanceof Error ? e.message : String(e)),
486
+ errorCode: "network",
487
+ };
488
+ }
489
+ }
490
+ /**
491
+ * Map an `errorCode` to a focused hint string for the caller.
492
+ * Falls back to the generic health-tool hint.
493
+ */
494
+ export function hintFor(code) {
495
+ switch (code) {
496
+ case "auth":
497
+ return "Auth failed. Verify APIMAPPER_WP_APP_PASS — rotate via 1Password vault Claude-Secrets/WootsUp Dev API Mapper MCP.";
498
+ case "not_found":
499
+ return "Resource not found. Use the matching `*_list` tool to find a valid id.";
500
+ case "rate_limit":
501
+ return "Rate-limited. Retry after a few seconds; consider apimapper_cache_invalidate to reduce churn.";
502
+ case "server":
503
+ return "Upstream server error. Try again, then run apimapper_health and check WP error logs.";
504
+ case "network":
505
+ return "Network/timeout error. Verify APIMAPPER_WP_BASE is reachable from this host.";
506
+ default:
507
+ return HEALTH_HINT;
508
+ }
509
+ }
510
+ export const HEALTH_HINT = "Use apimapper_health to check connectivity and auth.";
511
+ export function authConfigured() {
512
+ // Bearer token (amk_live_…) is sufficient on its own; legacy App-Password
513
+ // auth still requires both user + password.
514
+ if (BEARER_TOKEN)
515
+ return true;
516
+ return Boolean(WP_USER && WP_APP_PASS);
517
+ }
518
+ // Re-export the raw client for backwards compatibility with modules that
519
+ // don't yet need status codes. Avoid using directly in new code — prefer
520
+ // `request()` above for proper status + sanitisation, or
521
+ // `createPlatformClient()` for new Platform-aware code.
522
+ export const api = rawApi;
523
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/modules/apimapper/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerConnectionTools(server: McpServer): void;