@kb-labs/gateway-contracts 2.93.0 → 2.96.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.
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { z } from 'zod';
2
2
 
3
3
  declare const UpstreamConfigSchema: z.ZodObject<{
4
- url: z.ZodString;
4
+ /** Key into the transport services map — identifies which service to proxy to */
5
+ serviceId: z.ZodString;
5
6
  prefix: z.ZodString;
6
7
  /** Strip prefix before forwarding. Default: keep prefix as-is. Use "" to strip. */
7
8
  rewritePrefix: z.ZodOptional<z.ZodString>;
@@ -11,14 +12,14 @@ declare const UpstreamConfigSchema: z.ZodObject<{
11
12
  excludePaths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
12
13
  description: z.ZodOptional<z.ZodString>;
13
14
  }, "strip", z.ZodTypeAny, {
14
- url: string;
15
+ serviceId: string;
15
16
  prefix: string;
16
17
  rewritePrefix?: string | undefined;
17
18
  websocket?: boolean | undefined;
18
19
  excludePaths?: string[] | undefined;
19
20
  description?: string | undefined;
20
21
  }, {
21
- url: string;
22
+ serviceId: string;
22
23
  prefix: string;
23
24
  rewritePrefix?: string | undefined;
24
25
  websocket?: boolean | undefined;
@@ -35,10 +36,452 @@ declare const StaticTokenEntrySchema: z.ZodObject<{
35
36
  hostId: string;
36
37
  namespaceId: string;
37
38
  }>;
39
+ declare const RateLimitConfigSchema: z.ZodObject<{
40
+ tokensPerMinute: z.ZodOptional<z.ZodNumber>;
41
+ requestsPerMinute: z.ZodOptional<z.ZodNumber>;
42
+ requestsPerSecond: z.ZodOptional<z.ZodNumber>;
43
+ maxConcurrentRequests: z.ZodOptional<z.ZodNumber>;
44
+ /** 0..1, default 0.9 in core. Set to 1 to disable the safety cushion. */
45
+ safetyMargin: z.ZodOptional<z.ZodNumber>;
46
+ }, "strip", z.ZodTypeAny, {
47
+ tokensPerMinute?: number | undefined;
48
+ requestsPerMinute?: number | undefined;
49
+ requestsPerSecond?: number | undefined;
50
+ maxConcurrentRequests?: number | undefined;
51
+ safetyMargin?: number | undefined;
52
+ }, {
53
+ tokensPerMinute?: number | undefined;
54
+ requestsPerMinute?: number | undefined;
55
+ requestsPerSecond?: number | undefined;
56
+ maxConcurrentRequests?: number | undefined;
57
+ safetyMargin?: number | undefined;
58
+ }>;
59
+ declare const PressureRouteOverrideSchema: z.ZodObject<{
60
+ /** Resource id used in the broker, e.g. "gateway:route:webhooks-github". */
61
+ resource: z.ZodString;
62
+ /** Path prefix matched against request.url (first match wins). */
63
+ pathPrefix: z.ZodString;
64
+ /** HTTP methods this override applies to. Omit to match any method. */
65
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<["GET", "POST", "PUT", "PATCH", "DELETE"]>, "many">>;
66
+ limits: z.ZodObject<{
67
+ tokensPerMinute: z.ZodOptional<z.ZodNumber>;
68
+ requestsPerMinute: z.ZodOptional<z.ZodNumber>;
69
+ requestsPerSecond: z.ZodOptional<z.ZodNumber>;
70
+ maxConcurrentRequests: z.ZodOptional<z.ZodNumber>;
71
+ /** 0..1, default 0.9 in core. Set to 1 to disable the safety cushion. */
72
+ safetyMargin: z.ZodOptional<z.ZodNumber>;
73
+ }, "strip", z.ZodTypeAny, {
74
+ tokensPerMinute?: number | undefined;
75
+ requestsPerMinute?: number | undefined;
76
+ requestsPerSecond?: number | undefined;
77
+ maxConcurrentRequests?: number | undefined;
78
+ safetyMargin?: number | undefined;
79
+ }, {
80
+ tokensPerMinute?: number | undefined;
81
+ requestsPerMinute?: number | undefined;
82
+ requestsPerSecond?: number | undefined;
83
+ maxConcurrentRequests?: number | undefined;
84
+ safetyMargin?: number | undefined;
85
+ }>;
86
+ }, "strip", z.ZodTypeAny, {
87
+ resource: string;
88
+ pathPrefix: string;
89
+ limits: {
90
+ tokensPerMinute?: number | undefined;
91
+ requestsPerMinute?: number | undefined;
92
+ requestsPerSecond?: number | undefined;
93
+ maxConcurrentRequests?: number | undefined;
94
+ safetyMargin?: number | undefined;
95
+ };
96
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
97
+ }, {
98
+ resource: string;
99
+ pathPrefix: string;
100
+ limits: {
101
+ tokensPerMinute?: number | undefined;
102
+ requestsPerMinute?: number | undefined;
103
+ requestsPerSecond?: number | undefined;
104
+ maxConcurrentRequests?: number | undefined;
105
+ safetyMargin?: number | undefined;
106
+ };
107
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
108
+ }>;
109
+ declare const PressureTenantConfigSchema: z.ZodObject<{
110
+ /** When true, applies per-tenant limits keyed by AuthContext.namespaceId. */
111
+ enabled: z.ZodDefault<z.ZodBoolean>;
112
+ /** Limits applied to each tenant. Resource id = "gateway:tenant:<namespaceId>". */
113
+ limits: z.ZodObject<{
114
+ tokensPerMinute: z.ZodOptional<z.ZodNumber>;
115
+ requestsPerMinute: z.ZodOptional<z.ZodNumber>;
116
+ requestsPerSecond: z.ZodOptional<z.ZodNumber>;
117
+ maxConcurrentRequests: z.ZodOptional<z.ZodNumber>;
118
+ /** 0..1, default 0.9 in core. Set to 1 to disable the safety cushion. */
119
+ safetyMargin: z.ZodOptional<z.ZodNumber>;
120
+ }, "strip", z.ZodTypeAny, {
121
+ tokensPerMinute?: number | undefined;
122
+ requestsPerMinute?: number | undefined;
123
+ requestsPerSecond?: number | undefined;
124
+ maxConcurrentRequests?: number | undefined;
125
+ safetyMargin?: number | undefined;
126
+ }, {
127
+ tokensPerMinute?: number | undefined;
128
+ requestsPerMinute?: number | undefined;
129
+ requestsPerSecond?: number | undefined;
130
+ maxConcurrentRequests?: number | undefined;
131
+ safetyMargin?: number | undefined;
132
+ }>;
133
+ }, "strip", z.ZodTypeAny, {
134
+ limits: {
135
+ tokensPerMinute?: number | undefined;
136
+ requestsPerMinute?: number | undefined;
137
+ requestsPerSecond?: number | undefined;
138
+ maxConcurrentRequests?: number | undefined;
139
+ safetyMargin?: number | undefined;
140
+ };
141
+ enabled: boolean;
142
+ }, {
143
+ limits: {
144
+ tokensPerMinute?: number | undefined;
145
+ requestsPerMinute?: number | undefined;
146
+ requestsPerSecond?: number | undefined;
147
+ maxConcurrentRequests?: number | undefined;
148
+ safetyMargin?: number | undefined;
149
+ };
150
+ enabled?: boolean | undefined;
151
+ }>;
152
+ declare const PressureConfigSchema: z.ZodObject<{
153
+ enabled: z.ZodDefault<z.ZodBoolean>;
154
+ /** Per-upstream limits. Resource id = "gateway:service:<name>". */
155
+ perService: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
156
+ tokensPerMinute: z.ZodOptional<z.ZodNumber>;
157
+ requestsPerMinute: z.ZodOptional<z.ZodNumber>;
158
+ requestsPerSecond: z.ZodOptional<z.ZodNumber>;
159
+ maxConcurrentRequests: z.ZodOptional<z.ZodNumber>;
160
+ /** 0..1, default 0.9 in core. Set to 1 to disable the safety cushion. */
161
+ safetyMargin: z.ZodOptional<z.ZodNumber>;
162
+ }, "strip", z.ZodTypeAny, {
163
+ tokensPerMinute?: number | undefined;
164
+ requestsPerMinute?: number | undefined;
165
+ requestsPerSecond?: number | undefined;
166
+ maxConcurrentRequests?: number | undefined;
167
+ safetyMargin?: number | undefined;
168
+ }, {
169
+ tokensPerMinute?: number | undefined;
170
+ requestsPerMinute?: number | undefined;
171
+ requestsPerSecond?: number | undefined;
172
+ maxConcurrentRequests?: number | undefined;
173
+ safetyMargin?: number | undefined;
174
+ }>>>;
175
+ /** Per-path-prefix overrides (checked before service-level resolution). */
176
+ perRoute: z.ZodDefault<z.ZodArray<z.ZodObject<{
177
+ /** Resource id used in the broker, e.g. "gateway:route:webhooks-github". */
178
+ resource: z.ZodString;
179
+ /** Path prefix matched against request.url (first match wins). */
180
+ pathPrefix: z.ZodString;
181
+ /** HTTP methods this override applies to. Omit to match any method. */
182
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<["GET", "POST", "PUT", "PATCH", "DELETE"]>, "many">>;
183
+ limits: z.ZodObject<{
184
+ tokensPerMinute: z.ZodOptional<z.ZodNumber>;
185
+ requestsPerMinute: z.ZodOptional<z.ZodNumber>;
186
+ requestsPerSecond: z.ZodOptional<z.ZodNumber>;
187
+ maxConcurrentRequests: z.ZodOptional<z.ZodNumber>;
188
+ /** 0..1, default 0.9 in core. Set to 1 to disable the safety cushion. */
189
+ safetyMargin: z.ZodOptional<z.ZodNumber>;
190
+ }, "strip", z.ZodTypeAny, {
191
+ tokensPerMinute?: number | undefined;
192
+ requestsPerMinute?: number | undefined;
193
+ requestsPerSecond?: number | undefined;
194
+ maxConcurrentRequests?: number | undefined;
195
+ safetyMargin?: number | undefined;
196
+ }, {
197
+ tokensPerMinute?: number | undefined;
198
+ requestsPerMinute?: number | undefined;
199
+ requestsPerSecond?: number | undefined;
200
+ maxConcurrentRequests?: number | undefined;
201
+ safetyMargin?: number | undefined;
202
+ }>;
203
+ }, "strip", z.ZodTypeAny, {
204
+ resource: string;
205
+ pathPrefix: string;
206
+ limits: {
207
+ tokensPerMinute?: number | undefined;
208
+ requestsPerMinute?: number | undefined;
209
+ requestsPerSecond?: number | undefined;
210
+ maxConcurrentRequests?: number | undefined;
211
+ safetyMargin?: number | undefined;
212
+ };
213
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
214
+ }, {
215
+ resource: string;
216
+ pathPrefix: string;
217
+ limits: {
218
+ tokensPerMinute?: number | undefined;
219
+ requestsPerMinute?: number | undefined;
220
+ requestsPerSecond?: number | undefined;
221
+ maxConcurrentRequests?: number | undefined;
222
+ safetyMargin?: number | undefined;
223
+ };
224
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
225
+ }>, "many">>;
226
+ /** Optional per-tenant layer (requires JWT). */
227
+ perTenant: z.ZodOptional<z.ZodObject<{
228
+ /** When true, applies per-tenant limits keyed by AuthContext.namespaceId. */
229
+ enabled: z.ZodDefault<z.ZodBoolean>;
230
+ /** Limits applied to each tenant. Resource id = "gateway:tenant:<namespaceId>". */
231
+ limits: z.ZodObject<{
232
+ tokensPerMinute: z.ZodOptional<z.ZodNumber>;
233
+ requestsPerMinute: z.ZodOptional<z.ZodNumber>;
234
+ requestsPerSecond: z.ZodOptional<z.ZodNumber>;
235
+ maxConcurrentRequests: z.ZodOptional<z.ZodNumber>;
236
+ /** 0..1, default 0.9 in core. Set to 1 to disable the safety cushion. */
237
+ safetyMargin: z.ZodOptional<z.ZodNumber>;
238
+ }, "strip", z.ZodTypeAny, {
239
+ tokensPerMinute?: number | undefined;
240
+ requestsPerMinute?: number | undefined;
241
+ requestsPerSecond?: number | undefined;
242
+ maxConcurrentRequests?: number | undefined;
243
+ safetyMargin?: number | undefined;
244
+ }, {
245
+ tokensPerMinute?: number | undefined;
246
+ requestsPerMinute?: number | undefined;
247
+ requestsPerSecond?: number | undefined;
248
+ maxConcurrentRequests?: number | undefined;
249
+ safetyMargin?: number | undefined;
250
+ }>;
251
+ }, "strip", z.ZodTypeAny, {
252
+ limits: {
253
+ tokensPerMinute?: number | undefined;
254
+ requestsPerMinute?: number | undefined;
255
+ requestsPerSecond?: number | undefined;
256
+ maxConcurrentRequests?: number | undefined;
257
+ safetyMargin?: number | undefined;
258
+ };
259
+ enabled: boolean;
260
+ }, {
261
+ limits: {
262
+ tokensPerMinute?: number | undefined;
263
+ requestsPerMinute?: number | undefined;
264
+ requestsPerSecond?: number | undefined;
265
+ maxConcurrentRequests?: number | undefined;
266
+ safetyMargin?: number | undefined;
267
+ };
268
+ enabled?: boolean | undefined;
269
+ }>>;
270
+ }, "strip", z.ZodTypeAny, {
271
+ enabled: boolean;
272
+ perService: Record<string, {
273
+ tokensPerMinute?: number | undefined;
274
+ requestsPerMinute?: number | undefined;
275
+ requestsPerSecond?: number | undefined;
276
+ maxConcurrentRequests?: number | undefined;
277
+ safetyMargin?: number | undefined;
278
+ }>;
279
+ perRoute: {
280
+ resource: string;
281
+ pathPrefix: string;
282
+ limits: {
283
+ tokensPerMinute?: number | undefined;
284
+ requestsPerMinute?: number | undefined;
285
+ requestsPerSecond?: number | undefined;
286
+ maxConcurrentRequests?: number | undefined;
287
+ safetyMargin?: number | undefined;
288
+ };
289
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
290
+ }[];
291
+ perTenant?: {
292
+ limits: {
293
+ tokensPerMinute?: number | undefined;
294
+ requestsPerMinute?: number | undefined;
295
+ requestsPerSecond?: number | undefined;
296
+ maxConcurrentRequests?: number | undefined;
297
+ safetyMargin?: number | undefined;
298
+ };
299
+ enabled: boolean;
300
+ } | undefined;
301
+ }, {
302
+ enabled?: boolean | undefined;
303
+ perService?: Record<string, {
304
+ tokensPerMinute?: number | undefined;
305
+ requestsPerMinute?: number | undefined;
306
+ requestsPerSecond?: number | undefined;
307
+ maxConcurrentRequests?: number | undefined;
308
+ safetyMargin?: number | undefined;
309
+ }> | undefined;
310
+ perRoute?: {
311
+ resource: string;
312
+ pathPrefix: string;
313
+ limits: {
314
+ tokensPerMinute?: number | undefined;
315
+ requestsPerMinute?: number | undefined;
316
+ requestsPerSecond?: number | undefined;
317
+ maxConcurrentRequests?: number | undefined;
318
+ safetyMargin?: number | undefined;
319
+ };
320
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
321
+ }[] | undefined;
322
+ perTenant?: {
323
+ limits: {
324
+ tokensPerMinute?: number | undefined;
325
+ requestsPerMinute?: number | undefined;
326
+ requestsPerSecond?: number | undefined;
327
+ maxConcurrentRequests?: number | undefined;
328
+ safetyMargin?: number | undefined;
329
+ };
330
+ enabled?: boolean | undefined;
331
+ } | undefined;
332
+ }>;
333
+ declare const AuthConfigSchema: z.ZodObject<{
334
+ /**
335
+ * Whether authentication is enforced. Default true (cloud/team).
336
+ * When false (solo/local mode) the gateway runs every request as a local
337
+ * admin and Studio opens without login. The startup guardrail refuses to
338
+ * start with auth disabled on a non-loopback bind (B-023).
339
+ */
340
+ enabled: z.ZodDefault<z.ZodBoolean>;
341
+ /** Whether to set Secure flag on session cookies. Set false in dev only. */
342
+ cookieSecure: z.ZodDefault<z.ZodBoolean>;
343
+ /** Access token TTL in seconds. Default 15 min. */
344
+ sessionAccessTtlSec: z.ZodDefault<z.ZodNumber>;
345
+ /** Refresh token TTL in seconds. Default 30 days. */
346
+ sessionRefreshTtlSec: z.ZodDefault<z.ZodNumber>;
347
+ /** Grace window for refresh token reuse detection (CD-5). */
348
+ refreshGraceWindowSec: z.ZodDefault<z.ZodNumber>;
349
+ /** bcrypt cost factor for password hashing. */
350
+ bcryptCost: z.ZodDefault<z.ZodNumber>;
351
+ passwordPolicy: z.ZodDefault<z.ZodObject<{
352
+ minLength: z.ZodDefault<z.ZodNumber>;
353
+ maxLength: z.ZodDefault<z.ZodNumber>;
354
+ /** When true, new passwords are checked against the HaveIBeenPwned API. */
355
+ hibpEnabled: z.ZodDefault<z.ZodBoolean>;
356
+ }, "strip", z.ZodTypeAny, {
357
+ minLength: number;
358
+ maxLength: number;
359
+ hibpEnabled: boolean;
360
+ }, {
361
+ minLength?: number | undefined;
362
+ maxLength?: number | undefined;
363
+ hibpEnabled?: boolean | undefined;
364
+ }>>;
365
+ rateLimit: z.ZodDefault<z.ZodObject<{
366
+ /** Max failed login attempts per IP per minute before 429. */
367
+ loginPerIpPerMinute: z.ZodDefault<z.ZodNumber>;
368
+ /** Max failed login attempts for a single email per minute (across all IPs). */
369
+ loginPerEmailPerMinute: z.ZodDefault<z.ZodNumber>;
370
+ /** Max activation attempts per IP per hour. */
371
+ activatePerIpPerHour: z.ZodDefault<z.ZodNumber>;
372
+ }, "strip", z.ZodTypeAny, {
373
+ loginPerIpPerMinute: number;
374
+ loginPerEmailPerMinute: number;
375
+ activatePerIpPerHour: number;
376
+ }, {
377
+ loginPerIpPerMinute?: number | undefined;
378
+ loginPerEmailPerMinute?: number | undefined;
379
+ activatePerIpPerHour?: number | undefined;
380
+ }>>;
381
+ /** Invite link TTL in milliseconds. Default 7 days. */
382
+ inviteTtlMs: z.ZodDefault<z.ZodNumber>;
383
+ /** Bootstrap admin account seeding. Credentials come from env vars. */
384
+ bootstrap: z.ZodOptional<z.ZodObject<{
385
+ /** Tenant ID for the bootstrap admin account (used in subdomain routing). */
386
+ tenantId: z.ZodString;
387
+ /** Admin email — also readable from env GATEWAY_BOOTSTRAP_ADMIN_EMAIL. */
388
+ adminEmail: z.ZodOptional<z.ZodString>;
389
+ }, "strip", z.ZodTypeAny, {
390
+ tenantId: string;
391
+ adminEmail?: string | undefined;
392
+ }, {
393
+ tenantId: string;
394
+ adminEmail?: string | undefined;
395
+ }>>;
396
+ /**
397
+ * Identity providers to load, keyed by instance id (ADR-0020 DD-4).
398
+ *
399
+ * Each entry carries a discriminating `type` (built-in `email-password`
400
+ * / `oidc`, or a package name for third-party providers). Everything
401
+ * else passes through so each provider validates its own slice with its
402
+ * own zod schema. Omitting `providers` registers the built-in
403
+ * `email-password` provider as the default (DD-3).
404
+ */
405
+ providers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
406
+ type: z.ZodString;
407
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
408
+ type: z.ZodString;
409
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
410
+ type: z.ZodString;
411
+ }, z.ZodTypeAny, "passthrough">>>>;
412
+ }, "strip", z.ZodTypeAny, {
413
+ enabled: boolean;
414
+ cookieSecure: boolean;
415
+ sessionAccessTtlSec: number;
416
+ sessionRefreshTtlSec: number;
417
+ refreshGraceWindowSec: number;
418
+ bcryptCost: number;
419
+ passwordPolicy: {
420
+ minLength: number;
421
+ maxLength: number;
422
+ hibpEnabled: boolean;
423
+ };
424
+ rateLimit: {
425
+ loginPerIpPerMinute: number;
426
+ loginPerEmailPerMinute: number;
427
+ activatePerIpPerHour: number;
428
+ };
429
+ inviteTtlMs: number;
430
+ bootstrap?: {
431
+ tenantId: string;
432
+ adminEmail?: string | undefined;
433
+ } | undefined;
434
+ providers?: Record<string, z.objectOutputType<{
435
+ type: z.ZodString;
436
+ }, z.ZodTypeAny, "passthrough">> | undefined;
437
+ }, {
438
+ enabled?: boolean | undefined;
439
+ cookieSecure?: boolean | undefined;
440
+ sessionAccessTtlSec?: number | undefined;
441
+ sessionRefreshTtlSec?: number | undefined;
442
+ refreshGraceWindowSec?: number | undefined;
443
+ bcryptCost?: number | undefined;
444
+ passwordPolicy?: {
445
+ minLength?: number | undefined;
446
+ maxLength?: number | undefined;
447
+ hibpEnabled?: boolean | undefined;
448
+ } | undefined;
449
+ rateLimit?: {
450
+ loginPerIpPerMinute?: number | undefined;
451
+ loginPerEmailPerMinute?: number | undefined;
452
+ activatePerIpPerHour?: number | undefined;
453
+ } | undefined;
454
+ inviteTtlMs?: number | undefined;
455
+ bootstrap?: {
456
+ tenantId: string;
457
+ adminEmail?: string | undefined;
458
+ } | undefined;
459
+ providers?: Record<string, z.objectInputType<{
460
+ type: z.ZodString;
461
+ }, z.ZodTypeAny, "passthrough">> | undefined;
462
+ }>;
463
+ declare const TenantsConfigSchema: z.ZodObject<{
464
+ /**
465
+ * Subdomain pattern used to resolve tenant from the Host header.
466
+ * Use `{tenant}` as placeholder. E.g. `"{tenant}.kblabs.ru"`.
467
+ */
468
+ pattern: z.ZodDefault<z.ZodString>;
469
+ }, "strip", z.ZodTypeAny, {
470
+ pattern: string;
471
+ }, {
472
+ pattern?: string | undefined;
473
+ }>;
38
474
  declare const GatewayConfigSchema: z.ZodObject<{
39
475
  port: z.ZodDefault<z.ZodNumber>;
476
+ /**
477
+ * Bind host. Defaults to '0.0.0.0' (deployed platform) when omitted — the
478
+ * fallback is applied in code. Solo/local installs set '127.0.0.1' so a
479
+ * no-auth Studio is never reachable off the machine.
480
+ */
481
+ host: z.ZodOptional<z.ZodString>;
40
482
  upstreams: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
41
- url: z.ZodString;
483
+ /** Key into the transport services map — identifies which service to proxy to */
484
+ serviceId: z.ZodString;
42
485
  prefix: z.ZodString;
43
486
  /** Strip prefix before forwarding. Default: keep prefix as-is. Use "" to strip. */
44
487
  rewritePrefix: z.ZodOptional<z.ZodString>;
@@ -48,14 +491,14 @@ declare const GatewayConfigSchema: z.ZodObject<{
48
491
  excludePaths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
49
492
  description: z.ZodOptional<z.ZodString>;
50
493
  }, "strip", z.ZodTypeAny, {
51
- url: string;
494
+ serviceId: string;
52
495
  prefix: string;
53
496
  rewritePrefix?: string | undefined;
54
497
  websocket?: boolean | undefined;
55
498
  excludePaths?: string[] | undefined;
56
499
  description?: string | undefined;
57
500
  }, {
58
- url: string;
501
+ serviceId: string;
59
502
  prefix: string;
60
503
  rewritePrefix?: string | undefined;
61
504
  websocket?: boolean | undefined;
@@ -73,10 +516,335 @@ declare const GatewayConfigSchema: z.ZodObject<{
73
516
  hostId: string;
74
517
  namespaceId: string;
75
518
  }>>>;
519
+ /** HTTP pressure control (rate limiting via ResourceBroker). */
520
+ pressure: z.ZodOptional<z.ZodObject<{
521
+ enabled: z.ZodDefault<z.ZodBoolean>;
522
+ /** Per-upstream limits. Resource id = "gateway:service:<name>". */
523
+ perService: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
524
+ tokensPerMinute: z.ZodOptional<z.ZodNumber>;
525
+ requestsPerMinute: z.ZodOptional<z.ZodNumber>;
526
+ requestsPerSecond: z.ZodOptional<z.ZodNumber>;
527
+ maxConcurrentRequests: z.ZodOptional<z.ZodNumber>;
528
+ /** 0..1, default 0.9 in core. Set to 1 to disable the safety cushion. */
529
+ safetyMargin: z.ZodOptional<z.ZodNumber>;
530
+ }, "strip", z.ZodTypeAny, {
531
+ tokensPerMinute?: number | undefined;
532
+ requestsPerMinute?: number | undefined;
533
+ requestsPerSecond?: number | undefined;
534
+ maxConcurrentRequests?: number | undefined;
535
+ safetyMargin?: number | undefined;
536
+ }, {
537
+ tokensPerMinute?: number | undefined;
538
+ requestsPerMinute?: number | undefined;
539
+ requestsPerSecond?: number | undefined;
540
+ maxConcurrentRequests?: number | undefined;
541
+ safetyMargin?: number | undefined;
542
+ }>>>;
543
+ /** Per-path-prefix overrides (checked before service-level resolution). */
544
+ perRoute: z.ZodDefault<z.ZodArray<z.ZodObject<{
545
+ /** Resource id used in the broker, e.g. "gateway:route:webhooks-github". */
546
+ resource: z.ZodString;
547
+ /** Path prefix matched against request.url (first match wins). */
548
+ pathPrefix: z.ZodString;
549
+ /** HTTP methods this override applies to. Omit to match any method. */
550
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<["GET", "POST", "PUT", "PATCH", "DELETE"]>, "many">>;
551
+ limits: z.ZodObject<{
552
+ tokensPerMinute: z.ZodOptional<z.ZodNumber>;
553
+ requestsPerMinute: z.ZodOptional<z.ZodNumber>;
554
+ requestsPerSecond: z.ZodOptional<z.ZodNumber>;
555
+ maxConcurrentRequests: z.ZodOptional<z.ZodNumber>;
556
+ /** 0..1, default 0.9 in core. Set to 1 to disable the safety cushion. */
557
+ safetyMargin: z.ZodOptional<z.ZodNumber>;
558
+ }, "strip", z.ZodTypeAny, {
559
+ tokensPerMinute?: number | undefined;
560
+ requestsPerMinute?: number | undefined;
561
+ requestsPerSecond?: number | undefined;
562
+ maxConcurrentRequests?: number | undefined;
563
+ safetyMargin?: number | undefined;
564
+ }, {
565
+ tokensPerMinute?: number | undefined;
566
+ requestsPerMinute?: number | undefined;
567
+ requestsPerSecond?: number | undefined;
568
+ maxConcurrentRequests?: number | undefined;
569
+ safetyMargin?: number | undefined;
570
+ }>;
571
+ }, "strip", z.ZodTypeAny, {
572
+ resource: string;
573
+ pathPrefix: string;
574
+ limits: {
575
+ tokensPerMinute?: number | undefined;
576
+ requestsPerMinute?: number | undefined;
577
+ requestsPerSecond?: number | undefined;
578
+ maxConcurrentRequests?: number | undefined;
579
+ safetyMargin?: number | undefined;
580
+ };
581
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
582
+ }, {
583
+ resource: string;
584
+ pathPrefix: string;
585
+ limits: {
586
+ tokensPerMinute?: number | undefined;
587
+ requestsPerMinute?: number | undefined;
588
+ requestsPerSecond?: number | undefined;
589
+ maxConcurrentRequests?: number | undefined;
590
+ safetyMargin?: number | undefined;
591
+ };
592
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
593
+ }>, "many">>;
594
+ /** Optional per-tenant layer (requires JWT). */
595
+ perTenant: z.ZodOptional<z.ZodObject<{
596
+ /** When true, applies per-tenant limits keyed by AuthContext.namespaceId. */
597
+ enabled: z.ZodDefault<z.ZodBoolean>;
598
+ /** Limits applied to each tenant. Resource id = "gateway:tenant:<namespaceId>". */
599
+ limits: z.ZodObject<{
600
+ tokensPerMinute: z.ZodOptional<z.ZodNumber>;
601
+ requestsPerMinute: z.ZodOptional<z.ZodNumber>;
602
+ requestsPerSecond: z.ZodOptional<z.ZodNumber>;
603
+ maxConcurrentRequests: z.ZodOptional<z.ZodNumber>;
604
+ /** 0..1, default 0.9 in core. Set to 1 to disable the safety cushion. */
605
+ safetyMargin: z.ZodOptional<z.ZodNumber>;
606
+ }, "strip", z.ZodTypeAny, {
607
+ tokensPerMinute?: number | undefined;
608
+ requestsPerMinute?: number | undefined;
609
+ requestsPerSecond?: number | undefined;
610
+ maxConcurrentRequests?: number | undefined;
611
+ safetyMargin?: number | undefined;
612
+ }, {
613
+ tokensPerMinute?: number | undefined;
614
+ requestsPerMinute?: number | undefined;
615
+ requestsPerSecond?: number | undefined;
616
+ maxConcurrentRequests?: number | undefined;
617
+ safetyMargin?: number | undefined;
618
+ }>;
619
+ }, "strip", z.ZodTypeAny, {
620
+ limits: {
621
+ tokensPerMinute?: number | undefined;
622
+ requestsPerMinute?: number | undefined;
623
+ requestsPerSecond?: number | undefined;
624
+ maxConcurrentRequests?: number | undefined;
625
+ safetyMargin?: number | undefined;
626
+ };
627
+ enabled: boolean;
628
+ }, {
629
+ limits: {
630
+ tokensPerMinute?: number | undefined;
631
+ requestsPerMinute?: number | undefined;
632
+ requestsPerSecond?: number | undefined;
633
+ maxConcurrentRequests?: number | undefined;
634
+ safetyMargin?: number | undefined;
635
+ };
636
+ enabled?: boolean | undefined;
637
+ }>>;
638
+ }, "strip", z.ZodTypeAny, {
639
+ enabled: boolean;
640
+ perService: Record<string, {
641
+ tokensPerMinute?: number | undefined;
642
+ requestsPerMinute?: number | undefined;
643
+ requestsPerSecond?: number | undefined;
644
+ maxConcurrentRequests?: number | undefined;
645
+ safetyMargin?: number | undefined;
646
+ }>;
647
+ perRoute: {
648
+ resource: string;
649
+ pathPrefix: string;
650
+ limits: {
651
+ tokensPerMinute?: number | undefined;
652
+ requestsPerMinute?: number | undefined;
653
+ requestsPerSecond?: number | undefined;
654
+ maxConcurrentRequests?: number | undefined;
655
+ safetyMargin?: number | undefined;
656
+ };
657
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
658
+ }[];
659
+ perTenant?: {
660
+ limits: {
661
+ tokensPerMinute?: number | undefined;
662
+ requestsPerMinute?: number | undefined;
663
+ requestsPerSecond?: number | undefined;
664
+ maxConcurrentRequests?: number | undefined;
665
+ safetyMargin?: number | undefined;
666
+ };
667
+ enabled: boolean;
668
+ } | undefined;
669
+ }, {
670
+ enabled?: boolean | undefined;
671
+ perService?: Record<string, {
672
+ tokensPerMinute?: number | undefined;
673
+ requestsPerMinute?: number | undefined;
674
+ requestsPerSecond?: number | undefined;
675
+ maxConcurrentRequests?: number | undefined;
676
+ safetyMargin?: number | undefined;
677
+ }> | undefined;
678
+ perRoute?: {
679
+ resource: string;
680
+ pathPrefix: string;
681
+ limits: {
682
+ tokensPerMinute?: number | undefined;
683
+ requestsPerMinute?: number | undefined;
684
+ requestsPerSecond?: number | undefined;
685
+ maxConcurrentRequests?: number | undefined;
686
+ safetyMargin?: number | undefined;
687
+ };
688
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
689
+ }[] | undefined;
690
+ perTenant?: {
691
+ limits: {
692
+ tokensPerMinute?: number | undefined;
693
+ requestsPerMinute?: number | undefined;
694
+ requestsPerSecond?: number | undefined;
695
+ maxConcurrentRequests?: number | undefined;
696
+ safetyMargin?: number | undefined;
697
+ };
698
+ enabled?: boolean | undefined;
699
+ } | undefined;
700
+ }>>;
701
+ /** User auth configuration (ADR-0020). */
702
+ auth: z.ZodOptional<z.ZodObject<{
703
+ /**
704
+ * Whether authentication is enforced. Default true (cloud/team).
705
+ * When false (solo/local mode) the gateway runs every request as a local
706
+ * admin and Studio opens without login. The startup guardrail refuses to
707
+ * start with auth disabled on a non-loopback bind (B-023).
708
+ */
709
+ enabled: z.ZodDefault<z.ZodBoolean>;
710
+ /** Whether to set Secure flag on session cookies. Set false in dev only. */
711
+ cookieSecure: z.ZodDefault<z.ZodBoolean>;
712
+ /** Access token TTL in seconds. Default 15 min. */
713
+ sessionAccessTtlSec: z.ZodDefault<z.ZodNumber>;
714
+ /** Refresh token TTL in seconds. Default 30 days. */
715
+ sessionRefreshTtlSec: z.ZodDefault<z.ZodNumber>;
716
+ /** Grace window for refresh token reuse detection (CD-5). */
717
+ refreshGraceWindowSec: z.ZodDefault<z.ZodNumber>;
718
+ /** bcrypt cost factor for password hashing. */
719
+ bcryptCost: z.ZodDefault<z.ZodNumber>;
720
+ passwordPolicy: z.ZodDefault<z.ZodObject<{
721
+ minLength: z.ZodDefault<z.ZodNumber>;
722
+ maxLength: z.ZodDefault<z.ZodNumber>;
723
+ /** When true, new passwords are checked against the HaveIBeenPwned API. */
724
+ hibpEnabled: z.ZodDefault<z.ZodBoolean>;
725
+ }, "strip", z.ZodTypeAny, {
726
+ minLength: number;
727
+ maxLength: number;
728
+ hibpEnabled: boolean;
729
+ }, {
730
+ minLength?: number | undefined;
731
+ maxLength?: number | undefined;
732
+ hibpEnabled?: boolean | undefined;
733
+ }>>;
734
+ rateLimit: z.ZodDefault<z.ZodObject<{
735
+ /** Max failed login attempts per IP per minute before 429. */
736
+ loginPerIpPerMinute: z.ZodDefault<z.ZodNumber>;
737
+ /** Max failed login attempts for a single email per minute (across all IPs). */
738
+ loginPerEmailPerMinute: z.ZodDefault<z.ZodNumber>;
739
+ /** Max activation attempts per IP per hour. */
740
+ activatePerIpPerHour: z.ZodDefault<z.ZodNumber>;
741
+ }, "strip", z.ZodTypeAny, {
742
+ loginPerIpPerMinute: number;
743
+ loginPerEmailPerMinute: number;
744
+ activatePerIpPerHour: number;
745
+ }, {
746
+ loginPerIpPerMinute?: number | undefined;
747
+ loginPerEmailPerMinute?: number | undefined;
748
+ activatePerIpPerHour?: number | undefined;
749
+ }>>;
750
+ /** Invite link TTL in milliseconds. Default 7 days. */
751
+ inviteTtlMs: z.ZodDefault<z.ZodNumber>;
752
+ /** Bootstrap admin account seeding. Credentials come from env vars. */
753
+ bootstrap: z.ZodOptional<z.ZodObject<{
754
+ /** Tenant ID for the bootstrap admin account (used in subdomain routing). */
755
+ tenantId: z.ZodString;
756
+ /** Admin email — also readable from env GATEWAY_BOOTSTRAP_ADMIN_EMAIL. */
757
+ adminEmail: z.ZodOptional<z.ZodString>;
758
+ }, "strip", z.ZodTypeAny, {
759
+ tenantId: string;
760
+ adminEmail?: string | undefined;
761
+ }, {
762
+ tenantId: string;
763
+ adminEmail?: string | undefined;
764
+ }>>;
765
+ /**
766
+ * Identity providers to load, keyed by instance id (ADR-0020 DD-4).
767
+ *
768
+ * Each entry carries a discriminating `type` (built-in `email-password`
769
+ * / `oidc`, or a package name for third-party providers). Everything
770
+ * else passes through so each provider validates its own slice with its
771
+ * own zod schema. Omitting `providers` registers the built-in
772
+ * `email-password` provider as the default (DD-3).
773
+ */
774
+ providers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
775
+ type: z.ZodString;
776
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
777
+ type: z.ZodString;
778
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
779
+ type: z.ZodString;
780
+ }, z.ZodTypeAny, "passthrough">>>>;
781
+ }, "strip", z.ZodTypeAny, {
782
+ enabled: boolean;
783
+ cookieSecure: boolean;
784
+ sessionAccessTtlSec: number;
785
+ sessionRefreshTtlSec: number;
786
+ refreshGraceWindowSec: number;
787
+ bcryptCost: number;
788
+ passwordPolicy: {
789
+ minLength: number;
790
+ maxLength: number;
791
+ hibpEnabled: boolean;
792
+ };
793
+ rateLimit: {
794
+ loginPerIpPerMinute: number;
795
+ loginPerEmailPerMinute: number;
796
+ activatePerIpPerHour: number;
797
+ };
798
+ inviteTtlMs: number;
799
+ bootstrap?: {
800
+ tenantId: string;
801
+ adminEmail?: string | undefined;
802
+ } | undefined;
803
+ providers?: Record<string, z.objectOutputType<{
804
+ type: z.ZodString;
805
+ }, z.ZodTypeAny, "passthrough">> | undefined;
806
+ }, {
807
+ enabled?: boolean | undefined;
808
+ cookieSecure?: boolean | undefined;
809
+ sessionAccessTtlSec?: number | undefined;
810
+ sessionRefreshTtlSec?: number | undefined;
811
+ refreshGraceWindowSec?: number | undefined;
812
+ bcryptCost?: number | undefined;
813
+ passwordPolicy?: {
814
+ minLength?: number | undefined;
815
+ maxLength?: number | undefined;
816
+ hibpEnabled?: boolean | undefined;
817
+ } | undefined;
818
+ rateLimit?: {
819
+ loginPerIpPerMinute?: number | undefined;
820
+ loginPerEmailPerMinute?: number | undefined;
821
+ activatePerIpPerHour?: number | undefined;
822
+ } | undefined;
823
+ inviteTtlMs?: number | undefined;
824
+ bootstrap?: {
825
+ tenantId: string;
826
+ adminEmail?: string | undefined;
827
+ } | undefined;
828
+ providers?: Record<string, z.objectInputType<{
829
+ type: z.ZodString;
830
+ }, z.ZodTypeAny, "passthrough">> | undefined;
831
+ }>>;
832
+ /** Tenant routing configuration. */
833
+ tenants: z.ZodOptional<z.ZodObject<{
834
+ /**
835
+ * Subdomain pattern used to resolve tenant from the Host header.
836
+ * Use `{tenant}` as placeholder. E.g. `"{tenant}.kblabs.ru"`.
837
+ */
838
+ pattern: z.ZodDefault<z.ZodString>;
839
+ }, "strip", z.ZodTypeAny, {
840
+ pattern: string;
841
+ }, {
842
+ pattern?: string | undefined;
843
+ }>>;
76
844
  }, "strip", z.ZodTypeAny, {
77
845
  port: number;
78
846
  upstreams: Record<string, {
79
- url: string;
847
+ serviceId: string;
80
848
  prefix: string;
81
849
  rewritePrefix?: string | undefined;
82
850
  websocket?: boolean | undefined;
@@ -87,10 +855,73 @@ declare const GatewayConfigSchema: z.ZodObject<{
87
855
  hostId: string;
88
856
  namespaceId: string;
89
857
  }>;
858
+ host?: string | undefined;
859
+ pressure?: {
860
+ enabled: boolean;
861
+ perService: Record<string, {
862
+ tokensPerMinute?: number | undefined;
863
+ requestsPerMinute?: number | undefined;
864
+ requestsPerSecond?: number | undefined;
865
+ maxConcurrentRequests?: number | undefined;
866
+ safetyMargin?: number | undefined;
867
+ }>;
868
+ perRoute: {
869
+ resource: string;
870
+ pathPrefix: string;
871
+ limits: {
872
+ tokensPerMinute?: number | undefined;
873
+ requestsPerMinute?: number | undefined;
874
+ requestsPerSecond?: number | undefined;
875
+ maxConcurrentRequests?: number | undefined;
876
+ safetyMargin?: number | undefined;
877
+ };
878
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
879
+ }[];
880
+ perTenant?: {
881
+ limits: {
882
+ tokensPerMinute?: number | undefined;
883
+ requestsPerMinute?: number | undefined;
884
+ requestsPerSecond?: number | undefined;
885
+ maxConcurrentRequests?: number | undefined;
886
+ safetyMargin?: number | undefined;
887
+ };
888
+ enabled: boolean;
889
+ } | undefined;
890
+ } | undefined;
891
+ auth?: {
892
+ enabled: boolean;
893
+ cookieSecure: boolean;
894
+ sessionAccessTtlSec: number;
895
+ sessionRefreshTtlSec: number;
896
+ refreshGraceWindowSec: number;
897
+ bcryptCost: number;
898
+ passwordPolicy: {
899
+ minLength: number;
900
+ maxLength: number;
901
+ hibpEnabled: boolean;
902
+ };
903
+ rateLimit: {
904
+ loginPerIpPerMinute: number;
905
+ loginPerEmailPerMinute: number;
906
+ activatePerIpPerHour: number;
907
+ };
908
+ inviteTtlMs: number;
909
+ bootstrap?: {
910
+ tenantId: string;
911
+ adminEmail?: string | undefined;
912
+ } | undefined;
913
+ providers?: Record<string, z.objectOutputType<{
914
+ type: z.ZodString;
915
+ }, z.ZodTypeAny, "passthrough">> | undefined;
916
+ } | undefined;
917
+ tenants?: {
918
+ pattern: string;
919
+ } | undefined;
90
920
  }, {
91
921
  port?: number | undefined;
922
+ host?: string | undefined;
92
923
  upstreams?: Record<string, {
93
- url: string;
924
+ serviceId: string;
94
925
  prefix: string;
95
926
  rewritePrefix?: string | undefined;
96
927
  websocket?: boolean | undefined;
@@ -101,8 +932,75 @@ declare const GatewayConfigSchema: z.ZodObject<{
101
932
  hostId: string;
102
933
  namespaceId: string;
103
934
  }> | undefined;
935
+ pressure?: {
936
+ enabled?: boolean | undefined;
937
+ perService?: Record<string, {
938
+ tokensPerMinute?: number | undefined;
939
+ requestsPerMinute?: number | undefined;
940
+ requestsPerSecond?: number | undefined;
941
+ maxConcurrentRequests?: number | undefined;
942
+ safetyMargin?: number | undefined;
943
+ }> | undefined;
944
+ perRoute?: {
945
+ resource: string;
946
+ pathPrefix: string;
947
+ limits: {
948
+ tokensPerMinute?: number | undefined;
949
+ requestsPerMinute?: number | undefined;
950
+ requestsPerSecond?: number | undefined;
951
+ maxConcurrentRequests?: number | undefined;
952
+ safetyMargin?: number | undefined;
953
+ };
954
+ methods?: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE")[] | undefined;
955
+ }[] | undefined;
956
+ perTenant?: {
957
+ limits: {
958
+ tokensPerMinute?: number | undefined;
959
+ requestsPerMinute?: number | undefined;
960
+ requestsPerSecond?: number | undefined;
961
+ maxConcurrentRequests?: number | undefined;
962
+ safetyMargin?: number | undefined;
963
+ };
964
+ enabled?: boolean | undefined;
965
+ } | undefined;
966
+ } | undefined;
967
+ auth?: {
968
+ enabled?: boolean | undefined;
969
+ cookieSecure?: boolean | undefined;
970
+ sessionAccessTtlSec?: number | undefined;
971
+ sessionRefreshTtlSec?: number | undefined;
972
+ refreshGraceWindowSec?: number | undefined;
973
+ bcryptCost?: number | undefined;
974
+ passwordPolicy?: {
975
+ minLength?: number | undefined;
976
+ maxLength?: number | undefined;
977
+ hibpEnabled?: boolean | undefined;
978
+ } | undefined;
979
+ rateLimit?: {
980
+ loginPerIpPerMinute?: number | undefined;
981
+ loginPerEmailPerMinute?: number | undefined;
982
+ activatePerIpPerHour?: number | undefined;
983
+ } | undefined;
984
+ inviteTtlMs?: number | undefined;
985
+ bootstrap?: {
986
+ tenantId: string;
987
+ adminEmail?: string | undefined;
988
+ } | undefined;
989
+ providers?: Record<string, z.objectInputType<{
990
+ type: z.ZodString;
991
+ }, z.ZodTypeAny, "passthrough">> | undefined;
992
+ } | undefined;
993
+ tenants?: {
994
+ pattern?: string | undefined;
995
+ } | undefined;
104
996
  }>;
997
+ type RateLimitConfig = z.infer<typeof RateLimitConfigSchema>;
998
+ type PressureRouteOverride = z.infer<typeof PressureRouteOverrideSchema>;
999
+ type PressureTenantConfig = z.infer<typeof PressureTenantConfigSchema>;
1000
+ type PressureConfig = z.infer<typeof PressureConfigSchema>;
105
1001
  type UpstreamConfig = z.infer<typeof UpstreamConfigSchema>;
1002
+ type AuthConfig = z.infer<typeof AuthConfigSchema>;
1003
+ type TenantsConfig = z.infer<typeof TenantsConfigSchema>;
106
1004
  type GatewayConfig = z.infer<typeof GatewayConfigSchema>;
107
1005
 
108
1006
  declare const HostCapabilitySchema: z.ZodEnum<["filesystem", "git", "editor-context", "execution"]>;
@@ -280,14 +1178,22 @@ declare const RegisterRequestSchema: z.ZodObject<{
280
1178
  * Generated by the agent; the server stores it for encrypting call payloads.
281
1179
  */
282
1180
  publicKey: z.ZodOptional<z.ZodString>;
1181
+ /** Unique author handle for the marketplace (e.g. "kirill"). Lowercase letters, digits, hyphens. */
1182
+ handle: z.ZodOptional<z.ZodString>;
1183
+ /** Contact email for the author. */
1184
+ email: z.ZodOptional<z.ZodString>;
283
1185
  }, "strip", z.ZodTypeAny, {
284
1186
  capabilities: string[];
285
1187
  name: string;
286
1188
  publicKey?: string | undefined;
1189
+ handle?: string | undefined;
1190
+ email?: string | undefined;
287
1191
  }, {
288
1192
  name: string;
289
1193
  capabilities?: string[] | undefined;
290
1194
  publicKey?: string | undefined;
1195
+ handle?: string | undefined;
1196
+ email?: string | undefined;
291
1197
  }>;
292
1198
  declare const RegisterResponseSchema: z.ZodObject<{
293
1199
  clientId: z.ZodString;
@@ -295,16 +1201,19 @@ declare const RegisterResponseSchema: z.ZodObject<{
295
1201
  hostId: z.ZodString;
296
1202
  /** Server-assigned namespace — use this in subsequent API calls. */
297
1203
  namespaceId: z.ZodString;
1204
+ handle: z.ZodOptional<z.ZodString>;
298
1205
  }, "strip", z.ZodTypeAny, {
299
1206
  hostId: string;
300
1207
  namespaceId: string;
301
1208
  clientId: string;
302
1209
  clientSecret: string;
1210
+ handle?: string | undefined;
303
1211
  }, {
304
1212
  hostId: string;
305
1213
  namespaceId: string;
306
1214
  clientId: string;
307
1215
  clientSecret: string;
1216
+ handle?: string | undefined;
308
1217
  }>;
309
1218
  declare const TokenRequestSchema: z.ZodObject<{
310
1219
  clientId: z.ZodString;
@@ -346,6 +1255,8 @@ declare const JwtPayloadSchema: z.ZodObject<{
346
1255
  namespaceId: z.ZodString;
347
1256
  tier: z.ZodEnum<["free", "pro", "enterprise"]>;
348
1257
  type: z.ZodEnum<["user", "cli", "machine"]>;
1258
+ /** Permissions embedded in the token at issuance time. */
1259
+ permissions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
349
1260
  iat: z.ZodNumber;
350
1261
  exp: z.ZodNumber;
351
1262
  }, "strip", z.ZodTypeAny, {
@@ -355,6 +1266,7 @@ declare const JwtPayloadSchema: z.ZodObject<{
355
1266
  sub: string;
356
1267
  iat: number;
357
1268
  exp: number;
1269
+ permissions?: string[] | undefined;
358
1270
  }, {
359
1271
  type: "user" | "cli" | "machine";
360
1272
  namespaceId: string;
@@ -362,6 +1274,7 @@ declare const JwtPayloadSchema: z.ZodObject<{
362
1274
  sub: string;
363
1275
  iat: number;
364
1276
  exp: number;
1277
+ permissions?: string[] | undefined;
365
1278
  }>;
366
1279
  type RegisterRequest = z.infer<typeof RegisterRequestSchema>;
367
1280
  type RegisterResponse = z.infer<typeof RegisterResponseSchema>;
@@ -711,20 +1624,20 @@ declare const ExecutionArtifactSchema: z.ZodObject<{
711
1624
  url: z.ZodString;
712
1625
  sizeBytes: z.ZodOptional<z.ZodNumber>;
713
1626
  }, "strip", z.ZodTypeAny, {
714
- url: string;
715
1627
  type: "execution:artifact";
716
1628
  requestId: string;
717
1629
  executionId: string;
718
1630
  name: string;
719
1631
  mime: string;
1632
+ url: string;
720
1633
  sizeBytes?: number | undefined;
721
1634
  }, {
722
- url: string;
723
1635
  type: "execution:artifact";
724
1636
  requestId: string;
725
1637
  executionId: string;
726
1638
  name: string;
727
1639
  mime: string;
1640
+ url: string;
728
1641
  sizeBytes?: number | undefined;
729
1642
  }>;
730
1643
  declare const ExecutionErrorEventSchema: z.ZodObject<{
@@ -1643,4 +2556,4 @@ interface PlatformCallResponse {
1643
2556
  durationMs: number;
1644
2557
  }
1645
2558
 
1646
- export { type AckMessage, AckMessageSchema, type AdapterCallContext, AdapterCallContextSchema, type AdapterCallMessage, AdapterCallMessageSchema, type AdapterCancelMessage, AdapterCancelMessageSchema, type AdapterChunkMessage, AdapterChunkMessageSchema, type AdapterErrorMessage, AdapterErrorMessageSchema, type AdapterName, AdapterNameSchema, type AdapterResponseMessage, AdapterResponseMessageSchema, type AuthContext, AuthContextSchema, type BulkRedirectMessage, BulkRedirectMessageSchema, CLIENT_PROTOCOL_VERSION, type CallMessage, CallMessageSchema, type CancelMessage, CancelMessageSchema, type ChatCompletionChoice, type ChatCompletionChunk, type ChatCompletionChunkDelta, type ChatCompletionRequest, ChatCompletionRequestSchema, type ChatCompletionResponse, type ChatCompletionUsage, ChatMessageSchema, ChatToolSchema, type ChunkMessage, ChunkMessageSchema, type ClientCancel, ClientCancelSchema, type ClientConnected, ClientConnectedSchema, type ClientError, ClientErrorSchema, type ClientHello, ClientHelloSchema, type ClientInboundMessage, type ClientOutboundMessage, type ClientSubscribe, ClientSubscribeSchema, type ClientUnsubscribe, ClientUnsubscribeSchema, type ConnectedMessage, ConnectedMessageSchema, type ErrorMessage, ErrorMessageSchema, type ExecuteRequest, ExecuteRequestSchema, type ExecutionArtifactMessage, ExecutionArtifactSchema, type ExecutionCancelledMessage, ExecutionCancelledSchema, type ExecutionDoneMessage, ExecutionDoneSchema, type ExecutionErrorEventMessage, ExecutionErrorEventSchema, type ExecutionEventMessage, type ExecutionOutputMessage, ExecutionOutputSchema, type ExecutionProgressMessage, ExecutionProgressSchema, type ExecutionRetryMessage, ExecutionRetrySchema, type GatewayConfig, GatewayConfigSchema, type HeartbeatMessage, HeartbeatMessageSchema, type HelloMessage, HelloMessageSchema, type HostCapability, HostCapabilitySchema, type HostDescriptor, HostDescriptorSchema, type HostRegisterResponse, HostRegisterResponseSchema, type HostRegistration, HostRegistrationSchema, type HostStatus, HostStatusSchema, type HostType, HostTypeSchema, type IHostStore, type InboundMessage, type JwtPayload, JwtPayloadSchema, LLMTierSchema, type NegotiateMessage, NegotiateMessageSchema, type OutboundMessage, type PlatformCallRequest, PlatformCallRequestSchema, type PlatformCallResponse, type PluginInfo, PluginInfoSchema, type RefreshRequest, RefreshRequestSchema, type RegisterRequest, RegisterRequestSchema, type RegisterResponse, RegisterResponseSchema, type ResultMessage, ResultMessageSchema, SUPPORTED_PROTOCOL_VERSIONS, type SerializedError, SerializedErrorSchema, StaticTokenEntrySchema, type SubscribeMessage, SubscribeMessageSchema, type TelemetryEvent, TelemetryEventSchema, type TelemetryIngestRequest, TelemetryIngestRequestSchema, type TelemetryIngestResponse, type TokenRequest, TokenRequestSchema, type TokenResponse, TokenResponseSchema, type TokenType, TokenTypeSchema, type TraceContext, TraceContextSchema, type UnsubscribeMessage, UnsubscribeMessageSchema, type UpstreamConfig, UpstreamConfigSchema, type WorkspaceInfo, WorkspaceInfoSchema };
2559
+ export { type AckMessage, AckMessageSchema, type AdapterCallContext, AdapterCallContextSchema, type AdapterCallMessage, AdapterCallMessageSchema, type AdapterCancelMessage, AdapterCancelMessageSchema, type AdapterChunkMessage, AdapterChunkMessageSchema, type AdapterErrorMessage, AdapterErrorMessageSchema, type AdapterName, AdapterNameSchema, type AdapterResponseMessage, AdapterResponseMessageSchema, type AuthConfig, AuthConfigSchema, type AuthContext, AuthContextSchema, type BulkRedirectMessage, BulkRedirectMessageSchema, CLIENT_PROTOCOL_VERSION, type CallMessage, CallMessageSchema, type CancelMessage, CancelMessageSchema, type ChatCompletionChoice, type ChatCompletionChunk, type ChatCompletionChunkDelta, type ChatCompletionRequest, ChatCompletionRequestSchema, type ChatCompletionResponse, type ChatCompletionUsage, ChatMessageSchema, ChatToolSchema, type ChunkMessage, ChunkMessageSchema, type ClientCancel, ClientCancelSchema, type ClientConnected, ClientConnectedSchema, type ClientError, ClientErrorSchema, type ClientHello, ClientHelloSchema, type ClientInboundMessage, type ClientOutboundMessage, type ClientSubscribe, ClientSubscribeSchema, type ClientUnsubscribe, ClientUnsubscribeSchema, type ConnectedMessage, ConnectedMessageSchema, type ErrorMessage, ErrorMessageSchema, type ExecuteRequest, ExecuteRequestSchema, type ExecutionArtifactMessage, ExecutionArtifactSchema, type ExecutionCancelledMessage, ExecutionCancelledSchema, type ExecutionDoneMessage, ExecutionDoneSchema, type ExecutionErrorEventMessage, ExecutionErrorEventSchema, type ExecutionEventMessage, type ExecutionOutputMessage, ExecutionOutputSchema, type ExecutionProgressMessage, ExecutionProgressSchema, type ExecutionRetryMessage, ExecutionRetrySchema, type GatewayConfig, GatewayConfigSchema, type HeartbeatMessage, HeartbeatMessageSchema, type HelloMessage, HelloMessageSchema, type HostCapability, HostCapabilitySchema, type HostDescriptor, HostDescriptorSchema, type HostRegisterResponse, HostRegisterResponseSchema, type HostRegistration, HostRegistrationSchema, type HostStatus, HostStatusSchema, type HostType, HostTypeSchema, type IHostStore, type InboundMessage, type JwtPayload, JwtPayloadSchema, LLMTierSchema, type NegotiateMessage, NegotiateMessageSchema, type OutboundMessage, type PlatformCallRequest, PlatformCallRequestSchema, type PlatformCallResponse, type PluginInfo, PluginInfoSchema, type PressureConfig, PressureConfigSchema, type PressureRouteOverride, PressureRouteOverrideSchema, type PressureTenantConfig, PressureTenantConfigSchema, type RateLimitConfig, RateLimitConfigSchema, type RefreshRequest, RefreshRequestSchema, type RegisterRequest, RegisterRequestSchema, type RegisterResponse, RegisterResponseSchema, type ResultMessage, ResultMessageSchema, SUPPORTED_PROTOCOL_VERSIONS, type SerializedError, SerializedErrorSchema, StaticTokenEntrySchema, type SubscribeMessage, SubscribeMessageSchema, type TelemetryEvent, TelemetryEventSchema, type TelemetryIngestRequest, TelemetryIngestRequestSchema, type TelemetryIngestResponse, type TenantsConfig, TenantsConfigSchema, type TokenRequest, TokenRequestSchema, type TokenResponse, TokenResponseSchema, type TokenType, TokenTypeSchema, type TraceContext, TraceContextSchema, type UnsubscribeMessage, UnsubscribeMessageSchema, type UpstreamConfig, UpstreamConfigSchema, type WorkspaceInfo, WorkspaceInfoSchema };