@vibesdotdev/client 0.1.0 → 1.0.0-rc.2
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/LICENSE +21 -0
- package/README.md +31 -0
- package/dist/api-client-plugin.d.ts +4 -0
- package/dist/api-client-plugin.d.ts.map +1 -0
- package/dist/api-client-plugin.js +20 -0
- package/dist/api-client-plugin.js.map +1 -0
- package/dist/api-client.impl.d.ts +23 -0
- package/dist/api-client.impl.d.ts.map +1 -0
- package/dist/api-client.impl.js +47 -0
- package/dist/api-client.impl.js.map +1 -0
- package/dist/client.consumer.plugin.d.ts +3 -0
- package/dist/client.consumer.plugin.d.ts.map +1 -0
- package/dist/client.consumer.plugin.js +10 -0
- package/dist/client.consumer.plugin.js.map +1 -0
- package/dist/cloud.plugin.d.ts +3 -0
- package/dist/cloud.plugin.d.ts.map +1 -0
- package/dist/cloud.plugin.js +10 -0
- package/dist/cloud.plugin.js.map +1 -0
- package/dist/config/client.config.descriptor.d.ts +4 -0
- package/dist/config/client.config.descriptor.d.ts.map +1 -0
- package/dist/config/client.config.descriptor.js +32 -0
- package/dist/config/client.config.descriptor.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/settings.d.ts +9 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +25 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/docs/client.api-request.docs.descriptor.d.ts +4 -0
- package/dist/docs/client.api-request.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/client.api-request.docs.descriptor.js +71 -0
- package/dist/docs/client.api-request.docs.descriptor.js.map +1 -0
- package/dist/events/auth-rejected.event.d.ts +35 -0
- package/dist/events/auth-rejected.event.d.ts.map +1 -0
- package/dist/events/auth-rejected.event.js +36 -0
- package/dist/events/auth-rejected.event.js.map +1 -0
- package/dist/factory.d.ts +5 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +16 -17
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/kind-augment.d.ts +11 -0
- package/dist/kind-augment.d.ts.map +1 -0
- package/dist/kind-augment.js +2 -0
- package/dist/kind-augment.js.map +1 -0
- package/dist/lib/client/api-diagnostics.d.ts +79 -0
- package/dist/lib/client/api-diagnostics.d.ts.map +1 -0
- package/dist/lib/client/api-diagnostics.js +111 -0
- package/dist/lib/client/api-diagnostics.js.map +1 -0
- package/dist/lib/client/configured.d.ts +78 -0
- package/dist/lib/client/configured.d.ts.map +1 -0
- package/dist/lib/client/configured.js +261 -0
- package/dist/lib/client/configured.js.map +1 -0
- package/dist/lib/client/internal/auth-headers.d.ts +11 -0
- package/dist/lib/client/internal/auth-headers.d.ts.map +1 -0
- package/dist/lib/client/internal/auth-headers.js +35 -0
- package/dist/lib/client/internal/auth-headers.js.map +1 -0
- package/dist/lib/client/internal/base-client.d.ts +5 -2
- package/dist/lib/client/internal/base-client.d.ts.map +1 -1
- package/dist/lib/client/internal/base-client.js +42 -22
- package/dist/lib/client/internal/base-client.js.map +1 -1
- package/dist/lib/client/internal/base-helpers.d.ts.map +1 -1
- package/dist/lib/client/internal/base-helpers.js +20 -20
- package/dist/lib/client/internal/base-helpers.js.map +1 -1
- package/dist/lib/client/internal/base-types.d.ts +10 -5
- package/dist/lib/client/internal/base-types.d.ts.map +1 -1
- package/dist/lib/client/internal/base-types.js +5 -3
- package/dist/lib/client/internal/base-types.js.map +1 -1
- package/dist/lib/client/internal/client-values.d.ts +43 -0
- package/dist/lib/client/internal/client-values.d.ts.map +1 -0
- package/dist/lib/client/internal/client-values.js +76 -0
- package/dist/lib/client/internal/client-values.js.map +1 -0
- package/dist/lib/client/internal/endpoint.d.ts +6 -5
- package/dist/lib/client/internal/endpoint.d.ts.map +1 -1
- package/dist/lib/client/internal/endpoint.js +3 -0
- package/dist/lib/client/internal/endpoint.js.map +1 -1
- package/dist/lib/client/internal/generator.d.ts +98 -9
- package/dist/lib/client/internal/generator.d.ts.map +1 -1
- package/dist/lib/client/internal/generator.js +92 -140
- package/dist/lib/client/internal/generator.js.map +1 -1
- package/dist/lib/client/internal/request-builder.d.ts +5 -2
- package/dist/lib/client/internal/request-builder.d.ts.map +1 -1
- package/dist/lib/client/internal/request-builder.js +105 -65
- package/dist/lib/client/internal/request-builder.js.map +1 -1
- package/dist/lib/client/internal/sse-stream.d.ts +9 -5
- package/dist/lib/client/internal/sse-stream.d.ts.map +1 -1
- package/dist/lib/client/internal/sse-stream.js +96 -94
- package/dist/lib/client/internal/sse-stream.js.map +1 -1
- package/dist/lib/client/internal/timeout-signal.d.ts +8 -0
- package/dist/lib/client/internal/timeout-signal.d.ts.map +1 -0
- package/dist/lib/client/internal/timeout-signal.js +17 -0
- package/dist/lib/client/internal/timeout-signal.js.map +1 -0
- package/dist/lib/client/internal/transport/http2-fetch.d.ts +8 -0
- package/dist/lib/client/internal/transport/http2-fetch.d.ts.map +1 -0
- package/dist/lib/client/internal/transport/http2-fetch.js +17 -0
- package/dist/lib/client/internal/transport/http2-fetch.js.map +1 -0
- package/dist/lib/client/internal/vibes-client.d.ts +17 -8
- package/dist/lib/client/internal/vibes-client.d.ts.map +1 -1
- package/dist/lib/client/internal/vibes-client.js +127 -67
- package/dist/lib/client/internal/vibes-client.js.map +1 -1
- package/dist/lib/client/internal/wrap-fetch.d.ts +3 -2
- package/dist/lib/client/internal/wrap-fetch.d.ts.map +1 -1
- package/dist/lib/client/internal/wrap-fetch.js +14 -33
- package/dist/lib/client/internal/wrap-fetch.js.map +1 -1
- package/dist/lib/client/runtime-fetch.d.ts +14 -0
- package/dist/lib/client/runtime-fetch.d.ts.map +1 -0
- package/dist/lib/client/runtime-fetch.js +25 -0
- package/dist/lib/client/runtime-fetch.js.map +1 -0
- package/dist/lib/client/types.d.ts +18 -9
- package/dist/lib/client/types.d.ts.map +1 -1
- package/dist/lib/client/types.js +22 -3
- package/dist/lib/client/types.js.map +1 -1
- package/dist/plugin.d.ts +2 -18
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +7 -74
- package/dist/plugin.js.map +1 -1
- package/dist/runtime-client.d.ts +10 -0
- package/dist/runtime-client.d.ts.map +1 -0
- package/dist/runtime-client.js +14 -0
- package/dist/runtime-client.js.map +1 -0
- package/dist/schemas/auth-rejected.d.ts +12 -0
- package/dist/schemas/auth-rejected.d.ts.map +1 -0
- package/dist/schemas/auth-rejected.js +11 -0
- package/dist/schemas/auth-rejected.js.map +1 -0
- package/dist/schemas/sdk-languages.d.ts +47 -0
- package/dist/schemas/sdk-languages.d.ts.map +1 -0
- package/dist/schemas/sdk-languages.js +75 -0
- package/dist/schemas/sdk-languages.js.map +1 -0
- package/dist/schemas/settings.d.ts +14 -0
- package/dist/schemas/settings.d.ts.map +1 -0
- package/dist/schemas/settings.js +10 -0
- package/dist/schemas/settings.js.map +1 -0
- package/dist/schemas/validated-request.d.ts +19 -0
- package/dist/schemas/validated-request.d.ts.map +1 -0
- package/dist/schemas/validated-request.js +2 -0
- package/dist/schemas/validated-request.js.map +1 -0
- package/dist/schemas.d.ts +23 -8
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +8 -2
- package/dist/schemas.js.map +1 -1
- package/dist/sse-client.d.ts +17 -15
- package/dist/sse-client.d.ts.map +1 -1
- package/dist/sse-client.js +111 -91
- package/dist/sse-client.js.map +1 -1
- package/dist/svelte/client-svelte.plugin.d.ts +3 -0
- package/dist/svelte/client-svelte.plugin.d.ts.map +1 -0
- package/dist/svelte/client-svelte.plugin.js +35 -0
- package/dist/svelte/index.d.ts +3 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +2 -0
- package/dist/svelte/styles.css +8 -0
- package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte +53 -0
- package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte.d.ts +5 -0
- package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte.d.ts.map +1 -0
- package/dist/svelte/tool-widgets/index.d.ts +2 -0
- package/dist/svelte/tool-widgets/index.d.ts.map +1 -0
- package/dist/svelte/tool-widgets/index.js +1 -0
- package/dist/tools/api-request/api-request.contract.d.ts +19 -0
- package/dist/tools/api-request/api-request.contract.d.ts.map +1 -0
- package/dist/tools/api-request/api-request.contract.js +110 -0
- package/dist/tools/api-request/api-request.contract.js.map +1 -0
- package/dist/tools/api-request/api-request.descriptor.d.ts +11 -4
- package/dist/tools/api-request/api-request.descriptor.d.ts.map +1 -1
- package/dist/tools/api-request/api-request.descriptor.js +8 -5
- package/dist/tools/api-request/api-request.descriptor.js.map +1 -1
- package/dist/tools/api-request/api-request.impl.cloud.d.ts +15 -0
- package/dist/tools/api-request/api-request.impl.cloud.d.ts.map +1 -0
- package/dist/tools/api-request/api-request.impl.cloud.js +75 -0
- package/dist/tools/api-request/api-request.impl.cloud.js.map +1 -0
- package/dist/tools/api-request/api-request.impl.consumer.d.ts +5 -3
- package/dist/tools/api-request/api-request.impl.consumer.d.ts.map +1 -1
- package/dist/tools/api-request/api-request.impl.consumer.js +27 -33
- package/dist/tools/api-request/api-request.impl.consumer.js.map +1 -1
- package/dist/tools/api-request/api-request.view.d.ts +29 -0
- package/dist/tools/api-request/api-request.view.d.ts.map +1 -0
- package/dist/tools/api-request/api-request.view.js +62 -0
- package/dist/tools/api-request/api-request.view.js.map +1 -0
- package/dist/tools/api-request/schemas/index.d.ts +12 -5
- package/dist/tools/api-request/schemas/index.d.ts.map +1 -1
- package/dist/tools/api-request/schemas/index.js +24 -6
- package/dist/tools/api-request/schemas/index.js.map +1 -1
- package/dist/tui/client-tui.plugin.d.ts +3 -0
- package/dist/tui/client-tui.plugin.d.ts.map +1 -0
- package/dist/tui/client-tui.plugin.js +32 -0
- package/dist/tui/client-tui.plugin.js.map +1 -0
- package/dist/tui/index.d.ts +2 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +2 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.d.ts +17 -0
- package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.d.ts.map +1 -0
- package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.js +28 -0
- package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.js.map +1 -0
- package/dist/validated-request.d.ts +27 -0
- package/dist/validated-request.d.ts.map +1 -0
- package/dist/validated-request.js +119 -0
- package/dist/validated-request.js.map +1 -0
- package/package.json +190 -45
- package/SPEC.md +0 -107
- package/dist/lib/client/internal/node/http2-fetch.node.d.ts +0 -2
- package/dist/lib/client/internal/node/http2-fetch.node.d.ts.map +0 -1
- package/dist/lib/client/internal/node/http2-fetch.node.js +0 -131
- package/dist/lib/client/internal/node/http2-fetch.node.js.map +0 -1
- package/dist/lib/client/node.d.ts +0 -5
- package/dist/lib/client/node.d.ts.map +0 -1
- package/dist/lib/client/node.js +0 -33
- package/dist/lib/client/node.js.map +0 -1
- package/dist/tools/api-request/index.d.ts +0 -5
- package/dist/tools/api-request/index.d.ts.map +0 -1
- package/dist/tools/api-request/index.js +0 -4
- package/dist/tools/api-request/index.js.map +0 -1
- package/src/factory.ts +0 -114
- package/src/index.ts +0 -15
- package/src/lib/client/core.ts +0 -13
- package/src/lib/client/internal/base-client.ts +0 -107
- package/src/lib/client/internal/base-helpers.ts +0 -74
- package/src/lib/client/internal/base-types.ts +0 -42
- package/src/lib/client/internal/endpoint.ts +0 -51
- package/src/lib/client/internal/generator.ts +0 -181
- package/src/lib/client/internal/index.ts +0 -4
- package/src/lib/client/internal/node/http2-fetch.node.ts +0 -138
- package/src/lib/client/internal/request-builder.ts +0 -147
- package/src/lib/client/internal/sse-stream.ts +0 -130
- package/src/lib/client/internal/vibes-client.ts +0 -167
- package/src/lib/client/internal/wrap-fetch.ts +0 -59
- package/src/lib/client/node.ts +0 -36
- package/src/lib/client/types.ts +0 -156
- package/src/plugin.ts +0 -104
- package/src/schemas.ts +0 -91
- package/src/sse-client.ts +0 -155
- package/src/tools/api-request/api-request.descriptor.ts +0 -28
- package/src/tools/api-request/api-request.impl.consumer.ts +0 -66
- package/src/tools/api-request/index.ts +0 -4
- package/src/tools/api-request/schemas/index.ts +0 -29
package/dist/schemas.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
import { HttpOriginSchema } from "./lib/client/internal/client-values.js";
|
|
2
|
+
export { PathParamsSchema, QuerySchema, RequestBodySchema, readClientRequestBody } from "./lib/client/internal/client-values.js";
|
|
1
3
|
import * as z from 'zod/v4';
|
|
2
|
-
import { RuntimeDescriptorSchema } from '@vibesdotdev/
|
|
4
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/kernel/schemas/descriptor';
|
|
5
|
+
export { publicSdkLanguageSchema, publicSdkStatusSchema, publicSdkDescriptorSchema, PUBLIC_SDK_LANGUAGES, getPublicSdkDescriptor, listImplementedSdkLanguages } from "./schemas/sdk-languages.js";
|
|
3
6
|
export const ApiClientDescriptorSchema = RuntimeDescriptorSchema.extend({
|
|
4
7
|
kind: z.literal('api/client'),
|
|
5
|
-
baseUrl: z.string().optional(),
|
|
8
|
+
baseUrl: z.union([HttpOriginSchema, z.string().refine(path => path.startsWith('/') && !path.startsWith('//') && !path.includes('..') && [...path].every(character => character.charCodeAt(0) >= 32 && character.charCodeAt(0) !== 127))]).optional(),
|
|
9
|
+
// Optional overlays. Defaults live on the `client` config/manifest
|
|
10
|
+
// (`timeoutMs` 30000, `debug` false). Filling them here would replace a
|
|
11
|
+
// host `config.client` overlay after `safeParse` on register.
|
|
6
12
|
timeout: z.number().int().positive().optional(),
|
|
7
13
|
debug: z.boolean().optional()
|
|
8
14
|
});
|
package/dist/schemas.js.map
CHANGED
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,wCAAwC,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAEjI,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EACN,uBAAuB,EAEvB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACN,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,MAAM,4BAA4B,CAAC;AAqBpC,MAAM,CAAC,MAAM,yBAAyB,GAAG,uBAAuB,CAAC,MAAM,CAAC;IACvE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpP,mEAAmE;IACnE,wEAAwE;IACxE,8DAA8D;IAC9D,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"}
|
package/dist/sse-client.d.ts
CHANGED
|
@@ -1,37 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Provides a typed interface for connecting to SSE endpoints,
|
|
5
|
-
* handling reconnection, and dispatching events.
|
|
6
|
-
*/
|
|
1
|
+
import { CapabilityError, type RuntimeRef } from '@vibesdotdev/kernel';
|
|
2
|
+
import { type JsonValue } from './lib/client/internal/client-values.ts';
|
|
7
3
|
export type SSEConnectionStatus = 'connecting' | 'connected' | 'reconnecting' | 'disconnected' | 'error';
|
|
8
4
|
export interface SSEClientOptions {
|
|
5
|
+
runtime: RuntimeRef;
|
|
9
6
|
url: string;
|
|
10
7
|
reconnectDelay?: number;
|
|
11
8
|
maxReconnectAttempts?: number;
|
|
12
9
|
onStatusChange?: (status: SSEConnectionStatus) => void;
|
|
13
|
-
onError?: (error: string) => void;
|
|
10
|
+
onError?: (error: string, failure: CapabilityError) => void;
|
|
14
11
|
}
|
|
15
|
-
type EventHandler = (data:
|
|
12
|
+
type EventHandler = (data: JsonValue) => void;
|
|
13
|
+
type FailureHandler = (failure: CapabilityError) => void;
|
|
16
14
|
export declare class SSEClient {
|
|
17
|
-
private
|
|
18
|
-
private reconnectDelay;
|
|
19
|
-
private maxReconnectAttempts;
|
|
20
|
-
private onStatusChange?;
|
|
21
|
-
private onError?;
|
|
15
|
+
private readonly options;
|
|
22
16
|
private eventSource;
|
|
23
17
|
private handlers;
|
|
18
|
+
private listeners;
|
|
24
19
|
private reconnectAttempts;
|
|
25
|
-
private
|
|
20
|
+
private cancelReconnect;
|
|
26
21
|
private _status;
|
|
22
|
+
private _lastFailure;
|
|
23
|
+
private readonly reconnectDelay;
|
|
24
|
+
private readonly maxReconnectAttempts;
|
|
27
25
|
constructor(options: SSEClientOptions);
|
|
28
26
|
get status(): SSEConnectionStatus;
|
|
27
|
+
/** The latest EventSource failure remains observable after reconnect or disconnect. */
|
|
28
|
+
get lastFailure(): CapabilityError | null;
|
|
29
29
|
connect(): void;
|
|
30
30
|
disconnect(): void;
|
|
31
|
+
on(event: 'error', handler: FailureHandler): () => void;
|
|
31
32
|
on(event: string, handler: EventHandler): () => void;
|
|
33
|
+
private listen;
|
|
34
|
+
private decode;
|
|
32
35
|
private dispatch;
|
|
33
36
|
private setStatus;
|
|
34
|
-
private scheduleReconnect;
|
|
35
37
|
private cleanup;
|
|
36
38
|
}
|
|
37
39
|
export declare function createSSEClient(options: SSEClientOptions): SSEClient;
|
package/dist/sse-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse-client.d.ts","sourceRoot":"","sources":["../src/sse-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sse-client.d.ts","sourceRoot":"","sources":["../src/sse-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAwD,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7H,OAAO,EAAoD,KAAK,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAC1H,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,cAAc,GAAG,OAAO,CAAC;AACzG,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACzF,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;CACpH;AACD,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;AAC9C,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;AACzD,qBAAa,SAAS;IAUT,OAAO,CAAC,QAAQ,CAAC,OAAO;IATpC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,QAAQ,CAAyD;IACzE,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,YAAY,CAAgC;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;gBACjB,OAAO,EAAE,gBAAgB;IAMtD,IAAI,MAAM,IAAI,mBAAmB,CAAyB;IAC1D,uFAAuF;IACvF,IAAI,WAAW,IAAI,eAAe,GAAG,IAAI,CAA8B;IACvE,OAAO,IAAI,IAAI;IA4Cf,UAAU,IAAI,IAAI;IAClB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,IAAI;IACvD,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAOpD,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;CAIf;AACD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAAmC"}
|
package/dist/sse-client.js
CHANGED
|
@@ -1,124 +1,144 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
|
|
6
|
-
*/
|
|
1
|
+
/** EventSource lifecycle and named event dispatch on the handed runtime. */
|
|
2
|
+
import { getLogger } from '@vibesdotdev/logging';
|
|
3
|
+
import { CapabilityError, CaughtFailureSchema, valueFreeFailure } from '@vibesdotdev/kernel';
|
|
4
|
+
import * as z from 'zod/v4';
|
|
5
|
+
import { readClientValue, HttpOriginSchema, decodeSSEData } from "./lib/client/internal/client-values.js";
|
|
7
6
|
export class SSEClient {
|
|
8
|
-
|
|
9
|
-
reconnectDelay;
|
|
10
|
-
maxReconnectAttempts;
|
|
11
|
-
onStatusChange;
|
|
12
|
-
onError;
|
|
7
|
+
options;
|
|
13
8
|
eventSource = null;
|
|
14
9
|
handlers = new Map();
|
|
10
|
+
listeners = new Set();
|
|
15
11
|
reconnectAttempts = 0;
|
|
16
|
-
|
|
12
|
+
cancelReconnect = null;
|
|
17
13
|
_status = 'disconnected';
|
|
14
|
+
_lastFailure = null;
|
|
15
|
+
reconnectDelay;
|
|
16
|
+
maxReconnectAttempts;
|
|
18
17
|
constructor(options) {
|
|
19
|
-
this.
|
|
20
|
-
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
}
|
|
25
|
-
get status() {
|
|
26
|
-
return this._status;
|
|
18
|
+
this.options = options;
|
|
19
|
+
readClientValue(HttpOriginSchema, options.url, 'client-origin-invalid');
|
|
20
|
+
this.reconnectDelay = readClientValue(z.number().int().nonnegative(), options.reconnectDelay ?? 5000, 'sse-reconnect-delay-invalid');
|
|
21
|
+
this.maxReconnectAttempts = readClientValue(z.number().int().nonnegative(), options.maxReconnectAttempts ?? 5, 'sse-reconnect-attempts-invalid');
|
|
22
|
+
options.runtime.lifecycle.signal.addEventListener('abort', () => this.disconnect(), { once: true });
|
|
27
23
|
}
|
|
24
|
+
get status() { return this._status; }
|
|
25
|
+
/** The latest EventSource failure remains observable after reconnect or disconnect. */
|
|
26
|
+
get lastFailure() { return this._lastFailure; }
|
|
28
27
|
connect() {
|
|
28
|
+
if (this.options.runtime.lifecycle.phase !== 'live')
|
|
29
|
+
throw new CapabilityError('The SSE runtime has ended.', 'UNAVAILABLE', { reason: 'client-runtime-disposed' });
|
|
30
|
+
this.cleanup();
|
|
29
31
|
this.setStatus('connecting');
|
|
32
|
+
const logger = getLogger('client.sse', this.options.runtime);
|
|
30
33
|
try {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
// The ambient `EventSource` binding, not `globalThis.EventSource`: Cloudflare
|
|
35
|
+
// workers types declare it as a global class, which is not a `globalThis` member.
|
|
36
|
+
if (!('EventSource' in globalThis))
|
|
37
|
+
throw new CapabilityError('EventSource is unavailable.', 'UNAVAILABLE', { reason: 'event-source-unavailable' });
|
|
38
|
+
// Hosts declare different constructor arities (DOM/workers take a URL, a
|
|
39
|
+
// lib-less Bun program none); the URL-taking shape is the one every host runs.
|
|
40
|
+
const EventSourceConstructor = EventSource;
|
|
41
|
+
const source = new EventSourceConstructor(this.options.url);
|
|
42
|
+
this.eventSource = source;
|
|
43
|
+
source.onopen = () => { if (this.eventSource !== source)
|
|
44
|
+
return; this.reconnectAttempts = 0; this.setStatus('connected'); };
|
|
45
|
+
source.onerror = (error) => {
|
|
46
|
+
if (this.eventSource !== source)
|
|
47
|
+
return;
|
|
48
|
+
const terminal = this.reconnectAttempts >= this.maxReconnectAttempts;
|
|
49
|
+
const failure = new CapabilityError(terminal ? 'SSE reconnect attempts exhausted.' : 'SSE connection error', 'UNAVAILABLE', {
|
|
50
|
+
reason: terminal ? 'sse-retries-exhausted' : 'sse-connection-failed', retryable: !terminal,
|
|
51
|
+
cause: valueFreeFailure(CaughtFailureSchema.parse(error))
|
|
52
|
+
});
|
|
53
|
+
this._lastFailure = failure;
|
|
54
|
+
this.dispatch('error', failure);
|
|
55
|
+
logger.error('SSE connection error', { error: valueFreeFailure(failure) });
|
|
56
|
+
if (this.options.onError)
|
|
57
|
+
this.options.onError(failure.message, failure);
|
|
58
|
+
this.cleanup();
|
|
40
59
|
if (this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
41
60
|
this.setStatus('reconnecting');
|
|
42
61
|
this.reconnectAttempts++;
|
|
43
|
-
this.
|
|
62
|
+
this.cancelReconnect = this.options.runtime.lifecycle.timeout(() => { this.cancelReconnect = null; this.connect(); }, this.reconnectDelay);
|
|
44
63
|
}
|
|
45
|
-
else
|
|
64
|
+
else
|
|
46
65
|
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
66
|
};
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
}
|
|
67
|
+
source.onmessage = (event) => { if (this.eventSource === source)
|
|
68
|
+
this.dispatch('message', this.decode(event.data)); };
|
|
69
|
+
for (const event of this.handlers.keys())
|
|
70
|
+
this.listen(event);
|
|
68
71
|
}
|
|
69
|
-
catch (
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
catch (error) {
|
|
73
|
+
logger.error('SSE connection failed', { error: valueFreeFailure(CaughtFailureSchema.parse(error)) });
|
|
74
|
+
const failure = new CapabilityError('The SSE connection could not be created.', 'UNAVAILABLE', { reason: 'sse-connection-unavailable', cause: valueFreeFailure(CaughtFailureSchema.parse(error)) });
|
|
75
|
+
this._lastFailure = failure;
|
|
76
|
+
this.dispatch('error', failure);
|
|
77
|
+
this.options.onError?.('Failed to create SSE connection', failure);
|
|
78
|
+
this.cleanup();
|
|
72
79
|
this.setStatus('error');
|
|
80
|
+
throw failure;
|
|
73
81
|
}
|
|
74
82
|
}
|
|
75
|
-
disconnect() {
|
|
76
|
-
this.cleanup();
|
|
77
|
-
this.setStatus('disconnected');
|
|
78
|
-
}
|
|
83
|
+
disconnect() { this.cleanup(); this.reconnectAttempts = 0; this.setStatus('disconnected'); }
|
|
79
84
|
on(event, handler) {
|
|
80
|
-
|
|
81
|
-
|
|
85
|
+
let handlers = this.handlers.get(event);
|
|
86
|
+
if (!handlers) {
|
|
87
|
+
handlers = new Set();
|
|
88
|
+
this.handlers.set(event, handlers);
|
|
82
89
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return () => {
|
|
86
|
-
|
|
87
|
-
|
|
90
|
+
handlers.add(handler);
|
|
91
|
+
this.listen(event);
|
|
92
|
+
return () => { this.handlers.get(event)?.delete(handler); };
|
|
93
|
+
}
|
|
94
|
+
listen(event) {
|
|
95
|
+
const source = this.eventSource;
|
|
96
|
+
if (!source || event === 'message' || event === 'error' || this.listeners.has(event))
|
|
97
|
+
return;
|
|
98
|
+
this.listeners.add(event);
|
|
99
|
+
source.addEventListener(event, message => {
|
|
100
|
+
if (this.eventSource !== source)
|
|
101
|
+
return;
|
|
102
|
+
if (!(message instanceof MessageEvent)) {
|
|
103
|
+
const failure = new CapabilityError('Invalid SSE event', 'INVALID_INPUT', { reason: 'sse-event-invalid' });
|
|
104
|
+
this._lastFailure = failure;
|
|
105
|
+
this.dispatch('error', failure);
|
|
106
|
+
this.options.onError?.(failure.message, failure);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this.dispatch(event, this.decode(message.data));
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
decode(data) {
|
|
113
|
+
const text = z.string().safeParse(data);
|
|
114
|
+
return text.success ? decodeSSEData(text.data) : data;
|
|
88
115
|
}
|
|
89
116
|
dispatch(event, data) {
|
|
90
|
-
this.
|
|
117
|
+
const logger = getLogger('client.sse', this.options.runtime);
|
|
118
|
+
this.handlers.get(event)?.forEach(handler => {
|
|
91
119
|
try {
|
|
92
|
-
|
|
120
|
+
if (data instanceof CapabilityError) {
|
|
121
|
+
// SAFETY: Only the reserved error key receives CapabilityError; on('error') registers FailureHandler.
|
|
122
|
+
handler(data);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// SAFETY: Message and named data keys retain their JsonValue registration and payload contract.
|
|
126
|
+
handler(data);
|
|
127
|
+
}
|
|
93
128
|
}
|
|
94
|
-
catch (
|
|
95
|
-
|
|
129
|
+
catch (error) {
|
|
130
|
+
logger.error('SSE event handler failed', { error: valueFreeFailure(CaughtFailureSchema.parse(error)) });
|
|
96
131
|
}
|
|
97
132
|
});
|
|
98
133
|
}
|
|
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
|
-
}
|
|
134
|
+
setStatus(status) { this._status = status; this.options.onStatusChange?.(status); }
|
|
110
135
|
cleanup() {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
this.eventSource.close();
|
|
117
|
-
this.eventSource = null;
|
|
118
|
-
}
|
|
136
|
+
this.cancelReconnect?.();
|
|
137
|
+
this.cancelReconnect = null;
|
|
138
|
+
this.eventSource?.close();
|
|
139
|
+
this.eventSource = null;
|
|
140
|
+
this.listeners.clear();
|
|
119
141
|
}
|
|
120
142
|
}
|
|
121
|
-
export function createSSEClient(options) {
|
|
122
|
-
return new SSEClient(options);
|
|
123
|
-
}
|
|
143
|
+
export function createSSEClient(options) { return new SSEClient(options); }
|
|
124
144
|
//# sourceMappingURL=sse-client.js.map
|
package/dist/sse-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse-client.js","sourceRoot":"","sources":["../src/sse-client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sse-client.js","sourceRoot":"","sources":["../src/sse-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-svelte.plugin.d.ts","sourceRoot":"","sources":["../../src/svelte/client-svelte.plugin.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,kBAAkB,6CAiB7B,CAAC;AAEH,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createRuntimeImplementation, createRuntimePlugin, loader, settle } from '@vibesdotdev/kernel';
|
|
2
|
+
const loadApiRequestToolCard = () => import('./tool-widgets/ApiRequestToolCard.svelte');
|
|
3
|
+
const apiRequestWidget = {
|
|
4
|
+
id: 'api-request.svelte-widget',
|
|
5
|
+
kind: 'tools/ui',
|
|
6
|
+
name: 'API Request Svelte Widget',
|
|
7
|
+
description: 'Renders api-request method, URL, status, and a body excerpt in Kit ToolCard.',
|
|
8
|
+
surfaces: ['web'],
|
|
9
|
+
role: 'widget',
|
|
10
|
+
targetToolId: 'api-request',
|
|
11
|
+
tags: ['api', 'network'],
|
|
12
|
+
enabled: true
|
|
13
|
+
};
|
|
14
|
+
const kitToolWidgets = await settle(() => import('@vibesdotdev/kit/components/tool-widgets'));
|
|
15
|
+
const registerKitToolWidget = kitToolWidgets.ok ? kitToolWidgets.value.registerToolWidget : undefined;
|
|
16
|
+
registerKitToolWidget?.('api-request', loadApiRequestToolCard);
|
|
17
|
+
export const clientSveltePlugin = createRuntimePlugin({
|
|
18
|
+
id: '@vibesdotdev/client/svelte',
|
|
19
|
+
name: 'Client Svelte',
|
|
20
|
+
description: 'Client-owned Svelte tool-result contributions for api-request.',
|
|
21
|
+
dependencies: [],
|
|
22
|
+
descriptors: [apiRequestWidget],
|
|
23
|
+
loaders: [
|
|
24
|
+
loader(apiRequestWidget.id, { kind: 'tools/ui', scope: 'browser' }, async () => {
|
|
25
|
+
registerKitToolWidget?.('api-request', loadApiRequestToolCard);
|
|
26
|
+
const module = await loadApiRequestToolCard();
|
|
27
|
+
return createRuntimeImplementation({
|
|
28
|
+
kind: 'tools/ui',
|
|
29
|
+
id: apiRequestWidget.id,
|
|
30
|
+
implementation: { web: { component: module.default } }
|
|
31
|
+
});
|
|
32
|
+
})
|
|
33
|
+
]
|
|
34
|
+
});
|
|
35
|
+
export default clientSveltePlugin;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,0CAA0C,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Tailwind v4 source declaration for consumers — mirrors @vibesdotdev/kit's
|
|
3
|
+
* styles.css pattern. Apps that @import this file get this package's
|
|
4
|
+
* components scanned by their Tailwind build, so utility classes used only
|
|
5
|
+
* inside these components are emitted in the app's CSS bundle (Tailwind
|
|
6
|
+
* never scans node_modules). Paths resolve relative to this file.
|
|
7
|
+
*/
|
|
8
|
+
@source "./";
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Designed Kit card for `api-request`: method, app-scoped URL, status, and
|
|
4
|
+
* a truncated response-body excerpt. Composes the shared ToolCard shell.
|
|
5
|
+
*/
|
|
6
|
+
import { Badge } from '@vibesdotdev/kit/components/ui/badge';
|
|
7
|
+
import {
|
|
8
|
+
ToolCard,
|
|
9
|
+
ToolCardBody,
|
|
10
|
+
type ToolWidgetProps
|
|
11
|
+
} from '@vibesdotdev/kit/components/tool-widgets';
|
|
12
|
+
import { apiRequestCardModel } from '../../tools/api-request/api-request.view.js';
|
|
13
|
+
|
|
14
|
+
let { tool, compact = false }: ToolWidgetProps = $props();
|
|
15
|
+
|
|
16
|
+
const model = $derived(
|
|
17
|
+
apiRequestCardModel({
|
|
18
|
+
input: tool.input,
|
|
19
|
+
output: tool.output,
|
|
20
|
+
error: tool.error
|
|
21
|
+
})
|
|
22
|
+
);
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<ToolCard {tool} {compact} title={model.title} icon="lucide:server">
|
|
26
|
+
{#snippet children()}
|
|
27
|
+
<ToolCardBody {compact}>
|
|
28
|
+
<div class="flex flex-wrap items-center gap-1.5">
|
|
29
|
+
{#if model.method}
|
|
30
|
+
<Badge variant="outline" class="font-mono text-caption">{model.method}</Badge>
|
|
31
|
+
{/if}
|
|
32
|
+
{#if model.statusLabel}
|
|
33
|
+
<Badge
|
|
34
|
+
variant={model.failed ? 'destructive' : 'secondary'}
|
|
35
|
+
class="font-mono text-caption"
|
|
36
|
+
>
|
|
37
|
+
{model.statusLabel}
|
|
38
|
+
</Badge>
|
|
39
|
+
{/if}
|
|
40
|
+
</div>
|
|
41
|
+
{#if model.url}
|
|
42
|
+
<p class="truncate font-mono text-footnote text-foreground">{model.url}</p>
|
|
43
|
+
{/if}
|
|
44
|
+
{#if model.bodyExcerpt}
|
|
45
|
+
<p class="line-clamp-3 font-mono text-footnote whitespace-pre-wrap text-muted-foreground">
|
|
46
|
+
{model.bodyExcerpt}
|
|
47
|
+
</p>
|
|
48
|
+
{:else if model.statusLabel === 'success'}
|
|
49
|
+
<p class="text-footnote text-muted-foreground italic">No body returned.</p>
|
|
50
|
+
{/if}
|
|
51
|
+
</ToolCardBody>
|
|
52
|
+
{/snippet}
|
|
53
|
+
</ToolCard>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ToolWidgetProps } from '@vibesdotdev/kit/components/tool-widgets';
|
|
2
|
+
declare const ApiRequestToolCard: import("svelte").Component<ToolWidgetProps, {}, "">;
|
|
3
|
+
type ApiRequestToolCard = ReturnType<typeof ApiRequestToolCard>;
|
|
4
|
+
export default ApiRequestToolCard;
|
|
5
|
+
//# sourceMappingURL=ApiRequestToolCard.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiRequestToolCard.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/tool-widgets/ApiRequestToolCard.svelte.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,eAAe,EACpB,MAAM,0CAA0C,CAAC;AAiDnD,QAAA,MAAM,kBAAkB,qDAAwC,CAAC;AACjE,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAChE,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/svelte/tool-widgets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as ApiRequestToolCard } from './ApiRequestToolCard.svelte';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type JsonValue } from '../../lib/client/internal/client-values.ts';
|
|
2
|
+
import { CapabilityError, type VibesRuntime } from '@vibesdotdev/kernel';
|
|
3
|
+
import type { ApiRequestInput, ApiRequestOutput } from './schemas/index.ts';
|
|
4
|
+
export declare class ApiRequestContractError extends CapabilityError {
|
|
5
|
+
readonly contractCode: string;
|
|
6
|
+
constructor(contractCode: string, message: string, options?: ErrorOptions);
|
|
7
|
+
}
|
|
8
|
+
export interface ResolvedApiRequestTarget {
|
|
9
|
+
app: string;
|
|
10
|
+
origin: string;
|
|
11
|
+
url: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function resolveApiRequestTarget(input: ApiRequestInput, runtime: VibesRuntime): Promise<ResolvedApiRequestTarget>;
|
|
14
|
+
export declare function apiRequestErrorOutput(error: unknown): ApiRequestOutput & {
|
|
15
|
+
error: NonNullable<ApiRequestOutput['error']>;
|
|
16
|
+
};
|
|
17
|
+
/** Apply the shared credential redactor before emitting a tool result. */
|
|
18
|
+
export declare function apiRequestSuccessOutput(response: JsonValue): ApiRequestOutput;
|
|
19
|
+
//# sourceMappingURL=api-request.contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-request.contract.d.ts","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.contract.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsD,KAAK,SAAS,EAAE,MAAM,4CAA4C,CAAC;AAEhI,OAAO,EAAE,eAAe,EAAkE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACzI,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAW5E,qBAAa,uBAAwB,SAAQ,eAAe;IAE1D,QAAQ,CAAC,YAAY,EAAE,MAAM;gBAApB,YAAY,EAAE,MAAM,EAC7B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY;CAKvB;AAED,MAAM,WAAW,wBAAwB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACZ;AA4CD,wBAAsB,uBAAuB,CAC5C,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,YAAY,GACnB,OAAO,CAAC,wBAAwB,CAAC,CAmDnC;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;CAAE,CAS1H;AACD,0EAA0E;AAC1E,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,GAAG,gBAAgB,CAG7E"}
|