@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.
Files changed (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -0
  3. package/dist/api-client-plugin.d.ts +4 -0
  4. package/dist/api-client-plugin.d.ts.map +1 -0
  5. package/dist/api-client-plugin.js +20 -0
  6. package/dist/api-client-plugin.js.map +1 -0
  7. package/dist/api-client.impl.d.ts +23 -0
  8. package/dist/api-client.impl.d.ts.map +1 -0
  9. package/dist/api-client.impl.js +47 -0
  10. package/dist/api-client.impl.js.map +1 -0
  11. package/dist/client.consumer.plugin.d.ts +3 -0
  12. package/dist/client.consumer.plugin.d.ts.map +1 -0
  13. package/dist/client.consumer.plugin.js +10 -0
  14. package/dist/client.consumer.plugin.js.map +1 -0
  15. package/dist/cloud.plugin.d.ts +3 -0
  16. package/dist/cloud.plugin.d.ts.map +1 -0
  17. package/dist/cloud.plugin.js +10 -0
  18. package/dist/cloud.plugin.js.map +1 -0
  19. package/dist/config/client.config.descriptor.d.ts +4 -0
  20. package/dist/config/client.config.descriptor.d.ts.map +1 -0
  21. package/dist/config/client.config.descriptor.js +32 -0
  22. package/dist/config/client.config.descriptor.js.map +1 -0
  23. package/dist/config/index.d.ts +3 -0
  24. package/dist/config/index.d.ts.map +1 -0
  25. package/dist/config/index.js +3 -0
  26. package/dist/config/index.js.map +1 -0
  27. package/dist/config/settings.d.ts +9 -0
  28. package/dist/config/settings.d.ts.map +1 -0
  29. package/dist/config/settings.js +25 -0
  30. package/dist/config/settings.js.map +1 -0
  31. package/dist/docs/client.api-request.docs.descriptor.d.ts +4 -0
  32. package/dist/docs/client.api-request.docs.descriptor.d.ts.map +1 -0
  33. package/dist/docs/client.api-request.docs.descriptor.js +71 -0
  34. package/dist/docs/client.api-request.docs.descriptor.js.map +1 -0
  35. package/dist/events/auth-rejected.event.d.ts +35 -0
  36. package/dist/events/auth-rejected.event.d.ts.map +1 -0
  37. package/dist/events/auth-rejected.event.js +36 -0
  38. package/dist/events/auth-rejected.event.js.map +1 -0
  39. package/dist/factory.d.ts +5 -1
  40. package/dist/factory.d.ts.map +1 -1
  41. package/dist/factory.js +16 -17
  42. package/dist/factory.js.map +1 -1
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +2 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/kind-augment.d.ts +11 -0
  48. package/dist/kind-augment.d.ts.map +1 -0
  49. package/dist/kind-augment.js +2 -0
  50. package/dist/kind-augment.js.map +1 -0
  51. package/dist/lib/client/api-diagnostics.d.ts +79 -0
  52. package/dist/lib/client/api-diagnostics.d.ts.map +1 -0
  53. package/dist/lib/client/api-diagnostics.js +111 -0
  54. package/dist/lib/client/api-diagnostics.js.map +1 -0
  55. package/dist/lib/client/configured.d.ts +78 -0
  56. package/dist/lib/client/configured.d.ts.map +1 -0
  57. package/dist/lib/client/configured.js +261 -0
  58. package/dist/lib/client/configured.js.map +1 -0
  59. package/dist/lib/client/internal/auth-headers.d.ts +11 -0
  60. package/dist/lib/client/internal/auth-headers.d.ts.map +1 -0
  61. package/dist/lib/client/internal/auth-headers.js +35 -0
  62. package/dist/lib/client/internal/auth-headers.js.map +1 -0
  63. package/dist/lib/client/internal/base-client.d.ts +5 -2
  64. package/dist/lib/client/internal/base-client.d.ts.map +1 -1
  65. package/dist/lib/client/internal/base-client.js +42 -22
  66. package/dist/lib/client/internal/base-client.js.map +1 -1
  67. package/dist/lib/client/internal/base-helpers.d.ts.map +1 -1
  68. package/dist/lib/client/internal/base-helpers.js +20 -20
  69. package/dist/lib/client/internal/base-helpers.js.map +1 -1
  70. package/dist/lib/client/internal/base-types.d.ts +10 -5
  71. package/dist/lib/client/internal/base-types.d.ts.map +1 -1
  72. package/dist/lib/client/internal/base-types.js +5 -3
  73. package/dist/lib/client/internal/base-types.js.map +1 -1
  74. package/dist/lib/client/internal/client-values.d.ts +43 -0
  75. package/dist/lib/client/internal/client-values.d.ts.map +1 -0
  76. package/dist/lib/client/internal/client-values.js +76 -0
  77. package/dist/lib/client/internal/client-values.js.map +1 -0
  78. package/dist/lib/client/internal/endpoint.d.ts +6 -5
  79. package/dist/lib/client/internal/endpoint.d.ts.map +1 -1
  80. package/dist/lib/client/internal/endpoint.js +3 -0
  81. package/dist/lib/client/internal/endpoint.js.map +1 -1
  82. package/dist/lib/client/internal/generator.d.ts +98 -9
  83. package/dist/lib/client/internal/generator.d.ts.map +1 -1
  84. package/dist/lib/client/internal/generator.js +92 -140
  85. package/dist/lib/client/internal/generator.js.map +1 -1
  86. package/dist/lib/client/internal/request-builder.d.ts +5 -2
  87. package/dist/lib/client/internal/request-builder.d.ts.map +1 -1
  88. package/dist/lib/client/internal/request-builder.js +105 -65
  89. package/dist/lib/client/internal/request-builder.js.map +1 -1
  90. package/dist/lib/client/internal/sse-stream.d.ts +9 -5
  91. package/dist/lib/client/internal/sse-stream.d.ts.map +1 -1
  92. package/dist/lib/client/internal/sse-stream.js +96 -94
  93. package/dist/lib/client/internal/sse-stream.js.map +1 -1
  94. package/dist/lib/client/internal/timeout-signal.d.ts +8 -0
  95. package/dist/lib/client/internal/timeout-signal.d.ts.map +1 -0
  96. package/dist/lib/client/internal/timeout-signal.js +17 -0
  97. package/dist/lib/client/internal/timeout-signal.js.map +1 -0
  98. package/dist/lib/client/internal/transport/http2-fetch.d.ts +8 -0
  99. package/dist/lib/client/internal/transport/http2-fetch.d.ts.map +1 -0
  100. package/dist/lib/client/internal/transport/http2-fetch.js +17 -0
  101. package/dist/lib/client/internal/transport/http2-fetch.js.map +1 -0
  102. package/dist/lib/client/internal/vibes-client.d.ts +17 -8
  103. package/dist/lib/client/internal/vibes-client.d.ts.map +1 -1
  104. package/dist/lib/client/internal/vibes-client.js +127 -67
  105. package/dist/lib/client/internal/vibes-client.js.map +1 -1
  106. package/dist/lib/client/internal/wrap-fetch.d.ts +3 -2
  107. package/dist/lib/client/internal/wrap-fetch.d.ts.map +1 -1
  108. package/dist/lib/client/internal/wrap-fetch.js +14 -33
  109. package/dist/lib/client/internal/wrap-fetch.js.map +1 -1
  110. package/dist/lib/client/runtime-fetch.d.ts +14 -0
  111. package/dist/lib/client/runtime-fetch.d.ts.map +1 -0
  112. package/dist/lib/client/runtime-fetch.js +25 -0
  113. package/dist/lib/client/runtime-fetch.js.map +1 -0
  114. package/dist/lib/client/types.d.ts +18 -9
  115. package/dist/lib/client/types.d.ts.map +1 -1
  116. package/dist/lib/client/types.js +22 -3
  117. package/dist/lib/client/types.js.map +1 -1
  118. package/dist/plugin.d.ts +2 -18
  119. package/dist/plugin.d.ts.map +1 -1
  120. package/dist/plugin.js +7 -74
  121. package/dist/plugin.js.map +1 -1
  122. package/dist/runtime-client.d.ts +10 -0
  123. package/dist/runtime-client.d.ts.map +1 -0
  124. package/dist/runtime-client.js +14 -0
  125. package/dist/runtime-client.js.map +1 -0
  126. package/dist/schemas/auth-rejected.d.ts +12 -0
  127. package/dist/schemas/auth-rejected.d.ts.map +1 -0
  128. package/dist/schemas/auth-rejected.js +11 -0
  129. package/dist/schemas/auth-rejected.js.map +1 -0
  130. package/dist/schemas/sdk-languages.d.ts +47 -0
  131. package/dist/schemas/sdk-languages.d.ts.map +1 -0
  132. package/dist/schemas/sdk-languages.js +75 -0
  133. package/dist/schemas/sdk-languages.js.map +1 -0
  134. package/dist/schemas/settings.d.ts +14 -0
  135. package/dist/schemas/settings.d.ts.map +1 -0
  136. package/dist/schemas/settings.js +10 -0
  137. package/dist/schemas/settings.js.map +1 -0
  138. package/dist/schemas/validated-request.d.ts +19 -0
  139. package/dist/schemas/validated-request.d.ts.map +1 -0
  140. package/dist/schemas/validated-request.js +2 -0
  141. package/dist/schemas/validated-request.js.map +1 -0
  142. package/dist/schemas.d.ts +23 -8
  143. package/dist/schemas.d.ts.map +1 -1
  144. package/dist/schemas.js +8 -2
  145. package/dist/schemas.js.map +1 -1
  146. package/dist/sse-client.d.ts +17 -15
  147. package/dist/sse-client.d.ts.map +1 -1
  148. package/dist/sse-client.js +111 -91
  149. package/dist/sse-client.js.map +1 -1
  150. package/dist/svelte/client-svelte.plugin.d.ts +3 -0
  151. package/dist/svelte/client-svelte.plugin.d.ts.map +1 -0
  152. package/dist/svelte/client-svelte.plugin.js +35 -0
  153. package/dist/svelte/index.d.ts +3 -0
  154. package/dist/svelte/index.d.ts.map +1 -0
  155. package/dist/svelte/index.js +2 -0
  156. package/dist/svelte/styles.css +8 -0
  157. package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte +53 -0
  158. package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte.d.ts +5 -0
  159. package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte.d.ts.map +1 -0
  160. package/dist/svelte/tool-widgets/index.d.ts +2 -0
  161. package/dist/svelte/tool-widgets/index.d.ts.map +1 -0
  162. package/dist/svelte/tool-widgets/index.js +1 -0
  163. package/dist/tools/api-request/api-request.contract.d.ts +19 -0
  164. package/dist/tools/api-request/api-request.contract.d.ts.map +1 -0
  165. package/dist/tools/api-request/api-request.contract.js +110 -0
  166. package/dist/tools/api-request/api-request.contract.js.map +1 -0
  167. package/dist/tools/api-request/api-request.descriptor.d.ts +11 -4
  168. package/dist/tools/api-request/api-request.descriptor.d.ts.map +1 -1
  169. package/dist/tools/api-request/api-request.descriptor.js +8 -5
  170. package/dist/tools/api-request/api-request.descriptor.js.map +1 -1
  171. package/dist/tools/api-request/api-request.impl.cloud.d.ts +15 -0
  172. package/dist/tools/api-request/api-request.impl.cloud.d.ts.map +1 -0
  173. package/dist/tools/api-request/api-request.impl.cloud.js +75 -0
  174. package/dist/tools/api-request/api-request.impl.cloud.js.map +1 -0
  175. package/dist/tools/api-request/api-request.impl.consumer.d.ts +5 -3
  176. package/dist/tools/api-request/api-request.impl.consumer.d.ts.map +1 -1
  177. package/dist/tools/api-request/api-request.impl.consumer.js +27 -33
  178. package/dist/tools/api-request/api-request.impl.consumer.js.map +1 -1
  179. package/dist/tools/api-request/api-request.view.d.ts +29 -0
  180. package/dist/tools/api-request/api-request.view.d.ts.map +1 -0
  181. package/dist/tools/api-request/api-request.view.js +62 -0
  182. package/dist/tools/api-request/api-request.view.js.map +1 -0
  183. package/dist/tools/api-request/schemas/index.d.ts +12 -5
  184. package/dist/tools/api-request/schemas/index.d.ts.map +1 -1
  185. package/dist/tools/api-request/schemas/index.js +24 -6
  186. package/dist/tools/api-request/schemas/index.js.map +1 -1
  187. package/dist/tui/client-tui.plugin.d.ts +3 -0
  188. package/dist/tui/client-tui.plugin.d.ts.map +1 -0
  189. package/dist/tui/client-tui.plugin.js +32 -0
  190. package/dist/tui/client-tui.plugin.js.map +1 -0
  191. package/dist/tui/index.d.ts +2 -0
  192. package/dist/tui/index.d.ts.map +1 -0
  193. package/dist/tui/index.js +2 -0
  194. package/dist/tui/index.js.map +1 -0
  195. package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.d.ts +17 -0
  196. package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.d.ts.map +1 -0
  197. package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.js +28 -0
  198. package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.js.map +1 -0
  199. package/dist/validated-request.d.ts +27 -0
  200. package/dist/validated-request.d.ts.map +1 -0
  201. package/dist/validated-request.js +119 -0
  202. package/dist/validated-request.js.map +1 -0
  203. package/package.json +190 -45
  204. package/SPEC.md +0 -107
  205. package/dist/lib/client/internal/node/http2-fetch.node.d.ts +0 -2
  206. package/dist/lib/client/internal/node/http2-fetch.node.d.ts.map +0 -1
  207. package/dist/lib/client/internal/node/http2-fetch.node.js +0 -131
  208. package/dist/lib/client/internal/node/http2-fetch.node.js.map +0 -1
  209. package/dist/lib/client/node.d.ts +0 -5
  210. package/dist/lib/client/node.d.ts.map +0 -1
  211. package/dist/lib/client/node.js +0 -33
  212. package/dist/lib/client/node.js.map +0 -1
  213. package/dist/tools/api-request/index.d.ts +0 -5
  214. package/dist/tools/api-request/index.d.ts.map +0 -1
  215. package/dist/tools/api-request/index.js +0 -4
  216. package/dist/tools/api-request/index.js.map +0 -1
  217. package/src/factory.ts +0 -114
  218. package/src/index.ts +0 -15
  219. package/src/lib/client/core.ts +0 -13
  220. package/src/lib/client/internal/base-client.ts +0 -107
  221. package/src/lib/client/internal/base-helpers.ts +0 -74
  222. package/src/lib/client/internal/base-types.ts +0 -42
  223. package/src/lib/client/internal/endpoint.ts +0 -51
  224. package/src/lib/client/internal/generator.ts +0 -181
  225. package/src/lib/client/internal/index.ts +0 -4
  226. package/src/lib/client/internal/node/http2-fetch.node.ts +0 -138
  227. package/src/lib/client/internal/request-builder.ts +0 -147
  228. package/src/lib/client/internal/sse-stream.ts +0 -130
  229. package/src/lib/client/internal/vibes-client.ts +0 -167
  230. package/src/lib/client/internal/wrap-fetch.ts +0 -59
  231. package/src/lib/client/node.ts +0 -36
  232. package/src/lib/client/types.ts +0 -156
  233. package/src/plugin.ts +0 -104
  234. package/src/schemas.ts +0 -91
  235. package/src/sse-client.ts +0 -155
  236. package/src/tools/api-request/api-request.descriptor.ts +0 -28
  237. package/src/tools/api-request/api-request.impl.consumer.ts +0 -66
  238. package/src/tools/api-request/index.ts +0 -4
  239. 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/runtime/schemas/descriptor';
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
  });
@@ -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,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"}
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"}
@@ -1,37 +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
- */
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: unknown) => void;
12
+ type EventHandler = (data: JsonValue) => void;
13
+ type FailureHandler = (failure: CapabilityError) => void;
16
14
  export declare class SSEClient {
17
- private url;
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 reconnectTimer;
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;
@@ -1 +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"}
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"}
@@ -1,124 +1,144 @@
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
- */
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
- url;
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
- reconnectTimer = null;
12
+ cancelReconnect = null;
17
13
  _status = 'disconnected';
14
+ _lastFailure = null;
15
+ reconnectDelay;
16
+ maxReconnectAttempts;
18
17
  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;
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
- 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);
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.scheduleReconnect();
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
- // 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
- }
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 (e) {
70
- const error = e instanceof Error ? e.message : 'Failed to create SSE connection';
71
- this.onError?.(error);
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
- if (!this.handlers.has(event)) {
81
- this.handlers.set(event, new Set());
85
+ let handlers = this.handlers.get(event);
86
+ if (!handlers) {
87
+ handlers = new Set();
88
+ this.handlers.set(event, handlers);
82
89
  }
83
- this.handlers.get(event).add(handler);
84
- // Return unsubscribe function
85
- return () => {
86
- this.handlers.get(event)?.delete(handler);
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.handlers.get(event)?.forEach((handler) => {
117
+ const logger = getLogger('client.sse', this.options.runtime);
118
+ this.handlers.get(event)?.forEach(handler => {
91
119
  try {
92
- handler(data);
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 (e) {
95
- console.error(`[SSEClient] Error in handler for "${event}":`, e);
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
- 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
- }
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
@@ -1 +1 @@
1
- {"version":3,"file":"sse-client.js","sourceRoot":"","sources":["../src/sse-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse-client.js","sourceRoot":"","sources":["../src/sse-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const clientSveltePlugin: import("@vibesdotdev/kernel").RuntimePlugin;
2
+ export default clientSveltePlugin;
3
+ //# sourceMappingURL=client-svelte.plugin.d.ts.map
@@ -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,3 @@
1
+ export { clientSveltePlugin as default, clientSveltePlugin } from './client-svelte.plugin.ts';
2
+ export { default as ApiRequestToolCard } from './tool-widgets/ApiRequestToolCard.svelte';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { clientSveltePlugin as default, clientSveltePlugin } from "./client-svelte.plugin.js";
2
+ export { default as ApiRequestToolCard } from './tool-widgets/ApiRequestToolCard.svelte';
@@ -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,2 @@
1
+ export { default as ApiRequestToolCard } from './ApiRequestToolCard.svelte';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}