@opentiny/next 0.2.1 → 0.3.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/README.md CHANGED
@@ -12,7 +12,7 @@ OpenTiny NEXT 是一个基于 Model Context Protocol(MCP)的 TypeScript 库
12
12
  npm install @opentiny/next
13
13
  ```
14
14
 
15
- ## 客户端 API (client.js)
15
+ ## 客户端 API
16
16
 
17
17
  客户端 API 主要用于在浏览器环境中的 MCP 通信。
18
18
 
@@ -43,7 +43,7 @@ await client.connect(clientTransport);
43
43
  state.client = client;
44
44
  ```
45
45
 
46
- #### 在浏览器主线程与iframe、Web Worker等互相通信的场景
46
+ #### 在浏览器主线程与 iframe、Web Worker 等互相通信的场景
47
47
 
48
48
  使用 `MessageChannelServerTransport` 和 `MessageChannelClientTransport` 创建用于监听的 Transport 服务端实例,以及用于连接的 Transport 客户端实例来进行通信。
49
49
 
package/index.d.ts ADDED
@@ -0,0 +1,325 @@
1
+ import { JSONRPCMessage, RequestId } from '@modelcontextprotocol/sdk/types.js';
2
+ import { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
3
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
4
+ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
5
+ import { StreamableHTTPReconnectionOptions, StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
6
+ import { EventSourceInit } from 'eventsource';
7
+ import { OAuthClientProvider } from '@modelcontextprotocol/sdk/client/auth.js';
8
+ import { OAuthClientMetadata, OAuthClientInformation, OAuthClientInformationFull, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
9
+
10
+ /**
11
+ * MessageChannelTransport 是一个用于在浏览器上下文之间传输消息的类。
12
+ * 它使用 MessageChannel API 来实现不同上下文(如 iframe、worker、标签页、窗口等)之间的通信。
13
+ * 该类提供了初始化、发送消息、关闭通道等功能。
14
+ */
15
+ declare class MessageChannelTransport {
16
+ protected _port?: MessagePort;
17
+ onclose?: () => void;
18
+ onerror?: (error: Error) => void;
19
+ onmessage?: (message: JSONRPCMessage, extra?: {
20
+ authInfo?: AuthInfo;
21
+ }) => void;
22
+ sessionId?: string;
23
+ /**
24
+ * 构造函数,初始化 MessageChannelTransport。
25
+ *
26
+ * @param port - 用于通信的 MessagePort。
27
+ */
28
+ constructor(port?: MessagePort);
29
+ /**
30
+ * 初始化 MessageChannelTransport。
31
+ * 该方法会创建一个新的 MessageChannel,并将其端口传递给指定的全局对象。
32
+ * 如果传输已关闭,则抛出错误。
33
+ */
34
+ start(): Promise<void>;
35
+ /**
36
+ * 发送消息到 MessagePort。
37
+ * 如果传输已关闭,则抛出错误。
38
+ *
39
+ * @param message - 要发送的 JSON-RPC 消息。
40
+ */
41
+ send(message: JSONRPCMessage, options?: {
42
+ relatedRequestId?: RequestId;
43
+ authInfo?: AuthInfo;
44
+ }): Promise<void>;
45
+ /**
46
+ * 关闭 MessageChannelTransport。
47
+ * 该方法会关闭 MessagePort,并触发关闭回调。
48
+ * 如果传输已关闭,则不执行任何操作。
49
+ */
50
+ close(): Promise<void>;
51
+ }
52
+ /**
53
+ * 在浏览器端实现基于 MessageChannel API 的客户端传输类,
54
+ * 用于不同浏览器上下文(如 iframe、worker、标签页、窗口等)之间通信。
55
+ */
56
+ declare class MessageChannelClientTransport extends MessageChannelTransport {
57
+ private _endpoint;
58
+ private _globalObject;
59
+ /**
60
+ * 创建一个监听通信的服务端实例。
61
+ *
62
+ * @param endpoint - 用于通信的端点。
63
+ * @param [globalObject] - 用于通信的全局对象(可选,默认当前全局对象)。
64
+ */
65
+ constructor(endpoint: string, globalObject?: object);
66
+ }
67
+ /**
68
+ * 在浏览器端实现基于 MessageChannel API 的服务端传输类,
69
+ * 用于不同浏览器上下文(如 iframe、worker、标签页、窗口等)之间通信。
70
+ */
71
+ declare class MessageChannelServerTransport extends MessageChannelTransport {
72
+ private _endpoint;
73
+ private _globalObject;
74
+ private _listen;
75
+ /**
76
+ * 创建一个监听通信的服务端实例。
77
+ *
78
+ * @param endpoint - 用于通信的端点。
79
+ * @param [globalObject] - 用于通信的全局对象(可选,默认当前全局对象)。
80
+ */
81
+ constructor(endpoint: string, globalObject?: object);
82
+ /**
83
+ * 监听等待客户端连接。
84
+ * 该方法会返回一个 Promise,当客户端连接时解析。
85
+ */
86
+ listen(): Promise<void>;
87
+ }
88
+ /**
89
+ * 创建一对 MessageChannelTransport 实例,返回两个端口的传输实例。
90
+ * 这两个实例可以用于在不同的浏览器上下文之间进行通信。
91
+ *
92
+ * @returns 返回一对 MessageChannelTransport 实例。
93
+ */
94
+ declare const createTransportPair: () => [MessageChannelTransport, MessageChannelTransport];
95
+
96
+ declare module '@modelcontextprotocol/sdk/client/sse.js' {
97
+ interface SSEClientTransport {
98
+ sessionId: string;
99
+ }
100
+ }
101
+ interface WaitForOAuthCodeFunction {
102
+ (): Promise<unknown>;
103
+ }
104
+ interface sseInitOptions {
105
+ requestInit: {
106
+ headers: {
107
+ Authorization?: string;
108
+ 'sse-session-id': string;
109
+ };
110
+ credentials?: RequestCredentials;
111
+ };
112
+ eventSourceInit: {
113
+ fetch: (input: string | URL, init?: RequestInit) => Promise<Response>;
114
+ withCredentials?: boolean;
115
+ };
116
+ }
117
+ /**
118
+ * 生成 SSEClientTransport 构造函数所需的第二个可选参数(传输配置)。
119
+ * 用于为 SSE 连接和 HTTP 请求统一设置认证头(Authorization)。
120
+ *
121
+ * @param token - 用于认证的 Bearer Token。
122
+ * @param sessionId - 可选的 sessionId,用于标识会话。
123
+ * @returns 返回传输配置对象,包含 requestInit 和 eventSourceInit 两部分:
124
+ * - requestInit:fetch 请求的初始化配置,自动带上认证头。
125
+ * - eventSourceInit:自定义 fetch 方法,确保 SSE 连接也带上认证头。
126
+ */
127
+ declare const sseOptions: (token?: string, sessionId?: string) => sseInitOptions;
128
+ /**
129
+ * Streamable HTTP 请求初始化配置接口
130
+ */
131
+ interface streamInitOptions {
132
+ requestInit: {
133
+ headers: {
134
+ Authorization?: string;
135
+ 'stream-session-id': string;
136
+ };
137
+ credentials?: RequestCredentials;
138
+ };
139
+ }
140
+ /**
141
+ * 生成 StreamableHTTPServerTransport 构造函数所需的第二个可选参数(传输配置)。
142
+ * 用于为 Streamable HTTP 连接和 HTTP 请求统一设置认证头(Authorization)。
143
+ *
144
+ * @param token - 用于认证的 Bearer Token。
145
+ * @param sessionId - 可选的 sessionId,用于标识会话。
146
+ * @returns 返回传输配置对象,包含以下内容:
147
+ * - requestInit:fetch 请求的初始化配置,自动带上认证头,并设置 Streamable HTTP 代理的会话 ID。
148
+ */
149
+ declare const streamOptions: (token?: string, sessionId?: string) => streamInitOptions;
150
+ /**
151
+ * 代理选项接口
152
+ */
153
+ interface ProxyOptions {
154
+ /**
155
+ * MCP 客户端实例
156
+ */
157
+ client: Client;
158
+ /**
159
+ * 代理服务器的 URL
160
+ */
161
+ url: string;
162
+ /**
163
+ * 可选的代理服务器的身份验证令牌
164
+ */
165
+ token?: string;
166
+ /**
167
+ * 可选的会话 ID,用于标识当前会话
168
+ */
169
+ sessionId?: string;
170
+ /**
171
+ * 可选的 OAuth 客户端提供者,用于身份验证
172
+ */
173
+ authProvider?: OAuthClientProvider;
174
+ /**
175
+ * 可选的事件源初始化选项,用于配置 SSE 的 EventSource
176
+ */
177
+ eventSourceInit?: EventSourceInit;
178
+ /**
179
+ * 可选的请求初始化选项,用于配置 HTTP 请求
180
+ */
181
+ requestInit?: RequestInit;
182
+ /**
183
+ * 可选的重连选项,用于配置 Streamable HTTP 的重连策略
184
+ */
185
+ reconnectionOptions?: StreamableHTTPReconnectionOptions;
186
+ /**
187
+ * 可选的函数,用于等待 OAuth 授权码
188
+ * 如果使用 authProvider,则需要提供此函数以获取授权码
189
+ */
190
+ waitForOAuthCode?: WaitForOAuthCodeFunction;
191
+ }
192
+ /**
193
+ * 尝试连接到 MCP 服务器,处理未授权错误并重试连接。
194
+ *
195
+ * @param client - MCP 客户端实例
196
+ * @param waitForOAuthCode - 函数,用于等待 OAuth 授权码
197
+ * @param createTransport - 函数,用于创建新的传输实例
198
+ * @returns 返回连接成功的传输实例
199
+ */
200
+ declare const attemptConnection: (client: Client, waitForOAuthCode: WaitForOAuthCodeFunction, createTransport: () => SSEClientTransport | StreamableHTTPClientTransport) => Promise<SSEClientTransport | StreamableHTTPClientTransport>;
201
+ /**
202
+ * 创建一个 SSE 客户端代理。
203
+ *
204
+ * @param options - 客户端代理选项
205
+ * @returns - 返回一个包含 transport 和 sessionId 的对象
206
+ */
207
+ declare const createSseProxy: (options: ProxyOptions) => Promise<{
208
+ transport: SSEClientTransport;
209
+ sessionId: string;
210
+ }>;
211
+ /**
212
+ * 创建一个 Streamable HTTP 客户端代理。
213
+ *
214
+ * @param options - 客户端代理选项
215
+ * @returns - 返回一个包含 transport 和 sessionId 的对象
216
+ */
217
+ declare const createStreamProxy: (options: ProxyOptions) => Promise<{
218
+ transport: StreamableHTTPClientTransport;
219
+ sessionId: string;
220
+ }>;
221
+
222
+ interface AuthClientProviderOptions {
223
+ clientMetadata: OAuthClientMetadata;
224
+ state?: string;
225
+ redirectCallback?: (url: URL) => Promise<void>;
226
+ getAuthCodeByState?: (url: string | URL, state: string) => Promise<Response>;
227
+ waitForOAuthCode?: () => Promise<void>;
228
+ }
229
+ declare class AuthClientProvider implements OAuthClientProvider {
230
+ waitForOAuthCode: () => Promise<unknown>;
231
+ private _clientInformation?;
232
+ private _tokens?;
233
+ private _codeVerifier?;
234
+ private _state;
235
+ private _redirectUrl;
236
+ private _clientMetadata;
237
+ private _redirectCallback;
238
+ private _getAuthCodeByState;
239
+ private _callBackPromise;
240
+ /**
241
+ * 重定向回调函数,用于处理 OAuth 鉴权后的重定向。
242
+ *
243
+ * @param redirectUrl 重定向的 URL
244
+ */
245
+ private redirectCallbackFunction;
246
+ /**
247
+ * 根据 state 获取 OAuth 鉴权码的函数。
248
+ *
249
+ * @param url 获取 code 的服务端 URL
250
+ * @param state OAuth 鉴权的 state
251
+ * @returns 返回一个 Promise,当 OAuth 鉴权码可用时解析
252
+ */
253
+ private getAuthCodeByStateFunction;
254
+ /**
255
+ * 等待 OAuth 鉴权码的函数。
256
+ *
257
+ * @returns 返回一个 Promise,当 OAuth 鉴权码可用时解析
258
+ */
259
+ private waitForOAuthCodeFunction;
260
+ constructor(options: AuthClientProviderOptions);
261
+ /**
262
+ * 获取 OAuth 客户端的重定向 URL。
263
+ *
264
+ * @returns OAuth 客户端的重定向 URL
265
+ */
266
+ get redirectUrl(): string | URL;
267
+ /**
268
+ * 获取 OAuth 客户端的元数据。
269
+ *
270
+ * @returns OAuth 客户端的元数据
271
+ */
272
+ get clientMetadata(): OAuthClientMetadata;
273
+ /**
274
+ * 获取 OAuth 鉴权的 state。
275
+ *
276
+ * @returns OAuth 鉴权的 state
277
+ */
278
+ state?(): string;
279
+ /**
280
+ * 获取 OAuth 客户端的信息。
281
+ *
282
+ * @returns OAuth 客户端的信息
283
+ */
284
+ clientInformation(): OAuthClientInformation | undefined;
285
+ /**
286
+ * 保存 OAuth 客户端的信息。
287
+ *
288
+ * @param clientInformation OAuth 客户端的信息
289
+ */
290
+ saveClientInformation(clientInformation: OAuthClientInformationFull): void;
291
+ /**
292
+ * 获取 OAuth 鉴权的访问令牌。
293
+ *
294
+ * @returns OAuth 鉴权的访问令牌
295
+ */
296
+ tokens(): OAuthTokens | undefined;
297
+ /**
298
+ * 保存 OAuth 鉴权的访问令牌。
299
+ *
300
+ * @param tokens OAuth 鉴权的访问令牌
301
+ */
302
+ saveTokens(tokens: OAuthTokens): void;
303
+ /**
304
+ * 重定向到 OAuth 鉴权的授权 URL。
305
+ *
306
+ * @param authorizationUrl OAuth 鉴权的授权 URL
307
+ */
308
+ redirectToAuthorization(authorizationUrl: URL): void;
309
+ /**
310
+ * 保存用于 PKCE 流程的 code verifier。
311
+ *
312
+ * @param codeVerifier 用于 PKCE 流程的 code verifier
313
+ */
314
+ saveCodeVerifier(codeVerifier: string): void;
315
+ /**
316
+ * 获取用于 PKCE 流程的 code verifier。
317
+ *
318
+ * @returns 用于 PKCE 流程的 code verifier
319
+ * @throws 如果没有保存 code verifier,则抛出错误
320
+ */
321
+ codeVerifier(): string;
322
+ }
323
+
324
+ export { AuthClientProvider, MessageChannelClientTransport, MessageChannelServerTransport, MessageChannelTransport, attemptConnection, createSseProxy, createStreamProxy, createTransportPair, sseOptions, streamOptions };
325
+ export type { AuthClientProviderOptions, ProxyOptions };