Skip to content

Commit 9a378ad

Browse files
committed
fix: updating "write" signature to accept same types as "send"
write now accepts ArrayBufferView | ArrayBuffer | Uint8Array | string | Blob
1 parent 8fd953e commit 9a378ad

File tree

2 files changed

+240
-4
lines changed

2 files changed

+240
-4
lines changed

lite.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*! simple-peer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
22
import debug from 'debug'
33
import { RTCPeerConnection, RTCSessionDescription, RTCIceCandidate, RTCDataChannel, RTCDataChannelEvent, RTCPeerConnectionIceEvent, MediaStream, MediaStreamTrack } from 'webrtc-polyfill'
4-
import { EventEmitter } from 'eventemitter3'
4+
import { EventEmitter } from 'eventemitter3'
55
import errCode from 'err-code'
66
import { randomBytes, arr2hex, text2arr } from 'uint8-util'
77

@@ -149,7 +149,7 @@ class Peer extends EventEmitter<PeerEvents> {
149149
_closingInterval: ReturnType<typeof setInterval> | null
150150
_remoteTracks: Array<{ track: MediaStreamTrack; stream: MediaStream }> | null
151151
_remoteStreams: MediaStream[] | null
152-
_chunk: Uint8Array | null
152+
_chunk: ArrayBufferView | ArrayBuffer | Uint8Array | string | Blob | null
153153
_cb: Callback | null
154154
_interval: ReturnType<typeof setInterval> | null
155155
_isReactNativeWebrtc: boolean
@@ -432,7 +432,7 @@ class Peer extends EventEmitter<PeerEvents> {
432432
/**
433433
* Write data to the peer (with optional callback).
434434
*/
435-
write (chunk: Uint8Array, cb?: Callback): void {
435+
write (chunk: ArrayBufferView | ArrayBuffer | Uint8Array | string | Blob, cb?: Callback): void {
436436
this._write(chunk, cb || (() => {}))
437437
}
438438

@@ -566,7 +566,7 @@ class Peer extends EventEmitter<PeerEvents> {
566566
}, CHANNEL_CLOSING_TIMEOUT)
567567
}
568568

569-
_write (chunk: Uint8Array, cb: Callback): void {
569+
_write (chunk: ArrayBufferView | ArrayBuffer | Uint8Array | string | Blob, cb: Callback): void {
570570
if (this.destroyed) return cb(errCode(new Error('cannot write after peer is destroyed'), 'ERR_DATA_CHANNEL'))
571571

572572
if (this._connected) {

test/write.ts

Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
import Peer from '../index.js'
2+
import { test, expect } from 'vitest'
3+
4+
test('write string data', function () {
5+
return new Promise<void>((resolve) => {
6+
const peer1 = new Peer({ initiator: true })
7+
const peer2 = new Peer()
8+
9+
peer1.on('signal', function (data) {
10+
peer2.signal(data)
11+
})
12+
13+
peer2.on('signal', function (data) {
14+
peer1.signal(data)
15+
})
16+
17+
peer1.on('connect', tryTest)
18+
peer2.on('connect', tryTest)
19+
20+
function tryTest () {
21+
if (!peer1.connected || !peer2.connected) return
22+
23+
peer1.write('hello from peer1', (err) => {
24+
expect(err).toBeFalsy()
25+
})
26+
27+
peer2.on('data', function (data) {
28+
expect(ArrayBuffer.isView(data)).toBe(true)
29+
expect(Buffer.from(data as Uint8Array).toString()).toBe('hello from peer1')
30+
31+
peer2.write('hello from peer2', (err) => {
32+
expect(err).toBeFalsy()
33+
})
34+
35+
peer1.on('data', function (data) {
36+
expect(ArrayBuffer.isView(data)).toBe(true)
37+
expect(Buffer.from(data as Uint8Array).toString()).toBe('hello from peer2')
38+
39+
peer1.on('close', function () { })
40+
peer1.destroy()
41+
peer2.on('close', function () { resolve() })
42+
peer2.destroy()
43+
})
44+
})
45+
}
46+
})
47+
})
48+
49+
test('write Uint8Array data', function () {
50+
return new Promise<void>((resolve) => {
51+
const peer1 = new Peer({ initiator: true })
52+
const peer2 = new Peer()
53+
54+
peer1.on('signal', function (data) {
55+
peer2.signal(data)
56+
})
57+
58+
peer2.on('signal', function (data) {
59+
peer1.signal(data)
60+
})
61+
62+
peer1.on('connect', tryTest)
63+
peer2.on('connect', tryTest)
64+
65+
function tryTest () {
66+
if (!peer1.connected || !peer2.connected) return
67+
68+
const data1 = new Uint8Array([0, 1, 2, 3])
69+
peer1.write(data1, (err) => {
70+
expect(err).toBeFalsy()
71+
})
72+
73+
peer2.on('data', function (data) {
74+
expect(ArrayBuffer.isView(data)).toBe(true)
75+
expect(Buffer.from(data as Uint8Array)).toEqual(Buffer.from([0, 1, 2, 3]))
76+
77+
const data2 = new Uint8Array([4, 5, 6, 7])
78+
peer2.write(data2, (err) => {
79+
expect(err).toBeFalsy()
80+
})
81+
82+
peer1.on('data', function (data) {
83+
expect(ArrayBuffer.isView(data)).toBe(true)
84+
expect(Buffer.from(data as Uint8Array)).toEqual(Buffer.from([4, 5, 6, 7]))
85+
86+
peer1.on('close', function () { })
87+
peer1.destroy()
88+
peer2.on('close', function () { resolve() })
89+
peer2.destroy()
90+
})
91+
})
92+
}
93+
})
94+
})
95+
96+
test('write ArrayBuffer data', function () {
97+
return new Promise<void>((resolve) => {
98+
const peer1 = new Peer({ initiator: true })
99+
const peer2 = new Peer()
100+
101+
peer1.on('signal', function (data) {
102+
peer2.signal(data)
103+
})
104+
105+
peer2.on('signal', function (data) {
106+
peer1.signal(data)
107+
})
108+
109+
peer1.on('connect', tryTest)
110+
peer2.on('connect', tryTest)
111+
112+
function tryTest () {
113+
if (!peer1.connected || !peer2.connected) return
114+
115+
const buffer1 = new Uint8Array([10, 11, 12, 13]).buffer
116+
peer1.write(buffer1, (err) => {
117+
expect(err).toBeFalsy()
118+
})
119+
120+
peer2.on('data', function (data) {
121+
expect(ArrayBuffer.isView(data)).toBe(true)
122+
expect(Buffer.from(data as Uint8Array)).toEqual(Buffer.from([10, 11, 12, 13]))
123+
124+
const buffer2 = new Uint8Array([14, 15, 16, 17]).buffer
125+
peer2.write(buffer2, (err) => {
126+
expect(err).toBeFalsy()
127+
})
128+
129+
peer1.on('data', function (data) {
130+
expect(ArrayBuffer.isView(data)).toBe(true)
131+
expect(Buffer.from(data as Uint8Array)).toEqual(Buffer.from([14, 15, 16, 17]))
132+
133+
peer1.on('close', function () { })
134+
peer1.destroy()
135+
peer2.on('close', function () { resolve() })
136+
peer2.destroy()
137+
})
138+
})
139+
}
140+
})
141+
})
142+
143+
test('write Blob data', function () {
144+
return new Promise<void>((resolve) => {
145+
const peer1 = new Peer({ initiator: true })
146+
const peer2 = new Peer()
147+
148+
peer1.on('signal', function (data) {
149+
peer2.signal(data)
150+
})
151+
152+
peer2.on('signal', function (data) {
153+
peer1.signal(data)
154+
})
155+
156+
peer1.on('connect', tryTest)
157+
peer2.on('connect', tryTest)
158+
159+
function tryTest () {
160+
if (!peer1.connected || !peer2.connected) return
161+
162+
const blob1 = new Blob(['hello blob'])
163+
peer1.write(blob1, (err) => {
164+
expect(err).toBeFalsy()
165+
})
166+
167+
peer2.on('data', function (data) {
168+
expect(ArrayBuffer.isView(data)).toBe(true)
169+
expect(Buffer.from(data as Uint8Array).toString()).toBe('hello blob')
170+
171+
const blob2 = new Blob(['goodbye blob'])
172+
peer2.write(blob2, (err) => {
173+
expect(err).toBeFalsy()
174+
})
175+
176+
peer1.on('data', function (data) {
177+
expect(ArrayBuffer.isView(data)).toBe(true)
178+
expect(Buffer.from(data as Uint8Array).toString()).toBe('goodbye blob')
179+
180+
peer1.on('close', function () { })
181+
peer1.destroy()
182+
peer2.on('close', function () { resolve() })
183+
peer2.destroy()
184+
})
185+
})
186+
}
187+
})
188+
})
189+
190+
test('write Buffer data', function () {
191+
return new Promise<void>((resolve) => {
192+
const peer1 = new Peer({ initiator: true })
193+
const peer2 = new Peer()
194+
195+
peer1.on('signal', function (data) {
196+
peer2.signal(data)
197+
})
198+
199+
peer2.on('signal', function (data) {
200+
peer1.signal(data)
201+
})
202+
203+
peer1.on('connect', tryTest)
204+
peer2.on('connect', tryTest)
205+
206+
function tryTest () {
207+
if (!peer1.connected || !peer2.connected) return
208+
209+
const buf1 = Buffer.from('buffer data')
210+
peer1.write(buf1, (err) => {
211+
expect(err).toBeFalsy()
212+
})
213+
214+
peer2.on('data', function (data) {
215+
expect(ArrayBuffer.isView(data)).toBe(true)
216+
expect(Buffer.from(data as Uint8Array).toString()).toBe('buffer data')
217+
218+
const buf2 = Buffer.from('more buffer data')
219+
peer2.write(buf2, (err) => {
220+
expect(err).toBeFalsy()
221+
})
222+
223+
peer1.on('data', function (data) {
224+
expect(ArrayBuffer.isView(data)).toBe(true)
225+
expect(Buffer.from(data as Uint8Array).toString()).toBe('more buffer data')
226+
227+
peer1.on('close', function () { })
228+
peer1.destroy()
229+
peer2.on('close', function () { resolve() })
230+
peer2.destroy()
231+
})
232+
})
233+
}
234+
})
235+
})
236+

0 commit comments

Comments
 (0)