@vymalo/opencode-devtools 0.12.0 → 0.14.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.
@@ -1,269 +1,293 @@
1
1
  import { json, reqString } from "../tool-spec.js";
2
- const METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"];
2
+ const METHODS = [
3
+ "GET",
4
+ "POST",
5
+ "PUT",
6
+ "PATCH",
7
+ "DELETE",
8
+ "HEAD",
9
+ "OPTIONS"
10
+ ];
3
11
  const MAX_REDIRECTS = 5;
4
- const MAX_RESPONSE_BYTES = 10_000_000; // 10 MB — cap buffered response bodies.
12
+ const MAX_RESPONSE_BYTES = 1e7;
5
13
  function isPrivateIpv4(host) {
6
- const m = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
7
- if (!m) {
8
- return false;
9
- }
10
- const a = Number(m[1]);
11
- const b = Number(m[2]);
12
- if (a === 10 || a === 127 || a === 0) {
13
- return true;
14
- }
15
- if (a === 169 && b === 254) {
16
- return true; // link-local incl. cloud metadata 169.254.169.254
17
- }
18
- if (a === 172 && b >= 16 && b <= 31) {
19
- return true;
20
- }
21
- if (a === 192 && b === 168) {
22
- return true;
23
- }
24
- if (a === 100 && b >= 64 && b <= 127) {
25
- return true; // CGNAT
26
- }
27
- return false;
14
+ const m = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
15
+ if (!m) {
16
+ return false;
17
+ }
18
+ const a = Number(m[1]);
19
+ const b = Number(m[2]);
20
+ if (a === 10 || a === 127 || a === 0) {
21
+ return true;
22
+ }
23
+ if (a === 169 && b === 254) {
24
+ return true;
25
+ }
26
+ if (a === 172 && b >= 16 && b <= 31) {
27
+ return true;
28
+ }
29
+ if (a === 192 && b === 168) {
30
+ return true;
31
+ }
32
+ if (a === 100 && b >= 64 && b <= 127) {
33
+ return true;
34
+ }
35
+ return false;
28
36
  }
29
37
  /**
30
- * Extract a dotted IPv4 from an IPv4-mapped IPv6 literal — both the dotted
31
- * (`::ffff:127.0.0.1`) and the hex (`::ffff:7f00:1`, what `new URL()` normalizes
32
- * to) forms. Returns null if not a mapped address.
33
- */
38
+ * Extract a dotted IPv4 from an IPv4-mapped IPv6 literal — both the dotted
39
+ * (`::ffff:127.0.0.1`) and the hex (`::ffff:7f00:1`, what `new URL()` normalizes
40
+ * to) forms. Returns null if not a mapped address.
41
+ */
34
42
  function mappedIpv4(h) {
35
- const dotted = h.match(/^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/);
36
- if (dotted) {
37
- return dotted[1];
38
- }
39
- const hex = h.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/);
40
- if (hex) {
41
- const hi = Number.parseInt(hex[1], 16);
42
- const lo = Number.parseInt(hex[2], 16);
43
- return `${(hi >> 8) & 0xff}.${hi & 0xff}.${(lo >> 8) & 0xff}.${lo & 0xff}`;
44
- }
45
- return null;
43
+ const dotted = h.match(/^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/);
44
+ if (dotted) {
45
+ return dotted[1];
46
+ }
47
+ const hex = h.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/);
48
+ if (hex) {
49
+ const hi = Number.parseInt(hex[1], 16);
50
+ const lo = Number.parseInt(hex[2], 16);
51
+ return `${hi >> 8 & 255}.${hi & 255}.${lo >> 8 & 255}.${lo & 255}`;
52
+ }
53
+ return null;
46
54
  }
47
55
  /**
48
- * Reject loopback / private / link-local destinations. IPv6-prefix and IPv4
49
- * range checks only run on actual IP *literals* — a DNS name like `fdroid.org`
50
- * (which starts with `fd`) is NOT an IPv6 ULA and must not be blocked. This is
51
- * still a literal-host guard: it does not resolve DNS, so a public name that
52
- * resolves to a private IP (DNS rebinding) is not caught — see docs/devtools.md.
53
- */
56
+ * Reject loopback / private / link-local destinations. IPv6-prefix and IPv4
57
+ * range checks only run on actual IP *literals* — a DNS name like `fdroid.org`
58
+ * (which starts with `fd`) is NOT an IPv6 ULA and must not be blocked. This is
59
+ * still a literal-host guard: it does not resolve DNS, so a public name that
60
+ * resolves to a private IP (DNS rebinding) is not caught — see docs/devtools.md.
61
+ */
54
62
  export function isBlockedHost(hostname) {
55
- const h = hostname.toLowerCase().replace(/^\[|\]$/g, "");
56
- const isIpv6 = h.includes(":");
57
- const isIpv4 = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(h);
58
- if (!isIpv6 && !isIpv4) {
59
- // Plain DNS name — only the localhost family is private.
60
- return h === "localhost" || h.endsWith(".localhost");
61
- }
62
- if (isIpv4) {
63
- return isPrivateIpv4(h);
64
- }
65
- // IPv6 literal.
66
- if (h === "::1" || h === "::") {
67
- return true;
68
- }
69
- const mapped = mappedIpv4(h);
70
- if (mapped) {
71
- return isPrivateIpv4(mapped);
72
- }
73
- if (h.startsWith("fc") || h.startsWith("fd")) {
74
- return true; // unique-local fc00::/7
75
- }
76
- if (/^fe[89ab]/.test(h)) {
77
- return true; // link-local fe80::/10
78
- }
79
- return h.startsWith("ff"); // multicast ff00::/8
63
+ const h = hostname.toLowerCase().replace(/^\[|\]$/g, "");
64
+ const isIpv6 = h.includes(":");
65
+ const isIpv4 = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(h);
66
+ if (!isIpv6 && !isIpv4) {
67
+ // Plain DNS name — only the localhost family is private.
68
+ return h === "localhost" || h.endsWith(".localhost");
69
+ }
70
+ if (isIpv4) {
71
+ return isPrivateIpv4(h);
72
+ }
73
+ // IPv6 literal.
74
+ if (h === "::1" || h === "::") {
75
+ return true;
76
+ }
77
+ const mapped = mappedIpv4(h);
78
+ if (mapped) {
79
+ return isPrivateIpv4(mapped);
80
+ }
81
+ if (h.startsWith("fc") || h.startsWith("fd")) {
82
+ return true;
83
+ }
84
+ if (/^fe[89ab]/.test(h)) {
85
+ return true;
86
+ }
87
+ return h.startsWith("ff");
80
88
  }
81
89
  function assertAllowed(rawUrl, ctx) {
82
- let url;
83
- try {
84
- url = new URL(rawUrl);
85
- }
86
- catch {
87
- throw new Error(`invalid URL: ${rawUrl}`);
88
- }
89
- if (url.protocol !== "http:" && url.protocol !== "https:") {
90
- throw new Error(`unsupported protocol "${url.protocol}" (only http/https)`);
91
- }
92
- if (!ctx.options.http.allowPrivateNetwork && isBlockedHost(url.hostname)) {
93
- throw new Error(`refusing to reach private/loopback host "${url.hostname}" (set http.allowPrivateNetwork to allow)`);
94
- }
95
- return url;
90
+ let url;
91
+ try {
92
+ url = new URL(rawUrl);
93
+ } catch {
94
+ throw new Error(`invalid URL: ${rawUrl}`);
95
+ }
96
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
97
+ throw new Error(`unsupported protocol "${url.protocol}" (only http/https)`);
98
+ }
99
+ if (!ctx.options.http.allowPrivateNetwork && isBlockedHost(url.hostname)) {
100
+ throw new Error(`refusing to reach private/loopback host "${url.hostname}" (set http.allowPrivateNetwork to allow)`);
101
+ }
102
+ return url;
96
103
  }
97
104
  function asHeaders(value) {
98
- if (value === undefined || value === null) {
99
- return {};
100
- }
101
- if (typeof value !== "object") {
102
- throw new Error('"headers" must be an object of string values');
103
- }
104
- const out = {};
105
- for (const [k, v] of Object.entries(value)) {
106
- out[k] = typeof v === "string" ? v : String(v);
107
- }
108
- return out;
105
+ if (value === undefined || value === null) {
106
+ return {};
107
+ }
108
+ if (typeof value !== "object") {
109
+ throw new Error("\"headers\" must be an object of string values");
110
+ }
111
+ const out = {};
112
+ for (const [k, v] of Object.entries(value)) {
113
+ out[k] = typeof v === "string" ? v : String(v);
114
+ }
115
+ return out;
109
116
  }
110
117
  /**
111
- * Fetch with **manual** redirect handling so every hop is re-validated by the
112
- * SSRF guard — the default follow-redirects behaviour would let a public URL
113
- * 30x to `http://127.0.0.1/…` and bypass `allowPrivateNetwork: false`.
114
- */
118
+ * Fetch with **manual** redirect handling so every hop is re-validated by the
119
+ * SSRF guard — the default follow-redirects behaviour would let a public URL
120
+ * 30x to `http://127.0.0.1/…` and bypass `allowPrivateNetwork: false`.
121
+ */
115
122
  async function fetchGuarded(start, init, ctx) {
116
- let url = start;
117
- let method = init.method;
118
- let body = init.body;
119
- for (let hop = 0;; hop++) {
120
- const res = await ctx.fetchImpl(url, {
121
- method,
122
- headers: init.headers,
123
- body,
124
- redirect: "manual",
125
- signal: AbortSignal.timeout(ctx.options.http.timeoutMs)
126
- });
127
- const location = res.status >= 300 && res.status < 400 ? res.headers.get("location") : null;
128
- if (!location) {
129
- return res;
130
- }
131
- if (hop >= MAX_REDIRECTS) {
132
- throw new Error(`too many redirects (> ${MAX_REDIRECTS})`);
133
- }
134
- const next = new URL(location, url);
135
- assertAllowed(next.href, ctx); // re-check the redirect target
136
- // 303 (and 301/302 from a non-idempotent method) → GET with no body.
137
- if (res.status === 303 ||
138
- ((res.status === 301 || res.status === 302) && method !== "GET" && method !== "HEAD")) {
139
- method = "GET";
140
- body = undefined;
141
- }
142
- url = next;
143
- await res.body?.cancel().catch(() => { });
144
- }
123
+ let url = start;
124
+ let method = init.method;
125
+ let body = init.body;
126
+ for (let hop = 0;; hop++) {
127
+ const res = await ctx.fetchImpl(url, {
128
+ method,
129
+ headers: init.headers,
130
+ body,
131
+ redirect: "manual",
132
+ signal: AbortSignal.timeout(ctx.options.http.timeoutMs)
133
+ });
134
+ const location = res.status >= 300 && res.status < 400 ? res.headers.get("location") : null;
135
+ if (!location) {
136
+ return res;
137
+ }
138
+ if (hop >= MAX_REDIRECTS) {
139
+ throw new Error(`too many redirects (> ${MAX_REDIRECTS})`);
140
+ }
141
+ const next = new URL(location, url);
142
+ assertAllowed(next.href, ctx);
143
+ // 303 (and 301/302 from a non-idempotent method) → GET with no body.
144
+ if (res.status === 303 || (res.status === 301 || res.status === 302) && method !== "GET" && method !== "HEAD") {
145
+ method = "GET";
146
+ body = undefined;
147
+ }
148
+ url = next;
149
+ await res.body?.cancel().catch(() => {});
150
+ }
145
151
  }
146
152
  /** Read a response body, capped at MAX_RESPONSE_BYTES, parsing JSON when applicable. */
147
153
  async function readBody(res) {
148
- let text = "";
149
- let truncated = false;
150
- const reader = res.body?.getReader();
151
- if (reader) {
152
- const chunks = [];
153
- let received = 0;
154
- while (true) {
155
- const { done, value } = await reader.read();
156
- if (done) {
157
- break;
158
- }
159
- received += value.byteLength;
160
- if (received > MAX_RESPONSE_BYTES) {
161
- const keep = value.byteLength - (received - MAX_RESPONSE_BYTES);
162
- chunks.push(value.subarray(0, Math.max(0, keep)));
163
- truncated = true;
164
- await reader.cancel();
165
- break;
166
- }
167
- chunks.push(value);
168
- }
169
- text = Buffer.concat(chunks.map((c) => Buffer.from(c))).toString("utf8");
170
- }
171
- else {
172
- text = await res.text();
173
- }
174
- const contentType = res.headers.get("content-type") ?? "";
175
- let body = text;
176
- if (contentType.includes("application/json") && text.length > 0 && !truncated) {
177
- try {
178
- body = JSON.parse(text);
179
- }
180
- catch {
181
- /* keep as text */
182
- }
183
- }
184
- return { body, bodyText: text, truncated };
154
+ let text = "";
155
+ let truncated = false;
156
+ const reader = res.body?.getReader();
157
+ if (reader) {
158
+ const chunks = [];
159
+ let received = 0;
160
+ while (true) {
161
+ const { done, value } = await reader.read();
162
+ if (done) {
163
+ break;
164
+ }
165
+ received += value.byteLength;
166
+ if (received > MAX_RESPONSE_BYTES) {
167
+ const keep = value.byteLength - (received - MAX_RESPONSE_BYTES);
168
+ chunks.push(value.subarray(0, Math.max(0, keep)));
169
+ truncated = true;
170
+ await reader.cancel();
171
+ break;
172
+ }
173
+ chunks.push(value);
174
+ }
175
+ text = Buffer.concat(chunks.map((c) => Buffer.from(c))).toString("utf8");
176
+ } else {
177
+ text = await res.text();
178
+ }
179
+ const contentType = res.headers.get("content-type") ?? "";
180
+ let body = text;
181
+ if (contentType.includes("application/json") && text.length > 0 && !truncated) {
182
+ try {
183
+ body = JSON.parse(text);
184
+ } catch {}
185
+ }
186
+ return {
187
+ body,
188
+ bodyText: text,
189
+ truncated
190
+ };
185
191
  }
186
- export const HTTP_TOOLS = [
187
- {
188
- name: "http_request",
189
- group: "http",
190
- description: "Make an HTTP request (GET/POST/PUT/PATCH/DELETE/…) and return the status, response headers, and parsed body. JSON responses are parsed automatically. Redirects are followed but re-checked against the SSRF guard; response bodies are capped at 10 MB.",
191
- input: {
192
- url: { type: "string", description: "Absolute http(s) URL." },
193
- method: {
194
- type: "string",
195
- optional: true,
196
- enum: METHODS,
197
- description: "HTTP method (default GET)."
198
- },
199
- headers: {
200
- type: "record",
201
- optional: true,
202
- valueType: "string",
203
- description: "Request headers (e.g. Authorization, Content-Type)."
204
- },
205
- body: {
206
- type: "string",
207
- optional: true,
208
- description: "Request body (string; set Content-Type yourself)."
209
- }
210
- },
211
- handler: async (args, ctx) => {
212
- const url = assertAllowed(reqString(args, "url"), ctx);
213
- const method = typeof args.method === "string" ? args.method.toUpperCase() : "GET";
214
- const headers = asHeaders(args.headers);
215
- const rawBody = typeof args.body === "string" ? args.body : undefined;
216
- const body = method === "GET" || method === "HEAD" ? undefined : rawBody;
217
- const res = await fetchGuarded(url, { method, headers, body }, ctx);
218
- const responseHeaders = Object.fromEntries(res.headers.entries());
219
- const { body: parsed, bodyText, truncated } = await readBody(res);
220
- return json({
221
- status: res.status,
222
- statusText: res.statusText,
223
- ok: res.ok,
224
- headers: responseHeaders,
225
- body: parsed,
226
- truncated
227
- }, `${method} ${url.href} → ${res.status} ${res.statusText}${truncated ? " (body truncated at 10 MB)" : ""}\n\n${bodyText.slice(0, 4000)}`);
228
- }
229
- },
230
- {
231
- name: "http_graphql",
232
- group: "http",
233
- description: "Execute a GraphQL query or mutation against an endpoint and return the structured data and errors.",
234
- input: {
235
- url: { type: "string", description: "GraphQL endpoint URL." },
236
- query: { type: "string", description: "The GraphQL query or mutation document." },
237
- variables: {
238
- type: "record",
239
- optional: true,
240
- valueType: "any",
241
- description: "Query variables."
242
- },
243
- headers: {
244
- type: "record",
245
- optional: true,
246
- valueType: "string",
247
- description: "Extra request headers (e.g. Authorization)."
248
- }
249
- },
250
- handler: async (args, ctx) => {
251
- const url = assertAllowed(reqString(args, "url"), ctx);
252
- const query = reqString(args, "query");
253
- const variables = typeof args.variables === "object" && args.variables !== null ? args.variables : {};
254
- const res = await fetchGuarded(url, {
255
- method: "POST",
256
- headers: {
257
- "content-type": "application/json",
258
- accept: "application/json",
259
- ...asHeaders(args.headers)
260
- },
261
- body: JSON.stringify({ query, variables })
262
- }, ctx);
263
- const { body, bodyText } = await readBody(res);
264
- const payload = (typeof body === "object" && body !== null ? body : {});
265
- return json({ status: res.status, data: payload.data, errors: payload.errors }, `${url.href} → ${res.status}\n\n${bodyText.slice(0, 4000)}`);
266
- }
267
- }
268
- ];
192
+ export const HTTP_TOOLS = [{
193
+ name: "http_request",
194
+ group: "http",
195
+ description: "Make an HTTP request (GET/POST/PUT/PATCH/DELETE/…) and return the status, response headers, and parsed body. JSON responses are parsed automatically. Redirects are followed but re-checked against the SSRF guard; response bodies are capped at 10 MB.",
196
+ input: {
197
+ url: {
198
+ type: "string",
199
+ description: "Absolute http(s) URL."
200
+ },
201
+ method: {
202
+ type: "string",
203
+ optional: true,
204
+ enum: METHODS,
205
+ description: "HTTP method (default GET)."
206
+ },
207
+ headers: {
208
+ type: "record",
209
+ optional: true,
210
+ valueType: "string",
211
+ description: "Request headers (e.g. Authorization, Content-Type)."
212
+ },
213
+ body: {
214
+ type: "string",
215
+ optional: true,
216
+ description: "Request body (string; set Content-Type yourself)."
217
+ }
218
+ },
219
+ handler: async (args, ctx) => {
220
+ const url = assertAllowed(reqString(args, "url"), ctx);
221
+ const method = typeof args.method === "string" ? args.method.toUpperCase() : "GET";
222
+ const headers = asHeaders(args.headers);
223
+ const rawBody = typeof args.body === "string" ? args.body : undefined;
224
+ const body = method === "GET" || method === "HEAD" ? undefined : rawBody;
225
+ const res = await fetchGuarded(url, {
226
+ method,
227
+ headers,
228
+ body
229
+ }, ctx);
230
+ const responseHeaders = Object.fromEntries(res.headers.entries());
231
+ const { body: parsed, bodyText, truncated } = await readBody(res);
232
+ return json({
233
+ status: res.status,
234
+ statusText: res.statusText,
235
+ ok: res.ok,
236
+ headers: responseHeaders,
237
+ body: parsed,
238
+ truncated
239
+ }, `${method} ${url.href} ${res.status} ${res.statusText}${truncated ? " (body truncated at 10 MB)" : ""}\n\n${bodyText.slice(0, 4e3)}`);
240
+ }
241
+ }, {
242
+ name: "http_graphql",
243
+ group: "http",
244
+ description: "Execute a GraphQL query or mutation against an endpoint and return the structured data and errors.",
245
+ input: {
246
+ url: {
247
+ type: "string",
248
+ description: "GraphQL endpoint URL."
249
+ },
250
+ query: {
251
+ type: "string",
252
+ description: "The GraphQL query or mutation document."
253
+ },
254
+ variables: {
255
+ type: "record",
256
+ optional: true,
257
+ valueType: "any",
258
+ description: "Query variables."
259
+ },
260
+ headers: {
261
+ type: "record",
262
+ optional: true,
263
+ valueType: "string",
264
+ description: "Extra request headers (e.g. Authorization)."
265
+ }
266
+ },
267
+ handler: async (args, ctx) => {
268
+ const url = assertAllowed(reqString(args, "url"), ctx);
269
+ const query = reqString(args, "query");
270
+ const variables = typeof args.variables === "object" && args.variables !== null ? args.variables : {};
271
+ const res = await fetchGuarded(url, {
272
+ method: "POST",
273
+ headers: {
274
+ "content-type": "application/json",
275
+ accept: "application/json",
276
+ ...asHeaders(args.headers)
277
+ },
278
+ body: JSON.stringify({
279
+ query,
280
+ variables
281
+ })
282
+ }, ctx);
283
+ const { body, bodyText } = await readBody(res);
284
+ const payload = typeof body === "object" && body !== null ? body : {};
285
+ return json({
286
+ status: res.status,
287
+ data: payload.data,
288
+ errors: payload.errors
289
+ }, `${url.href} → ${res.status}\n\n${bodyText.slice(0, 4e3)}`);
290
+ }
291
+ }];
292
+
269
293
  //# sourceMappingURL=http.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/groups/http.ts"],"names":[],"mappings":"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"}
1
+ {"mappings":"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","names":[],"sources":["../../src/groups/http.ts"],"version":3,"file":"http.js","sourceRoot":""}