@vibesdotdev/client 0.1.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/SPEC.md +107 -0
- package/dist/factory.d.ts +34 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +80 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/client/core.d.ts +8 -0
- package/dist/lib/client/core.d.ts.map +1 -0
- package/dist/lib/client/core.js +5 -0
- package/dist/lib/client/core.js.map +1 -0
- package/dist/lib/client/internal/base-client.d.ts +19 -0
- package/dist/lib/client/internal/base-client.d.ts.map +1 -0
- package/dist/lib/client/internal/base-client.js +92 -0
- package/dist/lib/client/internal/base-client.js.map +1 -0
- package/dist/lib/client/internal/base-helpers.d.ts +9 -0
- package/dist/lib/client/internal/base-helpers.d.ts.map +1 -0
- package/dist/lib/client/internal/base-helpers.js +79 -0
- package/dist/lib/client/internal/base-helpers.js.map +1 -0
- package/dist/lib/client/internal/base-types.d.ts +35 -0
- package/dist/lib/client/internal/base-types.d.ts.map +1 -0
- package/dist/lib/client/internal/base-types.js +15 -0
- package/dist/lib/client/internal/base-types.js.map +1 -0
- package/dist/lib/client/internal/endpoint.d.ts +22 -0
- package/dist/lib/client/internal/endpoint.d.ts.map +1 -0
- package/dist/lib/client/internal/endpoint.js +35 -0
- package/dist/lib/client/internal/endpoint.js.map +1 -0
- package/dist/lib/client/internal/generator.d.ts +20 -0
- package/dist/lib/client/internal/generator.d.ts.map +1 -0
- package/dist/lib/client/internal/generator.js +173 -0
- package/dist/lib/client/internal/generator.js.map +1 -0
- package/dist/lib/client/internal/index.d.ts +5 -0
- package/dist/lib/client/internal/index.d.ts.map +1 -0
- package/dist/lib/client/internal/index.js +4 -0
- package/dist/lib/client/internal/index.js.map +1 -0
- package/dist/lib/client/internal/node/http2-fetch.node.d.ts +2 -0
- package/dist/lib/client/internal/node/http2-fetch.node.d.ts.map +1 -0
- package/dist/lib/client/internal/node/http2-fetch.node.js +131 -0
- package/dist/lib/client/internal/node/http2-fetch.node.js.map +1 -0
- package/dist/lib/client/internal/request-builder.d.ts +15 -0
- package/dist/lib/client/internal/request-builder.d.ts.map +1 -0
- package/dist/lib/client/internal/request-builder.js +158 -0
- package/dist/lib/client/internal/request-builder.js.map +1 -0
- package/dist/lib/client/internal/sse-stream.d.ts +23 -0
- package/dist/lib/client/internal/sse-stream.d.ts.map +1 -0
- package/dist/lib/client/internal/sse-stream.js +110 -0
- package/dist/lib/client/internal/sse-stream.js.map +1 -0
- package/dist/lib/client/internal/vibes-client.d.ts +32 -0
- package/dist/lib/client/internal/vibes-client.d.ts.map +1 -0
- package/dist/lib/client/internal/vibes-client.js +120 -0
- package/dist/lib/client/internal/vibes-client.js.map +1 -0
- package/dist/lib/client/internal/wrap-fetch.d.ts +6 -0
- package/dist/lib/client/internal/wrap-fetch.d.ts.map +1 -0
- package/dist/lib/client/internal/wrap-fetch.js +46 -0
- package/dist/lib/client/internal/wrap-fetch.js.map +1 -0
- package/dist/lib/client/node.d.ts +5 -0
- package/dist/lib/client/node.d.ts.map +1 -0
- package/dist/lib/client/node.js +33 -0
- package/dist/lib/client/node.js.map +1 -0
- package/dist/lib/client/types.d.ts +145 -0
- package/dist/lib/client/types.d.ts.map +1 -0
- package/dist/lib/client/types.js +21 -0
- package/dist/lib/client/types.js.map +1 -0
- package/dist/plugin.d.ts +19 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +80 -0
- package/dist/plugin.js.map +1 -0
- package/dist/schemas.d.ts +90 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +9 -0
- package/dist/schemas.js.map +1 -0
- package/dist/sse-client.d.ts +39 -0
- package/dist/sse-client.d.ts.map +1 -0
- package/dist/sse-client.js +124 -0
- package/dist/sse-client.js.map +1 -0
- package/dist/tools/api-request/api-request.descriptor.d.ts +48 -0
- package/dist/tools/api-request/api-request.descriptor.d.ts.map +1 -0
- package/dist/tools/api-request/api-request.descriptor.js +27 -0
- package/dist/tools/api-request/api-request.descriptor.js.map +1 -0
- package/dist/tools/api-request/api-request.impl.consumer.d.ts +13 -0
- package/dist/tools/api-request/api-request.impl.consumer.d.ts.map +1 -0
- package/dist/tools/api-request/api-request.impl.consumer.js +51 -0
- package/dist/tools/api-request/api-request.impl.consumer.js.map +1 -0
- package/dist/tools/api-request/index.d.ts +5 -0
- package/dist/tools/api-request/index.d.ts.map +1 -0
- package/dist/tools/api-request/index.js +4 -0
- package/dist/tools/api-request/index.js.map +1 -0
- package/dist/tools/api-request/schemas/index.d.ts +33 -0
- package/dist/tools/api-request/schemas/index.d.ts.map +1 -0
- package/dist/tools/api-request/schemas/index.js +24 -0
- package/dist/tools/api-request/schemas/index.js.map +1 -0
- package/package.json +99 -0
- package/src/factory.ts +114 -0
- package/src/index.ts +15 -0
- package/src/lib/client/core.ts +13 -0
- package/src/lib/client/internal/base-client.ts +107 -0
- package/src/lib/client/internal/base-helpers.ts +74 -0
- package/src/lib/client/internal/base-types.ts +42 -0
- package/src/lib/client/internal/endpoint.ts +51 -0
- package/src/lib/client/internal/generator.ts +181 -0
- package/src/lib/client/internal/index.ts +4 -0
- package/src/lib/client/internal/node/http2-fetch.node.ts +138 -0
- package/src/lib/client/internal/request-builder.ts +147 -0
- package/src/lib/client/internal/sse-stream.ts +130 -0
- package/src/lib/client/internal/vibes-client.ts +167 -0
- package/src/lib/client/internal/wrap-fetch.ts +59 -0
- package/src/lib/client/node.ts +36 -0
- package/src/lib/client/types.ts +156 -0
- package/src/plugin.ts +104 -0
- package/src/schemas.ts +91 -0
- package/src/sse-client.ts +155 -0
- package/src/tools/api-request/api-request.descriptor.ts +28 -0
- package/src/tools/api-request/api-request.impl.consumer.ts +66 -0
- package/src/tools/api-request/index.ts +4 -0
- package/src/tools/api-request/schemas/index.ts +29 -0
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { createRuntimePlugin, loader } from '@vibesdotdev/runtime';
|
|
2
|
+
import { ApiClientDescriptorSchema } from "./schemas.js";
|
|
3
|
+
import { vibesApiClient } from "./factory.js";
|
|
4
|
+
import apiRequestToolDescriptor from "./tools/api-request/api-request.descriptor.js";
|
|
5
|
+
function isApiClientDescriptor(descriptor) {
|
|
6
|
+
return descriptor.kind === 'api/client' && typeof descriptor.id === 'string';
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Default API client implementation.
|
|
10
|
+
*
|
|
11
|
+
* When no specific client implementation is registered for a descriptor,
|
|
12
|
+
* this default constructs a client using the descriptor's baseUrl.
|
|
13
|
+
*/
|
|
14
|
+
class DefaultApiClient {
|
|
15
|
+
client;
|
|
16
|
+
constructor(descriptor, _context) {
|
|
17
|
+
if (!isApiClientDescriptor(descriptor)) {
|
|
18
|
+
throw new Error(`Invalid api/client descriptor '${descriptor.id ?? 'unknown'}'`);
|
|
19
|
+
}
|
|
20
|
+
this.client = vibesApiClient({
|
|
21
|
+
id: descriptor.id,
|
|
22
|
+
baseUrl: descriptor.baseUrl,
|
|
23
|
+
timeout: descriptor.timeout,
|
|
24
|
+
debug: descriptor.debug
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
get(endpoint, options) {
|
|
28
|
+
return this.client.get(endpoint, options);
|
|
29
|
+
}
|
|
30
|
+
post(endpoint, body, options) {
|
|
31
|
+
return this.client.post(endpoint, body, options);
|
|
32
|
+
}
|
|
33
|
+
put(endpoint, body, options) {
|
|
34
|
+
return this.client.put(endpoint, body, options);
|
|
35
|
+
}
|
|
36
|
+
patch(endpoint, body, options) {
|
|
37
|
+
return this.client.patch(endpoint, body, options);
|
|
38
|
+
}
|
|
39
|
+
delete(endpoint, options) {
|
|
40
|
+
return this.client.delete(endpoint, options);
|
|
41
|
+
}
|
|
42
|
+
request(endpoint, options) {
|
|
43
|
+
return this.client.request(endpoint, options);
|
|
44
|
+
}
|
|
45
|
+
stream(endpoint, options) {
|
|
46
|
+
return this.client.stream(endpoint, options);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const apiClientKind = {
|
|
50
|
+
id: 'api/client',
|
|
51
|
+
descriptorSchema: ApiClientDescriptorSchema,
|
|
52
|
+
defaultImplementation: DefaultApiClient
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Client plugin — registers the `api/client` kind with the runtime.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```ts
|
|
59
|
+
* import { getVibesRuntime } from '@vibesdotdev/runtime';
|
|
60
|
+
* import clientPlugin from '@vibesdotdev/client/plugin';
|
|
61
|
+
*
|
|
62
|
+
* const runtime = getVibesRuntime();
|
|
63
|
+
* await runtime.registerPlugin(clientPlugin);
|
|
64
|
+
*
|
|
65
|
+
* // Query a registered API client
|
|
66
|
+
* const authClient = await runtime.query('api/client').withId('auth').resolve();
|
|
67
|
+
* await authClient.get('/api/health');
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export default createRuntimePlugin({
|
|
71
|
+
id: 'client',
|
|
72
|
+
name: 'API Client Module',
|
|
73
|
+
description: 'Runtime API client kind with environment-aware factories',
|
|
74
|
+
kinds: [apiClientKind],
|
|
75
|
+
descriptors: [apiRequestToolDescriptor],
|
|
76
|
+
loaders: [
|
|
77
|
+
loader('api-request', { kind: 'tools/tool', scope: 'consumer' }, () => import('./tools/api-request/api-request.impl.consumer.js'))
|
|
78
|
+
]
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EACN,yBAAyB,EAIzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,wBAAwB,MAAM,+CAA+C,CAAC;AAErF,SAAS,qBAAqB,CAAC,UAA6B;IAC3D,OAAO,UAAU,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,UAAU,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAED;;;;;GAKG;AACH,MAAM,gBAAgB;IACb,MAAM,CAA0B;IAExC,YAAY,UAA6B,EAAE,QAAqB;QAC/D,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,kCAAkC,UAAU,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;YAC5B,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;SACvB,CAAC,CAAC;IACJ,CAAC;IAED,GAAG,CAAc,QAAgB,EAAE,OAAuD;QACzF,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAc,QAAgB,EAAE,IAAc,EAAE,OAAwD;QAC3G,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAI,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,GAAG,CAAc,QAAgB,EAAE,IAAc,EAAE,OAAuD;QACzG,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAc,QAAgB,EAAE,IAAc,EAAE,OAAyD;QAC7G,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAI,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAc,QAAgB,EAAE,OAA0D;QAC/F,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAI,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CAAc,QAAgB,EAAE,OAA2D;QACjG,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAI,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CACL,QAAgB,EAChB,OAA0D;QAE1D,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAI,QAAQ,EAAE,OAAO,CAA6C,CAAC;IAC7F,CAAC;CACD;AAED,MAAM,aAAa,GAAG;IACrB,EAAE,EAAE,YAAY;IAChB,gBAAgB,EAAE,yBAAyB;IAC3C,qBAAqB,EAAE,gBAAgB;CACwB,CAAC;AAEjE;;;;;;;;;;;;;;;GAeG;AACH,eAAe,mBAAmB,CAAC;IAClC,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,0DAA0D;IACvE,KAAK,EAAE,CAAC,aAAa,CAAC;IACtB,WAAW,EAAE,CAAC,wBAAwB,CAAC;IACvC,OAAO,EAAE;QACR,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,CACrE,MAAM,CAAC,kDAAkD,CAAC,CAC1D;KACD;CACD,CAAC,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { type RuntimeDescriptor } from '@vibesdotdev/runtime/schemas/descriptor';
|
|
3
|
+
/**
|
|
4
|
+
* API Client descriptor — metadata for a registered API client asset.
|
|
5
|
+
*/
|
|
6
|
+
export interface ApiClientDescriptor extends RuntimeDescriptor {
|
|
7
|
+
kind: 'api/client';
|
|
8
|
+
/** Base URL for this client's API */
|
|
9
|
+
baseUrl?: string;
|
|
10
|
+
/** Default timeout in milliseconds */
|
|
11
|
+
timeout?: number;
|
|
12
|
+
/** Whether to enable debug logging */
|
|
13
|
+
debug?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare const ApiClientDescriptorSchema: z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
name: z.ZodOptional<z.ZodString>;
|
|
18
|
+
description: z.ZodOptional<z.ZodString>;
|
|
19
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
20
|
+
hardware: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
21
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
22
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
requiredContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
24
|
+
optionalContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
25
|
+
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
26
|
+
kind: z.ZodLiteral<"api/client">;
|
|
27
|
+
baseUrl: z.ZodOptional<z.ZodString>;
|
|
28
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
29
|
+
debug: z.ZodOptional<z.ZodBoolean>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
/**
|
|
32
|
+
* API Client implementation interface.
|
|
33
|
+
*
|
|
34
|
+
* Any runtime API client implementation must satisfy this contract.
|
|
35
|
+
*/
|
|
36
|
+
export interface ApiClientImplementation {
|
|
37
|
+
/** Make a GET request */
|
|
38
|
+
get<T = unknown>(endpoint: string, options?: ApiRequestOptions): Promise<T>;
|
|
39
|
+
/** Make a POST request */
|
|
40
|
+
post<T = unknown>(endpoint: string, body?: unknown, options?: ApiRequestOptions): Promise<T>;
|
|
41
|
+
/** Make a PUT request */
|
|
42
|
+
put<T = unknown>(endpoint: string, body?: unknown, options?: ApiRequestOptions): Promise<T>;
|
|
43
|
+
/** Make a PATCH request */
|
|
44
|
+
patch<T = unknown>(endpoint: string, body?: unknown, options?: ApiRequestOptions): Promise<T>;
|
|
45
|
+
/** Make a DELETE request */
|
|
46
|
+
delete<T = unknown>(endpoint: string, options?: ApiRequestOptions): Promise<T>;
|
|
47
|
+
/** Make a generic request */
|
|
48
|
+
request<T = unknown>(endpoint: string, options?: ApiRequestOptions & {
|
|
49
|
+
method?: string;
|
|
50
|
+
body?: unknown;
|
|
51
|
+
}): Promise<T>;
|
|
52
|
+
/**
|
|
53
|
+
* Stream Server-Sent Events from an endpoint.
|
|
54
|
+
*
|
|
55
|
+
* Yields parsed SSE frames as they arrive. Each frame has already been
|
|
56
|
+
* split into event/data/id/retry fields and the data payload is
|
|
57
|
+
* JSON-parsed when possible. Returning from the generator — or the
|
|
58
|
+
* server closing the stream — ends iteration; an explicit `[DONE]`
|
|
59
|
+
* sentinel in the data stream also terminates.
|
|
60
|
+
*
|
|
61
|
+
* Use this instead of manually parsing SSE-wrapped POST bodies — the
|
|
62
|
+
* raw-fetch workaround (line-split + regex for `data: ...` lines) is
|
|
63
|
+
* brittle and fails on multi-line data, retry hints, and reconnects.
|
|
64
|
+
*/
|
|
65
|
+
stream<T = unknown>(endpoint: string, options?: ApiStreamOptions): AsyncIterableIterator<ApiStreamEvent<T>>;
|
|
66
|
+
}
|
|
67
|
+
export interface ApiRequestOptions {
|
|
68
|
+
query?: Record<string, string | number | boolean | string[] | undefined>;
|
|
69
|
+
headers?: Record<string, string>;
|
|
70
|
+
timeout?: number;
|
|
71
|
+
params?: Record<string, string | number | boolean>;
|
|
72
|
+
}
|
|
73
|
+
export interface ApiStreamOptions extends ApiRequestOptions {
|
|
74
|
+
method?: string;
|
|
75
|
+
body?: unknown;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* A single Server-Sent Event frame.
|
|
79
|
+
*
|
|
80
|
+
* `data` is JSON-parsed when the frame payload is valid JSON, otherwise
|
|
81
|
+
* the raw string is returned. `event`, `id`, and `retry` map to the
|
|
82
|
+
* corresponding SSE fields when present.
|
|
83
|
+
*/
|
|
84
|
+
export interface ApiStreamEvent<T = unknown> {
|
|
85
|
+
event?: string;
|
|
86
|
+
data: T;
|
|
87
|
+
id?: string;
|
|
88
|
+
retry?: number;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAEN,KAAK,iBAAiB,EACtB,MAAM,yCAAyC,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC7D,IAAI,EAAE,YAAY,CAAC;IACnB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;iBAKpC,CAAC;AAEH;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACvC,yBAAyB;IACzB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5E,0BAA0B;IAC1B,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7F,yBAAyB;IACzB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5F,2BAA2B;IAC3B,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9F,4BAA4B;IAC5B,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/E,6BAA6B;IAC7B,OAAO,CAAC,CAAC,GAAG,OAAO,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/D,OAAO,CAAC,CAAC,CAAC,CAAC;IACd;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,CAAC,GAAG,OAAO,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACxB,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CACf"}
|
package/dist/schemas.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
|
|
3
|
+
export const ApiClientDescriptorSchema = RuntimeDescriptorSchema.extend({
|
|
4
|
+
kind: z.literal('api/client'),
|
|
5
|
+
baseUrl: z.string().optional(),
|
|
6
|
+
timeout: z.number().int().positive().optional(),
|
|
7
|
+
debug: z.boolean().optional()
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EACN,uBAAuB,EAEvB,MAAM,yCAAyC,CAAC;AAejD,MAAM,CAAC,MAAM,yBAAyB,GAAG,uBAAuB,CAAC,MAAM,CAAC;IACvE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC/C,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side SSE (Server-Sent Events) client.
|
|
3
|
+
*
|
|
4
|
+
* Provides a typed interface for connecting to SSE endpoints,
|
|
5
|
+
* handling reconnection, and dispatching events.
|
|
6
|
+
*/
|
|
7
|
+
export type SSEConnectionStatus = 'connecting' | 'connected' | 'reconnecting' | 'disconnected' | 'error';
|
|
8
|
+
export interface SSEClientOptions {
|
|
9
|
+
url: string;
|
|
10
|
+
reconnectDelay?: number;
|
|
11
|
+
maxReconnectAttempts?: number;
|
|
12
|
+
onStatusChange?: (status: SSEConnectionStatus) => void;
|
|
13
|
+
onError?: (error: string) => void;
|
|
14
|
+
}
|
|
15
|
+
type EventHandler = (data: unknown) => void;
|
|
16
|
+
export declare class SSEClient {
|
|
17
|
+
private url;
|
|
18
|
+
private reconnectDelay;
|
|
19
|
+
private maxReconnectAttempts;
|
|
20
|
+
private onStatusChange?;
|
|
21
|
+
private onError?;
|
|
22
|
+
private eventSource;
|
|
23
|
+
private handlers;
|
|
24
|
+
private reconnectAttempts;
|
|
25
|
+
private reconnectTimer;
|
|
26
|
+
private _status;
|
|
27
|
+
constructor(options: SSEClientOptions);
|
|
28
|
+
get status(): SSEConnectionStatus;
|
|
29
|
+
connect(): void;
|
|
30
|
+
disconnect(): void;
|
|
31
|
+
on(event: string, handler: EventHandler): () => void;
|
|
32
|
+
private dispatch;
|
|
33
|
+
private setStatus;
|
|
34
|
+
private scheduleReconnect;
|
|
35
|
+
private cleanup;
|
|
36
|
+
}
|
|
37
|
+
export declare function createSSEClient(options: SSEClientOptions): SSEClient;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=sse-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-client.d.ts","sourceRoot":"","sources":["../src/sse-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,mBAAmB,GAC5B,YAAY,GACZ,WAAW,GACX,cAAc,GACd,cAAc,GACd,OAAO,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAE5C,qBAAa,SAAS;IACrB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,cAAc,CAAC,CAAwC;IAC/D,OAAO,CAAC,OAAO,CAAC,CAA0B;IAE1C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,OAAO,CAAuC;gBAE1C,OAAO,EAAE,gBAAgB;IAQrC,IAAI,MAAM,IAAI,mBAAmB,CAEhC;IAED,OAAO,IAAI,IAAI;IAoDf,UAAU,IAAI,IAAI;IAKlB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAYpD,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,OAAO;CAUf;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAEpE"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side SSE (Server-Sent Events) client.
|
|
3
|
+
*
|
|
4
|
+
* Provides a typed interface for connecting to SSE endpoints,
|
|
5
|
+
* handling reconnection, and dispatching events.
|
|
6
|
+
*/
|
|
7
|
+
export class SSEClient {
|
|
8
|
+
url;
|
|
9
|
+
reconnectDelay;
|
|
10
|
+
maxReconnectAttempts;
|
|
11
|
+
onStatusChange;
|
|
12
|
+
onError;
|
|
13
|
+
eventSource = null;
|
|
14
|
+
handlers = new Map();
|
|
15
|
+
reconnectAttempts = 0;
|
|
16
|
+
reconnectTimer = null;
|
|
17
|
+
_status = 'disconnected';
|
|
18
|
+
constructor(options) {
|
|
19
|
+
this.url = options.url;
|
|
20
|
+
this.reconnectDelay = options.reconnectDelay ?? 5000;
|
|
21
|
+
this.maxReconnectAttempts = options.maxReconnectAttempts ?? 5;
|
|
22
|
+
this.onStatusChange = options.onStatusChange;
|
|
23
|
+
this.onError = options.onError;
|
|
24
|
+
}
|
|
25
|
+
get status() {
|
|
26
|
+
return this._status;
|
|
27
|
+
}
|
|
28
|
+
connect() {
|
|
29
|
+
this.setStatus('connecting');
|
|
30
|
+
try {
|
|
31
|
+
const EventSourceCtor = globalThis.EventSource;
|
|
32
|
+
this.eventSource = new EventSourceCtor(this.url);
|
|
33
|
+
this.eventSource.onopen = () => {
|
|
34
|
+
this.reconnectAttempts = 0;
|
|
35
|
+
this.setStatus('connected');
|
|
36
|
+
};
|
|
37
|
+
this.eventSource.onerror = () => {
|
|
38
|
+
const error = `SSE connection error`;
|
|
39
|
+
this.onError?.(error);
|
|
40
|
+
if (this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
41
|
+
this.setStatus('reconnecting');
|
|
42
|
+
this.reconnectAttempts++;
|
|
43
|
+
this.scheduleReconnect();
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.setStatus('error');
|
|
47
|
+
this.cleanup();
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
// Dispatch events to registered handlers
|
|
51
|
+
this.eventSource.onmessage = (event) => {
|
|
52
|
+
this.dispatch('message', event.data);
|
|
53
|
+
};
|
|
54
|
+
// Listen for named events by iterating registered handlers
|
|
55
|
+
for (const eventName of this.handlers.keys()) {
|
|
56
|
+
if (eventName === 'message')
|
|
57
|
+
continue;
|
|
58
|
+
this.eventSource.addEventListener(eventName, (event) => {
|
|
59
|
+
try {
|
|
60
|
+
const data = JSON.parse(event.data);
|
|
61
|
+
this.dispatch(eventName, data);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
this.dispatch(eventName, event.data);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
const error = e instanceof Error ? e.message : 'Failed to create SSE connection';
|
|
71
|
+
this.onError?.(error);
|
|
72
|
+
this.setStatus('error');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
disconnect() {
|
|
76
|
+
this.cleanup();
|
|
77
|
+
this.setStatus('disconnected');
|
|
78
|
+
}
|
|
79
|
+
on(event, handler) {
|
|
80
|
+
if (!this.handlers.has(event)) {
|
|
81
|
+
this.handlers.set(event, new Set());
|
|
82
|
+
}
|
|
83
|
+
this.handlers.get(event).add(handler);
|
|
84
|
+
// Return unsubscribe function
|
|
85
|
+
return () => {
|
|
86
|
+
this.handlers.get(event)?.delete(handler);
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
dispatch(event, data) {
|
|
90
|
+
this.handlers.get(event)?.forEach((handler) => {
|
|
91
|
+
try {
|
|
92
|
+
handler(data);
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
console.error(`[SSEClient] Error in handler for "${event}":`, e);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
setStatus(status) {
|
|
100
|
+
this._status = status;
|
|
101
|
+
this.onStatusChange?.(status);
|
|
102
|
+
}
|
|
103
|
+
scheduleReconnect() {
|
|
104
|
+
if (this.reconnectTimer)
|
|
105
|
+
clearTimeout(this.reconnectTimer);
|
|
106
|
+
this.reconnectTimer = setTimeout(() => {
|
|
107
|
+
this.connect();
|
|
108
|
+
}, this.reconnectDelay);
|
|
109
|
+
}
|
|
110
|
+
cleanup() {
|
|
111
|
+
if (this.reconnectTimer) {
|
|
112
|
+
clearTimeout(this.reconnectTimer);
|
|
113
|
+
this.reconnectTimer = null;
|
|
114
|
+
}
|
|
115
|
+
if (this.eventSource) {
|
|
116
|
+
this.eventSource.close();
|
|
117
|
+
this.eventSource = null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export function createSSEClient(options) {
|
|
122
|
+
return new SSEClient(options);
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=sse-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-client.js","sourceRoot":"","sources":["../src/sse-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api-request Tool Descriptor
|
|
3
|
+
*
|
|
4
|
+
* Metadata for the api-request tool. Safe to import anywhere.
|
|
5
|
+
*/
|
|
6
|
+
declare const _default: {
|
|
7
|
+
kind: "tools/tool";
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
mcpDescription: string;
|
|
12
|
+
hardware: string[];
|
|
13
|
+
purpose: string[];
|
|
14
|
+
category: string;
|
|
15
|
+
subcategory: string;
|
|
16
|
+
tags: string[];
|
|
17
|
+
safety: string;
|
|
18
|
+
requiresApproval: boolean;
|
|
19
|
+
permissions: string[];
|
|
20
|
+
schemas: {
|
|
21
|
+
input: import("zod/v4").ZodObject<{
|
|
22
|
+
method: import("zod/v4").ZodEnum<{
|
|
23
|
+
GET: "GET";
|
|
24
|
+
POST: "POST";
|
|
25
|
+
PUT: "PUT";
|
|
26
|
+
DELETE: "DELETE";
|
|
27
|
+
PATCH: "PATCH";
|
|
28
|
+
}>;
|
|
29
|
+
path: import("zod/v4").ZodString;
|
|
30
|
+
query: import("zod/v4").ZodOptional<import("zod/v4").ZodRecord<import("zod/v4").ZodString, import("zod/v4").ZodAny>>;
|
|
31
|
+
body: import("zod/v4").ZodOptional<import("zod/v4").ZodAny>;
|
|
32
|
+
headers: import("zod/v4").ZodOptional<import("zod/v4").ZodRecord<import("zod/v4").ZodString, import("zod/v4").ZodString>>;
|
|
33
|
+
}, import("zod/v4/core").$strip>;
|
|
34
|
+
output: import("zod/v4").ZodObject<{
|
|
35
|
+
status: import("zod/v4").ZodEnum<{
|
|
36
|
+
error: "error";
|
|
37
|
+
success: "success";
|
|
38
|
+
}>;
|
|
39
|
+
response: import("zod/v4").ZodOptional<import("zod/v4").ZodUnknown>;
|
|
40
|
+
error: import("zod/v4").ZodOptional<import("zod/v4").ZodObject<{
|
|
41
|
+
message: import("zod/v4").ZodString;
|
|
42
|
+
code: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
|
|
43
|
+
}, import("zod/v4/core").$strip>>;
|
|
44
|
+
}, import("zod/v4/core").$strip>;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
export default _default;
|
|
48
|
+
//# sourceMappingURL=api-request.descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-request.descriptor.d.ts","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.descriptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKH,wBAkBG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api-request Tool Descriptor
|
|
3
|
+
*
|
|
4
|
+
* Metadata for the api-request tool. Safe to import anywhere.
|
|
5
|
+
*/
|
|
6
|
+
import { createRuntimeAsset } from '@vibesdotdev/runtime/factory';
|
|
7
|
+
import { apiRequestInputSchema, apiRequestOutputSchema } from "./schemas/index.js";
|
|
8
|
+
export default createRuntimeAsset({
|
|
9
|
+
kind: 'tools/tool',
|
|
10
|
+
id: 'api-request',
|
|
11
|
+
name: 'API Request',
|
|
12
|
+
description: 'Make an authenticated API request to any Vibes endpoint.',
|
|
13
|
+
mcpDescription: 'Make authenticated API request to Vibes endpoints. Ex: {method:"GET",path:"/api/health"}.',
|
|
14
|
+
hardware: ['consumer'],
|
|
15
|
+
purpose: ['direct', 'worker', 'mcp', 'agent'],
|
|
16
|
+
category: 'execution',
|
|
17
|
+
subcategory: 'api-request',
|
|
18
|
+
tags: ['api', 'network'],
|
|
19
|
+
safety: 'write',
|
|
20
|
+
requiresApproval: true,
|
|
21
|
+
permissions: ['canAccessNetwork'],
|
|
22
|
+
schemas: {
|
|
23
|
+
input: apiRequestInputSchema,
|
|
24
|
+
output: apiRequestOutputSchema
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=api-request.descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-request.descriptor.js","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.descriptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,eAAe,kBAAkB,CAAC;IACjC,IAAI,EAAE,YAAY;IAClB,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,0DAA0D;IACvE,cAAc,EAAE,2FAA2F;IAC3G,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC;IAC7C,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;IACxB,MAAM,EAAE,OAAO;IACf,gBAAgB,EAAE,IAAI;IACtB,WAAW,EAAE,CAAC,kBAAkB,CAAC;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,qBAAqB;QAC5B,MAAM,EAAE,sBAAsB;KAC9B;CACD,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api-request Tool Implementation (Consumer)
|
|
3
|
+
*
|
|
4
|
+
* Consumer-scoped implementation for making authenticated API requests.
|
|
5
|
+
* Resolves the `api/client` runtime kind and delegates to its `.request()`.
|
|
6
|
+
*/
|
|
7
|
+
import type { VibesRuntime, ToolCallContext } from '@vibesdotdev/runtime';
|
|
8
|
+
import type { ApiRequestInput, ApiRequestOutput } from './schemas/index.ts';
|
|
9
|
+
declare const _default: {
|
|
10
|
+
execute(input: ApiRequestInput, runtime: VibesRuntime, _ctx: ToolCallContext): Promise<ApiRequestOutput>;
|
|
11
|
+
};
|
|
12
|
+
export default _default;
|
|
13
|
+
//# sourceMappingURL=api-request.impl.consumer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-request.impl.consumer.d.ts","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.impl.consumer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;;mBAqBnE,eAAe,WACb,YAAY,QACf,eAAe,GACnB,OAAO,CAAC,gBAAgB,CAAC;;AAL7B,wBAqCE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api-request Tool Implementation (Consumer)
|
|
3
|
+
*
|
|
4
|
+
* Consumer-scoped implementation for making authenticated API requests.
|
|
5
|
+
* Resolves the `api/client` runtime kind and delegates to its `.request()`.
|
|
6
|
+
*/
|
|
7
|
+
async function resolveApiClient(runtime) {
|
|
8
|
+
try {
|
|
9
|
+
const apiClient = (await runtime.query('api/client').resolve());
|
|
10
|
+
if (apiClient) {
|
|
11
|
+
return apiClient;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// Query failed, fall through
|
|
16
|
+
}
|
|
17
|
+
throw new Error('API client not available in runtime context. Ensure api/client kind is registered.');
|
|
18
|
+
}
|
|
19
|
+
export default {
|
|
20
|
+
async execute(input, runtime, _ctx) {
|
|
21
|
+
const method = input.method;
|
|
22
|
+
const path = input.path;
|
|
23
|
+
const query = input.query ?? {};
|
|
24
|
+
const body = input.body ?? undefined;
|
|
25
|
+
const headers = input.headers ?? {};
|
|
26
|
+
try {
|
|
27
|
+
const apiClient = await resolveApiClient(runtime);
|
|
28
|
+
const response = await apiClient.request(path, {
|
|
29
|
+
method,
|
|
30
|
+
query,
|
|
31
|
+
body,
|
|
32
|
+
headers
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
status: 'success',
|
|
36
|
+
response
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
41
|
+
return {
|
|
42
|
+
status: 'error',
|
|
43
|
+
error: {
|
|
44
|
+
message,
|
|
45
|
+
code: 'API_REQUEST_FAILED'
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=api-request.impl.consumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-request.impl.consumer.js","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.impl.consumer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,KAAK,UAAU,gBAAgB,CAAC,OAAqB;IACpD,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAElD,CAAC;QACb,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,6BAA6B;IAC9B,CAAC;IAED,MAAM,IAAI,KAAK,CACd,oFAAoF,CACpF,CAAC;AACH,CAAC;AAED,eAAe;IACd,KAAK,CAAC,OAAO,CACZ,KAAsB,EACtB,OAAqB,EACrB,IAAqB;QAErB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QAEpC,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAElD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;gBAC9C,MAAM;gBACN,KAAK;gBACL,IAAI;gBACJ,OAAO;aACP,CAAC,CAAC;YAEH,OAAO;gBACN,MAAM,EAAE,SAAS;gBACjB,QAAQ;aACR,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACN,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE;oBACN,OAAO;oBACP,IAAI,EAAE,oBAAoB;iBAC1B;aACD,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as apiRequestToolDescriptor } from './api-request.descriptor.ts';
|
|
2
|
+
export { default as apiRequestToolImplementation } from './api-request.impl.consumer.ts';
|
|
3
|
+
export { apiRequestInputSchema, apiRequestOutputSchema } from './schemas/index.ts';
|
|
4
|
+
export type { ApiRequestInput, ApiRequestOutput } from './schemas/index.ts';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/api-request/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACnF,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as apiRequestToolDescriptor } from "./api-request.descriptor.js";
|
|
2
|
+
export { default as apiRequestToolImplementation } from "./api-request.impl.consumer.js";
|
|
3
|
+
export { apiRequestInputSchema, apiRequestOutputSchema } from "./schemas/index.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/api-request/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Request Tool Schemas
|
|
3
|
+
*
|
|
4
|
+
* Input/output schemas for the api-request tool.
|
|
5
|
+
*/
|
|
6
|
+
import * as z from 'zod/v4';
|
|
7
|
+
export declare const apiRequestInputSchema: z.ZodObject<{
|
|
8
|
+
method: z.ZodEnum<{
|
|
9
|
+
GET: "GET";
|
|
10
|
+
DELETE: "DELETE";
|
|
11
|
+
POST: "POST";
|
|
12
|
+
PUT: "PUT";
|
|
13
|
+
PATCH: "PATCH";
|
|
14
|
+
}>;
|
|
15
|
+
path: z.ZodString;
|
|
16
|
+
query: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
17
|
+
body: z.ZodOptional<z.ZodAny>;
|
|
18
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
export declare const apiRequestOutputSchema: z.ZodObject<{
|
|
21
|
+
status: z.ZodEnum<{
|
|
22
|
+
success: "success";
|
|
23
|
+
error: "error";
|
|
24
|
+
}>;
|
|
25
|
+
response: z.ZodOptional<z.ZodUnknown>;
|
|
26
|
+
error: z.ZodOptional<z.ZodObject<{
|
|
27
|
+
message: z.ZodString;
|
|
28
|
+
code: z.ZodOptional<z.ZodString>;
|
|
29
|
+
}, z.core.$strip>>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
export type ApiRequestInput = z.infer<typeof apiRequestInputSchema>;
|
|
32
|
+
export type ApiRequestOutput = z.infer<typeof apiRequestOutputSchema>;
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/api-request/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,eAAO,MAAM,qBAAqB;;;;;;;;;;;;iBAMhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;iBASjC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Request Tool Schemas
|
|
3
|
+
*
|
|
4
|
+
* Input/output schemas for the api-request tool.
|
|
5
|
+
*/
|
|
6
|
+
import * as z from 'zod/v4';
|
|
7
|
+
export const apiRequestInputSchema = z.object({
|
|
8
|
+
method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']),
|
|
9
|
+
path: z.string().min(1),
|
|
10
|
+
query: z.record(z.string(), z.any()).optional(),
|
|
11
|
+
body: z.any().optional(),
|
|
12
|
+
headers: z.record(z.string(), z.string()).optional()
|
|
13
|
+
});
|
|
14
|
+
export const apiRequestOutputSchema = z.object({
|
|
15
|
+
status: z.enum(['success', 'error']),
|
|
16
|
+
response: z.unknown().optional(),
|
|
17
|
+
error: z
|
|
18
|
+
.object({
|
|
19
|
+
message: z.string(),
|
|
20
|
+
code: z.string().optional()
|
|
21
|
+
})
|
|
22
|
+
.optional()
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/api-request/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC/C,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC;SACN,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC3B,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAC"}
|