ts-procedures 5.15.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/README.md +2 -0
  2. package/agent_config/claude-code/agents/ts-procedures-architect.md +13 -6
  3. package/agent_config/claude-code/skills/ts-procedures/SKILL.md +26 -4
  4. package/agent_config/claude-code/skills/ts-procedures/anti-patterns.md +85 -17
  5. package/agent_config/claude-code/skills/ts-procedures/api-reference.md +220 -9
  6. package/agent_config/claude-code/skills/ts-procedures/patterns.md +271 -16
  7. package/agent_config/claude-code/skills/ts-procedures-review/SKILL.md +1 -1
  8. package/agent_config/claude-code/skills/ts-procedures-review/checklist.md +20 -12
  9. package/agent_config/claude-code/skills/ts-procedures-scaffold/SKILL.md +2 -1
  10. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/client.md +53 -18
  11. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/express-rpc.md +20 -17
  12. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/hono-api.md +20 -16
  13. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/hono-rpc.md +20 -17
  14. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/hono-stream.md +16 -3
  15. package/agent_config/copilot/copilot-instructions.md +132 -19
  16. package/agent_config/cursor/cursorrules +132 -19
  17. package/build/client/call.d.ts +19 -9
  18. package/build/client/call.js +33 -19
  19. package/build/client/call.js.map +1 -1
  20. package/build/client/call.test.js +167 -17
  21. package/build/client/call.test.js.map +1 -1
  22. package/build/client/error-dispatch.d.ts +13 -0
  23. package/build/client/error-dispatch.js +26 -0
  24. package/build/client/error-dispatch.js.map +1 -0
  25. package/build/client/error-dispatch.test.d.ts +1 -0
  26. package/build/client/error-dispatch.test.js +56 -0
  27. package/build/client/error-dispatch.test.js.map +1 -0
  28. package/build/client/fetch-adapter.js +10 -4
  29. package/build/client/fetch-adapter.js.map +1 -1
  30. package/build/client/index.d.ts +2 -1
  31. package/build/client/index.js +22 -3
  32. package/build/client/index.js.map +1 -1
  33. package/build/client/index.test.js +104 -0
  34. package/build/client/index.test.js.map +1 -1
  35. package/build/client/resolve-options.d.ts +45 -0
  36. package/build/client/resolve-options.js +82 -0
  37. package/build/client/resolve-options.js.map +1 -0
  38. package/build/client/resolve-options.test.d.ts +1 -0
  39. package/build/client/resolve-options.test.js +158 -0
  40. package/build/client/resolve-options.test.js.map +1 -0
  41. package/build/client/stream.d.ts +19 -9
  42. package/build/client/stream.js +36 -21
  43. package/build/client/stream.js.map +1 -1
  44. package/build/client/stream.test.js +102 -46
  45. package/build/client/stream.test.js.map +1 -1
  46. package/build/client/typed-error-dispatch.test.d.ts +1 -0
  47. package/build/client/typed-error-dispatch.test.js +168 -0
  48. package/build/client/typed-error-dispatch.test.js.map +1 -0
  49. package/build/client/types.d.ts +105 -1
  50. package/build/client/types.js +1 -1
  51. package/build/codegen/e2e.test.js +150 -4
  52. package/build/codegen/e2e.test.js.map +1 -1
  53. package/build/codegen/emit-client-runtime.js +7 -0
  54. package/build/codegen/emit-client-runtime.js.map +1 -1
  55. package/build/codegen/emit-errors.d.ts +17 -6
  56. package/build/codegen/emit-errors.integration.test.d.ts +1 -0
  57. package/build/codegen/emit-errors.integration.test.js +162 -0
  58. package/build/codegen/emit-errors.integration.test.js.map +1 -0
  59. package/build/codegen/emit-errors.js +50 -39
  60. package/build/codegen/emit-errors.js.map +1 -1
  61. package/build/codegen/emit-errors.test.js +75 -78
  62. package/build/codegen/emit-errors.test.js.map +1 -1
  63. package/build/codegen/emit-index.d.ts +7 -0
  64. package/build/codegen/emit-index.js +26 -4
  65. package/build/codegen/emit-index.js.map +1 -1
  66. package/build/codegen/emit-index.test.js +55 -23
  67. package/build/codegen/emit-index.test.js.map +1 -1
  68. package/build/codegen/emit-scope.d.ts +8 -0
  69. package/build/codegen/emit-scope.js +82 -7
  70. package/build/codegen/emit-scope.js.map +1 -1
  71. package/build/codegen/pipeline.js +22 -2
  72. package/build/codegen/pipeline.js.map +1 -1
  73. package/build/implementations/http/doc-registry.d.ts +21 -0
  74. package/build/implementations/http/doc-registry.js +51 -78
  75. package/build/implementations/http/doc-registry.js.map +1 -1
  76. package/build/implementations/http/doc-registry.test.js +8 -6
  77. package/build/implementations/http/doc-registry.test.js.map +1 -1
  78. package/build/implementations/http/error-taxonomy.d.ts +240 -0
  79. package/build/implementations/http/error-taxonomy.js +230 -0
  80. package/build/implementations/http/error-taxonomy.js.map +1 -0
  81. package/build/implementations/http/error-taxonomy.test.d.ts +1 -0
  82. package/build/implementations/http/error-taxonomy.test.js +399 -0
  83. package/build/implementations/http/error-taxonomy.test.js.map +1 -0
  84. package/build/implementations/http/express-rpc/error-taxonomy.test.d.ts +1 -0
  85. package/build/implementations/http/express-rpc/error-taxonomy.test.js +83 -0
  86. package/build/implementations/http/express-rpc/error-taxonomy.test.js.map +1 -0
  87. package/build/implementations/http/express-rpc/index.d.ts +39 -8
  88. package/build/implementations/http/express-rpc/index.js +39 -8
  89. package/build/implementations/http/express-rpc/index.js.map +1 -1
  90. package/build/implementations/http/hono-api/error-taxonomy.test.d.ts +1 -0
  91. package/build/implementations/http/hono-api/error-taxonomy.test.js +137 -0
  92. package/build/implementations/http/hono-api/error-taxonomy.test.js.map +1 -0
  93. package/build/implementations/http/hono-api/index.d.ts +38 -1
  94. package/build/implementations/http/hono-api/index.js +32 -0
  95. package/build/implementations/http/hono-api/index.js.map +1 -1
  96. package/build/implementations/http/hono-rpc/error-taxonomy.test.d.ts +1 -0
  97. package/build/implementations/http/hono-rpc/error-taxonomy.test.js +64 -0
  98. package/build/implementations/http/hono-rpc/error-taxonomy.test.js.map +1 -0
  99. package/build/implementations/http/hono-rpc/index.d.ts +34 -7
  100. package/build/implementations/http/hono-rpc/index.js +31 -4
  101. package/build/implementations/http/hono-rpc/index.js.map +1 -1
  102. package/build/implementations/http/hono-stream/error-taxonomy.test.d.ts +1 -0
  103. package/build/implementations/http/hono-stream/error-taxonomy.test.js +87 -0
  104. package/build/implementations/http/hono-stream/error-taxonomy.test.js.map +1 -0
  105. package/build/implementations/http/hono-stream/index.d.ts +40 -3
  106. package/build/implementations/http/hono-stream/index.js +37 -10
  107. package/build/implementations/http/hono-stream/index.js.map +1 -1
  108. package/build/implementations/http/hono-stream/index.test.js +45 -18
  109. package/build/implementations/http/hono-stream/index.test.js.map +1 -1
  110. package/build/implementations/http/on-request-error.test.d.ts +1 -0
  111. package/build/implementations/http/on-request-error.test.js +173 -0
  112. package/build/implementations/http/on-request-error.test.js.map +1 -0
  113. package/build/implementations/http/route-errors.test.d.ts +1 -0
  114. package/build/implementations/http/route-errors.test.js +140 -0
  115. package/build/implementations/http/route-errors.test.js.map +1 -0
  116. package/build/implementations/types.d.ts +30 -2
  117. package/docs/client-and-codegen.md +228 -14
  118. package/docs/core.md +14 -5
  119. package/docs/http-integrations.md +135 -4
  120. package/docs/streaming.md +3 -1
  121. package/package.json +7 -2
  122. package/src/client/call.test.ts +202 -29
  123. package/src/client/call.ts +50 -28
  124. package/src/client/error-dispatch.test.ts +72 -0
  125. package/src/client/error-dispatch.ts +27 -0
  126. package/src/client/fetch-adapter.ts +11 -5
  127. package/src/client/index.test.ts +117 -0
  128. package/src/client/index.ts +34 -8
  129. package/src/client/resolve-options.test.ts +205 -0
  130. package/src/client/resolve-options.ts +113 -0
  131. package/src/client/stream.test.ts +132 -107
  132. package/src/client/stream.ts +53 -27
  133. package/src/client/typed-error-dispatch.test.ts +211 -0
  134. package/src/client/types.ts +116 -2
  135. package/src/codegen/e2e.test.ts +160 -4
  136. package/src/codegen/emit-client-runtime.ts +7 -0
  137. package/src/codegen/emit-errors.integration.test.ts +183 -0
  138. package/src/codegen/emit-errors.test.ts +91 -87
  139. package/src/codegen/emit-errors.ts +123 -41
  140. package/src/codegen/emit-index.test.ts +68 -24
  141. package/src/codegen/emit-index.ts +66 -4
  142. package/src/codegen/emit-scope.ts +124 -7
  143. package/src/codegen/pipeline.ts +25 -2
  144. package/src/implementations/http/README.md +28 -5
  145. package/src/implementations/http/doc-registry.test.ts +10 -6
  146. package/src/implementations/http/doc-registry.ts +63 -80
  147. package/src/implementations/http/error-taxonomy.test.ts +438 -0
  148. package/src/implementations/http/error-taxonomy.ts +337 -0
  149. package/src/implementations/http/express-rpc/README.md +21 -22
  150. package/src/implementations/http/express-rpc/error-taxonomy.test.ts +103 -0
  151. package/src/implementations/http/express-rpc/index.ts +75 -14
  152. package/src/implementations/http/hono-api/README.md +284 -0
  153. package/src/implementations/http/hono-api/error-taxonomy.test.ts +179 -0
  154. package/src/implementations/http/hono-api/index.ts +76 -1
  155. package/src/implementations/http/hono-rpc/README.md +18 -19
  156. package/src/implementations/http/hono-rpc/error-taxonomy.test.ts +82 -0
  157. package/src/implementations/http/hono-rpc/index.ts +65 -9
  158. package/src/implementations/http/hono-stream/README.md +44 -25
  159. package/src/implementations/http/hono-stream/error-taxonomy.test.ts +98 -0
  160. package/src/implementations/http/hono-stream/index.test.ts +54 -18
  161. package/src/implementations/http/hono-stream/index.ts +83 -13
  162. package/src/implementations/http/on-request-error.test.ts +201 -0
  163. package/src/implementations/http/route-errors.test.ts +177 -0
  164. package/src/implementations/types.ts +30 -2
@@ -32,6 +32,9 @@ function makeStreamAdapter(response, items) {
32
32
  })),
33
33
  };
34
34
  }
35
+ function run({ adapter, hooks = {}, defaults, options, descriptor = makeDescriptor(), basePath = 'https://api.example.com', }) {
36
+ return executeStream({ descriptor, basePath, adapter, hooks, defaults, options });
37
+ }
35
38
  // ── createTypedStream — SSE mode ──────────────────────────
36
39
  describe('createTypedStream — SSE mode', () => {
37
40
  it('yields data payloads for normal events', async () => {
@@ -41,9 +44,8 @@ describe('createTypedStream — SSE mode', () => {
41
44
  ];
42
45
  const stream = createTypedStream(makeAsyncIterable(sseItems), 'sse');
43
46
  const received = [];
44
- for await (const item of stream) {
47
+ for await (const item of stream)
45
48
  received.push(item);
46
- }
47
49
  expect(received).toEqual([{ count: 1 }, { count: 2 }]);
48
50
  });
49
51
  it('captures return event data in .result instead of yielding', async () => {
@@ -53,23 +55,15 @@ describe('createTypedStream — SSE mode', () => {
53
55
  ];
54
56
  const stream = createTypedStream(makeAsyncIterable(sseItems), 'sse');
55
57
  const yielded = [];
56
- for await (const item of stream) {
58
+ for await (const item of stream)
57
59
  yielded.push(item);
58
- }
59
- // Only the 'update' event is yielded
60
60
  expect(yielded).toEqual([{ count: 1 }]);
61
- // The 'return' event resolves .result
62
- const result = await stream.result;
63
- expect(result).toEqual({ total: 99 });
61
+ await expect(stream.result).resolves.toEqual({ total: 99 });
64
62
  });
65
63
  it('resolves .result with undefined when no return event', async () => {
66
- const sseItems = [
67
- { data: 'hello', event: 'message' },
68
- ];
69
- const stream = createTypedStream(makeAsyncIterable(sseItems), 'sse');
64
+ const stream = createTypedStream(makeAsyncIterable([{ data: 'hello', event: 'message' }]), 'sse');
70
65
  for await (const _ of stream) { /* drain */ }
71
- const result = await stream.result;
72
- expect(result).toBeUndefined();
66
+ await expect(stream.result).resolves.toBeUndefined();
73
67
  });
74
68
  it('rejects .result and re-throws on error', async () => {
75
69
  async function* errorIterable() {
@@ -77,23 +71,16 @@ describe('createTypedStream — SSE mode', () => {
77
71
  throw new Error('stream broke');
78
72
  }
79
73
  const stream = createTypedStream(errorIterable(), 'sse');
80
- // Consuming the stream should throw
81
74
  await expect(async () => {
82
75
  for await (const _ of stream) { /* drain */ }
83
76
  }).rejects.toThrow('stream broke');
84
- // .result should also reject
85
77
  await expect(stream.result).rejects.toThrow('stream broke');
86
78
  });
87
79
  it('handles SSE items without event field (defaults to yielding data)', async () => {
88
- const sseItems = [
89
- { data: 'a' },
90
- { data: 'b' },
91
- ];
92
- const stream = createTypedStream(makeAsyncIterable(sseItems), 'sse');
80
+ const stream = createTypedStream(makeAsyncIterable([{ data: 'a' }, { data: 'b' }]), 'sse');
93
81
  const yielded = [];
94
- for await (const item of stream) {
82
+ for await (const item of stream)
95
83
  yielded.push(item);
96
- }
97
84
  expect(yielded).toEqual(['a', 'b']);
98
85
  });
99
86
  });
@@ -103,16 +90,14 @@ describe('createTypedStream — text mode', () => {
103
90
  const chunks = ['chunk1', 'chunk2', 'chunk3'];
104
91
  const stream = createTypedStream(makeAsyncIterable(chunks), 'text');
105
92
  const received = [];
106
- for await (const chunk of stream) {
93
+ for await (const chunk of stream)
107
94
  received.push(chunk);
108
- }
109
95
  expect(received).toEqual(chunks);
110
96
  });
111
97
  it('.result resolves to void on normal completion', async () => {
112
98
  const stream = createTypedStream(makeAsyncIterable(['a', 'b']), 'text');
113
99
  for await (const _ of stream) { /* drain */ }
114
- const result = await stream.result;
115
- expect(result).toBeUndefined();
100
+ await expect(stream.result).resolves.toBeUndefined();
116
101
  });
117
102
  it('rejects .result and re-throws on error', async () => {
118
103
  async function* errorIterable() {
@@ -131,12 +116,11 @@ describe('executeStream', () => {
131
116
  it('calls adapter.stream and returns a TypedStream', async () => {
132
117
  const items = [{ data: 'hello', event: 'msg' }];
133
118
  const adapter = makeStreamAdapter({}, items);
134
- const stream = await executeStream(makeDescriptor(), 'https://api.example.com', adapter, {}, undefined);
119
+ const stream = await run({ adapter });
135
120
  expect(adapter.stream).toHaveBeenCalledOnce();
136
121
  const received = [];
137
- for await (const item of stream) {
122
+ for await (const item of stream)
138
123
  received.push(item);
139
- }
140
124
  expect(received).toEqual(['hello']);
141
125
  });
142
126
  it('runs onBeforeRequest before calling adapter', async () => {
@@ -148,15 +132,14 @@ describe('executeStream', () => {
148
132
  return { status: 200, headers: {}, body: makeAsyncIterable([]) };
149
133
  }),
150
134
  };
151
- const globalHooks = {
135
+ const hooks = {
152
136
  onBeforeRequest: (ctx) => ({
153
137
  ...ctx,
154
138
  request: { ...ctx.request, headers: { 'x-stream-auth': 'stream-token' } },
155
139
  }),
156
140
  };
157
- const stream = await executeStream(makeDescriptor(), 'https://api.example.com', adapter, globalHooks, undefined);
158
- // Drain
159
- for await (const _ of stream) { /* noop */ }
141
+ const stream = await run({ adapter, hooks });
142
+ for await (const _ of stream) { /* drain */ }
160
143
  expect(capturedHeaders[0]?.['x-stream-auth']).toBe('stream-token');
161
144
  });
162
145
  it('runs onAfterResponse immediately (before iteration)', async () => {
@@ -168,11 +151,10 @@ describe('executeStream', () => {
168
151
  return { status: 200, headers: {}, body: makeAsyncIterable([]) };
169
152
  }),
170
153
  };
171
- const globalHooks = {
154
+ const hooks = {
172
155
  onAfterResponse: () => { order.push('afterResponse'); },
173
156
  };
174
- await executeStream(makeDescriptor(), 'https://api.example.com', adapter, globalHooks, undefined);
175
- // After executeStream returns (before iteration), afterResponse should have fired
157
+ await run({ adapter, hooks });
176
158
  expect(order).toEqual(['adapter', 'afterResponse']);
177
159
  });
178
160
  it('throws ClientRequestError on non-2xx status', async () => {
@@ -184,7 +166,7 @@ describe('executeStream', () => {
184
166
  body: makeAsyncIterable([]),
185
167
  })),
186
168
  };
187
- await expect(executeStream(makeDescriptor(), 'https://api.example.com', adapter, {}, undefined)).rejects.toThrow(ClientRequestError);
169
+ await expect(run({ adapter })).rejects.toThrow(ClientRequestError);
188
170
  });
189
171
  it('runs onError on adapter failure and re-throws', async () => {
190
172
  const adapterError = new Error('stream connection failed');
@@ -193,10 +175,10 @@ describe('executeStream', () => {
193
175
  stream: vi.fn(async () => { throw adapterError; }),
194
176
  };
195
177
  const receivedErrors = [];
196
- const globalHooks = {
178
+ const hooks = {
197
179
  onError: (ctx) => { receivedErrors.push(ctx.error); },
198
180
  };
199
- await expect(executeStream(makeDescriptor(), 'https://api.example.com', adapter, globalHooks, undefined)).rejects.toThrow('stream connection failed');
181
+ await expect(run({ adapter, hooks })).rejects.toThrow('stream connection failed');
200
182
  expect(receivedErrors[0]).toBe(adapterError);
201
183
  });
202
184
  it('returns TypedStream with working .result for SSE return event', async () => {
@@ -205,24 +187,98 @@ describe('executeStream', () => {
205
187
  { data: { final: true }, event: 'return' },
206
188
  ];
207
189
  const adapter = makeStreamAdapter({}, sseItems);
208
- const stream = await executeStream(makeDescriptor({ streamMode: 'sse' }), 'https://api.example.com', adapter, {}, undefined);
190
+ const stream = await run({
191
+ adapter,
192
+ descriptor: makeDescriptor({ streamMode: 'sse' }),
193
+ });
209
194
  const yielded = [];
210
- for await (const item of stream) {
195
+ for await (const item of stream)
211
196
  yielded.push(item);
212
- }
213
197
  expect(yielded).toEqual([{ n: 1 }]);
214
198
  await expect(stream.result).resolves.toEqual({ final: true });
215
199
  });
216
200
  it('returns TypedStream for text mode', async () => {
217
201
  const chunks = ['line1', 'line2'];
218
202
  const adapter = makeStreamAdapter({}, chunks);
219
- const stream = await executeStream(makeDescriptor({ streamMode: 'text' }), 'https://api.example.com', adapter, {}, undefined);
203
+ const stream = await run({
204
+ adapter,
205
+ descriptor: makeDescriptor({ streamMode: 'text' }),
206
+ });
220
207
  const received = [];
221
- for await (const chunk of stream) {
208
+ for await (const chunk of stream)
222
209
  received.push(chunk);
223
- }
224
210
  expect(received).toEqual(chunks);
225
211
  await expect(stream.result).resolves.toBeUndefined();
226
212
  });
213
+ // ── Per-call options ──
214
+ it('per-call timeout attaches a signal via AbortSignal.timeout', async () => {
215
+ const spy = vi.spyOn(AbortSignal, 'timeout');
216
+ try {
217
+ let observedSignal;
218
+ const adapter = {
219
+ request: vi.fn(async () => { throw new Error('not expected'); }),
220
+ stream: vi.fn(async (req) => {
221
+ observedSignal = req.signal;
222
+ return { status: 200, headers: {}, body: makeAsyncIterable([]) };
223
+ }),
224
+ };
225
+ await run({ adapter, options: { timeout: 5000 } });
226
+ expect(spy).toHaveBeenCalledWith(5000);
227
+ expect(observedSignal).toBeDefined();
228
+ }
229
+ finally {
230
+ spy.mockRestore();
231
+ }
232
+ });
233
+ it('adapter receives a signal that reflects abort when the caller cancels', async () => {
234
+ const controller = new AbortController();
235
+ const adapter = {
236
+ request: vi.fn(async () => { throw new Error('not expected'); }),
237
+ stream: vi.fn(async (req) => {
238
+ return new Promise((_resolve, reject) => {
239
+ const abort = () => reject(new Error('aborted'));
240
+ if (req.signal?.aborted)
241
+ abort();
242
+ else
243
+ req.signal?.addEventListener('abort', abort, { once: true });
244
+ });
245
+ }),
246
+ };
247
+ const promise = run({ adapter, options: { signal: controller.signal } });
248
+ // Let executeStream reach the adapter before aborting
249
+ await Promise.resolve();
250
+ controller.abort();
251
+ await expect(promise).rejects.toThrow('aborted');
252
+ });
253
+ it('per-call basePath overrides base path for streams', async () => {
254
+ const capturedUrls = [];
255
+ const adapter = {
256
+ request: vi.fn(async () => { throw new Error('not expected'); }),
257
+ stream: vi.fn(async (req) => {
258
+ capturedUrls.push(req.url);
259
+ return { status: 200, headers: {}, body: makeAsyncIterable([]) };
260
+ }),
261
+ };
262
+ const stream = await run({
263
+ adapter,
264
+ descriptor: makeDescriptor({ path: '/tail' }),
265
+ basePath: 'https://default.example.com',
266
+ options: { basePath: 'https://override.example.com' },
267
+ });
268
+ for await (const _ of stream) { /* drain */ }
269
+ expect(capturedUrls[0]).toBe('https://override.example.com/tail');
270
+ });
271
+ it('per-call meta is forwarded to the adapter', async () => {
272
+ let observedMeta;
273
+ const adapter = {
274
+ request: vi.fn(async () => { throw new Error('not expected'); }),
275
+ stream: vi.fn(async (req) => {
276
+ observedMeta = req.meta;
277
+ return { status: 200, headers: {}, body: makeAsyncIterable([]) };
278
+ }),
279
+ };
280
+ await run({ adapter, options: { meta: { traceId: 'stream-trace' } } });
281
+ expect(observedMeta).toEqual({ traceId: 'stream-trace' });
282
+ });
227
283
  });
228
284
  //# sourceMappingURL=stream.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.test.js","sourceRoot":"","sources":["../../src/client/stream.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.test.js","sourceRoot":"","sources":["../../src/client/stream.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,168 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-object-type */
2
+ import { describe, expect, test } from 'vitest';
3
+ import { Type } from 'typebox';
4
+ import { Procedures } from '../index.js';
5
+ import { HonoAPIAppBuilder, defineErrorTaxonomy } from '../implementations/http/hono-api/index.js';
6
+ import { createClient } from './index.js';
7
+ import { ClientRequestError } from './errors.js';
8
+ // ---------------------------------------------------------------------------
9
+ // Error taxonomy + simulated generated error classes
10
+ // ---------------------------------------------------------------------------
11
+ class UseCaseError extends Error {
12
+ externalMsg;
13
+ internalMsg;
14
+ constructor(externalMsg, internalMsg) {
15
+ super(externalMsg);
16
+ this.externalMsg = externalMsg;
17
+ this.internalMsg = internalMsg;
18
+ this.name = 'UseCaseError';
19
+ Object.setPrototypeOf(this, UseCaseError.prototype);
20
+ }
21
+ }
22
+ const appErrors = defineErrorTaxonomy({
23
+ UseCaseError: {
24
+ class: UseCaseError,
25
+ statusCode: 422,
26
+ toResponse: (err) => ({ message: err.externalMsg }),
27
+ },
28
+ });
29
+ // Simulates what the codegen emits: a runtime class + a registry entry the
30
+ // client uses for dispatch. In real usage this comes from the generated
31
+ // `_errors.ts`; here we inline it to test the client-side dispatch path end
32
+ // to end without invoking the codegen pipeline.
33
+ class ApiUseCaseError extends Error {
34
+ status;
35
+ procedureName;
36
+ scope;
37
+ body;
38
+ constructor(args) {
39
+ super(args.message);
40
+ this.name = 'UseCaseError';
41
+ this.status = args.status;
42
+ this.procedureName = args.procedureName;
43
+ this.scope = args.scope;
44
+ this.body = args.body;
45
+ Object.setPrototypeOf(this, ApiUseCaseError.prototype);
46
+ }
47
+ static fromResponse(body, meta) {
48
+ const b = body;
49
+ return new ApiUseCaseError({
50
+ message: b.message,
51
+ status: meta.status,
52
+ procedureName: meta.procedureName,
53
+ scope: meta.scope,
54
+ body: b,
55
+ });
56
+ }
57
+ }
58
+ const errorRegistry = { UseCaseError: ApiUseCaseError };
59
+ function honoAdapter(app) {
60
+ return {
61
+ async request(req) {
62
+ const res = await Promise.resolve(app.request(req.url, {
63
+ method: req.method,
64
+ headers: req.headers,
65
+ body: req.body !== undefined ? JSON.stringify(req.body) : undefined,
66
+ }));
67
+ const headers = {};
68
+ res.headers.forEach((v, k) => (headers[k] = v));
69
+ const body = await res.json().catch(() => null);
70
+ return { status: res.status, headers, body };
71
+ },
72
+ async stream() {
73
+ throw new Error('not used');
74
+ },
75
+ };
76
+ }
77
+ // ---------------------------------------------------------------------------
78
+ // Tests
79
+ // ---------------------------------------------------------------------------
80
+ describe('typed error dispatch — end-to-end', () => {
81
+ function buildApp() {
82
+ const API = Procedures();
83
+ API.Create('GetUser', {
84
+ path: '/users/:id',
85
+ method: 'get',
86
+ schema: {
87
+ input: { pathParams: Type.Object({ id: Type.String() }) },
88
+ returnType: Type.Object({ id: Type.String() }),
89
+ },
90
+ }, async (_ctx, { pathParams }) => {
91
+ if (pathParams.id === 'missing') {
92
+ throw new UseCaseError('User not found', `no user with id=${pathParams.id}`);
93
+ }
94
+ return { id: pathParams.id };
95
+ });
96
+ return new HonoAPIAppBuilder({ errors: appErrors }).register(API, () => ({})).build();
97
+ }
98
+ test('server-thrown UseCaseError arrives on client as a typed class instance', async () => {
99
+ const app = buildApp();
100
+ const api = createClient({
101
+ adapter: honoAdapter(app),
102
+ basePath: '',
103
+ errorRegistry,
104
+ scopes: (client) => ({
105
+ getUser: (id) => client.call({
106
+ name: 'GetUser',
107
+ scope: 'users',
108
+ path: '/users/:id',
109
+ method: 'get',
110
+ kind: 'api',
111
+ params: { pathParams: { id } },
112
+ }),
113
+ }),
114
+ });
115
+ await expect(api.getUser('missing')).rejects.toBeInstanceOf(ApiUseCaseError);
116
+ try {
117
+ await api.getUser('missing');
118
+ }
119
+ catch (err) {
120
+ expect(err).toBeInstanceOf(ApiUseCaseError);
121
+ expect(err).toBeInstanceOf(Error);
122
+ expect(err.status).toBe(422);
123
+ expect(err.procedureName).toBe('GetUser');
124
+ expect(err.message).toBe('User not found');
125
+ expect(err.body.name).toBe('UseCaseError');
126
+ }
127
+ });
128
+ test('unregistered error body falls back to ClientRequestError', async () => {
129
+ const app = buildApp();
130
+ // Omit the registry so dispatch can't match; client sees the raw
131
+ // transport error instead of a typed class.
132
+ const api = createClient({
133
+ adapter: honoAdapter(app),
134
+ basePath: '',
135
+ scopes: (client) => ({
136
+ getUser: (id) => client.call({
137
+ name: 'GetUser',
138
+ scope: 'users',
139
+ path: '/users/:id',
140
+ method: 'get',
141
+ kind: 'api',
142
+ params: { pathParams: { id } },
143
+ }),
144
+ }),
145
+ });
146
+ await expect(api.getUser('missing')).rejects.toBeInstanceOf(ClientRequestError);
147
+ });
148
+ test('success responses are not disturbed by dispatch logic', async () => {
149
+ const app = buildApp();
150
+ const api = createClient({
151
+ adapter: honoAdapter(app),
152
+ basePath: '',
153
+ errorRegistry,
154
+ scopes: (client) => ({
155
+ getUser: (id) => client.call({
156
+ name: 'GetUser',
157
+ scope: 'users',
158
+ path: '/users/:id',
159
+ method: 'get',
160
+ kind: 'api',
161
+ params: { pathParams: { id } },
162
+ }),
163
+ }),
164
+ });
165
+ await expect(api.getUser('u_42')).resolves.toEqual({ id: 'u_42' });
166
+ });
167
+ });
168
+ //# sourceMappingURL=typed-error-dispatch.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-error-dispatch.test.js","sourceRoot":"","sources":["../../src/client/typed-error-dispatch.test.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAA;AAClG,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhD,8EAA8E;AAC9E,qDAAqD;AACrD,8EAA8E;AAE9E,MAAM,YAAa,SAAQ,KAAK;IAEnB;IACA;IAFX,YACW,WAAmB,EACnB,WAAmB;QAE5B,KAAK,CAAC,WAAW,CAAC,CAAA;QAHT,gBAAW,GAAX,WAAW,CAAQ;QACnB,gBAAW,GAAX,WAAW,CAAQ;QAG5B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;QAC1B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;IACrD,CAAC;CACF;AAED,MAAM,SAAS,GAAG,mBAAmB,CAAC;IACpC,YAAY,EAAE;QACZ,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;KACpD;CACF,CAAC,CAAA;AAEF,2EAA2E;AAC3E,wEAAwE;AACxE,4EAA4E;AAC5E,gDAAgD;AAChD,MAAM,eAAgB,SAAQ,KAAK;IACxB,MAAM,CAAQ;IACd,aAAa,CAAQ;IACrB,KAAK,CAAQ;IACb,IAAI,CAA2C;IACxD,YAAY,IAMX;QACC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACrB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACxD,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,IAAa,EACb,IAA8D;QAE9D,MAAM,CAAC,GAAG,IAAiD,CAAA;QAC3D,OAAO,IAAI,eAAe,CAAC;YACzB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,CAAC;SACR,CAAC,CAAA;IACJ,CAAC;CACF;AAED,MAAM,aAAa,GAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,CAAA;AAatE,SAAS,WAAW,CAAC,GAAgB;IACnC,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,GAAG;YACf,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAC/B,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBACnB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aACpE,CAAC,CACH,CAAA;YACD,MAAM,OAAO,GAA2B,EAAE,CAAA;YAC1C,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAC/C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;YAC/C,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QAC9C,CAAC;QACD,KAAK,CAAC,MAAM;YACV,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;QAC7B,CAAC;KACF,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,SAAS,QAAQ;QACf,MAAM,GAAG,GAAG,UAAU,EAAiB,CAAA;QACvC,GAAG,CAAC,MAAM,CACR,SAAS,EACT;YACE,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE;gBACN,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBACzD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;aAC/C;SACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YAC7B,IAAI,UAAU,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,mBAAmB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAA;YAC9E,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAA;QAC9B,CAAC,CACF,CAAA;QACD,OAAO,IAAI,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;IACvF,CAAC;IAED,IAAI,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAA;QACtB,MAAM,GAAG,GAAG,YAAY,CAAC;YACvB,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC;YACzB,QAAQ,EAAE,EAAE;YACZ,aAAa;YACb,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACnB,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CACtB,MAAM,CAAC,IAAI,CAAiB;oBAC1B,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,KAAK;oBACX,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE;iBAC/B,CAAC;aACL,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;QAC5E,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;YACjC,MAAM,CAAE,GAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjD,MAAM,CAAE,GAAuB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC9D,MAAM,CAAE,GAAuB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC/D,MAAM,CAAE,GAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACjE,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAA;QACtB,iEAAiE;QACjE,4CAA4C;QAC5C,MAAM,GAAG,GAAG,YAAY,CAAC;YACvB,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC;YACzB,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACnB,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CACtB,MAAM,CAAC,IAAI,CAAiB;oBAC1B,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,KAAK;oBACX,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE;iBAC/B,CAAC;aACL,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAA;QACtB,MAAM,GAAG,GAAG,YAAY,CAAC;YACvB,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC;YACzB,QAAQ,EAAE,EAAE;YACZ,aAAa;YACb,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACnB,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CACtB,MAAM,CAAC,IAAI,CAAiB;oBAC1B,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,KAAK;oBACX,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE;iBAC/B,CAAC;aACL,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IACpE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,3 +1,32 @@
1
+ /**
2
+ * Per-request metadata visible to adapters and hooks. Defined as an empty
3
+ * interface so consumers can augment it via TypeScript declaration merging
4
+ * to get end-to-end type safety for their own metadata fields.
5
+ *
6
+ * @example With a non-self-contained client:
7
+ * ```ts
8
+ * declare module 'ts-procedures/client' {
9
+ * interface RequestMeta {
10
+ * traceId?: string
11
+ * priority?: 'high' | 'low'
12
+ * }
13
+ * }
14
+ * ```
15
+ *
16
+ * @example With a self-contained (code-generated) client:
17
+ * ```ts
18
+ * declare module './generated/_types' {
19
+ * interface RequestMeta {
20
+ * traceId?: string
21
+ * }
22
+ * }
23
+ * ```
24
+ *
25
+ * After augmentation, `request.meta.traceId` is typed everywhere — per-call
26
+ * options, hooks, and adapters.
27
+ */
28
+ export interface RequestMeta {
29
+ }
1
30
  export interface ClientAdapter {
2
31
  request(config: AdapterRequest): Promise<AdapterResponse>;
3
32
  stream(config: AdapterRequest): Promise<AdapterStreamResponse>;
@@ -8,6 +37,11 @@ export interface AdapterRequest {
8
37
  headers?: Record<string, string>;
9
38
  body?: unknown;
10
39
  signal?: AbortSignal;
40
+ /**
41
+ * Per-request metadata. Augment `RequestMeta` via declaration merging to
42
+ * type your own fields. See {@link RequestMeta}.
43
+ */
44
+ meta?: RequestMeta;
11
45
  }
12
46
  export interface AdapterResponse {
13
47
  status: number;
@@ -18,6 +52,12 @@ export interface AdapterStreamResponse {
18
52
  status: number;
19
53
  headers: Record<string, string>;
20
54
  body: AsyncIterable<unknown>;
55
+ /**
56
+ * Populated when `status` is non-2xx — the parsed response body. Surfaced so
57
+ * `executeStream` can dispatch typed errors via the error registry instead
58
+ * of always falling back to `ClientRequestError` with `body: null`.
59
+ */
60
+ errorBody?: unknown;
21
61
  }
22
62
  export interface ClientHooks {
23
63
  onBeforeRequest?(context: BeforeRequestContext): BeforeRequestContext | Promise<BeforeRequestContext>;
@@ -62,11 +102,62 @@ export interface TypedStream<TYield, TReturn = void> extends AsyncIterable<TYiel
62
102
  */
63
103
  result: Promise<TReturn>;
64
104
  }
65
- export type ProcedureCallOptions = ClientHooks;
105
+ /**
106
+ * Request-level configuration that can be set as client-level defaults
107
+ * (via `CreateClientConfig.defaults`) or per-call (via `ProcedureCallOptions`).
108
+ *
109
+ * - `signal`: AbortSignal for cancellation. When both a default and per-call
110
+ * signal are provided, they're combined — whichever aborts first wins.
111
+ * - `timeout`: Timeout in milliseconds. Combined with `signal` the same way.
112
+ * A per-call `timeout: 0` disables an inherited default timeout.
113
+ * - `headers`: Extra headers merged into the request. Per-call keys win over
114
+ * default keys. Still subject to further mutation by `onBeforeRequest` hooks.
115
+ * - `basePath`: Override the base path for this call. Per-call > default > config.
116
+ * - `meta`: Per-request metadata typed via the {@link RequestMeta} interface.
117
+ * Merged shallowly (per-call keys win over default keys).
118
+ */
119
+ export interface ProcedureCallDefaults {
120
+ signal?: AbortSignal;
121
+ timeout?: number;
122
+ headers?: Record<string, string>;
123
+ basePath?: string;
124
+ meta?: RequestMeta;
125
+ }
126
+ /**
127
+ * Per-call options. Extends both `ProcedureCallDefaults` (request config) and
128
+ * `ClientHooks` (hooks), so a single options bag covers both concerns.
129
+ */
130
+ export interface ProcedureCallOptions extends ProcedureCallDefaults, ClientHooks {
131
+ }
132
+ /**
133
+ * Metadata attached to a typed error at construction. Supplies the transport
134
+ * context (status, procedure, scope) that isn't part of the response body.
135
+ */
136
+ export interface ErrorResponseMeta {
137
+ status: number;
138
+ procedureName: string;
139
+ scope: string;
140
+ }
141
+ /**
142
+ * A factory for a typed error class — constructed from the response body plus
143
+ * transport metadata. Generated error classes expose this as a static method.
144
+ */
145
+ export interface ErrorFactory {
146
+ fromResponse(body: unknown, meta: ErrorResponseMeta): Error;
147
+ }
148
+ /**
149
+ * Maps `body.name` values (taxonomy keys) to error class factories. When the
150
+ * client sees a non-2xx response whose body has a `name` matching a registry
151
+ * entry, it throws the typed error instead of a generic `ClientRequestError`.
152
+ */
153
+ export type ErrorRegistry = Record<string, ErrorFactory>;
66
154
  export interface ClientInstance {
67
155
  basePath: string;
68
156
  adapter: ClientAdapter;
69
157
  hooks: ClientHooks;
158
+ defaults: ProcedureCallDefaults;
159
+ /** Optional registry for runtime dispatch of typed errors by `body.name`. */
160
+ errorRegistry?: ErrorRegistry;
70
161
  call<TResponse>(descriptor: CallDescriptor, options?: ProcedureCallOptions): Promise<TResponse>;
71
162
  stream<TYield, TReturn>(descriptor: StreamDescriptor, options?: ProcedureCallOptions): TypedStream<TYield, TReturn>;
72
163
  }
@@ -75,4 +166,17 @@ export interface CreateClientConfig<TScopes> {
75
166
  basePath: string;
76
167
  scopes: (client: ClientInstance) => TScopes;
77
168
  hooks?: ClientHooks;
169
+ /**
170
+ * Default request options applied to every call. Per-call options override
171
+ * these (except `signal`, which combines via AbortSignal.any — whichever
172
+ * fires first cancels the request).
173
+ */
174
+ defaults?: ProcedureCallDefaults;
175
+ /**
176
+ * Optional error-dispatch registry. When a non-2xx response body has a
177
+ * `name` field matching a registry key, the client throws the typed error
178
+ * constructed via that entry's `fromResponse`. When absent or when no key
179
+ * matches, falls back to `ClientRequestError` (transport error shape).
180
+ */
181
+ errorRegistry?: ErrorRegistry;
78
182
  }
@@ -1,3 +1,3 @@
1
- // ── Adapter ──────────────────────────────────────────────
1
+ // ── Request Metadata ─────────────────────────────────────
2
2
  export {};
3
3
  //# sourceMappingURL=types.js.map