@procedures/client 0.8.0 → 0.8.1
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/CHANGELOG.md +58 -0
- package/README.md +95 -8
- package/dist/.tsbuildinfo +1 -1
- package/dist/adapters/http/client/transport.d.ts +4 -0
- package/dist/adapters/http/client/transport.d.ts.map +1 -1
- package/dist/adapters/http/client/transport.js +11 -1
- package/dist/adapters/http/client/transport.js.map +1 -1
- package/dist/adapters/http/client/types.d.ts +19 -0
- package/dist/adapters/http/client/types.d.ts.map +1 -1
- package/dist/adapters/http/server/cors.d.ts +64 -0
- package/dist/adapters/http/server/cors.d.ts.map +1 -0
- package/dist/adapters/http/server/cors.js +113 -0
- package/dist/adapters/http/server/cors.js.map +1 -0
- package/dist/adapters/http/server/handler.d.ts +136 -0
- package/dist/adapters/http/server/handler.d.ts.map +1 -0
- package/dist/adapters/http/server/handler.js +495 -0
- package/dist/adapters/http/server/handler.js.map +1 -0
- package/dist/adapters/http/server/strategies.d.ts +14 -5
- package/dist/adapters/http/server/strategies.d.ts.map +1 -1
- package/dist/adapters/http/server/strategies.js.map +1 -1
- package/dist/adapters/http/server/transport.d.ts +30 -46
- package/dist/adapters/http/server/transport.d.ts.map +1 -1
- package/dist/adapters/http/server/transport.js +48 -432
- package/dist/adapters/http/server/transport.js.map +1 -1
- package/dist/adapters/http/server/types.d.ts +13 -0
- package/dist/adapters/http/server/types.d.ts.map +1 -1
- package/dist/adapters/websocket/server/transport.d.ts +46 -1
- package/dist/adapters/websocket/server/transport.d.ts.map +1 -1
- package/dist/adapters/websocket/server/transport.js +152 -15
- package/dist/adapters/websocket/server/transport.js.map +1 -1
- package/dist/adapters/websocket/server/types.d.ts +10 -3
- package/dist/adapters/websocket/server/types.d.ts.map +1 -1
- package/dist/adapters/websocket/server/upgrade-router.d.ts +28 -0
- package/dist/adapters/websocket/server/upgrade-router.d.ts.map +1 -0
- package/dist/adapters/websocket/server/upgrade-router.js +62 -0
- package/dist/adapters/websocket/server/upgrade-router.js.map +1 -0
- package/dist/adapters/websocket/server/upgrade.d.ts +68 -0
- package/dist/adapters/websocket/server/upgrade.d.ts.map +1 -0
- package/dist/adapters/websocket/server/upgrade.js +49 -0
- package/dist/adapters/websocket/server/upgrade.js.map +1 -0
- package/dist/adapters/websocket/shared/rpc.d.ts +2 -0
- package/dist/adapters/websocket/shared/rpc.d.ts.map +1 -1
- package/dist/adapters/websocket/shared/rpc.js +8 -2
- package/dist/adapters/websocket/shared/rpc.js.map +1 -1
- package/dist/browser.d.ts +12 -4
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +11 -2
- package/dist/browser.js.map +1 -1
- package/dist/client/client.d.ts +43 -0
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +69 -1
- package/dist/client/client.js.map +1 -1
- package/dist/events/publisher.d.ts +14 -0
- package/dist/events/publisher.d.ts.map +1 -1
- package/dist/events/publisher.js +42 -4
- package/dist/events/publisher.js.map +1 -1
- package/dist/events/rows.d.ts +31 -0
- package/dist/events/rows.d.ts.map +1 -0
- package/dist/events/rows.js +39 -0
- package/dist/events/rows.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +14 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +9 -0
- package/dist/node.js.map +1 -1
- package/dist/procedures/capability.d.ts +6 -0
- package/dist/procedures/capability.d.ts.map +1 -1
- package/dist/procedures/capability.js +25 -0
- package/dist/procedures/capability.js.map +1 -1
- package/dist/procedures/collection/changes.d.ts +94 -0
- package/dist/procedures/collection/changes.d.ts.map +1 -0
- package/dist/procedures/collection/changes.js +182 -0
- package/dist/procedures/collection/changes.js.map +1 -0
- package/dist/procedures/collection/index.d.ts +8 -3
- package/dist/procedures/collection/index.d.ts.map +1 -1
- package/dist/procedures/collection/index.js +6 -1
- package/dist/procedures/collection/index.js.map +1 -1
- package/dist/procedures/collection/procedures.d.ts +39 -2
- package/dist/procedures/collection/procedures.d.ts.map +1 -1
- package/dist/procedures/collection/procedures.js +111 -8
- package/dist/procedures/collection/procedures.js.map +1 -1
- package/dist/procedures/collection/query.d.ts +246 -0
- package/dist/procedures/collection/query.d.ts.map +1 -0
- package/dist/procedures/collection/query.js +854 -0
- package/dist/procedures/collection/query.js.map +1 -0
- package/dist/procedures/collection/schemas.d.ts +50 -0
- package/dist/procedures/collection/schemas.d.ts.map +1 -1
- package/dist/procedures/collection/schemas.js +144 -6
- package/dist/procedures/collection/schemas.js.map +1 -1
- package/dist/procedures/collection/storage.d.ts +58 -6
- package/dist/procedures/collection/storage.d.ts.map +1 -1
- package/dist/procedures/collection/storage.js +23 -0
- package/dist/procedures/collection/storage.js.map +1 -1
- package/dist/procedures/elicit.d.ts +190 -0
- package/dist/procedures/elicit.d.ts.map +1 -0
- package/dist/procedures/elicit.js +127 -0
- package/dist/procedures/elicit.js.map +1 -0
- package/dist/procedures/hints.d.ts +43 -0
- package/dist/procedures/hints.d.ts.map +1 -0
- package/dist/procedures/hints.js +74 -0
- package/dist/procedures/hints.js.map +1 -0
- package/dist/procedures/index.d.ts +9 -2
- package/dist/procedures/index.d.ts.map +1 -1
- package/dist/procedures/index.js +5 -1
- package/dist/procedures/index.js.map +1 -1
- package/dist/procedures/invoke.d.ts +20 -0
- package/dist/procedures/invoke.d.ts.map +1 -1
- package/dist/procedures/invoke.js +13 -0
- package/dist/procedures/invoke.js.map +1 -1
- package/dist/procedures/progress.d.ts +24 -0
- package/dist/procedures/progress.d.ts.map +1 -0
- package/dist/procedures/progress.js +11 -0
- package/dist/procedures/progress.js.map +1 -0
- package/dist/procedures/registry.d.ts.map +1 -1
- package/dist/procedures/registry.js +5 -0
- package/dist/procedures/registry.js.map +1 -1
- package/dist/procedures/types.d.ts +42 -0
- package/dist/procedures/types.d.ts.map +1 -1
- package/dist/procedures/types.js.map +1 -1
- package/dist/procedures/untrusted.d.ts +28 -0
- package/dist/procedures/untrusted.d.ts.map +1 -0
- package/dist/procedures/untrusted.js +32 -0
- package/dist/procedures/untrusted.js.map +1 -0
- package/dist/server/browser-guard.d.ts +12 -2
- package/dist/server/browser-guard.d.ts.map +1 -1
- package/dist/server/browser-guard.js +43 -6
- package/dist/server/browser-guard.js.map +1 -1
- package/dist/server/host-policy.d.ts +10 -1
- package/dist/server/host-policy.d.ts.map +1 -1
- package/dist/server/host-policy.js +5 -0
- package/dist/server/host-policy.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/procedure-server.d.ts +38 -6
- package/dist/server/procedure-server.d.ts.map +1 -1
- package/dist/server/procedure-server.js +65 -13
- package/dist/server/procedure-server.js.map +1 -1
- package/dist/server/request-auth.d.ts +51 -4
- package/dist/server/request-auth.d.ts.map +1 -1
- package/dist/server/request-auth.js +116 -5
- package/dist/server/request-auth.js.map +1 -1
- package/dist/server/types.d.ts +73 -5
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js.map +1 -1
- package/package.json +5 -1
- package/src/adapters/http/client/transport.ts +11 -1
- package/src/adapters/http/client/types.ts +22 -0
- package/src/adapters/http/server/cors.ts +144 -0
- package/src/adapters/http/server/handler.ts +624 -0
- package/src/adapters/http/server/strategies.ts +16 -6
- package/src/adapters/http/server/transport.ts +55 -478
- package/src/adapters/http/server/types.ts +15 -0
- package/src/adapters/websocket/server/transport.ts +166 -16
- package/src/adapters/websocket/server/types.ts +11 -3
- package/src/adapters/websocket/server/upgrade-router.ts +77 -0
- package/src/adapters/websocket/server/upgrade.ts +88 -0
- package/src/adapters/websocket/shared/rpc.ts +9 -2
- package/src/browser.ts +79 -2
- package/src/client/client.ts +83 -1
- package/src/events/publisher.ts +48 -4
- package/src/events/rows.ts +48 -0
- package/src/index.ts +1 -1
- package/src/node.ts +21 -0
- package/src/procedures/capability.ts +21 -0
- package/src/procedures/collection/changes.ts +245 -0
- package/src/procedures/collection/index.ts +53 -1
- package/src/procedures/collection/procedures.ts +163 -7
- package/src/procedures/collection/query.ts +1009 -0
- package/src/procedures/collection/schemas.ts +196 -7
- package/src/procedures/collection/storage.ts +78 -6
- package/src/procedures/elicit.ts +320 -0
- package/src/procedures/hints.ts +91 -0
- package/src/procedures/index.ts +78 -2
- package/src/procedures/invoke.ts +29 -0
- package/src/procedures/progress.ts +25 -0
- package/src/procedures/registry.ts +4 -0
- package/src/procedures/types.ts +49 -0
- package/src/procedures/untrusted.ts +50 -0
- package/src/server/browser-guard.ts +48 -6
- package/src/server/host-policy.ts +13 -1
- package/src/server/index.ts +3 -0
- package/src/server/procedure-server.ts +82 -14
- package/src/server/request-auth.ts +128 -6
- package/src/server/types.ts +82 -5
package/src/server/types.ts
CHANGED
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
* Enables handling HTTP, WebSocket, gRPC, etc. with unified RPC format.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import type { Elicit } from "../procedures/elicit.js";
|
|
9
|
+
import type { ReportProgress } from "../procedures/progress.js";
|
|
8
10
|
import type { Metadata, Status, Method } from "../client/types.js";
|
|
11
|
+
import type { CapabilityRequest } from "../procedures/types.js";
|
|
9
12
|
|
|
10
13
|
// Re-export Method from client types
|
|
11
14
|
export type { Method };
|
|
@@ -27,27 +30,86 @@ export interface ServerRequest<TReq = unknown> {
|
|
|
27
30
|
/** Request metadata (headers, query params, etc.) */
|
|
28
31
|
metadata: Metadata;
|
|
29
32
|
|
|
33
|
+
/**
|
|
34
|
+
* The function that asks the person at the caller, when the face can ask (MCP elicitation,
|
|
35
|
+
* CLI-12). The procedure gets it as `ctx.elicit`. It is not in the metadata, so a caller cannot
|
|
36
|
+
* send it.
|
|
37
|
+
*/
|
|
38
|
+
elicit?: Elicit | undefined;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The function that tells the caller the progress of the call, when the caller asked for it
|
|
42
|
+
* (an MCP progress token). The procedure gets it as `ctx.progress`.
|
|
43
|
+
*/
|
|
44
|
+
progress?: ReportProgress | undefined;
|
|
45
|
+
|
|
30
46
|
/** Abort signal for cancellation */
|
|
31
47
|
signal?: AbortSignal;
|
|
32
48
|
|
|
33
49
|
/**
|
|
34
|
-
* The credentials that a network transport read from the request
|
|
35
|
-
* `Authorization` header, or of the `token` query of a WebSocket connection
|
|
36
|
-
*
|
|
37
|
-
*
|
|
50
|
+
* The credentials that a network transport read from the request (roadmap R18). They have the
|
|
51
|
+
* bearer token of an `Authorization` header, or of the `token` query of a WebSocket connection.
|
|
52
|
+
* They also have the cookies, the headers and the query of the request. They are not in the
|
|
53
|
+
* metadata, so a handler and a nested call do not see them. A request without credentials comes
|
|
54
|
+
* from this process (a direct `handle()`, MCP over stdio).
|
|
38
55
|
*/
|
|
39
56
|
credentials?: Credentials | undefined;
|
|
40
57
|
|
|
41
58
|
/** The principal of the request: who sends it. `ProcedureServer` sets it when it authenticates the request. */
|
|
42
59
|
principal?: Principal | undefined;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A narrower capability that the request asks for. The request hook of the server
|
|
63
|
+
* (`principalOf`) can set it. The server narrows the capability of the call with it, so the
|
|
64
|
+
* capability does not become wider.
|
|
65
|
+
*/
|
|
66
|
+
narrowing?: CapabilityRequest | undefined;
|
|
43
67
|
}
|
|
44
68
|
|
|
45
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* The credentials of a request. A network transport sets each field that it can read. The request
|
|
71
|
+
* hook of the server (`principalOf`) reads them.
|
|
72
|
+
*/
|
|
46
73
|
export interface Credentials {
|
|
47
74
|
/** The bearer token that the request presents. */
|
|
48
75
|
readonly bearer?: string | undefined;
|
|
76
|
+
/** The cookies of the request, by name (the `Cookie` header of an HTTP request or of an upgrade). */
|
|
77
|
+
readonly cookies?: Readonly<Record<string, string>> | undefined;
|
|
78
|
+
/** Each header of the request, the secret headers too, by lower-case name. */
|
|
79
|
+
readonly headers?: Readonly<Record<string, string>> | undefined;
|
|
80
|
+
/** The first value of each query parameter of the request URL, by name. */
|
|
81
|
+
readonly query?: Readonly<Record<string, string>> | undefined;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* What the request hook of a server (`principalOf`) gives for a network request. Each field is
|
|
86
|
+
* optional: an empty object accepts the request without a principal.
|
|
87
|
+
*/
|
|
88
|
+
export interface RequestIdentity {
|
|
89
|
+
/**
|
|
90
|
+
* The token to compare with the token of the server, for example the value of a cookie or of an
|
|
91
|
+
* application header. Without it, the server compares the bearer token of the credentials.
|
|
92
|
+
*/
|
|
93
|
+
readonly bearer?: string | undefined;
|
|
94
|
+
/** The principal of the request. It replaces the principal of the token check. */
|
|
95
|
+
readonly principal?: Principal | undefined;
|
|
96
|
+
/**
|
|
97
|
+
* A narrower capability that the request asks for, for example a guest mode of a cookie. The
|
|
98
|
+
* server narrows the capability of the call with it. A request for more has no effect.
|
|
99
|
+
*/
|
|
100
|
+
readonly narrowing?: CapabilityRequest | undefined;
|
|
49
101
|
}
|
|
50
102
|
|
|
103
|
+
/**
|
|
104
|
+
* The request hook of a server: it reads the credentials of a network request (a cookie, a header,
|
|
105
|
+
* the query) and gives the identity of the request. Undefined, or an error, refuses the request
|
|
106
|
+
* with `UNAUTHORIZED`. The hook runs before the token check and before `authenticate`.
|
|
107
|
+
*/
|
|
108
|
+
export type PrincipalOf = (
|
|
109
|
+
credentials: Credentials,
|
|
110
|
+
request: ServerRequest<unknown>
|
|
111
|
+
) => RequestIdentity | undefined | Promise<RequestIdentity | undefined>;
|
|
112
|
+
|
|
51
113
|
/** Who sends a request (roadmap R18). */
|
|
52
114
|
export interface Principal {
|
|
53
115
|
/** The id of the principal. With the token of a host: "token". */
|
|
@@ -66,8 +128,23 @@ export interface Principal {
|
|
|
66
128
|
*/
|
|
67
129
|
export interface RequestHandler {
|
|
68
130
|
handle(request: ServerRequest): Promise<ServerResponse>;
|
|
131
|
+
/**
|
|
132
|
+
* How the handler can authenticate a network request with ambient credentials: the cookies that
|
|
133
|
+
* a browser sends by itself, also for a request of another site (CSRF). A network face then
|
|
134
|
+
* trusts such a request only from a named origin. Absent: the handler reads no cookies.
|
|
135
|
+
*/
|
|
136
|
+
readonly ambientCredentials?: AmbientCredentials | undefined;
|
|
69
137
|
}
|
|
70
138
|
|
|
139
|
+
/**
|
|
140
|
+
* How a server can authenticate a request with ambient credentials (cookies):
|
|
141
|
+
* - `"always"`: each network request. The request hook `principalOf` reads the cookies, so a face
|
|
142
|
+
* trusts a request only from a named origin.
|
|
143
|
+
* - `"cookies"`: a request that carries a cookie. An `authenticate` function can read it, so a face
|
|
144
|
+
* trusts a request with a cookie only from a named origin.
|
|
145
|
+
*/
|
|
146
|
+
export type AmbientCredentials = "always" | "cookies";
|
|
147
|
+
|
|
71
148
|
/**
|
|
72
149
|
* Server response in unified RPC format.
|
|
73
150
|
* Converted by transport adapters to protocol-specific responses.
|