@vybestack/llxprt-code-auth 0.11.0 → 0.12.0-nightly.260910.2aac6841e

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.
@@ -9,7 +9,7 @@
9
9
  * SPDX-License-Identifier: Apache-2.0
10
10
  */
11
11
  export type * from './interfaces/index.js';
12
- export type { OAuthUIEvent, OAuthUIEventType, OAuthUICallback, } from './oauth-ui-events.js';
12
+ export type { OAuthUIEvent, OAuthUIEventType, OAuthUICallback, OAuthInteractiveAuthOutcomeKind, } from './oauth-ui-events.js';
13
13
  export { OAuthUIBridge, oauthUIBridge, OAUTH_UI_MAX_PENDING, } from './oauth-ui-bridge.js';
14
14
  export type { OAuthToken, CodexOAuthToken, AuthStatus, BucketStats, DeviceCodeResponse, } from './types.js';
15
15
  export { OAuthTokenSchema, CodexOAuthTokenSchema, AuthStatusSchema, BucketStatsSchema, DeviceCodeResponseSchema, } from './types.js';
@@ -19,7 +19,7 @@ export { OAuthError, OAuthErrorFactory, OAuthErrorCategory, OAuthErrorType, Retr
19
19
  export type { RetryConfig } from './oauth-errors.js';
20
20
  export { mergeRefreshedToken } from './token-merge.js';
21
21
  export type { OAuthTokenWithExtras } from './token-merge.js';
22
- export { sanitizeTokenForProxy } from './token-sanitization.js';
22
+ export { SanitizedOAuthTokenSchema, sanitizeTokenForProxy, } from './token-sanitization.js';
23
23
  export type { SanitizedOAuthToken } from './token-sanitization.js';
24
24
  export { AuthPrecedenceResolver } from './auth-precedence-resolver.js';
25
25
  export type { ResolveAuthOptions } from './auth-precedence-resolver.js';
@@ -33,5 +33,6 @@ export { encodeFrame, FrameDecoder, FrameError, MAX_FRAME_SIZE, V1_MAX_FRAME_SIZ
33
33
  export type { FrameDecoderOptions } from './proxy/framing.js';
34
34
  export { ProxySocketClient, REQUEST_TIMEOUT_MS, IDLE_TIMEOUT_MS, PROTOCOL_VERSION, } from './proxy/proxy-socket-client.js';
35
35
  export type { ProxyResponse, RequestOptions, } from './proxy/proxy-socket-client.js';
36
+ export { ProxyResponseSchema, OAuthTokenDataSchema, ProvidersDataSchema, BucketsDataSchema, BucketStatsDataSchema, ApiKeyDataSchema, ApiKeysDataSchema, HasApiKeyDataSchema, } from './proxy/proxy-payload-schemas.js';
36
37
  export { ProxyTokenStore } from './proxy/proxy-token-store.js';
37
38
  export { ProxyProviderKeyStorage } from './proxy/proxy-provider-key-storage.js';
package/dist/src/index.js CHANGED
@@ -11,7 +11,7 @@ export { KeyringTokenStore } from './keyring-token-store.js';
11
11
  export { OAuthError, OAuthErrorFactory, OAuthErrorCategory, OAuthErrorType, RetryHandler, GracefulErrorHandler, } from './oauth-errors.js';
12
12
  // ─── Token Utilities ─────────────────────────────────────────────────────────
13
13
  export { mergeRefreshedToken } from './token-merge.js';
14
- export { sanitizeTokenForProxy } from './token-sanitization.js';
14
+ export { SanitizedOAuthTokenSchema, sanitizeTokenForProxy, } from './token-sanitization.js';
15
15
  // ─── Precedence / Auth Resolution ────────────────────────────────────────────
16
16
  export { AuthPrecedenceResolver } from './auth-precedence-resolver.js';
17
17
  export { CredentialResolutionError } from './credential-resolution-error.js';
@@ -22,6 +22,7 @@ export { CodexDeviceFlow, CODEX_CONFIG } from './flows/codex-device-flow.js';
22
22
  // ─── Proxy Infrastructure ────────────────────────────────────────────────────
23
23
  export { encodeFrame, FrameDecoder, FrameError, MAX_FRAME_SIZE, V1_MAX_FRAME_SIZE, PARTIAL_FRAME_TIMEOUT_MS, } from './proxy/framing.js';
24
24
  export { ProxySocketClient, REQUEST_TIMEOUT_MS, IDLE_TIMEOUT_MS, PROTOCOL_VERSION, } from './proxy/proxy-socket-client.js';
25
+ export { ProxyResponseSchema, OAuthTokenDataSchema, ProvidersDataSchema, BucketsDataSchema, BucketStatsDataSchema, ApiKeyDataSchema, ApiKeysDataSchema, HasApiKeyDataSchema, } from './proxy/proxy-payload-schemas.js';
25
26
  export { ProxyTokenStore } from './proxy/proxy-token-store.js';
26
27
  export { ProxyProviderKeyStorage } from './proxy/proxy-provider-key-storage.js';
27
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,OAAO,EACL,aAAa,EACb,aAAa,EACb,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAW9B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAapB,gFAAgF;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,gFAAgF;AAChF,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAG3B,gFAAgF;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,gFAAgF;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAS7E,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,6BAA6B,EAC7B,yBAAyB,EACzB,uBAAuB,EACvB,eAAe,EACf,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAYzB,gFAAgF;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE7E,gFAAgF;AAChF,OAAO,EACL,WAAW,EACX,YAAY,EACZ,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAMxC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH,OAAO,EACL,aAAa,EACb,aAAa,EACb,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAW9B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAapB,gFAAgF;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,gFAAgF;AAChF,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAG3B,gFAAgF;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAGjC,gFAAgF;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAS7E,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,6BAA6B,EAC7B,yBAAyB,EACzB,uBAAuB,EACvB,eAAe,EACf,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAYzB,gFAAgF;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE7E,gFAAgF;AAChF,OAAO,EACL,WAAW,EACX,YAAY,EACZ,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAMxC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * How an MCP server authenticates (#3305).
8
+ *
9
+ * Lives here rather than in `core` so that `@vybestack/llxprt-code-mcp` can
10
+ * reach it without depending on `core`, which value-imports `mcp` and would
11
+ * therefore form a runtime cycle. This package is a dependency-graph leaf, so
12
+ * both `core` and `mcp` can depend on it.
13
+ */
14
+ export declare enum AuthProviderType {
15
+ DYNAMIC_DISCOVERY = "dynamic_discovery",
16
+ GOOGLE_CREDENTIALS = "google_credentials",
17
+ SERVICE_ACCOUNT_IMPERSONATION = "service_account_impersonation"
18
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * How an MCP server authenticates (#3305).
8
+ *
9
+ * Lives here rather than in `core` so that `@vybestack/llxprt-code-mcp` can
10
+ * reach it without depending on `core`, which value-imports `mcp` and would
11
+ * therefore form a runtime cycle. This package is a dependency-graph leaf, so
12
+ * both `core` and `mcp` can depend on it.
13
+ */
14
+ export var AuthProviderType;
15
+ (function (AuthProviderType) {
16
+ AuthProviderType["DYNAMIC_DISCOVERY"] = "dynamic_discovery";
17
+ AuthProviderType["GOOGLE_CREDENTIALS"] = "google_credentials";
18
+ AuthProviderType["SERVICE_ACCOUNT_IMPERSONATION"] = "service_account_impersonation";
19
+ })(AuthProviderType || (AuthProviderType = {}));
20
+ //# sourceMappingURL=mcp-auth-provider-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-auth-provider-type.js","sourceRoot":"","sources":["../../src/mcp-auth-provider-type.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,2DAAuC,CAAA;IACvC,6DAAyC,CAAA;IACzC,mFAA+D,CAAA;AACjE,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B"}
@@ -15,8 +15,13 @@
15
15
  * OAuth providers emit these event kinds; this seam lets the providers live
16
16
  * in `@vybestack/llxprt-code-auth` without importing UI types.
17
17
  */
18
+ /**
19
+ * @plan PLAN-20260827-ISSUE2562.P05
20
+ * @requirement REQ-2562-4
21
+ */
18
22
  /** The set of OAuth UI event discriminator values. */
19
- export type OAuthUIEventType = 'info' | 'warning' | 'error' | 'oauth_url';
23
+ export type OAuthUIEventType = 'info' | 'warning' | 'error' | 'oauth_url' | 'oauth_waiting' | 'oauth_settled';
24
+ export type OAuthInteractiveAuthOutcomeKind = 'succeeded' | 'cancelled' | 'failed' | 'timed_out';
20
25
  /**
21
26
  * Discriminated union of all OAuth UI events.
22
27
  *
@@ -24,6 +29,8 @@ export type OAuthUIEventType = 'info' | 'warning' | 'error' | 'oauth_url';
24
29
  * - `warning`: a non-fatal warning message (e.g. a recoverable fallback).
25
30
  * - `error`: a non-fatal error message.
26
31
  * - `oauth_url`: an authorization URL the user must visit.
32
+ * - `oauth_waiting`: a host-owned interactive authentication session is waiting.
33
+ * - `oauth_settled`: a host-owned interactive authentication session settled.
27
34
  */
28
35
  export type OAuthUIEvent = {
29
36
  readonly type: 'info';
@@ -40,6 +47,21 @@ export type OAuthUIEvent = {
40
47
  readonly type: 'oauth_url';
41
48
  readonly text: string;
42
49
  readonly url: string;
50
+ } | {
51
+ readonly type: 'oauth_waiting';
52
+ readonly provider: string;
53
+ readonly bucket?: string;
54
+ readonly requesterRuntimeKind: string;
55
+ readonly correlationId: string;
56
+ readonly waiterCount: number;
57
+ } | {
58
+ readonly type: 'oauth_settled';
59
+ readonly provider: string;
60
+ readonly bucket?: string;
61
+ readonly requesterRuntimeKind: string;
62
+ readonly correlationId: string;
63
+ readonly waiterCount: number;
64
+ readonly kind: OAuthInteractiveAuthOutcomeKind;
43
65
  };
44
66
  /**
45
67
  * Callback invoked when an {@link OAuthUIEvent} is emitted to a handler.
@@ -0,0 +1,130 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Narrowly scoped schemas that validate credential-proxy payloads at the
8
+ * IPC trust boundary (issue #2197). Successful response envelopes and
9
+ * operation-specific data are parsed with these before use.
10
+ */
11
+ import { z } from 'zod';
12
+ /**
13
+ * Stable error message for a successful response whose data does not match its
14
+ * operation schema. Used at every client payload boundary.
15
+ */
16
+ export declare const PROXY_PAYLOAD_ERROR = "PROXY_PAYLOAD_ERROR";
17
+ export declare function proxyPayloadError(message: string): Error;
18
+ /**
19
+ * Response envelope schema. `ok` must be boolean; `data` must be a
20
+ * non-null, non-array object when present; `error`, `code`, and
21
+ * `retryAfter` must have their protocol types when present. Unknown envelope
22
+ * fields, including the request `id`, are preserved so the same schema validates
23
+ * handshake and correlated frames.
24
+ */
25
+ export declare const ProxyResponseSchema: z.ZodObject<{
26
+ ok: z.ZodBoolean;
27
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
28
+ error: z.ZodOptional<z.ZodString>;
29
+ code: z.ZodOptional<z.ZodString>;
30
+ retryAfter: z.ZodOptional<z.ZodNumber>;
31
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
32
+ ok: z.ZodBoolean;
33
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
34
+ error: z.ZodOptional<z.ZodString>;
35
+ code: z.ZodOptional<z.ZodString>;
36
+ retryAfter: z.ZodOptional<z.ZodNumber>;
37
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
38
+ ok: z.ZodBoolean;
39
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
40
+ error: z.ZodOptional<z.ZodString>;
41
+ code: z.ZodOptional<z.ZodString>;
42
+ retryAfter: z.ZodOptional<z.ZodNumber>;
43
+ }, z.ZodTypeAny, "passthrough">>;
44
+ export type ProxyResponse = z.infer<typeof ProxyResponseSchema>;
45
+ /** Success payload for get_token. Validates and preserves the full OAuth token. */
46
+ export declare const OAuthTokenDataSchema: z.ZodObject<{
47
+ access_token: z.ZodString;
48
+ refresh_token: z.ZodOptional<z.ZodString>;
49
+ expiry: z.ZodNumber;
50
+ scope: z.ZodOptional<z.ZodNullable<z.ZodString>>;
51
+ token_type: z.ZodEnum<["Bearer", "bearer"]>;
52
+ resource_url: z.ZodOptional<z.ZodString>;
53
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
54
+ access_token: z.ZodString;
55
+ refresh_token: z.ZodOptional<z.ZodString>;
56
+ expiry: z.ZodNumber;
57
+ scope: z.ZodOptional<z.ZodNullable<z.ZodString>>;
58
+ token_type: z.ZodEnum<["Bearer", "bearer"]>;
59
+ resource_url: z.ZodOptional<z.ZodString>;
60
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
61
+ access_token: z.ZodString;
62
+ refresh_token: z.ZodOptional<z.ZodString>;
63
+ expiry: z.ZodNumber;
64
+ scope: z.ZodOptional<z.ZodNullable<z.ZodString>>;
65
+ token_type: z.ZodEnum<["Bearer", "bearer"]>;
66
+ resource_url: z.ZodOptional<z.ZodString>;
67
+ }, z.ZodTypeAny, "passthrough">>;
68
+ /** Success payload for list_providers. */
69
+ export declare const ProvidersDataSchema: z.ZodObject<{
70
+ providers: z.ZodArray<z.ZodString, "many">;
71
+ }, "strip", z.ZodTypeAny, {
72
+ providers: string[];
73
+ }, {
74
+ providers: string[];
75
+ }>;
76
+ /** Success payload for list_buckets. */
77
+ export declare const BucketsDataSchema: z.ZodObject<{
78
+ buckets: z.ZodArray<z.ZodString, "many">;
79
+ }, "strip", z.ZodTypeAny, {
80
+ buckets: string[];
81
+ }, {
82
+ buckets: string[];
83
+ }>;
84
+ /** Success payload for get_bucket_stats. */
85
+ export declare const BucketStatsDataSchema: z.ZodObject<{
86
+ bucket: z.ZodString;
87
+ requestCount: z.ZodNumber;
88
+ percentage: z.ZodNumber;
89
+ lastUsed: z.ZodOptional<z.ZodNumber>;
90
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
91
+ bucket: z.ZodString;
92
+ requestCount: z.ZodNumber;
93
+ percentage: z.ZodNumber;
94
+ lastUsed: z.ZodOptional<z.ZodNumber>;
95
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
96
+ bucket: z.ZodString;
97
+ requestCount: z.ZodNumber;
98
+ percentage: z.ZodNumber;
99
+ lastUsed: z.ZodOptional<z.ZodNumber>;
100
+ }, z.ZodTypeAny, "passthrough">>;
101
+ /** Success payload for get_api_key. */
102
+ export declare const ApiKeyDataSchema: z.ZodObject<{
103
+ key: z.ZodString;
104
+ }, "strip", z.ZodTypeAny, {
105
+ key: string;
106
+ }, {
107
+ key: string;
108
+ }>;
109
+ /** Success payload for list_api_keys. */
110
+ export declare const ApiKeysDataSchema: z.ZodObject<{
111
+ keys: z.ZodArray<z.ZodString, "many">;
112
+ }, "strip", z.ZodTypeAny, {
113
+ keys: string[];
114
+ }, {
115
+ keys: string[];
116
+ }>;
117
+ /** Success payload for has_api_key. */
118
+ export declare const HasApiKeyDataSchema: z.ZodObject<{
119
+ exists: z.ZodBoolean;
120
+ }, "strip", z.ZodTypeAny, {
121
+ exists: boolean;
122
+ }, {
123
+ exists: boolean;
124
+ }>;
125
+ /**
126
+ * Parses an operation-specific successful payload with the given schema. When
127
+ * the data is missing, malformed, or wrong-typed, throws the stable proxy
128
+ * payload validation error.
129
+ */
130
+ export declare function parseSuccessPayload<T>(schema: z.ZodType<T, z.ZodTypeDef, unknown>, data: Record<string, unknown> | undefined, operation: string): T;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Narrowly scoped schemas that validate credential-proxy payloads at the
8
+ * IPC trust boundary (issue #2197). Successful response envelopes and
9
+ * operation-specific data are parsed with these before use.
10
+ */
11
+ import { z } from 'zod';
12
+ import { OAuthTokenSchema, BucketStatsSchema } from '../types.js';
13
+ /**
14
+ * Stable error message for a successful response whose data does not match its
15
+ * operation schema. Used at every client payload boundary.
16
+ */
17
+ export const PROXY_PAYLOAD_ERROR = 'PROXY_PAYLOAD_ERROR';
18
+ export function proxyPayloadError(message) {
19
+ return new Error(`${PROXY_PAYLOAD_ERROR}: ${message}`);
20
+ }
21
+ /**
22
+ * Response envelope schema. `ok` must be boolean; `data` must be a
23
+ * non-null, non-array object when present; `error`, `code`, and
24
+ * `retryAfter` must have their protocol types when present. Unknown envelope
25
+ * fields, including the request `id`, are preserved so the same schema validates
26
+ * handshake and correlated frames.
27
+ */
28
+ export const ProxyResponseSchema = z
29
+ .object({
30
+ ok: z.boolean(),
31
+ data: z.record(z.string(), z.unknown()).optional(),
32
+ error: z.string().optional(),
33
+ code: z.string().optional(),
34
+ retryAfter: z.number().optional(),
35
+ })
36
+ .passthrough();
37
+ /** Success payload for get_token. Validates and preserves the full OAuth token. */
38
+ export const OAuthTokenDataSchema = OAuthTokenSchema.passthrough();
39
+ /** Success payload for list_providers. */
40
+ export const ProvidersDataSchema = z.object({
41
+ providers: z.array(z.string()),
42
+ });
43
+ /** Success payload for list_buckets. */
44
+ export const BucketsDataSchema = z.object({ buckets: z.array(z.string()) });
45
+ /** Success payload for get_bucket_stats. */
46
+ export const BucketStatsDataSchema = BucketStatsSchema.passthrough();
47
+ /** Success payload for get_api_key. */
48
+ export const ApiKeyDataSchema = z.object({ key: z.string() });
49
+ /** Success payload for list_api_keys. */
50
+ export const ApiKeysDataSchema = z.object({ keys: z.array(z.string()) });
51
+ /** Success payload for has_api_key. */
52
+ export const HasApiKeyDataSchema = z.object({ exists: z.boolean() });
53
+ /**
54
+ * Parses an operation-specific successful payload with the given schema. When
55
+ * the data is missing, malformed, or wrong-typed, throws the stable proxy
56
+ * payload validation error.
57
+ */
58
+ export function parseSuccessPayload(schema, data, operation) {
59
+ if (data === undefined) {
60
+ throw proxyPayloadError(`${operation}: missing data`);
61
+ }
62
+ const parsed = schema.safeParse(data);
63
+ if (!parsed.success) {
64
+ throw proxyPayloadError(`${operation}: malformed payload`);
65
+ }
66
+ return parsed.data;
67
+ }
68
+ //# sourceMappingURL=proxy-payload-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-payload-schemas.js","sourceRoot":"","sources":["../../../src/proxy/proxy-payload-schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAElE;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,IAAI,KAAK,CAAC,GAAG,mBAAmB,KAAK,OAAO,EAAE,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;IACf,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC;KACD,WAAW,EAAE,CAAC;AAIjB,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;AAEnE,0CAA0C;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC/B,CAAC,CAAC;AAEH,wCAAwC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAE5E,4CAA4C;AAC5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC;AAErE,uCAAuC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAE9D,yCAAyC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAEzE,uCAAuC;AACvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAErE;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA2C,EAC3C,IAAyC,EACzC,SAAiB;IAEjB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,iBAAiB,CAAC,GAAG,SAAS,gBAAgB,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,iBAAiB,CAAC,GAAG,SAAS,qBAAqB,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
@@ -3,6 +3,7 @@
3
3
  * Copyright 2025 Vybestack LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { ApiKeyDataSchema, ApiKeysDataSchema, HasApiKeyDataSchema, parseSuccessPayload, } from './proxy-payload-schemas.js';
6
7
  export class ProxyProviderKeyStorage {
7
8
  client;
8
9
  constructor(client) {
@@ -15,21 +16,22 @@ export class ProxyProviderKeyStorage {
15
16
  return null;
16
17
  throw new Error(response.error ?? 'proxy error');
17
18
  }
18
- return response.data.key;
19
+ return parseSuccessPayload(ApiKeyDataSchema, response.data, 'get_api_key')
20
+ .key;
19
21
  }
20
22
  async listKeys() {
21
23
  const response = await this.client.request('list_api_keys', {});
22
24
  if (!response.ok) {
23
25
  throw new Error(response.error ?? 'proxy error');
24
26
  }
25
- return response.data.keys;
27
+ return parseSuccessPayload(ApiKeysDataSchema, response.data, 'list_api_keys').keys;
26
28
  }
27
29
  async hasKey(name) {
28
30
  const response = await this.client.request('has_api_key', { name });
29
31
  if (!response.ok) {
30
32
  throw new Error(response.error ?? 'proxy error');
31
33
  }
32
- return response.data.exists;
34
+ return parseSuccessPayload(HasApiKeyDataSchema, response.data, 'has_api_key').exists;
33
35
  }
34
36
  async saveKey(_name, _apiKey) {
35
37
  throw new Error('API key management is not available in sandbox mode');
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-provider-key-storage.js","sourceRoot":"","sources":["../../../src/proxy/proxy-provider-key-storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,MAAM,OAAO,uBAAuB;IACjB,MAAM,CAAoB;IAE3C,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;gBAAE,OAAO,IAAI,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,QAAQ,CAAC,IAAK,CAAC,GAAa,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,QAAQ,CAAC,IAAK,CAAC,IAAgB,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,QAAQ,CAAC,IAAK,CAAC,MAAiB,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,OAAe;QAC1C,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;CACF"}
1
+ {"version":3,"file":"proxy-provider-key-storage.js","sourceRoot":"","sources":["../../../src/proxy/proxy-provider-key-storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,OAAO,uBAAuB;IACjB,MAAM,CAAoB;IAE3C,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;gBAAE,OAAO,IAAI,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,mBAAmB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;aACvE,GAAG,CAAC;IACT,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,mBAAmB,CACxB,iBAAiB,EACjB,QAAQ,CAAC,IAAI,EACb,eAAe,CAChB,CAAC,IAAI,CAAC;IACT,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,mBAAmB,CACxB,mBAAmB,EACnB,QAAQ,CAAC,IAAI,EACb,aAAa,CACd,CAAC,MAAM,CAAC;IACX,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,OAAe;QAC1C,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;CACF"}
@@ -3,16 +3,11 @@
3
3
  * Copyright 2025 Vybestack LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { type ProxyResponse } from './proxy-payload-schemas.js';
7
+ export type { ProxyResponse } from './proxy-payload-schemas.js';
6
8
  export declare const REQUEST_TIMEOUT_MS = 30000;
7
9
  export declare const IDLE_TIMEOUT_MS = 300000;
8
10
  export declare const PROTOCOL_VERSION = 2;
9
- export type ProxyResponse = {
10
- ok: boolean;
11
- data?: Record<string, unknown>;
12
- error?: string;
13
- code?: string;
14
- retryAfter?: number;
15
- };
16
11
  /**
17
12
  * Per-request options controlling timeout and cancellation.
18
13
  *
@@ -13,27 +13,15 @@
13
13
  import * as net from 'node:net';
14
14
  import * as crypto from 'node:crypto';
15
15
  import { encodeFrame, FrameDecoder } from './framing.js';
16
+ import { ProxyResponseSchema, } from './proxy-payload-schemas.js';
16
17
  export const REQUEST_TIMEOUT_MS = 30000;
17
18
  export const IDLE_TIMEOUT_MS = 300000;
18
19
  export const PROTOCOL_VERSION = 2;
19
- /** Validates that a decoded frame has the shape of a ProxyResponse, guarding
20
- * against adversarial or malformed server responses with unexpected types
21
- * for `ok`, `code`, or `error`. */
22
- function isProxyResponseFrame(frame) {
23
- if (typeof frame.ok !== 'boolean')
24
- return false;
25
- if (frame.code !== undefined && typeof frame.code !== 'string')
26
- return false;
27
- if (frame.error !== undefined && typeof frame.error !== 'string')
28
- return false;
29
- if (frame.retryAfter !== undefined && typeof frame.retryAfter !== 'number')
30
- return false;
31
- if (frame.data !== undefined &&
32
- (typeof frame.data !== 'object' ||
33
- frame.data === null ||
34
- Array.isArray(frame.data)))
35
- return false;
36
- return true;
20
+ function parseResponseFrame(frame) {
21
+ const parsed = ProxyResponseSchema.safeParse(frame);
22
+ if (!parsed.success)
23
+ return null;
24
+ return parsed.data;
37
25
  }
38
26
  const PROXY_CONNECT_FAILURE_PATTERN = /connect (?:ECONNREFUSED|ENOENT|EACCES|EHOSTUNREACH|ENETUNREACH|ETIMEDOUT|EPERM|ENOTDIR)/i;
39
27
  export class ProxyRequestError extends Error {
@@ -412,8 +400,9 @@ export class ProxySocketClient {
412
400
  return;
413
401
  }
414
402
  this.handshakeResolver = null;
415
- if (isProxyResponseFrame(frame)) {
416
- resolver.resolve(frame);
403
+ const parsedFrame = parseResponseFrame(frame);
404
+ if (parsedFrame !== null) {
405
+ resolver.resolve(parsedFrame);
417
406
  }
418
407
  else {
419
408
  // Reject first, then clean up. destroy() will not double-reject
@@ -433,7 +422,7 @@ export class ProxySocketClient {
433
422
  */
434
423
  resolvePendingRequest(frame) {
435
424
  const id = frame.id;
436
- if (!id) {
425
+ if (typeof id !== 'string' || id === '') {
437
426
  return;
438
427
  }
439
428
  const pending = this.pendingRequests.get(id);
@@ -441,8 +430,9 @@ export class ProxySocketClient {
441
430
  clearTimeout(pending.timer);
442
431
  this.pendingRequests.delete(id);
443
432
  this.releaseAbortCleanup(id);
444
- if (isProxyResponseFrame(frame)) {
445
- pending.resolve(frame);
433
+ const parsedFrame = parseResponseFrame(frame);
434
+ if (parsedFrame !== null) {
435
+ pending.resolve(parsedFrame);
446
436
  }
447
437
  else {
448
438
  pending.reject(new Error(`Malformed response for request ${id}`));
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-socket-client.js","sourceRoot":"","sources":["../../../src/proxy/proxy-socket-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy-socket-client.js","sourceRoot":"","sources":["../../../src/proxy/proxy-socket-client.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  * Copyright 2025 Vybestack LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { OAuthTokenDataSchema, parseSuccessPayload, ProvidersDataSchema, BucketsDataSchema, BucketStatsDataSchema, } from './proxy-payload-schemas.js';
6
7
  import { ProxySocketClient } from './proxy-socket-client.js';
7
8
  export class ProxyTokenStore {
8
9
  client;
@@ -18,7 +19,7 @@ export class ProxyTokenStore {
18
19
  return null;
19
20
  if (!response.ok)
20
21
  throw new Error(response.error ?? 'proxy error');
21
- return response.data;
22
+ return parseSuccessPayload(OAuthTokenDataSchema, response.data, 'get_token');
22
23
  }
23
24
  async saveToken(provider, token, bucket) {
24
25
  const response = await this.client.request('save_token', {
@@ -39,15 +40,20 @@ export class ProxyTokenStore {
39
40
  }
40
41
  async listProviders() {
41
42
  const response = await this.client.request('list_providers', {});
42
- if (!response.ok)
43
+ if (!response.ok) {
43
44
  throw new Error(response.error ?? 'proxy error');
44
- return response.data.providers;
45
+ }
46
+ return parseSuccessPayload(ProvidersDataSchema, response.data, 'list_providers').providers;
45
47
  }
46
48
  async listBuckets(provider) {
47
- const response = await this.client.request('list_buckets', { provider });
48
- if (!response.ok)
49
+ const response = await this.client.request('list_buckets', {
50
+ provider,
51
+ });
52
+ if (!response.ok) {
49
53
  throw new Error(response.error ?? 'proxy error');
50
- return response.data.buckets;
54
+ }
55
+ return parseSuccessPayload(BucketsDataSchema, response.data, 'list_buckets')
56
+ .buckets;
51
57
  }
52
58
  async getBucketStats(provider, bucket) {
53
59
  const response = await this.client.request('get_bucket_stats', {
@@ -58,13 +64,7 @@ export class ProxyTokenStore {
58
64
  return null;
59
65
  if (!response.ok)
60
66
  throw new Error(response.error ?? 'proxy error');
61
- const data = response.data;
62
- return {
63
- bucket,
64
- requestCount: typeof data.requestCount === 'number' ? data.requestCount : 0,
65
- percentage: typeof data.percentage === 'number' ? data.percentage : 0,
66
- lastUsed: data.lastUsed,
67
- };
67
+ return parseSuccessPayload(BucketStatsDataSchema, response.data, 'get_bucket_stats');
68
68
  }
69
69
  async acquireRefreshLock(_provider, _options) {
70
70
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-token-store.js","sourceRoot":"","sources":["../../../src/proxy/proxy-token-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,OAAO,eAAe;IACT,MAAM,CAAoB;IAE3C,YAAY,UAAkB,EAAE,eAAwB;QACtD,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,QAAgB,EAChB,MAAe;QAEf,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE;YACtD,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC,IAA6B,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,SAAS,CACb,QAAgB,EAChB,KAAiB,EACjB,MAAe;QAEf,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE;YACvD,QAAQ;YACR,MAAM;YACN,KAAK;SACN,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,MAAe;QACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE;YACzD,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QACnE,OAAQ,QAAQ,CAAC,IAAgC,CAAC,SAAqB,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QACnE,OAAQ,QAAQ,CAAC,IAAgC,CAAC,OAAmB,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,MAAc;QAEd,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE;YAC7D,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAA+B,CAAC;QACtD,OAAO;YACL,MAAM;YACN,YAAY,EACV,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/D,UAAU,EAAE,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrE,QAAQ,EAAE,IAAI,CAAC,QAA8B;SAC9C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,SAAiB,EACjB,QAA+C;QAE/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,SAAiB,EAAE,OAAgB;QAC1D,8CAA8C;IAChD,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,SAAiB,EACjB,QAA+C;QAE/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,OAAgB;QACvD,2CAA2C;IAC7C,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"proxy-token-store.js","sourceRoot":"","sources":["../../../src/proxy/proxy-token-store.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,47 @@
11
11
  * @requirement R10.1, R10.2, R10.3
12
12
  * @pseudocode analysis/pseudocode/002-token-sanitization-merge.md
13
13
  */
14
+ import type { z } from 'zod';
14
15
  import { type OAuthToken } from './types.js';
15
- export type SanitizedOAuthToken = Omit<OAuthToken, 'refresh_token'> & Record<string, unknown>;
16
+ /**
17
+ * Sanitized OAuth token schema: validates the supported OAuth fields while
18
+ * preserving provider-specific extension fields before the refresh_token is stripped.
19
+ */
20
+ export declare const SanitizedOAuthTokenSchema: z.ZodEffects<z.ZodObject<{
21
+ access_token: z.ZodString;
22
+ refresh_token: z.ZodOptional<z.ZodString>;
23
+ expiry: z.ZodNumber;
24
+ scope: z.ZodOptional<z.ZodNullable<z.ZodString>>;
25
+ token_type: z.ZodEnum<["Bearer", "bearer"]>;
26
+ resource_url: z.ZodOptional<z.ZodString>;
27
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
28
+ access_token: z.ZodString;
29
+ refresh_token: z.ZodOptional<z.ZodString>;
30
+ expiry: z.ZodNumber;
31
+ scope: z.ZodOptional<z.ZodNullable<z.ZodString>>;
32
+ token_type: z.ZodEnum<["Bearer", "bearer"]>;
33
+ resource_url: z.ZodOptional<z.ZodString>;
34
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
35
+ access_token: z.ZodString;
36
+ refresh_token: z.ZodOptional<z.ZodString>;
37
+ expiry: z.ZodNumber;
38
+ scope: z.ZodOptional<z.ZodNullable<z.ZodString>>;
39
+ token_type: z.ZodEnum<["Bearer", "bearer"]>;
40
+ resource_url: z.ZodOptional<z.ZodString>;
41
+ }, z.ZodTypeAny, "passthrough">>, {
42
+ [k: string]: unknown;
43
+ access_token: string;
44
+ expiry: number;
45
+ token_type: "Bearer" | "bearer";
46
+ scope?: string | null | undefined;
47
+ resource_url?: string | undefined;
48
+ }, z.objectInputType<{
49
+ access_token: z.ZodString;
50
+ refresh_token: z.ZodOptional<z.ZodString>;
51
+ expiry: z.ZodNumber;
52
+ scope: z.ZodOptional<z.ZodNullable<z.ZodString>>;
53
+ token_type: z.ZodEnum<["Bearer", "bearer"]>;
54
+ resource_url: z.ZodOptional<z.ZodString>;
55
+ }, z.ZodTypeAny, "passthrough">>;
56
+ export type SanitizedOAuthToken = z.infer<typeof SanitizedOAuthTokenSchema>;
16
57
  export declare function sanitizeTokenForProxy(token: OAuthToken): SanitizedOAuthToken;
@@ -3,8 +3,16 @@
3
3
  * Copyright 2025 Vybestack LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { OAuthTokenSchema } from './types.js';
7
+ /**
8
+ * Sanitized OAuth token schema: validates the supported OAuth fields while
9
+ * preserving provider-specific extension fields before the refresh_token is stripped.
10
+ */
11
+ export const SanitizedOAuthTokenSchema = OAuthTokenSchema.passthrough().transform((token) => {
12
+ const { refresh_token: _refresh_token, ...rest } = token;
13
+ return rest;
14
+ });
6
15
  export function sanitizeTokenForProxy(token) {
7
- const { refresh_token: _refresh_token, ...sanitized } = token;
8
- return sanitized;
16
+ return SanitizedOAuthTokenSchema.parse(token);
9
17
  }
10
18
  //# sourceMappingURL=token-sanitization.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"token-sanitization.js","sourceRoot":"","sources":["../../src/token-sanitization.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,MAAM,UAAU,qBAAqB,CAAC,KAAiB;IACrD,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"token-sanitization.js","sourceRoot":"","sources":["../../src/token-sanitization.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,EAAE,gBAAgB,EAAmB,MAAM,YAAY,CAAC;AAE/D;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GACpC,gBAAgB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;IACjD,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,CAAC;AAIL,MAAM,UAAU,qBAAqB,CAAC,KAAiB;IACrD,OAAO,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vybestack/llxprt-code-auth",
3
- "version": "0.11.0",
3
+ "version": "0.12.0-nightly.260910.2aac6841e",
4
4
  "description": "LLxprt Code Auth — authentication and authorization domain",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -65,6 +65,11 @@
65
65
  "types": "./dist/src/proxy/proxy-token-store.d.ts",
66
66
  "bun": "./src/proxy/proxy-token-store.ts",
67
67
  "import": "./dist/src/proxy/proxy-token-store.js"
68
+ },
69
+ "./mcp-auth-provider-type.js": {
70
+ "types": "./dist/src/mcp-auth-provider-type.d.ts",
71
+ "bun": "./src/mcp-auth-provider-type.ts",
72
+ "import": "./dist/src/mcp-auth-provider-type.js"
68
73
  }
69
74
  },
70
75
  "scripts": {
package/src/index.ts CHANGED
@@ -20,6 +20,7 @@ export type {
20
20
  OAuthUIEvent,
21
21
  OAuthUIEventType,
22
22
  OAuthUICallback,
23
+ OAuthInteractiveAuthOutcomeKind,
23
24
  } from './oauth-ui-events.js';
24
25
  export {
25
26
  OAuthUIBridge,
@@ -73,7 +74,10 @@ export type { RetryConfig } from './oauth-errors.js';
73
74
  export { mergeRefreshedToken } from './token-merge.js';
74
75
  export type { OAuthTokenWithExtras } from './token-merge.js';
75
76
 
76
- export { sanitizeTokenForProxy } from './token-sanitization.js';
77
+ export {
78
+ SanitizedOAuthTokenSchema,
79
+ sanitizeTokenForProxy,
80
+ } from './token-sanitization.js';
77
81
  export type { SanitizedOAuthToken } from './token-sanitization.js';
78
82
 
79
83
  // ─── Precedence / Auth Resolution ────────────────────────────────────────────
@@ -140,5 +144,16 @@ export type {
140
144
  RequestOptions,
141
145
  } from './proxy/proxy-socket-client.js';
142
146
 
147
+ export {
148
+ ProxyResponseSchema,
149
+ OAuthTokenDataSchema,
150
+ ProvidersDataSchema,
151
+ BucketsDataSchema,
152
+ BucketStatsDataSchema,
153
+ ApiKeyDataSchema,
154
+ ApiKeysDataSchema,
155
+ HasApiKeyDataSchema,
156
+ } from './proxy/proxy-payload-schemas.js';
157
+
143
158
  export { ProxyTokenStore } from './proxy/proxy-token-store.js';
144
159
  export { ProxyProviderKeyStorage } from './proxy/proxy-provider-key-storage.js';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ /**
8
+ * How an MCP server authenticates (#3305).
9
+ *
10
+ * Lives here rather than in `core` so that `@vybestack/llxprt-code-mcp` can
11
+ * reach it without depending on `core`, which value-imports `mcp` and would
12
+ * therefore form a runtime cycle. This package is a dependency-graph leaf, so
13
+ * both `core` and `mcp` can depend on it.
14
+ */
15
+ export enum AuthProviderType {
16
+ DYNAMIC_DISCOVERY = 'dynamic_discovery',
17
+ GOOGLE_CREDENTIALS = 'google_credentials',
18
+ SERVICE_ACCOUNT_IMPERSONATION = 'service_account_impersonation',
19
+ }
@@ -17,8 +17,24 @@
17
17
  * in `@vybestack/llxprt-code-auth` without importing UI types.
18
18
  */
19
19
 
20
+ /**
21
+ * @plan PLAN-20260827-ISSUE2562.P05
22
+ * @requirement REQ-2562-4
23
+ */
20
24
  /** The set of OAuth UI event discriminator values. */
21
- export type OAuthUIEventType = 'info' | 'warning' | 'error' | 'oauth_url';
25
+ export type OAuthUIEventType =
26
+ | 'info'
27
+ | 'warning'
28
+ | 'error'
29
+ | 'oauth_url'
30
+ | 'oauth_waiting'
31
+ | 'oauth_settled';
32
+
33
+ export type OAuthInteractiveAuthOutcomeKind =
34
+ | 'succeeded'
35
+ | 'cancelled'
36
+ | 'failed'
37
+ | 'timed_out';
22
38
 
23
39
  /**
24
40
  * Discriminated union of all OAuth UI events.
@@ -27,6 +43,8 @@ export type OAuthUIEventType = 'info' | 'warning' | 'error' | 'oauth_url';
27
43
  * - `warning`: a non-fatal warning message (e.g. a recoverable fallback).
28
44
  * - `error`: a non-fatal error message.
29
45
  * - `oauth_url`: an authorization URL the user must visit.
46
+ * - `oauth_waiting`: a host-owned interactive authentication session is waiting.
47
+ * - `oauth_settled`: a host-owned interactive authentication session settled.
30
48
  */
31
49
  export type OAuthUIEvent =
32
50
  | {
@@ -37,7 +55,24 @@ export type OAuthUIEvent =
37
55
  }
38
56
  | { readonly type: 'warning'; readonly text: string }
39
57
  | { readonly type: 'error'; readonly text: string }
40
- | { readonly type: 'oauth_url'; readonly text: string; readonly url: string };
58
+ | { readonly type: 'oauth_url'; readonly text: string; readonly url: string }
59
+ | {
60
+ readonly type: 'oauth_waiting';
61
+ readonly provider: string;
62
+ readonly bucket?: string;
63
+ readonly requesterRuntimeKind: string;
64
+ readonly correlationId: string;
65
+ readonly waiterCount: number;
66
+ }
67
+ | {
68
+ readonly type: 'oauth_settled';
69
+ readonly provider: string;
70
+ readonly bucket?: string;
71
+ readonly requesterRuntimeKind: string;
72
+ readonly correlationId: string;
73
+ readonly waiterCount: number;
74
+ readonly kind: OAuthInteractiveAuthOutcomeKind;
75
+ };
41
76
 
42
77
  /**
43
78
  * Callback invoked when an {@link OAuthUIEvent} is emitted to a handler.
@@ -0,0 +1,86 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ /**
8
+ * Narrowly scoped schemas that validate credential-proxy payloads at the
9
+ * IPC trust boundary (issue #2197). Successful response envelopes and
10
+ * operation-specific data are parsed with these before use.
11
+ */
12
+
13
+ import { z } from 'zod';
14
+ import { OAuthTokenSchema, BucketStatsSchema } from '../types.js';
15
+
16
+ /**
17
+ * Stable error message for a successful response whose data does not match its
18
+ * operation schema. Used at every client payload boundary.
19
+ */
20
+ export const PROXY_PAYLOAD_ERROR = 'PROXY_PAYLOAD_ERROR';
21
+
22
+ export function proxyPayloadError(message: string): Error {
23
+ return new Error(`${PROXY_PAYLOAD_ERROR}: ${message}`);
24
+ }
25
+
26
+ /**
27
+ * Response envelope schema. `ok` must be boolean; `data` must be a
28
+ * non-null, non-array object when present; `error`, `code`, and
29
+ * `retryAfter` must have their protocol types when present. Unknown envelope
30
+ * fields, including the request `id`, are preserved so the same schema validates
31
+ * handshake and correlated frames.
32
+ */
33
+ export const ProxyResponseSchema = z
34
+ .object({
35
+ ok: z.boolean(),
36
+ data: z.record(z.string(), z.unknown()).optional(),
37
+ error: z.string().optional(),
38
+ code: z.string().optional(),
39
+ retryAfter: z.number().optional(),
40
+ })
41
+ .passthrough();
42
+
43
+ export type ProxyResponse = z.infer<typeof ProxyResponseSchema>;
44
+
45
+ /** Success payload for get_token. Validates and preserves the full OAuth token. */
46
+ export const OAuthTokenDataSchema = OAuthTokenSchema.passthrough();
47
+
48
+ /** Success payload for list_providers. */
49
+ export const ProvidersDataSchema = z.object({
50
+ providers: z.array(z.string()),
51
+ });
52
+
53
+ /** Success payload for list_buckets. */
54
+ export const BucketsDataSchema = z.object({ buckets: z.array(z.string()) });
55
+
56
+ /** Success payload for get_bucket_stats. */
57
+ export const BucketStatsDataSchema = BucketStatsSchema.passthrough();
58
+
59
+ /** Success payload for get_api_key. */
60
+ export const ApiKeyDataSchema = z.object({ key: z.string() });
61
+
62
+ /** Success payload for list_api_keys. */
63
+ export const ApiKeysDataSchema = z.object({ keys: z.array(z.string()) });
64
+
65
+ /** Success payload for has_api_key. */
66
+ export const HasApiKeyDataSchema = z.object({ exists: z.boolean() });
67
+
68
+ /**
69
+ * Parses an operation-specific successful payload with the given schema. When
70
+ * the data is missing, malformed, or wrong-typed, throws the stable proxy
71
+ * payload validation error.
72
+ */
73
+ export function parseSuccessPayload<T>(
74
+ schema: z.ZodType<T, z.ZodTypeDef, unknown>,
75
+ data: Record<string, unknown> | undefined,
76
+ operation: string,
77
+ ): T {
78
+ if (data === undefined) {
79
+ throw proxyPayloadError(`${operation}: missing data`);
80
+ }
81
+ const parsed = schema.safeParse(data);
82
+ if (!parsed.success) {
83
+ throw proxyPayloadError(`${operation}: malformed payload`);
84
+ }
85
+ return parsed.data;
86
+ }
@@ -14,6 +14,12 @@
14
14
  */
15
15
 
16
16
  import type { ProxySocketClient } from './proxy-socket-client.js';
17
+ import {
18
+ ApiKeyDataSchema,
19
+ ApiKeysDataSchema,
20
+ HasApiKeyDataSchema,
21
+ parseSuccessPayload,
22
+ } from './proxy-payload-schemas.js';
17
23
 
18
24
  export class ProxyProviderKeyStorage {
19
25
  private readonly client: ProxySocketClient;
@@ -28,7 +34,8 @@ export class ProxyProviderKeyStorage {
28
34
  if (response.code === 'NOT_FOUND') return null;
29
35
  throw new Error(response.error ?? 'proxy error');
30
36
  }
31
- return response.data!.key as string;
37
+ return parseSuccessPayload(ApiKeyDataSchema, response.data, 'get_api_key')
38
+ .key;
32
39
  }
33
40
 
34
41
  async listKeys(): Promise<string[]> {
@@ -36,7 +43,11 @@ export class ProxyProviderKeyStorage {
36
43
  if (!response.ok) {
37
44
  throw new Error(response.error ?? 'proxy error');
38
45
  }
39
- return response.data!.keys as string[];
46
+ return parseSuccessPayload(
47
+ ApiKeysDataSchema,
48
+ response.data,
49
+ 'list_api_keys',
50
+ ).keys;
40
51
  }
41
52
 
42
53
  async hasKey(name: string): Promise<boolean> {
@@ -44,7 +55,11 @@ export class ProxyProviderKeyStorage {
44
55
  if (!response.ok) {
45
56
  throw new Error(response.error ?? 'proxy error');
46
57
  }
47
- return response.data!.exists as boolean;
58
+ return parseSuccessPayload(
59
+ HasApiKeyDataSchema,
60
+ response.data,
61
+ 'has_api_key',
62
+ ).exists;
48
63
  }
49
64
 
50
65
  async saveKey(_name: string, _apiKey: string): Promise<void> {
@@ -15,19 +15,17 @@
15
15
  import * as net from 'node:net';
16
16
  import * as crypto from 'node:crypto';
17
17
  import { encodeFrame, FrameDecoder } from './framing.js';
18
+ import {
19
+ ProxyResponseSchema,
20
+ type ProxyResponse,
21
+ } from './proxy-payload-schemas.js';
22
+
23
+ export type { ProxyResponse } from './proxy-payload-schemas.js';
18
24
 
19
25
  export const REQUEST_TIMEOUT_MS = 30000;
20
26
  export const IDLE_TIMEOUT_MS = 300000;
21
27
  export const PROTOCOL_VERSION = 2;
22
28
 
23
- export type ProxyResponse = {
24
- ok: boolean;
25
- data?: Record<string, unknown>;
26
- error?: string;
27
- code?: string;
28
- retryAfter?: number;
29
- };
30
-
31
29
  /**
32
30
  * Per-request options controlling timeout and cancellation.
33
31
  *
@@ -42,26 +40,12 @@ export interface RequestOptions {
42
40
  signal?: AbortSignal;
43
41
  }
44
42
 
45
- /** Validates that a decoded frame has the shape of a ProxyResponse, guarding
46
- * against adversarial or malformed server responses with unexpected types
47
- * for `ok`, `code`, or `error`. */
48
- function isProxyResponseFrame(
43
+ function parseResponseFrame(
49
44
  frame: Record<string, unknown>,
50
- ): frame is ProxyResponse {
51
- if (typeof frame.ok !== 'boolean') return false;
52
- if (frame.code !== undefined && typeof frame.code !== 'string') return false;
53
- if (frame.error !== undefined && typeof frame.error !== 'string')
54
- return false;
55
- if (frame.retryAfter !== undefined && typeof frame.retryAfter !== 'number')
56
- return false;
57
- if (
58
- frame.data !== undefined &&
59
- (typeof frame.data !== 'object' ||
60
- frame.data === null ||
61
- Array.isArray(frame.data))
62
- )
63
- return false;
64
- return true;
45
+ ): ProxyResponse | null {
46
+ const parsed = ProxyResponseSchema.safeParse(frame);
47
+ if (!parsed.success) return null;
48
+ return parsed.data;
65
49
  }
66
50
 
67
51
  const PROXY_CONNECT_FAILURE_PATTERN =
@@ -452,7 +436,7 @@ export class ProxySocketClient {
452
436
  );
453
437
  }
454
438
  // Record the negotiated version from the server's handshake_ack.
455
- const serverVersion = response.data?.version as number | undefined;
439
+ const serverVersion = response.data?.version;
456
440
  this._negotiatedVersion =
457
441
  typeof serverVersion === 'number' ? serverVersion : 1;
458
442
  this.handshakeComplete = true;
@@ -489,8 +473,9 @@ export class ProxySocketClient {
489
473
  return;
490
474
  }
491
475
  this.handshakeResolver = null;
492
- if (isProxyResponseFrame(frame)) {
493
- resolver.resolve(frame);
476
+ const parsedFrame = parseResponseFrame(frame);
477
+ if (parsedFrame !== null) {
478
+ resolver.resolve(parsedFrame);
494
479
  } else {
495
480
  // Reject first, then clean up. destroy() will not double-reject
496
481
  // because handshakeResolver was already nulled above.
@@ -509,8 +494,8 @@ export class ProxySocketClient {
509
494
  * @pseudocode 002-frame-and-cancel.md lines 30-32
510
495
  */
511
496
  private resolvePendingRequest(frame: Record<string, unknown>): void {
512
- const id = frame.id as string | undefined;
513
- if (!id) {
497
+ const id = frame.id;
498
+ if (typeof id !== 'string' || id === '') {
514
499
  return;
515
500
  }
516
501
  const pending = this.pendingRequests.get(id);
@@ -518,8 +503,9 @@ export class ProxySocketClient {
518
503
  clearTimeout(pending.timer);
519
504
  this.pendingRequests.delete(id);
520
505
  this.releaseAbortCleanup(id);
521
- if (isProxyResponseFrame(frame)) {
522
- pending.resolve(frame);
506
+ const parsedFrame = parseResponseFrame(frame);
507
+ if (parsedFrame !== null) {
508
+ pending.resolve(parsedFrame);
523
509
  } else {
524
510
  pending.reject(new Error(`Malformed response for request ${id}`));
525
511
  this.destroy('Malformed response from proxy — connection reset');
@@ -15,6 +15,13 @@
15
15
 
16
16
  import { type OAuthToken, type BucketStats } from '../types.js';
17
17
  import { type TokenStore } from '../token-store.js';
18
+ import {
19
+ OAuthTokenDataSchema,
20
+ parseSuccessPayload,
21
+ ProvidersDataSchema,
22
+ BucketsDataSchema,
23
+ BucketStatsDataSchema,
24
+ } from './proxy-payload-schemas.js';
18
25
  import { ProxySocketClient } from './proxy-socket-client.js';
19
26
 
20
27
  export class ProxyTokenStore implements TokenStore {
@@ -34,7 +41,11 @@ export class ProxyTokenStore implements TokenStore {
34
41
  });
35
42
  if (!response.ok && response.code === 'NOT_FOUND') return null;
36
43
  if (!response.ok) throw new Error(response.error ?? 'proxy error');
37
- return response.data as unknown as OAuthToken;
44
+ return parseSuccessPayload(
45
+ OAuthTokenDataSchema,
46
+ response.data,
47
+ 'get_token',
48
+ );
38
49
  }
39
50
 
40
51
  async saveToken(
@@ -60,14 +71,25 @@ export class ProxyTokenStore implements TokenStore {
60
71
 
61
72
  async listProviders(): Promise<string[]> {
62
73
  const response = await this.client.request('list_providers', {});
63
- if (!response.ok) throw new Error(response.error ?? 'proxy error');
64
- return (response.data as Record<string, unknown>).providers as string[];
74
+ if (!response.ok) {
75
+ throw new Error(response.error ?? 'proxy error');
76
+ }
77
+ return parseSuccessPayload(
78
+ ProvidersDataSchema,
79
+ response.data,
80
+ 'list_providers',
81
+ ).providers;
65
82
  }
66
83
 
67
84
  async listBuckets(provider: string): Promise<string[]> {
68
- const response = await this.client.request('list_buckets', { provider });
69
- if (!response.ok) throw new Error(response.error ?? 'proxy error');
70
- return (response.data as Record<string, unknown>).buckets as string[];
85
+ const response = await this.client.request('list_buckets', {
86
+ provider,
87
+ });
88
+ if (!response.ok) {
89
+ throw new Error(response.error ?? 'proxy error');
90
+ }
91
+ return parseSuccessPayload(BucketsDataSchema, response.data, 'list_buckets')
92
+ .buckets;
71
93
  }
72
94
 
73
95
  async getBucketStats(
@@ -80,14 +102,11 @@ export class ProxyTokenStore implements TokenStore {
80
102
  });
81
103
  if (!response.ok && response.code === 'NOT_FOUND') return null;
82
104
  if (!response.ok) throw new Error(response.error ?? 'proxy error');
83
- const data = response.data as Record<string, unknown>;
84
- return {
85
- bucket,
86
- requestCount:
87
- typeof data.requestCount === 'number' ? data.requestCount : 0,
88
- percentage: typeof data.percentage === 'number' ? data.percentage : 0,
89
- lastUsed: data.lastUsed as number | undefined,
90
- };
105
+ return parseSuccessPayload(
106
+ BucketStatsDataSchema,
107
+ response.data,
108
+ 'get_bucket_stats',
109
+ );
91
110
  }
92
111
 
93
112
  async acquireRefreshLock(
@@ -13,12 +13,21 @@
13
13
  * @pseudocode analysis/pseudocode/002-token-sanitization-merge.md
14
14
  */
15
15
 
16
- import { type OAuthToken } from './types.js';
16
+ import type { z } from 'zod';
17
+ import { OAuthTokenSchema, type OAuthToken } from './types.js';
17
18
 
18
- export type SanitizedOAuthToken = Omit<OAuthToken, 'refresh_token'> &
19
- Record<string, unknown>;
19
+ /**
20
+ * Sanitized OAuth token schema: validates the supported OAuth fields while
21
+ * preserving provider-specific extension fields before the refresh_token is stripped.
22
+ */
23
+ export const SanitizedOAuthTokenSchema =
24
+ OAuthTokenSchema.passthrough().transform((token) => {
25
+ const { refresh_token: _refresh_token, ...rest } = token;
26
+ return rest;
27
+ });
28
+
29
+ export type SanitizedOAuthToken = z.infer<typeof SanitizedOAuthTokenSchema>;
20
30
 
21
31
  export function sanitizeTokenForProxy(token: OAuthToken): SanitizedOAuthToken {
22
- const { refresh_token: _refresh_token, ...sanitized } = token;
23
- return sanitized;
32
+ return SanitizedOAuthTokenSchema.parse(token);
24
33
  }