@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
@@ -1,78 +1,119 @@
1
+ import { CaughtFailureSchema } from '@vibesdotdev/kernel';
2
+ import { emitClientAuthRejected } from "../../../events/auth-rejected.event.js";
3
+ import { redactedExcerpt, urlRedactions } from '@vibesdotdev/shared/utils';
4
+ import { getLogger } from '@vibesdotdev/logging';
5
+ import * as z from 'zod/v4';
6
+ import { createTimeoutSignal } from "./timeout-signal.js";
7
+ import { buildAuthHeaders } from "./auth-headers.js";
1
8
  import { ClientError } from "../types.js";
9
+ import { readClientValue, readClientFields, encodeClientBody, NativeBodySchema, JsonValueSchema, RequestInputSchema, HttpOriginSchema } from "./client-values.js";
10
+ /**
11
+ * Error payloads arrive as untyped JSON; fields are decoded per use below
12
+ * instead of asserted, so a malformed body degrades to the status text.
13
+ */
14
+ const ErrorRecordSchema = z.record(z.string(), JsonValueSchema);
2
15
  export class RequestBuilder {
3
16
  baseUrl;
4
17
  auth;
5
18
  fetchImpl;
6
19
  timeout;
7
20
  debug;
8
- constructor(baseUrl, auth, fetchImpl, timeout = 30000, debug = false) {
21
+ runtime;
22
+ logger;
23
+ constructor(baseUrl, auth, fetchImpl, timeout = 30000, debug = false, runtime) {
9
24
  this.baseUrl = baseUrl;
10
25
  this.auth = auth;
11
26
  this.fetchImpl = fetchImpl;
12
27
  this.timeout = timeout;
13
28
  this.debug = debug;
29
+ this.runtime = runtime;
30
+ readClientValue(HttpOriginSchema, baseUrl, 'client-origin-invalid');
31
+ this.logger = runtime ? getLogger('client', runtime) : undefined;
14
32
  }
15
33
  async request(options) {
34
+ options = readClientValue(RequestInputSchema, options, 'client-request-invalid');
16
35
  const url = this.buildUrl(options);
17
36
  const headers = await this.buildHeaders(options);
37
+ const deadline = createTimeoutSignal(this.runtime, options.timeout ?? this.timeout);
18
38
  const init = {
19
39
  method: options.method,
20
40
  headers,
21
- signal: this.createAbortSignal(options.timeout || this.timeout)
41
+ signal: deadline.signal
22
42
  };
23
- if (options.body !== undefined) {
24
- if (headers.get('Content-Type')?.includes('application/json'))
25
- init.body = JSON.stringify(options.body);
26
- else
27
- init.body = options.body;
28
- }
29
- const shouldLog = this.debug || url.pathname.includes('/auth/');
43
+ const shouldLog = this.debug;
30
44
  if (shouldLog) {
31
- console.info('[Client] Request:', {
32
- url: url.toString(),
45
+ this.logger?.info('Client request', {
33
46
  method: options.method,
34
- headers: Object.fromEntries(headers.entries()),
35
- body: options.body
47
+ headerNames: [...headers.keys()],
48
+ queryCount: [...url.searchParams].length,
49
+ hasBody: options.body !== undefined
36
50
  });
37
51
  }
38
52
  try {
39
- const response = await this.fetchImpl(url.toString(), init);
53
+ if (options.body !== undefined)
54
+ init.body = encodeClientBody(options.body, headers.get('Content-Type'));
55
+ let response = await this.fetchImpl(url.toString(), init);
56
+ const refresh = readClientFields(() => this.auth.refreshHandler, 'client-auth-unreadable');
57
+ if (response.status === 401 && refresh && !(options.body instanceof ReadableStream)) {
58
+ await response.body?.cancel();
59
+ const refreshed = await refresh();
60
+ if (refreshed) {
61
+ this.auth = { ...readClientFields(() => ({ ...refreshed }), 'client-auth-unreadable'), refreshHandler: refresh };
62
+ init.headers = await this.buildHeaders(options);
63
+ response = await this.fetchImpl(url.toString(), init);
64
+ }
65
+ }
40
66
  if (shouldLog) {
41
- console.info('[Client] Response:', {
67
+ this.logger?.info('Client response', {
42
68
  status: response.status,
43
- statusText: response.statusText,
44
- headers: Object.fromEntries(response.headers.entries())
69
+ headerNames: [...response.headers.keys()]
45
70
  });
46
71
  }
72
+ if ((response.status === 401 || response.status === 403) && this.runtime) {
73
+ // The origin and status only: a credential's owner drops what it cached for it.
74
+ await emitClientAuthRejected(this.runtime, { origin: url.origin, status: response.status });
75
+ }
47
76
  if (!response.ok)
48
- throw await this.createError(response, options);
77
+ throw await this.createError(response, options, new Headers(init.headers));
49
78
  if (response.status === 204 || response.headers.get('Content-Length') === '0')
79
+ // SAFETY: Empty responses carry no payload; the caller decodes `undefined` as its own absent value.
50
80
  return undefined;
51
81
  const contentType = response.headers.get('Content-Type');
52
- if (contentType?.includes('application/json'))
53
- return (await response.json());
82
+ if (contentType?.includes('application/json')) {
83
+ // SAFETY: The caller owns the decoded JSON shape; the generic binds it at the call site.
84
+ return readClientValue(JsonValueSchema, await response.json(), 'client-response-invalid');
85
+ }
86
+ // SAFETY: Non-JSON responses decode as text; the caller binds `T` to the string form.
54
87
  return (await response.text());
55
88
  }
56
89
  catch (error) {
90
+ const failure = CaughtFailureSchema.parse(error);
57
91
  if (this.debug) {
58
- console.error('[Client] Request failed:', {
59
- url: url.toString(),
92
+ this.logger?.error('Client request failed', {
60
93
  method: options.method,
61
- error: error instanceof Error ? error.message : String(error),
62
- errorName: error instanceof Error ? error.name : undefined
94
+ queryCount: [...url.searchParams].length,
95
+ failureType: failure instanceof ClientError ? 'client-error' : 'transport-error',
96
+ status: failure instanceof ClientError ? failure.status : undefined,
97
+ code: failure instanceof ClientError ? failure.code : undefined
63
98
  });
64
99
  }
65
- if (error instanceof Error && error.name === 'AbortError') {
66
- throw new ClientError('Request timeout', 408, undefined, options);
100
+ if (failure instanceof Error &&
101
+ (failure.name === 'AbortError' || failure.name === 'TimeoutError')) {
102
+ throw new ClientError('Request timeout', 408, undefined, options, { cause: failure });
67
103
  }
68
- throw error;
104
+ if (failure instanceof ClientError)
105
+ throw failure;
106
+ throw new ClientError('The client transport failed.', 0, undefined, options, { cause: failure });
107
+ }
108
+ finally {
109
+ deadline.dispose();
69
110
  }
70
111
  }
71
112
  buildUrl(options) {
72
113
  let path = options.path;
73
114
  if (options.params) {
74
115
  for (const [key, value] of Object.entries(options.params)) {
75
- path = path.replace(`{${key}}`, encodeURIComponent(String(value)));
116
+ path = path.replaceAll(`{${key}}`, encodeURIComponent(String(value))).replaceAll(`:${key}`, encodeURIComponent(String(value)));
76
117
  }
77
118
  }
78
119
  const url = new URL(path, this.baseUrl);
@@ -90,57 +131,50 @@ export class RequestBuilder {
90
131
  }
91
132
  async buildHeaders(options) {
92
133
  const headers = new Headers(options.headers);
93
- if (!headers.has('Content-Type') && options.body !== undefined)
134
+ if (!headers.has('Content-Type') && options.body !== undefined && !NativeBodySchema.safeParse(options.body).success)
94
135
  headers.set('Content-Type', 'application/json');
95
136
  if (!headers.has('Accept'))
96
137
  headers.set('Accept', 'application/json');
97
- if (this.auth.type !== 'none') {
98
- const token = this.auth.credentials || (await this.auth.tokenProvider?.());
99
- if (token) {
100
- switch (this.auth.type) {
101
- case 'apiKey':
102
- case 'bearer':
103
- headers.set('Authorization', `Bearer ${token}`);
104
- break;
105
- case 'session':
106
- headers.set('Cookie', `session=${token}`);
107
- break;
108
- }
109
- }
110
- }
138
+ // Auth headers come from the canonical mapping shared with the stream transport.
139
+ const authHeaders = await buildAuthHeaders(this.auth);
140
+ for (const [name, value] of Object.entries(authHeaders))
141
+ headers.set(name, value);
111
142
  return headers;
112
143
  }
113
- createAbortSignal(timeout) {
114
- const controller = new AbortController();
115
- setTimeout(() => controller.abort(), timeout);
116
- return controller.signal;
117
- }
118
- async createError(response, request) {
144
+ async createError(response, request, headers) {
119
145
  let message = `${response.status} ${response.statusText}`;
146
+ const secrets = [...urlRedactions(this.buildUrl(request).href), this.auth.credentials ?? '', ...[...headers.values()].flatMap(value => [value, value.replace(/^Bearer /, '')])];
147
+ const safeMessage = () => redactedExcerpt(message, { maxChars: 2000, secrets });
120
148
  try {
121
149
  const contentType = response.headers.get('Content-Type');
122
150
  if (contentType?.includes('application/json')) {
123
- const error = await response.json();
124
- const validationErrors = error.issues ??
125
- error.errors;
151
+ const parsed = ErrorRecordSchema.safeParse(await response.json());
152
+ const body = parsed.success ? parsed.data : {};
153
+ const validationErrors = body.issues ?? body.errors;
126
154
  if (Array.isArray(validationErrors) && validationErrors.length > 0) {
127
155
  const fieldErrors = validationErrors
128
156
  .map((issue) => {
129
- const rec = issue;
130
- const path = Array.isArray(rec.path) && rec.path.length > 0
131
- ? rec.path.map(String).join('.')
157
+ const entry = ErrorRecordSchema.safeParse(issue);
158
+ const record = entry.success ? entry.data : {};
159
+ const pathParts = z.array(z.union([z.string(), z.number()])).safeParse(record.path);
160
+ const path = pathParts.success && pathParts.data.length > 0
161
+ ? pathParts.data.map(String).join('.')
132
162
  : 'unknown';
133
- return ` - ${path}: ${typeof rec.message === 'string' ? rec.message : 'Invalid'}`;
163
+ const text = z.string().safeParse(record.message);
164
+ return ` - ${path}: ${text.success ? text.data : 'Invalid'}`;
134
165
  })
135
166
  .join('\n');
136
167
  message = `Validation failed:\n${fieldErrors}`;
137
168
  }
138
- else if (typeof error.message === 'string') {
139
- message = error.message;
140
- }
141
- else if (error.error !== undefined) {
142
- const e = error.error;
143
- message = typeof e === 'string' ? e : JSON.stringify(e);
169
+ else {
170
+ const messageText = z.string().safeParse(body.message);
171
+ if (messageText.success) {
172
+ message = messageText.data;
173
+ }
174
+ else if (body.error !== undefined) {
175
+ const errorText = z.string().safeParse(body.error);
176
+ message = errorText.success ? errorText.data : JSON.stringify(body.error);
177
+ }
144
178
  }
145
179
  }
146
180
  else {
@@ -149,10 +183,16 @@ export class RequestBuilder {
149
183
  message = text;
150
184
  }
151
185
  }
152
- catch {
153
- // ignore parsing errors
186
+ catch (error) {
187
+ // Preserve the HTTP failure when its body cannot be consumed.
188
+ const failure = CaughtFailureSchema.parse(error);
189
+ this.logger?.warn('Could not parse error response body', {
190
+ status: response.status,
191
+ bodyReadFailed: true
192
+ });
193
+ return new ClientError(safeMessage(), response.status, response, request, { cause: failure });
154
194
  }
155
- return new ClientError(message, response.status, response, request);
195
+ return new ClientError(safeMessage(), response.status, response, request);
156
196
  }
157
197
  }
158
198
  //# sourceMappingURL=request-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"request-builder.js","sourceRoot":"","sources":["../../../../src/lib/client/internal/request-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-builder.js","sourceRoot":"","sources":["../../../../src/lib/client/internal/request-builder.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- import { type AuthConfig } from '../types.ts';
1
+ import { type RuntimeRef } from '@vibesdotdev/kernel';
2
+ import { type AuthConfig, type RequestOptions } from '../types.ts';
3
+ import { type ClientFetch, type RequestBody } from './client-values.ts';
2
4
  export interface SSEEvent<T = unknown> {
3
5
  event?: string;
4
6
  data: T;
@@ -7,17 +9,19 @@ export interface SSEEvent<T = unknown> {
7
9
  }
8
10
  export type SSEStreamOptions = {
9
11
  method?: string;
10
- params?: Record<string, string | number | boolean>;
11
- query?: Record<string, string | number | boolean | string[] | undefined>;
12
- body?: unknown;
12
+ params?: RequestOptions['params'];
13
+ query?: RequestOptions['query'];
14
+ body?: RequestBody;
13
15
  headers?: Record<string, string>;
14
16
  timeout?: number;
15
17
  };
18
+ /** Frames persist across byte chunks; only a blank line dispatches a data-bearing frame. */
16
19
  export declare function streamSSE<T = unknown>(args: {
17
20
  baseUrl: string;
18
21
  auth: AuthConfig;
19
- fetchImpl: typeof fetch;
22
+ fetchImpl: ClientFetch;
20
23
  path: string;
21
24
  options?: SSEStreamOptions;
25
+ runtime?: RuntimeRef;
22
26
  }): AsyncIterableIterator<SSEEvent<T>>;
23
27
  //# sourceMappingURL=sse-stream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sse-stream.d.ts","sourceRoot":"","sources":["../../../../src/lib/client/internal/sse-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAoC,MAAM,aAAa,CAAC;AAEhF,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAuB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC3B,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAyGrC"}
1
+ {"version":3,"file":"sse-stream.d.ts","sourceRoot":"","sources":["../../../../src/lib/client/internal/sse-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAe,MAAM,aAAa,CAAC;AAIhF,OAAO,EAA4G,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAElL,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IAAI,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE;AAChG,MAAM,MAAM,gBAAgB,GAAG;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACpF,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CACvE,CAAC;AACF,4FAA4F;AAC5F,wBAAuB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE;IACnD,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IACxE,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAC;CACjD,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAuErC"}
@@ -1,110 +1,112 @@
1
+ import { CaughtFailureSchema } from '@vibesdotdev/kernel';
1
2
  import { ClientError } from "../types.js";
3
+ import { buildAuthHeaders } from "./auth-headers.js";
4
+ import { createTimeoutSignal } from "./timeout-signal.js";
5
+ import { buildUrl } from "./base-helpers.js";
6
+ import { decodeSSEData, readClientValue, readClientFields, encodeClientBody, NativeBodySchema, RequestInputSchema } from "./client-values.js";
7
+ /** Frames persist across byte chunks; only a blank line dispatches a data-bearing frame. */
2
8
  export async function* streamSSE(args) {
3
- const options = args.options ?? {};
4
- let url = `${args.baseUrl}${args.path}`;
5
- if (options.params) {
6
- for (const [key, value] of Object.entries(options.params)) {
7
- url = url.replace(`:${key}`, String(value));
8
- url = url.replace(`{${key}}`, String(value));
9
- }
10
- }
11
- if (options.query) {
12
- const searchParams = new URLSearchParams();
13
- for (const [key, value] of Object.entries(options.query)) {
14
- if (value === undefined || value === null)
15
- continue;
16
- if (Array.isArray(value))
17
- value.forEach((v) => searchParams.append(key, String(v)));
18
- else
19
- searchParams.append(key, String(value));
20
- }
21
- const queryString = searchParams.toString();
22
- if (queryString)
23
- url += `?${queryString}`;
24
- }
25
- const headers = { Accept: 'text/event-stream', ...options.headers };
26
- if (!('Content-Type' in headers))
27
- headers['Content-Type'] = 'application/json';
28
- if (args.auth.type === 'apiKey' && args.auth.credentials) {
29
- headers['X-API-Key'] = args.auth.credentials;
30
- }
31
- else if (args.auth.type === 'bearer') {
32
- const token = args.auth.tokenProvider ? await args.auth.tokenProvider() : args.auth.credentials;
33
- if (token)
34
- headers.Authorization = `Bearer ${token}`;
35
- }
36
- const requestOptions = {
37
- method: options.method || 'POST',
38
- path: args.path,
39
- params: options.params,
40
- query: options.query,
41
- body: options.body,
42
- headers: options.headers,
43
- timeout: options.timeout
44
- };
45
- const requestInit = { method: requestOptions.method, headers };
46
- if (requestOptions.timeout) {
47
- const controller = new AbortController();
48
- setTimeout(() => controller.abort(), requestOptions.timeout);
49
- requestInit.signal = controller.signal;
50
- }
51
- if (options.body !== undefined)
52
- requestInit.body = JSON.stringify(options.body);
53
- const response = await args.fetchImpl(url, requestInit);
54
- if (!response.ok) {
55
- throw new ClientError(`SSE stream failed: ${response.statusText}`, response.status, response, requestOptions);
56
- }
57
- if (!response.body) {
58
- throw new ClientError('No response body for SSE stream', response.status, response, requestOptions);
59
- }
60
- const reader = response.body.getReader();
61
- const decoder = new TextDecoder();
62
- let buffer = '';
9
+ const supplied = readClientFields(() => ({ ...args.options }), 'client-stream-unreadable');
10
+ const request = readClientValue(RequestInputSchema, { ...supplied, method: supplied.method ?? 'POST', path: args.path }, 'client-stream-invalid');
11
+ const options = request;
12
+ let path = request.path;
13
+ for (const [key, value] of Object.entries(options.params ?? {}))
14
+ path = path.replaceAll(`{${key}}`, encodeURIComponent(String(value))).replaceAll(`:${key}`, encodeURIComponent(String(value)));
15
+ const url = buildUrl(args.baseUrl, path, options.query);
16
+ const headers = new Headers(options.headers);
17
+ if (!headers.has('Accept'))
18
+ headers.set('Accept', 'text/event-stream');
19
+ if (!headers.has('Content-Type') && !NativeBodySchema.safeParse(options.body).success)
20
+ headers.set('Content-Type', 'application/json');
21
+ for (const [name, value] of Object.entries(await buildAuthHeaders(args.auth)))
22
+ headers.set(name, value);
23
+ const deadline = createTimeoutSignal(args.runtime, options.timeout ?? 30000);
24
+ const init = { method: request.method, headers, signal: deadline.signal };
25
+ let reader;
26
+ let ended = false;
63
27
  try {
28
+ if (options.body !== undefined)
29
+ init.body = encodeClientBody(options.body, headers.get('Content-Type'));
30
+ const response = await args.fetchImpl(url.href, init);
31
+ reader = response.body?.getReader();
32
+ if (!response.ok)
33
+ throw new ClientError(`SSE stream failed (HTTP ${response.status}).`, response.status, response, request);
34
+ if (!response.body)
35
+ throw new ClientError('The SSE response has no body.', 502, response, request);
36
+ reader = reader;
37
+ const decoder = new TextDecoder();
38
+ let buffer = '', event, id, retry;
39
+ let data = [];
40
+ let frameChars = 0;
64
41
  while (true) {
65
- const { done, value } = await reader.read();
66
- if (done)
42
+ const chunk = await reader.read();
43
+ if (chunk.done) {
44
+ ended = true;
67
45
  break;
68
- buffer += decoder.decode(value, { stream: true });
69
- const lines = buffer.split('\n');
70
- buffer = lines.pop() || '';
71
- let currentEvent = {};
72
- for (const line of lines) {
73
- if (line.trim() === '') {
74
- if (currentEvent.data !== undefined) {
75
- yield currentEvent;
76
- currentEvent = {};
77
- }
78
- continue;
79
- }
80
- if (line.startsWith('event:')) {
81
- currentEvent.event = line.slice(6).trim();
82
- continue;
83
- }
84
- if (line.startsWith('data:')) {
85
- const dataStr = line.slice(5).trim();
86
- if (dataStr === '[DONE]')
87
- return;
88
- try {
89
- currentEvent.data = JSON.parse(dataStr);
90
- }
91
- catch {
92
- currentEvent.data = dataStr;
46
+ }
47
+ buffer += decoder.decode(chunk.value, { stream: true });
48
+ let newline;
49
+ while ((newline = buffer.indexOf('\n')) !== -1) {
50
+ const line = buffer.slice(0, newline).replace(/\r$/, '');
51
+ buffer = buffer.slice(newline + 1);
52
+ frameChars += line.length;
53
+ if (frameChars > 1024 * 1024)
54
+ throw new ClientError('The SSE frame exceeds its size limit.', 502, response, request);
55
+ if (line === '') {
56
+ if (data.length) {
57
+ const text = data.join('\n');
58
+ if (text === '[DONE]')
59
+ return;
60
+ // SAFETY: The endpoint caller binds T to its JSON or raw-text SSE payload.
61
+ yield { event, id, retry, data: decodeSSEData(text) };
93
62
  }
63
+ event = undefined;
64
+ retry = undefined;
65
+ data = [];
66
+ frameChars = 0;
94
67
  continue;
95
68
  }
96
- if (line.startsWith('id:')) {
97
- currentEvent.id = line.slice(3).trim();
69
+ if (line.startsWith(':'))
98
70
  continue;
99
- }
100
- if (line.startsWith('retry:')) {
101
- currentEvent.retry = parseInt(line.slice(6).trim());
102
- }
71
+ const colon = line.indexOf(':');
72
+ const field = colon < 0 ? line : line.slice(0, colon);
73
+ const value = colon < 0 ? '' : line.slice(colon + 1).replace(/^ /, '');
74
+ if (field === 'data')
75
+ data.push(value);
76
+ else if (field === 'event')
77
+ event = value;
78
+ else if (field === 'id' && !value.includes('\0'))
79
+ id = value;
80
+ else if (field === 'retry' && /^\d+$/.test(value) && Number.isSafeInteger(Number(value)))
81
+ retry = Number(value);
103
82
  }
83
+ if (buffer.length + frameChars > 1024 * 1024)
84
+ throw new ClientError('The SSE frame exceeds its size limit.', 502, response, request);
104
85
  }
105
86
  }
87
+ catch (error) {
88
+ const failure = CaughtFailureSchema.parse(error);
89
+ if (reader && !ended) {
90
+ const cleanup = await reader.cancel(failure).then(() => ({ ok: true }), error => ({ ok: false, cause: CaughtFailureSchema.parse(error) }));
91
+ ended = true;
92
+ if (!cleanup.ok && cleanup.cause !== failure)
93
+ throw new ClientError('The SSE transport and its cleanup failed.', deadline.signal.aborted ? 408 : 0, undefined, request, { cause: new AggregateError([failure, cleanup.cause]) });
94
+ }
95
+ if (failure instanceof ClientError)
96
+ throw failure;
97
+ throw new ClientError('The SSE transport failed.', deadline.signal.aborted ? 408 : 0, undefined, request, { cause: failure });
98
+ }
106
99
  finally {
107
- reader.releaseLock();
100
+ deadline.dispose();
101
+ if (reader) {
102
+ try {
103
+ if (!ended)
104
+ await reader.cancel();
105
+ }
106
+ finally {
107
+ reader.releaseLock();
108
+ }
109
+ }
108
110
  }
109
111
  }
110
112
  //# sourceMappingURL=sse-stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sse-stream.js","sourceRoot":"","sources":["../../../../src/lib/client/internal/sse-stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse-stream.js","sourceRoot":"","sources":["../../../../src/lib/client/internal/sse-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type RuntimeRef } from '@vibesdotdev/kernel';
2
+ export interface TimeoutSignal {
3
+ signal: AbortSignal;
4
+ dispose(): void;
5
+ }
6
+ /** Handed runtimes own deadlines and abort requests when their lifecycle ends. */
7
+ export declare function createTimeoutSignal(runtime: RuntimeRef | undefined, timeoutMs: number): TimeoutSignal;
8
+ //# sourceMappingURL=timeout-signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout-signal.d.ts","sourceRoot":"","sources":["../../../../src/lib/client/internal/timeout-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGvE,MAAM,WAAW,aAAa;IAAG,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,IAAI,IAAI,CAAC;CAAE;AACxE,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,CASrG"}