@yuhere/js-jsonrpc2 2.1.12 → 2.1.14
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/cli/cli.d.ts +0 -1
- package/dist/cli/cli.js +0 -1
- package/dist/cli/demo-methods.d.ts +0 -1
- package/dist/cli/demo-methods.js +0 -1
- package/dist/cli/express.d.ts +0 -1
- package/dist/cli/express.js +0 -1
- package/dist/cli/stdio.d.ts +0 -1
- package/dist/cli/stdio.js +0 -1
- package/dist/core/Repository.d.ts +0 -1
- package/dist/core/Repository.js +0 -1
- package/dist/core/convert.d.ts +0 -1
- package/dist/core/convert.js +0 -1
- package/dist/core/descriptor.d.ts +0 -1
- package/dist/core/descriptor.js +0 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/index.js +0 -1
- package/dist/core/llm-tools.d.ts +0 -1
- package/dist/core/llm-tools.js +41 -43
- package/dist/core/permission.d.ts +0 -1
- package/dist/core/permission.js +0 -1
- package/dist/core/spec-check.d.ts +0 -1
- package/dist/core/spec-check.js +0 -1
- package/dist/core/system-methods.d.ts +0 -1
- package/dist/core/system-methods.js +0 -1
- package/dist/errors/RPCError.d.ts +0 -1
- package/dist/errors/RPCError.js +0 -1
- package/dist/errors/codes.d.ts +0 -1
- package/dist/errors/codes.js +0 -1
- package/dist/errors/index.d.ts +0 -1
- package/dist/errors/index.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/metrics/memory.d.ts +0 -1
- package/dist/metrics/memory.js +0 -1
- package/dist/metrics/prom.d.ts +0 -1
- package/dist/metrics/prom.js +0 -1
- package/dist/schema/json/index.d.ts +1 -2
- package/dist/schema/json/index.js +0 -1
- package/dist/schema/json/marker.d.ts +0 -1
- package/dist/schema/json/marker.js +0 -1
- package/dist/schema/json/primitives.d.ts +49 -70
- package/dist/schema/json/primitives.js +70 -77
- package/dist/schema/z/protocol.d.ts +1 -2
- package/dist/schema/z/protocol.js +0 -1
- package/dist/schema/z/register.d.ts +0 -1
- package/dist/schema/z/register.js +0 -1
- package/dist/stream/stringify-stream.d.ts +0 -1
- package/dist/stream/stringify-stream.js +94 -70
- package/dist/transport/express/body.d.ts +0 -1
- package/dist/transport/express/body.js +0 -1
- package/dist/transport/express/index.d.ts +0 -1
- package/dist/transport/express/index.js +0 -1
- package/dist/transport/express/middleware.d.ts +0 -1
- package/dist/transport/express/middleware.js +0 -1
- package/dist/transport/express/respond.d.ts +0 -1
- package/dist/transport/express/respond.js +0 -1
- package/dist/transport/stdio/index.d.ts +0 -1
- package/dist/transport/stdio/index.js +0 -1
- package/dist/transport/stdio/middleware.d.ts +0 -1
- package/dist/transport/stdio/middleware.js +0 -1
- package/dist/transport/ws/index.d.ts +0 -1
- package/dist/transport/ws/index.js +0 -1
- package/dist/transport/ws/middleware.d.ts +0 -1
- package/dist/transport/ws/middleware.js +0 -1
- package/dist/transport/ws/standalone.d.ts +0 -1
- package/dist/transport/ws/standalone.js +0 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.js +0 -1
- package/dist/webclient/webui/src/client/httpTransport.d.ts +8 -0
- package/dist/webclient/webui/src/client/httpTransport.js +114 -0
- package/dist/webclient/webui/src/client/index.d.ts +4 -0
- package/dist/webclient/webui/src/client/index.js +2 -0
- package/dist/webclient/webui/src/client/rpc.d.ts +24 -0
- package/dist/webclient/webui/src/client/rpc.js +32 -0
- package/dist/webclient/webui/src/client/types.d.ts +14 -0
- package/dist/webclient/webui/src/client/types.js +1 -0
- package/dist/webclient/webui/src/client/wsTransport.d.ts +8 -0
- package/{webui/src/api/wsTransport.ts → dist/webclient/webui/src/client/wsTransport.js} +263 -305
- package/htdoc/assets/favicon-CXdFuLlv.png +0 -0
- package/{webui/src/styles/geek.css → htdoc/assets/index-Rq1yIwo2.css} +58 -0
- package/htdoc/assets/{index-Cr0Jnrgb.js → index-mYqtDOwe.js} +1344 -398
- package/htdoc/assets/index-mYqtDOwe.js.map +1 -0
- package/htdoc/index.html +4 -2
- package/package.json +10 -7
- package/dist/cli/cli.d.ts.map +0 -1
- package/dist/cli/cli.js.map +0 -1
- package/dist/cli/demo-methods.d.ts.map +0 -1
- package/dist/cli/demo-methods.js.map +0 -1
- package/dist/cli/express.d.ts.map +0 -1
- package/dist/cli/express.js.map +0 -1
- package/dist/cli/stdio.d.ts.map +0 -1
- package/dist/cli/stdio.js.map +0 -1
- package/dist/core/Repository.d.ts.map +0 -1
- package/dist/core/Repository.js.map +0 -1
- package/dist/core/convert.d.ts.map +0 -1
- package/dist/core/convert.js.map +0 -1
- package/dist/core/descriptor.d.ts.map +0 -1
- package/dist/core/descriptor.js.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/core/llm-tools.d.ts.map +0 -1
- package/dist/core/llm-tools.js.map +0 -1
- package/dist/core/permission.d.ts.map +0 -1
- package/dist/core/permission.js.map +0 -1
- package/dist/core/spec-check.d.ts.map +0 -1
- package/dist/core/spec-check.js.map +0 -1
- package/dist/core/system-methods.d.ts.map +0 -1
- package/dist/core/system-methods.js.map +0 -1
- package/dist/errors/RPCError.d.ts.map +0 -1
- package/dist/errors/RPCError.js.map +0 -1
- package/dist/errors/codes.d.ts.map +0 -1
- package/dist/errors/codes.js.map +0 -1
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/metrics/memory.d.ts.map +0 -1
- package/dist/metrics/memory.js.map +0 -1
- package/dist/metrics/prom.d.ts.map +0 -1
- package/dist/metrics/prom.js.map +0 -1
- package/dist/schema/json/index.d.ts.map +0 -1
- package/dist/schema/json/index.js.map +0 -1
- package/dist/schema/json/marker.d.ts.map +0 -1
- package/dist/schema/json/marker.js.map +0 -1
- package/dist/schema/json/primitives.d.ts.map +0 -1
- package/dist/schema/json/primitives.js.map +0 -1
- package/dist/schema/z/protocol.d.ts.map +0 -1
- package/dist/schema/z/protocol.js.map +0 -1
- package/dist/schema/z/register.d.ts.map +0 -1
- package/dist/schema/z/register.js.map +0 -1
- package/dist/stream/stringify-stream.d.ts.map +0 -1
- package/dist/stream/stringify-stream.js.map +0 -1
- package/dist/transport/express/body.d.ts.map +0 -1
- package/dist/transport/express/body.js.map +0 -1
- package/dist/transport/express/index.d.ts.map +0 -1
- package/dist/transport/express/index.js.map +0 -1
- package/dist/transport/express/middleware.d.ts.map +0 -1
- package/dist/transport/express/middleware.js.map +0 -1
- package/dist/transport/express/respond.d.ts.map +0 -1
- package/dist/transport/express/respond.js.map +0 -1
- package/dist/transport/stdio/index.d.ts.map +0 -1
- package/dist/transport/stdio/index.js.map +0 -1
- package/dist/transport/stdio/middleware.d.ts.map +0 -1
- package/dist/transport/stdio/middleware.js.map +0 -1
- package/dist/transport/ws/index.d.ts.map +0 -1
- package/dist/transport/ws/index.js.map +0 -1
- package/dist/transport/ws/middleware.d.ts.map +0 -1
- package/dist/transport/ws/middleware.js.map +0 -1
- package/dist/transport/ws/standalone.d.ts.map +0 -1
- package/dist/transport/ws/standalone.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/htdoc/assets/index-Ck-39Igh.css +0 -963
- package/htdoc/assets/index-Cr0Jnrgb.js.map +0 -1
- package/webui/index.html +0 -12
- package/webui/src/App.tsx +0 -164
- package/webui/src/api/docGen.ts +0 -188
- package/webui/src/api/glob.ts +0 -90
- package/webui/src/api/httpTransport.ts +0 -148
- package/webui/src/api/metrics.ts +0 -135
- package/webui/src/api/paramForm.ts +0 -80
- package/webui/src/api/rpc.ts +0 -57
- package/webui/src/api/schema.ts +0 -12
- package/webui/src/api/types.ts +0 -16
- package/webui/src/components/MethodDetail.tsx +0 -43
- package/webui/src/components/MethodTree.tsx +0 -118
- package/webui/src/components/MetricsPanel.md +0 -126
- package/webui/src/components/MetricsPanel.tsx +0 -290
- package/webui/src/components/SchemaForm.tsx +0 -697
- package/webui/src/components/SchemaView.tsx +0 -151
- package/webui/src/components/TestPanel.tsx +0 -322
- package/webui/src/components/Toolbar.tsx +0 -82
- package/webui/src/hooks/useMethodDetail.ts +0 -61
- package/webui/src/hooks/useMethods.ts +0 -27
- package/webui/src/hooks/useMetrics.ts +0 -91
- package/webui/src/main.tsx +0 -13
- package/webui/src/theme/ThemeProvider.tsx +0 -79
- package/webui/src/vite-env.d.ts +0 -1
- package/webui/tsconfig.json +0 -34
- package/webui/tsconfig.node.json +0 -13
- package/webui/vite.config.ts +0 -15
|
@@ -22,4 +22,3 @@ export interface WSOptions {
|
|
|
22
22
|
* Returns the underlying `WebSocketServer` so the caller can close it.
|
|
23
23
|
*/
|
|
24
24
|
export declare function attachWebSocket(server: Server, repository: Repository, options: WSOptions): WebSocketServer;
|
|
25
|
-
//# sourceMappingURL=middleware.d.ts.map
|
package/dist/types.d.ts
CHANGED
package/dist/types.js
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type RPCClient } from './rpc.js';
|
|
2
|
+
export interface HttpRPCOptions {
|
|
3
|
+
endpoint?: string;
|
|
4
|
+
headers?: Record<string, string>;
|
|
5
|
+
fetchImpl?: typeof fetch;
|
|
6
|
+
}
|
|
7
|
+
export declare function createHttpRPC(options?: HttpRPCOptions): RPCClient;
|
|
8
|
+
export declare function absoluteEndpoint(endpoint?: string): string;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { RPCError, } from './rpc.js';
|
|
2
|
+
let idCounter = 0;
|
|
3
|
+
async function readLine(reader, decoder, state) {
|
|
4
|
+
while (true) {
|
|
5
|
+
const nl = state.buf.indexOf('\n');
|
|
6
|
+
if (nl >= 0) {
|
|
7
|
+
const line = state.buf.slice(0, nl).trim();
|
|
8
|
+
state.buf = state.buf.slice(nl + 1);
|
|
9
|
+
if (line)
|
|
10
|
+
return line;
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const { done, value } = await reader.read();
|
|
14
|
+
if (done) {
|
|
15
|
+
const trailing = state.buf.trim();
|
|
16
|
+
state.buf = '';
|
|
17
|
+
return trailing.length > 0 ? trailing : undefined;
|
|
18
|
+
}
|
|
19
|
+
state.buf += decoder.decode(value, { stream: true });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function isStreamFrame(v) {
|
|
23
|
+
return !!v && typeof v === 'object' && typeof v.done === 'boolean';
|
|
24
|
+
}
|
|
25
|
+
export function createHttpRPC(options = {}) {
|
|
26
|
+
const { endpoint = '', headers = {}, fetchImpl = fetch, } = options;
|
|
27
|
+
function call(method, ...params) {
|
|
28
|
+
const id = ++idCounter;
|
|
29
|
+
const body = { jsonrpc: '2.0', method, params, id };
|
|
30
|
+
return (async () => {
|
|
31
|
+
const res = await fetchImpl(endpoint, {
|
|
32
|
+
method: 'POST',
|
|
33
|
+
headers: {
|
|
34
|
+
'Content-Type': 'application/json',
|
|
35
|
+
'Accept': 'application/json, application/x-ndjson',
|
|
36
|
+
...headers,
|
|
37
|
+
},
|
|
38
|
+
body: JSON.stringify(body),
|
|
39
|
+
});
|
|
40
|
+
if (!res.ok) {
|
|
41
|
+
throw new Error(`HTTP ${res.status} ${res.statusText}`);
|
|
42
|
+
}
|
|
43
|
+
if (!res.body) {
|
|
44
|
+
const payload = (await res.json());
|
|
45
|
+
if (payload.error)
|
|
46
|
+
throw new RPCError(payload.error);
|
|
47
|
+
return payload.result;
|
|
48
|
+
}
|
|
49
|
+
const reader = res.body.getReader();
|
|
50
|
+
const decoder = new TextDecoder();
|
|
51
|
+
const state = { buf: '' };
|
|
52
|
+
const firstLine = await readLine(reader, decoder, state);
|
|
53
|
+
if (firstLine === undefined) {
|
|
54
|
+
await reader.cancel().catch(() => { });
|
|
55
|
+
throw new Error(`Empty response for ${method}`);
|
|
56
|
+
}
|
|
57
|
+
let first;
|
|
58
|
+
try {
|
|
59
|
+
first = JSON.parse(firstLine);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
await reader.cancel().catch(() => { });
|
|
63
|
+
throw new Error(`Invalid JSON response for ${method}: ${e instanceof Error ? e.message : String(e)}`);
|
|
64
|
+
}
|
|
65
|
+
if (!isStreamFrame(first)) {
|
|
66
|
+
const payload = first;
|
|
67
|
+
await reader.cancel().catch(() => { });
|
|
68
|
+
if (payload.error)
|
|
69
|
+
throw new RPCError(payload.error);
|
|
70
|
+
return payload.result;
|
|
71
|
+
}
|
|
72
|
+
return (async function* () {
|
|
73
|
+
let drained = false;
|
|
74
|
+
try {
|
|
75
|
+
let chunk = first;
|
|
76
|
+
while (true) {
|
|
77
|
+
if (chunk.error)
|
|
78
|
+
throw new RPCError(chunk.error);
|
|
79
|
+
if (chunk.done) {
|
|
80
|
+
drained = true;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (chunk.value !== undefined)
|
|
84
|
+
yield chunk.value;
|
|
85
|
+
const line = await readLine(reader, decoder, state);
|
|
86
|
+
if (line === undefined) {
|
|
87
|
+
throw new Error('Stream ended without terminal frame');
|
|
88
|
+
}
|
|
89
|
+
chunk = JSON.parse(line);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
if (!drained) {
|
|
94
|
+
await reader.cancel().catch(() => { });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
})();
|
|
98
|
+
})();
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
call,
|
|
102
|
+
close() {
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export function absoluteEndpoint(endpoint) {
|
|
107
|
+
const raw = endpoint && endpoint.trim().length > 0 ? endpoint : '/';
|
|
108
|
+
try {
|
|
109
|
+
return new URL(raw, window.location.href).toString();
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return raw;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { createRPC, RPCError, isStreamResult, type RPCClient, type RPCOptions, type TransportKind, type CallResult, } from './rpc.js';
|
|
2
|
+
export type { RPCErrorPayload, RPCResponse } from './types.js';
|
|
3
|
+
export { type HttpRPCOptions, absoluteEndpoint } from './httpTransport.js';
|
|
4
|
+
export type { WsRPCOptions } from './wsTransport.js';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { RPCErrorPayload } from './types.js';
|
|
2
|
+
export type TransportKind = 'http' | 'ws';
|
|
3
|
+
/** 普通调用返回 Promise<T>;流式调用返回 AsyncGenerator<T>。 */
|
|
4
|
+
export type CallResult<T> = Promise<T> | AsyncGenerator<T, void, unknown>;
|
|
5
|
+
export interface RPCClient {
|
|
6
|
+
call<T = unknown>(method: string, ...params: unknown[]): Promise<CallResult<T>>;
|
|
7
|
+
close(): void;
|
|
8
|
+
}
|
|
9
|
+
export interface RPCOptions {
|
|
10
|
+
transport: TransportKind;
|
|
11
|
+
endpoint?: string;
|
|
12
|
+
headers?: Record<string, string>;
|
|
13
|
+
fetchImpl?: typeof fetch;
|
|
14
|
+
connectTimeoutMs?: number;
|
|
15
|
+
callTimeoutMs?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class RPCError extends Error {
|
|
18
|
+
payload: RPCErrorPayload;
|
|
19
|
+
constructor(payload: RPCErrorPayload);
|
|
20
|
+
get code(): number;
|
|
21
|
+
get data(): unknown;
|
|
22
|
+
}
|
|
23
|
+
export declare function isStreamResult<T>(v: unknown): v is AsyncGenerator<T, void, unknown>;
|
|
24
|
+
export declare function createRPC(options: RPCOptions): RPCClient;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { createHttpRPC } from './httpTransport.js';
|
|
2
|
+
import { createWsRPC } from './wsTransport.js';
|
|
3
|
+
export class RPCError extends Error {
|
|
4
|
+
constructor(payload) {
|
|
5
|
+
super(payload.message);
|
|
6
|
+
this.payload = payload;
|
|
7
|
+
this.name = 'RPCError';
|
|
8
|
+
}
|
|
9
|
+
get code() { return this.payload.code; }
|
|
10
|
+
get data() { return this.payload.data; }
|
|
11
|
+
}
|
|
12
|
+
export function isStreamResult(v) {
|
|
13
|
+
return (!!v &&
|
|
14
|
+
typeof v === 'object' &&
|
|
15
|
+
typeof v[Symbol.asyncIterator] === 'function');
|
|
16
|
+
}
|
|
17
|
+
export function createRPC(options) {
|
|
18
|
+
if (options.transport === 'ws') {
|
|
19
|
+
const wsOpts = {
|
|
20
|
+
endpoint: options.endpoint,
|
|
21
|
+
connectTimeoutMs: options.connectTimeoutMs,
|
|
22
|
+
callTimeoutMs: options.callTimeoutMs,
|
|
23
|
+
};
|
|
24
|
+
return createWsRPC(wsOpts);
|
|
25
|
+
}
|
|
26
|
+
const httpOpts = {
|
|
27
|
+
endpoint: options.endpoint,
|
|
28
|
+
headers: options.headers,
|
|
29
|
+
fetchImpl: options.fetchImpl,
|
|
30
|
+
};
|
|
31
|
+
return createHttpRPC(httpOpts);
|
|
32
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface RPCErrorPayload {
|
|
2
|
+
code: number;
|
|
3
|
+
message: string;
|
|
4
|
+
data?: unknown;
|
|
5
|
+
}
|
|
6
|
+
export interface RPCResponse<T = unknown> {
|
|
7
|
+
jsonrpc: '2.0';
|
|
8
|
+
id: number | string | null;
|
|
9
|
+
result?: T;
|
|
10
|
+
error?: RPCErrorPayload;
|
|
11
|
+
}
|
|
12
|
+
export interface Signature {
|
|
13
|
+
[index: number]: string | string[];
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type RPCClient } from './rpc.js';
|
|
2
|
+
export interface WsRPCOptions {
|
|
3
|
+
/** 默认:根据当前页面 URL 推导(http->ws / https->wss,同路径) */
|
|
4
|
+
endpoint?: string;
|
|
5
|
+
connectTimeoutMs?: number;
|
|
6
|
+
callTimeoutMs?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function createWsRPC(options?: WsRPCOptions): RPCClient;
|