@0xmaxma/claude-gateway 1.8.7 → 1.8.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 (77) hide show
  1. package/README.md +96 -0
  2. package/dist/agent/runner.d.ts +47 -1
  3. package/dist/agent/runner.d.ts.map +1 -1
  4. package/dist/agent/runner.js +116 -17
  5. package/dist/agent/runner.js.map +1 -1
  6. package/dist/api/connectors-router.d.ts +50 -0
  7. package/dist/api/connectors-router.d.ts.map +1 -0
  8. package/dist/api/connectors-router.js +650 -0
  9. package/dist/api/connectors-router.js.map +1 -0
  10. package/dist/api/gateway-router.d.ts +4 -0
  11. package/dist/api/gateway-router.d.ts.map +1 -1
  12. package/dist/api/gateway-router.js +26 -0
  13. package/dist/api/gateway-router.js.map +1 -1
  14. package/dist/api/oauth-connectors-router.d.ts +43 -0
  15. package/dist/api/oauth-connectors-router.d.ts.map +1 -0
  16. package/dist/api/oauth-connectors-router.js +384 -0
  17. package/dist/api/oauth-connectors-router.js.map +1 -0
  18. package/dist/api/router.d.ts.map +1 -1
  19. package/dist/api/router.js +101 -13
  20. package/dist/api/router.js.map +1 -1
  21. package/dist/apps/agent-manager.d.ts +6 -2
  22. package/dist/apps/agent-manager.d.ts.map +1 -1
  23. package/dist/apps/agent-manager.js +10 -18
  24. package/dist/apps/agent-manager.js.map +1 -1
  25. package/dist/config/config-write-lock.d.ts +45 -0
  26. package/dist/config/config-write-lock.d.ts.map +1 -0
  27. package/dist/config/config-write-lock.js +164 -0
  28. package/dist/config/config-write-lock.js.map +1 -0
  29. package/dist/config/watcher.d.ts.map +1 -1
  30. package/dist/config/watcher.js +29 -0
  31. package/dist/config/watcher.js.map +1 -1
  32. package/dist/connectors/custom-connectors-store.d.ts +54 -0
  33. package/dist/connectors/custom-connectors-store.d.ts.map +1 -0
  34. package/dist/connectors/custom-connectors-store.js +204 -0
  35. package/dist/connectors/custom-connectors-store.js.map +1 -0
  36. package/dist/connectors/custom.d.ts +69 -0
  37. package/dist/connectors/custom.d.ts.map +1 -0
  38. package/dist/connectors/custom.js +158 -0
  39. package/dist/connectors/custom.js.map +1 -0
  40. package/dist/connectors/mcp-oauth.d.ts +152 -0
  41. package/dist/connectors/mcp-oauth.d.ts.map +1 -0
  42. package/dist/connectors/mcp-oauth.js +522 -0
  43. package/dist/connectors/mcp-oauth.js.map +1 -0
  44. package/dist/connectors/oauth-refresh-sweep.d.ts +71 -0
  45. package/dist/connectors/oauth-refresh-sweep.d.ts.map +1 -0
  46. package/dist/connectors/oauth-refresh-sweep.js +337 -0
  47. package/dist/connectors/oauth-refresh-sweep.js.map +1 -0
  48. package/dist/connectors/pending-oauth-store.d.ts +39 -0
  49. package/dist/connectors/pending-oauth-store.d.ts.map +1 -0
  50. package/dist/connectors/pending-oauth-store.js +50 -0
  51. package/dist/connectors/pending-oauth-store.js.map +1 -0
  52. package/dist/connectors/resolve.d.ts +52 -0
  53. package/dist/connectors/resolve.d.ts.map +1 -0
  54. package/dist/connectors/resolve.js +176 -0
  55. package/dist/connectors/resolve.js.map +1 -0
  56. package/dist/connectors/token-env.d.ts +93 -0
  57. package/dist/connectors/token-env.d.ts.map +1 -0
  58. package/dist/connectors/token-env.js +323 -0
  59. package/dist/connectors/token-env.js.map +1 -0
  60. package/dist/connectors/types.d.ts +126 -0
  61. package/dist/connectors/types.d.ts.map +1 -0
  62. package/dist/connectors/types.js +13 -0
  63. package/dist/connectors/types.js.map +1 -0
  64. package/dist/index.js +32 -1
  65. package/dist/index.js.map +1 -1
  66. package/dist/session/process.d.ts +23 -0
  67. package/dist/session/process.d.ts.map +1 -1
  68. package/dist/session/process.js +78 -2
  69. package/dist/session/process.js.map +1 -1
  70. package/dist/types.d.ts +46 -1
  71. package/dist/types.d.ts.map +1 -1
  72. package/mcp/instructions.ts +14 -1
  73. package/mcp/server.ts +11 -5
  74. package/mcp/tools/image/module.ts +2 -70
  75. package/mcp/tools/shared/media.ts +76 -0
  76. package/mcp/tools/video/module.ts +676 -0
  77. package/package.json +1 -1
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Media-download/poll helpers shared by the image and video MCP tool modules.
3
+ * Self-contained on purpose, like share-client.ts: mcp/** ships as source
4
+ * without src/**, so this module must not import from src/ (see
5
+ * tests/unit/mcp-no-src-imports.test.ts).
6
+ */
7
+
8
+ // Resolves early (without rejecting) on abort — a poll loop re-checks
9
+ // signal.aborted itself right after, so this only needs to shorten the wait.
10
+ // The abort listener is removed when the timer fires normally: sleep() is called
11
+ // once per poll iteration against the SAME long-lived signal (up to dozens of
12
+ // times for a multi-minute poll budget), so leaving { once: true } listeners
13
+ // around on the non-abort path would pile them onto that one signal and trip
14
+ // Node's MaxListenersExceededWarning.
15
+ export function sleep(ms: number, signal?: AbortSignal): Promise<void> {
16
+ return new Promise((r) => {
17
+ const onAbort = () => { clearTimeout(t); r(); };
18
+ const t = setTimeout(() => { signal?.removeEventListener('abort', onAbort); r(); }, ms);
19
+ signal?.addEventListener('abort', onAbort, { once: true });
20
+ });
21
+ }
22
+
23
+ export function sanitize(s: string): string {
24
+ return s.replace(/[^a-zA-Z0-9_-]/g, '').slice(0, 48) || 'default';
25
+ }
26
+
27
+ // Read a response body into a Buffer with a hard byte ceiling: reject early on a
28
+ // too-large Content-Length, and stream-count actual bytes so a chunked response
29
+ // without Content-Length can't blow past the cap (OOM guard). `label` (e.g.
30
+ // "image"/"video") only shapes the error message.
31
+ export async function readCapped(res: Response, cap: number, label = 'file'): Promise<Buffer> {
32
+ const declared = Number(res.headers.get('content-length'));
33
+ if (Number.isFinite(declared) && declared > cap) {
34
+ throw new Error(`download ${label} too large: ${declared} bytes (max ${cap})`);
35
+ }
36
+ if (!res.body) {
37
+ const ab = await res.arrayBuffer();
38
+ if (ab.byteLength > cap) throw new Error(`download ${label} too large (max ${cap} bytes)`);
39
+ return Buffer.from(ab);
40
+ }
41
+ const chunks: Buffer[] = [];
42
+ let total = 0;
43
+ for await (const chunk of res.body as unknown as AsyncIterable<Uint8Array>) {
44
+ total += chunk.length;
45
+ if (total > cap) throw new Error(`download ${label} exceeded ${cap} bytes`);
46
+ chunks.push(Buffer.from(chunk));
47
+ }
48
+ return Buffer.concat(chunks);
49
+ }
50
+
51
+ // https is required for a PUBLIC endpoint (a Bearer proxy_secret is sent on
52
+ // every call); http is tolerated only for a local/internal host — a trusted hop
53
+ // such as host.docker.internal in dev, where cleartext never leaves the network.
54
+ export function baseUrlIsSecure(raw: string): boolean {
55
+ if (!raw) return false;
56
+ let u: URL;
57
+ try {
58
+ u = new URL(raw);
59
+ } catch {
60
+ return false;
61
+ }
62
+ if (u.protocol === 'https:') return true;
63
+ if (u.protocol !== 'http:') return false;
64
+ const h = u.hostname.toLowerCase();
65
+ return (
66
+ h === 'localhost' ||
67
+ h === 'host.docker.internal' ||
68
+ h.endsWith('.internal') ||
69
+ h.endsWith('.local') ||
70
+ /^127\./.test(h) ||
71
+ h === '::1' ||
72
+ /^10\./.test(h) ||
73
+ /^192\.168\./.test(h) ||
74
+ /^172\.(1[6-9]|2[0-9]|3[01])\./.test(h)
75
+ );
76
+ }