@orpc/client 0.0.0-next.c788572 → 0.0.0-next.c854c60
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 +4 -5
- package/dist/adapters/fetch/index.d.mts +3 -3
- package/dist/adapters/fetch/index.d.ts +3 -3
- package/dist/adapters/fetch/index.mjs +2 -2
- package/dist/adapters/message-port/index.d.mts +59 -0
- package/dist/adapters/message-port/index.d.ts +59 -0
- package/dist/adapters/message-port/index.mjs +71 -0
- package/dist/adapters/standard/index.d.mts +3 -3
- package/dist/adapters/standard/index.d.ts +3 -3
- package/dist/adapters/standard/index.mjs +2 -2
- package/dist/adapters/websocket/index.d.mts +29 -0
- package/dist/adapters/websocket/index.d.ts +29 -0
- package/dist/adapters/websocket/index.mjs +44 -0
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.mjs +4 -4
- package/dist/plugins/index.d.mts +58 -18
- package/dist/plugins/index.d.ts +58 -18
- package/dist/plugins/index.mjs +104 -6
- package/dist/shared/{client.CipPQkhk.d.mts → client.4TS_0JaO.d.mts} +1 -1
- package/dist/shared/{client.CipPQkhk.d.ts → client.4TS_0JaO.d.ts} +1 -1
- package/dist/shared/{client.8TjrVhkC.d.ts → client.7UM0t5o-.d.ts} +8 -8
- package/dist/shared/{client.C9U9n1f3.d.ts → client.BMoG_EdN.d.mts} +4 -4
- package/dist/shared/{client.CRWEpqLB.mjs → client.BX0_8bnM.mjs} +13 -16
- package/dist/shared/{client.BjJBZryq.d.mts → client.BdD8cpjs.d.mts} +8 -8
- package/dist/shared/{client.FXep-a3a.d.mts → client.C0KbSWlC.d.ts} +4 -4
- package/dist/shared/{client.DpICn1BD.mjs → client.CQCGVpTM.mjs} +1 -1
- package/package.json +16 -5
package/README.md
CHANGED
@@ -49,13 +49,12 @@ You can find the full documentation [here](https://orpc.unnoq.com).
|
|
49
49
|
- [@orpc/contract](https://www.npmjs.com/package/@orpc/contract): Build your API contract.
|
50
50
|
- [@orpc/server](https://www.npmjs.com/package/@orpc/server): Build your API or implement API contract.
|
51
51
|
- [@orpc/client](https://www.npmjs.com/package/@orpc/client): Consume your API on the client with type-safety.
|
52
|
+
- [@orpc/openapi](https://www.npmjs.com/package/@orpc/openapi): Generate OpenAPI specs and handle OpenAPI requests.
|
53
|
+
- [@orpc/nest](https://www.npmjs.com/package/@orpc/nest): Deeply integrate oRPC with [NestJS](https://nestjs.com/).
|
52
54
|
- [@orpc/react](https://www.npmjs.com/package/@orpc/react): Utilities for integrating oRPC with React and React Server Actions.
|
53
|
-
- [@orpc/
|
54
|
-
- [@orpc/vue-query](https://www.npmjs.com/package/@orpc/vue-query): Integration with [Vue Query](https://tanstack.com/query/latest/docs/framework/vue/overview).
|
55
|
-
- [@orpc/solid-query](https://www.npmjs.com/package/@orpc/solid-query): Integration with [Solid Query](https://tanstack.com/query/latest/docs/framework/solid/overview).
|
56
|
-
- [@orpc/svelte-query](https://www.npmjs.com/package/@orpc/svelte-query): Integration with [Svelte Query](https://tanstack.com/query/latest/docs/framework/svelte/overview).
|
55
|
+
- [@orpc/tanstack-query](https://www.npmjs.com/package/@orpc/tanstack-query): [TanStack Query](https://tanstack.com/query/latest) integration.
|
57
56
|
- [@orpc/vue-colada](https://www.npmjs.com/package/@orpc/vue-colada): Integration with [Pinia Colada](https://pinia-colada.esm.dev/).
|
58
|
-
- [@orpc/
|
57
|
+
- [@orpc/hey-api](https://www.npmjs.com/package/@orpc/hey-api): [Hey API](https://heyapi.dev/) integration.
|
59
58
|
- [@orpc/zod](https://www.npmjs.com/package/@orpc/zod): More schemas that [Zod](https://zod.dev/) doesn't support yet.
|
60
59
|
- [@orpc/valibot](https://www.npmjs.com/package/@orpc/valibot): OpenAPI spec generation from [Valibot](https://valibot.dev/).
|
61
60
|
- [@orpc/arktype](https://www.npmjs.com/package/@orpc/arktype): OpenAPI spec generation from [ArkType](https://arktype.io/).
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
|
2
2
|
import { ToFetchRequestOptions } from '@orpc/standard-server-fetch';
|
3
|
-
import { a as ClientContext, b as ClientOptions } from '../../shared/client.
|
4
|
-
import { f as StandardLinkClient } from '../../shared/client.
|
5
|
-
import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.
|
3
|
+
import { a as ClientContext, b as ClientOptions } from '../../shared/client.4TS_0JaO.mjs';
|
4
|
+
import { f as StandardLinkClient } from '../../shared/client.BMoG_EdN.mjs';
|
5
|
+
import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.BdD8cpjs.mjs';
|
6
6
|
import '@orpc/shared';
|
7
7
|
|
8
8
|
interface LinkFetchClientOptions<T extends ClientContext> extends ToFetchRequestOptions {
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
|
2
2
|
import { ToFetchRequestOptions } from '@orpc/standard-server-fetch';
|
3
|
-
import { a as ClientContext, b as ClientOptions } from '../../shared/client.
|
4
|
-
import { f as StandardLinkClient } from '../../shared/client.
|
5
|
-
import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.
|
3
|
+
import { a as ClientContext, b as ClientOptions } from '../../shared/client.4TS_0JaO.js';
|
4
|
+
import { f as StandardLinkClient } from '../../shared/client.C0KbSWlC.js';
|
5
|
+
import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.7UM0t5o-.js';
|
6
6
|
import '@orpc/shared';
|
7
7
|
|
8
8
|
interface LinkFetchClientOptions<T extends ClientContext> extends ToFetchRequestOptions {
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { toFetchRequest, toStandardLazyResponse } from '@orpc/standard-server-fetch';
|
2
2
|
import '@orpc/shared';
|
3
|
-
import { c as StandardRPCLink } from '../../shared/client.
|
3
|
+
import { c as StandardRPCLink } from '../../shared/client.CQCGVpTM.mjs';
|
4
4
|
import '@orpc/standard-server';
|
5
|
-
import '../../shared/client.
|
5
|
+
import '../../shared/client.BX0_8bnM.mjs';
|
6
6
|
|
7
7
|
class LinkFetchClient {
|
8
8
|
fetch;
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
|
2
|
+
import { a as ClientContext, b as ClientOptions } from '../../shared/client.4TS_0JaO.mjs';
|
3
|
+
import { f as StandardLinkClient } from '../../shared/client.BMoG_EdN.mjs';
|
4
|
+
import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.BdD8cpjs.mjs';
|
5
|
+
import '@orpc/shared';
|
6
|
+
|
7
|
+
/**
|
8
|
+
* The message port used by electron in main process
|
9
|
+
*/
|
10
|
+
interface MessagePortMainLike {
|
11
|
+
on: <T extends string>(event: T, callback: (event?: {
|
12
|
+
data: any;
|
13
|
+
}) => void) => void;
|
14
|
+
postMessage: (data: any) => void;
|
15
|
+
}
|
16
|
+
/**
|
17
|
+
* The message port used by browser extension
|
18
|
+
*/
|
19
|
+
interface BrowserPortLike {
|
20
|
+
onMessage: {
|
21
|
+
addListener: (callback: (data: any) => void) => void;
|
22
|
+
};
|
23
|
+
onDisconnect: {
|
24
|
+
addListener: (callback: () => void) => void;
|
25
|
+
};
|
26
|
+
postMessage: (data: any) => void;
|
27
|
+
}
|
28
|
+
type SupportedMessagePort = Pick<MessagePort, 'addEventListener' | 'postMessage'> | MessagePortMainLike | BrowserPortLike;
|
29
|
+
/**
|
30
|
+
* Message port can support [The structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)
|
31
|
+
*/
|
32
|
+
type SupportedMessagePortData = string | ArrayBufferLike;
|
33
|
+
declare function postMessagePortMessage(port: SupportedMessagePort, data: SupportedMessagePortData): void;
|
34
|
+
declare function onMessagePortMessage(port: SupportedMessagePort, callback: (data: SupportedMessagePortData) => void): void;
|
35
|
+
declare function onMessagePortClose(port: SupportedMessagePort, callback: () => void): void;
|
36
|
+
|
37
|
+
interface experimental_LinkMessagePortClientOptions {
|
38
|
+
port: SupportedMessagePort;
|
39
|
+
}
|
40
|
+
declare class experimental_LinkMessagePortClient<T extends ClientContext> implements StandardLinkClient<T> {
|
41
|
+
private readonly peer;
|
42
|
+
constructor(options: experimental_LinkMessagePortClientOptions);
|
43
|
+
call(request: StandardRequest, _options: ClientOptions<T>, _path: readonly string[], _input: unknown): Promise<StandardLazyResponse>;
|
44
|
+
}
|
45
|
+
|
46
|
+
interface experimental_RPCLinkOptions<T extends ClientContext> extends Omit<StandardRPCLinkOptions<T>, 'url' | 'headers' | 'method' | 'fallbackMethod' | 'maxUrlLength'>, experimental_LinkMessagePortClientOptions {
|
47
|
+
}
|
48
|
+
/**
|
49
|
+
* The RPC Link for common message port implementations.
|
50
|
+
*
|
51
|
+
* @see {@link https://orpc.unnoq.com/docs/client/rpc-link RPC Link Docs}
|
52
|
+
* @see {@link https://orpc.unnoq.com/docs/adapters/message-port Message Port Adapter Docs}
|
53
|
+
*/
|
54
|
+
declare class experimental_RPCLink<T extends ClientContext> extends StandardRPCLink<T> {
|
55
|
+
constructor(options: experimental_RPCLinkOptions<T>);
|
56
|
+
}
|
57
|
+
|
58
|
+
export { experimental_LinkMessagePortClient, experimental_RPCLink, onMessagePortClose, onMessagePortMessage, postMessagePortMessage };
|
59
|
+
export type { BrowserPortLike, MessagePortMainLike, SupportedMessagePort, SupportedMessagePortData, experimental_LinkMessagePortClientOptions, experimental_RPCLinkOptions };
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
|
2
|
+
import { a as ClientContext, b as ClientOptions } from '../../shared/client.4TS_0JaO.js';
|
3
|
+
import { f as StandardLinkClient } from '../../shared/client.C0KbSWlC.js';
|
4
|
+
import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.7UM0t5o-.js';
|
5
|
+
import '@orpc/shared';
|
6
|
+
|
7
|
+
/**
|
8
|
+
* The message port used by electron in main process
|
9
|
+
*/
|
10
|
+
interface MessagePortMainLike {
|
11
|
+
on: <T extends string>(event: T, callback: (event?: {
|
12
|
+
data: any;
|
13
|
+
}) => void) => void;
|
14
|
+
postMessage: (data: any) => void;
|
15
|
+
}
|
16
|
+
/**
|
17
|
+
* The message port used by browser extension
|
18
|
+
*/
|
19
|
+
interface BrowserPortLike {
|
20
|
+
onMessage: {
|
21
|
+
addListener: (callback: (data: any) => void) => void;
|
22
|
+
};
|
23
|
+
onDisconnect: {
|
24
|
+
addListener: (callback: () => void) => void;
|
25
|
+
};
|
26
|
+
postMessage: (data: any) => void;
|
27
|
+
}
|
28
|
+
type SupportedMessagePort = Pick<MessagePort, 'addEventListener' | 'postMessage'> | MessagePortMainLike | BrowserPortLike;
|
29
|
+
/**
|
30
|
+
* Message port can support [The structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)
|
31
|
+
*/
|
32
|
+
type SupportedMessagePortData = string | ArrayBufferLike;
|
33
|
+
declare function postMessagePortMessage(port: SupportedMessagePort, data: SupportedMessagePortData): void;
|
34
|
+
declare function onMessagePortMessage(port: SupportedMessagePort, callback: (data: SupportedMessagePortData) => void): void;
|
35
|
+
declare function onMessagePortClose(port: SupportedMessagePort, callback: () => void): void;
|
36
|
+
|
37
|
+
interface experimental_LinkMessagePortClientOptions {
|
38
|
+
port: SupportedMessagePort;
|
39
|
+
}
|
40
|
+
declare class experimental_LinkMessagePortClient<T extends ClientContext> implements StandardLinkClient<T> {
|
41
|
+
private readonly peer;
|
42
|
+
constructor(options: experimental_LinkMessagePortClientOptions);
|
43
|
+
call(request: StandardRequest, _options: ClientOptions<T>, _path: readonly string[], _input: unknown): Promise<StandardLazyResponse>;
|
44
|
+
}
|
45
|
+
|
46
|
+
interface experimental_RPCLinkOptions<T extends ClientContext> extends Omit<StandardRPCLinkOptions<T>, 'url' | 'headers' | 'method' | 'fallbackMethod' | 'maxUrlLength'>, experimental_LinkMessagePortClientOptions {
|
47
|
+
}
|
48
|
+
/**
|
49
|
+
* The RPC Link for common message port implementations.
|
50
|
+
*
|
51
|
+
* @see {@link https://orpc.unnoq.com/docs/client/rpc-link RPC Link Docs}
|
52
|
+
* @see {@link https://orpc.unnoq.com/docs/adapters/message-port Message Port Adapter Docs}
|
53
|
+
*/
|
54
|
+
declare class experimental_RPCLink<T extends ClientContext> extends StandardRPCLink<T> {
|
55
|
+
constructor(options: experimental_RPCLinkOptions<T>);
|
56
|
+
}
|
57
|
+
|
58
|
+
export { experimental_LinkMessagePortClient, experimental_RPCLink, onMessagePortClose, onMessagePortMessage, postMessagePortMessage };
|
59
|
+
export type { BrowserPortLike, MessagePortMainLike, SupportedMessagePort, SupportedMessagePortData, experimental_LinkMessagePortClientOptions, experimental_RPCLinkOptions };
|
@@ -0,0 +1,71 @@
|
|
1
|
+
import { ClientPeer } from '@orpc/standard-server-peer';
|
2
|
+
import '@orpc/shared';
|
3
|
+
import { c as StandardRPCLink } from '../../shared/client.CQCGVpTM.mjs';
|
4
|
+
import '@orpc/standard-server';
|
5
|
+
import '../../shared/client.BX0_8bnM.mjs';
|
6
|
+
|
7
|
+
function postMessagePortMessage(port, data) {
|
8
|
+
port.postMessage(data);
|
9
|
+
}
|
10
|
+
function onMessagePortMessage(port, callback) {
|
11
|
+
if ("addEventListener" in port) {
|
12
|
+
port.addEventListener("message", (event) => {
|
13
|
+
callback(event.data);
|
14
|
+
});
|
15
|
+
} else if ("on" in port) {
|
16
|
+
port.on("message", (event) => {
|
17
|
+
callback(event?.data);
|
18
|
+
});
|
19
|
+
} else if ("onMessage" in port) {
|
20
|
+
port.onMessage.addListener((data) => {
|
21
|
+
callback(data);
|
22
|
+
});
|
23
|
+
} else {
|
24
|
+
throw new Error("Cannot find a addEventListener/on/onMessage method on the port");
|
25
|
+
}
|
26
|
+
}
|
27
|
+
function onMessagePortClose(port, callback) {
|
28
|
+
if ("addEventListener" in port) {
|
29
|
+
port.addEventListener("close", async () => {
|
30
|
+
callback();
|
31
|
+
});
|
32
|
+
} else if ("on" in port) {
|
33
|
+
port.on("close", async () => {
|
34
|
+
callback();
|
35
|
+
});
|
36
|
+
} else if ("onDisconnect" in port) {
|
37
|
+
port.onDisconnect.addListener(() => {
|
38
|
+
callback();
|
39
|
+
});
|
40
|
+
} else {
|
41
|
+
throw new Error("Cannot find a addEventListener/on/onDisconnect method on the port");
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
class experimental_LinkMessagePortClient {
|
46
|
+
peer;
|
47
|
+
constructor(options) {
|
48
|
+
this.peer = new ClientPeer((message) => {
|
49
|
+
return postMessagePortMessage(options.port, message);
|
50
|
+
});
|
51
|
+
onMessagePortMessage(options.port, async (message) => {
|
52
|
+
await this.peer.message(message);
|
53
|
+
});
|
54
|
+
onMessagePortClose(options.port, () => {
|
55
|
+
this.peer.close();
|
56
|
+
});
|
57
|
+
}
|
58
|
+
async call(request, _options, _path, _input) {
|
59
|
+
const response = await this.peer.request(request);
|
60
|
+
return { ...response, body: () => Promise.resolve(response.body) };
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
class experimental_RPCLink extends StandardRPCLink {
|
65
|
+
constructor(options) {
|
66
|
+
const linkClient = new experimental_LinkMessagePortClient(options);
|
67
|
+
super(linkClient, { ...options, url: "orpc:/" });
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
export { experimental_LinkMessagePortClient, experimental_RPCLink, onMessagePortClose, onMessagePortMessage, postMessagePortMessage };
|
@@ -1,6 +1,6 @@
|
|
1
|
-
export { C as CompositeStandardLinkPlugin, d as StandardLink, f as StandardLinkClient, S as StandardLinkClientInterceptorOptions, e as StandardLinkCodec, c as StandardLinkInterceptorOptions, b as StandardLinkOptions, a as StandardLinkPlugin } from '../../shared/client.
|
2
|
-
export { S as STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES, c as StandardRPCCustomJsonSerializer, b as StandardRPCJsonSerialized, a as StandardRPCJsonSerializedMetaItem, e as StandardRPCJsonSerializer, d as StandardRPCJsonSerializerOptions, g as StandardRPCLink, i as StandardRPCLinkCodec, h as StandardRPCLinkCodecOptions, f as StandardRPCLinkOptions, j as StandardRPCSerializer } from '../../shared/client.
|
3
|
-
import { H as HTTPPath } from '../../shared/client.
|
1
|
+
export { C as CompositeStandardLinkPlugin, d as StandardLink, f as StandardLinkClient, S as StandardLinkClientInterceptorOptions, e as StandardLinkCodec, c as StandardLinkInterceptorOptions, b as StandardLinkOptions, a as StandardLinkPlugin } from '../../shared/client.BMoG_EdN.mjs';
|
2
|
+
export { S as STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES, c as StandardRPCCustomJsonSerializer, b as StandardRPCJsonSerialized, a as StandardRPCJsonSerializedMetaItem, e as StandardRPCJsonSerializer, d as StandardRPCJsonSerializerOptions, g as StandardRPCLink, i as StandardRPCLinkCodec, h as StandardRPCLinkCodecOptions, f as StandardRPCLinkOptions, j as StandardRPCSerializer } from '../../shared/client.BdD8cpjs.mjs';
|
3
|
+
import { H as HTTPPath } from '../../shared/client.4TS_0JaO.mjs';
|
4
4
|
import '@orpc/shared';
|
5
5
|
import '@orpc/standard-server';
|
6
6
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
export { C as CompositeStandardLinkPlugin, d as StandardLink, f as StandardLinkClient, S as StandardLinkClientInterceptorOptions, e as StandardLinkCodec, c as StandardLinkInterceptorOptions, b as StandardLinkOptions, a as StandardLinkPlugin } from '../../shared/client.
|
2
|
-
export { S as STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES, c as StandardRPCCustomJsonSerializer, b as StandardRPCJsonSerialized, a as StandardRPCJsonSerializedMetaItem, e as StandardRPCJsonSerializer, d as StandardRPCJsonSerializerOptions, g as StandardRPCLink, i as StandardRPCLinkCodec, h as StandardRPCLinkCodecOptions, f as StandardRPCLinkOptions, j as StandardRPCSerializer } from '../../shared/client.
|
3
|
-
import { H as HTTPPath } from '../../shared/client.
|
1
|
+
export { C as CompositeStandardLinkPlugin, d as StandardLink, f as StandardLinkClient, S as StandardLinkClientInterceptorOptions, e as StandardLinkCodec, c as StandardLinkInterceptorOptions, b as StandardLinkOptions, a as StandardLinkPlugin } from '../../shared/client.C0KbSWlC.js';
|
2
|
+
export { S as STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES, c as StandardRPCCustomJsonSerializer, b as StandardRPCJsonSerialized, a as StandardRPCJsonSerializedMetaItem, e as StandardRPCJsonSerializer, d as StandardRPCJsonSerializerOptions, g as StandardRPCLink, i as StandardRPCLinkCodec, h as StandardRPCLinkCodecOptions, f as StandardRPCLinkOptions, j as StandardRPCSerializer } from '../../shared/client.7UM0t5o-.js';
|
3
|
+
import { H as HTTPPath } from '../../shared/client.4TS_0JaO.js';
|
4
4
|
import '@orpc/shared';
|
5
5
|
import '@orpc/standard-server';
|
6
6
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
export { C as CompositeStandardLinkPlugin, a as STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES, S as StandardLink, b as StandardRPCJsonSerializer, c as StandardRPCLink, d as StandardRPCLinkCodec, e as StandardRPCSerializer, g as getMalformedResponseErrorCode, t as toHttpPath } from '../../shared/client.
|
1
|
+
export { C as CompositeStandardLinkPlugin, a as STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES, S as StandardLink, b as StandardRPCJsonSerializer, c as StandardRPCLink, d as StandardRPCLinkCodec, e as StandardRPCSerializer, g as getMalformedResponseErrorCode, t as toHttpPath } from '../../shared/client.CQCGVpTM.mjs';
|
2
2
|
import '@orpc/shared';
|
3
3
|
import '@orpc/standard-server';
|
4
|
-
import '../../shared/client.
|
4
|
+
import '../../shared/client.BX0_8bnM.mjs';
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
|
2
|
+
import { a as ClientContext, b as ClientOptions } from '../../shared/client.4TS_0JaO.mjs';
|
3
|
+
import { f as StandardLinkClient } from '../../shared/client.BMoG_EdN.mjs';
|
4
|
+
import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.BdD8cpjs.mjs';
|
5
|
+
import '@orpc/shared';
|
6
|
+
|
7
|
+
interface experimental_LinkWebsocketClientOptions {
|
8
|
+
websocket: Pick<WebSocket, 'addEventListener' | 'send' | 'readyState'>;
|
9
|
+
}
|
10
|
+
declare class experimental_LinkWebsocketClient<T extends ClientContext> implements StandardLinkClient<T> {
|
11
|
+
private readonly peer;
|
12
|
+
constructor(options: experimental_LinkWebsocketClientOptions);
|
13
|
+
call(request: StandardRequest, _options: ClientOptions<T>, _path: readonly string[], _input: unknown): Promise<StandardLazyResponse>;
|
14
|
+
}
|
15
|
+
|
16
|
+
interface experimental_RPCLinkOptions<T extends ClientContext> extends Omit<StandardRPCLinkOptions<T>, 'url' | 'headers' | 'method' | 'fallbackMethod' | 'maxUrlLength'>, experimental_LinkWebsocketClientOptions {
|
17
|
+
}
|
18
|
+
/**
|
19
|
+
* The RPC Link communicates with the server using the RPC protocol over WebSocket.
|
20
|
+
*
|
21
|
+
* @see {@link https://orpc.unnoq.com/docs/client/rpc-link RPC Link Docs}
|
22
|
+
* @see {@link https://orpc.unnoq.com/docs/adapters/websocket WebSocket Adapter Docs}
|
23
|
+
*/
|
24
|
+
declare class experimental_RPCLink<T extends ClientContext> extends StandardRPCLink<T> {
|
25
|
+
constructor(options: experimental_RPCLinkOptions<T>);
|
26
|
+
}
|
27
|
+
|
28
|
+
export { experimental_LinkWebsocketClient, experimental_RPCLink };
|
29
|
+
export type { experimental_LinkWebsocketClientOptions, experimental_RPCLinkOptions };
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
|
2
|
+
import { a as ClientContext, b as ClientOptions } from '../../shared/client.4TS_0JaO.js';
|
3
|
+
import { f as StandardLinkClient } from '../../shared/client.C0KbSWlC.js';
|
4
|
+
import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.7UM0t5o-.js';
|
5
|
+
import '@orpc/shared';
|
6
|
+
|
7
|
+
interface experimental_LinkWebsocketClientOptions {
|
8
|
+
websocket: Pick<WebSocket, 'addEventListener' | 'send' | 'readyState'>;
|
9
|
+
}
|
10
|
+
declare class experimental_LinkWebsocketClient<T extends ClientContext> implements StandardLinkClient<T> {
|
11
|
+
private readonly peer;
|
12
|
+
constructor(options: experimental_LinkWebsocketClientOptions);
|
13
|
+
call(request: StandardRequest, _options: ClientOptions<T>, _path: readonly string[], _input: unknown): Promise<StandardLazyResponse>;
|
14
|
+
}
|
15
|
+
|
16
|
+
interface experimental_RPCLinkOptions<T extends ClientContext> extends Omit<StandardRPCLinkOptions<T>, 'url' | 'headers' | 'method' | 'fallbackMethod' | 'maxUrlLength'>, experimental_LinkWebsocketClientOptions {
|
17
|
+
}
|
18
|
+
/**
|
19
|
+
* The RPC Link communicates with the server using the RPC protocol over WebSocket.
|
20
|
+
*
|
21
|
+
* @see {@link https://orpc.unnoq.com/docs/client/rpc-link RPC Link Docs}
|
22
|
+
* @see {@link https://orpc.unnoq.com/docs/adapters/websocket WebSocket Adapter Docs}
|
23
|
+
*/
|
24
|
+
declare class experimental_RPCLink<T extends ClientContext> extends StandardRPCLink<T> {
|
25
|
+
constructor(options: experimental_RPCLinkOptions<T>);
|
26
|
+
}
|
27
|
+
|
28
|
+
export { experimental_LinkWebsocketClient, experimental_RPCLink };
|
29
|
+
export type { experimental_LinkWebsocketClientOptions, experimental_RPCLinkOptions };
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { ClientPeer } from '@orpc/standard-server-peer';
|
2
|
+
import '@orpc/shared';
|
3
|
+
import { c as StandardRPCLink } from '../../shared/client.CQCGVpTM.mjs';
|
4
|
+
import '@orpc/standard-server';
|
5
|
+
import '../../shared/client.BX0_8bnM.mjs';
|
6
|
+
|
7
|
+
class experimental_LinkWebsocketClient {
|
8
|
+
peer;
|
9
|
+
constructor(options) {
|
10
|
+
const untilOpen = new Promise((resolve) => {
|
11
|
+
if (options.websocket.readyState === 0) {
|
12
|
+
options.websocket.addEventListener("open", () => {
|
13
|
+
resolve();
|
14
|
+
}, { once: true });
|
15
|
+
} else {
|
16
|
+
resolve();
|
17
|
+
}
|
18
|
+
});
|
19
|
+
this.peer = new ClientPeer(async (message) => {
|
20
|
+
await untilOpen;
|
21
|
+
return options.websocket.send(message);
|
22
|
+
});
|
23
|
+
options.websocket.addEventListener("message", async (event) => {
|
24
|
+
const message = event.data instanceof Blob ? await event.data.arrayBuffer() : event.data;
|
25
|
+
this.peer.message(message);
|
26
|
+
});
|
27
|
+
options.websocket.addEventListener("close", () => {
|
28
|
+
this.peer.close();
|
29
|
+
});
|
30
|
+
}
|
31
|
+
async call(request, _options, _path, _input) {
|
32
|
+
const response = await this.peer.request(request);
|
33
|
+
return { ...response, body: () => Promise.resolve(response.body) };
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
class experimental_RPCLink extends StandardRPCLink {
|
38
|
+
constructor(options) {
|
39
|
+
const linkClient = new experimental_LinkWebsocketClient(options);
|
40
|
+
super(linkClient, { ...options, url: "orpc:/" });
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
export { experimental_LinkWebsocketClient, experimental_RPCLink };
|
package/dist/index.d.mts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
import { N as NestedClient, C as ClientLink, I as InferClientContext, a as ClientContext, b as ClientOptions, c as ClientPromiseResult, F as FriendlyClientOptions } from './shared/client.
|
2
|
-
export { f as Client, e as ClientRest, d as HTTPMethod, H as HTTPPath } from './shared/client.
|
3
|
-
import { Promisable, MaybeOptionalOptions, ThrowableError } from '@orpc/shared';
|
4
|
-
export { Registry, ThrowableError, onError, onFinish, onStart, onSuccess } from '@orpc/shared';
|
1
|
+
import { N as NestedClient, C as ClientLink, I as InferClientContext, a as ClientContext, b as ClientOptions, c as ClientPromiseResult, F as FriendlyClientOptions } from './shared/client.4TS_0JaO.mjs';
|
2
|
+
export { f as Client, e as ClientRest, d as HTTPMethod, H as HTTPPath } from './shared/client.4TS_0JaO.mjs';
|
3
|
+
import { Promisable, MaybeOptionalOptions, AsyncIteratorClass, ThrowableError } from '@orpc/shared';
|
4
|
+
export { EventPublisher, EventPublisherOptions, EventPublisherSubscribeIteratorOptions, Registry, ThrowableError, onError, onFinish, onStart, onSuccess } from '@orpc/shared';
|
5
5
|
export { ErrorEvent } from '@orpc/standard-server';
|
6
6
|
|
7
7
|
interface createORPCClientOptions {
|
@@ -138,7 +138,7 @@ declare function createORPCErrorFromJson<TCode extends ORPCErrorCode, TData>(jso
|
|
138
138
|
declare function mapEventIterator<TYield, TReturn, TNext, TMap = TYield | TReturn>(iterator: AsyncIterator<TYield, TReturn, TNext>, maps: {
|
139
139
|
value: (value: NoInfer<TYield | TReturn>, done: boolean | undefined) => Promise<TMap>;
|
140
140
|
error: (error: unknown) => Promise<unknown>;
|
141
|
-
}):
|
141
|
+
}): AsyncIteratorClass<TMap, TMap, TNext>;
|
142
142
|
|
143
143
|
type SafeResult<TOutput, TError> = [error: null, data: TOutput, isDefined: false, isSuccess: true] & {
|
144
144
|
error: null;
|
package/dist/index.d.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
import { N as NestedClient, C as ClientLink, I as InferClientContext, a as ClientContext, b as ClientOptions, c as ClientPromiseResult, F as FriendlyClientOptions } from './shared/client.
|
2
|
-
export { f as Client, e as ClientRest, d as HTTPMethod, H as HTTPPath } from './shared/client.
|
3
|
-
import { Promisable, MaybeOptionalOptions, ThrowableError } from '@orpc/shared';
|
4
|
-
export { Registry, ThrowableError, onError, onFinish, onStart, onSuccess } from '@orpc/shared';
|
1
|
+
import { N as NestedClient, C as ClientLink, I as InferClientContext, a as ClientContext, b as ClientOptions, c as ClientPromiseResult, F as FriendlyClientOptions } from './shared/client.4TS_0JaO.js';
|
2
|
+
export { f as Client, e as ClientRest, d as HTTPMethod, H as HTTPPath } from './shared/client.4TS_0JaO.js';
|
3
|
+
import { Promisable, MaybeOptionalOptions, AsyncIteratorClass, ThrowableError } from '@orpc/shared';
|
4
|
+
export { EventPublisher, EventPublisherOptions, EventPublisherSubscribeIteratorOptions, Registry, ThrowableError, onError, onFinish, onStart, onSuccess } from '@orpc/shared';
|
5
5
|
export { ErrorEvent } from '@orpc/standard-server';
|
6
6
|
|
7
7
|
interface createORPCClientOptions {
|
@@ -138,7 +138,7 @@ declare function createORPCErrorFromJson<TCode extends ORPCErrorCode, TData>(jso
|
|
138
138
|
declare function mapEventIterator<TYield, TReturn, TNext, TMap = TYield | TReturn>(iterator: AsyncIterator<TYield, TReturn, TNext>, maps: {
|
139
139
|
value: (value: NoInfer<TYield | TReturn>, done: boolean | undefined) => Promise<TMap>;
|
140
140
|
error: (error: unknown) => Promise<unknown>;
|
141
|
-
}):
|
141
|
+
}): AsyncIteratorClass<TMap, TMap, TNext>;
|
142
142
|
|
143
143
|
type SafeResult<TOutput, TError> = [error: null, data: TOutput, isDefined: false, isSuccess: true] & {
|
144
144
|
error: null;
|
package/dist/index.mjs
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
import { i as isDefinedError } from './shared/client.
|
2
|
-
export { C as COMMON_ORPC_ERROR_DEFS, O as ORPCError, d as createORPCErrorFromJson, a as fallbackORPCErrorMessage, f as fallbackORPCErrorStatus, c as isORPCErrorJson, b as isORPCErrorStatus, m as mapEventIterator, t as toORPCError } from './shared/client.
|
3
|
-
export { onError, onFinish, onStart, onSuccess } from '@orpc/shared';
|
1
|
+
import { i as isDefinedError } from './shared/client.BX0_8bnM.mjs';
|
2
|
+
export { C as COMMON_ORPC_ERROR_DEFS, O as ORPCError, d as createORPCErrorFromJson, a as fallbackORPCErrorMessage, f as fallbackORPCErrorStatus, c as isORPCErrorJson, b as isORPCErrorStatus, m as mapEventIterator, t as toORPCError } from './shared/client.BX0_8bnM.mjs';
|
3
|
+
export { EventPublisher, onError, onFinish, onStart, onSuccess } from '@orpc/shared';
|
4
4
|
export { ErrorEvent } from '@orpc/standard-server';
|
5
5
|
|
6
6
|
async function safe(promise) {
|
@@ -27,7 +27,7 @@ async function safe(promise) {
|
|
27
27
|
function resolveFriendlyClientOptions(options) {
|
28
28
|
return {
|
29
29
|
...options,
|
30
|
-
context: options
|
30
|
+
context: options.context ?? {}
|
31
31
|
// Context only optional if all fields are optional
|
32
32
|
};
|
33
33
|
}
|
package/dist/plugins/index.d.mts
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
import { Value } from '@orpc/shared';
|
1
|
+
import { Value, Promisable } from '@orpc/shared';
|
2
2
|
import { StandardHeaders, StandardRequest } from '@orpc/standard-server';
|
3
|
-
import {
|
4
|
-
import { a as
|
3
|
+
import { BatchResponseMode } from '@orpc/standard-server/batch';
|
4
|
+
import { S as StandardLinkClientInterceptorOptions, a as StandardLinkPlugin, b as StandardLinkOptions, c as StandardLinkInterceptorOptions } from '../shared/client.BMoG_EdN.mjs';
|
5
|
+
import { a as ClientContext } from '../shared/client.4TS_0JaO.mjs';
|
5
6
|
|
6
7
|
interface BatchLinkPluginGroup<T extends ClientContext> {
|
7
8
|
condition(options: StandardLinkClientInterceptorOptions<T>): boolean;
|
@@ -16,25 +17,31 @@ interface BatchLinkPluginOptions<T extends ClientContext> {
|
|
16
17
|
*
|
17
18
|
* @default 10
|
18
19
|
*/
|
19
|
-
maxSize?: Value<number
|
20
|
+
maxSize?: Value<Promisable<number>, [readonly [StandardLinkClientInterceptorOptions<T>, ...StandardLinkClientInterceptorOptions<T>[]]]>;
|
21
|
+
/**
|
22
|
+
* The batch response mode.
|
23
|
+
*
|
24
|
+
* @default 'streaming'
|
25
|
+
*/
|
26
|
+
mode?: Value<BatchResponseMode, [readonly [StandardLinkClientInterceptorOptions<T>, ...StandardLinkClientInterceptorOptions<T>[]]]>;
|
20
27
|
/**
|
21
28
|
* Defines the URL to use for the batch request.
|
22
29
|
*
|
23
30
|
* @default the URL of the first request in the batch + '/__batch__'
|
24
31
|
*/
|
25
|
-
url?: Value<string | URL
|
32
|
+
url?: Value<Promisable<string | URL>, [readonly [StandardLinkClientInterceptorOptions<T>, ...StandardLinkClientInterceptorOptions<T>[]]]>;
|
26
33
|
/**
|
27
34
|
* The maximum length of the URL.
|
28
35
|
*
|
29
36
|
* @default 2083
|
30
37
|
*/
|
31
|
-
maxUrlLength?: Value<number
|
38
|
+
maxUrlLength?: Value<Promisable<number>, [readonly [StandardLinkClientInterceptorOptions<T>, ...StandardLinkClientInterceptorOptions<T>[]]]>;
|
32
39
|
/**
|
33
40
|
* Defines the HTTP headers to use for the batch request.
|
34
41
|
*
|
35
42
|
* @default The same headers of all requests in the batch
|
36
43
|
*/
|
37
|
-
headers?: Value<StandardHeaders
|
44
|
+
headers?: Value<Promisable<StandardHeaders>, [readonly [StandardLinkClientInterceptorOptions<T>, ...StandardLinkClientInterceptorOptions<T>[]]]>;
|
38
45
|
/**
|
39
46
|
* Map the batch request items before sending them.
|
40
47
|
*
|
@@ -52,10 +59,10 @@ interface BatchLinkPluginOptions<T extends ClientContext> {
|
|
52
59
|
exclude?: (options: StandardLinkClientInterceptorOptions<T>) => boolean;
|
53
60
|
}
|
54
61
|
/**
|
55
|
-
* The Batch
|
62
|
+
* The Batch Requests Plugin allows you to combine multiple requests and responses into a single batch,
|
56
63
|
* reducing the overhead of sending each one separately.
|
57
64
|
*
|
58
|
-
* @see {@link https://orpc.unnoq.com/docs/plugins/batch-
|
65
|
+
* @see {@link https://orpc.unnoq.com/docs/plugins/batch-requests Batch Requests Plugin Docs}
|
59
66
|
*/
|
60
67
|
declare class BatchLinkPlugin<T extends ClientContext> implements StandardLinkPlugin<T> {
|
61
68
|
#private;
|
@@ -66,9 +73,42 @@ declare class BatchLinkPlugin<T extends ClientContext> implements StandardLinkPl
|
|
66
73
|
private readonly batchHeaders;
|
67
74
|
private readonly mapRequestItem;
|
68
75
|
private readonly exclude;
|
76
|
+
private readonly mode;
|
69
77
|
private pending;
|
70
78
|
order: number;
|
71
|
-
constructor(options: BatchLinkPluginOptions<T
|
79
|
+
constructor(options: NoInfer<BatchLinkPluginOptions<T>>);
|
80
|
+
init(options: StandardLinkOptions<T>): void;
|
81
|
+
}
|
82
|
+
|
83
|
+
interface DedupeRequestsPluginGroup<T extends ClientContext> {
|
84
|
+
condition(options: StandardLinkClientInterceptorOptions<T>): boolean;
|
85
|
+
/**
|
86
|
+
* The context used for the rest of the request lifecycle.
|
87
|
+
*/
|
88
|
+
context: T;
|
89
|
+
}
|
90
|
+
interface DedupeRequestsPluginOptions<T extends ClientContext> {
|
91
|
+
/**
|
92
|
+
* To enable deduplication, a request must match at least one defined group.
|
93
|
+
* Requests that fall into the same group are considered for deduplication together.
|
94
|
+
*/
|
95
|
+
groups: readonly [DedupeRequestsPluginGroup<T>, ...DedupeRequestsPluginGroup<T>[]];
|
96
|
+
/**
|
97
|
+
* Filters requests to dedupe
|
98
|
+
*
|
99
|
+
* @default (({ request }) => request.method === 'GET')
|
100
|
+
*/
|
101
|
+
filter?: (options: StandardLinkClientInterceptorOptions<T>) => boolean;
|
102
|
+
}
|
103
|
+
/**
|
104
|
+
* Prevents duplicate requests by deduplicating similar ones to reduce server load.
|
105
|
+
*
|
106
|
+
* @see {@link https://orpc.unnoq.com/docs/plugins/dedupe-requests Dedupe Requests Plugin}
|
107
|
+
*/
|
108
|
+
declare class DedupeRequestsPlugin<T extends ClientContext> implements StandardLinkPlugin<T> {
|
109
|
+
#private;
|
110
|
+
order: number;
|
111
|
+
constructor(options: NoInfer<DedupeRequestsPluginOptions<T>>);
|
72
112
|
init(options: StandardLinkOptions<T>): void;
|
73
113
|
}
|
74
114
|
|
@@ -84,19 +124,19 @@ interface ClientRetryPluginContext {
|
|
84
124
|
*
|
85
125
|
* @default 0
|
86
126
|
*/
|
87
|
-
retry?: Value<number
|
127
|
+
retry?: Value<Promisable<number>, [StandardLinkInterceptorOptions<ClientRetryPluginContext>]>;
|
88
128
|
/**
|
89
129
|
* Delay (in ms) before retrying.
|
90
130
|
*
|
91
131
|
* @default (o) => o.lastEventRetry ?? 2000
|
92
132
|
*/
|
93
|
-
retryDelay?: Value<number
|
133
|
+
retryDelay?: Value<Promisable<number>, [ClientRetryPluginAttemptOptions<ClientRetryPluginContext>]>;
|
94
134
|
/**
|
95
135
|
* Determine should retry or not.
|
96
136
|
*
|
97
137
|
* @default true
|
98
138
|
*/
|
99
|
-
shouldRetry?: Value<boolean
|
139
|
+
shouldRetry?: Value<Promisable<boolean>, [ClientRetryPluginAttemptOptions<ClientRetryPluginContext>]>;
|
100
140
|
/**
|
101
141
|
* The hook called when retrying, and return the unsubscribe function.
|
102
142
|
*/
|
@@ -127,20 +167,20 @@ interface SimpleCsrfProtectionLinkPluginOptions<T extends ClientContext> {
|
|
127
167
|
*
|
128
168
|
* @default 'x-csrf-token'
|
129
169
|
*/
|
130
|
-
headerName?: Value<string
|
170
|
+
headerName?: Value<Promisable<string>, [options: StandardLinkClientInterceptorOptions<T>]>;
|
131
171
|
/**
|
132
172
|
* The value of the header to check.
|
133
173
|
*
|
134
174
|
* @default 'orpc'
|
135
175
|
*
|
136
176
|
*/
|
137
|
-
headerValue?: Value<string
|
177
|
+
headerValue?: Value<Promisable<string>, [options: StandardLinkClientInterceptorOptions<T>]>;
|
138
178
|
/**
|
139
179
|
* Exclude a procedure from the plugin.
|
140
180
|
*
|
141
181
|
* @default false
|
142
182
|
*/
|
143
|
-
exclude?: Value<boolean
|
183
|
+
exclude?: Value<Promisable<boolean>, [options: StandardLinkClientInterceptorOptions<T>]>;
|
144
184
|
}
|
145
185
|
/**
|
146
186
|
* This plugin adds basic Cross-Site Request Forgery (CSRF) protection to your oRPC application.
|
@@ -158,5 +198,5 @@ declare class SimpleCsrfProtectionLinkPlugin<T extends ClientContext> implements
|
|
158
198
|
init(options: StandardLinkOptions<T>): void;
|
159
199
|
}
|
160
200
|
|
161
|
-
export { BatchLinkPlugin, ClientRetryPlugin, ClientRetryPluginInvalidEventIteratorRetryResponse, SimpleCsrfProtectionLinkPlugin };
|
162
|
-
export type { BatchLinkPluginGroup, BatchLinkPluginOptions, ClientRetryPluginAttemptOptions, ClientRetryPluginContext, ClientRetryPluginOptions, SimpleCsrfProtectionLinkPluginOptions };
|
201
|
+
export { BatchLinkPlugin, ClientRetryPlugin, ClientRetryPluginInvalidEventIteratorRetryResponse, DedupeRequestsPlugin, SimpleCsrfProtectionLinkPlugin };
|
202
|
+
export type { BatchLinkPluginGroup, BatchLinkPluginOptions, ClientRetryPluginAttemptOptions, ClientRetryPluginContext, ClientRetryPluginOptions, DedupeRequestsPluginGroup, DedupeRequestsPluginOptions, SimpleCsrfProtectionLinkPluginOptions };
|
package/dist/plugins/index.d.ts
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
import { Value } from '@orpc/shared';
|
1
|
+
import { Value, Promisable } from '@orpc/shared';
|
2
2
|
import { StandardHeaders, StandardRequest } from '@orpc/standard-server';
|
3
|
-
import {
|
4
|
-
import { a as
|
3
|
+
import { BatchResponseMode } from '@orpc/standard-server/batch';
|
4
|
+
import { S as StandardLinkClientInterceptorOptions, a as StandardLinkPlugin, b as StandardLinkOptions, c as StandardLinkInterceptorOptions } from '../shared/client.C0KbSWlC.js';
|
5
|
+
import { a as ClientContext } from '../shared/client.4TS_0JaO.js';
|
5
6
|
|
6
7
|
interface BatchLinkPluginGroup<T extends ClientContext> {
|
7
8
|
condition(options: StandardLinkClientInterceptorOptions<T>): boolean;
|
@@ -16,25 +17,31 @@ interface BatchLinkPluginOptions<T extends ClientContext> {
|
|
16
17
|
*
|
17
18
|
* @default 10
|
18
19
|
*/
|
19
|
-
maxSize?: Value<number
|
20
|
+
maxSize?: Value<Promisable<number>, [readonly [StandardLinkClientInterceptorOptions<T>, ...StandardLinkClientInterceptorOptions<T>[]]]>;
|
21
|
+
/**
|
22
|
+
* The batch response mode.
|
23
|
+
*
|
24
|
+
* @default 'streaming'
|
25
|
+
*/
|
26
|
+
mode?: Value<BatchResponseMode, [readonly [StandardLinkClientInterceptorOptions<T>, ...StandardLinkClientInterceptorOptions<T>[]]]>;
|
20
27
|
/**
|
21
28
|
* Defines the URL to use for the batch request.
|
22
29
|
*
|
23
30
|
* @default the URL of the first request in the batch + '/__batch__'
|
24
31
|
*/
|
25
|
-
url?: Value<string | URL
|
32
|
+
url?: Value<Promisable<string | URL>, [readonly [StandardLinkClientInterceptorOptions<T>, ...StandardLinkClientInterceptorOptions<T>[]]]>;
|
26
33
|
/**
|
27
34
|
* The maximum length of the URL.
|
28
35
|
*
|
29
36
|
* @default 2083
|
30
37
|
*/
|
31
|
-
maxUrlLength?: Value<number
|
38
|
+
maxUrlLength?: Value<Promisable<number>, [readonly [StandardLinkClientInterceptorOptions<T>, ...StandardLinkClientInterceptorOptions<T>[]]]>;
|
32
39
|
/**
|
33
40
|
* Defines the HTTP headers to use for the batch request.
|
34
41
|
*
|
35
42
|
* @default The same headers of all requests in the batch
|
36
43
|
*/
|
37
|
-
headers?: Value<StandardHeaders
|
44
|
+
headers?: Value<Promisable<StandardHeaders>, [readonly [StandardLinkClientInterceptorOptions<T>, ...StandardLinkClientInterceptorOptions<T>[]]]>;
|
38
45
|
/**
|
39
46
|
* Map the batch request items before sending them.
|
40
47
|
*
|
@@ -52,10 +59,10 @@ interface BatchLinkPluginOptions<T extends ClientContext> {
|
|
52
59
|
exclude?: (options: StandardLinkClientInterceptorOptions<T>) => boolean;
|
53
60
|
}
|
54
61
|
/**
|
55
|
-
* The Batch
|
62
|
+
* The Batch Requests Plugin allows you to combine multiple requests and responses into a single batch,
|
56
63
|
* reducing the overhead of sending each one separately.
|
57
64
|
*
|
58
|
-
* @see {@link https://orpc.unnoq.com/docs/plugins/batch-
|
65
|
+
* @see {@link https://orpc.unnoq.com/docs/plugins/batch-requests Batch Requests Plugin Docs}
|
59
66
|
*/
|
60
67
|
declare class BatchLinkPlugin<T extends ClientContext> implements StandardLinkPlugin<T> {
|
61
68
|
#private;
|
@@ -66,9 +73,42 @@ declare class BatchLinkPlugin<T extends ClientContext> implements StandardLinkPl
|
|
66
73
|
private readonly batchHeaders;
|
67
74
|
private readonly mapRequestItem;
|
68
75
|
private readonly exclude;
|
76
|
+
private readonly mode;
|
69
77
|
private pending;
|
70
78
|
order: number;
|
71
|
-
constructor(options: BatchLinkPluginOptions<T
|
79
|
+
constructor(options: NoInfer<BatchLinkPluginOptions<T>>);
|
80
|
+
init(options: StandardLinkOptions<T>): void;
|
81
|
+
}
|
82
|
+
|
83
|
+
interface DedupeRequestsPluginGroup<T extends ClientContext> {
|
84
|
+
condition(options: StandardLinkClientInterceptorOptions<T>): boolean;
|
85
|
+
/**
|
86
|
+
* The context used for the rest of the request lifecycle.
|
87
|
+
*/
|
88
|
+
context: T;
|
89
|
+
}
|
90
|
+
interface DedupeRequestsPluginOptions<T extends ClientContext> {
|
91
|
+
/**
|
92
|
+
* To enable deduplication, a request must match at least one defined group.
|
93
|
+
* Requests that fall into the same group are considered for deduplication together.
|
94
|
+
*/
|
95
|
+
groups: readonly [DedupeRequestsPluginGroup<T>, ...DedupeRequestsPluginGroup<T>[]];
|
96
|
+
/**
|
97
|
+
* Filters requests to dedupe
|
98
|
+
*
|
99
|
+
* @default (({ request }) => request.method === 'GET')
|
100
|
+
*/
|
101
|
+
filter?: (options: StandardLinkClientInterceptorOptions<T>) => boolean;
|
102
|
+
}
|
103
|
+
/**
|
104
|
+
* Prevents duplicate requests by deduplicating similar ones to reduce server load.
|
105
|
+
*
|
106
|
+
* @see {@link https://orpc.unnoq.com/docs/plugins/dedupe-requests Dedupe Requests Plugin}
|
107
|
+
*/
|
108
|
+
declare class DedupeRequestsPlugin<T extends ClientContext> implements StandardLinkPlugin<T> {
|
109
|
+
#private;
|
110
|
+
order: number;
|
111
|
+
constructor(options: NoInfer<DedupeRequestsPluginOptions<T>>);
|
72
112
|
init(options: StandardLinkOptions<T>): void;
|
73
113
|
}
|
74
114
|
|
@@ -84,19 +124,19 @@ interface ClientRetryPluginContext {
|
|
84
124
|
*
|
85
125
|
* @default 0
|
86
126
|
*/
|
87
|
-
retry?: Value<number
|
127
|
+
retry?: Value<Promisable<number>, [StandardLinkInterceptorOptions<ClientRetryPluginContext>]>;
|
88
128
|
/**
|
89
129
|
* Delay (in ms) before retrying.
|
90
130
|
*
|
91
131
|
* @default (o) => o.lastEventRetry ?? 2000
|
92
132
|
*/
|
93
|
-
retryDelay?: Value<number
|
133
|
+
retryDelay?: Value<Promisable<number>, [ClientRetryPluginAttemptOptions<ClientRetryPluginContext>]>;
|
94
134
|
/**
|
95
135
|
* Determine should retry or not.
|
96
136
|
*
|
97
137
|
* @default true
|
98
138
|
*/
|
99
|
-
shouldRetry?: Value<boolean
|
139
|
+
shouldRetry?: Value<Promisable<boolean>, [ClientRetryPluginAttemptOptions<ClientRetryPluginContext>]>;
|
100
140
|
/**
|
101
141
|
* The hook called when retrying, and return the unsubscribe function.
|
102
142
|
*/
|
@@ -127,20 +167,20 @@ interface SimpleCsrfProtectionLinkPluginOptions<T extends ClientContext> {
|
|
127
167
|
*
|
128
168
|
* @default 'x-csrf-token'
|
129
169
|
*/
|
130
|
-
headerName?: Value<string
|
170
|
+
headerName?: Value<Promisable<string>, [options: StandardLinkClientInterceptorOptions<T>]>;
|
131
171
|
/**
|
132
172
|
* The value of the header to check.
|
133
173
|
*
|
134
174
|
* @default 'orpc'
|
135
175
|
*
|
136
176
|
*/
|
137
|
-
headerValue?: Value<string
|
177
|
+
headerValue?: Value<Promisable<string>, [options: StandardLinkClientInterceptorOptions<T>]>;
|
138
178
|
/**
|
139
179
|
* Exclude a procedure from the plugin.
|
140
180
|
*
|
141
181
|
* @default false
|
142
182
|
*/
|
143
|
-
exclude?: Value<boolean
|
183
|
+
exclude?: Value<Promisable<boolean>, [options: StandardLinkClientInterceptorOptions<T>]>;
|
144
184
|
}
|
145
185
|
/**
|
146
186
|
* This plugin adds basic Cross-Site Request Forgery (CSRF) protection to your oRPC application.
|
@@ -158,5 +198,5 @@ declare class SimpleCsrfProtectionLinkPlugin<T extends ClientContext> implements
|
|
158
198
|
init(options: StandardLinkOptions<T>): void;
|
159
199
|
}
|
160
200
|
|
161
|
-
export { BatchLinkPlugin, ClientRetryPlugin, ClientRetryPluginInvalidEventIteratorRetryResponse, SimpleCsrfProtectionLinkPlugin };
|
162
|
-
export type { BatchLinkPluginGroup, BatchLinkPluginOptions, ClientRetryPluginAttemptOptions, ClientRetryPluginContext, ClientRetryPluginOptions, SimpleCsrfProtectionLinkPluginOptions };
|
201
|
+
export { BatchLinkPlugin, ClientRetryPlugin, ClientRetryPluginInvalidEventIteratorRetryResponse, DedupeRequestsPlugin, SimpleCsrfProtectionLinkPlugin };
|
202
|
+
export type { BatchLinkPluginGroup, BatchLinkPluginOptions, ClientRetryPluginAttemptOptions, ClientRetryPluginContext, ClientRetryPluginOptions, DedupeRequestsPluginGroup, DedupeRequestsPluginOptions, SimpleCsrfProtectionLinkPluginOptions };
|
package/dist/plugins/index.mjs
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
import { isAsyncIteratorObject, value, splitInHalf, toArray } from '@orpc/shared';
|
2
|
-
import { toBatchRequest, parseBatchResponse } from '@orpc/standard-server/batch';
|
3
|
-
import { getEventMeta } from '@orpc/standard-server';
|
1
|
+
import { isAsyncIteratorObject, defer, value, splitInHalf, toArray, stringifyJSON } from '@orpc/shared';
|
2
|
+
import { toBatchRequest, parseBatchResponse, toBatchAbortSignal } from '@orpc/standard-server/batch';
|
3
|
+
import { replicateStandardLazyResponse, getEventMeta } from '@orpc/standard-server';
|
4
4
|
|
5
5
|
class BatchLinkPlugin {
|
6
6
|
groups;
|
@@ -10,6 +10,7 @@ class BatchLinkPlugin {
|
|
10
10
|
batchHeaders;
|
11
11
|
mapRequestItem;
|
12
12
|
exclude;
|
13
|
+
mode;
|
13
14
|
pending;
|
14
15
|
order = 5e6;
|
15
16
|
constructor(options) {
|
@@ -17,6 +18,7 @@ class BatchLinkPlugin {
|
|
17
18
|
this.pending = /* @__PURE__ */ new Map();
|
18
19
|
this.maxSize = options.maxSize ?? 10;
|
19
20
|
this.maxUrlLength = options.maxUrlLength ?? 2083;
|
21
|
+
this.mode = options.mode ?? "streaming";
|
20
22
|
this.batchUrl = options.url ?? (([options2]) => `${options2.request.url.origin}${options2.request.url.pathname}/__batch__`);
|
21
23
|
this.batchHeaders = options.headers ?? (([options2, ...rest]) => {
|
22
24
|
const headers = {};
|
@@ -71,7 +73,7 @@ class BatchLinkPlugin {
|
|
71
73
|
}
|
72
74
|
return new Promise((resolve, reject) => {
|
73
75
|
this.#enqueueRequest(group, options2, resolve, reject);
|
74
|
-
|
76
|
+
defer(() => this.#processPendingBatches());
|
75
77
|
});
|
76
78
|
});
|
77
79
|
}
|
@@ -127,8 +129,9 @@ class BatchLinkPlugin {
|
|
127
129
|
this.#executeBatch(method, group, second);
|
128
130
|
return;
|
129
131
|
}
|
132
|
+
const mode = value(this.mode, options);
|
130
133
|
const lazyResponse = await options[0].next({
|
131
|
-
request: { ...batchRequest, headers: { ...batchRequest.headers, "x-orpc-batch":
|
134
|
+
request: { ...batchRequest, headers: { ...batchRequest.headers, "x-orpc-batch": mode } },
|
132
135
|
signal: batchRequest.signal,
|
133
136
|
context: group.context,
|
134
137
|
input: group.input,
|
@@ -147,6 +150,101 @@ class BatchLinkPlugin {
|
|
147
150
|
}
|
148
151
|
}
|
149
152
|
|
153
|
+
class DedupeRequestsPlugin {
|
154
|
+
#groups;
|
155
|
+
#filter;
|
156
|
+
order = 4e6;
|
157
|
+
// make sure execute before batch plugin
|
158
|
+
#queue = /* @__PURE__ */ new Map();
|
159
|
+
constructor(options) {
|
160
|
+
this.#groups = options.groups;
|
161
|
+
this.#filter = options.filter ?? (({ request }) => request.method === "GET");
|
162
|
+
}
|
163
|
+
init(options) {
|
164
|
+
options.clientInterceptors ??= [];
|
165
|
+
options.clientInterceptors.push((options2) => {
|
166
|
+
if (options2.request.body instanceof Blob || options2.request.body instanceof FormData || options2.request.body instanceof URLSearchParams || isAsyncIteratorObject(options2.request.body) || !this.#filter(options2)) {
|
167
|
+
return options2.next();
|
168
|
+
}
|
169
|
+
const group = this.#groups.find((group2) => group2.condition(options2));
|
170
|
+
if (!group) {
|
171
|
+
return options2.next();
|
172
|
+
}
|
173
|
+
return new Promise((resolve, reject) => {
|
174
|
+
this.#enqueue(group, options2, resolve, reject);
|
175
|
+
defer(() => this.#dequeue());
|
176
|
+
});
|
177
|
+
});
|
178
|
+
}
|
179
|
+
#enqueue(group, options, resolve, reject) {
|
180
|
+
let queue = this.#queue.get(group);
|
181
|
+
if (!queue) {
|
182
|
+
this.#queue.set(group, queue = []);
|
183
|
+
}
|
184
|
+
const matched = queue.find((item) => {
|
185
|
+
const requestString1 = stringifyJSON({
|
186
|
+
body: item.options.request.body,
|
187
|
+
headers: item.options.request.headers,
|
188
|
+
method: item.options.request.method,
|
189
|
+
url: item.options.request.url
|
190
|
+
});
|
191
|
+
const requestString2 = stringifyJSON({
|
192
|
+
body: options.request.body,
|
193
|
+
headers: options.request.headers,
|
194
|
+
method: options.request.method,
|
195
|
+
url: options.request.url
|
196
|
+
});
|
197
|
+
return requestString1 === requestString2;
|
198
|
+
});
|
199
|
+
if (matched) {
|
200
|
+
matched.signals.push(options.request.signal);
|
201
|
+
matched.resolves.push(resolve);
|
202
|
+
matched.rejects.push(reject);
|
203
|
+
} else {
|
204
|
+
queue.push({
|
205
|
+
options,
|
206
|
+
signals: [options.request.signal],
|
207
|
+
resolves: [resolve],
|
208
|
+
rejects: [reject]
|
209
|
+
});
|
210
|
+
}
|
211
|
+
}
|
212
|
+
async #dequeue() {
|
213
|
+
const promises = [];
|
214
|
+
for (const [group, items] of this.#queue) {
|
215
|
+
for (const { options, signals, resolves, rejects } of items) {
|
216
|
+
promises.push(
|
217
|
+
this.#execute(group, options, signals, resolves, rejects)
|
218
|
+
);
|
219
|
+
}
|
220
|
+
}
|
221
|
+
this.#queue.clear();
|
222
|
+
await Promise.all(promises);
|
223
|
+
}
|
224
|
+
async #execute(group, options, signals, resolves, rejects) {
|
225
|
+
try {
|
226
|
+
const dedupedRequest = {
|
227
|
+
...options.request,
|
228
|
+
signal: toBatchAbortSignal(signals)
|
229
|
+
};
|
230
|
+
const response = await options.next({
|
231
|
+
...options,
|
232
|
+
request: dedupedRequest,
|
233
|
+
signal: dedupedRequest.signal,
|
234
|
+
context: group.context
|
235
|
+
});
|
236
|
+
const replicatedResponses = replicateStandardLazyResponse(response, resolves.length);
|
237
|
+
for (const resolve of resolves) {
|
238
|
+
resolve(replicatedResponses.shift());
|
239
|
+
}
|
240
|
+
} catch (error) {
|
241
|
+
for (const reject of rejects) {
|
242
|
+
reject(error);
|
243
|
+
}
|
244
|
+
}
|
245
|
+
}
|
246
|
+
}
|
247
|
+
|
150
248
|
class ClientRetryPluginInvalidEventIteratorRetryResponse extends Error {
|
151
249
|
}
|
152
250
|
class ClientRetryPlugin {
|
@@ -288,4 +386,4 @@ class SimpleCsrfProtectionLinkPlugin {
|
|
288
386
|
}
|
289
387
|
}
|
290
388
|
|
291
|
-
export { BatchLinkPlugin, ClientRetryPlugin, ClientRetryPluginInvalidEventIteratorRetryResponse, SimpleCsrfProtectionLinkPlugin };
|
389
|
+
export { BatchLinkPlugin, ClientRetryPlugin, ClientRetryPluginInvalidEventIteratorRetryResponse, DedupeRequestsPlugin, SimpleCsrfProtectionLinkPlugin };
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { PromiseWithError } from '@orpc/shared';
|
2
2
|
|
3
3
|
type HTTPPath = `/${string}`;
|
4
|
-
type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
4
|
+
type HTTPMethod = 'HEAD' | 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
5
5
|
type ClientContext = Record<PropertyKey, any>;
|
6
6
|
interface ClientOptions<T extends ClientContext> {
|
7
7
|
signal?: AbortSignal;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { PromiseWithError } from '@orpc/shared';
|
2
2
|
|
3
3
|
type HTTPPath = `/${string}`;
|
4
|
-
type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
4
|
+
type HTTPMethod = 'HEAD' | 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
5
5
|
type ClientContext = Record<PropertyKey, any>;
|
6
6
|
interface ClientOptions<T extends ClientContext> {
|
7
7
|
signal?: AbortSignal;
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import { a as ClientContext, b as ClientOptions, d as HTTPMethod } from './client.
|
2
|
-
import { e as StandardLinkCodec, b as StandardLinkOptions, d as StandardLink, f as StandardLinkClient } from './client.
|
3
|
-
import { Segment, Value } from '@orpc/shared';
|
1
|
+
import { a as ClientContext, b as ClientOptions, d as HTTPMethod } from './client.4TS_0JaO.js';
|
2
|
+
import { e as StandardLinkCodec, b as StandardLinkOptions, d as StandardLink, f as StandardLinkClient } from './client.C0KbSWlC.js';
|
3
|
+
import { Segment, Value, Promisable } from '@orpc/shared';
|
4
4
|
import { StandardHeaders, StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
|
5
5
|
|
6
6
|
declare const STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES: {
|
@@ -44,30 +44,30 @@ interface StandardRPCLinkCodecOptions<T extends ClientContext> {
|
|
44
44
|
/**
|
45
45
|
* Base url for all requests.
|
46
46
|
*/
|
47
|
-
url: Value<string | URL
|
47
|
+
url: Value<Promisable<string | URL>, [options: ClientOptions<T>, path: readonly string[], input: unknown]>;
|
48
48
|
/**
|
49
49
|
* The maximum length of the URL.
|
50
50
|
*
|
51
51
|
* @default 2083
|
52
52
|
*/
|
53
|
-
maxUrlLength?: Value<number
|
53
|
+
maxUrlLength?: Value<Promisable<number>, [options: ClientOptions<T>, path: readonly string[], input: unknown]>;
|
54
54
|
/**
|
55
55
|
* The method used to make the request.
|
56
56
|
*
|
57
57
|
* @default 'POST'
|
58
58
|
*/
|
59
|
-
method?: Value<HTTPMethod, [options: ClientOptions<T>, path: readonly string[], input: unknown]>;
|
59
|
+
method?: Value<Promisable<Exclude<HTTPMethod, 'HEAD'>>, [options: ClientOptions<T>, path: readonly string[], input: unknown]>;
|
60
60
|
/**
|
61
61
|
* The method to use when the payload cannot safely pass to the server with method return from method function.
|
62
62
|
* GET is not allowed, it's very dangerous.
|
63
63
|
*
|
64
64
|
* @default 'POST'
|
65
65
|
*/
|
66
|
-
fallbackMethod?: Exclude<HTTPMethod, 'GET'>;
|
66
|
+
fallbackMethod?: Exclude<HTTPMethod, 'HEAD' | 'GET'>;
|
67
67
|
/**
|
68
68
|
* Inject headers to the request.
|
69
69
|
*/
|
70
|
-
headers?: Value<StandardHeaders
|
70
|
+
headers?: Value<Promisable<StandardHeaders>, [options: ClientOptions<T>, path: readonly string[], input: unknown]>;
|
71
71
|
}
|
72
72
|
declare class StandardRPCLinkCodec<T extends ClientContext> implements StandardLinkCodec<T> {
|
73
73
|
private readonly serializer;
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import { Interceptor
|
1
|
+
import { Interceptor } from '@orpc/shared';
|
2
2
|
import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
|
3
|
-
import { a as ClientContext, b as ClientOptions, C as ClientLink } from './client.
|
3
|
+
import { a as ClientContext, b as ClientOptions, C as ClientLink } from './client.4TS_0JaO.mjs';
|
4
4
|
|
5
5
|
interface StandardLinkPlugin<T extends ClientContext> {
|
6
6
|
order?: number;
|
@@ -28,8 +28,8 @@ interface StandardLinkClientInterceptorOptions<T extends ClientContext> extends
|
|
28
28
|
request: StandardRequest;
|
29
29
|
}
|
30
30
|
interface StandardLinkOptions<T extends ClientContext> {
|
31
|
-
interceptors?: Interceptor<StandardLinkInterceptorOptions<T>, unknown
|
32
|
-
clientInterceptors?: Interceptor<StandardLinkClientInterceptorOptions<T>, StandardLazyResponse
|
31
|
+
interceptors?: Interceptor<StandardLinkInterceptorOptions<T>, Promise<unknown>>[];
|
32
|
+
clientInterceptors?: Interceptor<StandardLinkClientInterceptorOptions<T>, Promise<StandardLazyResponse>>[];
|
33
33
|
plugins?: StandardLinkPlugin<T>[];
|
34
34
|
}
|
35
35
|
declare class StandardLink<T extends ClientContext> implements ClientLink<T> {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { isObject, isTypescriptObject } from '@orpc/shared';
|
1
|
+
import { isObject, AsyncIteratorClass, isTypescriptObject } from '@orpc/shared';
|
2
2
|
import { getEventMeta, withEventMeta } from '@orpc/standard-server';
|
3
3
|
|
4
4
|
const COMMON_ORPC_ERROR_DEFS = {
|
@@ -141,22 +141,17 @@ function createORPCErrorFromJson(json, options = {}) {
|
|
141
141
|
}
|
142
142
|
|
143
143
|
function mapEventIterator(iterator, maps) {
|
144
|
-
return async
|
144
|
+
return new AsyncIteratorClass(async () => {
|
145
145
|
try {
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
mappedValue = withEventMeta(mappedValue, meta);
|
153
|
-
}
|
146
|
+
const { done, value } = await iterator.next();
|
147
|
+
let mappedValue = await maps.value(value, done);
|
148
|
+
if (mappedValue !== value) {
|
149
|
+
const meta = getEventMeta(value);
|
150
|
+
if (meta && isTypescriptObject(mappedValue)) {
|
151
|
+
mappedValue = withEventMeta(mappedValue, meta);
|
154
152
|
}
|
155
|
-
if (done) {
|
156
|
-
return mappedValue;
|
157
|
-
}
|
158
|
-
yield mappedValue;
|
159
153
|
}
|
154
|
+
return { done, value: mappedValue };
|
160
155
|
} catch (error) {
|
161
156
|
let mappedError = await maps.error(error);
|
162
157
|
if (mappedError !== error) {
|
@@ -166,10 +161,12 @@ function mapEventIterator(iterator, maps) {
|
|
166
161
|
}
|
167
162
|
}
|
168
163
|
throw mappedError;
|
169
|
-
}
|
164
|
+
}
|
165
|
+
}, async (reason) => {
|
166
|
+
if (reason !== "next") {
|
170
167
|
await iterator.return?.();
|
171
168
|
}
|
172
|
-
}
|
169
|
+
});
|
173
170
|
}
|
174
171
|
|
175
172
|
export { COMMON_ORPC_ERROR_DEFS as C, ORPCError as O, fallbackORPCErrorMessage as a, isORPCErrorStatus as b, isORPCErrorJson as c, createORPCErrorFromJson as d, fallbackORPCErrorStatus as f, isDefinedError as i, mapEventIterator as m, toORPCError as t };
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import { a as ClientContext, b as ClientOptions, d as HTTPMethod } from './client.
|
2
|
-
import { e as StandardLinkCodec, b as StandardLinkOptions, d as StandardLink, f as StandardLinkClient } from './client.
|
3
|
-
import { Segment, Value } from '@orpc/shared';
|
1
|
+
import { a as ClientContext, b as ClientOptions, d as HTTPMethod } from './client.4TS_0JaO.mjs';
|
2
|
+
import { e as StandardLinkCodec, b as StandardLinkOptions, d as StandardLink, f as StandardLinkClient } from './client.BMoG_EdN.mjs';
|
3
|
+
import { Segment, Value, Promisable } from '@orpc/shared';
|
4
4
|
import { StandardHeaders, StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
|
5
5
|
|
6
6
|
declare const STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES: {
|
@@ -44,30 +44,30 @@ interface StandardRPCLinkCodecOptions<T extends ClientContext> {
|
|
44
44
|
/**
|
45
45
|
* Base url for all requests.
|
46
46
|
*/
|
47
|
-
url: Value<string | URL
|
47
|
+
url: Value<Promisable<string | URL>, [options: ClientOptions<T>, path: readonly string[], input: unknown]>;
|
48
48
|
/**
|
49
49
|
* The maximum length of the URL.
|
50
50
|
*
|
51
51
|
* @default 2083
|
52
52
|
*/
|
53
|
-
maxUrlLength?: Value<number
|
53
|
+
maxUrlLength?: Value<Promisable<number>, [options: ClientOptions<T>, path: readonly string[], input: unknown]>;
|
54
54
|
/**
|
55
55
|
* The method used to make the request.
|
56
56
|
*
|
57
57
|
* @default 'POST'
|
58
58
|
*/
|
59
|
-
method?: Value<HTTPMethod, [options: ClientOptions<T>, path: readonly string[], input: unknown]>;
|
59
|
+
method?: Value<Promisable<Exclude<HTTPMethod, 'HEAD'>>, [options: ClientOptions<T>, path: readonly string[], input: unknown]>;
|
60
60
|
/**
|
61
61
|
* The method to use when the payload cannot safely pass to the server with method return from method function.
|
62
62
|
* GET is not allowed, it's very dangerous.
|
63
63
|
*
|
64
64
|
* @default 'POST'
|
65
65
|
*/
|
66
|
-
fallbackMethod?: Exclude<HTTPMethod, 'GET'>;
|
66
|
+
fallbackMethod?: Exclude<HTTPMethod, 'HEAD' | 'GET'>;
|
67
67
|
/**
|
68
68
|
* Inject headers to the request.
|
69
69
|
*/
|
70
|
-
headers?: Value<StandardHeaders
|
70
|
+
headers?: Value<Promisable<StandardHeaders>, [options: ClientOptions<T>, path: readonly string[], input: unknown]>;
|
71
71
|
}
|
72
72
|
declare class StandardRPCLinkCodec<T extends ClientContext> implements StandardLinkCodec<T> {
|
73
73
|
private readonly serializer;
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import { Interceptor
|
1
|
+
import { Interceptor } from '@orpc/shared';
|
2
2
|
import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
|
3
|
-
import { a as ClientContext, b as ClientOptions, C as ClientLink } from './client.
|
3
|
+
import { a as ClientContext, b as ClientOptions, C as ClientLink } from './client.4TS_0JaO.js';
|
4
4
|
|
5
5
|
interface StandardLinkPlugin<T extends ClientContext> {
|
6
6
|
order?: number;
|
@@ -28,8 +28,8 @@ interface StandardLinkClientInterceptorOptions<T extends ClientContext> extends
|
|
28
28
|
request: StandardRequest;
|
29
29
|
}
|
30
30
|
interface StandardLinkOptions<T extends ClientContext> {
|
31
|
-
interceptors?: Interceptor<StandardLinkInterceptorOptions<T>, unknown
|
32
|
-
clientInterceptors?: Interceptor<StandardLinkClientInterceptorOptions<T>, StandardLazyResponse
|
31
|
+
interceptors?: Interceptor<StandardLinkInterceptorOptions<T>, Promise<unknown>>[];
|
32
|
+
clientInterceptors?: Interceptor<StandardLinkClientInterceptorOptions<T>, Promise<StandardLazyResponse>>[];
|
33
33
|
plugins?: StandardLinkPlugin<T>[];
|
34
34
|
}
|
35
35
|
declare class StandardLink<T extends ClientContext> implements ClientLink<T> {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { toArray, intercept, isObject, value, isAsyncIteratorObject, stringifyJSON } from '@orpc/shared';
|
2
2
|
import { mergeStandardHeaders, ErrorEvent } from '@orpc/standard-server';
|
3
|
-
import { C as COMMON_ORPC_ERROR_DEFS, b as isORPCErrorStatus, c as isORPCErrorJson, d as createORPCErrorFromJson, O as ORPCError, m as mapEventIterator, t as toORPCError } from './client.
|
3
|
+
import { C as COMMON_ORPC_ERROR_DEFS, b as isORPCErrorStatus, c as isORPCErrorJson, d as createORPCErrorFromJson, O as ORPCError, m as mapEventIterator, t as toORPCError } from './client.BX0_8bnM.mjs';
|
4
4
|
|
5
5
|
class CompositeStandardLinkPlugin {
|
6
6
|
plugins;
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@orpc/client",
|
3
3
|
"type": "module",
|
4
|
-
"version": "0.0.0-next.
|
4
|
+
"version": "0.0.0-next.c854c60",
|
5
5
|
"license": "MIT",
|
6
6
|
"homepage": "https://orpc.unnoq.com",
|
7
7
|
"repository": {
|
@@ -33,18 +33,29 @@
|
|
33
33
|
"types": "./dist/adapters/fetch/index.d.mts",
|
34
34
|
"import": "./dist/adapters/fetch/index.mjs",
|
35
35
|
"default": "./dist/adapters/fetch/index.mjs"
|
36
|
+
},
|
37
|
+
"./websocket": {
|
38
|
+
"types": "./dist/adapters/websocket/index.d.mts",
|
39
|
+
"import": "./dist/adapters/websocket/index.mjs",
|
40
|
+
"default": "./dist/adapters/websocket/index.mjs"
|
41
|
+
},
|
42
|
+
"./message-port": {
|
43
|
+
"types": "./dist/adapters/message-port/index.d.mts",
|
44
|
+
"import": "./dist/adapters/message-port/index.mjs",
|
45
|
+
"default": "./dist/adapters/message-port/index.mjs"
|
36
46
|
}
|
37
47
|
},
|
38
48
|
"files": [
|
39
49
|
"dist"
|
40
50
|
],
|
41
51
|
"dependencies": {
|
42
|
-
"@orpc/standard-server": "0.0.0-next.
|
43
|
-
"@orpc/
|
44
|
-
"@orpc/
|
52
|
+
"@orpc/standard-server": "0.0.0-next.c854c60",
|
53
|
+
"@orpc/standard-server-fetch": "0.0.0-next.c854c60",
|
54
|
+
"@orpc/shared": "0.0.0-next.c854c60",
|
55
|
+
"@orpc/standard-server-peer": "0.0.0-next.c854c60"
|
45
56
|
},
|
46
57
|
"devDependencies": {
|
47
|
-
"zod": "^3.
|
58
|
+
"zod": "^3.25.49"
|
48
59
|
},
|
49
60
|
"scripts": {
|
50
61
|
"build": "unbuild",
|