@jterrazz/test 7.0.0 → 8.0.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.
- package/dist/index.cjs +1744 -1293
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +562 -316
- package/dist/index.d.ts +562 -316
- package/dist/index.js +1734 -1286
- package/dist/index.js.map +1 -1
- package/dist/intercept.cjs +57 -35
- package/dist/intercept.cjs.map +1 -1
- package/dist/intercept.d.cts +34 -22
- package/dist/intercept.d.ts +34 -22
- package/dist/intercept.js +57 -36
- package/dist/intercept.js.map +1 -1
- package/dist/intercept2.cjs +1 -1
- package/dist/intercept2.cjs.map +1 -1
- package/dist/intercept2.js +1 -1
- package/dist/intercept2.js.map +1 -1
- package/dist/services.cjs +4 -4
- package/dist/services.d.cts +1 -1
- package/dist/services.d.ts +1 -1
- package/dist/services.js +1 -1
- package/dist/{sqlite.adapter.cjs → sqlite.cjs} +6 -6
- package/dist/sqlite.cjs.map +1 -0
- package/dist/{sqlite.adapter.d.ts → sqlite.d.cts} +7 -7
- package/dist/{sqlite.adapter.d.cts → sqlite.d.ts} +7 -7
- package/dist/{sqlite.adapter.js → sqlite.js} +6 -6
- package/dist/sqlite.js.map +1 -0
- package/dist/types.d.cts +6 -5
- package/dist/types.d.ts +6 -5
- package/package.json +1 -1
- package/dist/sqlite.adapter.cjs.map +0 -1
- package/dist/sqlite.adapter.js.map +0 -1
package/dist/intercept.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
//#region src/
|
|
2
|
+
//#region src/spec/intercept/adapters/anthropic.ts
|
|
3
3
|
const ANTHROPIC_MESSAGES_URL = "https://api.anthropic.com/v1/messages";
|
|
4
4
|
function matchesFilter(body, filter) {
|
|
5
5
|
if (filter.model) {
|
|
@@ -19,42 +19,60 @@ function matchesFilter(body, filter) {
|
|
|
19
19
|
if (filter.user instanceof RegExp && !filter.user.test(text)) return false;
|
|
20
20
|
}
|
|
21
21
|
if (filter.tools) {
|
|
22
|
-
const
|
|
23
|
-
if (!filter.tools.every((t) =>
|
|
22
|
+
const names = body?.tools?.map((t) => t.name).filter(Boolean) ?? [];
|
|
23
|
+
if (!filter.tools.every((t) => names.includes(t))) return false;
|
|
24
24
|
}
|
|
25
25
|
return true;
|
|
26
26
|
}
|
|
27
|
+
function buildReply(data) {
|
|
28
|
+
return {
|
|
29
|
+
status: 200,
|
|
30
|
+
body: {
|
|
31
|
+
id: "msg-test",
|
|
32
|
+
type: "message",
|
|
33
|
+
role: "assistant",
|
|
34
|
+
content: [{
|
|
35
|
+
type: "text",
|
|
36
|
+
text: typeof data === "string" ? data : JSON.stringify(data)
|
|
37
|
+
}],
|
|
38
|
+
model: "claude-sonnet-4-20250514",
|
|
39
|
+
stop_reason: "end_turn",
|
|
40
|
+
usage: {
|
|
41
|
+
input_tokens: 10,
|
|
42
|
+
output_tokens: 10
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
27
47
|
/**
|
|
28
48
|
* Anthropic API intercept helpers.
|
|
29
49
|
*/
|
|
30
50
|
const anthropic = {
|
|
31
|
-
|
|
51
|
+
request(filter) {
|
|
32
52
|
return {
|
|
53
|
+
adapter: "anthropic",
|
|
33
54
|
method: "POST",
|
|
34
55
|
url: ANTHROPIC_MESSAGES_URL,
|
|
35
|
-
match: filter ? (body) => matchesFilter(body, filter) : void 0
|
|
56
|
+
match: filter ? (body) => matchesFilter(body, filter) : void 0,
|
|
57
|
+
wrap: buildReply
|
|
36
58
|
};
|
|
37
59
|
},
|
|
38
|
-
|
|
60
|
+
message(filter, url) {
|
|
39
61
|
return {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
stop_reason: "end_turn",
|
|
51
|
-
usage: {
|
|
52
|
-
input_tokens: 10,
|
|
53
|
-
output_tokens: 10
|
|
54
|
-
}
|
|
62
|
+
adapter: "anthropic",
|
|
63
|
+
method: "POST",
|
|
64
|
+
url: url ?? ANTHROPIC_MESSAGES_URL,
|
|
65
|
+
match: filter ? (body) => matchesFilter(body, filter) : void 0,
|
|
66
|
+
wrap(data) {
|
|
67
|
+
if (data && typeof data === "object" && !Array.isArray(data)) return {
|
|
68
|
+
status: 200,
|
|
69
|
+
body: data
|
|
70
|
+
};
|
|
71
|
+
return buildReply(data);
|
|
55
72
|
}
|
|
56
73
|
};
|
|
57
74
|
},
|
|
75
|
+
reply: buildReply,
|
|
58
76
|
error(status, message) {
|
|
59
77
|
return {
|
|
60
78
|
status,
|
|
@@ -75,9 +93,14 @@ const anthropic = {
|
|
|
75
93
|
};
|
|
76
94
|
}
|
|
77
95
|
};
|
|
96
|
+
/**
|
|
97
|
+
* Alias for {@link anthropic} — matches consumers that call the vendor "claude".
|
|
98
|
+
* Re-exposed as a spread copy so downstream tooling (Knip, dts rollup) sees a
|
|
99
|
+
* distinct export and not a duplicate of `anthropic`.
|
|
100
|
+
*/
|
|
101
|
+
const claude = { ...anthropic };
|
|
78
102
|
//#endregion
|
|
79
|
-
//#region src/
|
|
80
|
-
/** Default wrap: raw JSON data becomes the response body. */
|
|
103
|
+
//#region src/spec/intercept/adapters/http.ts
|
|
81
104
|
function wrapJson(data) {
|
|
82
105
|
return {
|
|
83
106
|
status: 200,
|
|
@@ -88,12 +111,12 @@ function wrapJson(data) {
|
|
|
88
111
|
* Generic HTTP intercept helpers for any URL.
|
|
89
112
|
*
|
|
90
113
|
* @example
|
|
91
|
-
* .intercept(http.get('https://api.example.com/data'), 'response.json')
|
|
92
|
-
* .intercept(http.post('https://api.stripe.com/v1/charges'), http.json({ id: 'ch_...' }))
|
|
114
|
+
* .intercept(http.get('https://api.example.com/data'), 'http/response.json')
|
|
93
115
|
*/
|
|
94
116
|
const http = {
|
|
95
117
|
get(url) {
|
|
96
118
|
return {
|
|
119
|
+
adapter: "http",
|
|
97
120
|
method: "GET",
|
|
98
121
|
url,
|
|
99
122
|
wrap: wrapJson
|
|
@@ -101,6 +124,7 @@ const http = {
|
|
|
101
124
|
},
|
|
102
125
|
post(url) {
|
|
103
126
|
return {
|
|
127
|
+
adapter: "http",
|
|
104
128
|
method: "POST",
|
|
105
129
|
url,
|
|
106
130
|
wrap: wrapJson
|
|
@@ -108,6 +132,7 @@ const http = {
|
|
|
108
132
|
},
|
|
109
133
|
put(url) {
|
|
110
134
|
return {
|
|
135
|
+
adapter: "http",
|
|
111
136
|
method: "PUT",
|
|
112
137
|
url,
|
|
113
138
|
wrap: wrapJson
|
|
@@ -115,6 +140,7 @@ const http = {
|
|
|
115
140
|
},
|
|
116
141
|
delete(url) {
|
|
117
142
|
return {
|
|
143
|
+
adapter: "http",
|
|
118
144
|
method: "DELETE",
|
|
119
145
|
url,
|
|
120
146
|
wrap: wrapJson
|
|
@@ -122,6 +148,7 @@ const http = {
|
|
|
122
148
|
},
|
|
123
149
|
any(url) {
|
|
124
150
|
return {
|
|
151
|
+
adapter: "http",
|
|
125
152
|
method: "*",
|
|
126
153
|
url,
|
|
127
154
|
wrap: wrapJson
|
|
@@ -141,7 +168,7 @@ const http = {
|
|
|
141
168
|
}
|
|
142
169
|
};
|
|
143
170
|
//#endregion
|
|
144
|
-
//#region src/
|
|
171
|
+
//#region src/spec/intercept/adapters/openai.ts
|
|
145
172
|
const OPENAI_CHAT_URL = "https://api.openai.com/v1/chat/completions";
|
|
146
173
|
const OPENAI_RESPONSES_URL = "https://api.openai.com/v1/responses";
|
|
147
174
|
function matchesChatFilter(body, filter) {
|
|
@@ -249,6 +276,7 @@ function buildResponsesReply(data) {
|
|
|
249
276
|
const openai = {
|
|
250
277
|
request(filter) {
|
|
251
278
|
return {
|
|
279
|
+
adapter: "openai",
|
|
252
280
|
method: "POST",
|
|
253
281
|
url: OPENAI_CHAT_URL,
|
|
254
282
|
match: filter ? (body) => matchesChatFilter(body, filter) : void 0,
|
|
@@ -257,6 +285,7 @@ const openai = {
|
|
|
257
285
|
},
|
|
258
286
|
agent(filter, url) {
|
|
259
287
|
return {
|
|
288
|
+
adapter: "openai",
|
|
260
289
|
method: "POST",
|
|
261
290
|
url: url ?? OPENAI_RESPONSES_URL,
|
|
262
291
|
match: filter ? (body) => matchesResponsesFilter(body, filter) : void 0,
|
|
@@ -283,18 +312,11 @@ const openai = {
|
|
|
283
312
|
body: {},
|
|
284
313
|
delay: 3e4
|
|
285
314
|
};
|
|
286
|
-
}
|
|
287
|
-
chat(filter) {
|
|
288
|
-
return openai.request(filter);
|
|
289
|
-
},
|
|
290
|
-
response: buildChatReply,
|
|
291
|
-
responses(filter, url) {
|
|
292
|
-
return openai.agent(filter, url);
|
|
293
|
-
},
|
|
294
|
-
responsesResponse: buildResponsesReply
|
|
315
|
+
}
|
|
295
316
|
};
|
|
296
317
|
//#endregion
|
|
297
318
|
exports.anthropic = anthropic;
|
|
319
|
+
exports.claude = claude;
|
|
298
320
|
exports.http = http;
|
|
299
321
|
exports.openai = openai;
|
|
300
322
|
|
package/dist/intercept.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intercept.cjs","names":[],"sources":["../src/builder/common/intercept/adapters/anthropic.ts","../src/builder/common/intercept/adapters/http.ts","../src/builder/common/intercept/adapters/openai.ts"],"sourcesContent":["import type { InterceptResponse, InterceptTrigger } from '../types.js';\n\nconst ANTHROPIC_MESSAGES_URL = 'https://api.anthropic.com/v1/messages';\n\nexport interface AnthropicMessagesFilter {\n /** Match by model name. */\n model?: RegExp | string;\n /** Match by system message content. */\n system?: RegExp | string;\n /** Match by user message content. */\n user?: RegExp | string;\n /** Match by tool names. */\n tools?: string[];\n}\n\nfunction matchesFilter(body: any, filter: AnthropicMessagesFilter): boolean {\n if (filter.model) {\n const model = body?.model;\n if (typeof filter.model === 'string' && model !== filter.model) {\n return false;\n }\n if (filter.model instanceof RegExp && !filter.model.test(model ?? '')) {\n return false;\n }\n }\n\n if (filter.system) {\n const system = typeof body?.system === 'string' ? body.system : '';\n if (typeof filter.system === 'string' && !system.includes(filter.system)) {\n return false;\n }\n if (filter.system instanceof RegExp && !filter.system.test(system)) {\n return false;\n }\n }\n\n if (filter.user) {\n const userMsg = body?.messages?.find((m: any) => m.role === 'user')?.content ?? '';\n const text = typeof userMsg === 'string' ? userMsg : JSON.stringify(userMsg);\n if (typeof filter.user === 'string' && !text.includes(filter.user)) {\n return false;\n }\n if (filter.user instanceof RegExp && !filter.user.test(text)) {\n return false;\n }\n }\n\n if (filter.tools) {\n const requestTools = body?.tools?.map((t: any) => t.name).filter(Boolean) ?? [];\n if (!filter.tools.every((t) => requestTools.includes(t))) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Anthropic API intercept helpers.\n */\nexport const anthropic = {\n /**\n * Trigger: match Anthropic messages API requests.\n */\n messages(filter?: AnthropicMessagesFilter): InterceptTrigger {\n return {\n method: 'POST',\n url: ANTHROPIC_MESSAGES_URL,\n match: filter ? (body: unknown) => matchesFilter(body, filter) : undefined,\n };\n },\n\n /** Response: wrap data in Anthropic messages format. */\n response(data: unknown): InterceptResponse {\n const content = typeof data === 'string' ? data : JSON.stringify(data);\n return {\n status: 200,\n body: {\n id: 'msg-test',\n type: 'message',\n role: 'assistant',\n content: [{ type: 'text', text: content }],\n model: 'claude-sonnet-4-20250514',\n stop_reason: 'end_turn',\n usage: { input_tokens: 10, output_tokens: 10 },\n },\n };\n },\n\n /** Response: return an Anthropic error. */\n error(status: number, message?: string): InterceptResponse {\n return {\n status,\n body: {\n type: 'error',\n error: {\n type: status === 429 ? 'rate_limit_error' : 'api_error',\n message: message ?? `Anthropic error (${status})`,\n },\n },\n };\n },\n\n /** Response: simulate a timeout. */\n timeout(): InterceptResponse {\n return { status: 200, body: {}, delay: 30_000 };\n },\n};\n","import type { InterceptResponse, InterceptTrigger } from '../types.js';\n\n/** Default wrap: raw JSON data becomes the response body. */\nfunction wrapJson(data: unknown): InterceptResponse {\n return { status: 200, body: data };\n}\n\n/**\n * Generic HTTP intercept helpers for any URL.\n *\n * @example\n * .intercept(http.get('https://api.example.com/data'), 'response.json')\n * .intercept(http.post('https://api.stripe.com/v1/charges'), http.json({ id: 'ch_...' }))\n */\nexport const http = {\n /** Trigger: match GET requests to a URL pattern. */\n get(url: RegExp | string): InterceptTrigger {\n return { method: 'GET', url, wrap: wrapJson };\n },\n\n /** Trigger: match POST requests to a URL pattern. */\n post(url: RegExp | string): InterceptTrigger {\n return { method: 'POST', url, wrap: wrapJson };\n },\n\n /** Trigger: match PUT requests to a URL pattern. */\n put(url: RegExp | string): InterceptTrigger {\n return { method: 'PUT', url, wrap: wrapJson };\n },\n\n /** Trigger: match DELETE requests to a URL pattern. */\n delete(url: RegExp | string): InterceptTrigger {\n return { method: 'DELETE', url, wrap: wrapJson };\n },\n\n /** Trigger: match any method to a URL pattern. */\n any(url: RegExp | string): InterceptTrigger {\n return { method: '*', url, wrap: wrapJson };\n },\n\n /** Response: simple JSON success. */\n json(data: unknown, status = 200): InterceptResponse {\n return { status, body: data };\n },\n\n /** Response: error with message. */\n error(status: number, message?: string): InterceptResponse {\n return { status, body: { error: message ?? `HTTP ${status}` } };\n },\n};\n","import type { InterceptResponse, InterceptTrigger } from '../types.js';\n\nconst OPENAI_CHAT_URL = 'https://api.openai.com/v1/chat/completions';\nconst OPENAI_RESPONSES_URL = 'https://api.openai.com/v1/responses';\n\n// ── Chat Completions filters ──\n\nexport interface OpenAIChatFilter {\n model?: RegExp | string;\n system?: RegExp | string;\n user?: RegExp | string;\n tools?: string[];\n temperature?: number;\n}\n\nfunction matchesChatFilter(body: any, filter: OpenAIChatFilter): boolean {\n if (filter.model) {\n const model = body?.model;\n if (typeof filter.model === 'string' && model !== filter.model) {\n return false;\n }\n if (filter.model instanceof RegExp && !filter.model.test(model ?? '')) {\n return false;\n }\n }\n if (filter.system) {\n const msg = body?.messages?.find((m: any) => m.role === 'system')?.content ?? '';\n if (typeof filter.system === 'string' && !msg.includes(filter.system)) {\n return false;\n }\n if (filter.system instanceof RegExp && !filter.system.test(msg)) {\n return false;\n }\n }\n if (filter.user) {\n const msg = body?.messages?.find((m: any) => m.role === 'user')?.content ?? '';\n if (typeof filter.user === 'string' && !msg.includes(filter.user)) {\n return false;\n }\n if (filter.user instanceof RegExp && !filter.user.test(msg)) {\n return false;\n }\n }\n if (filter.tools) {\n const names = body?.tools?.map((t: any) => t.function?.name).filter(Boolean) ?? [];\n if (!filter.tools.every((t) => names.includes(t))) {\n return false;\n }\n }\n if (filter.temperature !== undefined && body?.temperature !== filter.temperature) {\n return false;\n }\n return true;\n}\n\n// ── Responses API filters ──\n\nexport interface OpenAIResponsesFilter {\n model?: RegExp | string;\n system?: RegExp | string;\n user?: RegExp | string;\n tools?: string[];\n}\n\nfunction matchesResponsesFilter(body: any, filter: OpenAIResponsesFilter): boolean {\n if (filter.model) {\n const model = body?.model;\n if (typeof filter.model === 'string' && model !== filter.model) {\n return false;\n }\n if (filter.model instanceof RegExp && !filter.model.test(model ?? '')) {\n return false;\n }\n }\n if (filter.system) {\n const instructions = body?.instructions ?? '';\n const systemInput = body?.input?.find?.((m: any) => m.role === 'system')?.content ?? '';\n const text = instructions || systemInput;\n if (typeof filter.system === 'string' && !text.includes(filter.system)) {\n return false;\n }\n if (filter.system instanceof RegExp && !filter.system.test(text)) {\n return false;\n }\n }\n if (filter.user) {\n const msgs = (body?.input ?? [])\n .filter((m: any) => m.role === 'user')\n .map((m: any) =>\n typeof m.content === 'string' ? m.content : JSON.stringify(m.content),\n )\n .join(' ');\n if (typeof filter.user === 'string' && !msgs.includes(filter.user)) {\n return false;\n }\n if (filter.user instanceof RegExp && !filter.user.test(msgs)) {\n return false;\n }\n }\n if (filter.tools) {\n const names =\n body?.tools?.map((t: any) => t.name ?? t.function?.name).filter(Boolean) ?? [];\n if (!filter.tools.every((t) => names.includes(t))) {\n return false;\n }\n }\n return true;\n}\n\n// ── Response builders ──\n\nfunction buildChatReply(data: unknown): InterceptResponse {\n const content = typeof data === 'string' ? data : JSON.stringify(data);\n return {\n status: 200,\n body: {\n id: 'chatcmpl-test',\n object: 'chat.completion',\n created: Math.floor(Date.now() / 1000),\n model: 'gpt-4o-test',\n choices: [{ index: 0, message: { role: 'assistant', content }, finish_reason: 'stop' }],\n usage: { prompt_tokens: 10, completion_tokens: 10, total_tokens: 20 },\n },\n };\n}\n\nfunction buildResponsesReply(data: unknown): InterceptResponse {\n const text = typeof data === 'string' ? data : JSON.stringify(data);\n return {\n status: 200,\n body: {\n id: 'resp-test',\n object: 'response',\n created_at: Math.floor(Date.now() / 1000),\n model: 'gpt-4o-test',\n output: [\n {\n type: 'message',\n id: 'msg-test',\n role: 'assistant',\n content: [{ type: 'output_text', text, annotations: [] }],\n },\n ],\n usage: { input_tokens: 10, output_tokens: 10, total_tokens: 20 },\n },\n };\n}\n\n// ── Public API ──\n\n/**\n * OpenAI API intercept helpers.\n */\nexport const openai = {\n /**\n * Trigger: match Chat Completions API requests.\n *\n * @example\n * openai.request() // any chat call\n * openai.request({ model: 'gpt-4o' }) // specific model\n * openai.request({ system: /classify/ }) // system prompt match\n */\n request(filter?: OpenAIChatFilter): InterceptTrigger {\n return {\n method: 'POST',\n url: OPENAI_CHAT_URL,\n match: filter ? (body: unknown) => matchesChatFilter(body, filter) : undefined,\n wrap: buildChatReply,\n };\n },\n\n /**\n * Trigger: match Responses API requests (AI SDK v5+) with auto-wrapping.\n * When used with a JSON file, the data is automatically wrapped in the\n * Responses API envelope.\n *\n * @param filter - Optional body filters.\n * @param url - Custom gateway URL (default: api.openai.com).\n *\n * @example\n * openai.agent({ user: /Report Ingestion/ }, GATEWAY)\n */\n agent(filter?: OpenAIResponsesFilter, url?: string): InterceptTrigger {\n return {\n method: 'POST',\n url: url ?? OPENAI_RESPONSES_URL,\n match: filter ? (body: unknown) => matchesResponsesFilter(body, filter) : undefined,\n wrap: buildResponsesReply,\n };\n },\n\n /**\n * Response: wrap data in Chat Completions format.\n *\n * @example\n * openai.reply({ categories: ['TECH'] })\n */\n reply: buildChatReply,\n\n /** Response: return an OpenAI error. */\n error(status: number, message?: string): InterceptResponse {\n return {\n status,\n body: {\n error: {\n message: message ?? `OpenAI error (${status})`,\n type: status === 429 ? 'rate_limit_error' : 'api_error',\n code: status === 429 ? 'rate_limit_exceeded' : null,\n },\n },\n };\n },\n\n /** Response: return malformed content. */\n malformed(content: string): InterceptResponse {\n return buildChatReply(content);\n },\n\n /** Response: simulate a timeout. */\n timeout(): InterceptResponse {\n return { status: 200, body: {}, delay: 30_000 };\n },\n\n // ── Legacy aliases ──\n\n /** @deprecated Use openai.request() instead. */\n chat(filter?: OpenAIChatFilter): InterceptTrigger {\n return openai.request(filter);\n },\n\n /** @deprecated Use openai.reply() instead. */\n response: buildChatReply,\n\n /** @deprecated Use openai.agent() instead. */\n responses(filter?: OpenAIResponsesFilter, url?: string): InterceptTrigger {\n return openai.agent(filter, url);\n },\n\n /** @deprecated Use openai.reply() or .intercept(trigger, 'file.json') instead. */\n responsesResponse: buildResponsesReply,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"intercept.cjs","names":[],"sources":["../src/spec/intercept/adapters/anthropic.ts","../src/spec/intercept/adapters/http.ts","../src/spec/intercept/adapters/openai.ts"],"sourcesContent":["import type { InterceptResponse, InterceptTrigger } from '../types.js';\n\nconst ANTHROPIC_MESSAGES_URL = 'https://api.anthropic.com/v1/messages';\n\nexport interface AnthropicMessagesFilter {\n model?: RegExp | string;\n system?: RegExp | string;\n user?: RegExp | string;\n tools?: string[];\n}\n\nfunction matchesFilter(body: any, filter: AnthropicMessagesFilter): boolean {\n if (filter.model) {\n const model = body?.model;\n if (typeof filter.model === 'string' && model !== filter.model) {\n return false;\n }\n if (filter.model instanceof RegExp && !filter.model.test(model ?? '')) {\n return false;\n }\n }\n if (filter.system) {\n const system = typeof body?.system === 'string' ? body.system : '';\n if (typeof filter.system === 'string' && !system.includes(filter.system)) {\n return false;\n }\n if (filter.system instanceof RegExp && !filter.system.test(system)) {\n return false;\n }\n }\n if (filter.user) {\n const userMsg = body?.messages?.find((m: any) => m.role === 'user')?.content ?? '';\n const text = typeof userMsg === 'string' ? userMsg : JSON.stringify(userMsg);\n if (typeof filter.user === 'string' && !text.includes(filter.user)) {\n return false;\n }\n if (filter.user instanceof RegExp && !filter.user.test(text)) {\n return false;\n }\n }\n if (filter.tools) {\n const names = body?.tools?.map((t: any) => t.name).filter(Boolean) ?? [];\n if (!filter.tools.every((t) => names.includes(t))) {\n return false;\n }\n }\n return true;\n}\n\nfunction buildReply(data: unknown): InterceptResponse {\n const content = typeof data === 'string' ? data : JSON.stringify(data);\n return {\n status: 200,\n body: {\n id: 'msg-test',\n type: 'message',\n role: 'assistant',\n content: [{ type: 'text', text: content }],\n model: 'claude-sonnet-4-20250514',\n stop_reason: 'end_turn',\n usage: { input_tokens: 10, output_tokens: 10 },\n },\n };\n}\n\n/**\n * Anthropic API intercept helpers.\n */\nexport const anthropic = {\n /**\n * Trigger: match Anthropic messages API requests.\n *\n * @example\n * anthropic.request()\n * anthropic.request({ system: /classify/ })\n */\n request(filter?: AnthropicMessagesFilter): InterceptTrigger {\n return {\n adapter: 'anthropic',\n method: 'POST',\n url: ANTHROPIC_MESSAGES_URL,\n match: filter ? (body: unknown) => matchesFilter(body, filter) : undefined,\n wrap: buildReply,\n };\n },\n\n /**\n * Trigger: match `messages.create` calls, optionally routed through a\n * custom gateway URL. Mirrors `openai.agent()`. When used with a JSON\n * fixture file, the data is returned as-is (no wrapping) because Anthropic\n * fixtures are typically already in the `messages.create` response shape.\n *\n * @example\n * anthropic.message({ user: /classify/ }, GATEWAY)\n * claude.message({ system: /journal/ }, GATEWAY)\n */\n message(filter?: AnthropicMessagesFilter, url?: string): InterceptTrigger {\n return {\n adapter: 'anthropic',\n method: 'POST',\n url: url ?? ANTHROPIC_MESSAGES_URL,\n match: filter ? (body: unknown) => matchesFilter(body, filter) : undefined,\n // Fixture files are already in the messages.create response shape;\n // Pass them through verbatim. Falls back to wrapping for strings.\n wrap(data: unknown): InterceptResponse {\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n return { status: 200, body: data as Record<string, unknown> };\n }\n return buildReply(data);\n },\n };\n },\n\n /** Response: wrap data in Anthropic messages format. */\n reply: buildReply,\n\n /** Response: return an Anthropic error. */\n error(status: number, message?: string): InterceptResponse {\n return {\n status,\n body: {\n type: 'error',\n error: {\n type: status === 429 ? 'rate_limit_error' : 'api_error',\n message: message ?? `Anthropic error (${status})`,\n },\n },\n };\n },\n\n /** Response: simulate a timeout. */\n timeout(): InterceptResponse {\n return { status: 200, body: {}, delay: 30_000 };\n },\n};\n\n/**\n * Alias for {@link anthropic} — matches consumers that call the vendor \"claude\".\n * Re-exposed as a spread copy so downstream tooling (Knip, dts rollup) sees a\n * distinct export and not a duplicate of `anthropic`.\n */\nexport const claude: typeof anthropic = { ...anthropic };\n","import type { InterceptResponse, InterceptTrigger } from '../types.js';\n\nfunction wrapJson(data: unknown): InterceptResponse {\n return { status: 200, body: data };\n}\n\n/**\n * Generic HTTP intercept helpers for any URL.\n *\n * @example\n * .intercept(http.get('https://api.example.com/data'), 'http/response.json')\n */\nexport const http = {\n get(url: RegExp | string): InterceptTrigger {\n return { adapter: 'http', method: 'GET', url, wrap: wrapJson };\n },\n\n post(url: RegExp | string): InterceptTrigger {\n return { adapter: 'http', method: 'POST', url, wrap: wrapJson };\n },\n\n put(url: RegExp | string): InterceptTrigger {\n return { adapter: 'http', method: 'PUT', url, wrap: wrapJson };\n },\n\n delete(url: RegExp | string): InterceptTrigger {\n return { adapter: 'http', method: 'DELETE', url, wrap: wrapJson };\n },\n\n any(url: RegExp | string): InterceptTrigger {\n return { adapter: 'http', method: '*', url, wrap: wrapJson };\n },\n\n /** Response: simple JSON success. */\n json(data: unknown, status = 200): InterceptResponse {\n return { status, body: data };\n },\n\n /** Response: error with message. */\n error(status: number, message?: string): InterceptResponse {\n return { status, body: { error: message ?? `HTTP ${status}` } };\n },\n};\n","import type { InterceptResponse, InterceptTrigger } from '../types.js';\n\nconst OPENAI_CHAT_URL = 'https://api.openai.com/v1/chat/completions';\nconst OPENAI_RESPONSES_URL = 'https://api.openai.com/v1/responses';\n\n// ── Chat Completions filters ──\n\nexport interface OpenAIChatFilter {\n model?: RegExp | string;\n system?: RegExp | string;\n user?: RegExp | string;\n tools?: string[];\n temperature?: number;\n}\n\nfunction matchesChatFilter(body: any, filter: OpenAIChatFilter): boolean {\n if (filter.model) {\n const model = body?.model;\n if (typeof filter.model === 'string' && model !== filter.model) {\n return false;\n }\n if (filter.model instanceof RegExp && !filter.model.test(model ?? '')) {\n return false;\n }\n }\n if (filter.system) {\n const msg = body?.messages?.find((m: any) => m.role === 'system')?.content ?? '';\n if (typeof filter.system === 'string' && !msg.includes(filter.system)) {\n return false;\n }\n if (filter.system instanceof RegExp && !filter.system.test(msg)) {\n return false;\n }\n }\n if (filter.user) {\n const msg = body?.messages?.find((m: any) => m.role === 'user')?.content ?? '';\n if (typeof filter.user === 'string' && !msg.includes(filter.user)) {\n return false;\n }\n if (filter.user instanceof RegExp && !filter.user.test(msg)) {\n return false;\n }\n }\n if (filter.tools) {\n const names = body?.tools?.map((t: any) => t.function?.name).filter(Boolean) ?? [];\n if (!filter.tools.every((t) => names.includes(t))) {\n return false;\n }\n }\n if (filter.temperature !== undefined && body?.temperature !== filter.temperature) {\n return false;\n }\n return true;\n}\n\n// ── Responses API filters ──\n\nexport interface OpenAIResponsesFilter {\n model?: RegExp | string;\n system?: RegExp | string;\n user?: RegExp | string;\n tools?: string[];\n}\n\nfunction matchesResponsesFilter(body: any, filter: OpenAIResponsesFilter): boolean {\n if (filter.model) {\n const model = body?.model;\n if (typeof filter.model === 'string' && model !== filter.model) {\n return false;\n }\n if (filter.model instanceof RegExp && !filter.model.test(model ?? '')) {\n return false;\n }\n }\n if (filter.system) {\n const instructions = body?.instructions ?? '';\n const systemInput = body?.input?.find?.((m: any) => m.role === 'system')?.content ?? '';\n const text = instructions || systemInput;\n if (typeof filter.system === 'string' && !text.includes(filter.system)) {\n return false;\n }\n if (filter.system instanceof RegExp && !filter.system.test(text)) {\n return false;\n }\n }\n if (filter.user) {\n const msgs = (body?.input ?? [])\n .filter((m: any) => m.role === 'user')\n .map((m: any) =>\n typeof m.content === 'string' ? m.content : JSON.stringify(m.content),\n )\n .join(' ');\n if (typeof filter.user === 'string' && !msgs.includes(filter.user)) {\n return false;\n }\n if (filter.user instanceof RegExp && !filter.user.test(msgs)) {\n return false;\n }\n }\n if (filter.tools) {\n const names =\n body?.tools?.map((t: any) => t.name ?? t.function?.name).filter(Boolean) ?? [];\n if (!filter.tools.every((t) => names.includes(t))) {\n return false;\n }\n }\n return true;\n}\n\n// ── Response builders ──\n\nfunction buildChatReply(data: unknown): InterceptResponse {\n const content = typeof data === 'string' ? data : JSON.stringify(data);\n return {\n status: 200,\n body: {\n id: 'chatcmpl-test',\n object: 'chat.completion',\n created: Math.floor(Date.now() / 1000),\n model: 'gpt-4o-test',\n choices: [{ index: 0, message: { role: 'assistant', content }, finish_reason: 'stop' }],\n usage: { prompt_tokens: 10, completion_tokens: 10, total_tokens: 20 },\n },\n };\n}\n\nfunction buildResponsesReply(data: unknown): InterceptResponse {\n const text = typeof data === 'string' ? data : JSON.stringify(data);\n return {\n status: 200,\n body: {\n id: 'resp-test',\n object: 'response',\n created_at: Math.floor(Date.now() / 1000),\n model: 'gpt-4o-test',\n output: [\n {\n type: 'message',\n id: 'msg-test',\n role: 'assistant',\n content: [{ type: 'output_text', text, annotations: [] }],\n },\n ],\n usage: { input_tokens: 10, output_tokens: 10, total_tokens: 20 },\n },\n };\n}\n\n// ── Public API ──\n\n/**\n * OpenAI API intercept helpers.\n */\nexport const openai = {\n /**\n * Trigger: match Chat Completions API requests.\n *\n * @example\n * openai.request() // any chat call\n * openai.request({ model: 'gpt-4o' }) // specific model\n * openai.request({ system: /classify/ }) // system prompt match\n */\n request(filter?: OpenAIChatFilter): InterceptTrigger {\n return {\n adapter: 'openai',\n method: 'POST',\n url: OPENAI_CHAT_URL,\n match: filter ? (body: unknown) => matchesChatFilter(body, filter) : undefined,\n wrap: buildChatReply,\n };\n },\n\n /**\n * Trigger: match Responses API requests (AI SDK v5+) with auto-wrapping.\n * When used with a JSON file, the data is automatically wrapped in the\n * Responses API envelope.\n *\n * @param filter - Optional body filters.\n * @param url - Custom gateway URL (default: api.openai.com).\n *\n * @example\n * openai.agent({ user: /Report Ingestion/ }, GATEWAY)\n */\n agent(filter?: OpenAIResponsesFilter, url?: string): InterceptTrigger {\n return {\n adapter: 'openai',\n method: 'POST',\n url: url ?? OPENAI_RESPONSES_URL,\n match: filter ? (body: unknown) => matchesResponsesFilter(body, filter) : undefined,\n wrap: buildResponsesReply,\n };\n },\n\n /**\n * Response: wrap data in Chat Completions format.\n *\n * @example\n * openai.reply({ categories: ['TECH'] })\n */\n reply: buildChatReply,\n\n /** Response: return an OpenAI error. */\n error(status: number, message?: string): InterceptResponse {\n return {\n status,\n body: {\n error: {\n message: message ?? `OpenAI error (${status})`,\n type: status === 429 ? 'rate_limit_error' : 'api_error',\n code: status === 429 ? 'rate_limit_exceeded' : null,\n },\n },\n };\n },\n\n /** Response: return malformed content. */\n malformed(content: string): InterceptResponse {\n return buildChatReply(content);\n },\n\n /** Response: simulate a timeout. */\n timeout(): InterceptResponse {\n return { status: 200, body: {}, delay: 30_000 };\n },\n};\n"],"mappings":"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"}
|
package/dist/intercept.d.cts
CHANGED
|
@@ -1,48 +1,65 @@
|
|
|
1
1
|
import { n as InterceptResponse, r as InterceptTrigger, t as InterceptEntry } from "./types.cjs";
|
|
2
2
|
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/spec/intercept/adapters/anthropic.d.ts
|
|
4
4
|
interface AnthropicMessagesFilter {
|
|
5
|
-
/** Match by model name. */
|
|
6
5
|
model?: RegExp | string;
|
|
7
|
-
/** Match by system message content. */
|
|
8
6
|
system?: RegExp | string;
|
|
9
|
-
/** Match by user message content. */
|
|
10
7
|
user?: RegExp | string;
|
|
11
|
-
/** Match by tool names. */
|
|
12
8
|
tools?: string[];
|
|
13
9
|
}
|
|
10
|
+
declare function buildReply(data: unknown): InterceptResponse;
|
|
14
11
|
/**
|
|
15
12
|
* Anthropic API intercept helpers.
|
|
16
13
|
*/
|
|
17
14
|
declare const anthropic: {
|
|
18
15
|
/**
|
|
19
16
|
* Trigger: match Anthropic messages API requests.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* anthropic.request()
|
|
20
|
+
* anthropic.request({ system: /classify/ })
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
request(filter?: AnthropicMessagesFilter): InterceptTrigger;
|
|
23
|
+
/**
|
|
24
|
+
* Trigger: match `messages.create` calls, optionally routed through a
|
|
25
|
+
* custom gateway URL. Mirrors `openai.agent()`. When used with a JSON
|
|
26
|
+
* fixture file, the data is returned as-is (no wrapping) because Anthropic
|
|
27
|
+
* fixtures are typically already in the `messages.create` response shape.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* anthropic.message({ user: /classify/ }, GATEWAY)
|
|
31
|
+
* claude.message({ system: /journal/ }, GATEWAY)
|
|
32
|
+
*/
|
|
33
|
+
message(filter?: AnthropicMessagesFilter, url?: string): InterceptTrigger; /** Response: wrap data in Anthropic messages format. */
|
|
34
|
+
reply: typeof buildReply; /** Response: return an Anthropic error. */
|
|
23
35
|
error(status: number, message?: string): InterceptResponse; /** Response: simulate a timeout. */
|
|
24
36
|
timeout(): InterceptResponse;
|
|
25
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* Alias for {@link anthropic} — matches consumers that call the vendor "claude".
|
|
40
|
+
* Re-exposed as a spread copy so downstream tooling (Knip, dts rollup) sees a
|
|
41
|
+
* distinct export and not a duplicate of `anthropic`.
|
|
42
|
+
*/
|
|
43
|
+
declare const claude: typeof anthropic;
|
|
26
44
|
//#endregion
|
|
27
|
-
//#region src/
|
|
45
|
+
//#region src/spec/intercept/adapters/http.d.ts
|
|
28
46
|
/**
|
|
29
47
|
* Generic HTTP intercept helpers for any URL.
|
|
30
48
|
*
|
|
31
49
|
* @example
|
|
32
|
-
* .intercept(http.get('https://api.example.com/data'), 'response.json')
|
|
33
|
-
* .intercept(http.post('https://api.stripe.com/v1/charges'), http.json({ id: 'ch_...' }))
|
|
50
|
+
* .intercept(http.get('https://api.example.com/data'), 'http/response.json')
|
|
34
51
|
*/
|
|
35
52
|
declare const http: {
|
|
36
|
-
|
|
37
|
-
post(url: RegExp | string): InterceptTrigger;
|
|
38
|
-
put(url: RegExp | string): InterceptTrigger;
|
|
39
|
-
delete(url: RegExp | string): InterceptTrigger;
|
|
53
|
+
get(url: RegExp | string): InterceptTrigger;
|
|
54
|
+
post(url: RegExp | string): InterceptTrigger;
|
|
55
|
+
put(url: RegExp | string): InterceptTrigger;
|
|
56
|
+
delete(url: RegExp | string): InterceptTrigger;
|
|
40
57
|
any(url: RegExp | string): InterceptTrigger; /** Response: simple JSON success. */
|
|
41
58
|
json(data: unknown, status?: number): InterceptResponse; /** Response: error with message. */
|
|
42
59
|
error(status: number, message?: string): InterceptResponse;
|
|
43
60
|
};
|
|
44
61
|
//#endregion
|
|
45
|
-
//#region src/
|
|
62
|
+
//#region src/spec/intercept/adapters/openai.d.ts
|
|
46
63
|
interface OpenAIChatFilter {
|
|
47
64
|
model?: RegExp | string;
|
|
48
65
|
system?: RegExp | string;
|
|
@@ -57,7 +74,6 @@ interface OpenAIResponsesFilter {
|
|
|
57
74
|
tools?: string[];
|
|
58
75
|
}
|
|
59
76
|
declare function buildChatReply(data: unknown): InterceptResponse;
|
|
60
|
-
declare function buildResponsesReply(data: unknown): InterceptResponse;
|
|
61
77
|
/**
|
|
62
78
|
* OpenAI API intercept helpers.
|
|
63
79
|
*/
|
|
@@ -92,12 +108,8 @@ declare const openai: {
|
|
|
92
108
|
reply: typeof buildChatReply; /** Response: return an OpenAI error. */
|
|
93
109
|
error(status: number, message?: string): InterceptResponse; /** Response: return malformed content. */
|
|
94
110
|
malformed(content: string): InterceptResponse; /** Response: simulate a timeout. */
|
|
95
|
-
timeout(): InterceptResponse;
|
|
96
|
-
chat(filter?: OpenAIChatFilter): InterceptTrigger; /** @deprecated Use openai.reply() instead. */
|
|
97
|
-
response: typeof buildChatReply; /** @deprecated Use openai.agent() instead. */
|
|
98
|
-
responses(filter?: OpenAIResponsesFilter, url?: string): InterceptTrigger; /** @deprecated Use openai.reply() or .intercept(trigger, 'file.json') instead. */
|
|
99
|
-
responsesResponse: typeof buildResponsesReply;
|
|
111
|
+
timeout(): InterceptResponse;
|
|
100
112
|
};
|
|
101
113
|
//#endregion
|
|
102
|
-
export { type InterceptEntry, type InterceptResponse, type InterceptTrigger, anthropic, http, openai };
|
|
114
|
+
export { type InterceptEntry, type InterceptResponse, type InterceptTrigger, anthropic, claude, http, openai };
|
|
103
115
|
//# sourceMappingURL=intercept.d.cts.map
|
package/dist/intercept.d.ts
CHANGED
|
@@ -1,48 +1,65 @@
|
|
|
1
1
|
import { n as InterceptResponse, r as InterceptTrigger, t as InterceptEntry } from "./types.js";
|
|
2
2
|
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/spec/intercept/adapters/anthropic.d.ts
|
|
4
4
|
interface AnthropicMessagesFilter {
|
|
5
|
-
/** Match by model name. */
|
|
6
5
|
model?: RegExp | string;
|
|
7
|
-
/** Match by system message content. */
|
|
8
6
|
system?: RegExp | string;
|
|
9
|
-
/** Match by user message content. */
|
|
10
7
|
user?: RegExp | string;
|
|
11
|
-
/** Match by tool names. */
|
|
12
8
|
tools?: string[];
|
|
13
9
|
}
|
|
10
|
+
declare function buildReply(data: unknown): InterceptResponse;
|
|
14
11
|
/**
|
|
15
12
|
* Anthropic API intercept helpers.
|
|
16
13
|
*/
|
|
17
14
|
declare const anthropic: {
|
|
18
15
|
/**
|
|
19
16
|
* Trigger: match Anthropic messages API requests.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* anthropic.request()
|
|
20
|
+
* anthropic.request({ system: /classify/ })
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
request(filter?: AnthropicMessagesFilter): InterceptTrigger;
|
|
23
|
+
/**
|
|
24
|
+
* Trigger: match `messages.create` calls, optionally routed through a
|
|
25
|
+
* custom gateway URL. Mirrors `openai.agent()`. When used with a JSON
|
|
26
|
+
* fixture file, the data is returned as-is (no wrapping) because Anthropic
|
|
27
|
+
* fixtures are typically already in the `messages.create` response shape.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* anthropic.message({ user: /classify/ }, GATEWAY)
|
|
31
|
+
* claude.message({ system: /journal/ }, GATEWAY)
|
|
32
|
+
*/
|
|
33
|
+
message(filter?: AnthropicMessagesFilter, url?: string): InterceptTrigger; /** Response: wrap data in Anthropic messages format. */
|
|
34
|
+
reply: typeof buildReply; /** Response: return an Anthropic error. */
|
|
23
35
|
error(status: number, message?: string): InterceptResponse; /** Response: simulate a timeout. */
|
|
24
36
|
timeout(): InterceptResponse;
|
|
25
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* Alias for {@link anthropic} — matches consumers that call the vendor "claude".
|
|
40
|
+
* Re-exposed as a spread copy so downstream tooling (Knip, dts rollup) sees a
|
|
41
|
+
* distinct export and not a duplicate of `anthropic`.
|
|
42
|
+
*/
|
|
43
|
+
declare const claude: typeof anthropic;
|
|
26
44
|
//#endregion
|
|
27
|
-
//#region src/
|
|
45
|
+
//#region src/spec/intercept/adapters/http.d.ts
|
|
28
46
|
/**
|
|
29
47
|
* Generic HTTP intercept helpers for any URL.
|
|
30
48
|
*
|
|
31
49
|
* @example
|
|
32
|
-
* .intercept(http.get('https://api.example.com/data'), 'response.json')
|
|
33
|
-
* .intercept(http.post('https://api.stripe.com/v1/charges'), http.json({ id: 'ch_...' }))
|
|
50
|
+
* .intercept(http.get('https://api.example.com/data'), 'http/response.json')
|
|
34
51
|
*/
|
|
35
52
|
declare const http: {
|
|
36
|
-
|
|
37
|
-
post(url: RegExp | string): InterceptTrigger;
|
|
38
|
-
put(url: RegExp | string): InterceptTrigger;
|
|
39
|
-
delete(url: RegExp | string): InterceptTrigger;
|
|
53
|
+
get(url: RegExp | string): InterceptTrigger;
|
|
54
|
+
post(url: RegExp | string): InterceptTrigger;
|
|
55
|
+
put(url: RegExp | string): InterceptTrigger;
|
|
56
|
+
delete(url: RegExp | string): InterceptTrigger;
|
|
40
57
|
any(url: RegExp | string): InterceptTrigger; /** Response: simple JSON success. */
|
|
41
58
|
json(data: unknown, status?: number): InterceptResponse; /** Response: error with message. */
|
|
42
59
|
error(status: number, message?: string): InterceptResponse;
|
|
43
60
|
};
|
|
44
61
|
//#endregion
|
|
45
|
-
//#region src/
|
|
62
|
+
//#region src/spec/intercept/adapters/openai.d.ts
|
|
46
63
|
interface OpenAIChatFilter {
|
|
47
64
|
model?: RegExp | string;
|
|
48
65
|
system?: RegExp | string;
|
|
@@ -57,7 +74,6 @@ interface OpenAIResponsesFilter {
|
|
|
57
74
|
tools?: string[];
|
|
58
75
|
}
|
|
59
76
|
declare function buildChatReply(data: unknown): InterceptResponse;
|
|
60
|
-
declare function buildResponsesReply(data: unknown): InterceptResponse;
|
|
61
77
|
/**
|
|
62
78
|
* OpenAI API intercept helpers.
|
|
63
79
|
*/
|
|
@@ -92,12 +108,8 @@ declare const openai: {
|
|
|
92
108
|
reply: typeof buildChatReply; /** Response: return an OpenAI error. */
|
|
93
109
|
error(status: number, message?: string): InterceptResponse; /** Response: return malformed content. */
|
|
94
110
|
malformed(content: string): InterceptResponse; /** Response: simulate a timeout. */
|
|
95
|
-
timeout(): InterceptResponse;
|
|
96
|
-
chat(filter?: OpenAIChatFilter): InterceptTrigger; /** @deprecated Use openai.reply() instead. */
|
|
97
|
-
response: typeof buildChatReply; /** @deprecated Use openai.agent() instead. */
|
|
98
|
-
responses(filter?: OpenAIResponsesFilter, url?: string): InterceptTrigger; /** @deprecated Use openai.reply() or .intercept(trigger, 'file.json') instead. */
|
|
99
|
-
responsesResponse: typeof buildResponsesReply;
|
|
111
|
+
timeout(): InterceptResponse;
|
|
100
112
|
};
|
|
101
113
|
//#endregion
|
|
102
|
-
export { type InterceptEntry, type InterceptResponse, type InterceptTrigger, anthropic, http, openai };
|
|
114
|
+
export { type InterceptEntry, type InterceptResponse, type InterceptTrigger, anthropic, claude, http, openai };
|
|
103
115
|
//# sourceMappingURL=intercept.d.ts.map
|