@protobase/client 0.62.2 → 0.62.4
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/dist/calls/peer-link.js +31 -16
- package/package.json +3 -3
package/dist/calls/peer-link.js
CHANGED
|
@@ -36,31 +36,26 @@ const peerLink = (self, { iceServers, send, onTracks, createPeerConnection: crea
|
|
|
36
36
|
...track,
|
|
37
37
|
...receivedTrack(track) && { track: receivedTrack(track) }
|
|
38
38
|
})));
|
|
39
|
-
const
|
|
39
|
+
const open = (member, peer) => {
|
|
40
40
|
const pc = createPeerConnection$1({ iceServers });
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
polite: self < member,
|
|
44
|
-
makingOffer: false,
|
|
45
|
-
ignoreOffer: false,
|
|
46
|
-
senders: /* @__PURE__ */ new Map()
|
|
47
|
-
};
|
|
48
|
-
peers.set(member, peer);
|
|
41
|
+
peer.pc = pc;
|
|
42
|
+
peer.senders = /* @__PURE__ */ new Map();
|
|
49
43
|
pc.onnegotiationneeded = async () => {
|
|
50
|
-
|
|
44
|
+
const making = pc.setLocalDescription();
|
|
45
|
+
peer.makingOffer = making;
|
|
51
46
|
try {
|
|
52
|
-
await
|
|
53
|
-
send({
|
|
47
|
+
await making;
|
|
48
|
+
if (peer.pc === pc) send({
|
|
54
49
|
type: "signal",
|
|
55
50
|
to: member,
|
|
56
51
|
description: pc.localDescription.toJSON()
|
|
57
52
|
});
|
|
58
53
|
} finally {
|
|
59
|
-
peer.makingOffer =
|
|
54
|
+
if (peer.makingOffer === making) peer.makingOffer = void 0;
|
|
60
55
|
}
|
|
61
56
|
};
|
|
62
57
|
pc.onicecandidate = (event) => {
|
|
63
|
-
if (event.candidate) send({
|
|
58
|
+
if (event.candidate && peer.pc === pc) send({
|
|
64
59
|
type: "signal",
|
|
65
60
|
to: member,
|
|
66
61
|
candidate: event.candidate.toJSON()
|
|
@@ -71,19 +66,39 @@ const peerLink = (self, { iceServers, send, onTracks, createPeerConnection: crea
|
|
|
71
66
|
};
|
|
72
67
|
pc.ontrack = () => emitTracks();
|
|
73
68
|
for (const [source, sending] of local) peer.senders.set(source, sendOn(pc, sending));
|
|
69
|
+
};
|
|
70
|
+
const connect = (member) => {
|
|
71
|
+
const peer = {
|
|
72
|
+
polite: self < member,
|
|
73
|
+
ignoreOffer: false
|
|
74
|
+
};
|
|
75
|
+
peers.set(member, peer);
|
|
76
|
+
open(member, peer);
|
|
74
77
|
return peer;
|
|
75
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* Chromium sometimes gathers no candidates on a connection whose first offer it rolled back, so neither side ever
|
|
81
|
+
* checks: the side that gives way on a connection never negotiated starts on a new one instead, once its offer is set.
|
|
82
|
+
*/
|
|
83
|
+
const renew = async (member, peer) => {
|
|
84
|
+
await peer.makingOffer;
|
|
85
|
+
peer.pc.close();
|
|
86
|
+
open(member, peer);
|
|
87
|
+
};
|
|
76
88
|
const disconnect = (member) => {
|
|
77
89
|
peers.get(member)?.pc.close();
|
|
78
90
|
peers.delete(member);
|
|
79
91
|
};
|
|
80
92
|
const signal = async (from, description, candidate) => {
|
|
81
93
|
const peer = peers.get(from) ?? connect(from);
|
|
82
|
-
const { pc } = peer;
|
|
83
94
|
if (description) {
|
|
84
|
-
const collision = description.type === "offer" && (peer.makingOffer || pc.signalingState !== "stable");
|
|
95
|
+
const collision = description.type === "offer" && (peer.makingOffer !== void 0 || peer.pc.signalingState !== "stable");
|
|
85
96
|
peer.ignoreOffer = !politeTo(peer, description.sdp) && collision;
|
|
86
97
|
if (peer.ignoreOffer) return;
|
|
98
|
+
if (collision && !peer.pc.currentRemoteDescription) await renew(from, peer);
|
|
99
|
+
}
|
|
100
|
+
const { pc } = peer;
|
|
101
|
+
if (description) {
|
|
87
102
|
await pc.setRemoteDescription(description);
|
|
88
103
|
if (description.type === "offer") {
|
|
89
104
|
await pc.setLocalDescription();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@protobase/client",
|
|
3
|
-
"version": "0.62.
|
|
3
|
+
"version": "0.62.4",
|
|
4
4
|
"description": "Typed fetch client for the Protobase REST API.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@better-auth/passkey": "^1.7.12",
|
|
34
|
-
"@protobase/layout": "0.62.
|
|
35
|
-
"@protobase/schema": "0.62.
|
|
34
|
+
"@protobase/layout": "0.62.4",
|
|
35
|
+
"@protobase/schema": "0.62.4",
|
|
36
36
|
"@simplewebauthn/browser": "^13.3.0",
|
|
37
37
|
"better-auth": "^1.7.12"
|
|
38
38
|
}
|