@agent-p2p/peer 0.0.1 → 0.0.3
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.
|
@@ -17,6 +17,8 @@ export declare class TrysteroProvider {
|
|
|
17
17
|
private _peers;
|
|
18
18
|
private _destroyed;
|
|
19
19
|
private _onDocUpdate;
|
|
20
|
+
/** Maps trystero peerId → set of Yjs awareness clientIDs received from that peer */
|
|
21
|
+
private _peerClients;
|
|
20
22
|
constructor(doc: Y.Doc, roomName: string, config?: TrysteroConfig);
|
|
21
23
|
private _connect;
|
|
22
24
|
private _sendSyncStep1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trystero-provider.d.ts","sourceRoot":"","sources":["../../src/transport/trystero-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,SAAS,EAAsE,MAAM,uBAAuB,CAAC;AAKtH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,MAAM,WAAW,cAAc;IAC9B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAID,qBAAa,gBAAgB;IAC5B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAgD;
|
|
1
|
+
{"version":3,"file":"trystero-provider.d.ts","sourceRoot":"","sources":["../../src/transport/trystero-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,SAAS,EAAsE,MAAM,uBAAuB,CAAC;AAKtH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,MAAM,WAAW,cAAc;IAC9B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAID,qBAAa,gBAAgB;IAC5B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAgD;IACpE,oFAAoF;IACpF,OAAO,CAAC,YAAY,CAAkC;gBAE1C,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,cAAmB;YAgBvD,QAAQ;IAkFtB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,OAAO;IAQf,OAAO,IAAI,IAAI;CAWf"}
|
|
@@ -14,6 +14,8 @@ export class TrysteroProvider {
|
|
|
14
14
|
_peers = new Set();
|
|
15
15
|
_destroyed = false;
|
|
16
16
|
_onDocUpdate;
|
|
17
|
+
/** Maps trystero peerId → set of Yjs awareness clientIDs received from that peer */
|
|
18
|
+
_peerClients = new Map();
|
|
17
19
|
constructor(doc, roomName, config = {}) {
|
|
18
20
|
this.doc = doc;
|
|
19
21
|
this.roomName = roomName;
|
|
@@ -71,14 +73,34 @@ export class TrysteroProvider {
|
|
|
71
73
|
});
|
|
72
74
|
room.onPeerLeave((peerId) => {
|
|
73
75
|
this._peers.delete(peerId);
|
|
76
|
+
// Remove awareness states that came from this trystero peer
|
|
77
|
+
const clientIds = this._peerClients.get(peerId);
|
|
78
|
+
if (clientIds && clientIds.size > 0) {
|
|
79
|
+
removeAwarenessStates(this.awareness, Array.from(clientIds), "peer left");
|
|
80
|
+
this._peerClients.delete(peerId);
|
|
81
|
+
}
|
|
74
82
|
});
|
|
75
83
|
this.doc.on("update", this._onDocUpdate);
|
|
76
|
-
this.awareness.on("update", ({ added, updated, removed }) => {
|
|
84
|
+
this.awareness.on("update", ({ added, updated, removed }, origin) => {
|
|
77
85
|
const changedClients = [...added, ...updated, ...removed];
|
|
78
86
|
const encoder = encoding.createEncoder();
|
|
79
87
|
encoding.writeVarUint(encoder, MSG_AWARENESS);
|
|
80
88
|
encoding.writeVarUint8Array(encoder, encodeAwarenessUpdate(this.awareness, changedClients));
|
|
81
89
|
this._broadcast(encoding.toUint8Array(encoder));
|
|
90
|
+
// Track which Yjs clientIDs belong to which trystero peer
|
|
91
|
+
if (typeof origin === "string" && origin !== "local") {
|
|
92
|
+
let ids = this._peerClients.get(origin);
|
|
93
|
+
if (!ids) {
|
|
94
|
+
ids = new Set();
|
|
95
|
+
this._peerClients.set(origin, ids);
|
|
96
|
+
}
|
|
97
|
+
for (const id of added)
|
|
98
|
+
ids.add(id);
|
|
99
|
+
for (const id of updated)
|
|
100
|
+
ids.add(id);
|
|
101
|
+
for (const id of removed)
|
|
102
|
+
ids.delete(id);
|
|
103
|
+
}
|
|
82
104
|
});
|
|
83
105
|
}
|
|
84
106
|
_sendSyncStep1(peerId) {
|
|
@@ -117,13 +139,21 @@ export class TrysteroProvider {
|
|
|
117
139
|
}
|
|
118
140
|
}
|
|
119
141
|
_broadcast(data) {
|
|
120
|
-
|
|
121
|
-
this._send
|
|
142
|
+
try {
|
|
143
|
+
if (this._send && this._peers.size > 0) {
|
|
144
|
+
this._send(data.buffer);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Data channel may already be closed during shutdown
|
|
122
149
|
}
|
|
123
150
|
}
|
|
124
151
|
_sendTo(data, peerId) {
|
|
125
|
-
|
|
126
|
-
this._send(data.buffer, peerId);
|
|
152
|
+
try {
|
|
153
|
+
this._send?.(data.buffer, peerId);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Peer's data channel may already be closed
|
|
127
157
|
}
|
|
128
158
|
}
|
|
129
159
|
destroy() {
|
|
@@ -136,6 +166,7 @@ export class TrysteroProvider {
|
|
|
136
166
|
this._room = null;
|
|
137
167
|
this._send = null;
|
|
138
168
|
this._peers.clear();
|
|
169
|
+
this._peerClients.clear();
|
|
139
170
|
}
|
|
140
171
|
}
|
|
141
172
|
//# sourceMappingURL=trystero-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trystero-provider.js","sourceRoot":"","sources":["../../src/transport/trystero-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACtH,OAAO,KAAK,YAAY,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAI1C,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,aAAa,GAAG,CAAC,CAAC;AAWxB,MAAM,OAAO,gBAAgB;IACnB,GAAG,CAAQ;IACX,SAAS,CAAY;IACrB,QAAQ,CAAS;IACjB,SAAS,CAAgB;IAE1B,KAAK,GAAgB,IAAI,CAAC;IAC1B,KAAK,GAAqC,IAAI,CAAC;IAC/C,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3B,UAAU,GAAG,KAAK,CAAC;IACnB,YAAY,CAAgD;
|
|
1
|
+
{"version":3,"file":"trystero-provider.js","sourceRoot":"","sources":["../../src/transport/trystero-provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-p2p/peer",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "P2P peer transport for agent-p2p — Yjs + trystero (serverless WebRTC)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -11,11 +11,13 @@
|
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"files": ["src", "dist"],
|
|
14
|
+
"trustedDependencies": ["node-datachannel"],
|
|
14
15
|
"scripts": {
|
|
15
16
|
"build": "tsc -p tsconfig.json"
|
|
16
17
|
},
|
|
17
18
|
"dependencies": {
|
|
18
19
|
"@agent-p2p/core": "^0.0.1",
|
|
20
|
+
"node-datachannel": "^0.32.0",
|
|
19
21
|
"yjs": "^13.6",
|
|
20
22
|
"y-protocols": "^1.0",
|
|
21
23
|
"y-indexeddb": "^9.0",
|
|
@@ -29,6 +29,8 @@ export class TrysteroProvider {
|
|
|
29
29
|
private _peers = new Set<string>();
|
|
30
30
|
private _destroyed = false;
|
|
31
31
|
private _onDocUpdate: (update: Uint8Array, origin: unknown) => void;
|
|
32
|
+
/** Maps trystero peerId → set of Yjs awareness clientIDs received from that peer */
|
|
33
|
+
private _peerClients = new Map<string, Set<number>>();
|
|
32
34
|
|
|
33
35
|
constructor(doc: Y.Doc, roomName: string, config: TrysteroConfig = {}) {
|
|
34
36
|
this.doc = doc;
|
|
@@ -94,18 +96,36 @@ export class TrysteroProvider {
|
|
|
94
96
|
|
|
95
97
|
room.onPeerLeave((peerId) => {
|
|
96
98
|
this._peers.delete(peerId);
|
|
99
|
+
// Remove awareness states that came from this trystero peer
|
|
100
|
+
const clientIds = this._peerClients.get(peerId);
|
|
101
|
+
if (clientIds && clientIds.size > 0) {
|
|
102
|
+
removeAwarenessStates(this.awareness, Array.from(clientIds), "peer left");
|
|
103
|
+
this._peerClients.delete(peerId);
|
|
104
|
+
}
|
|
97
105
|
});
|
|
98
106
|
|
|
99
107
|
this.doc.on("update", this._onDocUpdate);
|
|
100
108
|
|
|
101
109
|
this.awareness.on(
|
|
102
110
|
"update",
|
|
103
|
-
({ added, updated, removed }: { added: number[]; updated: number[]; removed: number[] }) => {
|
|
111
|
+
({ added, updated, removed }: { added: number[]; updated: number[]; removed: number[] }, origin: unknown) => {
|
|
104
112
|
const changedClients = [...added, ...updated, ...removed];
|
|
105
113
|
const encoder = encoding.createEncoder();
|
|
106
114
|
encoding.writeVarUint(encoder, MSG_AWARENESS);
|
|
107
115
|
encoding.writeVarUint8Array(encoder, encodeAwarenessUpdate(this.awareness, changedClients));
|
|
108
116
|
this._broadcast(encoding.toUint8Array(encoder));
|
|
117
|
+
|
|
118
|
+
// Track which Yjs clientIDs belong to which trystero peer
|
|
119
|
+
if (typeof origin === "string" && origin !== "local") {
|
|
120
|
+
let ids = this._peerClients.get(origin);
|
|
121
|
+
if (!ids) {
|
|
122
|
+
ids = new Set();
|
|
123
|
+
this._peerClients.set(origin, ids);
|
|
124
|
+
}
|
|
125
|
+
for (const id of added) ids.add(id);
|
|
126
|
+
for (const id of updated) ids.add(id);
|
|
127
|
+
for (const id of removed) ids.delete(id);
|
|
128
|
+
}
|
|
109
129
|
},
|
|
110
130
|
);
|
|
111
131
|
}
|
|
@@ -149,14 +169,20 @@ export class TrysteroProvider {
|
|
|
149
169
|
}
|
|
150
170
|
|
|
151
171
|
private _broadcast(data: Uint8Array): void {
|
|
152
|
-
|
|
153
|
-
this._send
|
|
172
|
+
try {
|
|
173
|
+
if (this._send && this._peers.size > 0) {
|
|
174
|
+
this._send(data.buffer as ArrayBuffer);
|
|
175
|
+
}
|
|
176
|
+
} catch {
|
|
177
|
+
// Data channel may already be closed during shutdown
|
|
154
178
|
}
|
|
155
179
|
}
|
|
156
180
|
|
|
157
181
|
private _sendTo(data: Uint8Array, peerId: string): void {
|
|
158
|
-
|
|
159
|
-
this._send(data.buffer as ArrayBuffer, peerId);
|
|
182
|
+
try {
|
|
183
|
+
this._send?.(data.buffer as ArrayBuffer, peerId);
|
|
184
|
+
} catch {
|
|
185
|
+
// Peer's data channel may already be closed
|
|
160
186
|
}
|
|
161
187
|
}
|
|
162
188
|
|
|
@@ -169,5 +195,6 @@ export class TrysteroProvider {
|
|
|
169
195
|
this._room = null;
|
|
170
196
|
this._send = null;
|
|
171
197
|
this._peers.clear();
|
|
198
|
+
this._peerClients.clear();
|
|
172
199
|
}
|
|
173
200
|
}
|