starpc 0.8.6 → 0.9.0

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.
@@ -1,6 +1,6 @@
1
1
  import Long from 'long';
2
2
  import { RpcStreamPacket } from '../rpcstream/rpcstream.pb.js';
3
- import * as _m0 from 'protobufjs/minimal';
3
+ import _m0 from 'protobufjs/minimal.js';
4
4
  export declare const protobufPackage = "echo";
5
5
  /** EchoMsg is the message body for Echo. */
6
6
  export interface EchoMsg {
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable */
2
2
  import Long from 'long';
3
3
  import { RpcStreamPacket } from '../rpcstream/rpcstream.pb.js';
4
- import * as _m0 from 'protobufjs/minimal';
4
+ import _m0 from 'protobufjs/minimal.js';
5
5
  export const protobufPackage = 'echo';
6
6
  function createBaseEchoMsg() {
7
7
  return { body: '' };
@@ -1,5 +1,5 @@
1
1
  import Long from 'long';
2
- import * as _m0 from 'protobufjs/minimal';
2
+ import _m0 from 'protobufjs/minimal.js';
3
3
  export declare const protobufPackage = "rpcstream";
4
4
  /** RpcStreamPacket is a packet encapsulating data for a RPC stream. */
5
5
  export interface RpcStreamPacket {
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable */
2
2
  import Long from 'long';
3
- import * as _m0 from 'protobufjs/minimal';
3
+ import _m0 from 'protobufjs/minimal.js';
4
4
  export const protobufPackage = 'rpcstream';
5
5
  function createBaseRpcStreamPacket() {
6
6
  return { body: undefined };
@@ -0,0 +1,3 @@
1
+ import { Uint8ArrayList } from 'uint8arraylist';
2
+ import type { Transform } from 'it-stream-types';
3
+ export declare function combineUint8ArrayListTransform(): Transform<Uint8Array | Uint8ArrayList, Uint8Array>;
@@ -0,0 +1,15 @@
1
+ import { isUint8ArrayList } from 'uint8arraylist';
2
+ // combineUint8ArrayListTransform combines a Uint8ArrayList into a Uint8Array.
3
+ export function combineUint8ArrayListTransform() {
4
+ // decodeMessageSource unmarshals and async yields encoded Messages.
5
+ return async function* decodeMessageSource(source) {
6
+ for await (const obj of source) {
7
+ if (isUint8ArrayList(obj)) {
8
+ yield* [obj.subarray()];
9
+ }
10
+ else {
11
+ yield* [obj];
12
+ }
13
+ }
14
+ };
15
+ }
@@ -3,6 +3,7 @@ import { pushable } from 'it-pushable';
3
3
  import { ClientRPC } from './client-rpc.js';
4
4
  import { writeToPushable } from './pushable.js';
5
5
  import { decodePacketSource, encodePacketSource, parseLengthPrefixTransform, prependLengthPrefixTransform, } from './packet.js';
6
+ import { combineUint8ArrayListTransform } from './array-list.js';
6
7
  // Client implements the ts-proto Rpc interface with the drpcproto protocol.
7
8
  export class Client {
8
9
  constructor(openStreamFn) {
@@ -100,7 +101,7 @@ export class Client {
100
101
  const openStreamFn = await this.openStreamFn;
101
102
  const conn = await openStreamFn();
102
103
  const call = new ClientRPC(rpcService, rpcMethod);
103
- pipe(conn, parseLengthPrefixTransform(), decodePacketSource, call, encodePacketSource, prependLengthPrefixTransform(), conn);
104
+ pipe(conn, parseLengthPrefixTransform(), combineUint8ArrayListTransform(), decodePacketSource, call, encodePacketSource, prependLengthPrefixTransform(), combineUint8ArrayListTransform(), conn);
104
105
  await call.writeCallStart(data || undefined);
105
106
  return call;
106
107
  }
@@ -1,9 +1,10 @@
1
- import type { Transform } from 'it-stream-types';
2
1
  import { Packet } from './rpcproto.pb.js';
2
+ import { Uint8ArrayList } from 'uint8arraylist';
3
+ import { Transform } from 'it-pipe';
3
4
  export declare const decodePacketSource: (source: import("it-stream-types").Source<Uint8Array | Uint8Array[]>) => AsyncIterable<Packet>;
4
5
  export declare const encodePacketSource: (source: import("it-stream-types").Source<Packet | Packet[]>) => AsyncIterable<Uint8Array>;
5
- export declare function prependLengthPrefixTransform(): Transform<Uint8Array>;
6
- export declare function parseLengthPrefixTransform(): Transform<Uint8Array>;
6
+ export declare function prependLengthPrefixTransform(): Transform<Uint8Array | Uint8ArrayList, Uint8ArrayList>;
7
+ export declare function parseLengthPrefixTransform(): Transform<Uint8Array | Uint8ArrayList, Uint8ArrayList>;
7
8
  export declare function encodeUint32Le(value: number): Uint8Array;
8
9
  export declare function decodeUint32Le(data: Uint8Array): number;
9
10
  export declare function prependPacketLen(msgData: Uint8Array): Uint8Array;
@@ -1,6 +1,7 @@
1
1
  import { encode as lengthPrefixEncode, decode as lengthPrefixDecode, } from 'it-length-prefixed';
2
2
  import { Packet } from './rpcproto.pb.js';
3
3
  import { buildDecodeMessageTransform, buildEncodeMessageTransform, } from './message.js';
4
+ import { Uint8ArrayList } from 'uint8arraylist';
4
5
  // decodePacketSource decodes packets from a binary data stream.
5
6
  export const decodePacketSource = buildDecodeMessageTransform(Packet);
6
7
  // encodePacketSource encodes packets from a packet object stream.
@@ -10,16 +11,14 @@ const uint32LEDecode = (data) => {
10
11
  if (data.length < 4) {
11
12
  throw RangeError('Could not decode int32BE');
12
13
  }
13
- const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
14
- return view.getUint32(0, true);
14
+ return data.getUint32(0, true);
15
15
  };
16
16
  uint32LEDecode.bytes = 4;
17
17
  // uint32LEEncode adds the length prefix.
18
- const uint32LEEncode = (value, target, offset) => {
19
- target = target ?? new Uint8Array(4);
20
- const view = new DataView(target.buffer, target.byteOffset, target.byteLength);
21
- view.setUint32(offset ?? 0, value, true);
22
- return target;
18
+ const uint32LEEncode = (value) => {
19
+ const data = new Uint8ArrayList(new Uint8Array(4));
20
+ data.setUint32(0, value, true);
21
+ return data;
23
22
  };
24
23
  uint32LEEncode.bytes = 4;
25
24
  // prependLengthPrefixTransform adds a length prefix to a message source.
@@ -1,5 +1,5 @@
1
1
  import Long from 'long';
2
- import * as _m0 from 'protobufjs/minimal';
2
+ import _m0 from 'protobufjs/minimal.js';
3
3
  export declare const protobufPackage = "srpc";
4
4
  /** Packet is a message sent over a srpc packet connection. */
5
5
  export interface Packet {
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable */
2
2
  import Long from 'long';
3
- import * as _m0 from 'protobufjs/minimal';
3
+ import _m0 from 'protobufjs/minimal.js';
4
4
  export const protobufPackage = 'srpc';
5
5
  function createBasePacket() {
6
6
  return { body: undefined };
@@ -1,6 +1,7 @@
1
1
  import { pipe } from 'it-pipe';
2
2
  import { ServerRPC } from './server-rpc.js';
3
3
  import { parseLengthPrefixTransform, prependLengthPrefixTransform, decodePacketSource, encodePacketSource, } from './packet.js';
4
+ import { combineUint8ArrayListTransform } from './array-list.js';
4
5
  // Server implements the SRPC server in TypeScript with a Mux.
5
6
  export class Server {
6
7
  constructor(lookupMethod) {
@@ -22,7 +23,7 @@ export class Server {
22
23
  // handleDuplex handles an incoming message duplex.
23
24
  handleDuplex(stream) {
24
25
  const rpc = this.startRpc();
25
- pipe(stream, parseLengthPrefixTransform(), decodePacketSource, rpc, encodePacketSource, prependLengthPrefixTransform(), stream);
26
+ pipe(stream, parseLengthPrefixTransform(), combineUint8ArrayListTransform(), decodePacketSource, rpc, encodePacketSource, prependLengthPrefixTransform(), combineUint8ArrayListTransform(), stream);
26
27
  return rpc;
27
28
  }
28
29
  // handlePacketDuplex handles an incoming Uint8Array duplex.
package/echo/echo.pb.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable */
2
2
  import Long from 'long'
3
3
  import { RpcStreamPacket } from '../rpcstream/rpcstream.pb.js'
4
- import * as _m0 from 'protobufjs/minimal'
4
+ import _m0 from 'protobufjs/minimal.js'
5
5
 
6
6
  export const protobufPackage = 'echo'
7
7
 
@@ -1,5 +1,5 @@
1
1
  // Code generated by protoc-gen-srpc. DO NOT EDIT.
2
- // protoc-gen-srpc version: v0.0.0-20220611014014-aa9dc5523865
2
+ // protoc-gen-srpc version: v0.8.6
3
3
  // source: github.com/aperturerobotics/starpc/echo/echo.proto
4
4
 
5
5
  package echo
package/go.mod CHANGED
@@ -6,27 +6,25 @@ replace github.com/libp2p/go-libp2p => github.com/paralin/go-libp2p v0.20.1-0.20
6
6
 
7
7
  require (
8
8
  github.com/pkg/errors v0.9.1
9
- google.golang.org/protobuf v1.27.1
9
+ google.golang.org/protobuf v1.28.1
10
10
  nhooyr.io/websocket v1.8.8-0.20210410000328-8dee580a7f74
11
11
  )
12
12
 
13
13
  require (
14
- github.com/libp2p/go-libp2p v0.20.1-0.20220622205512-3cf611ad8c9c
15
- github.com/libp2p/go-libp2p-core v0.19.0
14
+ github.com/libp2p/go-libp2p v0.21.0
15
+ github.com/libp2p/go-libp2p-core v0.19.1
16
16
  github.com/libp2p/go-mplex v0.7.1-0.20220702225122-8cbdf39b21f5
17
- github.com/sirupsen/logrus v1.8.2-0.20220112234510-85981c045988
17
+ github.com/sirupsen/logrus v1.9.0
18
18
  )
19
19
 
20
20
  require (
21
- github.com/btcsuite/btcd v0.22.1 // indirect
22
21
  github.com/btcsuite/btcd/btcec/v2 v2.1.3 // indirect
23
- github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect
24
22
  github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
25
23
  github.com/gogo/protobuf v1.3.2 // indirect
26
24
  github.com/ipfs/go-cid v0.2.0 // indirect
27
25
  github.com/ipfs/go-log/v2 v2.5.1 // indirect
28
26
  github.com/klauspost/compress v1.15.1 // indirect
29
- github.com/klauspost/cpuid/v2 v2.0.12 // indirect
27
+ github.com/klauspost/cpuid/v2 v2.0.9 // indirect
30
28
  github.com/libp2p/go-buffer-pool v0.0.2 // indirect
31
29
  github.com/libp2p/go-openssl v0.0.7 // indirect
32
30
  github.com/mattn/go-isatty v0.0.14 // indirect
@@ -45,7 +43,7 @@ require (
45
43
  go.uber.org/atomic v1.7.0 // indirect
46
44
  go.uber.org/multierr v1.6.0 // indirect
47
45
  go.uber.org/zap v1.19.1 // indirect
48
- golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect
49
- golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
46
+ golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect
47
+ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
50
48
  lukechampine.com/blake3 v1.1.6 // indirect
51
49
  )
package/go.sum CHANGED
@@ -1,11 +1,9 @@
1
1
  github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
2
2
  github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
3
3
  github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c=
4
- github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y=
5
4
  github.com/btcsuite/btcd/btcec/v2 v2.1.3 h1:xM/n3yIhHAhHy04z4i43C8p4ehixJZMsnrVJkgl+MTE=
6
5
  github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
7
6
  github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
8
- github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
9
7
  github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
10
8
  github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
11
9
  github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -54,9 +52,8 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs
54
52
  github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A=
55
53
  github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
56
54
  github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
55
+ github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
57
56
  github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
58
- github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE=
59
- github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
60
57
  github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
61
58
  github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
62
59
  github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
@@ -64,8 +61,8 @@ github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
64
61
  github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
65
62
  github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs=
66
63
  github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM=
67
- github.com/libp2p/go-libp2p-core v0.19.0 h1:KDw7hanmh0EuVdZqsHCAzmkdiYMk5uR5h0UGSCVTxSU=
68
- github.com/libp2p/go-libp2p-core v0.19.0/go.mod h1:AkA+FUKQfYt1FLNef5fOPlo/naAWjKy/RCjkcPjqzYg=
64
+ github.com/libp2p/go-libp2p-core v0.19.1 h1:zaZQQCeCrFMtxFa1wHy6AhsVynyNmZAvwgWqSSPT3WE=
65
+ github.com/libp2p/go-libp2p-core v0.19.1/go.mod h1:2uLhmmqDiFY+dw+70KkBLeKvvsJHGWUINRDdeV1ip7k=
69
66
  github.com/libp2p/go-libp2p-testing v0.10.0 h1:LO7wuUPPNAe1D1s0HZ+9WoROaGIn/MEl1wtugXuTRzg=
70
67
  github.com/libp2p/go-mplex v0.7.1-0.20220702225122-8cbdf39b21f5 h1:ik8jmF64ZDxAn5K9zJ74ZHed6SBoomwcrP+p6QT7OOQ=
71
68
  github.com/libp2p/go-mplex v0.7.1-0.20220702225122-8cbdf39b21f5/go.mod h1:rW8ThnRcYWft/Jb2jeORBmPd6xuG3dGxWN/W168L9EU=
@@ -106,8 +103,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
106
103
  github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
107
104
  github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
108
105
  github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
109
- github.com/sirupsen/logrus v1.8.2-0.20220112234510-85981c045988 h1:MF2lii450TvZhyAadvfiBGAr37d/U/ug5+N8eMvK89o=
110
- github.com/sirupsen/logrus v1.8.2-0.20220112234510-85981c045988/go.mod h1:x/wqQ2RFrvQZEw5sMa05JQ/UbAAIfbzwTyMeXz9S0YI=
106
+ github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
107
+ github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
111
108
  github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU=
112
109
  github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc=
113
110
  github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
@@ -136,8 +133,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
136
133
  golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
137
134
  golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
138
135
  golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
139
- golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM=
140
- golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
136
+ golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA=
137
+ golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
141
138
  golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
142
139
  golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
143
140
  golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -163,9 +160,8 @@ golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7w
163
160
  golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
164
161
  golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
165
162
  golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
166
- golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
167
- golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
168
- golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
163
+ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
164
+ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
169
165
  golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
170
166
  golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
171
167
  golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -184,8 +180,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
184
180
  golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
185
181
  golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
186
182
  google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
187
- google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
188
- google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
183
+ google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
184
+ google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
189
185
  gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
190
186
  gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
191
187
  gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "starpc",
3
- "version": "0.8.6",
3
+ "version": "0.9.0",
4
4
  "description": "Streaming protobuf RPC service protocol over any two-way channel.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -59,34 +59,35 @@
59
59
  "singleQuote": true
60
60
  },
61
61
  "devDependencies": {
62
- "@typescript-eslint/eslint-plugin": "^5.30.5",
63
- "@typescript-eslint/parser": "^5.30.5",
62
+ "@typescript-eslint/eslint-plugin": "^5.31.0",
63
+ "@typescript-eslint/parser": "^5.31.0",
64
64
  "bufferutil": "^4.0.6",
65
65
  "depcheck": "^1.4.3",
66
- "esbuild": "^0.14.48",
67
- "eslint": "^8.19.0",
66
+ "esbuild": "^0.14.51",
67
+ "eslint": "^8.20.0",
68
68
  "eslint-config-prettier": "^8.5.0",
69
69
  "prettier": "^2.7.1",
70
70
  "rimraf": "^3.0.2",
71
- "ts-proto": "^1.117.0",
71
+ "ts-proto": "^1.121.1",
72
72
  "typescript": "^4.7.4",
73
73
  "utf-8-validate": "^5.0.9"
74
74
  },
75
75
  "dependencies": {
76
76
  "@libp2p/interface-connection": "^2.1.1",
77
77
  "@libp2p/interface-stream-muxer": "^2.0.1",
78
- "@libp2p/mplex": "^4.0.0",
78
+ "@libp2p/mplex": "^4.0.2",
79
79
  "event-iterator": "^2.0.0",
80
80
  "isomorphic-ws": "^5.0.0",
81
81
  "it-first": "^1.0.7",
82
- "it-length-prefixed": "^7.0.1",
82
+ "it-length-prefixed": "^8.0.0",
83
83
  "it-pipe": "^2.0.3",
84
84
  "it-pushable": "^3.0.0",
85
85
  "it-stream-types": "^1.0.4",
86
86
  "it-ws": "^5.0.2",
87
87
  "long": "^5.2.0",
88
88
  "patch-package": "^6.4.7",
89
- "protobufjs": "^6.11.3",
90
- "ws": "^8.8.0"
89
+ "protobufjs": "^7.0.0",
90
+ "uint8arraylist": "^2.0.0",
91
+ "ws": "^8.8.1"
91
92
  }
92
93
  }
@@ -0,0 +1,19 @@
1
+ import type { Source } from 'it-stream-types'
2
+ import { isUint8ArrayList, Uint8ArrayList } from 'uint8arraylist'
3
+ import type { Transform } from 'it-stream-types'
4
+
5
+ // combineUint8ArrayListTransform combines a Uint8ArrayList into a Uint8Array.
6
+ export function combineUint8ArrayListTransform(): Transform<Uint8Array | Uint8ArrayList, Uint8Array> {
7
+ // decodeMessageSource unmarshals and async yields encoded Messages.
8
+ return async function* decodeMessageSource(
9
+ source: Source<Uint8Array | Uint8ArrayList>
10
+ ): AsyncIterable<Uint8Array> {
11
+ for await (const obj of source) {
12
+ if (isUint8ArrayList(obj)) {
13
+ yield* [obj.subarray()]
14
+ } else {
15
+ yield* [obj]
16
+ }
17
+ }
18
+ }
19
+ }
package/srpc/client.ts CHANGED
@@ -11,6 +11,7 @@ import {
11
11
  parseLengthPrefixTransform,
12
12
  prependLengthPrefixTransform,
13
13
  } from './packet.js'
14
+ import { combineUint8ArrayListTransform } from './array-list.js'
14
15
 
15
16
  // Client implements the ts-proto Rpc interface with the drpcproto protocol.
16
17
  export class Client implements TsProtoRpc {
@@ -142,10 +143,12 @@ export class Client implements TsProtoRpc {
142
143
  pipe(
143
144
  conn,
144
145
  parseLengthPrefixTransform(),
146
+ combineUint8ArrayListTransform(),
145
147
  decodePacketSource,
146
148
  call,
147
149
  encodePacketSource,
148
150
  prependLengthPrefixTransform(),
151
+ combineUint8ArrayListTransform(),
149
152
  conn
150
153
  )
151
154
  await call.writeCallStart(data || undefined)
package/srpc/packet.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { Transform } from 'it-stream-types'
2
1
  import {
3
2
  encode as lengthPrefixEncode,
4
3
  decode as lengthPrefixDecode,
@@ -9,6 +8,8 @@ import {
9
8
  buildDecodeMessageTransform,
10
9
  buildEncodeMessageTransform,
11
10
  } from './message.js'
11
+ import { Uint8ArrayList } from 'uint8arraylist'
12
+ import { Transform } from 'it-pipe'
12
13
 
13
14
  // decodePacketSource decodes packets from a binary data stream.
14
15
  export const decodePacketSource = buildDecodeMessageTransform<Packet>(Packet)
@@ -17,38 +18,34 @@ export const decodePacketSource = buildDecodeMessageTransform<Packet>(Packet)
17
18
  export const encodePacketSource = buildEncodeMessageTransform<Packet>(Packet)
18
19
 
19
20
  // uint32LEDecode removes the length prefix.
20
- const uint32LEDecode = (data: Uint8Array) => {
21
+ const uint32LEDecode = (data: Uint8ArrayList) => {
21
22
  if (data.length < 4) {
22
23
  throw RangeError('Could not decode int32BE')
23
24
  }
24
25
 
25
- const view = new DataView(data.buffer, data.byteOffset, data.byteLength)
26
- return view.getUint32(0, true)
26
+ return data.getUint32(0, true)
27
27
  }
28
28
  uint32LEDecode.bytes = 4
29
29
 
30
30
  // uint32LEEncode adds the length prefix.
31
31
  const uint32LEEncode = (
32
32
  value: number,
33
- target?: Uint8Array,
34
- offset?: number
35
33
  ) => {
36
- target = target ?? new Uint8Array(4)
37
- const view = new DataView(target.buffer, target.byteOffset, target.byteLength)
38
- view.setUint32(offset ?? 0, value, true)
39
- return target
34
+ const data = new Uint8ArrayList(new Uint8Array(4))
35
+ data.setUint32(0, value, true)
36
+ return data
40
37
  }
41
38
  uint32LEEncode.bytes = 4
42
39
 
43
40
  // prependLengthPrefixTransform adds a length prefix to a message source.
44
41
  // little-endian uint32
45
- export function prependLengthPrefixTransform(): Transform<Uint8Array> {
42
+ export function prependLengthPrefixTransform(): Transform<Uint8Array | Uint8ArrayList, Uint8ArrayList> {
46
43
  return lengthPrefixEncode({ lengthEncoder: uint32LEEncode })
47
44
  }
48
45
 
49
46
  // parseLengthPrefixTransform parses the length prefix from a message source.
50
47
  // little-endian uint32
51
- export function parseLengthPrefixTransform(): Transform<Uint8Array> {
48
+ export function parseLengthPrefixTransform(): Transform<Uint8Array | Uint8ArrayList, Uint8ArrayList> {
52
49
  return lengthPrefixDecode({ lengthDecoder: uint32LEDecode })
53
50
  }
54
51
 
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable */
2
2
  import Long from 'long'
3
- import * as _m0 from 'protobufjs/minimal'
3
+ import _m0 from 'protobufjs/minimal.js'
4
4
 
5
5
  export const protobufPackage = 'srpc'
6
6
 
package/srpc/server.ts CHANGED
@@ -13,6 +13,7 @@ import {
13
13
  } from './packet.js'
14
14
  import { StreamHandler } from './conn.js'
15
15
  import { RpcStreamHandler } from '../rpcstream/rpcstream.js'
16
+ import { combineUint8ArrayListTransform } from './array-list.js'
16
17
 
17
18
  // Server implements the SRPC server in TypeScript with a Mux.
18
19
  export class Server implements StreamHandler {
@@ -45,10 +46,12 @@ export class Server implements StreamHandler {
45
46
  pipe(
46
47
  stream,
47
48
  parseLengthPrefixTransform(),
49
+ combineUint8ArrayListTransform(),
48
50
  decodePacketSource,
49
51
  rpc,
50
52
  encodePacketSource,
51
53
  prependLengthPrefixTransform(),
54
+ combineUint8ArrayListTransform(),
52
55
  stream
53
56
  )
54
57
  return rpc