@yuhere/js-jsonrpc2 0.0.0-stage → 2.1.2
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 +277 -2
- package/SKILL.md +237 -0
- package/dist/cli/cli.d.ts +3 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +132 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/demo-methods.d.ts +10 -0
- package/dist/cli/demo-methods.d.ts.map +1 -0
- package/dist/cli/demo-methods.js +477 -0
- package/dist/cli/demo-methods.js.map +1 -0
- package/dist/cli/express.d.ts +2 -0
- package/dist/cli/express.d.ts.map +1 -0
- package/dist/cli/express.js +42 -0
- package/dist/cli/express.js.map +1 -0
- package/dist/cli/stdio.d.ts +2 -0
- package/dist/cli/stdio.d.ts.map +1 -0
- package/dist/cli/stdio.js +5 -0
- package/dist/cli/stdio.js.map +1 -0
- package/dist/core/Repository.d.ts +24 -0
- package/dist/core/Repository.d.ts.map +1 -0
- package/dist/core/Repository.js +153 -0
- package/dist/core/Repository.js.map +1 -0
- package/dist/core/convert.d.ts +4 -0
- package/dist/core/convert.d.ts.map +1 -0
- package/dist/core/convert.js +29 -0
- package/dist/core/convert.js.map +1 -0
- package/dist/core/descriptor.d.ts +27 -0
- package/dist/core/descriptor.d.ts.map +1 -0
- package/dist/core/descriptor.js +83 -0
- package/dist/core/descriptor.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/permission.d.ts +4 -0
- package/dist/core/permission.d.ts.map +1 -0
- package/dist/core/permission.js +18 -0
- package/dist/core/permission.js.map +1 -0
- package/dist/core/spec-check.d.ts +3 -0
- package/dist/core/spec-check.d.ts.map +1 -0
- package/dist/core/spec-check.js +11 -0
- package/dist/core/spec-check.js.map +1 -0
- package/dist/core/system-methods.d.ts +3 -0
- package/dist/core/system-methods.d.ts.map +1 -0
- package/dist/core/system-methods.js +76 -0
- package/dist/core/system-methods.js.map +1 -0
- package/dist/errors/RpcError.d.ts +9 -0
- package/dist/errors/RpcError.d.ts.map +1 -0
- package/dist/errors/RpcError.js +23 -0
- package/dist/errors/RpcError.js.map +1 -0
- package/dist/errors/codes.d.ts +7 -0
- package/dist/errors/codes.d.ts.map +1 -0
- package/dist/errors/codes.js +7 -0
- package/dist/errors/codes.js.map +1 -0
- package/dist/errors/index.d.ts +3 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +3 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/schema/index.d.ts +4 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +4 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/json/index.d.ts +19 -0
- package/dist/schema/json/index.d.ts.map +1 -0
- package/dist/schema/json/index.js +6 -0
- package/dist/schema/json/index.js.map +1 -0
- package/dist/schema/json/marker.d.ts +23 -0
- package/dist/schema/json/marker.d.ts.map +1 -0
- package/dist/schema/json/marker.js +27 -0
- package/dist/schema/json/marker.js.map +1 -0
- package/dist/schema/json/primitives.d.ts +202 -0
- package/dist/schema/json/primitives.d.ts.map +1 -0
- package/dist/schema/json/primitives.js +598 -0
- package/dist/schema/json/primitives.js.map +1 -0
- package/dist/schema/primitives.d.ts +25 -0
- package/dist/schema/primitives.d.ts.map +1 -0
- package/dist/schema/primitives.js +153 -0
- package/dist/schema/primitives.js.map +1 -0
- package/dist/schema/rpc.d.ts +21 -0
- package/dist/schema/rpc.d.ts.map +1 -0
- package/dist/schema/rpc.js +17 -0
- package/dist/schema/rpc.js.map +1 -0
- package/dist/schema/z/protocol.d.ts +9 -0
- package/dist/schema/z/protocol.d.ts.map +1 -0
- package/dist/schema/z/protocol.js +9 -0
- package/dist/schema/z/protocol.js.map +1 -0
- package/dist/schema/z/register.d.ts +9 -0
- package/dist/schema/z/register.d.ts.map +1 -0
- package/dist/schema/z/register.js +21 -0
- package/dist/schema/z/register.js.map +1 -0
- package/dist/stream/index.d.ts +3 -0
- package/dist/stream/index.d.ts.map +1 -0
- package/dist/stream/index.js +2 -0
- package/dist/stream/index.js.map +1 -0
- package/dist/stream/stringify-stream.d.ts +15 -0
- package/dist/stream/stringify-stream.d.ts.map +1 -0
- package/dist/stream/stringify-stream.js +322 -0
- package/dist/stream/stringify-stream.js.map +1 -0
- package/dist/stream/stringify.d.ts +19 -0
- package/dist/stream/stringify.d.ts.map +1 -0
- package/dist/stream/stringify.js +217 -0
- package/dist/stream/stringify.js.map +1 -0
- package/dist/transport/express/body.d.ts +9 -0
- package/dist/transport/express/body.d.ts.map +1 -0
- package/dist/transport/express/body.js +28 -0
- package/dist/transport/express/body.js.map +1 -0
- package/dist/transport/express/index.d.ts +3 -0
- package/dist/transport/express/index.d.ts.map +1 -0
- package/dist/transport/express/index.js +2 -0
- package/dist/transport/express/index.js.map +1 -0
- package/dist/transport/express/middleware.d.ts +12 -0
- package/dist/transport/express/middleware.d.ts.map +1 -0
- package/dist/transport/express/middleware.js +73 -0
- package/dist/transport/express/middleware.js.map +1 -0
- package/dist/transport/express/respond.d.ts +4 -0
- package/dist/transport/express/respond.d.ts.map +1 -0
- package/dist/transport/express/respond.js +125 -0
- package/dist/transport/express/respond.js.map +1 -0
- package/dist/transport/stdio/index.d.ts +2 -0
- package/dist/transport/stdio/index.d.ts.map +1 -0
- package/dist/transport/stdio/index.js +2 -0
- package/dist/transport/stdio/index.js.map +1 -0
- package/dist/transport/stdio/middleware.d.ts +34 -0
- package/dist/transport/stdio/middleware.d.ts.map +1 -0
- package/dist/transport/stdio/middleware.js +274 -0
- package/dist/transport/stdio/middleware.js.map +1 -0
- package/dist/transport/ws/index.d.ts +3 -0
- package/dist/transport/ws/index.d.ts.map +1 -0
- package/dist/transport/ws/index.js +3 -0
- package/dist/transport/ws/index.js.map +1 -0
- package/dist/transport/ws/middleware.d.ts +25 -0
- package/dist/transport/ws/middleware.d.ts.map +1 -0
- package/dist/transport/ws/middleware.js +209 -0
- package/dist/transport/ws/middleware.js.map +1 -0
- package/dist/transport/ws/standalone.d.ts +22 -0
- package/dist/transport/ws/standalone.d.ts.map +1 -0
- package/dist/transport/ws/standalone.js +39 -0
- package/dist/transport/ws/standalone.js.map +1 -0
- package/dist/types.d.ts +75 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/htdoc/assets/index-CQr-lnlD.js +9286 -0
- package/htdoc/assets/index-CQr-lnlD.js.map +1 -0
- package/htdoc/assets/index-hcP2-9jw.css +729 -0
- package/htdoc/index.html +13 -0
- package/package.json +89 -3
- package/webui/index.html +12 -0
- package/webui/src/App.tsx +56 -0
- package/webui/src/api/httpTransport.ts +148 -0
- package/webui/src/api/paramForm.ts +79 -0
- package/webui/src/api/rpc.ts +57 -0
- package/webui/src/api/schema.ts +12 -0
- package/webui/src/api/types.ts +16 -0
- package/webui/src/api/wsTransport.ts +305 -0
- package/webui/src/components/MethodDetail.tsx +43 -0
- package/webui/src/components/MethodTree.tsx +118 -0
- package/webui/src/components/SchemaForm.tsx +696 -0
- package/webui/src/components/SchemaView.tsx +151 -0
- package/webui/src/components/TestPanel.tsx +279 -0
- package/webui/src/components/Toolbar.tsx +70 -0
- package/webui/src/hooks/useMethodDetail.ts +61 -0
- package/webui/src/hooks/useMethods.ts +27 -0
- package/webui/src/main.tsx +13 -0
- package/webui/src/styles/geek.css +729 -0
- package/webui/src/theme/ThemeProvider.tsx +79 -0
- package/webui/src/vite-env.d.ts +1 -0
- package/webui/tsconfig.json +34 -0
- package/webui/tsconfig.node.json +13 -0
- package/webui/vite.config.ts +15 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { RPCError } from '../errors/RPCError';
|
|
2
|
+
import { INTERNAL_ERROR, INVALID_REQUEST } from '../errors/codes';
|
|
3
|
+
import { buildDescriptor, lookup, signatureOf } from './descriptor';
|
|
4
|
+
import { convertParams } from './convert';
|
|
5
|
+
import { checkPermission } from './permission';
|
|
6
|
+
import { validateRequest } from './spec-check';
|
|
7
|
+
import { registerSystemMethods } from './system-methods';
|
|
8
|
+
import { registerSchema } from '../schema/z/register';
|
|
9
|
+
import { RPCVersion } from "../schema/z/protocol";
|
|
10
|
+
function formatRegisterIssues(error) {
|
|
11
|
+
return error.issues
|
|
12
|
+
.map((issue) => {
|
|
13
|
+
const path = issue.path.length > 0 ? issue.path.join('.') : '(root)';
|
|
14
|
+
return `${path}: ${issue.message}`;
|
|
15
|
+
})
|
|
16
|
+
.join('; ');
|
|
17
|
+
}
|
|
18
|
+
function isAsyncIterable(v) {
|
|
19
|
+
return v != null && typeof v[Symbol.asyncIterator] === 'function';
|
|
20
|
+
}
|
|
21
|
+
export class Repository {
|
|
22
|
+
methods = new Map();
|
|
23
|
+
constructor(options = {}) {
|
|
24
|
+
if (options.withSystemMethods !== false) {
|
|
25
|
+
registerSystemMethods(this);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
register(descriptor, fn) {
|
|
29
|
+
const result = registerSchema.safeParse([descriptor, fn]);
|
|
30
|
+
if (!result.success) {
|
|
31
|
+
throw new TypeError(`Invalid RPC descriptor: ${formatRegisterIssues(result.error)}`);
|
|
32
|
+
}
|
|
33
|
+
const built = buildDescriptor(descriptor, fn);
|
|
34
|
+
this.methods.set(built.namespace, built);
|
|
35
|
+
}
|
|
36
|
+
has(namespace) {
|
|
37
|
+
return this.methods.has(namespace);
|
|
38
|
+
}
|
|
39
|
+
list() {
|
|
40
|
+
return [...this.methods.keys()];
|
|
41
|
+
}
|
|
42
|
+
get(namespace) {
|
|
43
|
+
return this.methods.get(namespace);
|
|
44
|
+
}
|
|
45
|
+
signatureOf(descriptor) {
|
|
46
|
+
return signatureOf(descriptor);
|
|
47
|
+
}
|
|
48
|
+
async invoke(input, options = {}) {
|
|
49
|
+
const { injections = {}, errorTransform } = options;
|
|
50
|
+
try {
|
|
51
|
+
const request = validateRequest(input);
|
|
52
|
+
const id = request.id;
|
|
53
|
+
try {
|
|
54
|
+
const descriptor = lookup(this.methods, request.method);
|
|
55
|
+
await checkPermission(descriptor, injections);
|
|
56
|
+
const converted = await convertParams(descriptor, request.params, injections);
|
|
57
|
+
try { // errorTransform only apply when error occurs of actual call
|
|
58
|
+
const result = await descriptor.fn.apply(descriptor, converted);
|
|
59
|
+
const isStreamReturn = descriptor.shouldStreamReturn && isAsyncIterable(result);
|
|
60
|
+
if (isStreamReturn) {
|
|
61
|
+
return this.streamSuccess(id, result);
|
|
62
|
+
}
|
|
63
|
+
return { jsonrpc: RPCVersion, id, result };
|
|
64
|
+
}
|
|
65
|
+
catch (e0) {
|
|
66
|
+
if (errorTransform) {
|
|
67
|
+
const transformed = errorTransform(e0);
|
|
68
|
+
if (transformed)
|
|
69
|
+
return this.failure(id, transformed);
|
|
70
|
+
}
|
|
71
|
+
throw e0;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (error instanceof RPCError) {
|
|
76
|
+
return this.failure(id, error);
|
|
77
|
+
}
|
|
78
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
79
|
+
if (process.env['NODE_ENV'] !== 'production') {
|
|
80
|
+
console.error('Internal JSON-RPC error when invoke method', message, error);
|
|
81
|
+
}
|
|
82
|
+
return this.failure(id, new RPCError(INTERNAL_ERROR, 'Internal error', message));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (e1) {
|
|
86
|
+
if (e1 instanceof RPCError) { //
|
|
87
|
+
return this.failure(null, new RPCError(INVALID_REQUEST, 'Invalid Request', e1.message));
|
|
88
|
+
}
|
|
89
|
+
// ##############
|
|
90
|
+
const message = e1 instanceof Error ? e1.message : String(e1);
|
|
91
|
+
if (process.env['NODE_ENV'] !== 'production') {
|
|
92
|
+
console.error('Internal JSON-RPC error when invoke method', message, e1);
|
|
93
|
+
}
|
|
94
|
+
return this.failure(null, new RPCError(INTERNAL_ERROR, 'Internal error', message));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 把 handler 返回的 AsyncGenerator 包装成待消费的 chunk 流。
|
|
99
|
+
* 每帧都是完整的 RPCStreamChunk(含 jsonrpc/id)。
|
|
100
|
+
* 不做 chunk 的 schema 校验(按约定)。
|
|
101
|
+
* 正常结束发 {done:true,index};异常终止发 {done:true,index?,error}。
|
|
102
|
+
*/
|
|
103
|
+
async *streamChunks(id, source) {
|
|
104
|
+
let index = 0;
|
|
105
|
+
try {
|
|
106
|
+
while (true) {
|
|
107
|
+
const step = await source.next();
|
|
108
|
+
if (step.done) {
|
|
109
|
+
yield { jsonrpc: RPCVersion, id, done: true, index };
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
yield { jsonrpc: RPCVersion, id, done: false, index: index++, value: step.value };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
117
|
+
const code = error instanceof RPCError ? error.code : INTERNAL_ERROR;
|
|
118
|
+
if (process.env['NODE_ENV'] !== 'production' && !(error instanceof RPCError)) {
|
|
119
|
+
console.error('Internal JSON-RPC stream error', message, error);
|
|
120
|
+
}
|
|
121
|
+
yield { jsonrpc: RPCVersion, id, done: true, index, error: { code, message } };
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
// 客户端断开或异常时,尽量让 handler 侧能感知并清理。
|
|
125
|
+
try {
|
|
126
|
+
await source.return?.(undefined);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
/* ignore cleanup errors */
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
streamSuccess(id, source) {
|
|
134
|
+
return {
|
|
135
|
+
jsonrpc: RPCVersion,
|
|
136
|
+
id,
|
|
137
|
+
chunks: this.streamChunks(id, source),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
failure(id, error) {
|
|
141
|
+
const data = process.env['NODE_ENV'] !== 'production' ? error.data : undefined;
|
|
142
|
+
const payload = error.toPayload();
|
|
143
|
+
if (data === undefined)
|
|
144
|
+
delete payload.data;
|
|
145
|
+
else
|
|
146
|
+
payload.data = data;
|
|
147
|
+
return { jsonrpc: RPCVersion, id, error: payload };
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
export function createRepository(options = {}) {
|
|
151
|
+
return new Repository(options);
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=Repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Repository.js","sourceRoot":"","sources":["../../src/core/Repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/core/convert.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,wBAAsB,aAAa,CACjC,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,WAAW,GACtB,OAAO,CAAC,OAAO,EAAE,CAAC,CAmCpB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { RPCError } from '../errors/RPCError';
|
|
2
|
+
import { INVALID_PARAMS } from '../errors/codes';
|
|
3
|
+
export async function convertParams(descriptor, params, injections) {
|
|
4
|
+
let raw = params;
|
|
5
|
+
if (raw === undefined || raw === null)
|
|
6
|
+
raw = [];
|
|
7
|
+
if (!Array.isArray(raw)) {
|
|
8
|
+
throw new RPCError(INVALID_PARAMS, 'Invalid params', 'The parameters must be an array.');
|
|
9
|
+
}
|
|
10
|
+
if (raw.length !== descriptor.indexed.length) {
|
|
11
|
+
throw new RPCError(INVALID_PARAMS, 'Invalid params', `Invalid parameters count. \`${raw.length}\` parameter(s) supplied to \`${descriptor.namespace}\`, expected \`${descriptor.indexed.length}\` parameter(s).`);
|
|
12
|
+
}
|
|
13
|
+
const converted = new Array(descriptor.paramsCount);
|
|
14
|
+
for (const injectable of descriptor.injectables) {
|
|
15
|
+
const rawValue = injections[injectable.name];
|
|
16
|
+
const value = typeof rawValue === 'function' ? await rawValue() : rawValue;
|
|
17
|
+
converted[injectable.originalIndex] = value;
|
|
18
|
+
}
|
|
19
|
+
for (let j = 0; j < descriptor.indexed.length; j++) {
|
|
20
|
+
const entry = descriptor.indexed[j];
|
|
21
|
+
const result = entry.schema.safeParse(raw[j]);
|
|
22
|
+
if (!result.success) {
|
|
23
|
+
throw new RPCError(INVALID_PARAMS, 'Invalid params', `Invalid parameter \`params[${j}]\` for \`${descriptor.namespace}\`: ${result.error.message}`);
|
|
24
|
+
}
|
|
25
|
+
converted[entry.originalIndex] = result.data;
|
|
26
|
+
}
|
|
27
|
+
return converted;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/core/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAA4B,EAC5B,MAAe,EACf,UAAuB;IAEvB,IAAI,GAAG,GAAG,MAAM,CAAC;IACjB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,GAAG,GAAG,EAAE,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,QAAQ,CAAC,cAAc,EAAE,gBAAgB,EAAE,kCAAkC,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,QAAQ,CAChB,cAAc,EACd,gBAAgB,EAChB,+BAA+B,GAAG,CAAC,MAAM,iCAAiC,UAAU,CAAC,SAAS,kBAAkB,UAAU,CAAC,OAAO,CAAC,MAAM,kBAAkB,CAC5J,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,KAAK,CAAU,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7D,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,MAAO,QAA6C,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjH,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;IAC9C,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,QAAQ,CAChB,cAAc,EACd,gBAAgB,EAChB,8BAA8B,CAAC,aAAa,UAAU,CAAC,SAAS,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAC9F,CAAC;QACJ,CAAC;QACD,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { RPCError } from '../errors/RPCError';
|
|
2
|
+
import { Schema } from '../schema/json';
|
|
3
|
+
import type { RPCDescriptor, RPCHandler, RPCSignature } from '../types';
|
|
4
|
+
export interface IndexedParam {
|
|
5
|
+
schema: Schema<unknown>;
|
|
6
|
+
originalIndex: number;
|
|
7
|
+
}
|
|
8
|
+
export interface InjectableParam {
|
|
9
|
+
name: string;
|
|
10
|
+
originalIndex: number;
|
|
11
|
+
}
|
|
12
|
+
export interface MethodDescriptor {
|
|
13
|
+
namespace: string;
|
|
14
|
+
document?: RPCDescriptor['document'];
|
|
15
|
+
grantTo?: string[];
|
|
16
|
+
fn: RPCHandler;
|
|
17
|
+
indexed: IndexedParam[];
|
|
18
|
+
injectables: InjectableParam[];
|
|
19
|
+
paramsCount: number;
|
|
20
|
+
signature: RPCSignature;
|
|
21
|
+
shouldStreamReturn: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function buildDescriptor(descriptor: RPCDescriptor, fn: RPCHandler): MethodDescriptor;
|
|
24
|
+
export declare function signatureOf(descriptor: MethodDescriptor): unknown[];
|
|
25
|
+
export declare function lookup(methods: Map<string, MethodDescriptor>, method: string): MethodDescriptor;
|
|
26
|
+
export declare function invalidParams(message: string, data?: unknown): RPCError;
|
|
27
|
+
//# sourceMappingURL=descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/core/descriptor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAA8C,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAA+B,MAAM,UAAU,CAAC;AAErG,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,EAAE,EAAE,UAAU,CAAC;IACf,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,YAAY,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAgBD,wBAAgB,eAAe,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,GAAG,gBAAgB,CAwC3F;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,EAAE,CAYnE;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAM/F;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAEvE"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { METHOD_NOT_FOUND, INVALID_PARAMS } from '../errors/codes';
|
|
2
|
+
import { RPCError } from '../errors/RPCError';
|
|
3
|
+
import { InjectableMarker, VoidMarker, StreamMarker, Schema } from '../schema/json';
|
|
4
|
+
function normalizeGrantTo(grantTo) {
|
|
5
|
+
if (grantTo === undefined)
|
|
6
|
+
return undefined;
|
|
7
|
+
if (typeof grantTo === 'string')
|
|
8
|
+
return [grantTo];
|
|
9
|
+
if (!Array.isArray(grantTo)) {
|
|
10
|
+
throw new Error('grantTo should be an array or string.');
|
|
11
|
+
}
|
|
12
|
+
for (const item of grantTo) {
|
|
13
|
+
if (typeof item !== 'string') {
|
|
14
|
+
throw new Error('grantTo should be an array of string.');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return grantTo.slice();
|
|
18
|
+
}
|
|
19
|
+
export function buildDescriptor(descriptor, fn) {
|
|
20
|
+
const signs = descriptor.signature;
|
|
21
|
+
if (!Array.isArray(signs) || signs.length === 0) {
|
|
22
|
+
throw new Error('the signature should contain a return type as its first item.');
|
|
23
|
+
}
|
|
24
|
+
const head = signs[0];
|
|
25
|
+
if (head instanceof InjectableMarker) {
|
|
26
|
+
throw new Error('Invalid signature[0], the first signature could not be an injectable.');
|
|
27
|
+
}
|
|
28
|
+
const shouldStreamReturn = head instanceof StreamMarker;
|
|
29
|
+
const indexed = [];
|
|
30
|
+
const injectables = [];
|
|
31
|
+
for (let i = 1; i < signs.length; i++) {
|
|
32
|
+
const slot = signs[i];
|
|
33
|
+
if (slot instanceof InjectableMarker) {
|
|
34
|
+
injectables.push({ name: slot.key, originalIndex: i - 1 });
|
|
35
|
+
}
|
|
36
|
+
else if (slot instanceof Schema) {
|
|
37
|
+
indexed.push({ schema: slot, originalIndex: i - 1 });
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
throw new Error(`Invalid signature slot at index ${i}.`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const grantTo = normalizeGrantTo(descriptor.grantTo);
|
|
44
|
+
const result = {
|
|
45
|
+
namespace: descriptor.namespace,
|
|
46
|
+
fn,
|
|
47
|
+
indexed,
|
|
48
|
+
injectables,
|
|
49
|
+
paramsCount: indexed.length + injectables.length,
|
|
50
|
+
signature: signs,
|
|
51
|
+
shouldStreamReturn
|
|
52
|
+
};
|
|
53
|
+
if (descriptor.document !== undefined)
|
|
54
|
+
result.document = descriptor.document;
|
|
55
|
+
if (grantTo !== undefined)
|
|
56
|
+
result.grantTo = grantTo;
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
export function signatureOf(descriptor) {
|
|
60
|
+
return descriptor.signature
|
|
61
|
+
.filter((slot) => {
|
|
62
|
+
return !(slot instanceof InjectableMarker);
|
|
63
|
+
})
|
|
64
|
+
.map((slot) => {
|
|
65
|
+
if (slot instanceof VoidMarker)
|
|
66
|
+
return { kind: 'void' };
|
|
67
|
+
if (slot instanceof StreamMarker) {
|
|
68
|
+
return { kind: 'stream', children: { inner: slot.inner.toJSON() } };
|
|
69
|
+
}
|
|
70
|
+
return slot.toJSON();
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
export function lookup(methods, method) {
|
|
74
|
+
const found = methods.get(method);
|
|
75
|
+
if (!found) {
|
|
76
|
+
throw new RPCError(METHOD_NOT_FOUND, 'Method not found', JSON.stringify(method));
|
|
77
|
+
}
|
|
78
|
+
return found;
|
|
79
|
+
}
|
|
80
|
+
export function invalidParams(message, data) {
|
|
81
|
+
return new RPCError(INVALID_PARAMS, message, data);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../src/core/descriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../../src/core/permission.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,wBAAsB,eAAe,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB1G"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { RPCError } from '../errors/RPCError';
|
|
2
|
+
import { PERMISSION_DENIED } from '../errors/codes';
|
|
3
|
+
export async function checkPermission(descriptor, injections) {
|
|
4
|
+
const grantTo = descriptor.grantTo;
|
|
5
|
+
if (!grantTo || grantTo.length === 0)
|
|
6
|
+
return;
|
|
7
|
+
const permCheck = injections['perm_check'];
|
|
8
|
+
if (typeof permCheck !== 'function')
|
|
9
|
+
return;
|
|
10
|
+
const result = await permCheck(grantTo, descriptor, injections);
|
|
11
|
+
if (result === true)
|
|
12
|
+
return;
|
|
13
|
+
if (result instanceof RPCError) {
|
|
14
|
+
throw result;
|
|
15
|
+
}
|
|
16
|
+
throw new RPCError(PERMISSION_DENIED, 'Permission denied', `one of ${JSON.stringify(grantTo)} is necessary for [${descriptor.namespace}].`);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=permission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/core/permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKpD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA4B,EAAE,UAAuB;IACzF,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACnC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE7C,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,OAAO,SAAS,KAAK,UAAU;QAAE,OAAO;IAE5C,MAAM,MAAM,GAAG,MAAO,SAAmG,CACvH,OAAO,EACP,UAAU,EACV,UAAU,CACX,CAAC;IAEF,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO;IAE5B,IAAI,MAAM,YAAY,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,CAAC;IACf,CAAC;IAED,MAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,UAAU,CAAC,SAAS,IAAI,CAAC,CAAC;AAC9I,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-check.d.ts","sourceRoot":"","sources":["../../src/core/spec-check.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAM/D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RPCRequestSchema } from '../schema/z/protocol';
|
|
2
|
+
import { RPCError } from '../errors/RPCError';
|
|
3
|
+
import { INVALID_REQUEST } from '../errors/codes';
|
|
4
|
+
export function validateRequest(input) {
|
|
5
|
+
const result = RPCRequestSchema.safeParse(input);
|
|
6
|
+
if (!result.success) {
|
|
7
|
+
throw new RPCError(INVALID_REQUEST, 'Invalid Request', result.error.message);
|
|
8
|
+
}
|
|
9
|
+
return result.data;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=spec-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-check.js","sourceRoot":"","sources":["../../src/core/spec-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,MAAM,CAAC,IAAkC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-methods.d.ts","sourceRoot":"","sources":["../../src/core/system-methods.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAkB/C,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CA+DlE"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// src/core/system-methods.ts
|
|
2
|
+
import { RPCError } from '../errors/RPCError';
|
|
3
|
+
import { METHOD_NOT_FOUND, PERMISSION_DENIED } from '../errors/codes';
|
|
4
|
+
import { checkPermission } from './permission';
|
|
5
|
+
import { s } from '../schema/json';
|
|
6
|
+
function notFound(namespace) {
|
|
7
|
+
return new RPCError(METHOD_NOT_FOUND, 'Method not found', `Method not found.[${namespace}]`);
|
|
8
|
+
}
|
|
9
|
+
async function assertAccessible(descriptor, permCheck) {
|
|
10
|
+
try {
|
|
11
|
+
await checkPermission(descriptor, { perm_check: permCheck });
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (error instanceof RPCError && error.code === PERMISSION_DENIED) {
|
|
15
|
+
throw notFound(descriptor.namespace);
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function registerSystemMethods(repository) {
|
|
21
|
+
repository.register({
|
|
22
|
+
namespace: 'system.listMethods',
|
|
23
|
+
document: 'This method returns an array of strings, one for each method supported by the RPC server.',
|
|
24
|
+
signature: [s.array(s.string()), s.injectable('perm_check')],
|
|
25
|
+
}, async function systemListMethods(permCheck) {
|
|
26
|
+
const visible = [];
|
|
27
|
+
for (const name of repository.list()) {
|
|
28
|
+
const descriptor = repository.get(name);
|
|
29
|
+
if (!descriptor)
|
|
30
|
+
continue;
|
|
31
|
+
try {
|
|
32
|
+
await assertAccessible(descriptor, permCheck);
|
|
33
|
+
visible.push(name);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof RPCError && error.code === METHOD_NOT_FOUND)
|
|
37
|
+
continue;
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return visible;
|
|
42
|
+
});
|
|
43
|
+
repository.register({
|
|
44
|
+
namespace: 'system.methodSignature',
|
|
45
|
+
document: 'This method takes one parameter, the name of a method implemented by the RPC server.\n\n' +
|
|
46
|
+
'It returns an array of possible signatures for this method.\n' +
|
|
47
|
+
'A signature is an array of types.\n' +
|
|
48
|
+
'The first of these types is the return type of the method, the rest are parameters.\n',
|
|
49
|
+
signature: [s.array(s.unknown()), s.string(), s.injectable('perm_check')],
|
|
50
|
+
}, async function systemMethodSignature(namespace, permCheck) {
|
|
51
|
+
const descriptor = repository.get(namespace);
|
|
52
|
+
if (!descriptor)
|
|
53
|
+
throw notFound(namespace);
|
|
54
|
+
await assertAccessible(descriptor, permCheck);
|
|
55
|
+
return repository.signatureOf(descriptor);
|
|
56
|
+
});
|
|
57
|
+
repository.register({
|
|
58
|
+
namespace: 'system.methodHelp',
|
|
59
|
+
document: 'This method takes one parameter, the name of a method implemented by the RPC server.\n\n' +
|
|
60
|
+
'It returns a documentation string describing the use of that method.\n' +
|
|
61
|
+
'If no such string is available, an empty string is returned.\n' +
|
|
62
|
+
'The documentation string may contain HTML markup.\n',
|
|
63
|
+
signature: [s.string(), s.string(), s.injectable('perm_check')],
|
|
64
|
+
}, async function systemMethodHelp(namespace, permCheck) {
|
|
65
|
+
const descriptor = repository.get(namespace);
|
|
66
|
+
if (!descriptor)
|
|
67
|
+
throw notFound(namespace);
|
|
68
|
+
await assertAccessible(descriptor, permCheck);
|
|
69
|
+
const document = descriptor.document;
|
|
70
|
+
if (typeof document === 'function') {
|
|
71
|
+
return (await document(descriptor)) ?? null;
|
|
72
|
+
}
|
|
73
|
+
return document === undefined ? null : document;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=system-methods.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-methods.js","sourceRoot":"","sources":["../../src/core/system-methods.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RPCErrorPayload } from '../types';
|
|
2
|
+
export declare class RPCError extends Error {
|
|
3
|
+
readonly code: number;
|
|
4
|
+
readonly data?: unknown;
|
|
5
|
+
constructor(code: number, message: string, data?: unknown);
|
|
6
|
+
toPayload(): RPCErrorPayload;
|
|
7
|
+
toJSON(): RPCErrorPayload;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=RPCError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RPCError.d.ts","sourceRoot":"","sources":["../../src/errors/RPCError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAExB,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAOxD;IAED,SAAS,IAAI,eAAe,CAI3B;IAED,MAAM,IAAI,eAAe,CAExB;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class RPCError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
data;
|
|
4
|
+
constructor(code, message, data) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = 'RPCError';
|
|
7
|
+
this.code = code;
|
|
8
|
+
if (data !== undefined)
|
|
9
|
+
this.data = data;
|
|
10
|
+
// Restore prototype chain in transpiled output.
|
|
11
|
+
Object.setPrototypeOf(this, RPCError.prototype);
|
|
12
|
+
}
|
|
13
|
+
toPayload() {
|
|
14
|
+
const payload = { code: this.code, message: this.message };
|
|
15
|
+
if (this.data !== undefined)
|
|
16
|
+
payload.data = this.data;
|
|
17
|
+
return payload;
|
|
18
|
+
}
|
|
19
|
+
toJSON() {
|
|
20
|
+
return this.toPayload();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=RPCError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RPCError.js","sourceRoot":"","sources":["../../src/errors/RPCError.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAS;IACb,IAAI,CAAW;IAExB,YAAY,IAAY,EAAE,OAAe,EAAE,IAAc;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACzC,gDAAgD;QAChD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,SAAS;QACP,MAAM,OAAO,GAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5E,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const PARSE_ERROR = -32700;
|
|
2
|
+
export declare const INVALID_REQUEST = -32600;
|
|
3
|
+
export declare const METHOD_NOT_FOUND = -32601;
|
|
4
|
+
export declare const INVALID_PARAMS = -32602;
|
|
5
|
+
export declare const INTERNAL_ERROR = -32603;
|
|
6
|
+
export declare const PERMISSION_DENIED = -32604;
|
|
7
|
+
//# sourceMappingURL=codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../src/errors/codes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,SAAS,CAAC;AAClC,eAAO,MAAM,eAAe,SAAS,CAAC;AACtC,eAAO,MAAM,gBAAgB,SAAS,CAAC;AACvC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,iBAAiB,SAAS,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const PARSE_ERROR = -32700;
|
|
2
|
+
export const INVALID_REQUEST = -32600;
|
|
3
|
+
export const METHOD_NOT_FOUND = -32601;
|
|
4
|
+
export const INVALID_PARAMS = -32602;
|
|
5
|
+
export const INTERNAL_ERROR = -32603;
|
|
6
|
+
export const PERMISSION_DENIED = -32604;
|
|
7
|
+
//# sourceMappingURL=codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codes.js","sourceRoot":"","sources":["../../src/errors/codes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC;AACrC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,SAAS,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Repository, createRepository } from './core/Repository';
|
|
2
|
+
import { RPCError } from './errors/RPCError';
|
|
3
|
+
import * as codes from './errors/codes';
|
|
4
|
+
import { s } from './schema/json';
|
|
5
|
+
export { Repository, createRepository };
|
|
6
|
+
export { RPCError };
|
|
7
|
+
export { codes };
|
|
8
|
+
export { s };
|
|
9
|
+
export * from './types';
|
|
10
|
+
import { createExpressRouter } from './transport/express';
|
|
11
|
+
export { createExpressRouter };
|
|
12
|
+
import { attachWebSocket, createWebSocketServer } from './transport/ws';
|
|
13
|
+
import { serveStdio } from './transport/stdio';
|
|
14
|
+
export { attachWebSocket, createWebSocketServer, serveStdio };
|
|
15
|
+
export type { WSOptions, StandaloneWsOptions, StandaloneWsHandle } from './transport/ws';
|
|
16
|
+
export type { StdioOptions } from './transport/stdio';
|
|
17
|
+
export type { ExpressOptions } from './transport/express';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,OAAO,EAAE,CAAC,EAAE,CAAC;AACb,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAC;AAC9D,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzF,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|