@vibesdotdev/client 0.1.1 → 1.0.0-rc.3

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 (238) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -15
  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 +5 -0
  151. package/dist/svelte/client-svelte.plugin.d.ts.map +1 -0
  152. package/dist/svelte/client-svelte.plugin.js +46 -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 +188 -41
  204. package/dist/lib/client/internal/node/http2-fetch.node.d.ts +0 -2
  205. package/dist/lib/client/internal/node/http2-fetch.node.d.ts.map +0 -1
  206. package/dist/lib/client/internal/node/http2-fetch.node.js +0 -131
  207. package/dist/lib/client/internal/node/http2-fetch.node.js.map +0 -1
  208. package/dist/lib/client/node.d.ts +0 -5
  209. package/dist/lib/client/node.d.ts.map +0 -1
  210. package/dist/lib/client/node.js +0 -33
  211. package/dist/lib/client/node.js.map +0 -1
  212. package/dist/tools/api-request/index.d.ts +0 -5
  213. package/dist/tools/api-request/index.d.ts.map +0 -1
  214. package/dist/tools/api-request/index.js +0 -4
  215. package/dist/tools/api-request/index.js.map +0 -1
  216. package/src/factory.ts +0 -114
  217. package/src/index.ts +0 -15
  218. package/src/lib/client/core.ts +0 -13
  219. package/src/lib/client/internal/base-client.ts +0 -107
  220. package/src/lib/client/internal/base-helpers.ts +0 -74
  221. package/src/lib/client/internal/base-types.ts +0 -42
  222. package/src/lib/client/internal/endpoint.ts +0 -51
  223. package/src/lib/client/internal/generator.ts +0 -181
  224. package/src/lib/client/internal/index.ts +0 -4
  225. package/src/lib/client/internal/node/http2-fetch.node.ts +0 -138
  226. package/src/lib/client/internal/request-builder.ts +0 -147
  227. package/src/lib/client/internal/sse-stream.ts +0 -130
  228. package/src/lib/client/internal/vibes-client.ts +0 -167
  229. package/src/lib/client/internal/wrap-fetch.ts +0 -59
  230. package/src/lib/client/node.ts +0 -36
  231. package/src/lib/client/types.ts +0 -156
  232. package/src/plugin.ts +0 -104
  233. package/src/schemas.ts +0 -91
  234. package/src/sse-client.ts +0 -155
  235. package/src/tools/api-request/api-request.descriptor.ts +0 -28
  236. package/src/tools/api-request/api-request.impl.consumer.ts +0 -66
  237. package/src/tools/api-request/index.ts +0 -4
  238. package/src/tools/api-request/schemas/index.ts +0 -29
@@ -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,5 @@
1
+ /** Settles after every widget registration this module queued so far (none when Kit is absent). */
2
+ export declare function toolWidgetsRegistered(): Promise<void>;
3
+ export declare const clientSveltePlugin: import("@vibesdotdev/kernel").RuntimePlugin;
4
+ export default clientSveltePlugin;
5
+ //# 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":"AAyBA,mGAAmG;AACnG,wBAAgB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD;AAID,eAAO,MAAM,kBAAkB,6CAiB7B,CAAC;AAEH,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,46 @@
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
+ // Kit's widget registry loads lazily: a top-level await here would suspend every importer and,
15
+ // inside a module cycle, let WebKit run a dependent before this module's bindings exist.
16
+ const kitToolWidgets = settle(() => import('@vibesdotdev/kit/components/tool-widgets'));
17
+ function registerKitToolWidget(...args) {
18
+ void kitToolWidgets.then((kit) => {
19
+ if (kit.ok)
20
+ kit.value.registerToolWidget(...args);
21
+ });
22
+ }
23
+ /** Settles after every widget registration this module queued so far (none when Kit is absent). */
24
+ export function toolWidgetsRegistered() {
25
+ return kitToolWidgets.then(() => undefined);
26
+ }
27
+ registerKitToolWidget?.('api-request', loadApiRequestToolCard);
28
+ export const clientSveltePlugin = createRuntimePlugin({
29
+ id: '@vibesdotdev/client/svelte',
30
+ name: 'Client Svelte',
31
+ description: 'Client-owned Svelte tool-result contributions for api-request.',
32
+ dependencies: [],
33
+ descriptors: [apiRequestWidget],
34
+ loaders: [
35
+ loader(apiRequestWidget.id, { kind: 'tools/ui', scope: 'browser' }, async () => {
36
+ registerKitToolWidget?.('api-request', loadApiRequestToolCard);
37
+ const module = await loadApiRequestToolCard();
38
+ return createRuntimeImplementation({
39
+ kind: 'tools/ui',
40
+ id: apiRequestWidget.id,
41
+ implementation: { web: { component: module.default } }
42
+ });
43
+ })
44
+ ]
45
+ });
46
+ 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"}
@@ -0,0 +1,110 @@
1
+ import * as z from 'zod/v4';
2
+ import { redactedExcerpt, redactCredentials } from '@vibesdotdev/shared/utils';
3
+ import { readClientValue, readClientFields, JsonValueSchema } from "../../lib/client/internal/client-values.js";
4
+ import { apiRequestInputSchema } from "./schemas/index.js";
5
+ import { CapabilityError, CaughtFailureSchema, isCapabilityError } from '@vibesdotdev/kernel';
6
+ const FORBIDDEN_AUTH_HEADERS = new Set([
7
+ 'authorization',
8
+ 'proxy-authorization',
9
+ 'cookie',
10
+ 'set-cookie',
11
+ 'x-api-key',
12
+ 'x-auth-token'
13
+ ]);
14
+ export class ApiRequestContractError extends CapabilityError {
15
+ contractCode;
16
+ constructor(contractCode, message, options) {
17
+ super(redactedExcerpt(message), contractCode === 'UNKNOWN_APP' ? 'NOT_FOUND' : contractCode.startsWith('NO_AUTH') ? 'AUTH_REQUIRED' : 'INVALID_INPUT', { reason: contractCode.toLowerCase().replaceAll('_', '-'), cause: options?.cause });
18
+ this.contractCode = contractCode;
19
+ this.name = 'ApiRequestContractError';
20
+ }
21
+ }
22
+ function assertSafeHeaders(headers) {
23
+ for (const name of Object.keys(headers ?? {})) {
24
+ if (FORBIDDEN_AUTH_HEADERS.has(name.trim().toLowerCase())) {
25
+ throw new ApiRequestContractError('AUTH_HEADER_FORBIDDEN', `Header "${name}" is managed by the authenticated API client and cannot be supplied to api-request.`);
26
+ }
27
+ }
28
+ }
29
+ async function resolveDeclaredServiceOrigin(app, runtime) {
30
+ try {
31
+ const selected = runtime.hasKind('infra/service')
32
+ ? await runtime.query('infra/service').withId(app).select()
33
+ : undefined;
34
+ if (!selected) {
35
+ throw new CapabilityError('Service is not declared in this runtime.', 'NOT_FOUND', {
36
+ reason: 'service-undeclared',
37
+ details: { serviceId: app }
38
+ });
39
+ }
40
+ return await selected.impl.origin();
41
+ }
42
+ catch (error) {
43
+ if (!(error instanceof Error && isCapabilityError(error) && error.reason === 'service-undeclared'))
44
+ throw error;
45
+ throw new ApiRequestContractError('UNKNOWN_APP', `Unknown vibes app "${app}" — no infra/service declares it in the configured service environment.`, { cause: error });
46
+ }
47
+ }
48
+ export async function resolveApiRequestTarget(input, runtime) {
49
+ input = readClientValue(apiRequestInputSchema, input, 'api-request-input-invalid');
50
+ const app = input.app?.trim();
51
+ if (!app) {
52
+ throw new ApiRequestContractError('APP_REQUIRED', 'api-request requires an explicit app id naming a declared infra/service.');
53
+ }
54
+ assertSafeHeaders(input.headers);
55
+ const origin = await resolveDeclaredServiceOrigin(app, runtime);
56
+ let configured;
57
+ let target;
58
+ try {
59
+ configured = new URL(origin);
60
+ target = new URL(input.path, `${origin}/`);
61
+ }
62
+ catch (cause) {
63
+ throw new ApiRequestContractError('INVALID_APP_ORIGIN', `The configured origin for vibes app "${app}" is not a valid URL.`, { cause });
64
+ }
65
+ if (configured.protocol !== 'http:' && configured.protocol !== 'https:') {
66
+ throw new ApiRequestContractError('INVALID_APP_ORIGIN', `The configured origin for vibes app "${app}" must use HTTP or HTTPS.`);
67
+ }
68
+ const configuredOrigin = configured.origin;
69
+ if (!input.path.startsWith('/') ||
70
+ input.path.startsWith('//') ||
71
+ target.origin !== configuredOrigin) {
72
+ throw new ApiRequestContractError('INVALID_PATH', 'api-request path must begin with one slash and cannot override the configured app origin.');
73
+ }
74
+ return {
75
+ app,
76
+ origin: configuredOrigin,
77
+ url: target.toString()
78
+ };
79
+ }
80
+ export function apiRequestErrorOutput(error) {
81
+ const failure = CaughtFailureSchema.parse(error);
82
+ return readClientFields(() => {
83
+ const status = readClientValue(z.object({ status: z.number().int().optional() }), failure, 'api-request-failure-unreadable').status;
84
+ return { status: 'error', error: {
85
+ message: failure instanceof Error ? redactedExcerpt(failure.message, { maxChars: 2000 }) : 'The API request failed.',
86
+ code: failure instanceof ApiRequestContractError ? failure.contractCode : failure instanceof CapabilityError && failure.reason === 'no-auth-client' ? 'NO_AUTH_CLIENT' : 'API_REQUEST_FAILED', status
87
+ } };
88
+ }, 'api-request-failure-unreadable');
89
+ }
90
+ /** Apply the shared credential redactor before emitting a tool result. */
91
+ export function apiRequestSuccessOutput(response) {
92
+ const value = readClientValue(JsonValueSchema, response, 'api-request-response-invalid');
93
+ return { status: 'success', response: redactApiResponse(value) };
94
+ }
95
+ function redactApiResponse(value) {
96
+ if (value === null)
97
+ return null;
98
+ if (Array.isArray(value))
99
+ return value.map(redactApiResponse);
100
+ const string = z.string().safeParse(value);
101
+ if (string.success)
102
+ return redactCredentials(string.data);
103
+ const record = z.record(z.string(), JsonValueSchema).safeParse(value);
104
+ if (!record.success)
105
+ return value;
106
+ return Object.fromEntries(Object.entries(record.data).map(([key, entry]) => [key,
107
+ redactCredentials(`${key}=credential-value`) !== `${key}=credential-value`
108
+ ? '[redacted]' : redactApiResponse(entry)]));
109
+ }
110
+ //# sourceMappingURL=api-request.contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-request.contract.js","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.contract.ts"],"names":[],"mappings":"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"}
@@ -23,23 +23,30 @@ declare const _default: {
23
23
  GET: "GET";
24
24
  POST: "POST";
25
25
  PUT: "PUT";
26
- DELETE: "DELETE";
27
26
  PATCH: "PATCH";
27
+ DELETE: "DELETE";
28
28
  }>;
29
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>;
30
+ query: import("zod/v4").ZodOptional<import("zod/v4").ZodRecord<import("zod/v4").ZodString, import("zod/v4").ZodOptional<import("zod/v4").ZodUnion<readonly [import("zod/v4").ZodString, import("zod/v4").ZodNumber, import("zod/v4").ZodBoolean, import("zod/v4").ZodArray<import("zod/v4").ZodString>]>>>>;
31
+ body: import("zod/v4").ZodOptional<import("zod/v4").ZodType<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue, import("zod/v4/core").$ZodTypeInternals<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue>>>;
32
32
  headers: import("zod/v4").ZodOptional<import("zod/v4").ZodRecord<import("zod/v4").ZodString, import("zod/v4").ZodString>>;
33
+ app: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
33
34
  }, import("zod/v4/core").$strip>;
34
35
  output: import("zod/v4").ZodObject<{
35
36
  status: import("zod/v4").ZodEnum<{
36
37
  error: "error";
37
38
  success: "success";
38
39
  }>;
39
- response: import("zod/v4").ZodOptional<import("zod/v4").ZodUnknown>;
40
+ response: import("zod/v4").ZodOptional<import("zod/v4").ZodType<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue, import("zod/v4/core").$ZodTypeInternals<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue>>>;
40
41
  error: import("zod/v4").ZodOptional<import("zod/v4").ZodObject<{
41
42
  message: import("zod/v4").ZodString;
43
+ failure: import("zod/v4").ZodOptional<import("zod/v4").ZodObject<{
44
+ name: import("zod/v4").ZodString;
45
+ code: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
46
+ reason: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
47
+ }, import("zod/v4/core").$strip>>;
42
48
  code: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
49
+ status: import("zod/v4").ZodOptional<import("zod/v4").ZodNumber>;
43
50
  }, import("zod/v4/core").$strip>>;
44
51
  }, import("zod/v4/core").$strip>;
45
52
  };
@@ -1 +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"}
1
+ {"version":3,"file":"api-request.descriptor.d.ts","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.descriptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKH,wBAsBG"}