dropspace 0.0.0-stage → 0.1.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.
- package/README.md +17 -2
- package/dist/automerge/index.d.ts +103 -0
- package/dist/automerge/index.d.ts.map +1 -0
- package/dist/automerge/index.js +394 -0
- package/dist/automerge/index.js.map +1 -0
- package/dist/client/channel.d.ts +131 -0
- package/dist/client/channel.d.ts.map +1 -0
- package/dist/client/channel.js +566 -0
- package/dist/client/channel.js.map +1 -0
- package/dist/client/client.d.ts +310 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +1176 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/events.d.ts +14 -0
- package/dist/client/events.d.ts.map +1 -0
- package/dist/client/events.js +71 -0
- package/dist/client/events.js.map +1 -0
- package/dist/client/identity.d.ts +89 -0
- package/dist/client/identity.d.ts.map +1 -0
- package/dist/client/identity.js +274 -0
- package/dist/client/identity.js.map +1 -0
- package/dist/client/index.d.ts +8 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +8 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/peer-connection.d.ts +182 -0
- package/dist/client/peer-connection.d.ts.map +1 -0
- package/dist/client/peer-connection.js +593 -0
- package/dist/client/peer-connection.js.map +1 -0
- package/dist/client/peer-selection.d.ts +70 -0
- package/dist/client/peer-selection.d.ts.map +1 -0
- package/dist/client/peer-selection.js +193 -0
- package/dist/client/peer-selection.js.map +1 -0
- package/dist/client/storage.d.ts +118 -0
- package/dist/client/storage.d.ts.map +1 -0
- package/dist/client/storage.js +463 -0
- package/dist/client/storage.js.map +1 -0
- package/dist/files/index.d.ts +136 -0
- package/dist/files/index.d.ts.map +1 -0
- package/dist/files/index.js +701 -0
- package/dist/files/index.js.map +1 -0
- package/dist/files/sha256.d.ts +24 -0
- package/dist/files/sha256.d.ts.map +1 -0
- package/dist/files/sha256.js +133 -0
- package/dist/files/sha256.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol/envelope.d.ts +61 -0
- package/dist/protocol/envelope.d.ts.map +1 -0
- package/dist/protocol/envelope.js +260 -0
- package/dist/protocol/envelope.js.map +1 -0
- package/dist/protocol/framing.d.ts +56 -0
- package/dist/protocol/framing.d.ts.map +1 -0
- package/dist/protocol/framing.js +93 -0
- package/dist/protocol/framing.js.map +1 -0
- package/dist/protocol/index.d.ts +3 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +3 -0
- package/dist/protocol/index.js.map +1 -0
- package/fixtures/envelopes.json +132 -0
- package/package.json +43 -4
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { type CryptoAlgorithm, type ErrorCode, type PairingState, type PeerPresence, type PermissionScope, type SignalingEnvelope, type DecodedWireFrame } from "../protocol/index.js";
|
|
2
|
+
import { type DeviceIdentity, type IdentityStorageAdapter } from "./identity.js";
|
|
3
|
+
import { TypedEventEmitter } from "./events.js";
|
|
4
|
+
import { SmartPeerSelector, type PeerSelectionDecision, type PeerSelectionQuery } from "./peer-selection.js";
|
|
5
|
+
import { ManagedPeerSession, type PeerConnectionFactory, type PeerConnectionLifecycleState } from "./peer-connection.js";
|
|
6
|
+
import type { IncomingMessageEvent, SendMessageOptions } from "./channel.js";
|
|
7
|
+
export type SignalingLifecycleState = "disconnected" | "connecting" | "authenticating" | "connected" | "reconnecting" | "closed";
|
|
8
|
+
export interface WebSocketLike {
|
|
9
|
+
readyState: number;
|
|
10
|
+
send(data: string): void;
|
|
11
|
+
close(code?: number, reason?: string): void;
|
|
12
|
+
addEventListener(type: string, listener: (ev: any) => void): void;
|
|
13
|
+
removeEventListener(type: string, listener: (ev: any) => void): void;
|
|
14
|
+
}
|
|
15
|
+
export type WebSocketFactory = (url: string) => WebSocketLike;
|
|
16
|
+
export interface TrustedPeer {
|
|
17
|
+
pairingId: string;
|
|
18
|
+
spaceId: string;
|
|
19
|
+
peerDeviceId: string;
|
|
20
|
+
peerLabel: string;
|
|
21
|
+
peerPublicKey: string;
|
|
22
|
+
peerAlgorithm: CryptoAlgorithm;
|
|
23
|
+
peerFingerprint: string;
|
|
24
|
+
permissions: PermissionScope[];
|
|
25
|
+
createdAt: number;
|
|
26
|
+
}
|
|
27
|
+
export interface PairingInvite {
|
|
28
|
+
pairingId: string;
|
|
29
|
+
spaceId: string;
|
|
30
|
+
inviteToken: string;
|
|
31
|
+
deepLink: string;
|
|
32
|
+
state: PairingState;
|
|
33
|
+
permissions: PermissionScope[];
|
|
34
|
+
expiresAt: number;
|
|
35
|
+
}
|
|
36
|
+
export interface PairingClaimResult {
|
|
37
|
+
pairingId: string;
|
|
38
|
+
spaceId: string;
|
|
39
|
+
creatorDeviceId: string;
|
|
40
|
+
state: PairingState;
|
|
41
|
+
requestedPermissions: PermissionScope[];
|
|
42
|
+
expiresAt: number;
|
|
43
|
+
}
|
|
44
|
+
export interface PairingApprovalRequest {
|
|
45
|
+
pairingId: string;
|
|
46
|
+
spaceId: string;
|
|
47
|
+
claimerDeviceId: string;
|
|
48
|
+
claimerLabel: string;
|
|
49
|
+
claimerPublicKey: string;
|
|
50
|
+
claimerAlgorithm: CryptoAlgorithm;
|
|
51
|
+
claimerFingerprint: string;
|
|
52
|
+
requestedPermissions: PermissionScope[];
|
|
53
|
+
expiresAt: number;
|
|
54
|
+
}
|
|
55
|
+
export interface RevocationEvent {
|
|
56
|
+
revocationId?: string;
|
|
57
|
+
spaceId: string;
|
|
58
|
+
revokedDeviceId: string;
|
|
59
|
+
pairingId?: string;
|
|
60
|
+
revokedByDeviceId: string;
|
|
61
|
+
revokedAt: number;
|
|
62
|
+
reason: string;
|
|
63
|
+
}
|
|
64
|
+
export interface DebugLogEntry {
|
|
65
|
+
timestamp: number;
|
|
66
|
+
category: "signaling" | "webrtc" | "pairing" | "selection" | "hub" | "security";
|
|
67
|
+
summary: string;
|
|
68
|
+
details?: Record<string, unknown>;
|
|
69
|
+
}
|
|
70
|
+
export type DropspaceClientEvents = {
|
|
71
|
+
signalingStateChange: {
|
|
72
|
+
previousState: SignalingLifecycleState;
|
|
73
|
+
state: SignalingLifecycleState;
|
|
74
|
+
sessionId: string | null;
|
|
75
|
+
generation: number;
|
|
76
|
+
reason: string;
|
|
77
|
+
};
|
|
78
|
+
peerStateChange: {
|
|
79
|
+
peerDeviceId: string;
|
|
80
|
+
previousState: PeerConnectionLifecycleState;
|
|
81
|
+
state: PeerConnectionLifecycleState;
|
|
82
|
+
generation: number;
|
|
83
|
+
connectionId: string;
|
|
84
|
+
reason: string;
|
|
85
|
+
};
|
|
86
|
+
presenceSnapshot: {
|
|
87
|
+
spaceId: string;
|
|
88
|
+
hubDeviceId: string | null;
|
|
89
|
+
peers: PeerPresence[];
|
|
90
|
+
revocations: RevocationEvent[];
|
|
91
|
+
};
|
|
92
|
+
presenceUpdate: {
|
|
93
|
+
spaceId: string;
|
|
94
|
+
status: "online" | "offline" | "updated";
|
|
95
|
+
peer: PeerPresence;
|
|
96
|
+
};
|
|
97
|
+
pairingAwaitingApproval: PairingApprovalRequest;
|
|
98
|
+
pairingAccepted: TrustedPeer;
|
|
99
|
+
pairingStatusChanged: {
|
|
100
|
+
pairingId: string;
|
|
101
|
+
spaceId: string;
|
|
102
|
+
state: PairingState;
|
|
103
|
+
};
|
|
104
|
+
revocationNotice: RevocationEvent;
|
|
105
|
+
hubChanged: {
|
|
106
|
+
spaceId: string;
|
|
107
|
+
hubDeviceId: string | null;
|
|
108
|
+
updatedBy: string;
|
|
109
|
+
updatedAt: number;
|
|
110
|
+
};
|
|
111
|
+
hubStatusChange: {
|
|
112
|
+
spaceId: string;
|
|
113
|
+
hubDeviceId: string;
|
|
114
|
+
reachable: boolean;
|
|
115
|
+
};
|
|
116
|
+
message: IncomingMessageEvent;
|
|
117
|
+
transferFrame: {
|
|
118
|
+
peerDeviceId: string;
|
|
119
|
+
frame: DecodedWireFrame;
|
|
120
|
+
};
|
|
121
|
+
crdtFrame: {
|
|
122
|
+
peerDeviceId: string;
|
|
123
|
+
frame: DecodedWireFrame;
|
|
124
|
+
};
|
|
125
|
+
debugEvent: DebugLogEntry;
|
|
126
|
+
error: {
|
|
127
|
+
code: ErrorCode | string;
|
|
128
|
+
message: string;
|
|
129
|
+
retryable: boolean;
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
export interface CreateDropspaceClientOptions {
|
|
133
|
+
/** Base HTTP URL of the Core service, e.g. `http://127.0.0.1:4000` */
|
|
134
|
+
coreHttpUrl: string;
|
|
135
|
+
/** Optional explicit WebSocket URL, defaults to derived `ws(s)://.../ws` */
|
|
136
|
+
coreWsUrl?: string;
|
|
137
|
+
deviceLabel?: string;
|
|
138
|
+
algorithm?: CryptoAlgorithm;
|
|
139
|
+
capabilities?: string[];
|
|
140
|
+
identityStorage?: IdentityStorageAdapter;
|
|
141
|
+
fetchImpl?: typeof fetch;
|
|
142
|
+
webSocketFactory?: WebSocketFactory;
|
|
143
|
+
peerConnectionFactory?: PeerConnectionFactory;
|
|
144
|
+
iceTransportPolicy?: "all" | "relay";
|
|
145
|
+
staticStunUrls?: string[];
|
|
146
|
+
/** Enable automatic WebRTC connection when a trusted peer comes online */
|
|
147
|
+
autoConnectTrustedPeers?: boolean;
|
|
148
|
+
/** Enable acting as an Explicit Hub relay for spaces where this device is designated hub */
|
|
149
|
+
enableHubRelay?: boolean;
|
|
150
|
+
maxPeers?: number;
|
|
151
|
+
heartbeatIntervalMs?: number;
|
|
152
|
+
disconnectGracePeriodMs?: number;
|
|
153
|
+
iceRestartTimeoutMs?: number;
|
|
154
|
+
connectTimeoutMs?: number;
|
|
155
|
+
maxReconnectAttempts?: number;
|
|
156
|
+
baseBackoffMs?: number;
|
|
157
|
+
}
|
|
158
|
+
export declare class DropspaceClient {
|
|
159
|
+
private readonly options;
|
|
160
|
+
readonly events: TypedEventEmitter<DropspaceClientEvents>;
|
|
161
|
+
readonly peerSelector: SmartPeerSelector;
|
|
162
|
+
private identity;
|
|
163
|
+
private sessionToken;
|
|
164
|
+
private sessionId;
|
|
165
|
+
private sessionGeneration;
|
|
166
|
+
private sessionExpiresAt;
|
|
167
|
+
private defaultSpaceId;
|
|
168
|
+
private turnCredentials;
|
|
169
|
+
private signalingState;
|
|
170
|
+
private ws;
|
|
171
|
+
private manuallyClosed;
|
|
172
|
+
private wsReconnectAttempt;
|
|
173
|
+
private wsReconnectTimer;
|
|
174
|
+
private heartbeatTimer;
|
|
175
|
+
private capabilities;
|
|
176
|
+
private readonly subscribedSpaces;
|
|
177
|
+
private readonly peersBySpace;
|
|
178
|
+
private readonly revokedPeersBySpace;
|
|
179
|
+
private readonly hubBySpace;
|
|
180
|
+
private readonly trustedPeers;
|
|
181
|
+
private readonly peerSessions;
|
|
182
|
+
private readonly peerQuality;
|
|
183
|
+
private readonly pendingRequests;
|
|
184
|
+
private readonly hubSeenRelayIds;
|
|
185
|
+
private readonly debugLogs;
|
|
186
|
+
readonly pairing: {
|
|
187
|
+
createInvite: (opts?: {
|
|
188
|
+
spaceId?: string;
|
|
189
|
+
permissions?: PermissionScope[];
|
|
190
|
+
ttlMs?: number;
|
|
191
|
+
}) => Promise<PairingInvite>;
|
|
192
|
+
claimInvite: (tokenOrDeepLink: string) => Promise<PairingClaimResult>;
|
|
193
|
+
approve: (pairingId: string, grantedPermissions?: PermissionScope[]) => Promise<TrustedPeer>;
|
|
194
|
+
reject: (pairingId: string, reason?: string) => Promise<void>;
|
|
195
|
+
cancel: (pairingId: string) => Promise<void>;
|
|
196
|
+
revoke: (opts: {
|
|
197
|
+
targetDeviceId: string;
|
|
198
|
+
spaceId?: string;
|
|
199
|
+
pairingId?: string;
|
|
200
|
+
reason?: string;
|
|
201
|
+
}) => Promise<void>;
|
|
202
|
+
listTrustedDevices: () => Promise<TrustedPeer[]>;
|
|
203
|
+
};
|
|
204
|
+
readonly devices: {
|
|
205
|
+
subscribeSpace: (spaceId: string) => Promise<void>;
|
|
206
|
+
getPeers: (spaceId?: string) => PeerPresence[];
|
|
207
|
+
updateCapabilities: (caps: string[]) => Promise<void>;
|
|
208
|
+
selectPeer: (query: Omit<PeerSelectionQuery, "spaceId"> & {
|
|
209
|
+
spaceId?: string;
|
|
210
|
+
}) => PeerSelectionDecision;
|
|
211
|
+
setExplicitHub: (spaceId: string, hubDeviceId: string | null) => Promise<void>;
|
|
212
|
+
getSpaceHub: (spaceId?: string) => string | null;
|
|
213
|
+
};
|
|
214
|
+
readonly channels: {
|
|
215
|
+
sendBinary: (peerDeviceId: string, payload: Uint8Array, options?: SendMessageOptions) => Promise<{
|
|
216
|
+
messageId: string;
|
|
217
|
+
ackSemantics?: import("../index.js").AckSemantics;
|
|
218
|
+
}>;
|
|
219
|
+
sendJson: (peerDeviceId: string, value: unknown, options?: SendMessageOptions) => Promise<{
|
|
220
|
+
messageId: string;
|
|
221
|
+
ackSemantics?: import("../index.js").AckSemantics;
|
|
222
|
+
}>;
|
|
223
|
+
};
|
|
224
|
+
constructor(options: CreateDropspaceClientOptions);
|
|
225
|
+
getIdentity(): DeviceIdentity;
|
|
226
|
+
getSessionInfo(): {
|
|
227
|
+
sessionId: string | null;
|
|
228
|
+
generation: number;
|
|
229
|
+
expiresAt: number;
|
|
230
|
+
defaultSpaceId: string | null;
|
|
231
|
+
signalingState: SignalingLifecycleState;
|
|
232
|
+
};
|
|
233
|
+
getDebugLogs(): readonly DebugLogEntry[];
|
|
234
|
+
private recordDebug;
|
|
235
|
+
start(signal?: AbortSignal): Promise<DeviceIdentity>;
|
|
236
|
+
private getFetch;
|
|
237
|
+
private authenticateHttpSession;
|
|
238
|
+
private getWsUrl;
|
|
239
|
+
private transitionSignalingState;
|
|
240
|
+
private connectSignalingWebSocket;
|
|
241
|
+
private scheduleSignalingReconnect;
|
|
242
|
+
private startHeartbeat;
|
|
243
|
+
private stopHeartbeat;
|
|
244
|
+
sendSignalingEnvelope(envelope: SignalingEnvelope): Promise<void>;
|
|
245
|
+
private sendSignalingRequest;
|
|
246
|
+
private handleIncomingSignalingEnvelope;
|
|
247
|
+
subscribeSpace(spaceId: string): Promise<void>;
|
|
248
|
+
getSpacePeers(spaceId?: string): PeerPresence[];
|
|
249
|
+
updateCapabilities(capabilities: string[]): Promise<void>;
|
|
250
|
+
selectBestPeer(query: Omit<PeerSelectionQuery, "spaceId"> & {
|
|
251
|
+
spaceId?: string;
|
|
252
|
+
}): PeerSelectionDecision;
|
|
253
|
+
createPairingInvite(opts?: {
|
|
254
|
+
spaceId?: string;
|
|
255
|
+
permissions?: PermissionScope[];
|
|
256
|
+
ttlMs?: number;
|
|
257
|
+
}): Promise<PairingInvite>;
|
|
258
|
+
claimPairingInvite(tokenOrDeepLink: string): Promise<PairingClaimResult>;
|
|
259
|
+
approvePairing(pairingId: string, grantedPermissions?: PermissionScope[]): Promise<TrustedPeer>;
|
|
260
|
+
rejectPairing(pairingId: string, reason?: string): Promise<void>;
|
|
261
|
+
cancelPairing(pairingId: string): Promise<void>;
|
|
262
|
+
revokePeerAccess(opts: {
|
|
263
|
+
targetDeviceId: string;
|
|
264
|
+
spaceId?: string;
|
|
265
|
+
pairingId?: string;
|
|
266
|
+
reason?: string;
|
|
267
|
+
}): Promise<void>;
|
|
268
|
+
listTrustedDevices(): Promise<TrustedPeer[]>;
|
|
269
|
+
setExplicitHub(spaceId: string, hubDeviceId: string | null): Promise<void>;
|
|
270
|
+
getFreshIceServers(): Promise<Array<{
|
|
271
|
+
urls: string | string[];
|
|
272
|
+
username?: string;
|
|
273
|
+
credential?: string;
|
|
274
|
+
}>>;
|
|
275
|
+
private getOrCreateManagedPeerSession;
|
|
276
|
+
/**
|
|
277
|
+
* Handles Explicit Hub forwarding or local delivery of a HUB_RELAY frame (Section 11).
|
|
278
|
+
* Enforces authorization, deduplication, hop limit, and loop prevention.
|
|
279
|
+
*/
|
|
280
|
+
private handleHubRelayFrame;
|
|
281
|
+
connect(peerDeviceId: string, options?: {
|
|
282
|
+
spaceId?: string;
|
|
283
|
+
waitForOpen?: boolean;
|
|
284
|
+
timeoutMs?: number;
|
|
285
|
+
}): Promise<ManagedPeerSession>;
|
|
286
|
+
waitForPeerConnected(peerDeviceId: string, timeoutMs?: number): Promise<void>;
|
|
287
|
+
getPeerSession(peerDeviceId: string): ManagedPeerSession | undefined;
|
|
288
|
+
sendBinaryMessage(peerDeviceId: string, payload: Uint8Array, options?: SendMessageOptions): Promise<{
|
|
289
|
+
messageId: string;
|
|
290
|
+
ackSemantics?: import("../index.js").AckSemantics;
|
|
291
|
+
}>;
|
|
292
|
+
sendJsonMessage(peerDeviceId: string, value: unknown, options?: SendMessageOptions): Promise<{
|
|
293
|
+
messageId: string;
|
|
294
|
+
ackSemantics?: import("../index.js").AckSemantics;
|
|
295
|
+
}>;
|
|
296
|
+
/**
|
|
297
|
+
* Explicitly closes the client, all peer connections, signaling socket, timers, and listeners.
|
|
298
|
+
* Disables all automatic reconnection loops.
|
|
299
|
+
*/
|
|
300
|
+
close(): void;
|
|
301
|
+
getActiveResourceCounts(): {
|
|
302
|
+
listenerCount: number;
|
|
303
|
+
pendingRequests: number;
|
|
304
|
+
activePeerSessions: number;
|
|
305
|
+
hasHeartbeatTimer: boolean;
|
|
306
|
+
hasReconnectTimer: boolean;
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
export declare function createClient(options: CreateDropspaceClientOptions): DropspaceClient;
|
|
310
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
|