@orpc/server 2.0.0-beta.4 → 2.0.0-beta.40
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 +97 -94
- package/dist/adapters/aws-lambda/index.d.mts +50 -0
- package/dist/adapters/aws-lambda/index.d.ts +50 -0
- package/dist/adapters/aws-lambda/index.mjs +39 -0
- package/dist/adapters/crossws/index.d.mts +21 -12
- package/dist/adapters/crossws/index.d.ts +21 -12
- package/dist/adapters/crossws/index.mjs +14 -10
- package/dist/adapters/fastify/index.d.mts +42 -0
- package/dist/adapters/fastify/index.d.ts +42 -0
- package/dist/adapters/fastify/index.mjs +39 -0
- package/dist/adapters/fetch/index.d.mts +21 -114
- package/dist/adapters/fetch/index.d.ts +21 -114
- package/dist/adapters/fetch/index.mjs +20 -182
- package/dist/adapters/message-port/index.d.mts +23 -20
- package/dist/adapters/message-port/index.d.ts +23 -20
- package/dist/adapters/message-port/index.mjs +31 -34
- package/dist/adapters/node/index.d.mts +19 -96
- package/dist/adapters/node/index.d.ts +19 -96
- package/dist/adapters/node/index.mjs +19 -157
- package/dist/adapters/standard/index.d.mts +91 -17
- package/dist/adapters/standard/index.d.ts +91 -17
- package/dist/adapters/standard/index.mjs +4 -4
- package/dist/adapters/standard-peer/index.d.mts +6 -11
- package/dist/adapters/standard-peer/index.d.ts +6 -11
- package/dist/adapters/standard-peer/index.mjs +10 -2
- package/dist/adapters/websocket/index.d.mts +45 -29
- package/dist/adapters/websocket/index.d.ts +45 -29
- package/dist/adapters/websocket/index.mjs +37 -28
- package/dist/extensions/callable.d.mts +5 -5
- package/dist/extensions/callable.d.ts +5 -5
- package/dist/extensions/callable.mjs +2 -2
- package/dist/helpers/index.d.mts +23 -6
- package/dist/helpers/index.d.ts +23 -6
- package/dist/helpers/index.mjs +13 -5
- package/dist/index.d.mts +332 -37
- package/dist/index.d.ts +332 -37
- package/dist/index.mjs +131 -49
- package/dist/plugins/index.d.mts +243 -31
- package/dist/plugins/index.d.ts +243 -31
- package/dist/plugins/index.mjs +527 -30
- package/dist/shared/server.1ExWFMze.mjs +69 -0
- package/dist/shared/{server.CjOb6ItT.mjs → server.24nXyhbl.mjs} +1 -1
- package/dist/shared/{server.DBANIheG.d.ts → server.B5K1CViq.d.mts} +24 -13
- package/dist/shared/{server.BsNNjG5J.d.mts → server.BpmUhems.d.mts} +32 -20
- package/dist/shared/{server.BL22TloH.d.mts → server.BsujoJoF.d.mts} +38 -59
- package/dist/shared/{server.BL22TloH.d.ts → server.BsujoJoF.d.ts} +38 -59
- package/dist/shared/{server.BwHnWUuN.mjs → server.BynNaBBA.mjs} +24 -19
- package/dist/shared/{server.GDpX6Df8.mjs → server.C0lFtoHU.mjs} +162 -68
- package/dist/shared/server.C7xllBNN.d.mts +34 -0
- package/dist/shared/server.CFqSIFnT.d.mts +14 -0
- package/dist/shared/{server.Pa0F03f_.d.ts → server.CRwPbhLO.d.ts} +32 -20
- package/dist/shared/{server.DJIkub_t.d.mts → server.Cxranw-8.d.ts} +24 -13
- package/dist/shared/server.D0dr-F8u.d.ts +34 -0
- package/dist/shared/{server.CrlKQucM.mjs → server.Djb_ebJT.mjs} +25 -53
- package/dist/shared/server.RRVK1xTV.d.ts +14 -0
- package/package.json +47 -14
- package/dist/shared/server.CX4vUnDk.mjs +0 -11
- package/dist/shared/server.Cj5lgPuG.d.mts +0 -66
- package/dist/shared/server.D_QauotT.mjs +0 -30
- package/dist/shared/server.d_2NS3g5.d.ts +0 -66
|
@@ -1,121 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
export { R as BodyLimitPlugin } from '../../shared/server.D0dr-F8u.js';
|
|
2
|
+
import { MaybeOptionalOptions } from '@orpc/shared';
|
|
3
|
+
import { SendStandardResponseOptions, NodeHttpRequest, NodeHttpResponse } from '@standard-server/node';
|
|
4
|
+
import { Context } from '../../index.js';
|
|
5
|
+
import { StandardHandler, StandardHandlerOptions } from '../standard/index.js';
|
|
5
6
|
import { FriendlyStandardHandlerHandleOptions } from '../standard/index.js';
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import { R as RPCHandlerCodecOptions } from '../../shared/server.d_2NS3g5.js';
|
|
7
|
+
import { Router } from '../../index.js';
|
|
8
|
+
import { RPCHandlerCodecOptions } from '../standard/index.js';
|
|
9
9
|
import '@orpc/client';
|
|
10
10
|
import '@orpc/contract';
|
|
11
|
-
import '@
|
|
12
|
-
|
|
13
|
-
interface NodeHttpHandlerPlugin<T extends Context> extends StandardHandlerPlugin<T> {
|
|
14
|
-
/**
|
|
15
|
-
* Initializes the plugin and returns new node HTTP handler options.
|
|
16
|
-
* Called once per plugin instance during composition.
|
|
17
|
-
*
|
|
18
|
-
* This method allows plugins to wrap, extend, or transform node HTTP handler options
|
|
19
|
-
* such as interceptors, or other configuration.
|
|
20
|
-
*
|
|
21
|
-
* @param options - The current handler options from previous plugins or base configuration
|
|
22
|
-
* @returns Transformed handler options with plugin's modifications applied
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```ts
|
|
26
|
-
* initNodeHttpHandlerOptions(options) {
|
|
27
|
-
* return {
|
|
28
|
-
* ...options,
|
|
29
|
-
* nodeHttpInterceptors: [...(options.nodeHttpInterceptors || []), myInterceptor]
|
|
30
|
-
* }
|
|
31
|
-
* }
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
initNodeHttpHandlerOptions?(options: NodeHttpHandlerOptions<T>): NodeHttpHandlerOptions<T>;
|
|
35
|
-
}
|
|
36
|
-
declare class CompositeNodeHttpHandlerPlugin<T extends Context> implements NodeHttpHandlerPlugin<T> {
|
|
37
|
-
readonly name = "~composite/node-http-handler";
|
|
38
|
-
protected readonly plugins: NodeHttpHandlerPlugin<T>[];
|
|
39
|
-
constructor(plugins?: NodeHttpHandlerPlugin<T>[]);
|
|
40
|
-
initNodeHttpHandlerOptions(options: NodeHttpHandlerOptions<T>): NodeHttpHandlerOptions<T>;
|
|
41
|
-
}
|
|
11
|
+
import '@standard-server/core';
|
|
42
12
|
|
|
43
13
|
type NodeHttpHandlerHandleResult = {
|
|
44
14
|
matched: true;
|
|
45
15
|
} | {
|
|
46
16
|
matched: false;
|
|
47
17
|
};
|
|
48
|
-
interface
|
|
49
|
-
request: NodeHttpRequest;
|
|
50
|
-
response: NodeHttpResponse;
|
|
51
|
-
sendStandardResponseOptions: SendStandardResponseOptions | undefined;
|
|
52
|
-
}
|
|
53
|
-
type NodeHttpHandlerNodeHttpInterceptor<T extends Context> = Interceptor<NodeHttpHandlerNodeHttpInterceptorOptions<T>, Promise<NodeHttpHandlerHandleResult>>;
|
|
54
|
-
interface NodeHttpHandlerOptions<T extends Context> {
|
|
18
|
+
interface NodeHttpHandlerOptions<_T extends Context> {
|
|
55
19
|
/**
|
|
56
20
|
* Custom options for `sendStandardResponse`, used to send a `Standard Response`
|
|
57
21
|
*/
|
|
58
22
|
sendStandardResponse?: SendStandardResponseOptions | undefined;
|
|
59
|
-
/**
|
|
60
|
-
* Interceptors that run before the mapping between the Standard API and Node HTTP API,
|
|
61
|
-
* useful for extending Node HTTP request/response before handling, ...
|
|
62
|
-
*/
|
|
63
|
-
nodeHttpInterceptors?: NodeHttpHandlerNodeHttpInterceptor<T>[] | undefined;
|
|
64
|
-
plugins?: NodeHttpHandlerPlugin<T>[] | undefined;
|
|
65
23
|
}
|
|
66
24
|
declare class NodeHttpHandler<T extends Context> {
|
|
67
25
|
private readonly standardHandler;
|
|
68
26
|
private readonly sendStandardResponseOptions;
|
|
69
|
-
private readonly nodeHttpInterceptors;
|
|
70
27
|
constructor(standardHandler: StandardHandler<T>, options?: NoInfer<NodeHttpHandlerOptions<T>>);
|
|
71
28
|
handle(request: NodeHttpRequest, response: NodeHttpResponse, ...rest: MaybeOptionalOptions<FriendlyStandardHandlerHandleOptions<T>>): Promise<NodeHttpHandlerHandleResult>;
|
|
72
29
|
}
|
|
73
30
|
|
|
74
|
-
interface
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
declare class BodyCompressionHandlerPlugin<T extends Context> implements NodeHttpHandlerPlugin<T> {
|
|
84
|
-
name: string;
|
|
85
|
-
private readonly compressionHandler;
|
|
86
|
-
constructor(options?: BodyCompressionHandlerPluginOptions);
|
|
87
|
-
initNodeHttpHandlerOptions(options: NodeHttpHandlerOptions<T>): NodeHttpHandlerOptions<T>;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
interface BodyLimitHandlerPluginOptions {
|
|
91
|
-
/**
|
|
92
|
-
* The maximum size of the body in bytes.
|
|
93
|
-
*/
|
|
94
|
-
maxBodySize: number;
|
|
95
|
-
}
|
|
96
|
-
declare class BodyLimitHandlerPlugin<T extends Context> implements NodeHttpHandlerPlugin<T> {
|
|
97
|
-
name: string;
|
|
98
|
-
private readonly maxBodySize;
|
|
99
|
-
constructor(options: BodyLimitHandlerPluginOptions);
|
|
100
|
-
initNodeHttpHandlerOptions(options: NodeHttpHandlerOptions<T>): NodeHttpHandlerOptions<T>;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
interface RPCHandlerOptions<T extends Context> extends NodeHttpHandlerOptions<T>, Omit<StandardHandlerOptions<T>, 'plugins'>, RPCHandlerCodecOptions<T> {
|
|
104
|
-
/**
|
|
105
|
-
* Configuration for {@link CSRFGuardHandlerPlugin}, which is enabled by default for `RPCHandler` over HTTP.
|
|
106
|
-
*/
|
|
107
|
-
csrfGuardPlugin?: {
|
|
108
|
-
/**
|
|
109
|
-
* If `false`, this plugin is disabled.
|
|
110
|
-
*
|
|
111
|
-
* @default true
|
|
112
|
-
*/
|
|
113
|
-
enabled?: boolean;
|
|
114
|
-
};
|
|
115
|
-
}
|
|
31
|
+
interface RPCHandlerOptions<T extends Context> extends NodeHttpHandlerOptions<T>, StandardHandlerOptions<T>, RPCHandlerCodecOptions<T> {
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Serves an oRPC router over the RPC protocol using Node.js built-in
|
|
35
|
+
* HTTP request/response objects.
|
|
36
|
+
*
|
|
37
|
+
* @see {@link https://orpc.dev/docs/adapters/node-http | Node HTTP Adapter}
|
|
38
|
+
*/
|
|
116
39
|
declare class RPCHandler<T extends Context> extends NodeHttpHandler<T> {
|
|
117
40
|
constructor(router: Router<T>, options?: NoInfer<RPCHandlerOptions<T>>);
|
|
118
41
|
}
|
|
119
42
|
|
|
120
|
-
export {
|
|
121
|
-
export type {
|
|
43
|
+
export { NodeHttpHandler, RPCHandler };
|
|
44
|
+
export type { NodeHttpHandlerHandleResult, NodeHttpHandlerOptions, RPCHandlerOptions };
|
|
@@ -1,179 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { toStandardLazyRequest, sendStandardResponse } from '@standardserver/node';
|
|
1
|
+
export { R as BodyLimitPlugin } from '../../shared/server.1ExWFMze.mjs';
|
|
2
|
+
import { resolveMaybeOptionalOptions } from '@orpc/shared';
|
|
3
|
+
import { toStandardLazyRequest, sendStandardResponse } from '@standard-server/node';
|
|
5
4
|
import { r as resolveFriendlyStandardHandlerHandleOptions } from '../../shared/server.W91HSRkE.mjs';
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import '@
|
|
9
|
-
import '
|
|
5
|
+
import { R as RPCHandlerCodec, S as StandardHandler } from '../../shared/server.C0lFtoHU.mjs';
|
|
6
|
+
import '@orpc/client';
|
|
7
|
+
import '@standard-server/core';
|
|
8
|
+
import '@standard-server/fetch';
|
|
9
|
+
import '../../shared/server.Djb_ebJT.mjs';
|
|
10
10
|
import '@orpc/contract';
|
|
11
|
-
import '../../shared/server.
|
|
12
|
-
|
|
13
|
-
class BodyCompressionHandlerPlugin {
|
|
14
|
-
name = "~body-compression";
|
|
15
|
-
compressionHandler;
|
|
16
|
-
constructor(options = {}) {
|
|
17
|
-
this.compressionHandler = compression({
|
|
18
|
-
...options,
|
|
19
|
-
filter: (request, response) => {
|
|
20
|
-
const hasContentDisposition = response.hasHeader("content-disposition");
|
|
21
|
-
const contentType = response.getHeader("content-type")?.toString();
|
|
22
|
-
if (!hasContentDisposition && contentType?.startsWith("text/event-stream")) {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
return options.filter ? options.filter(request, response) : compression.filter(request, response);
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
initNodeHttpHandlerOptions(options) {
|
|
30
|
-
return {
|
|
31
|
-
...options,
|
|
32
|
-
nodeHttpInterceptors: [
|
|
33
|
-
async (interceptorOptions) => {
|
|
34
|
-
let resolve;
|
|
35
|
-
let reject;
|
|
36
|
-
const promise = new Promise((res, rej) => {
|
|
37
|
-
resolve = res;
|
|
38
|
-
reject = rej;
|
|
39
|
-
});
|
|
40
|
-
const originalWrite = interceptorOptions.response.write;
|
|
41
|
-
const originalEnd = interceptorOptions.response.end;
|
|
42
|
-
const originalOn = interceptorOptions.response.on;
|
|
43
|
-
this.compressionHandler(
|
|
44
|
-
interceptorOptions.request,
|
|
45
|
-
interceptorOptions.response,
|
|
46
|
-
async (error) => {
|
|
47
|
-
if (error) {
|
|
48
|
-
reject(error);
|
|
49
|
-
} else {
|
|
50
|
-
try {
|
|
51
|
-
resolve(await interceptorOptions.next(interceptorOptions));
|
|
52
|
-
} catch (nextError) {
|
|
53
|
-
reject(nextError);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
);
|
|
58
|
-
try {
|
|
59
|
-
return await promise;
|
|
60
|
-
} finally {
|
|
61
|
-
interceptorOptions.response.write = originalWrite;
|
|
62
|
-
interceptorOptions.response.end = originalEnd;
|
|
63
|
-
interceptorOptions.response.on = originalOn;
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
...toArray(options.nodeHttpInterceptors)
|
|
67
|
-
]
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
class BodyLimitHandlerPlugin {
|
|
73
|
-
name = "~body-limit";
|
|
74
|
-
maxBodySize;
|
|
75
|
-
constructor(options) {
|
|
76
|
-
this.maxBodySize = options.maxBodySize;
|
|
77
|
-
}
|
|
78
|
-
initNodeHttpHandlerOptions(options) {
|
|
79
|
-
return {
|
|
80
|
-
...options,
|
|
81
|
-
nodeHttpInterceptors: [
|
|
82
|
-
async (interceptorOptions) => {
|
|
83
|
-
let isHeaderChecked = false;
|
|
84
|
-
const checkHeader = () => {
|
|
85
|
-
if (isHeaderChecked) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
isHeaderChecked = true;
|
|
89
|
-
const contentLength = interceptorOptions.request.headers["content-length"];
|
|
90
|
-
if (contentLength && Number(contentLength) > this.maxBodySize) {
|
|
91
|
-
throw new ORPCError("PAYLOAD_TOO_LARGE");
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
const originalEmit = interceptorOptions.request.emit;
|
|
95
|
-
let currentBodySize = 0;
|
|
96
|
-
interceptorOptions.request.emit = (event, ...args) => {
|
|
97
|
-
if (event === "data") {
|
|
98
|
-
checkHeader();
|
|
99
|
-
currentBodySize += args[0]?.length ?? 0;
|
|
100
|
-
if (currentBodySize > this.maxBodySize) {
|
|
101
|
-
throw new ORPCError("PAYLOAD_TOO_LARGE");
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return originalEmit.call(interceptorOptions.request, event, ...args);
|
|
105
|
-
};
|
|
106
|
-
try {
|
|
107
|
-
return await interceptorOptions.next(interceptorOptions);
|
|
108
|
-
} finally {
|
|
109
|
-
interceptorOptions.request.emit = originalEmit;
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
...toArray(options.nodeHttpInterceptors)
|
|
113
|
-
]
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
class CompositeNodeHttpHandlerPlugin {
|
|
119
|
-
name = "~composite/node-http-handler";
|
|
120
|
-
plugins;
|
|
121
|
-
constructor(plugins = []) {
|
|
122
|
-
this.plugins = sortPlugins(plugins);
|
|
123
|
-
}
|
|
124
|
-
initNodeHttpHandlerOptions(options) {
|
|
125
|
-
for (const plugin of this.plugins) {
|
|
126
|
-
if (plugin.initNodeHttpHandlerOptions) {
|
|
127
|
-
options = plugin.initNodeHttpHandlerOptions(options);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return options;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
11
|
+
import '../../shared/server.BynNaBBA.mjs';
|
|
133
12
|
|
|
134
13
|
class NodeHttpHandler {
|
|
135
14
|
constructor(standardHandler, options = {}) {
|
|
136
15
|
this.standardHandler = standardHandler;
|
|
137
|
-
options = new CompositeNodeHttpHandlerPlugin(options.plugins).initNodeHttpHandlerOptions(options);
|
|
138
|
-
this.nodeHttpInterceptors = options.nodeHttpInterceptors;
|
|
139
16
|
this.sendStandardResponseOptions = options.sendStandardResponse;
|
|
140
17
|
}
|
|
141
18
|
sendStandardResponseOptions;
|
|
142
|
-
nodeHttpInterceptors;
|
|
143
19
|
async handle(request, response, ...rest) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
request,
|
|
149
|
-
response,
|
|
150
|
-
sendStandardResponseOptions: this.sendStandardResponseOptions
|
|
151
|
-
},
|
|
152
|
-
async ({ request: request2, response: response2, sendStandardResponseOptions, ...options }) => {
|
|
153
|
-
const standardRequest = toStandardLazyRequest(request2, response2);
|
|
154
|
-
const result = await this.standardHandler.handle(standardRequest, options);
|
|
155
|
-
if (!result.matched) {
|
|
156
|
-
return result;
|
|
157
|
-
}
|
|
158
|
-
await sendStandardResponse(response2, result.response, sendStandardResponseOptions);
|
|
159
|
-
return result;
|
|
160
|
-
}
|
|
20
|
+
const standardRequest = toStandardLazyRequest(request, response);
|
|
21
|
+
const result = await this.standardHandler.handle(
|
|
22
|
+
standardRequest,
|
|
23
|
+
resolveFriendlyStandardHandlerHandleOptions(resolveMaybeOptionalOptions(rest))
|
|
161
24
|
);
|
|
25
|
+
if (!result.matched) {
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
await sendStandardResponse(response, result.response, this.sendStandardResponseOptions);
|
|
29
|
+
return result;
|
|
162
30
|
}
|
|
163
31
|
}
|
|
164
32
|
|
|
165
33
|
class RPCHandler extends NodeHttpHandler {
|
|
166
34
|
constructor(router, options = {}) {
|
|
167
|
-
if (options.csrfGuardPlugin?.enabled !== false) {
|
|
168
|
-
options = {
|
|
169
|
-
...options,
|
|
170
|
-
plugins: [...toArray(options.plugins), new CSRFGuardHandlerPlugin()]
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
35
|
const codec = new RPCHandlerCodec(router, options);
|
|
174
36
|
const handler = new StandardHandler(codec, options);
|
|
175
37
|
super(handler, options);
|
|
176
38
|
}
|
|
177
39
|
}
|
|
178
40
|
|
|
179
|
-
export {
|
|
41
|
+
export { NodeHttpHandler, RPCHandler };
|
|
@@ -1,19 +1,93 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { C as CompositeStandardHandlerPlugin,
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import '
|
|
7
|
-
import '
|
|
8
|
-
import '@orpc/contract';
|
|
9
|
-
|
|
1
|
+
import { R as ResolvedStandardHandlerHandleOptions, f as StandardHandlerCodec, g as StandardHandlerCodecResolvedProcedure } from '../../shared/server.B5K1CViq.mjs';
|
|
2
|
+
export { C as CompositeStandardHandlerPlugin, S as StandardHandler, a as StandardHandlerHandleOptions, h as StandardHandlerHandleResult, i as StandardHandlerInterceptor, e as StandardHandlerInterceptorOptions, c as StandardHandlerOptions, b as StandardHandlerPlugin, j as StandardHandlerRoutingInterceptor, d as StandardHandlerRoutingInterceptorOptions, T as TracingHandlerPlugin } from '../../shared/server.B5K1CViq.mjs';
|
|
3
|
+
import { RPCSerializer, AnyORPCError } from '@orpc/client';
|
|
4
|
+
import { Value, Public, Promisable } from '@orpc/shared';
|
|
5
|
+
import { StandardMethod, StandardLazyRequest, StandardResponse } from '@standard-server/core';
|
|
6
|
+
import { AnyProcedure, Context } from '../../index.mjs';
|
|
7
|
+
import { AnyRouter } from '../../index.mjs';
|
|
8
|
+
import { AnyProcedureContract } from '@orpc/contract';
|
|
9
|
+
export { F as FriendlyStandardHandlerHandleOptions, r as resolveFriendlyStandardHandlerHandleOptions } from '../../shared/server.CFqSIFnT.mjs';
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Methods that can invoke procedures by default. Browsers cannot trigger them
|
|
13
|
+
* cross-site without a CORS preflight or an HTML form, unlike `GET`, which a plain
|
|
14
|
+
* `<a>` click or redirect can trigger with `SameSite=Lax` cookies attached. Other
|
|
15
|
+
* methods (`HEAD`, `OPTIONS`, `QUERY`, ...) have safe semantics that should not
|
|
16
|
+
* invoke a procedure that can modify data.
|
|
17
|
+
*
|
|
18
|
+
* @see {@link https://orpc.dev/docs/rpc/handler#supported-http-methods | RPC Handler - Supported HTTP Methods}
|
|
19
|
+
*/
|
|
20
|
+
declare const RPC_DEFAULT_ALLOW_METHODS: readonly StandardMethod[];
|
|
21
|
+
interface RPCMatcherOptions {
|
|
22
|
+
/**
|
|
23
|
+
* Filter which procedures are exposed for matching. Return `false` to exclude.
|
|
24
|
+
*
|
|
25
|
+
* @default true
|
|
26
|
+
*/
|
|
27
|
+
filter?: Value<boolean, [procedure: AnyProcedureContract | AnyProcedure, path: string[]]>;
|
|
28
|
+
/**
|
|
29
|
+
* Restricts which HTTP methods can invoke procedures, either with a list of allowed
|
|
30
|
+
* methods or decided per request via a function. Requests using a disallowed method
|
|
31
|
+
* are treated as unmatched. `GET` is excluded by default because it is exposed to
|
|
32
|
+
* Cross-Site Request Forgery (CSRF) attacks.
|
|
33
|
+
*
|
|
34
|
+
* @default RPC_DEFAULT_ALLOW_METHODS (['POST', 'PUT', 'PATCH', 'DELETE'])
|
|
35
|
+
* @see {@link https://orpc.dev/docs/rpc/handler#supported-http-methods | RPC Handler - Supported HTTP Methods}
|
|
36
|
+
*/
|
|
37
|
+
allowMethods?: readonly StandardMethod[] | ((method: StandardMethod, procedure: AnyProcedure, path: string[]) => boolean);
|
|
38
|
+
}
|
|
39
|
+
declare class RPCMatcher {
|
|
40
|
+
private readonly filter;
|
|
41
|
+
private readonly allowMethodsSet;
|
|
42
|
+
private readonly allowMethodsFn;
|
|
43
|
+
private readonly rootRouter;
|
|
44
|
+
private readonly tree;
|
|
45
|
+
private readonly pendingLazyRouters;
|
|
46
|
+
constructor(router: AnyRouter, options?: RPCMatcherOptions);
|
|
47
|
+
private index;
|
|
48
|
+
match(method: StandardMethod, pathname: `/${string}`, prefix: `/${string}` | undefined): Promise<{
|
|
49
|
+
path: string[];
|
|
50
|
+
procedure: AnyProcedure;
|
|
51
|
+
} | undefined>;
|
|
52
|
+
private resolvePendingLazyRouters;
|
|
53
|
+
private loadPendingLazyRouters;
|
|
54
|
+
private loadPendingLazyRouter;
|
|
55
|
+
private indexPendingLazyRouter;
|
|
56
|
+
private resolveProcedure;
|
|
57
|
+
}
|
|
17
58
|
|
|
18
|
-
|
|
19
|
-
|
|
59
|
+
interface RPCHandlerCodecOptions<T extends Context> extends RPCMatcherOptions {
|
|
60
|
+
/**
|
|
61
|
+
* Override the default RPC serializer.
|
|
62
|
+
*/
|
|
63
|
+
serializer?: Public<RPCSerializer>;
|
|
64
|
+
/**
|
|
65
|
+
* Resolve HTTP status for encoded successful outputs.
|
|
66
|
+
*
|
|
67
|
+
* Value should be in the `2xx` range and must be less than `400`.
|
|
68
|
+
* Return `undefined` or `null` to fallback to default
|
|
69
|
+
*
|
|
70
|
+
* @default DEFAULT_SUCCESS_STATUS (200)
|
|
71
|
+
*/
|
|
72
|
+
outputStatus?: Value<number | undefined | null, [output: unknown, procedure: AnyProcedure, path: string[], options: ResolvedStandardHandlerHandleOptions<T>]>;
|
|
73
|
+
/**
|
|
74
|
+
* Mapping ORPCError Code -> HTTP Status Code
|
|
75
|
+
* The status code should be in the `4xx` or `5xx` range (must be greater than or equal to `400`).
|
|
76
|
+
*
|
|
77
|
+
* @default COMMON_ERROR_STATUS_MAP
|
|
78
|
+
*/
|
|
79
|
+
errorStatusMap?: Record<string, number> | undefined;
|
|
80
|
+
}
|
|
81
|
+
declare class RPCHandlerCodec<T extends Context> implements StandardHandlerCodec<T> {
|
|
82
|
+
private readonly matcher;
|
|
83
|
+
private readonly serializer;
|
|
84
|
+
private readonly errorStatusMap;
|
|
85
|
+
private readonly outputStatus;
|
|
86
|
+
constructor(router: AnyRouter, options?: RPCHandlerCodecOptions<T>);
|
|
87
|
+
resolveProcedure(request: StandardLazyRequest, options: ResolvedStandardHandlerHandleOptions<T>): Promise<StandardHandlerCodecResolvedProcedure | undefined>;
|
|
88
|
+
encodeOutput(output: unknown, procedure: AnyProcedure, path: string[], options: ResolvedStandardHandlerHandleOptions<T>): Promisable<StandardResponse>;
|
|
89
|
+
encodeError(error: AnyORPCError, _procedure: AnyProcedure, _path: string[], _options: ResolvedStandardHandlerHandleOptions<T>): Promisable<StandardResponse>;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export { RPCHandlerCodec, RPCMatcher, RPC_DEFAULT_ALLOW_METHODS, ResolvedStandardHandlerHandleOptions, StandardHandlerCodec, StandardHandlerCodecResolvedProcedure };
|
|
93
|
+
export type { RPCHandlerCodecOptions, RPCMatcherOptions };
|
|
@@ -1,19 +1,93 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { C as CompositeStandardHandlerPlugin,
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import '
|
|
7
|
-
import '
|
|
8
|
-
import '@orpc/contract';
|
|
9
|
-
|
|
1
|
+
import { R as ResolvedStandardHandlerHandleOptions, f as StandardHandlerCodec, g as StandardHandlerCodecResolvedProcedure } from '../../shared/server.Cxranw-8.js';
|
|
2
|
+
export { C as CompositeStandardHandlerPlugin, S as StandardHandler, a as StandardHandlerHandleOptions, h as StandardHandlerHandleResult, i as StandardHandlerInterceptor, e as StandardHandlerInterceptorOptions, c as StandardHandlerOptions, b as StandardHandlerPlugin, j as StandardHandlerRoutingInterceptor, d as StandardHandlerRoutingInterceptorOptions, T as TracingHandlerPlugin } from '../../shared/server.Cxranw-8.js';
|
|
3
|
+
import { RPCSerializer, AnyORPCError } from '@orpc/client';
|
|
4
|
+
import { Value, Public, Promisable } from '@orpc/shared';
|
|
5
|
+
import { StandardMethod, StandardLazyRequest, StandardResponse } from '@standard-server/core';
|
|
6
|
+
import { AnyProcedure, Context } from '../../index.js';
|
|
7
|
+
import { AnyRouter } from '../../index.js';
|
|
8
|
+
import { AnyProcedureContract } from '@orpc/contract';
|
|
9
|
+
export { F as FriendlyStandardHandlerHandleOptions, r as resolveFriendlyStandardHandlerHandleOptions } from '../../shared/server.RRVK1xTV.js';
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Methods that can invoke procedures by default. Browsers cannot trigger them
|
|
13
|
+
* cross-site without a CORS preflight or an HTML form, unlike `GET`, which a plain
|
|
14
|
+
* `<a>` click or redirect can trigger with `SameSite=Lax` cookies attached. Other
|
|
15
|
+
* methods (`HEAD`, `OPTIONS`, `QUERY`, ...) have safe semantics that should not
|
|
16
|
+
* invoke a procedure that can modify data.
|
|
17
|
+
*
|
|
18
|
+
* @see {@link https://orpc.dev/docs/rpc/handler#supported-http-methods | RPC Handler - Supported HTTP Methods}
|
|
19
|
+
*/
|
|
20
|
+
declare const RPC_DEFAULT_ALLOW_METHODS: readonly StandardMethod[];
|
|
21
|
+
interface RPCMatcherOptions {
|
|
22
|
+
/**
|
|
23
|
+
* Filter which procedures are exposed for matching. Return `false` to exclude.
|
|
24
|
+
*
|
|
25
|
+
* @default true
|
|
26
|
+
*/
|
|
27
|
+
filter?: Value<boolean, [procedure: AnyProcedureContract | AnyProcedure, path: string[]]>;
|
|
28
|
+
/**
|
|
29
|
+
* Restricts which HTTP methods can invoke procedures, either with a list of allowed
|
|
30
|
+
* methods or decided per request via a function. Requests using a disallowed method
|
|
31
|
+
* are treated as unmatched. `GET` is excluded by default because it is exposed to
|
|
32
|
+
* Cross-Site Request Forgery (CSRF) attacks.
|
|
33
|
+
*
|
|
34
|
+
* @default RPC_DEFAULT_ALLOW_METHODS (['POST', 'PUT', 'PATCH', 'DELETE'])
|
|
35
|
+
* @see {@link https://orpc.dev/docs/rpc/handler#supported-http-methods | RPC Handler - Supported HTTP Methods}
|
|
36
|
+
*/
|
|
37
|
+
allowMethods?: readonly StandardMethod[] | ((method: StandardMethod, procedure: AnyProcedure, path: string[]) => boolean);
|
|
38
|
+
}
|
|
39
|
+
declare class RPCMatcher {
|
|
40
|
+
private readonly filter;
|
|
41
|
+
private readonly allowMethodsSet;
|
|
42
|
+
private readonly allowMethodsFn;
|
|
43
|
+
private readonly rootRouter;
|
|
44
|
+
private readonly tree;
|
|
45
|
+
private readonly pendingLazyRouters;
|
|
46
|
+
constructor(router: AnyRouter, options?: RPCMatcherOptions);
|
|
47
|
+
private index;
|
|
48
|
+
match(method: StandardMethod, pathname: `/${string}`, prefix: `/${string}` | undefined): Promise<{
|
|
49
|
+
path: string[];
|
|
50
|
+
procedure: AnyProcedure;
|
|
51
|
+
} | undefined>;
|
|
52
|
+
private resolvePendingLazyRouters;
|
|
53
|
+
private loadPendingLazyRouters;
|
|
54
|
+
private loadPendingLazyRouter;
|
|
55
|
+
private indexPendingLazyRouter;
|
|
56
|
+
private resolveProcedure;
|
|
57
|
+
}
|
|
17
58
|
|
|
18
|
-
|
|
19
|
-
|
|
59
|
+
interface RPCHandlerCodecOptions<T extends Context> extends RPCMatcherOptions {
|
|
60
|
+
/**
|
|
61
|
+
* Override the default RPC serializer.
|
|
62
|
+
*/
|
|
63
|
+
serializer?: Public<RPCSerializer>;
|
|
64
|
+
/**
|
|
65
|
+
* Resolve HTTP status for encoded successful outputs.
|
|
66
|
+
*
|
|
67
|
+
* Value should be in the `2xx` range and must be less than `400`.
|
|
68
|
+
* Return `undefined` or `null` to fallback to default
|
|
69
|
+
*
|
|
70
|
+
* @default DEFAULT_SUCCESS_STATUS (200)
|
|
71
|
+
*/
|
|
72
|
+
outputStatus?: Value<number | undefined | null, [output: unknown, procedure: AnyProcedure, path: string[], options: ResolvedStandardHandlerHandleOptions<T>]>;
|
|
73
|
+
/**
|
|
74
|
+
* Mapping ORPCError Code -> HTTP Status Code
|
|
75
|
+
* The status code should be in the `4xx` or `5xx` range (must be greater than or equal to `400`).
|
|
76
|
+
*
|
|
77
|
+
* @default COMMON_ERROR_STATUS_MAP
|
|
78
|
+
*/
|
|
79
|
+
errorStatusMap?: Record<string, number> | undefined;
|
|
80
|
+
}
|
|
81
|
+
declare class RPCHandlerCodec<T extends Context> implements StandardHandlerCodec<T> {
|
|
82
|
+
private readonly matcher;
|
|
83
|
+
private readonly serializer;
|
|
84
|
+
private readonly errorStatusMap;
|
|
85
|
+
private readonly outputStatus;
|
|
86
|
+
constructor(router: AnyRouter, options?: RPCHandlerCodecOptions<T>);
|
|
87
|
+
resolveProcedure(request: StandardLazyRequest, options: ResolvedStandardHandlerHandleOptions<T>): Promise<StandardHandlerCodecResolvedProcedure | undefined>;
|
|
88
|
+
encodeOutput(output: unknown, procedure: AnyProcedure, path: string[], options: ResolvedStandardHandlerHandleOptions<T>): Promisable<StandardResponse>;
|
|
89
|
+
encodeError(error: AnyORPCError, _procedure: AnyProcedure, _path: string[], _options: ResolvedStandardHandlerHandleOptions<T>): Promisable<StandardResponse>;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export { RPCHandlerCodec, RPCMatcher, RPC_DEFAULT_ALLOW_METHODS, ResolvedStandardHandlerHandleOptions, StandardHandlerCodec, StandardHandlerCodecResolvedProcedure };
|
|
93
|
+
export type { RPCHandlerCodecOptions, RPCMatcherOptions };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { C as CompositeStandardHandlerPlugin,
|
|
1
|
+
export { C as CompositeStandardHandlerPlugin, R as RPCHandlerCodec, a as RPCMatcher, b as RPC_DEFAULT_ALLOW_METHODS, S as StandardHandler, T as TracingHandlerPlugin } from '../../shared/server.C0lFtoHU.mjs';
|
|
2
2
|
export { r as resolveFriendlyStandardHandlerHandleOptions } from '../../shared/server.W91HSRkE.mjs';
|
|
3
3
|
import '@orpc/client';
|
|
4
4
|
import '@orpc/shared';
|
|
5
|
-
import '@
|
|
6
|
-
import '../../shared/server.
|
|
5
|
+
import '@standard-server/core';
|
|
6
|
+
import '../../shared/server.Djb_ebJT.mjs';
|
|
7
7
|
import '@orpc/contract';
|
|
8
|
-
import '../../shared/server.
|
|
8
|
+
import '../../shared/server.BynNaBBA.mjs';
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { StandardLazyRequest, StandardResponse } from '@standard-server/core';
|
|
2
|
+
import { Context } from '../../index.mjs';
|
|
3
|
+
import { StandardHandler } from '../standard/index.mjs';
|
|
4
|
+
import { FriendlyStandardHandlerHandleOptions } from '../standard/index.mjs';
|
|
5
5
|
import '@orpc/client';
|
|
6
6
|
import '@orpc/contract';
|
|
7
|
+
import '@orpc/shared';
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
context?: Value<Promisable<T>, [request: StandardLazyRequest]>;
|
|
10
|
-
} : {
|
|
11
|
-
context: Value<Promisable<T>, [request: StandardLazyRequest]>;
|
|
12
|
-
});
|
|
13
|
-
declare function createStandardPeerRequestHandler<T extends Context>(handler: StandardHandler<T>, options: StandardPeerRequestHandlerOptions<T>): (request: StandardLazyRequest) => Promise<StandardResponse>;
|
|
9
|
+
declare function createStandardPeerRequestHandler<T extends Context>(handler: StandardHandler<T>, options: FriendlyStandardHandlerHandleOptions<T>): (request: StandardLazyRequest) => Promise<StandardResponse>;
|
|
14
10
|
|
|
15
11
|
export { createStandardPeerRequestHandler };
|
|
16
|
-
export type { StandardPeerRequestHandlerOptions };
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { StandardLazyRequest, StandardResponse } from '@standard-server/core';
|
|
2
|
+
import { Context } from '../../index.js';
|
|
3
|
+
import { StandardHandler } from '../standard/index.js';
|
|
4
|
+
import { FriendlyStandardHandlerHandleOptions } from '../standard/index.js';
|
|
5
5
|
import '@orpc/client';
|
|
6
6
|
import '@orpc/contract';
|
|
7
|
+
import '@orpc/shared';
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
context?: Value<Promisable<T>, [request: StandardLazyRequest]>;
|
|
10
|
-
} : {
|
|
11
|
-
context: Value<Promisable<T>, [request: StandardLazyRequest]>;
|
|
12
|
-
});
|
|
13
|
-
declare function createStandardPeerRequestHandler<T extends Context>(handler: StandardHandler<T>, options: StandardPeerRequestHandlerOptions<T>): (request: StandardLazyRequest) => Promise<StandardResponse>;
|
|
9
|
+
declare function createStandardPeerRequestHandler<T extends Context>(handler: StandardHandler<T>, options: FriendlyStandardHandlerHandleOptions<T>): (request: StandardLazyRequest) => Promise<StandardResponse>;
|
|
14
10
|
|
|
15
11
|
export { createStandardPeerRequestHandler };
|
|
16
|
-
export type { StandardPeerRequestHandlerOptions };
|
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { r as resolveFriendlyStandardHandlerHandleOptions } from '../../shared/server.W91HSRkE.mjs';
|
|
2
|
+
|
|
3
|
+
function createStandardPeerRequestHandler(handler, options) {
|
|
4
|
+
return async (request) => {
|
|
5
|
+
const { response } = await handler.handle(request, resolveFriendlyStandardHandlerHandleOptions(options));
|
|
6
|
+
return response ?? { status: 404, headers: {}, body: "No procedure matched" };
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { createStandardPeerRequestHandler };
|