@orpc/client 0.0.0-next.dc23561 → 0.0.0-next.dc2afcb

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.
Files changed (31) hide show
  1. package/README.md +11 -8
  2. package/dist/adapters/fetch/index.d.mts +5 -5
  3. package/dist/adapters/fetch/index.d.ts +5 -5
  4. package/dist/adapters/fetch/index.mjs +3 -2
  5. package/dist/adapters/message-port/index.d.mts +30 -9
  6. package/dist/adapters/message-port/index.d.ts +30 -9
  7. package/dist/adapters/message-port/index.mjs +26 -10
  8. package/dist/adapters/standard/index.d.mts +6 -5
  9. package/dist/adapters/standard/index.d.ts +6 -5
  10. package/dist/adapters/standard/index.mjs +4 -2
  11. package/dist/adapters/websocket/index.d.mts +5 -5
  12. package/dist/adapters/websocket/index.d.ts +5 -5
  13. package/dist/adapters/websocket/index.mjs +5 -3
  14. package/dist/index.d.mts +55 -10
  15. package/dist/index.d.ts +55 -10
  16. package/dist/index.mjs +34 -4
  17. package/dist/plugins/index.d.mts +56 -9
  18. package/dist/plugins/index.d.ts +56 -9
  19. package/dist/plugins/index.mjs +99 -14
  20. package/dist/shared/{client.BG98rYdO.d.ts → client.2jUAqzYU.d.ts} +1 -1
  21. package/dist/shared/{client.C176log5.d.ts → client.B3pNRBih.d.ts} +3 -3
  22. package/dist/shared/{client.Ycwr4Tuo.d.mts → client.BFAVy68H.d.mts} +3 -3
  23. package/dist/shared/client.BLtwTQUg.mjs +40 -0
  24. package/dist/shared/{client.Bwgm6dgk.d.mts → client.CpCa3si8.d.mts} +1 -1
  25. package/dist/shared/{client.txdq_i5V.mjs → client.Cqdk_lGy.mjs} +30 -39
  26. package/dist/shared/{client.DKmRtVO2.mjs → client.alKka8bo.mjs} +14 -6
  27. package/dist/shared/client.i2uoJbEp.d.mts +83 -0
  28. package/dist/shared/client.i2uoJbEp.d.ts +83 -0
  29. package/package.json +8 -9
  30. package/dist/shared/client.BOYsZIRq.d.mts +0 -29
  31. package/dist/shared/client.BOYsZIRq.d.ts +0 -29
package/README.md CHANGED
@@ -1,22 +1,25 @@
1
1
  <div align="center">
2
- <image align="center" src="https://orpc.unnoq.com/logo.webp" width=280 alt="oRPC logo" />
2
+ <image align="center" src="https://orpc.dev/logo.webp" width=280 alt="oRPC logo" />
3
3
  </div>
4
4
 
5
5
  <h1></h1>
6
6
 
7
7
  <div align="center">
8
- <a href="https://codecov.io/gh/unnoq/orpc">
9
- <img alt="codecov" src="https://codecov.io/gh/unnoq/orpc/branch/main/graph/badge.svg">
8
+ <a href="https://codecov.io/gh/middleapi/orpc">
9
+ <img alt="codecov" src="https://codecov.io/gh/middleapi/orpc/branch/main/graph/badge.svg">
10
10
  </a>
11
11
  <a href="https://www.npmjs.com/package/@orpc/client">
12
12
  <img alt="weekly downloads" src="https://img.shields.io/npm/dw/%40orpc%2Fclient?logo=npm" />
13
13
  </a>
14
- <a href="https://github.com/unnoq/orpc/blob/main/LICENSE">
15
- <img alt="MIT License" src="https://img.shields.io/github/license/unnoq/orpc?logo=open-source-initiative" />
14
+ <a href="https://github.com/middleapi/orpc/blob/main/LICENSE">
15
+ <img alt="MIT License" src="https://img.shields.io/github/license/middleapi/orpc?logo=open-source-initiative" />
16
16
  </a>
17
17
  <a href="https://discord.gg/TXEbwRBvQn">
18
18
  <img alt="Discord" src="https://img.shields.io/discord/1308966753044398161?color=7389D8&label&logo=discord&logoColor=ffffff" />
19
19
  </a>
20
+ <a href="https://deepwiki.com/middleapi/orpc">
21
+ <img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki">
22
+ </a>
20
23
  </div>
21
24
 
22
25
  <h3 align="center">Typesafe APIs Made Simple 🪄</h3>
@@ -42,7 +45,7 @@
42
45
 
43
46
  ## Documentation
44
47
 
45
- You can find the full documentation [here](https://orpc.unnoq.com).
48
+ You can find the full documentation [here](https://orpc.dev).
46
49
 
47
50
  ## Packages
48
51
 
@@ -63,7 +66,7 @@ You can find the full documentation [here](https://orpc.unnoq.com).
63
66
 
64
67
  ## `@orpc/client`
65
68
 
66
- Consume your API on the client with type-safety. Read the [documentation](https://orpc.unnoq.com/docs/client/client-side) for more information.
69
+ Consume your API on the client with type-safety. Read the [documentation](https://orpc.dev/docs/client/client-side) for more information.
67
70
 
68
71
  ```ts
69
72
  import { createORPCClient } from '@orpc/client'
@@ -95,4 +98,4 @@ const client: ContractRouterClient<typeof contract> = createORPCClient(link)
95
98
 
96
99
  ## License
97
100
 
98
- Distributed under the MIT License. See [LICENSE](https://github.com/unnoq/orpc/blob/main/LICENSE) for more information.
101
+ Distributed under the MIT License. See [LICENSE](https://github.com/middleapi/orpc/blob/main/LICENSE) for more information.
@@ -1,9 +1,9 @@
1
1
  import { Interceptor } from '@orpc/shared';
2
2
  import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
3
3
  import { ToFetchRequestOptions } from '@orpc/standard-server-fetch';
4
- import { b as ClientContext, c as ClientOptions } from '../../shared/client.BOYsZIRq.mjs';
5
- import { a as StandardLinkPlugin, f as StandardLinkClient } from '../../shared/client.Bwgm6dgk.mjs';
6
- import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.Ycwr4Tuo.mjs';
4
+ import { b as ClientContext, c as ClientOptions } from '../../shared/client.i2uoJbEp.mjs';
5
+ import { a as StandardLinkPlugin, f as StandardLinkClient } from '../../shared/client.CpCa3si8.mjs';
6
+ import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.BFAVy68H.mjs';
7
7
 
8
8
  interface LinkFetchPlugin<T extends ClientContext> extends StandardLinkPlugin<T> {
9
9
  initRuntimeAdapter?(options: LinkFetchClientOptions<T>): void;
@@ -35,8 +35,8 @@ interface RPCLinkOptions<T extends ClientContext> extends LinkFetchClientOptions
35
35
  /**
36
36
  * The RPC Link communicates with the server using the RPC protocol.
37
37
  *
38
- * @see {@link https://orpc.unnoq.com/docs/client/rpc-link RPC Link Docs}
39
- * @see {@link https://orpc.unnoq.com/docs/advanced/rpc-protocol RPC Protocol Docs}
38
+ * @see {@link https://orpc.dev/docs/client/rpc-link RPC Link Docs}
39
+ * @see {@link https://orpc.dev/docs/advanced/rpc-protocol RPC Protocol Docs}
40
40
  */
41
41
  declare class RPCLink<T extends ClientContext> extends StandardRPCLink<T> {
42
42
  constructor(options: RPCLinkOptions<T>);
@@ -1,9 +1,9 @@
1
1
  import { Interceptor } from '@orpc/shared';
2
2
  import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
3
3
  import { ToFetchRequestOptions } from '@orpc/standard-server-fetch';
4
- import { b as ClientContext, c as ClientOptions } from '../../shared/client.BOYsZIRq.js';
5
- import { a as StandardLinkPlugin, f as StandardLinkClient } from '../../shared/client.BG98rYdO.js';
6
- import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.C176log5.js';
4
+ import { b as ClientContext, c as ClientOptions } from '../../shared/client.i2uoJbEp.js';
5
+ import { a as StandardLinkPlugin, f as StandardLinkClient } from '../../shared/client.2jUAqzYU.js';
6
+ import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.B3pNRBih.js';
7
7
 
8
8
  interface LinkFetchPlugin<T extends ClientContext> extends StandardLinkPlugin<T> {
9
9
  initRuntimeAdapter?(options: LinkFetchClientOptions<T>): void;
@@ -35,8 +35,8 @@ interface RPCLinkOptions<T extends ClientContext> extends LinkFetchClientOptions
35
35
  /**
36
36
  * The RPC Link communicates with the server using the RPC protocol.
37
37
  *
38
- * @see {@link https://orpc.unnoq.com/docs/client/rpc-link RPC Link Docs}
39
- * @see {@link https://orpc.unnoq.com/docs/advanced/rpc-protocol RPC Protocol Docs}
38
+ * @see {@link https://orpc.dev/docs/client/rpc-link RPC Link Docs}
39
+ * @see {@link https://orpc.dev/docs/advanced/rpc-protocol RPC Protocol Docs}
40
40
  */
41
41
  declare class RPCLink<T extends ClientContext> extends StandardRPCLink<T> {
42
42
  constructor(options: RPCLinkOptions<T>);
@@ -1,8 +1,9 @@
1
1
  import { toArray, intercept } from '@orpc/shared';
2
2
  import { toFetchRequest, toStandardLazyResponse } from '@orpc/standard-server-fetch';
3
- import { C as CompositeStandardLinkPlugin, c as StandardRPCLink } from '../../shared/client.DKmRtVO2.mjs';
3
+ import { C as CompositeStandardLinkPlugin, c as StandardRPCLink } from '../../shared/client.alKka8bo.mjs';
4
4
  import '@orpc/standard-server';
5
- import '../../shared/client.txdq_i5V.mjs';
5
+ import '../../shared/client.Cqdk_lGy.mjs';
6
+ import '../../shared/client.BLtwTQUg.mjs';
6
7
 
7
8
  class CompositeLinkFetchPlugin extends CompositeStandardLinkPlugin {
8
9
  initRuntimeAdapter(options) {
@@ -1,8 +1,9 @@
1
+ import { Value, Promisable } from '@orpc/shared';
1
2
  import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
2
- import { b as ClientContext, c as ClientOptions } from '../../shared/client.BOYsZIRq.mjs';
3
- import { f as StandardLinkClient } from '../../shared/client.Bwgm6dgk.mjs';
4
- import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.Ycwr4Tuo.mjs';
5
- import '@orpc/shared';
3
+ import { DecodedRequestMessage } from '@orpc/standard-server-peer';
4
+ import { b as ClientContext, c as ClientOptions } from '../../shared/client.i2uoJbEp.mjs';
5
+ import { f as StandardLinkClient } from '../../shared/client.CpCa3si8.mjs';
6
+ import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.BFAVy68H.mjs';
6
7
 
7
8
  /**
8
9
  * The message port used by electron in main process
@@ -11,7 +12,7 @@ interface MessagePortMainLike {
11
12
  on: <T extends string>(event: T, callback: (event?: {
12
13
  data: any;
13
14
  }) => void) => void;
14
- postMessage: (data: any) => void;
15
+ postMessage: (data: any, transfer?: any[]) => void;
15
16
  }
16
17
  /**
17
18
  * The message port used by browser extension
@@ -29,13 +30,33 @@ type SupportedMessagePort = Pick<MessagePort, 'addEventListener' | 'postMessage'
29
30
  /**
30
31
  * 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
  */
32
- type SupportedMessagePortData = string | ArrayBufferLike | Uint8Array;
33
- declare function postMessagePortMessage(port: SupportedMessagePort, data: SupportedMessagePortData): void;
33
+ type SupportedMessagePortData = any;
34
+ declare function postMessagePortMessage(port: SupportedMessagePort, data: SupportedMessagePortData, transfer?: any[]): void;
34
35
  declare function onMessagePortMessage(port: SupportedMessagePort, callback: (data: SupportedMessagePortData) => void): void;
35
36
  declare function onMessagePortClose(port: SupportedMessagePort, callback: () => void): void;
36
37
 
37
38
  interface LinkMessagePortClientOptions {
38
39
  port: SupportedMessagePort;
40
+ /**
41
+ * By default, oRPC serializes request/response messages to string/binary data before sending over message port.
42
+ * If needed, you can define the this option to utilize full power of [MessagePort: postMessage() method](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/postMessage),
43
+ * such as transferring ownership of objects to the other side or support unserializable objects like `OffscreenCanvas`.
44
+ *
45
+ * @remarks
46
+ * - return null | undefined to disable this feature
47
+ *
48
+ * @warning Make sure your message port supports `transfer` before using this feature.
49
+ * @example
50
+ * ```ts
51
+ * experimental_transfer: (message, port) => {
52
+ * const transfer = deepFindTransferableObjects(message) // implement your own logic
53
+ * return transfer.length ? transfer : null // only enable when needed
54
+ * }
55
+ * ```
56
+ *
57
+ * @see {@link https://orpc.dev/docs/adapters/message-port#transfer Message Port Transfer Docs}
58
+ */
59
+ experimental_transfer?: Value<Promisable<object[] | null | undefined>, [message: DecodedRequestMessage, port: SupportedMessagePort]>;
39
60
  }
40
61
  declare class LinkMessagePortClient<T extends ClientContext> implements StandardLinkClient<T> {
41
62
  private readonly peer;
@@ -48,8 +69,8 @@ interface RPCLinkOptions<T extends ClientContext> extends Omit<StandardRPCLinkOp
48
69
  /**
49
70
  * The RPC Link for common message port implementations.
50
71
  *
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}
72
+ * @see {@link https://orpc.dev/docs/client/rpc-link RPC Link Docs}
73
+ * @see {@link https://orpc.dev/docs/adapters/message-port Message Port Adapter Docs}
53
74
  */
54
75
  declare class RPCLink<T extends ClientContext> extends StandardRPCLink<T> {
55
76
  constructor(options: RPCLinkOptions<T>);
@@ -1,8 +1,9 @@
1
+ import { Value, Promisable } from '@orpc/shared';
1
2
  import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
2
- import { b as ClientContext, c as ClientOptions } from '../../shared/client.BOYsZIRq.js';
3
- import { f as StandardLinkClient } from '../../shared/client.BG98rYdO.js';
4
- import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.C176log5.js';
5
- import '@orpc/shared';
3
+ import { DecodedRequestMessage } from '@orpc/standard-server-peer';
4
+ import { b as ClientContext, c as ClientOptions } from '../../shared/client.i2uoJbEp.js';
5
+ import { f as StandardLinkClient } from '../../shared/client.2jUAqzYU.js';
6
+ import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.B3pNRBih.js';
6
7
 
7
8
  /**
8
9
  * The message port used by electron in main process
@@ -11,7 +12,7 @@ interface MessagePortMainLike {
11
12
  on: <T extends string>(event: T, callback: (event?: {
12
13
  data: any;
13
14
  }) => void) => void;
14
- postMessage: (data: any) => void;
15
+ postMessage: (data: any, transfer?: any[]) => void;
15
16
  }
16
17
  /**
17
18
  * The message port used by browser extension
@@ -29,13 +30,33 @@ type SupportedMessagePort = Pick<MessagePort, 'addEventListener' | 'postMessage'
29
30
  /**
30
31
  * 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
  */
32
- type SupportedMessagePortData = string | ArrayBufferLike | Uint8Array;
33
- declare function postMessagePortMessage(port: SupportedMessagePort, data: SupportedMessagePortData): void;
33
+ type SupportedMessagePortData = any;
34
+ declare function postMessagePortMessage(port: SupportedMessagePort, data: SupportedMessagePortData, transfer?: any[]): void;
34
35
  declare function onMessagePortMessage(port: SupportedMessagePort, callback: (data: SupportedMessagePortData) => void): void;
35
36
  declare function onMessagePortClose(port: SupportedMessagePort, callback: () => void): void;
36
37
 
37
38
  interface LinkMessagePortClientOptions {
38
39
  port: SupportedMessagePort;
40
+ /**
41
+ * By default, oRPC serializes request/response messages to string/binary data before sending over message port.
42
+ * If needed, you can define the this option to utilize full power of [MessagePort: postMessage() method](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/postMessage),
43
+ * such as transferring ownership of objects to the other side or support unserializable objects like `OffscreenCanvas`.
44
+ *
45
+ * @remarks
46
+ * - return null | undefined to disable this feature
47
+ *
48
+ * @warning Make sure your message port supports `transfer` before using this feature.
49
+ * @example
50
+ * ```ts
51
+ * experimental_transfer: (message, port) => {
52
+ * const transfer = deepFindTransferableObjects(message) // implement your own logic
53
+ * return transfer.length ? transfer : null // only enable when needed
54
+ * }
55
+ * ```
56
+ *
57
+ * @see {@link https://orpc.dev/docs/adapters/message-port#transfer Message Port Transfer Docs}
58
+ */
59
+ experimental_transfer?: Value<Promisable<object[] | null | undefined>, [message: DecodedRequestMessage, port: SupportedMessagePort]>;
39
60
  }
40
61
  declare class LinkMessagePortClient<T extends ClientContext> implements StandardLinkClient<T> {
41
62
  private readonly peer;
@@ -48,8 +69,8 @@ interface RPCLinkOptions<T extends ClientContext> extends Omit<StandardRPCLinkOp
48
69
  /**
49
70
  * The RPC Link for common message port implementations.
50
71
  *
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}
72
+ * @see {@link https://orpc.dev/docs/client/rpc-link RPC Link Docs}
73
+ * @see {@link https://orpc.dev/docs/adapters/message-port Message Port Adapter Docs}
53
74
  */
54
75
  declare class RPCLink<T extends ClientContext> extends StandardRPCLink<T> {
55
76
  constructor(options: RPCLinkOptions<T>);
@@ -1,11 +1,17 @@
1
- import { ClientPeer } from '@orpc/standard-server-peer';
2
- import '@orpc/shared';
3
- import { c as StandardRPCLink } from '../../shared/client.DKmRtVO2.mjs';
1
+ import { value, isObject } from '@orpc/shared';
2
+ import { experimental_ClientPeerWithoutCodec, serializeRequestMessage, encodeRequestMessage, deserializeResponseMessage, decodeResponseMessage } from '@orpc/standard-server-peer';
3
+ import { c as StandardRPCLink } from '../../shared/client.alKka8bo.mjs';
4
4
  import '@orpc/standard-server';
5
- import '../../shared/client.txdq_i5V.mjs';
5
+ import '../../shared/client.Cqdk_lGy.mjs';
6
+ import '@orpc/standard-server-fetch';
7
+ import '../../shared/client.BLtwTQUg.mjs';
6
8
 
7
- function postMessagePortMessage(port, data) {
8
- port.postMessage(data);
9
+ function postMessagePortMessage(port, data, transfer) {
10
+ if (transfer) {
11
+ port.postMessage(data, transfer);
12
+ } else {
13
+ port.postMessage(data);
14
+ }
9
15
  }
10
16
  function onMessagePortMessage(port, callback) {
11
17
  if ("addEventListener" in port) {
@@ -45,11 +51,21 @@ function onMessagePortClose(port, callback) {
45
51
  class LinkMessagePortClient {
46
52
  peer;
47
53
  constructor(options) {
48
- this.peer = new ClientPeer((message) => {
49
- return postMessagePortMessage(options.port, message);
54
+ this.peer = new experimental_ClientPeerWithoutCodec(async (message) => {
55
+ const [id, type, payload] = message;
56
+ const transfer = await value(options.experimental_transfer, message, options.port);
57
+ if (transfer) {
58
+ postMessagePortMessage(options.port, serializeRequestMessage(id, type, payload), transfer);
59
+ } else {
60
+ postMessagePortMessage(options.port, await encodeRequestMessage(id, type, payload));
61
+ }
50
62
  });
51
63
  onMessagePortMessage(options.port, async (message) => {
52
- await this.peer.message(message);
64
+ if (isObject(message)) {
65
+ await this.peer.message(deserializeResponseMessage(message));
66
+ } else {
67
+ await this.peer.message(await decodeResponseMessage(message));
68
+ }
53
69
  });
54
70
  onMessagePortClose(options.port, () => {
55
71
  this.peer.close();
@@ -64,7 +80,7 @@ class LinkMessagePortClient {
64
80
  class RPCLink extends StandardRPCLink {
65
81
  constructor(options) {
66
82
  const linkClient = new LinkMessagePortClient(options);
67
- super(linkClient, { ...options, url: "orpc:/" });
83
+ super(linkClient, { ...options, url: "http://orpc" });
68
84
  }
69
85
  }
70
86
 
@@ -1,10 +1,11 @@
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.Bwgm6dgk.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.Ycwr4Tuo.mjs';
3
- import { H as HTTPPath } from '../../shared/client.BOYsZIRq.mjs';
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.CpCa3si8.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.BFAVy68H.mjs';
3
+ import { StandardHeaders } from '@orpc/standard-server';
4
+ import { H as HTTPPath } from '../../shared/client.i2uoJbEp.mjs';
4
5
  import '@orpc/shared';
5
- import '@orpc/standard-server';
6
6
 
7
7
  declare function toHttpPath(path: readonly string[]): HTTPPath;
8
+ declare function toStandardHeaders(headers: Headers | StandardHeaders): StandardHeaders;
8
9
  declare function getMalformedResponseErrorCode(status: number): string;
9
10
 
10
- export { getMalformedResponseErrorCode, toHttpPath };
11
+ export { getMalformedResponseErrorCode, toHttpPath, toStandardHeaders };
@@ -1,10 +1,11 @@
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.BG98rYdO.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.C176log5.js';
3
- import { H as HTTPPath } from '../../shared/client.BOYsZIRq.js';
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.2jUAqzYU.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.B3pNRBih.js';
3
+ import { StandardHeaders } from '@orpc/standard-server';
4
+ import { H as HTTPPath } from '../../shared/client.i2uoJbEp.js';
4
5
  import '@orpc/shared';
5
- import '@orpc/standard-server';
6
6
 
7
7
  declare function toHttpPath(path: readonly string[]): HTTPPath;
8
+ declare function toStandardHeaders(headers: Headers | StandardHeaders): StandardHeaders;
8
9
  declare function getMalformedResponseErrorCode(status: number): string;
9
10
 
10
- export { getMalformedResponseErrorCode, toHttpPath };
11
+ export { getMalformedResponseErrorCode, toHttpPath, toStandardHeaders };
@@ -1,4 +1,6 @@
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.DKmRtVO2.mjs';
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, f as toStandardHeaders } from '../../shared/client.alKka8bo.mjs';
2
2
  import '@orpc/shared';
3
3
  import '@orpc/standard-server';
4
- import '../../shared/client.txdq_i5V.mjs';
4
+ import '../../shared/client.Cqdk_lGy.mjs';
5
+ import '@orpc/standard-server-fetch';
6
+ import '../../shared/client.BLtwTQUg.mjs';
@@ -1,7 +1,7 @@
1
1
  import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
2
- import { b as ClientContext, c as ClientOptions } from '../../shared/client.BOYsZIRq.mjs';
3
- import { f as StandardLinkClient } from '../../shared/client.Bwgm6dgk.mjs';
4
- import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.Ycwr4Tuo.mjs';
2
+ import { b as ClientContext, c as ClientOptions } from '../../shared/client.i2uoJbEp.mjs';
3
+ import { f as StandardLinkClient } from '../../shared/client.CpCa3si8.mjs';
4
+ import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.BFAVy68H.mjs';
5
5
  import '@orpc/shared';
6
6
 
7
7
  interface LinkWebsocketClientOptions {
@@ -18,8 +18,8 @@ interface RPCLinkOptions<T extends ClientContext> extends Omit<StandardRPCLinkOp
18
18
  /**
19
19
  * The RPC Link communicates with the server using the RPC protocol over WebSocket.
20
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}
21
+ * @see {@link https://orpc.dev/docs/client/rpc-link RPC Link Docs}
22
+ * @see {@link https://orpc.dev/docs/adapters/websocket WebSocket Adapter Docs}
23
23
  */
24
24
  declare class RPCLink<T extends ClientContext> extends StandardRPCLink<T> {
25
25
  constructor(options: RPCLinkOptions<T>);
@@ -1,7 +1,7 @@
1
1
  import { StandardRequest, StandardLazyResponse } from '@orpc/standard-server';
2
- import { b as ClientContext, c as ClientOptions } from '../../shared/client.BOYsZIRq.js';
3
- import { f as StandardLinkClient } from '../../shared/client.BG98rYdO.js';
4
- import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.C176log5.js';
2
+ import { b as ClientContext, c as ClientOptions } from '../../shared/client.i2uoJbEp.js';
3
+ import { f as StandardLinkClient } from '../../shared/client.2jUAqzYU.js';
4
+ import { f as StandardRPCLinkOptions, g as StandardRPCLink } from '../../shared/client.B3pNRBih.js';
5
5
  import '@orpc/shared';
6
6
 
7
7
  interface LinkWebsocketClientOptions {
@@ -18,8 +18,8 @@ interface RPCLinkOptions<T extends ClientContext> extends Omit<StandardRPCLinkOp
18
18
  /**
19
19
  * The RPC Link communicates with the server using the RPC protocol over WebSocket.
20
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}
21
+ * @see {@link https://orpc.dev/docs/client/rpc-link RPC Link Docs}
22
+ * @see {@link https://orpc.dev/docs/adapters/websocket WebSocket Adapter Docs}
23
23
  */
24
24
  declare class RPCLink<T extends ClientContext> extends StandardRPCLink<T> {
25
25
  constructor(options: RPCLinkOptions<T>);
@@ -1,8 +1,10 @@
1
1
  import { readAsBuffer } from '@orpc/shared';
2
2
  import { ClientPeer } from '@orpc/standard-server-peer';
3
- import { c as StandardRPCLink } from '../../shared/client.DKmRtVO2.mjs';
3
+ import { c as StandardRPCLink } from '../../shared/client.alKka8bo.mjs';
4
4
  import '@orpc/standard-server';
5
- import '../../shared/client.txdq_i5V.mjs';
5
+ import '../../shared/client.Cqdk_lGy.mjs';
6
+ import '@orpc/standard-server-fetch';
7
+ import '../../shared/client.BLtwTQUg.mjs';
6
8
 
7
9
  const WEBSOCKET_CONNECTING = 0;
8
10
  class LinkWebsocketClient {
@@ -38,7 +40,7 @@ class LinkWebsocketClient {
38
40
  class RPCLink extends StandardRPCLink {
39
41
  constructor(options) {
40
42
  const linkClient = new LinkWebsocketClient(options);
41
- super(linkClient, { ...options, url: "orpc:/" });
43
+ super(linkClient, { ...options, url: "http://orpc" });
42
44
  }
43
45
  }
44
46
 
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
- import { N as NestedClient, C as ClientLink, I as InferClientContext, a as ClientPromiseResult, b as ClientContext, F as FriendlyClientOptions, c as ClientOptions, d as Client, e as ClientRest } from './shared/client.BOYsZIRq.mjs';
2
- export { f as HTTPMethod, H as HTTPPath } from './shared/client.BOYsZIRq.mjs';
3
- import { MaybeOptionalOptions, ThrowableError, Promisable, AsyncIteratorClass } from '@orpc/shared';
4
- export { AsyncIteratorClass, EventPublisher, EventPublisherOptions, EventPublisherSubscribeIteratorOptions, Registry, ThrowableError, asyncIteratorToStream as eventIteratorToStream, onError, onFinish, onStart, onSuccess, streamToAsyncIteratorClass as streamToEventIterator } from '@orpc/shared';
1
+ import { N as NestedClient, C as ClientLink, I as InferClientContext, a as ClientPromiseResult, b as ClientContext, F as FriendlyClientOptions, c as ClientOptions, d as Client, e as ClientRest } from './shared/client.i2uoJbEp.mjs';
2
+ export { f as HTTPMethod, H as HTTPPath, h as InferClientBodyInputs, j as InferClientBodyOutputs, l as InferClientErrorUnion, k as InferClientErrors, g as InferClientInputs, i as InferClientOutputs } from './shared/client.i2uoJbEp.mjs';
3
+ import { MaybeOptionalOptions, ThrowableError, OnFinishState, Promisable, AsyncIteratorClass } from '@orpc/shared';
4
+ export { AsyncIteratorClass, EventPublisher, EventPublisherOptions, EventPublisherSubscribeIteratorOptions, Registry, ThrowableError, asyncIteratorToStream as eventIteratorToStream, asyncIteratorToUnproxiedDataStream as eventIteratorToUnproxiedDataStream, onError, onFinish, onStart, onSuccess, streamToAsyncIteratorClass as streamToEventIterator } from '@orpc/shared';
5
5
  export { ErrorEvent } from '@orpc/standard-server';
6
6
 
7
7
  interface createORPCClientOptions {
@@ -13,7 +13,7 @@ interface createORPCClientOptions {
13
13
  /**
14
14
  * Create a oRPC client-side client from a link.
15
15
  *
16
- * @see {@link https://orpc.unnoq.com/docs/client/client-side Client-side Client Docs}
16
+ * @see {@link https://orpc.dev/docs/client/client-side Client-side Client Docs}
17
17
  */
18
18
  declare function createORPCClient<T extends NestedClient<any>>(link: ClientLink<InferClientContext<T>>, options?: createORPCClientOptions): T;
19
19
 
@@ -115,6 +115,19 @@ declare class ORPCError<TCode extends ORPCErrorCode, TData> extends Error {
115
115
  readonly data: TData;
116
116
  constructor(code: TCode, ...rest: MaybeOptionalOptions<ORPCErrorOptions<TData>>);
117
117
  toJSON(): ORPCErrorJSON<TCode, TData>;
118
+ /**
119
+ * Workaround for Next.js where different contexts use separate
120
+ * dependency graphs, causing multiple ORPCError constructors existing and breaking
121
+ * `instanceof` checks across contexts.
122
+ *
123
+ * This is particularly problematic with "Optimized SSR", where orpc-client
124
+ * executes in one context but is invoked from another. When an error is thrown
125
+ * in the execution context, `instanceof ORPCError` checks fail in the
126
+ * invocation context due to separate class constructors.
127
+ *
128
+ * @todo Remove this and related code if Next.js resolves the multiple dependency graph issue.
129
+ */
130
+ static [Symbol.hasInstance](instance: unknown): boolean;
118
131
  }
119
132
  type ORPCErrorJSON<TCode extends string, TData> = Pick<ORPCError<TCode, TData>, 'defined' | 'code' | 'status' | 'message' | 'data'>;
120
133
  declare function isDefinedError<T>(error: T): error is Extract<T, ORPCError<any, any>>;
@@ -143,10 +156,39 @@ type SafeResult<TOutput, TError> = [error: null, data: TOutput, isDefined: false
143
156
  * Works like try/catch, but can infer error types.
144
157
  *
145
158
  * @info support both tuple `[error, data, isDefined, isSuccess]` and object `{ error, data, isDefined, isSuccess }` styles.
146
- * @see {@link https://orpc.unnoq.com/docs/client/error-handling Client Error Handling Docs}
159
+ * @see {@link https://orpc.dev/docs/client/error-handling Client Error Handling Docs}
147
160
  */
148
161
  declare function safe<TOutput, TError = ThrowableError>(promise: ClientPromiseResult<TOutput, TError>): Promise<SafeResult<TOutput, TError>>;
149
162
  declare function resolveFriendlyClientOptions<T extends ClientContext>(options: FriendlyClientOptions<T>): ClientOptions<T>;
163
+ interface ConsumeEventIteratorOptions<T, TReturn, TError> {
164
+ /**
165
+ * Called on each event
166
+ */
167
+ onEvent: (event: T) => void;
168
+ /**
169
+ * Called once error happens
170
+ */
171
+ onError?: (error: TError) => void;
172
+ /**
173
+ * Called once event iterator is done
174
+ *
175
+ * @info If iterator is canceled, `undefined` can be passed on success
176
+ */
177
+ onSuccess?: (value: TReturn | undefined) => void;
178
+ /**
179
+ * Called once after onError or onSuccess
180
+ *
181
+ * @info If iterator is canceled, `undefined` can be passed on success
182
+ */
183
+ onFinish?: (state: OnFinishState<TReturn | undefined, TError>) => void;
184
+ }
185
+ /**
186
+ * Consumes an event iterator with lifecycle callbacks
187
+ *
188
+ * @warning If no `onError` or `onFinish` is provided, unhandled rejections will be thrown
189
+ * @return unsubscribe callback
190
+ */
191
+ declare function consumeEventIterator<T, TReturn, TError = ThrowableError>(iterator: AsyncIterator<T, TReturn> | ClientPromiseResult<AsyncIterator<T, TReturn>, TError>, options: ConsumeEventIteratorOptions<T, TReturn, TError>): () => Promise<void>;
150
192
 
151
193
  type SafeClient<T extends NestedClient<any>> = T extends Client<infer UContext, infer UInput, infer UOutput, infer UError> ? (...rest: ClientRest<UContext, UInput>) => Promise<SafeResult<UOutput, UError>> : {
152
194
  [K in keyof T]: T[K] extends NestedClient<any> ? SafeClient<T[K]> : never;
@@ -160,15 +202,18 @@ type SafeClient<T extends NestedClient<any>> = T extends Client<infer UContext,
160
202
  * const { error, data, isDefined } = await safeClient.doSomething({ id: '123' })
161
203
  * ```
162
204
  *
163
- * @see {@link https://orpc.unnoq.com/docs/client/error-handling#using-createsafeclient Safe Client Docs}
205
+ * @see {@link https://orpc.dev/docs/client/error-handling#using-createsafeclient Safe Client Docs}
164
206
  */
165
207
  declare function createSafeClient<T extends NestedClient<any>>(client: T): SafeClient<T>;
166
208
 
209
+ declare const ORPC_CLIENT_PACKAGE_NAME = "@orpc/client";
210
+ declare const ORPC_CLIENT_PACKAGE_VERSION = "0.0.0-next.dc2afcb";
211
+
167
212
  /**
168
213
  * DynamicLink provides a way to dynamically resolve and delegate calls to other ClientLinks
169
214
  * based on the request path, input, and context.
170
215
  *
171
- * @see {@link https://orpc.unnoq.com/docs/client/dynamic-link Dynamic Link Docs}
216
+ * @see {@link https://orpc.dev/docs/client/dynamic-link Dynamic Link Docs}
172
217
  */
173
218
  declare class DynamicLink<TClientContext extends ClientContext> implements ClientLink<TClientContext> {
174
219
  private readonly linkResolver;
@@ -181,5 +226,5 @@ declare function mapEventIterator<TYield, TReturn, TNext, TMap = TYield | TRetur
181
226
  error: (error: unknown) => Promise<unknown>;
182
227
  }): AsyncIteratorClass<TMap, TMap, TNext>;
183
228
 
184
- export { COMMON_ORPC_ERROR_DEFS, Client, ClientContext, ClientLink, ClientOptions, ClientPromiseResult, ClientRest, DynamicLink, FriendlyClientOptions, InferClientContext, NestedClient, ORPCError, createORPCClient, createORPCErrorFromJson, createSafeClient, fallbackORPCErrorMessage, fallbackORPCErrorStatus, isDefinedError, isORPCErrorJson, isORPCErrorStatus, mapEventIterator, resolveFriendlyClientOptions, safe, toORPCError };
185
- export type { CommonORPCErrorCode, ORPCErrorCode, ORPCErrorJSON, ORPCErrorOptions, SafeClient, SafeResult, createORPCClientOptions };
229
+ export { COMMON_ORPC_ERROR_DEFS, Client, ClientContext, ClientLink, ClientOptions, ClientPromiseResult, ClientRest, DynamicLink, FriendlyClientOptions, InferClientContext, NestedClient, ORPCError, ORPC_CLIENT_PACKAGE_NAME, ORPC_CLIENT_PACKAGE_VERSION, consumeEventIterator, createORPCClient, createORPCErrorFromJson, createSafeClient, fallbackORPCErrorMessage, fallbackORPCErrorStatus, isDefinedError, isORPCErrorJson, isORPCErrorStatus, mapEventIterator, resolveFriendlyClientOptions, safe, toORPCError };
230
+ export type { CommonORPCErrorCode, ConsumeEventIteratorOptions, ORPCErrorCode, ORPCErrorJSON, ORPCErrorOptions, SafeClient, SafeResult, createORPCClientOptions };