@orpc/standard-server-peer 0.0.0-next.6a2fc81 β 0.0.0-next.6bc474e
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 +122 -12
- package/dist/index.d.mts +123 -39
- package/dist/index.d.ts +123 -39
- package/dist/index.mjs +158 -61
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<image align="center" src="https://orpc.
|
|
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/
|
|
9
|
-
<img alt="codecov" src="https://codecov.io/gh/
|
|
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/standard-server-peer">
|
|
12
12
|
<img alt="weekly downloads" src="https://img.shields.io/npm/dw/%40orpc%2Fstandard-server-peer?logo=npm" />
|
|
13
13
|
</a>
|
|
14
|
-
<a href="https://github.com/
|
|
15
|
-
<img alt="MIT License" src="https://img.shields.io/github/license/
|
|
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/
|
|
20
|
+
<a href="https://deepwiki.com/middleapi/orpc">
|
|
21
21
|
<img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki">
|
|
22
22
|
</a>
|
|
23
23
|
</div>
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
|
|
46
46
|
## Documentation
|
|
47
47
|
|
|
48
|
-
You can find the full documentation [here](https://orpc.
|
|
48
|
+
You can find the full documentation [here](https://orpc.dev).
|
|
49
49
|
|
|
50
50
|
## Packages
|
|
51
51
|
|
|
@@ -70,12 +70,122 @@ Provides a standard interface for oRPC server adapters to interact with connecte
|
|
|
70
70
|
|
|
71
71
|
## Sponsors
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
If you find oRPC valuable and would like to support its development, you can do so here: [GitHub Sponsors](https://github.com/sponsors/dinwwwh).
|
|
74
|
+
|
|
75
|
+
### π Platinum Sponsor
|
|
76
|
+
|
|
77
|
+
<table>
|
|
78
|
+
<tr>
|
|
79
|
+
<td align="center"><a href="https://screenshotone.com/?ref=orpc" target="_blank" rel="noopener" title="ScreenshotOne.com"><img src="https://avatars.githubusercontent.com/u/97035603?v=4" width="279" alt="ScreenshotOne.com"/><br />ScreenshotOne.com</a></td>
|
|
80
|
+
</tr>
|
|
81
|
+
</table>
|
|
82
|
+
|
|
83
|
+
### π₯ Gold Sponsor
|
|
84
|
+
|
|
85
|
+
<table>
|
|
86
|
+
<tr>
|
|
87
|
+
<td align="center"><a href="https://zuplo.link/orpc?ref=orpc" target="_blank" rel="noopener" title="Zuplo"><img src="https://avatars.githubusercontent.com/u/85497839?v=4" width="209" alt="Zuplo"/><br />Zuplo</a></td>
|
|
88
|
+
</tr>
|
|
89
|
+
</table>
|
|
90
|
+
|
|
91
|
+
### π₯ Silver Sponsor
|
|
92
|
+
|
|
93
|
+
<table>
|
|
94
|
+
<tr>
|
|
95
|
+
<td align="center"><a href="https://misskey.io/?ref=orpc" target="_blank" rel="noopener" title="ζδΈγγ"><img src="https://avatars.githubusercontent.com/u/37681609?u=0dd4c7e4ba937cbb52b068c55914b1d8164dc0c7&v=4" width="167" alt="ζδΈγγ"/><br />ζδΈγγ</a></td>
|
|
96
|
+
<td align="center"><a href="https://github.com/christ12938?ref=orpc" target="_blank" rel="noopener" title="christ12938"><img src="https://avatars.githubusercontent.com/u/25758598?v=4" width="167" alt="christ12938"/><br />christ12938</a></td>
|
|
97
|
+
</tr>
|
|
98
|
+
</table>
|
|
99
|
+
|
|
100
|
+
### Generous Sponsors
|
|
101
|
+
|
|
102
|
+
<table>
|
|
103
|
+
<tr>
|
|
104
|
+
<td align="center"><a href="https://github.com/ln-markets?ref=orpc" target="_blank" rel="noopener" title="LN Markets"><img src="https://avatars.githubusercontent.com/u/70597625?v=4" width="139" alt="LN Markets"/><br />LN Markets</a></td>
|
|
105
|
+
</tr>
|
|
106
|
+
</table>
|
|
107
|
+
|
|
108
|
+
### Sponsors
|
|
109
|
+
|
|
110
|
+
<table>
|
|
111
|
+
<tr>
|
|
112
|
+
<td align="center"><a href="https://github.com/hrmcdonald?ref=orpc" target="_blank" rel="noopener" title="Reece McDonald"><img src="https://avatars.githubusercontent.com/u/39349270?v=4" width="119" alt="Reece McDonald"/><br />Reece McDonald</a></td>
|
|
113
|
+
<td align="center"><a href="https://github.com/u1-liquid?ref=orpc" target="_blank" rel="noopener" title="γγγγγ¨γΌγ«γ
"><img src="https://avatars.githubusercontent.com/u/17376330?u=de3353804be889f009f7e0a1582daf04d0ab292d&v=4" width="119" alt="γγγγγ¨γΌγ«γ
"/><br />γγγγγ¨γΌγ«γ
</a></td>
|
|
114
|
+
<td align="center"><a href="https://github.com/nicognaW?ref=orpc" target="_blank" rel="noopener" title="nk"><img src="https://avatars.githubusercontent.com/u/66731869?u=4699bda3a9092d3ec34fbd959450767bcc8b8b6d&v=4" width="119" alt="nk"/><br />nk</a></td>
|
|
115
|
+
<td align="center"><a href="https://github.com/supastarter?ref=orpc" target="_blank" rel="noopener" title="supastarter"><img src="https://avatars.githubusercontent.com/u/110960143?v=4" width="119" alt="supastarter"/><br />supastarter</a></td>
|
|
116
|
+
<td align="center"><a href="https://github.com/divmgl?ref=orpc" target="_blank" rel="noopener" title="Dexter Miguel"><img src="https://avatars.githubusercontent.com/u/5452298?u=645993204be8696c085ecf0d228c3062efe2ed65&v=4" width="119" alt="Dexter Miguel"/><br />Dexter Miguel</a></td>
|
|
117
|
+
<td align="center"><a href="https://github.com/herrfugbaum?ref=orpc" target="_blank" rel="noopener" title="herrfugbaum"><img src="https://avatars.githubusercontent.com/u/12859776?u=644dc1666d0220bc0468eb0de3c56b919f635b16&v=4" width="119" alt="herrfugbaum"/><br />herrfugbaum</a></td>
|
|
118
|
+
<td align="center"><a href="https://github.com/ryota-murakami?ref=orpc" target="_blank" rel="noopener" title="Ryota Murakami"><img src="https://avatars.githubusercontent.com/u/5501268?u=599389e03340734325726ca3f8f423c021d47d7f&v=4" width="119" alt="Ryota Murakami"/><br />Ryota Murakami</a></td>
|
|
119
|
+
</tr>
|
|
120
|
+
<tr>
|
|
121
|
+
<td align="center"><a href="https://github.com/dcramer?ref=orpc" target="_blank" rel="noopener" title="David Cramer"><img src="https://avatars.githubusercontent.com/u/23610?v=4" width="119" alt="David Cramer"/><br />David Cramer</a></td>
|
|
122
|
+
<td align="center"><a href="https://github.com/valerii15298?ref=orpc" target="_blank" rel="noopener" title="Valerii Petryniak"><img src="https://avatars.githubusercontent.com/u/44531564?u=88ac74d9bacd20401518441907acad21063cd397&v=4" width="119" alt="Valerii Petryniak"/><br />Valerii Petryniak</a></td>
|
|
123
|
+
<td align="center"><a href="https://github.com/happyboy2022?ref=orpc" target="_blank" rel="noopener" title="happyboy"><img src="https://avatars.githubusercontent.com/u/103669586?u=65b49c4b893ed3703909fbb3a7a22313f3f9c121&v=4" width="119" alt="happyboy"/><br />happyboy</a></td>
|
|
124
|
+
<td align="center"><a href="https://github.com/letstri?ref=orpc" target="_blank" rel="noopener" title="Valerii Strilets"><img src="https://avatars.githubusercontent.com/u/13253748?u=c7b10399ccc8f8081e24db94ec32cd9858e86ac3&v=4" width="119" alt="Valerii Strilets"/><br />Valerii Strilets</a></td>
|
|
125
|
+
<td align="center"><a href="https://github.com/K-Mistele?ref=orpc" target="_blank" rel="noopener" title="Kyle Mistele"><img src="https://avatars.githubusercontent.com/u/18430555?u=3afebeb81de666e35aaac3ed46f14159d7603ffb&v=4" width="119" alt="Kyle Mistele"/><br />Kyle Mistele</a></td>
|
|
126
|
+
<td align="center"><a href="https://github.com/andrewpeters9?ref=orpc" target="_blank" rel="noopener" title="Andrew Peters"><img src="https://avatars.githubusercontent.com/u/36251325?v=4" width="119" alt="Andrew Peters"/><br />Andrew Peters</a></td>
|
|
127
|
+
<td align="center"><a href="https://github.com/R44VC0RP?ref=orpc" target="_blank" rel="noopener" title="Ryan Vogel"><img src="https://avatars.githubusercontent.com/u/89211796?u=1857347b9787d8d8a7ea5bfc333f96be92d5a683&v=4" width="119" alt="Ryan Vogel"/><br />Ryan Vogel</a></td>
|
|
128
|
+
</tr>
|
|
129
|
+
<tr>
|
|
130
|
+
<td align="center"><a href="https://github.com/peter-adam-dy?ref=orpc" target="_blank" rel="noopener" title="Peter Adam"><img src="https://avatars.githubusercontent.com/u/132129459?u=4f3dbbb3b443990b56acb7d6a5d11ed2c555f6db&v=4" width="119" alt="Peter Adam"/><br />Peter Adam</a></td>
|
|
131
|
+
<td align="center"><a href="https://github.com/yukimotochern?ref=orpc" target="_blank" rel="noopener" title="Chen, Zhi-Yuan"><img src="https://avatars.githubusercontent.com/u/20896173?u=945c33fc21725e4d566a0d02afc54b136ca1d67a&v=4" width="119" alt="Chen, Zhi-Yuan"/><br />Chen, Zhi-Yuan</a></td>
|
|
132
|
+
<td align="center"><a href="https://github.com/Ryanjso?ref=orpc" target="_blank" rel="noopener" title="Ryan Soderberg"><img src="https://avatars.githubusercontent.com/u/39172778?u=5ed913c31d57e7221b75784abcad48c7ebddde27&v=4" width="119" alt="Ryan Soderberg"/><br />Ryan Soderberg</a></td>
|
|
133
|
+
</tr>
|
|
134
|
+
</table>
|
|
135
|
+
|
|
136
|
+
### Backers
|
|
137
|
+
|
|
138
|
+
<table>
|
|
139
|
+
<tr>
|
|
140
|
+
<td align="center"><a href="https://github.com/rhinodavid?ref=orpc" target="_blank" rel="noopener" title="David Walsh"><img src="https://avatars.githubusercontent.com/u/5778036?u=b5521f07d2f88c3db2a0dae62b5f2f8357214af0&v=4" width="104" alt="David Walsh"/><br />David Walsh</a></td>
|
|
141
|
+
<td align="center"><a href="https://github.com/Robbe95?ref=orpc" target="_blank" rel="noopener" title="Robbe Vaes"><img src="https://avatars.githubusercontent.com/u/44748019?u=e0232402c045ad4eac7cbd217f1f47e083103b89&v=4" width="104" alt="Robbe Vaes"/><br />Robbe Vaes</a></td>
|
|
142
|
+
<td align="center"><a href="https://github.com/aidansunbury?ref=orpc" target="_blank" rel="noopener" title="Aidan Sunbury"><img src="https://avatars.githubusercontent.com/u/64103161?v=4" width="104" alt="Aidan Sunbury"/><br />Aidan Sunbury</a></td>
|
|
143
|
+
<td align="center"><a href="https://github.com/soonoo?ref=orpc" target="_blank" rel="noopener" title="soonoo"><img src="https://avatars.githubusercontent.com/u/5436405?u=5d0b4aa955c87e30e6bda7f0cccae5402da99528&v=4" width="104" alt="soonoo"/><br />soonoo</a></td>
|
|
144
|
+
<td align="center"><a href="https://github.com/kporten?ref=orpc" target="_blank" rel="noopener" title="Kevin Porten"><img src="https://avatars.githubusercontent.com/u/1839345?u=dc2263d5cfe0d927ce1a0be04a1d55dd6b55405c&v=4" width="104" alt="Kevin Porten"/><br />Kevin Porten</a></td>
|
|
145
|
+
<td align="center"><a href="https://github.com/pumpkinlink?ref=orpc" target="_blank" rel="noopener" title="Denis"><img src="https://avatars.githubusercontent.com/u/11864620?u=5f47bbe6c65d0f6f5cf011021490238e4b0593d0&v=4" width="104" alt="Denis"/><br />Denis</a></td>
|
|
146
|
+
<td align="center"><a href="https://github.com/christopher-kapic?ref=orpc" target="_blank" rel="noopener" title="Christopher Kapic"><img src="https://avatars.githubusercontent.com/u/59740769?v=4" width="104" alt="Christopher Kapic"/><br />Christopher Kapic</a></td>
|
|
147
|
+
<td align="center"><a href="https://github.com/thomasballinger?ref=orpc" target="_blank" rel="noopener" title="Tom Ballinger"><img src="https://avatars.githubusercontent.com/u/458879?u=4b045ac75d721b6ac2b42a74d7d37f61f0414031&v=4" width="104" alt="Tom Ballinger"/><br />Tom Ballinger</a></td>
|
|
148
|
+
</tr>
|
|
149
|
+
<tr>
|
|
150
|
+
<td align="center"><a href="https://github.com/SSam0419?ref=orpc" target="_blank" rel="noopener" title="Sam"><img src="https://avatars.githubusercontent.com/u/102863520?u=3c89611f549d5070be232eb4532f690c8f2e7a65&v=4" width="104" alt="Sam"/><br />Sam</a></td>
|
|
151
|
+
<td align="center"><a href="https://github.com/Titoine?ref=orpc" target="_blank" rel="noopener" title="Titoine"><img src="https://avatars.githubusercontent.com/u/3514286?u=1bb1e86b0c99c8a1121372e56d51a177eea12191&v=4" width="104" alt="Titoine"/><br />Titoine</a></td>
|
|
152
|
+
<td align="center"><a href="https://github.com/Mnigos?ref=orpc" target="_blank" rel="noopener" title="Igor Makowski"><img src="https://avatars.githubusercontent.com/u/56691628?u=ee8c879478f7c151b9156aef6c74243fa3e247a8&v=4" width="104" alt="Igor Makowski"/><br />Igor Makowski</a></td>
|
|
153
|
+
<td align="center"><a href="https://github.com/steelbrain?ref=orpc" target="_blank" rel="noopener" title="Anees Iqbal"><img src="https://avatars.githubusercontent.com/u/4278113?u=22b80b5399eed68ac76cd58b02961b0481f1db11&v=4" width="104" alt="Anees Iqbal"/><br />Anees Iqbal</a></td>
|
|
154
|
+
<td align="center"><a href="https://github.com/piscis?ref=orpc" target="_blank" rel="noopener" title="Alex"><img src="https://avatars.githubusercontent.com/u/326163?u=b245f368bd940cf51d08c0b6bf55f8257f359437&v=4" width="104" alt="Alex"/><br />Alex</a></td>
|
|
155
|
+
</tr>
|
|
156
|
+
</table>
|
|
157
|
+
|
|
158
|
+
### Past Sponsors
|
|
159
|
+
|
|
160
|
+
<p>
|
|
161
|
+
<a href="https://github.com/MrMaxie?ref=orpc" target="_blank" rel="noopener" title="Maxie"><img src="https://avatars.githubusercontent.com/u/3857836?u=5e6b57973d4385d655663ffdd836e487856f2984&v=4" width="32" height="32" alt="Maxie" /></a>
|
|
162
|
+
<a href="https://github.com/Stijn-Timmer?ref=orpc" target="_blank" rel="noopener" title="Stijn Timmer"><img src="https://avatars.githubusercontent.com/u/100147665?u=106b2c18e9c98a61861b4ee7fc100f5b9906a6c9&v=4" width="32" height="32" alt="Stijn Timmer" /></a>
|
|
163
|
+
<a href="https://github.com/motopods?ref=orpc" target="_blank" rel="noopener" title="motopods"><img src="https://avatars.githubusercontent.com/u/58200641?u=18833983d65b481ae90a4adec2373064ec58bcf3&v=4" width="32" height="32" alt="motopods" /></a>
|
|
164
|
+
<a href="https://github.com/franciscohermida?ref=orpc" target="_blank" rel="noopener" title="Francisco Hermida"><img src="https://avatars.githubusercontent.com/u/483242?u=bbcbc80eb9d8781ff401f7dafc3b59cd7bea0561&v=4" width="32" height="32" alt="Francisco Hermida" /></a>
|
|
165
|
+
<a href="https://github.com/theoludwig?ref=orpc" target="_blank" rel="noopener" title="ThΓ©o LUDWIG"><img src="https://avatars.githubusercontent.com/u/25207499?u=a6a9653725a2f574c07893748806668e0598cdbe&v=4" width="32" height="32" alt="ThΓ©o LUDWIG" /></a>
|
|
166
|
+
<a href="https://github.com/abhay-ramesh?ref=orpc" target="_blank" rel="noopener" title="Abhay Ramesh"><img src="https://avatars.githubusercontent.com/u/66196314?u=c5c2b0327b26606c2efcfaf17046ab18c3d25c57&v=4" width="32" height="32" alt="Abhay Ramesh" /></a>
|
|
167
|
+
<a href="https://github.com/shr-ink?ref=orpc" target="_blank" rel="noopener" title="shr.ink oΓΌ"><img src="https://avatars.githubusercontent.com/u/139700438?v=4" width="32" height="32" alt="shr.ink oΓΌ" /></a>
|
|
168
|
+
<a href="https://github.com/johngerome?ref=orpc" target="_blank" rel="noopener" title="0x4e32"><img src="https://avatars.githubusercontent.com/u/2002000?u=24e8dd943cfc862aa284d858a023532c75071ade&v=4" width="32" height="32" alt="0x4e32" /></a>
|
|
169
|
+
<a href="https://github.com/yzuyr?ref=orpc" target="_blank" rel="noopener" title="Ryuz"><img src="https://avatars.githubusercontent.com/u/196539378?u=d38374588d219b6748b16406982f6559411466d4&v=4" width="32" height="32" alt="Ryuz" /></a>
|
|
170
|
+
<a href="https://github.com/YiCChi?ref=orpc" target="_blank" rel="noopener" title="yicchi"><img src="https://avatars.githubusercontent.com/u/86967274?u=6c2756f09fe15dd94d572f560e979cd157982852&v=4" width="32" height="32" alt="yicchi" /></a>
|
|
171
|
+
<a href="https://github.com/cloudycotton?ref=orpc" target="_blank" rel="noopener" title="Saksham"><img src="https://avatars.githubusercontent.com/u/168998965?u=9b9634a5aed66a51c1b880663272725b00b92b14&v=4" width="32" height="32" alt="Saksham" /></a>
|
|
172
|
+
<a href="https://github.com/hrynevychroman?ref=orpc" target="_blank" rel="noopener" title="Roman Hrynevych"><img src="https://avatars.githubusercontent.com/u/82209198?u=1a1d111ab3d589855b9cc8a7fefb1b5c6a4fbbaf&v=4" width="32" height="32" alt="Roman Hrynevych" /></a>
|
|
173
|
+
<a href="https://github.com/rokitgg?ref=orpc" target="_blank" rel="noopener" title="rokitg"><img src="https://avatars.githubusercontent.com/u/125133357?u=06c74aefaa2236b06a2e5fba5a5c612339f45912&v=4" width="32" height="32" alt="rokitg" /></a>
|
|
174
|
+
<a href="https://github.com/omarkhatibgg?ref=orpc" target="_blank" rel="noopener" title="Omar Khatib"><img src="https://avatars.githubusercontent.com/u/9054278?u=afbba7331b85c51b8eee4130f5fd31b1017dc919&v=4" width="32" height="32" alt="Omar Khatib" /></a>
|
|
175
|
+
<a href="https://github.com/YuSabo90002?ref=orpc" target="_blank" rel="noopener" title="Yu-Sabo"><img src="https://avatars.githubusercontent.com/u/13120582?v=4" width="32" height="32" alt="Yu-Sabo" /></a>
|
|
176
|
+
<a href="https://github.com/bapspatil?ref=orpc" target="_blank" rel="noopener" title="Bapusaheb Patil"><img src="https://avatars.githubusercontent.com/u/16699418?v=4" width="32" height="32" alt="Bapusaheb Patil" /></a>
|
|
177
|
+
<a href="https://github.com/ripgrim?ref=orpc" target="_blank" rel="noopener" title="grim"><img src="https://avatars.githubusercontent.com/u/75869731?u=b17c42ec2309552fdb822a86b25a2f99146a4d72&v=4" width="32" height="32" alt="grim" /></a>
|
|
178
|
+
<a href="https://github.com/nelsonlaidev?ref=orpc" target="_blank" rel="noopener" title="Nelson Lai"><img src="https://avatars.githubusercontent.com/u/75498339?u=2fc0e0b95dd184c5ffb744df977cb15a18b60672&v=4" width="32" height="32" alt="Nelson Lai" /></a>
|
|
179
|
+
<a href="https://github.com/nguyenlc1993?ref=orpc" target="_blank" rel="noopener" title="LΓͺ Cao NguyΓͺn"><img src="https://avatars.githubusercontent.com/u/13871971?u=83c8b69d9e35b589c4e1f066cc113b1d9461386f&v=4" width="32" height="32" alt="LΓͺ Cao NguyΓͺn" /></a>
|
|
180
|
+
<a href="https://github.com/wobsoriano?ref=orpc" target="_blank" rel="noopener" title="Robert Soriano"><img src="https://avatars.githubusercontent.com/u/13049130?u=6d72104182e7c9ed25934815313fb69107332111&v=4" width="32" height="32" alt="Robert Soriano" /></a>
|
|
181
|
+
<a href="https://github.com/SKostyukovich?ref=orpc" target="_blank" rel="noopener" title="SKostyukovich"><img src="https://avatars.githubusercontent.com/u/10700067?v=4" width="32" height="32" alt="SKostyukovich" /></a>
|
|
182
|
+
<a href="https://github.com/FabworksHQ?ref=orpc" target="_blank" rel="noopener" title="Fabworks"><img src="https://avatars.githubusercontent.com/u/160179500?v=4" width="32" height="32" alt="Fabworks" /></a>
|
|
183
|
+
<a href="https://github.com/NovakAnton?ref=orpc" target="_blank" rel="noopener" title="Novak Antonijevic"><img src="https://avatars.githubusercontent.com/u/157126729?u=ae49fa22292d55c0434ff0ca008206155b18663b&v=4" width="32" height="32" alt="Novak Antonijevic" /></a>
|
|
184
|
+
<a href="https://github.com/laduniestu?ref=orpc" target="_blank" rel="noopener" title="Laduni Estu Syalwa"><img src="https://avatars.githubusercontent.com/u/44757637?u=a2fc1ea8f7d827a96721176f79d30592d1c48059&v=4" width="32" height="32" alt="Laduni Estu Syalwa" /></a>
|
|
185
|
+
<a href="https://github.com/illarionvk?ref=orpc" target="_blank" rel="noopener" title="Illarion Koperski"><img src="https://avatars.githubusercontent.com/u/5012724?u=7cfa13652f7ac5fb3c56d880e3eb3fbe40c3ea34&v=4" width="32" height="32" alt="Illarion Koperski" /></a>
|
|
186
|
+
<a href="https://github.com/Scrumplex?ref=orpc" target="_blank" rel="noopener" title="Sefa Eyeoglu"><img src="https://avatars.githubusercontent.com/u/11587657?u=ab503582165c0bbff0cca47ce31c9450bb1553c9&v=4" width="32" height="32" alt="Sefa Eyeoglu" /></a>
|
|
77
187
|
</p>
|
|
78
188
|
|
|
79
189
|
## License
|
|
80
190
|
|
|
81
|
-
Distributed under the MIT License. See [LICENSE](https://github.com/
|
|
191
|
+
Distributed under the MIT License. See [LICENSE](https://github.com/middleapi/orpc/blob/main/LICENSE) for more information.
|
package/dist/index.d.mts
CHANGED
|
@@ -1,11 +1,100 @@
|
|
|
1
1
|
import { Promisable, AsyncIdQueueCloseOptions as AsyncIdQueueCloseOptions$1, SetSpanErrorOptions, AsyncIteratorClassCleanupFn, AsyncIteratorClass } from '@orpc/shared';
|
|
2
|
-
import { StandardRequest, StandardResponse,
|
|
2
|
+
import { StandardRequest, EventMeta, StandardResponse, StandardBody, StandardHeaders } from '@orpc/standard-server';
|
|
3
3
|
|
|
4
4
|
type EncodedMessage = string | ArrayBufferLike | Uint8Array;
|
|
5
5
|
interface EncodedMessageSendFn {
|
|
6
6
|
(message: EncodedMessage): Promisable<void>;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
+
declare enum MessageType {
|
|
10
|
+
REQUEST = 1,
|
|
11
|
+
RESPONSE = 2,
|
|
12
|
+
EVENT_ITERATOR = 3,
|
|
13
|
+
ABORT_SIGNAL = 4
|
|
14
|
+
}
|
|
15
|
+
type EventIteratorEvent = 'message' | 'error' | 'done';
|
|
16
|
+
interface EventIteratorPayload {
|
|
17
|
+
event: EventIteratorEvent;
|
|
18
|
+
data: unknown;
|
|
19
|
+
meta?: EventMeta;
|
|
20
|
+
}
|
|
21
|
+
interface RequestMessageMap {
|
|
22
|
+
[MessageType.REQUEST]: Omit<StandardRequest, 'signal'>;
|
|
23
|
+
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
24
|
+
[MessageType.ABORT_SIGNAL]: void;
|
|
25
|
+
}
|
|
26
|
+
interface ResponseMessageMap {
|
|
27
|
+
[MessageType.RESPONSE]: StandardResponse;
|
|
28
|
+
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
29
|
+
[MessageType.ABORT_SIGNAL]: void;
|
|
30
|
+
}
|
|
31
|
+
interface BaseMessageFormat<P = unknown> {
|
|
32
|
+
/**
|
|
33
|
+
* Client-guaranteed unique identifier
|
|
34
|
+
*/
|
|
35
|
+
i: string;
|
|
36
|
+
/**
|
|
37
|
+
* @default REQUEST | RESPONSE
|
|
38
|
+
*/
|
|
39
|
+
t?: MessageType;
|
|
40
|
+
p: P;
|
|
41
|
+
}
|
|
42
|
+
interface SerializedEventIteratorPayload {
|
|
43
|
+
e: EventIteratorEvent;
|
|
44
|
+
d: unknown;
|
|
45
|
+
m?: EventMeta;
|
|
46
|
+
}
|
|
47
|
+
interface SerializedRequestPayload {
|
|
48
|
+
/**
|
|
49
|
+
* The url of the request
|
|
50
|
+
*
|
|
51
|
+
* might be relative path if origin is `http://orpc`
|
|
52
|
+
*/
|
|
53
|
+
u: string;
|
|
54
|
+
b: StandardBody;
|
|
55
|
+
/**
|
|
56
|
+
* @default {}
|
|
57
|
+
*/
|
|
58
|
+
h?: StandardHeaders;
|
|
59
|
+
/**
|
|
60
|
+
* @default POST
|
|
61
|
+
*/
|
|
62
|
+
m?: string;
|
|
63
|
+
}
|
|
64
|
+
interface SerializedResponsePayload {
|
|
65
|
+
/**
|
|
66
|
+
* @default 200
|
|
67
|
+
*/
|
|
68
|
+
s?: number;
|
|
69
|
+
/**
|
|
70
|
+
* @default {}
|
|
71
|
+
*/
|
|
72
|
+
h?: StandardHeaders;
|
|
73
|
+
b: StandardBody;
|
|
74
|
+
}
|
|
75
|
+
type DecodedMessageUnion<TMap extends RequestMessageMap | ResponseMessageMap> = {
|
|
76
|
+
[K in keyof TMap]: [id: string, type: K, payload: TMap[K]];
|
|
77
|
+
}[keyof TMap];
|
|
78
|
+
type DecodedRequestMessage = DecodedMessageUnion<RequestMessageMap>;
|
|
79
|
+
type DecodedResponseMessage = DecodedMessageUnion<ResponseMessageMap>;
|
|
80
|
+
/**
|
|
81
|
+
* New serialization functions without Blob handling
|
|
82
|
+
*/
|
|
83
|
+
declare function serializeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): BaseMessageFormat;
|
|
84
|
+
declare function deserializeRequestMessage(message: BaseMessageFormat): DecodedRequestMessage;
|
|
85
|
+
declare function serializeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): BaseMessageFormat;
|
|
86
|
+
declare function deserializeResponseMessage(message: BaseMessageFormat): DecodedResponseMessage;
|
|
87
|
+
/**
|
|
88
|
+
* Original encode/decode functions now using the new serialize/deserialize functions
|
|
89
|
+
*/
|
|
90
|
+
declare function encodeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): Promise<EncodedMessage>;
|
|
91
|
+
declare function decodeRequestMessage(raw: EncodedMessage): Promise<DecodedRequestMessage>;
|
|
92
|
+
declare function encodeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): Promise<EncodedMessage>;
|
|
93
|
+
declare function decodeResponseMessage(raw: EncodedMessage): Promise<DecodedResponseMessage>;
|
|
94
|
+
|
|
95
|
+
interface experimental_RequestMessageSendFn {
|
|
96
|
+
(message: DecodedRequestMessage): Promisable<void>;
|
|
97
|
+
}
|
|
9
98
|
interface ClientPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
10
99
|
/**
|
|
11
100
|
* Should abort or not?
|
|
@@ -15,6 +104,15 @@ interface ClientPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
|
15
104
|
abort?: boolean;
|
|
16
105
|
}
|
|
17
106
|
declare class ClientPeer {
|
|
107
|
+
private readonly peer;
|
|
108
|
+
constructor(send: EncodedMessageSendFn);
|
|
109
|
+
get length(): number;
|
|
110
|
+
open(id: string): AbortController;
|
|
111
|
+
request(request: StandardRequest): Promise<StandardResponse>;
|
|
112
|
+
message(raw: EncodedMessage): Promise<void>;
|
|
113
|
+
close(options?: AsyncIdQueueCloseOptions$1): void;
|
|
114
|
+
}
|
|
115
|
+
declare class experimental_ClientPeerWithoutCodec {
|
|
18
116
|
private readonly idGenerator;
|
|
19
117
|
/**
|
|
20
118
|
* Queue of responses sent from server, awaiting consumption
|
|
@@ -33,46 +131,14 @@ declare class ClientPeer {
|
|
|
33
131
|
*/
|
|
34
132
|
private readonly cleanupFns;
|
|
35
133
|
private readonly send;
|
|
36
|
-
constructor(send:
|
|
134
|
+
constructor(send: experimental_RequestMessageSendFn);
|
|
37
135
|
get length(): number;
|
|
38
136
|
open(id: string): AbortController;
|
|
39
137
|
request(request: StandardRequest): Promise<StandardResponse>;
|
|
40
|
-
message(
|
|
138
|
+
message([id, type, payload]: DecodedResponseMessage): Promise<void>;
|
|
41
139
|
close(options?: AsyncIdQueueCloseOptions$1): void;
|
|
42
140
|
}
|
|
43
141
|
|
|
44
|
-
declare enum MessageType {
|
|
45
|
-
REQUEST = 1,
|
|
46
|
-
RESPONSE = 2,
|
|
47
|
-
EVENT_ITERATOR = 3,
|
|
48
|
-
ABORT_SIGNAL = 4
|
|
49
|
-
}
|
|
50
|
-
type EventIteratorEvent = 'message' | 'error' | 'done';
|
|
51
|
-
interface EventIteratorPayload {
|
|
52
|
-
event: EventIteratorEvent;
|
|
53
|
-
data: unknown;
|
|
54
|
-
meta?: EventMeta;
|
|
55
|
-
}
|
|
56
|
-
interface RequestMessageMap {
|
|
57
|
-
[MessageType.REQUEST]: Omit<StandardRequest, 'signal'>;
|
|
58
|
-
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
59
|
-
[MessageType.ABORT_SIGNAL]: void;
|
|
60
|
-
}
|
|
61
|
-
interface ResponseMessageMap {
|
|
62
|
-
[MessageType.RESPONSE]: StandardResponse;
|
|
63
|
-
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
64
|
-
[MessageType.ABORT_SIGNAL]: void;
|
|
65
|
-
}
|
|
66
|
-
type DecodedMessageUnion<TMap extends RequestMessageMap | ResponseMessageMap> = {
|
|
67
|
-
[K in keyof TMap]: [id: string, type: K, payload: TMap[K]];
|
|
68
|
-
}[keyof TMap];
|
|
69
|
-
type DecodedRequestMessage = DecodedMessageUnion<RequestMessageMap>;
|
|
70
|
-
type DecodedResponseMessage = DecodedMessageUnion<ResponseMessageMap>;
|
|
71
|
-
declare function encodeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): Promise<EncodedMessage>;
|
|
72
|
-
declare function decodeRequestMessage(raw: EncodedMessage): Promise<DecodedRequestMessage>;
|
|
73
|
-
declare function encodeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): Promise<EncodedMessage>;
|
|
74
|
-
declare function decodeResponseMessage(raw: EncodedMessage): Promise<DecodedResponseMessage>;
|
|
75
|
-
|
|
76
142
|
interface AsyncIdQueueCloseOptions {
|
|
77
143
|
id?: string;
|
|
78
144
|
reason?: unknown;
|
|
@@ -97,6 +163,9 @@ interface ToEventIteratorOptions extends SetSpanErrorOptions {
|
|
|
97
163
|
declare function toEventIterator(queue: AsyncIdQueue<EventIteratorPayload>, id: string, cleanup: AsyncIteratorClassCleanupFn, options?: ToEventIteratorOptions): AsyncIteratorClass<unknown>;
|
|
98
164
|
declare function resolveEventIterator(iterator: AsyncIterator<any>, callback: (payload: EventIteratorPayload) => Promise<'next' | 'abort'>): Promise<void>;
|
|
99
165
|
|
|
166
|
+
interface experimental_ResponseMessageSendFn {
|
|
167
|
+
(message: DecodedResponseMessage): Promisable<void>;
|
|
168
|
+
}
|
|
100
169
|
interface ServerPeerHandleRequestFn {
|
|
101
170
|
(request: StandardRequest): Promise<StandardResponse>;
|
|
102
171
|
}
|
|
@@ -109,6 +178,21 @@ interface ServerPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
|
109
178
|
abort?: boolean;
|
|
110
179
|
}
|
|
111
180
|
declare class ServerPeer {
|
|
181
|
+
private readonly peer;
|
|
182
|
+
constructor(send: EncodedMessageSendFn);
|
|
183
|
+
get length(): number;
|
|
184
|
+
open(id: string): AbortController;
|
|
185
|
+
/**
|
|
186
|
+
* @todo This method will return Promise<void> in the next major version.
|
|
187
|
+
*/
|
|
188
|
+
message(raw: EncodedMessage, handleRequest?: ServerPeerHandleRequestFn): Promise<[id: string, StandardRequest | undefined]>;
|
|
189
|
+
/**
|
|
190
|
+
* @deprecated Please pass the `handleRequest` (second arg) function to the `message` method instead.
|
|
191
|
+
*/
|
|
192
|
+
response(id: string, response: StandardResponse): Promise<void>;
|
|
193
|
+
close({ abort, ...options }?: ServerPeerCloseOptions): void;
|
|
194
|
+
}
|
|
195
|
+
declare class experimental_ServerPeerWithoutCodec {
|
|
112
196
|
/**
|
|
113
197
|
* Queue of event iterator messages sent from client, awaiting consumption
|
|
114
198
|
*/
|
|
@@ -118,13 +202,13 @@ declare class ServerPeer {
|
|
|
118
202
|
*/
|
|
119
203
|
private readonly clientControllers;
|
|
120
204
|
private readonly send;
|
|
121
|
-
constructor(send:
|
|
205
|
+
constructor(send: experimental_ResponseMessageSendFn);
|
|
122
206
|
get length(): number;
|
|
123
207
|
open(id: string): AbortController;
|
|
124
208
|
/**
|
|
125
209
|
* @todo This method will return Promise<void> in the next major version.
|
|
126
210
|
*/
|
|
127
|
-
message(
|
|
211
|
+
message([id, type, payload]: DecodedRequestMessage, handleRequest?: ServerPeerHandleRequestFn): Promise<[id: string, StandardRequest | undefined]>;
|
|
128
212
|
/**
|
|
129
213
|
* @deprecated Please pass the `handleRequest` (second arg) function to the `message` method instead.
|
|
130
214
|
*/
|
|
@@ -132,5 +216,5 @@ declare class ServerPeer {
|
|
|
132
216
|
close({ abort, ...options }?: ServerPeerCloseOptions): void;
|
|
133
217
|
}
|
|
134
218
|
|
|
135
|
-
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, encodeRequestMessage, encodeResponseMessage, resolveEventIterator, toEventIterator };
|
|
136
|
-
export type { ClientPeerCloseOptions, DecodedRequestMessage, DecodedResponseMessage, EncodedMessage, EncodedMessageSendFn, EventIteratorEvent, EventIteratorPayload, RequestMessageMap, ResponseMessageMap, ServerPeerCloseOptions, ServerPeerHandleRequestFn, ToEventIteratorOptions };
|
|
219
|
+
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, deserializeRequestMessage, deserializeResponseMessage, encodeRequestMessage, encodeResponseMessage, experimental_ClientPeerWithoutCodec, experimental_ServerPeerWithoutCodec, resolveEventIterator, serializeRequestMessage, serializeResponseMessage, toEventIterator };
|
|
220
|
+
export type { BaseMessageFormat, ClientPeerCloseOptions, DecodedMessageUnion, DecodedRequestMessage, DecodedResponseMessage, EncodedMessage, EncodedMessageSendFn, EventIteratorEvent, EventIteratorPayload, RequestMessageMap, ResponseMessageMap, SerializedEventIteratorPayload, SerializedRequestPayload, SerializedResponsePayload, ServerPeerCloseOptions, ServerPeerHandleRequestFn, ToEventIteratorOptions, experimental_RequestMessageSendFn, experimental_ResponseMessageSendFn };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,100 @@
|
|
|
1
1
|
import { Promisable, AsyncIdQueueCloseOptions as AsyncIdQueueCloseOptions$1, SetSpanErrorOptions, AsyncIteratorClassCleanupFn, AsyncIteratorClass } from '@orpc/shared';
|
|
2
|
-
import { StandardRequest, StandardResponse,
|
|
2
|
+
import { StandardRequest, EventMeta, StandardResponse, StandardBody, StandardHeaders } from '@orpc/standard-server';
|
|
3
3
|
|
|
4
4
|
type EncodedMessage = string | ArrayBufferLike | Uint8Array;
|
|
5
5
|
interface EncodedMessageSendFn {
|
|
6
6
|
(message: EncodedMessage): Promisable<void>;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
+
declare enum MessageType {
|
|
10
|
+
REQUEST = 1,
|
|
11
|
+
RESPONSE = 2,
|
|
12
|
+
EVENT_ITERATOR = 3,
|
|
13
|
+
ABORT_SIGNAL = 4
|
|
14
|
+
}
|
|
15
|
+
type EventIteratorEvent = 'message' | 'error' | 'done';
|
|
16
|
+
interface EventIteratorPayload {
|
|
17
|
+
event: EventIteratorEvent;
|
|
18
|
+
data: unknown;
|
|
19
|
+
meta?: EventMeta;
|
|
20
|
+
}
|
|
21
|
+
interface RequestMessageMap {
|
|
22
|
+
[MessageType.REQUEST]: Omit<StandardRequest, 'signal'>;
|
|
23
|
+
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
24
|
+
[MessageType.ABORT_SIGNAL]: void;
|
|
25
|
+
}
|
|
26
|
+
interface ResponseMessageMap {
|
|
27
|
+
[MessageType.RESPONSE]: StandardResponse;
|
|
28
|
+
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
29
|
+
[MessageType.ABORT_SIGNAL]: void;
|
|
30
|
+
}
|
|
31
|
+
interface BaseMessageFormat<P = unknown> {
|
|
32
|
+
/**
|
|
33
|
+
* Client-guaranteed unique identifier
|
|
34
|
+
*/
|
|
35
|
+
i: string;
|
|
36
|
+
/**
|
|
37
|
+
* @default REQUEST | RESPONSE
|
|
38
|
+
*/
|
|
39
|
+
t?: MessageType;
|
|
40
|
+
p: P;
|
|
41
|
+
}
|
|
42
|
+
interface SerializedEventIteratorPayload {
|
|
43
|
+
e: EventIteratorEvent;
|
|
44
|
+
d: unknown;
|
|
45
|
+
m?: EventMeta;
|
|
46
|
+
}
|
|
47
|
+
interface SerializedRequestPayload {
|
|
48
|
+
/**
|
|
49
|
+
* The url of the request
|
|
50
|
+
*
|
|
51
|
+
* might be relative path if origin is `http://orpc`
|
|
52
|
+
*/
|
|
53
|
+
u: string;
|
|
54
|
+
b: StandardBody;
|
|
55
|
+
/**
|
|
56
|
+
* @default {}
|
|
57
|
+
*/
|
|
58
|
+
h?: StandardHeaders;
|
|
59
|
+
/**
|
|
60
|
+
* @default POST
|
|
61
|
+
*/
|
|
62
|
+
m?: string;
|
|
63
|
+
}
|
|
64
|
+
interface SerializedResponsePayload {
|
|
65
|
+
/**
|
|
66
|
+
* @default 200
|
|
67
|
+
*/
|
|
68
|
+
s?: number;
|
|
69
|
+
/**
|
|
70
|
+
* @default {}
|
|
71
|
+
*/
|
|
72
|
+
h?: StandardHeaders;
|
|
73
|
+
b: StandardBody;
|
|
74
|
+
}
|
|
75
|
+
type DecodedMessageUnion<TMap extends RequestMessageMap | ResponseMessageMap> = {
|
|
76
|
+
[K in keyof TMap]: [id: string, type: K, payload: TMap[K]];
|
|
77
|
+
}[keyof TMap];
|
|
78
|
+
type DecodedRequestMessage = DecodedMessageUnion<RequestMessageMap>;
|
|
79
|
+
type DecodedResponseMessage = DecodedMessageUnion<ResponseMessageMap>;
|
|
80
|
+
/**
|
|
81
|
+
* New serialization functions without Blob handling
|
|
82
|
+
*/
|
|
83
|
+
declare function serializeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): BaseMessageFormat;
|
|
84
|
+
declare function deserializeRequestMessage(message: BaseMessageFormat): DecodedRequestMessage;
|
|
85
|
+
declare function serializeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): BaseMessageFormat;
|
|
86
|
+
declare function deserializeResponseMessage(message: BaseMessageFormat): DecodedResponseMessage;
|
|
87
|
+
/**
|
|
88
|
+
* Original encode/decode functions now using the new serialize/deserialize functions
|
|
89
|
+
*/
|
|
90
|
+
declare function encodeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): Promise<EncodedMessage>;
|
|
91
|
+
declare function decodeRequestMessage(raw: EncodedMessage): Promise<DecodedRequestMessage>;
|
|
92
|
+
declare function encodeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): Promise<EncodedMessage>;
|
|
93
|
+
declare function decodeResponseMessage(raw: EncodedMessage): Promise<DecodedResponseMessage>;
|
|
94
|
+
|
|
95
|
+
interface experimental_RequestMessageSendFn {
|
|
96
|
+
(message: DecodedRequestMessage): Promisable<void>;
|
|
97
|
+
}
|
|
9
98
|
interface ClientPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
10
99
|
/**
|
|
11
100
|
* Should abort or not?
|
|
@@ -15,6 +104,15 @@ interface ClientPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
|
15
104
|
abort?: boolean;
|
|
16
105
|
}
|
|
17
106
|
declare class ClientPeer {
|
|
107
|
+
private readonly peer;
|
|
108
|
+
constructor(send: EncodedMessageSendFn);
|
|
109
|
+
get length(): number;
|
|
110
|
+
open(id: string): AbortController;
|
|
111
|
+
request(request: StandardRequest): Promise<StandardResponse>;
|
|
112
|
+
message(raw: EncodedMessage): Promise<void>;
|
|
113
|
+
close(options?: AsyncIdQueueCloseOptions$1): void;
|
|
114
|
+
}
|
|
115
|
+
declare class experimental_ClientPeerWithoutCodec {
|
|
18
116
|
private readonly idGenerator;
|
|
19
117
|
/**
|
|
20
118
|
* Queue of responses sent from server, awaiting consumption
|
|
@@ -33,46 +131,14 @@ declare class ClientPeer {
|
|
|
33
131
|
*/
|
|
34
132
|
private readonly cleanupFns;
|
|
35
133
|
private readonly send;
|
|
36
|
-
constructor(send:
|
|
134
|
+
constructor(send: experimental_RequestMessageSendFn);
|
|
37
135
|
get length(): number;
|
|
38
136
|
open(id: string): AbortController;
|
|
39
137
|
request(request: StandardRequest): Promise<StandardResponse>;
|
|
40
|
-
message(
|
|
138
|
+
message([id, type, payload]: DecodedResponseMessage): Promise<void>;
|
|
41
139
|
close(options?: AsyncIdQueueCloseOptions$1): void;
|
|
42
140
|
}
|
|
43
141
|
|
|
44
|
-
declare enum MessageType {
|
|
45
|
-
REQUEST = 1,
|
|
46
|
-
RESPONSE = 2,
|
|
47
|
-
EVENT_ITERATOR = 3,
|
|
48
|
-
ABORT_SIGNAL = 4
|
|
49
|
-
}
|
|
50
|
-
type EventIteratorEvent = 'message' | 'error' | 'done';
|
|
51
|
-
interface EventIteratorPayload {
|
|
52
|
-
event: EventIteratorEvent;
|
|
53
|
-
data: unknown;
|
|
54
|
-
meta?: EventMeta;
|
|
55
|
-
}
|
|
56
|
-
interface RequestMessageMap {
|
|
57
|
-
[MessageType.REQUEST]: Omit<StandardRequest, 'signal'>;
|
|
58
|
-
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
59
|
-
[MessageType.ABORT_SIGNAL]: void;
|
|
60
|
-
}
|
|
61
|
-
interface ResponseMessageMap {
|
|
62
|
-
[MessageType.RESPONSE]: StandardResponse;
|
|
63
|
-
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
64
|
-
[MessageType.ABORT_SIGNAL]: void;
|
|
65
|
-
}
|
|
66
|
-
type DecodedMessageUnion<TMap extends RequestMessageMap | ResponseMessageMap> = {
|
|
67
|
-
[K in keyof TMap]: [id: string, type: K, payload: TMap[K]];
|
|
68
|
-
}[keyof TMap];
|
|
69
|
-
type DecodedRequestMessage = DecodedMessageUnion<RequestMessageMap>;
|
|
70
|
-
type DecodedResponseMessage = DecodedMessageUnion<ResponseMessageMap>;
|
|
71
|
-
declare function encodeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): Promise<EncodedMessage>;
|
|
72
|
-
declare function decodeRequestMessage(raw: EncodedMessage): Promise<DecodedRequestMessage>;
|
|
73
|
-
declare function encodeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): Promise<EncodedMessage>;
|
|
74
|
-
declare function decodeResponseMessage(raw: EncodedMessage): Promise<DecodedResponseMessage>;
|
|
75
|
-
|
|
76
142
|
interface AsyncIdQueueCloseOptions {
|
|
77
143
|
id?: string;
|
|
78
144
|
reason?: unknown;
|
|
@@ -97,6 +163,9 @@ interface ToEventIteratorOptions extends SetSpanErrorOptions {
|
|
|
97
163
|
declare function toEventIterator(queue: AsyncIdQueue<EventIteratorPayload>, id: string, cleanup: AsyncIteratorClassCleanupFn, options?: ToEventIteratorOptions): AsyncIteratorClass<unknown>;
|
|
98
164
|
declare function resolveEventIterator(iterator: AsyncIterator<any>, callback: (payload: EventIteratorPayload) => Promise<'next' | 'abort'>): Promise<void>;
|
|
99
165
|
|
|
166
|
+
interface experimental_ResponseMessageSendFn {
|
|
167
|
+
(message: DecodedResponseMessage): Promisable<void>;
|
|
168
|
+
}
|
|
100
169
|
interface ServerPeerHandleRequestFn {
|
|
101
170
|
(request: StandardRequest): Promise<StandardResponse>;
|
|
102
171
|
}
|
|
@@ -109,6 +178,21 @@ interface ServerPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
|
109
178
|
abort?: boolean;
|
|
110
179
|
}
|
|
111
180
|
declare class ServerPeer {
|
|
181
|
+
private readonly peer;
|
|
182
|
+
constructor(send: EncodedMessageSendFn);
|
|
183
|
+
get length(): number;
|
|
184
|
+
open(id: string): AbortController;
|
|
185
|
+
/**
|
|
186
|
+
* @todo This method will return Promise<void> in the next major version.
|
|
187
|
+
*/
|
|
188
|
+
message(raw: EncodedMessage, handleRequest?: ServerPeerHandleRequestFn): Promise<[id: string, StandardRequest | undefined]>;
|
|
189
|
+
/**
|
|
190
|
+
* @deprecated Please pass the `handleRequest` (second arg) function to the `message` method instead.
|
|
191
|
+
*/
|
|
192
|
+
response(id: string, response: StandardResponse): Promise<void>;
|
|
193
|
+
close({ abort, ...options }?: ServerPeerCloseOptions): void;
|
|
194
|
+
}
|
|
195
|
+
declare class experimental_ServerPeerWithoutCodec {
|
|
112
196
|
/**
|
|
113
197
|
* Queue of event iterator messages sent from client, awaiting consumption
|
|
114
198
|
*/
|
|
@@ -118,13 +202,13 @@ declare class ServerPeer {
|
|
|
118
202
|
*/
|
|
119
203
|
private readonly clientControllers;
|
|
120
204
|
private readonly send;
|
|
121
|
-
constructor(send:
|
|
205
|
+
constructor(send: experimental_ResponseMessageSendFn);
|
|
122
206
|
get length(): number;
|
|
123
207
|
open(id: string): AbortController;
|
|
124
208
|
/**
|
|
125
209
|
* @todo This method will return Promise<void> in the next major version.
|
|
126
210
|
*/
|
|
127
|
-
message(
|
|
211
|
+
message([id, type, payload]: DecodedRequestMessage, handleRequest?: ServerPeerHandleRequestFn): Promise<[id: string, StandardRequest | undefined]>;
|
|
128
212
|
/**
|
|
129
213
|
* @deprecated Please pass the `handleRequest` (second arg) function to the `message` method instead.
|
|
130
214
|
*/
|
|
@@ -132,5 +216,5 @@ declare class ServerPeer {
|
|
|
132
216
|
close({ abort, ...options }?: ServerPeerCloseOptions): void;
|
|
133
217
|
}
|
|
134
218
|
|
|
135
|
-
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, encodeRequestMessage, encodeResponseMessage, resolveEventIterator, toEventIterator };
|
|
136
|
-
export type { ClientPeerCloseOptions, DecodedRequestMessage, DecodedResponseMessage, EncodedMessage, EncodedMessageSendFn, EventIteratorEvent, EventIteratorPayload, RequestMessageMap, ResponseMessageMap, ServerPeerCloseOptions, ServerPeerHandleRequestFn, ToEventIteratorOptions };
|
|
219
|
+
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, deserializeRequestMessage, deserializeResponseMessage, encodeRequestMessage, encodeResponseMessage, experimental_ClientPeerWithoutCodec, experimental_ServerPeerWithoutCodec, resolveEventIterator, serializeRequestMessage, serializeResponseMessage, toEventIterator };
|
|
220
|
+
export type { BaseMessageFormat, ClientPeerCloseOptions, DecodedMessageUnion, DecodedRequestMessage, DecodedResponseMessage, EncodedMessage, EncodedMessageSendFn, EventIteratorEvent, EventIteratorPayload, RequestMessageMap, ResponseMessageMap, SerializedEventIteratorPayload, SerializedRequestPayload, SerializedResponsePayload, ServerPeerCloseOptions, ServerPeerHandleRequestFn, ToEventIteratorOptions, experimental_RequestMessageSendFn, experimental_ResponseMessageSendFn };
|
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { isAsyncIteratorObject, stringifyJSON, readAsBuffer, AsyncIteratorClass, startSpan, runInSpanContext, isTypescriptObject, setSpanError, runWithSpan, SequentialIdGenerator, AsyncIdQueue, getGlobalOtelConfig, clone, AbortError } from '@orpc/shared';
|
|
2
2
|
import { generateContentDisposition, flattenHeader, getFilenameFromContentDisposition, withEventMeta, ErrorEvent, getEventMeta, isEventIteratorHeaders, HibernationEventIterator } from '@orpc/standard-server';
|
|
3
3
|
|
|
4
|
-
const SHORTABLE_ORIGIN = "orpc
|
|
5
|
-
const SHORTABLE_ORIGIN_MATCHER = /^orpc
|
|
4
|
+
const SHORTABLE_ORIGIN = "http://orpc";
|
|
5
|
+
const SHORTABLE_ORIGIN_MATCHER = /^http:\/\/orpc\//;
|
|
6
6
|
var MessageType = /* @__PURE__ */ ((MessageType2) => {
|
|
7
7
|
MessageType2[MessageType2["REQUEST"] = 1] = "REQUEST";
|
|
8
8
|
MessageType2[MessageType2["RESPONSE"] = 2] = "RESPONSE";
|
|
@@ -10,7 +10,7 @@ var MessageType = /* @__PURE__ */ ((MessageType2) => {
|
|
|
10
10
|
MessageType2[MessageType2["ABORT_SIGNAL"] = 4] = "ABORT_SIGNAL";
|
|
11
11
|
return MessageType2;
|
|
12
12
|
})(MessageType || {});
|
|
13
|
-
|
|
13
|
+
function serializeRequestMessage(id, type, payload) {
|
|
14
14
|
if (type === 3 /* EVENT_ITERATOR */) {
|
|
15
15
|
const eventPayload = payload;
|
|
16
16
|
const serializedPayload2 = {
|
|
@@ -18,35 +18,26 @@ async function encodeRequestMessage(id, type, payload) {
|
|
|
18
18
|
d: eventPayload.data,
|
|
19
19
|
m: eventPayload.meta
|
|
20
20
|
};
|
|
21
|
-
return
|
|
21
|
+
return { i: id, t: type, p: serializedPayload2 };
|
|
22
22
|
}
|
|
23
23
|
if (type === 4 /* ABORT_SIGNAL */) {
|
|
24
|
-
return
|
|
24
|
+
return { i: id, t: type, p: payload };
|
|
25
25
|
}
|
|
26
26
|
const request = payload;
|
|
27
|
-
const { body: processedBody, headers: processedHeaders } = await serializeBodyAndHeaders(
|
|
28
|
-
request.body,
|
|
29
|
-
request.headers
|
|
30
|
-
);
|
|
31
27
|
const serializedPayload = {
|
|
32
28
|
u: request.url.toString().replace(SHORTABLE_ORIGIN_MATCHER, "/"),
|
|
33
|
-
b:
|
|
34
|
-
h: Object.keys(
|
|
29
|
+
b: request.body,
|
|
30
|
+
h: Object.keys(request.headers).length > 0 ? request.headers : void 0,
|
|
35
31
|
m: request.method === "POST" ? void 0 : request.method
|
|
36
32
|
};
|
|
37
|
-
|
|
33
|
+
return {
|
|
38
34
|
i: id,
|
|
39
35
|
p: serializedPayload
|
|
40
36
|
};
|
|
41
|
-
if (processedBody instanceof Blob) {
|
|
42
|
-
return encodeRawMessage(baseMessage, processedBody);
|
|
43
|
-
}
|
|
44
|
-
return encodeRawMessage(baseMessage);
|
|
45
37
|
}
|
|
46
|
-
|
|
47
|
-
const { json: message, buffer } = await decodeRawMessage(raw);
|
|
38
|
+
function deserializeRequestMessage(message) {
|
|
48
39
|
const id = message.i;
|
|
49
|
-
const type = message.t
|
|
40
|
+
const type = message.t ?? 1 /* REQUEST */;
|
|
50
41
|
if (type === 3 /* EVENT_ITERATOR */) {
|
|
51
42
|
const payload2 = message.p;
|
|
52
43
|
return [id, type, { event: payload2.e, data: payload2.d, meta: payload2.m }];
|
|
@@ -55,16 +46,14 @@ async function decodeRequestMessage(raw) {
|
|
|
55
46
|
return [id, type, message.p];
|
|
56
47
|
}
|
|
57
48
|
const payload = message.p;
|
|
58
|
-
const headers = payload.h ?? {};
|
|
59
|
-
const body = await deserializeBody(headers, payload.b, buffer);
|
|
60
49
|
return [id, 1 /* REQUEST */, {
|
|
61
50
|
url: payload.u.startsWith("/") ? new URL(`${SHORTABLE_ORIGIN}${payload.u}`) : new URL(payload.u),
|
|
62
|
-
headers,
|
|
51
|
+
headers: payload.h ?? {},
|
|
63
52
|
method: payload.m ?? "POST",
|
|
64
|
-
body
|
|
53
|
+
body: payload.b
|
|
65
54
|
}];
|
|
66
55
|
}
|
|
67
|
-
|
|
56
|
+
function serializeResponseMessage(id, type, payload) {
|
|
68
57
|
if (type === 3 /* EVENT_ITERATOR */) {
|
|
69
58
|
const eventPayload = payload;
|
|
70
59
|
const serializedPayload2 = {
|
|
@@ -72,32 +61,23 @@ async function encodeResponseMessage(id, type, payload) {
|
|
|
72
61
|
d: eventPayload.data,
|
|
73
62
|
m: eventPayload.meta
|
|
74
63
|
};
|
|
75
|
-
return
|
|
64
|
+
return { i: id, t: type, p: serializedPayload2 };
|
|
76
65
|
}
|
|
77
66
|
if (type === 4 /* ABORT_SIGNAL */) {
|
|
78
|
-
return
|
|
67
|
+
return { i: id, t: type, p: void 0 };
|
|
79
68
|
}
|
|
80
69
|
const response = payload;
|
|
81
|
-
const { body: processedBody, headers: processedHeaders } = await serializeBodyAndHeaders(
|
|
82
|
-
response.body,
|
|
83
|
-
response.headers
|
|
84
|
-
);
|
|
85
70
|
const serializedPayload = {
|
|
86
71
|
s: response.status === 200 ? void 0 : response.status,
|
|
87
|
-
h: Object.keys(
|
|
88
|
-
b:
|
|
72
|
+
h: Object.keys(response.headers).length > 0 ? response.headers : void 0,
|
|
73
|
+
b: response.body
|
|
89
74
|
};
|
|
90
|
-
|
|
75
|
+
return {
|
|
91
76
|
i: id,
|
|
92
77
|
p: serializedPayload
|
|
93
78
|
};
|
|
94
|
-
if (processedBody instanceof Blob) {
|
|
95
|
-
return encodeRawMessage(baseMessage, processedBody);
|
|
96
|
-
}
|
|
97
|
-
return encodeRawMessage(baseMessage);
|
|
98
79
|
}
|
|
99
|
-
|
|
100
|
-
const { json: message, buffer } = await decodeRawMessage(raw);
|
|
80
|
+
function deserializeResponseMessage(message) {
|
|
101
81
|
const id = message.i;
|
|
102
82
|
const type = message.t;
|
|
103
83
|
if (type === 3 /* EVENT_ITERATOR */) {
|
|
@@ -108,9 +88,71 @@ async function decodeResponseMessage(raw) {
|
|
|
108
88
|
return [id, type, message.p];
|
|
109
89
|
}
|
|
110
90
|
const payload = message.p;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
91
|
+
return [id, 2 /* RESPONSE */, {
|
|
92
|
+
status: payload.s ?? 200,
|
|
93
|
+
headers: payload.h ?? {},
|
|
94
|
+
body: payload.b
|
|
95
|
+
}];
|
|
96
|
+
}
|
|
97
|
+
async function encodeRequestMessage(id, type, payload) {
|
|
98
|
+
if (type === 3 /* EVENT_ITERATOR */ || type === 4 /* ABORT_SIGNAL */) {
|
|
99
|
+
return encodeRawMessage(serializeRequestMessage(id, type, payload));
|
|
100
|
+
}
|
|
101
|
+
const request = payload;
|
|
102
|
+
const { body: processedBody, headers: processedHeaders } = await serializeBodyAndHeaders(
|
|
103
|
+
request.body,
|
|
104
|
+
request.headers
|
|
105
|
+
);
|
|
106
|
+
const modifiedRequest = {
|
|
107
|
+
...request,
|
|
108
|
+
body: processedBody instanceof Blob ? void 0 : processedBody,
|
|
109
|
+
headers: processedHeaders
|
|
110
|
+
};
|
|
111
|
+
const baseMessage = serializeRequestMessage(id, 1 /* REQUEST */, modifiedRequest);
|
|
112
|
+
if (processedBody instanceof Blob) {
|
|
113
|
+
return encodeRawMessage(baseMessage, processedBody);
|
|
114
|
+
}
|
|
115
|
+
return encodeRawMessage(baseMessage);
|
|
116
|
+
}
|
|
117
|
+
async function decodeRequestMessage(raw) {
|
|
118
|
+
const { json: message, buffer } = await decodeRawMessage(raw);
|
|
119
|
+
const [id, type, payload] = deserializeRequestMessage(message);
|
|
120
|
+
if (type === 3 /* EVENT_ITERATOR */ || type === 4 /* ABORT_SIGNAL */) {
|
|
121
|
+
return [id, type, payload];
|
|
122
|
+
}
|
|
123
|
+
const request = payload;
|
|
124
|
+
const body = await deserializeBody(request.headers, request.body, buffer);
|
|
125
|
+
return [id, type, { ...request, body }];
|
|
126
|
+
}
|
|
127
|
+
async function encodeResponseMessage(id, type, payload) {
|
|
128
|
+
if (type === 3 /* EVENT_ITERATOR */ || type === 4 /* ABORT_SIGNAL */) {
|
|
129
|
+
return encodeRawMessage(serializeResponseMessage(id, type, payload));
|
|
130
|
+
}
|
|
131
|
+
const response = payload;
|
|
132
|
+
const { body: processedBody, headers: processedHeaders } = await serializeBodyAndHeaders(
|
|
133
|
+
response.body,
|
|
134
|
+
response.headers
|
|
135
|
+
);
|
|
136
|
+
const modifiedResponse = {
|
|
137
|
+
...response,
|
|
138
|
+
body: processedBody instanceof Blob ? void 0 : processedBody,
|
|
139
|
+
headers: processedHeaders
|
|
140
|
+
};
|
|
141
|
+
const baseMessage = serializeResponseMessage(id, 2 /* RESPONSE */, modifiedResponse);
|
|
142
|
+
if (processedBody instanceof Blob) {
|
|
143
|
+
return encodeRawMessage(baseMessage, processedBody);
|
|
144
|
+
}
|
|
145
|
+
return encodeRawMessage(baseMessage);
|
|
146
|
+
}
|
|
147
|
+
async function decodeResponseMessage(raw) {
|
|
148
|
+
const { json: message, buffer } = await decodeRawMessage(raw);
|
|
149
|
+
const [id, type, payload] = deserializeResponseMessage(message);
|
|
150
|
+
if (type === 3 /* EVENT_ITERATOR */ || type === 4 /* ABORT_SIGNAL */) {
|
|
151
|
+
return [id, type, payload];
|
|
152
|
+
}
|
|
153
|
+
const response = payload;
|
|
154
|
+
const body = await deserializeBody(response.headers, response.body, buffer);
|
|
155
|
+
return [id, type, { ...response, body }];
|
|
114
156
|
}
|
|
115
157
|
async function serializeBodyAndHeaders(body, originalHeaders) {
|
|
116
158
|
const headers = { ...originalHeaders };
|
|
@@ -301,6 +343,29 @@ function resolveEventIterator(iterator, callback) {
|
|
|
301
343
|
}
|
|
302
344
|
|
|
303
345
|
class ClientPeer {
|
|
346
|
+
peer;
|
|
347
|
+
constructor(send) {
|
|
348
|
+
this.peer = new experimental_ClientPeerWithoutCodec(async ([id, type, payload]) => {
|
|
349
|
+
await send(await encodeRequestMessage(id, type, payload));
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
get length() {
|
|
353
|
+
return this.peer.length;
|
|
354
|
+
}
|
|
355
|
+
open(id) {
|
|
356
|
+
return this.peer.open(id);
|
|
357
|
+
}
|
|
358
|
+
async request(request) {
|
|
359
|
+
return this.peer.request(request);
|
|
360
|
+
}
|
|
361
|
+
async message(raw) {
|
|
362
|
+
return this.peer.message(await decodeResponseMessage(raw));
|
|
363
|
+
}
|
|
364
|
+
close(options = {}) {
|
|
365
|
+
return this.peer.close(options);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
class experimental_ClientPeerWithoutCodec {
|
|
304
369
|
idGenerator = new SequentialIdGenerator();
|
|
305
370
|
/**
|
|
306
371
|
* Queue of responses sent from server, awaiting consumption
|
|
@@ -320,11 +385,12 @@ class ClientPeer {
|
|
|
320
385
|
cleanupFns = /* @__PURE__ */ new Map();
|
|
321
386
|
send;
|
|
322
387
|
constructor(send) {
|
|
323
|
-
this.send = async (
|
|
388
|
+
this.send = async (message) => {
|
|
389
|
+
const id = message[0];
|
|
324
390
|
if (this.serverControllers.has(id)) {
|
|
325
|
-
await send(
|
|
391
|
+
await send(message);
|
|
326
392
|
}
|
|
327
|
-
}
|
|
393
|
+
};
|
|
328
394
|
}
|
|
329
395
|
get length() {
|
|
330
396
|
return (+this.responseQueue.length + this.serverEventIteratorQueue.length + this.serverControllers.size + this.cleanupFns.size) / 4;
|
|
@@ -354,14 +420,14 @@ class ClientPeer {
|
|
|
354
420
|
otelConfig.propagation.inject(otelConfig.context.active(), headers);
|
|
355
421
|
request = { ...request, headers };
|
|
356
422
|
}
|
|
357
|
-
await this.send(id, MessageType.REQUEST, request);
|
|
423
|
+
await this.send([id, MessageType.REQUEST, request]);
|
|
358
424
|
if (signal?.aborted) {
|
|
359
|
-
await this.send(id, MessageType.ABORT_SIGNAL, void 0);
|
|
425
|
+
await this.send([id, MessageType.ABORT_SIGNAL, void 0]);
|
|
360
426
|
throw signal.reason;
|
|
361
427
|
}
|
|
362
428
|
let abortListener;
|
|
363
429
|
signal?.addEventListener("abort", abortListener = async () => {
|
|
364
|
-
await this.send(id, MessageType.ABORT_SIGNAL, void 0);
|
|
430
|
+
await this.send([id, MessageType.ABORT_SIGNAL, void 0]);
|
|
365
431
|
this.close({ id, reason: signal.reason });
|
|
366
432
|
}, { once: true });
|
|
367
433
|
this.cleanupFns.get(id)?.push(() => {
|
|
@@ -373,7 +439,7 @@ class ClientPeer {
|
|
|
373
439
|
if (serverController.signal.aborted) {
|
|
374
440
|
return "abort";
|
|
375
441
|
}
|
|
376
|
-
await this.send(id, MessageType.EVENT_ITERATOR, payload);
|
|
442
|
+
await this.send([id, MessageType.EVENT_ITERATOR, payload]);
|
|
377
443
|
return "next";
|
|
378
444
|
});
|
|
379
445
|
}
|
|
@@ -385,7 +451,7 @@ class ClientPeer {
|
|
|
385
451
|
async (reason) => {
|
|
386
452
|
try {
|
|
387
453
|
if (reason !== "next") {
|
|
388
|
-
await this.send(id, MessageType.ABORT_SIGNAL, void 0);
|
|
454
|
+
await this.send([id, MessageType.ABORT_SIGNAL, void 0]);
|
|
389
455
|
}
|
|
390
456
|
} finally {
|
|
391
457
|
this.close({ id });
|
|
@@ -407,8 +473,7 @@ class ClientPeer {
|
|
|
407
473
|
}
|
|
408
474
|
);
|
|
409
475
|
}
|
|
410
|
-
async message(
|
|
411
|
-
const [id, type, payload] = await decodeResponseMessage(raw);
|
|
476
|
+
async message([id, type, payload]) {
|
|
412
477
|
if (type === MessageType.ABORT_SIGNAL) {
|
|
413
478
|
this.serverControllers.get(id)?.abort();
|
|
414
479
|
return;
|
|
@@ -442,6 +507,35 @@ class ClientPeer {
|
|
|
442
507
|
}
|
|
443
508
|
|
|
444
509
|
class ServerPeer {
|
|
510
|
+
peer;
|
|
511
|
+
constructor(send) {
|
|
512
|
+
this.peer = new experimental_ServerPeerWithoutCodec(async ([id, type, payload]) => {
|
|
513
|
+
await send(await encodeResponseMessage(id, type, payload));
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
get length() {
|
|
517
|
+
return this.peer.length;
|
|
518
|
+
}
|
|
519
|
+
open(id) {
|
|
520
|
+
return this.peer.open(id);
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* @todo This method will return Promise<void> in the next major version.
|
|
524
|
+
*/
|
|
525
|
+
async message(raw, handleRequest) {
|
|
526
|
+
return this.peer.message(await decodeRequestMessage(raw), handleRequest);
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* @deprecated Please pass the `handleRequest` (second arg) function to the `message` method instead.
|
|
530
|
+
*/
|
|
531
|
+
async response(id, response) {
|
|
532
|
+
return this.peer.response(id, response);
|
|
533
|
+
}
|
|
534
|
+
close({ abort = true, ...options } = {}) {
|
|
535
|
+
return this.peer.close({ ...options, abort });
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
class experimental_ServerPeerWithoutCodec {
|
|
445
539
|
/**
|
|
446
540
|
* Queue of event iterator messages sent from client, awaiting consumption
|
|
447
541
|
*/
|
|
@@ -452,11 +546,12 @@ class ServerPeer {
|
|
|
452
546
|
clientControllers = /* @__PURE__ */ new Map();
|
|
453
547
|
send;
|
|
454
548
|
constructor(send) {
|
|
455
|
-
this.send =
|
|
549
|
+
this.send = async (message) => {
|
|
550
|
+
const id = message[0];
|
|
456
551
|
if (this.clientControllers.has(id)) {
|
|
457
|
-
await send(
|
|
552
|
+
await send(message);
|
|
458
553
|
}
|
|
459
|
-
}
|
|
554
|
+
};
|
|
460
555
|
}
|
|
461
556
|
get length() {
|
|
462
557
|
return (this.clientEventIteratorQueue.length + this.clientControllers.size) / 2;
|
|
@@ -470,8 +565,7 @@ class ServerPeer {
|
|
|
470
565
|
/**
|
|
471
566
|
* @todo This method will return Promise<void> in the next major version.
|
|
472
567
|
*/
|
|
473
|
-
async message(
|
|
474
|
-
const [id, type, payload] = await decodeRequestMessage(raw);
|
|
568
|
+
async message([id, type, payload], handleRequest) {
|
|
475
569
|
if (type === MessageType.ABORT_SIGNAL) {
|
|
476
570
|
this.close({ id, reason: new AbortError("Client aborted the request") });
|
|
477
571
|
return [id, void 0];
|
|
@@ -482,6 +576,9 @@ class ServerPeer {
|
|
|
482
576
|
}
|
|
483
577
|
return [id, void 0];
|
|
484
578
|
}
|
|
579
|
+
if (this.clientControllers.has(id)) {
|
|
580
|
+
return [id, void 0];
|
|
581
|
+
}
|
|
485
582
|
const clientController = this.open(id);
|
|
486
583
|
const signal = clientController.signal;
|
|
487
584
|
const request = {
|
|
@@ -492,7 +589,7 @@ class ServerPeer {
|
|
|
492
589
|
id,
|
|
493
590
|
async (reason) => {
|
|
494
591
|
if (reason !== "next") {
|
|
495
|
-
await this.send(id, MessageType.ABORT_SIGNAL, void 0);
|
|
592
|
+
await this.send([id, MessageType.ABORT_SIGNAL, void 0]);
|
|
496
593
|
}
|
|
497
594
|
},
|
|
498
595
|
{ signal }
|
|
@@ -536,7 +633,7 @@ class ServerPeer {
|
|
|
536
633
|
return;
|
|
537
634
|
}
|
|
538
635
|
try {
|
|
539
|
-
await this.send(id, MessageType.RESPONSE, response);
|
|
636
|
+
await this.send([id, MessageType.RESPONSE, response]);
|
|
540
637
|
if (!signal.aborted && isAsyncIteratorObject(response.body)) {
|
|
541
638
|
if (response.body instanceof HibernationEventIterator) {
|
|
542
639
|
response.body.hibernationCallback?.(id);
|
|
@@ -546,7 +643,7 @@ class ServerPeer {
|
|
|
546
643
|
if (signal.aborted) {
|
|
547
644
|
return "abort";
|
|
548
645
|
}
|
|
549
|
-
await this.send(id, MessageType.EVENT_ITERATOR, payload);
|
|
646
|
+
await this.send([id, MessageType.EVENT_ITERATOR, payload]);
|
|
550
647
|
return "next";
|
|
551
648
|
});
|
|
552
649
|
}
|
|
@@ -573,4 +670,4 @@ class ServerPeer {
|
|
|
573
670
|
}
|
|
574
671
|
}
|
|
575
672
|
|
|
576
|
-
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, encodeRequestMessage, encodeResponseMessage, resolveEventIterator, toEventIterator };
|
|
673
|
+
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, deserializeRequestMessage, deserializeResponseMessage, encodeRequestMessage, encodeResponseMessage, experimental_ClientPeerWithoutCodec, experimental_ServerPeerWithoutCodec, resolveEventIterator, serializeRequestMessage, serializeResponseMessage, toEventIterator };
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orpc/standard-server-peer",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.0-next.
|
|
4
|
+
"version": "0.0.0-next.6bc474e",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"homepage": "https://
|
|
6
|
+
"homepage": "https://orpc.com",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/
|
|
9
|
+
"url": "git+https://github.com/middleapi/orpc.git",
|
|
10
10
|
"directory": "packages/standard-server-peer"
|
|
11
11
|
},
|
|
12
12
|
"keywords": [
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"dist"
|
|
24
24
|
],
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@orpc/shared": "0.0.0-next.
|
|
27
|
-
"@orpc/standard-server": "0.0.0-next.
|
|
26
|
+
"@orpc/shared": "0.0.0-next.6bc474e",
|
|
27
|
+
"@orpc/standard-server": "0.0.0-next.6bc474e"
|
|
28
28
|
},
|
|
29
29
|
"scripts": {
|
|
30
30
|
"build": "unbuild",
|