@vielzeug/mesh 3.1.0 → 26.10.1

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.
Files changed (98) hide show
  1. package/README.md +2 -2
  2. package/dist/_base45.cjs +1 -1
  3. package/dist/_base45.cjs.map +1 -1
  4. package/dist/_base45.js +1 -37
  5. package/dist/_base45.js.map +1 -1
  6. package/dist/_defaults.cjs +2 -0
  7. package/dist/_defaults.cjs.map +1 -0
  8. package/dist/_defaults.d.ts +6 -0
  9. package/dist/_defaults.d.ts.map +1 -0
  10. package/dist/_defaults.js +2 -0
  11. package/dist/_defaults.js.map +1 -0
  12. package/dist/_node.cjs +1 -1
  13. package/dist/_node.cjs.map +1 -1
  14. package/dist/_node.d.ts +4 -11
  15. package/dist/_node.d.ts.map +1 -1
  16. package/dist/_node.js +1 -194
  17. package/dist/_node.js.map +1 -1
  18. package/dist/_proof.cjs +1 -1
  19. package/dist/_proof.cjs.map +1 -1
  20. package/dist/_proof.d.ts +8 -5
  21. package/dist/_proof.d.ts.map +1 -1
  22. package/dist/_proof.js +1 -21
  23. package/dist/_proof.js.map +1 -1
  24. package/dist/_random.cjs +1 -1
  25. package/dist/_random.cjs.map +1 -1
  26. package/dist/_random.d.ts +1 -1
  27. package/dist/_random.d.ts.map +1 -1
  28. package/dist/_random.js +1 -15
  29. package/dist/_random.js.map +1 -1
  30. package/dist/_rtc.cjs +2 -2
  31. package/dist/_rtc.cjs.map +1 -1
  32. package/dist/_rtc.d.ts +7 -6
  33. package/dist/_rtc.d.ts.map +1 -1
  34. package/dist/_rtc.js +3 -41
  35. package/dist/_rtc.js.map +1 -1
  36. package/dist/_sdp.cjs +2 -2
  37. package/dist/_sdp.cjs.map +1 -1
  38. package/dist/_sdp.d.ts +1 -1
  39. package/dist/_sdp.js +2 -54
  40. package/dist/_sdp.js.map +1 -1
  41. package/dist/_wire.cjs +1 -1
  42. package/dist/_wire.cjs.map +1 -1
  43. package/dist/_wire.js +1 -20
  44. package/dist/_wire.js.map +1 -1
  45. package/dist/codec.cjs +1 -1
  46. package/dist/codec.cjs.map +1 -1
  47. package/dist/codec.d.ts +14 -9
  48. package/dist/codec.d.ts.map +1 -1
  49. package/dist/codec.js +1 -34
  50. package/dist/codec.js.map +1 -1
  51. package/dist/errors.cjs +1 -1
  52. package/dist/errors.cjs.map +1 -1
  53. package/dist/errors.js +1 -18
  54. package/dist/errors.js.map +1 -1
  55. package/dist/guest.cjs +1 -1
  56. package/dist/guest.cjs.map +1 -1
  57. package/dist/guest.d.ts.map +1 -1
  58. package/dist/guest.js +1 -164
  59. package/dist/guest.js.map +1 -1
  60. package/dist/host.cjs +1 -1
  61. package/dist/host.cjs.map +1 -1
  62. package/dist/host.d.ts.map +1 -1
  63. package/dist/host.js +1 -240
  64. package/dist/host.js.map +1 -1
  65. package/dist/index.d.ts +2 -2
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +1 -6
  68. package/dist/mesh.cjs +3 -3
  69. package/dist/mesh.cjs.map +1 -1
  70. package/dist/mesh.iife.js +3 -3
  71. package/dist/mesh.iife.js.map +1 -1
  72. package/dist/mesh.js +3 -3
  73. package/dist/mesh.js.map +1 -1
  74. package/dist/qr-codec.cjs +1 -1
  75. package/dist/qr-codec.cjs.map +1 -1
  76. package/dist/qr-codec.d.ts +3 -3
  77. package/dist/qr-codec.d.ts.map +1 -1
  78. package/dist/qr-codec.js +1 -67
  79. package/dist/qr-codec.js.map +1 -1
  80. package/dist/testing/fake-rtc.cjs +2 -0
  81. package/dist/testing/fake-rtc.cjs.map +1 -0
  82. package/dist/testing/fake-rtc.d.ts +32 -0
  83. package/dist/testing/fake-rtc.d.ts.map +1 -0
  84. package/dist/testing/fake-rtc.js +2 -0
  85. package/dist/testing/fake-rtc.js.map +1 -0
  86. package/dist/testing/index.d.ts +2 -0
  87. package/dist/testing/index.d.ts.map +1 -0
  88. package/dist/testing.cjs +1 -0
  89. package/dist/testing.js +1 -0
  90. package/dist/types.d.ts +22 -40
  91. package/dist/types.d.ts.map +1 -1
  92. package/package.json +17 -5
  93. package/dist/_base64.cjs +0 -2
  94. package/dist/_base64.cjs.map +0 -1
  95. package/dist/_base64.d.ts +0 -9
  96. package/dist/_base64.d.ts.map +0 -1
  97. package/dist/_base64.js +0 -33
  98. package/dist/_base64.js.map +0 -1
@@ -0,0 +1,32 @@
1
+ import type { MeshRtcFactory } from '../types';
2
+ export interface FakeRtc {
3
+ /** Close both ends of the link created at `index` (0-based, pairing order). */
4
+ closeChannel(index: number): void;
5
+ /** Silently drop the next `n` channel sends. */
6
+ dropNext(n: number): void;
7
+ /** Make the next pairing fail at the ICE stage. */
8
+ failIce(): void;
9
+ /** Make the next completed link connect at ICE level but never open the channel. */
10
+ hangOpen(): void;
11
+ /** Delivery delay for messages and channel-open in milliseconds. Default: 0 (microtask). */
12
+ latencyMs: number;
13
+ /** Number of links initiated (one per created offer). */
14
+ readonly linkCount: number;
15
+ /** Every SDP handed to `setRemoteDescription`, in call order. */
16
+ readonly remoteSdps: readonly string[];
17
+ readonly rtc: MeshRtcFactory;
18
+ /** Make the next `setLocalDescription` never finish ICE gathering. */
19
+ stallIce(): void;
20
+ /** Drain all latency-queued deliveries immediately. */
21
+ tick(): void;
22
+ }
23
+ /**
24
+ * In-memory WebRTC stand-in for testing mesh nodes without a browser.
25
+ * Peer connections created from the same fixture wire together through fake
26
+ * SDP tokens: no network, no real ICE. Pass `fixture.rtc` as the `rtc`
27
+ * option to `createMeshHost`/`createMeshGuest`.
28
+ */
29
+ export declare function createFakeRtc(options?: {
30
+ latencyMs?: number;
31
+ }): FakeRtc;
32
+ //# sourceMappingURL=fake-rtc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-rtc.d.ts","sourceRoot":"","sources":["../../src/testing/fake-rtc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EAIf,MAAM,UAAU,CAAC;AAkClB,MAAM,WAAW,OAAO;IACtB,+EAA+E;IAC/E,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gDAAgD;IAChD,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,mDAAmD;IACnD,OAAO,IAAI,IAAI,CAAC;IAChB,oFAAoF;IACpF,QAAQ,IAAI,IAAI,CAAC;IACjB,4FAA4F;IAC5F,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,IAAI,IAAI,CAAC;IACjB,uDAAuD;IACvD,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAiP3E"}
@@ -0,0 +1,2 @@
1
+ var ListenerBag=class{listeners=new Map;add(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n)),n.add(t)}remove(e,t){this.listeners.get(e)?.delete(t)}emit(e,t={}){for(let n of this.listeners.get(e)??[])n(t)}addEventListener(e,t){this.add(e,t)}removeEventListener(e,t){this.remove(e,t)}};function createFakeRtc(e={}){let t=[],n=new Map,r=[],i=0,a=0,o=!1,s=!1,c=!1,l={closeChannel(e){let t=[...n.values()][e];t?.hostChannel?.close(),t?.guestChannel?.close(),t&&(t.hostPc.iceConnectionState=`disconnected`,t.hostPc.emit(`iceconnectionstatechange`),t.guestPc&&(t.guestPc.iceConnectionState=`disconnected`,t.guestPc.emit(`iceconnectionstatechange`)))},dropNext(e){a+=e},failIce(){o=!0},hangOpen(){c=!0},latencyMs:e.latencyMs??0,get linkCount(){return n.size},get remoteSdps(){return r},rtc:{createPeerConnection:()=>new FakePeerConnection(`pc${++i}`)},stallIce(){s=!0},tick(){for(;t.length;)t.shift()?.()}};function schedule(e){l.latencyMs>0?(t.push(e),setTimeout(l.tick,l.latencyMs)):queueMicrotask(e)}class FakeDataChannel extends ListenerBag{readyState=`connecting`;remote=null;send(e){if(this.readyState!==`open`)throw Error(`Channel is ${this.readyState}`);if(a>0){a--;return}let t=this.remote;t&&t.readyState===`open`&&schedule(()=>t.emit(`message`,{data:e}))}open(){this.readyState===`connecting`&&(this.readyState=`open`,this.emit(`open`))}close(){if(this.readyState===`closed`)return;this.readyState=`closed`,this.emit(`close`);let e=this.remote;e&&e.readyState!==`closed`&&(e.readyState=`closed`,e.emit(`close`))}}class FakePeerConnection extends ListenerBag{connectionState=`new`;iceConnectionState=`new`;iceGatheringState=`new`;localDescription=null;remoteDescription=null;pendingChannel=null;closed=!1;token;constructor(e){super(),this.token=e}createDataChannel(){return this.pendingChannel=new FakeDataChannel,this.pendingChannel}createOffer(){return n.set(this.token,{completed:!1,guestChannel:null,guestPc:null,hostChannel:null,hostPc:this,hostToken:this.token}),Promise.resolve({sdp:`fake-offer:${this.token}`,type:`offer`})}createAnswer(){let e=this.linkFor();return Promise.resolve({sdp:`fake-answer:${e?.hostToken??`none`}:guest:${this.token}`,type:`answer`})}setLocalDescription(e){return this.localDescription=e,s?(s=!1,this.iceGatheringState=`gathering`):this.iceGatheringState=`complete`,this.emit(`icegatheringstatechange`),Promise.resolve()}setRemoteDescription(e){if(this.remoteDescription=e,r.push(e.sdp??``),e.type===`offer`){let t=/fake-offer:(\w+)/.exec(e.sdp??``)?.[1],r=t?n.get(t):void 0;return r?(r.guestPc=this,Promise.resolve()):Promise.reject(Error(`Unknown offer`))}let t=/fake-answer:(\w+):guest:(\w+)/.exec(e.sdp??``),i=t?.[1]?n.get(t[1]):void 0;return!i||i.guestPc?.token!==t?.[2]?Promise.reject(Error(`Unknown answer`)):(this.completeLink(i),Promise.resolve())}close(){if(this.closed)return;this.closed=!0,this.connectionState=`closed`,this.iceConnectionState=`closed`,this.emit(`iceconnectionstatechange`),this.emit(`connectionstatechange`),this.pendingChannel?.close();let e=this.linkFor();if(e){e.guestChannel?.close(),e.hostChannel?.close();let t=e.guestPc===this?e.hostPc:e.guestPc;t&&!t.closed&&(t.iceConnectionState=`disconnected`,t.emit(`iceconnectionstatechange`))}}linkFor(){return[...n.values()].find(e=>e.hostPc===this||e.guestPc===this)}completeLink(e){if(e.completed)return;if(e.completed=!0,o){o=!1;for(let t of[e.hostPc,e.guestPc])t&&(t.iceConnectionState=`failed`,t.emit(`iceconnectionstatechange`));return}let t=e.hostPc.pendingChannel??new FakeDataChannel,n=new FakeDataChannel;t.remote=n,n.remote=t,e.hostChannel=t,e.guestChannel=n,e.guestPc?.emit(`datachannel`,{channel:n}),schedule(()=>{for(let t of[e.hostPc,e.guestPc])t&&!t.closed&&(t.iceConnectionState=`connected`,t.connectionState=`connected`,t.emit(`iceconnectionstatechange`),t.emit(`connectionstatechange`));if(c){c=!1;return}t.open(),n.open()})}}return l}export{createFakeRtc};
2
+ //# sourceMappingURL=fake-rtc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-rtc.js","names":[],"sources":["../../src/testing/fake-rtc.ts"],"sourcesContent":["import type {\n MeshRtcEvent,\n MeshRtcFactory,\n RTCDataChannelLike,\n RTCPeerConnectionLike,\n RTCSessionDescriptionLike,\n} from '../types';\n\ntype Listener = (event: MeshRtcEvent) => void;\n\nclass ListenerBag {\n private readonly listeners = new Map<string, Set<Listener>>();\n\n add(type: string, listener: Listener): void {\n let set = this.listeners.get(type);\n if (!set) {\n set = new Set();\n this.listeners.set(type, set);\n }\n set.add(listener);\n }\n\n remove(type: string, listener: Listener): void {\n this.listeners.get(type)?.delete(listener);\n }\n\n emit(type: string, event: MeshRtcEvent = {}): void {\n for (const listener of this.listeners.get(type) ?? []) listener(event);\n }\n\n // `never` accepts every listener shape declared by the `*Like` overloads.\n addEventListener(type: string, listener: (event: never) => void): void {\n this.add(type, listener as Listener);\n }\n\n removeEventListener(type: string, listener: (event: never) => void): void {\n this.remove(type, listener as Listener);\n }\n}\n\nexport interface FakeRtc {\n /** Close both ends of the link created at `index` (0-based, pairing order). */\n closeChannel(index: number): void;\n /** Silently drop the next `n` channel sends. */\n dropNext(n: number): void;\n /** Make the next pairing fail at the ICE stage. */\n failIce(): void;\n /** Make the next completed link connect at ICE level but never open the channel. */\n hangOpen(): void;\n /** Delivery delay for messages and channel-open in milliseconds. Default: 0 (microtask). */\n latencyMs: number;\n /** Number of links initiated (one per created offer). */\n readonly linkCount: number;\n /** Every SDP handed to `setRemoteDescription`, in call order. */\n readonly remoteSdps: readonly string[];\n readonly rtc: MeshRtcFactory;\n /** Make the next `setLocalDescription` never finish ICE gathering. */\n stallIce(): void;\n /** Drain all latency-queued deliveries immediately. */\n tick(): void;\n}\n\n/**\n * In-memory WebRTC stand-in for testing mesh nodes without a browser.\n * Peer connections created from the same fixture wire together through fake\n * SDP tokens: no network, no real ICE. Pass `fixture.rtc` as the `rtc`\n * option to `createMeshHost`/`createMeshGuest`.\n */\nexport function createFakeRtc(options: { latencyMs?: number } = {}): FakeRtc {\n interface FakeLink {\n completed: boolean;\n guestChannel: FakeDataChannel | null;\n guestPc: FakePeerConnection | null;\n hostChannel: FakeDataChannel | null;\n hostPc: FakePeerConnection;\n readonly hostToken: string;\n }\n\n const pendingDeliveries: Array<() => void> = [];\n const links = new Map<string, FakeLink>();\n const remoteSdps: string[] = [];\n let pcCounter = 0;\n let dropCount = 0;\n let failNextIce = false;\n let stallNextGathering = false;\n let hangNextOpen = false;\n\n const fixture: FakeRtc = {\n closeChannel(index) {\n const link = [...links.values()][index];\n link?.hostChannel?.close();\n link?.guestChannel?.close();\n if (link) {\n link.hostPc.iceConnectionState = 'disconnected';\n link.hostPc.emit('iceconnectionstatechange');\n if (link.guestPc) {\n link.guestPc.iceConnectionState = 'disconnected';\n link.guestPc.emit('iceconnectionstatechange');\n }\n }\n },\n dropNext(n) {\n dropCount += n;\n },\n failIce() {\n failNextIce = true;\n },\n hangOpen() {\n hangNextOpen = true;\n },\n latencyMs: options.latencyMs ?? 0,\n get linkCount() {\n return links.size;\n },\n get remoteSdps() {\n return remoteSdps;\n },\n rtc: {\n createPeerConnection: () => new FakePeerConnection(`pc${++pcCounter}`),\n },\n stallIce() {\n stallNextGathering = true;\n },\n tick() {\n while (pendingDeliveries.length) pendingDeliveries.shift()?.();\n },\n };\n\n function schedule(delivery: () => void): void {\n if (fixture.latencyMs > 0) {\n pendingDeliveries.push(delivery);\n setTimeout(fixture.tick, fixture.latencyMs);\n } else {\n queueMicrotask(delivery);\n }\n }\n\n class FakeDataChannel extends ListenerBag implements RTCDataChannelLike {\n readyState = 'connecting';\n remote: FakeDataChannel | null = null;\n\n send(data: string): void {\n if (this.readyState !== 'open') throw new Error(`Channel is ${this.readyState}`);\n if (dropCount > 0) {\n dropCount--;\n return;\n }\n const remote = this.remote;\n if (!remote || remote.readyState !== 'open') return;\n schedule(() => remote.emit('message', { data }));\n }\n\n open(): void {\n if (this.readyState !== 'connecting') return;\n this.readyState = 'open';\n this.emit('open');\n }\n\n close(): void {\n if (this.readyState === 'closed') return;\n this.readyState = 'closed';\n this.emit('close');\n const remote = this.remote;\n if (remote && remote.readyState !== 'closed') {\n remote.readyState = 'closed';\n remote.emit('close');\n }\n }\n }\n\n class FakePeerConnection extends ListenerBag implements RTCPeerConnectionLike {\n connectionState = 'new';\n iceConnectionState = 'new';\n iceGatheringState = 'new';\n localDescription: RTCSessionDescriptionLike | null = null;\n /** Last description received through `setRemoteDescription`, for assertions. */\n remoteDescription: RTCSessionDescriptionLike | null = null;\n pendingChannel: FakeDataChannel | null = null;\n closed = false;\n\n readonly token: string;\n\n constructor(token: string) {\n super();\n this.token = token;\n }\n\n createDataChannel(): RTCDataChannelLike {\n this.pendingChannel = new FakeDataChannel();\n return this.pendingChannel;\n }\n\n createOffer(): Promise<RTCSessionDescriptionLike> {\n links.set(this.token, {\n completed: false,\n guestChannel: null,\n guestPc: null,\n hostChannel: null,\n hostPc: this,\n hostToken: this.token,\n });\n return Promise.resolve({ sdp: `fake-offer:${this.token}`, type: 'offer' });\n }\n\n createAnswer(): Promise<RTCSessionDescriptionLike> {\n const link = this.linkFor();\n return Promise.resolve({\n sdp: `fake-answer:${link?.hostToken ?? 'none'}:guest:${this.token}`,\n type: 'answer',\n });\n }\n\n setLocalDescription(description: RTCSessionDescriptionLike): Promise<void> {\n this.localDescription = description;\n if (stallNextGathering) {\n stallNextGathering = false;\n this.iceGatheringState = 'gathering';\n } else {\n this.iceGatheringState = 'complete';\n }\n this.emit('icegatheringstatechange');\n return Promise.resolve();\n }\n\n setRemoteDescription(description: RTCSessionDescriptionLike): Promise<void> {\n this.remoteDescription = description;\n remoteSdps.push(description.sdp ?? '');\n if (description.type === 'offer') {\n const hostToken = /fake-offer:(\\w+)/.exec(description.sdp ?? '')?.[1];\n const link = hostToken ? links.get(hostToken) : undefined;\n if (!link) return Promise.reject(new Error('Unknown offer'));\n link.guestPc = this;\n return Promise.resolve();\n }\n\n const match = /fake-answer:(\\w+):guest:(\\w+)/.exec(description.sdp ?? '');\n const link = match?.[1] ? links.get(match[1]) : undefined;\n if (!link || link.guestPc?.token !== match?.[2]) {\n return Promise.reject(new Error('Unknown answer'));\n }\n this.completeLink(link);\n return Promise.resolve();\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.connectionState = 'closed';\n this.iceConnectionState = 'closed';\n this.emit('iceconnectionstatechange');\n this.emit('connectionstatechange');\n this.pendingChannel?.close();\n const link = this.linkFor();\n if (link) {\n link.guestChannel?.close();\n link.hostChannel?.close();\n const remote = link.guestPc === this ? link.hostPc : link.guestPc;\n if (remote && !remote.closed) {\n remote.iceConnectionState = 'disconnected';\n remote.emit('iceconnectionstatechange');\n }\n }\n }\n\n private linkFor(): FakeLink | undefined {\n return [...links.values()].find((link) => link.hostPc === this || link.guestPc === this);\n }\n\n private completeLink(link: FakeLink): void {\n if (link.completed) return;\n link.completed = true;\n\n if (failNextIce) {\n failNextIce = false;\n for (const pc of [link.hostPc, link.guestPc]) {\n if (!pc) continue;\n pc.iceConnectionState = 'failed';\n pc.emit('iceconnectionstatechange');\n }\n return;\n }\n\n const hostChannel = link.hostPc.pendingChannel ?? new FakeDataChannel();\n const guestChannel = new FakeDataChannel();\n hostChannel.remote = guestChannel;\n guestChannel.remote = hostChannel;\n link.hostChannel = hostChannel;\n link.guestChannel = guestChannel;\n link.guestPc?.emit('datachannel', { channel: guestChannel });\n\n schedule(() => {\n for (const pc of [link.hostPc, link.guestPc]) {\n if (!pc || pc.closed) continue;\n pc.iceConnectionState = 'connected';\n pc.connectionState = 'connected';\n pc.emit('iceconnectionstatechange');\n pc.emit('connectionstatechange');\n }\n if (hangNextOpen) {\n hangNextOpen = false;\n return;\n }\n hostChannel.open();\n guestChannel.open();\n });\n }\n }\n\n return fixture;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { createFakeRtc, type FakeRtc } from './fake-rtc';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./testing/fake-rtc.cjs");exports.createFakeRtc=e.createFakeRtc;
@@ -0,0 +1 @@
1
+ import{createFakeRtc as e}from"./testing/fake-rtc.js";export{e as createFakeRtc};
package/dist/types.d.ts CHANGED
@@ -64,13 +64,15 @@ export interface MeshRtcFactory {
64
64
  export interface MeshInvitation {
65
65
  /** Expiry instant in epoch milliseconds. */
66
66
  readonly expiresAt: number;
67
+ /** Host-supplied display name; the guest shows it as its host peer's name. */
68
+ readonly hostName?: string;
67
69
  /** Host offer SDP with ICE candidates inlined (non-trickle). */
68
70
  readonly sdp: string;
69
71
  /** Random 256-bit secret, base64url-encoded. Proves possession of the invitation. */
70
72
  readonly secret: string;
71
73
  /** Random 128-bit session identifier, base64url-encoded. */
72
74
  readonly sessionId: string;
73
- /** Schema version — currently always 1. */
75
+ /** Schema version: currently always 1. */
74
76
  readonly v: 1;
75
77
  }
76
78
  /** Guest's answer returned to the host out-of-band. */
@@ -86,15 +88,6 @@ export interface MeshAnswer {
86
88
  readonly sessionId: string;
87
89
  readonly v: 1;
88
90
  }
89
- /**
90
- * Encodes/decodes pairing payloads for out-of-band transport (copy/paste,
91
- * `navigator.share`, QR). Kept separate from the transport so new encodings
92
- * can be added without touching connection logic.
93
- */
94
- export interface MeshCodec {
95
- decode(text: string): MeshInvitation | MeshAnswer;
96
- encode(payload: MeshInvitation | MeshAnswer): string;
97
- }
98
91
  /** Data-channel configuration, mapped to `RTCDataChannelInit`. */
99
92
  export interface MeshChannelOptions {
100
93
  readonly label?: string;
@@ -113,8 +106,6 @@ export interface MeshOptions {
113
106
  readonly channelOpenTimeoutMs?: number;
114
107
  /** Clock for TTLs and message timestamps. Default: `Date.now`. */
115
108
  readonly clock?: () => number;
116
- /** Message deserializer. Default: `JSON.parse`. */
117
- readonly deserialize?: (text: string) => unknown;
118
109
  /**
119
110
  * How long to wait for ICE gathering to complete before proceeding with
120
111
  * whatever candidates were gathered. Default: `5_000`.
@@ -135,10 +126,8 @@ export interface MeshOptions {
135
126
  readonly maxMessageBytes?: number;
136
127
  /** Randomness source for ids and secrets. Default: `crypto.getRandomValues`. */
137
128
  readonly random?: RandomSource;
138
- /** WebRTC factory — the injection point for tests and non-browser runtimes. */
129
+ /** WebRTC factory: the injection point for tests and non-browser runtimes. */
139
130
  readonly rtc?: MeshRtcFactory;
140
- /** Message serializer. Default: `JSON.stringify`. */
141
- readonly serialize?: (value: unknown) => string;
142
131
  /** Disposes the node when aborted. */
143
132
  readonly signal?: AbortSignal;
144
133
  }
@@ -158,25 +147,15 @@ export interface MeshHostOptions extends MeshOptions {
158
147
  }
159
148
  /** Options for {@link createMeshGuest}. */
160
149
  export type MeshGuestOptions = MeshOptions;
161
- /** Lifecycle state of a mesh node or peer. */
150
+ /** Lifecycle state of a mesh node. */
162
151
  export type MeshStatus = 'idle' | 'pairing' | 'connecting' | 'connected' | 'disconnected' | 'failed' | 'disposed';
152
+ /** Lifecycle state of a single remote peer. */
153
+ export type MeshPeerStatus = 'connecting' | 'connected' | 'disconnected' | 'failed';
163
154
  /** A remote peer as observed by this node. */
164
155
  export interface MeshPeer extends MeshPeerInfo {
165
156
  readonly role: 'host' | 'guest';
166
- readonly status: MeshStatus;
157
+ readonly status: MeshPeerStatus;
167
158
  }
168
- /** Peer lifecycle event delivered to `MeshHost.onPeer` handlers. */
169
- export type MeshPeerEvent = {
170
- readonly type: 'joined';
171
- readonly peer: MeshPeer;
172
- } | {
173
- readonly type: 'left';
174
- readonly peer: MeshPeer;
175
- readonly reason?: string;
176
- } | {
177
- readonly type: 'status-change';
178
- readonly peer: MeshPeer;
179
- };
180
159
  /** A deserialized inbound message with transport metadata. */
181
160
  export interface MeshInbound<T> {
182
161
  readonly messageId: string;
@@ -188,18 +167,27 @@ export interface MeshInbound<T> {
188
167
  export type Unsubscribe = () => void;
189
168
  /**
190
169
  * Runtime events emitted by {@link MeshNode.tap}.
191
- * Subscribe via `node.tap(handler)` — handler errors are swallowed.
170
+ * Subscribe via `node.tap(handler)`: handler errors are swallowed.
192
171
  */
193
172
  export type MeshEvent = {
194
173
  readonly type: 'status-change';
195
- readonly peerId: string | null;
196
174
  readonly status: MeshStatus;
175
+ } | {
176
+ readonly type: 'peer-status-change';
177
+ readonly peerId: string;
178
+ readonly status: MeshPeerStatus;
197
179
  } | {
198
180
  readonly type: 'invitation-created' | 'invitation-expired';
199
181
  readonly sessionId: string;
200
182
  } | {
201
- readonly type: 'peer-approved' | 'peer-rejected' | 'peer-joined' | 'peer-left';
183
+ readonly type: 'peer-approved' | 'peer-rejected';
202
184
  readonly peerId: string;
185
+ } | {
186
+ readonly type: 'peer-joined';
187
+ readonly peer: MeshPeer;
188
+ } | {
189
+ readonly type: 'peer-left';
190
+ readonly peer: MeshPeer;
203
191
  readonly reason?: string;
204
192
  } | {
205
193
  readonly type: 'message-sent' | 'message-received';
@@ -214,9 +202,6 @@ export type MeshEvent = {
214
202
  readonly type: 'ice-state';
215
203
  readonly peerId: string;
216
204
  readonly state: string;
217
- } | {
218
- readonly type: 'security-downgrade';
219
- readonly reason: string;
220
205
  } | {
221
206
  readonly type: 'error';
222
207
  readonly error: MeshError;
@@ -231,8 +216,6 @@ export interface MeshNode {
231
216
  dispose(): void;
232
217
  /** Whether the node has been permanently disposed. */
233
218
  readonly disposed: boolean;
234
- /** This node's peer id. */
235
- readonly id: string;
236
219
  /** Current node status. */
237
220
  readonly status: MeshStatus;
238
221
  /**
@@ -264,7 +247,8 @@ export interface MeshHost<P extends MeshProtocol> extends MeshNode {
264
247
  /**
265
248
  * Create a single-use invitation for one prospective guest. Deliver the
266
249
  * encoded invitation out-of-band (copy/paste, `navigator.share`, QR).
267
- * May be called repeatedly — one invitation per guest.
250
+ * May be called repeatedly: one invitation per guest. `meta.name` is
251
+ * shown to the guest as this host's peer name.
268
252
  */
269
253
  createInvitation(meta?: {
270
254
  readonly name?: string;
@@ -273,8 +257,6 @@ export interface MeshHost<P extends MeshProtocol> extends MeshNode {
273
257
  kick(peerId: string, reason?: string): void;
274
258
  /** Subscribe to a typed inbound message from any guest. */
275
259
  on<K extends keyof P['toHost'] & string>(type: K, handler: (message: MeshInbound<P['toHost'][K]>) => void): Unsubscribe;
276
- /** Subscribe to peer lifecycle events. */
277
- onPeer(handler: (event: MeshPeerEvent) => void): Unsubscribe;
278
260
  /** Live peers keyed by peer id. */
279
261
  readonly peers: ReadonlyMap<string, MeshPeer>;
280
262
  /** Send a typed message to one peer. Throws `MeshConnectionError` if unconnected. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vielzeug/mesh",
3
- "version": "3.1.0",
3
+ "version": "26.10.1",
4
4
  "description": "Backendless peer-to-peer session transport over WebRTC data channels with manual pairing and host-authoritative star topology",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,6 +22,18 @@
22
22
  "import": "./dist/index.js",
23
23
  "require": "./dist/index.cjs",
24
24
  "types": "./dist/index.d.ts"
25
+ },
26
+ "./testing": {
27
+ "import": "./dist/testing.js",
28
+ "require": "./dist/testing.cjs",
29
+ "types": "./dist/testing/index.d.ts"
30
+ }
31
+ },
32
+ "typesVersions": {
33
+ "*": {
34
+ "testing": [
35
+ "dist/testing/index.d.ts"
36
+ ]
25
37
  }
26
38
  },
27
39
  "sideEffects": false,
@@ -39,12 +51,12 @@
39
51
  "test": "vitest"
40
52
  },
41
53
  "dependencies": {
42
- "@vielzeug/arsenal": "3.0.0"
54
+ "@vielzeug/arsenal": "26.10.1"
43
55
  },
44
56
  "devDependencies": {
45
- "@types/node": "^26.4.1",
57
+ "@types/node": "^26.6.2",
46
58
  "typescript": "^6.0.3",
47
- "vite": "^8.2.2",
48
- "vitest": "^5.0.0"
59
+ "vite": "^8.3.0",
60
+ "vitest": "^5.0.1"
49
61
  }
50
62
  }
package/dist/_base64.cjs DELETED
@@ -1,2 +0,0 @@
1
- var e=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,t=new Map([...e].map((e,t)=>[e,t]));function n(t){let n=``;for(let r=0;r<t.length;r+=3){let i=t[r],a=t[r+1],o=t[r+2];n+=e[i>>2],n+=e[(i&3)<<4|(a??0)>>4],a!==void 0&&(n+=e[(a&15)<<2|(o??0)>>6]),o!==void 0&&(n+=e[o&63])}return n}function r(e){let n=[],r=0,i=0;for(let a of e){let e=t.get(a);if(e===void 0)throw Error(`Invalid base64url character "${a}"`);r=r<<6|e,i+=6,i>=8&&(i-=8,n.push(r>>i&255))}return new Uint8Array(n)}var i=new TextEncoder,a=new TextDecoder;function o(e){return n(i.encode(e))}function s(e){return a.decode(r(e))}function c(e){return i.encode(e).length}exports.base64UrlToBytes=r,exports.base64UrlToText=s,exports.bytesToBase64Url=n,exports.textToBase64Url=o,exports.utf8Bytes=c;
2
- //# sourceMappingURL=_base64.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_base64.cjs","names":[],"sources":["../src/_base64.ts"],"sourcesContent":["const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\nconst LOOKUP = new Map([...ALPHABET].map((char, index) => [char, index]));\n\n/** Environment-independent base64url encoding (no `btoa`/`Buffer` dependency). */\nexport function bytesToBase64Url(bytes: Uint8Array): string {\n let output = '';\n for (let index = 0; index < bytes.length; index += 3) {\n const a = bytes[index]!;\n const b = bytes[index + 1];\n const c = bytes[index + 2];\n output += ALPHABET[a >> 2]!;\n output += ALPHABET[((a & 0b11) << 4) | ((b ?? 0) >> 4)]!;\n if (b !== undefined) output += ALPHABET[((b & 0b1111) << 2) | ((c ?? 0) >> 6)]!;\n if (c !== undefined) output += ALPHABET[c & 0b111111]!;\n }\n return output;\n}\n\n/** Decodes base64url text. Throws on characters outside the base64url alphabet. */\nexport function base64UrlToBytes(text: string): Uint8Array {\n const bytes: number[] = [];\n let buffer = 0;\n let bits = 0;\n for (const char of text) {\n const value = LOOKUP.get(char);\n if (value === undefined) throw new Error(`Invalid base64url character \"${char}\"`);\n buffer = (buffer << 6) | value;\n bits += 6;\n if (bits >= 8) {\n bits -= 8;\n bytes.push((buffer >> bits) & 0xff);\n }\n }\n return new Uint8Array(bytes);\n}\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function textToBase64Url(text: string): string {\n return bytesToBase64Url(encoder.encode(text));\n}\n\nexport function base64UrlToText(text: string): string {\n return decoder.decode(base64UrlToBytes(text));\n}\n\n/** Byte length of a UTF-8 string — used for `maxMessageBytes` checks. */\nexport function utf8Bytes(text: string): number {\n return encoder.encode(text).length;\n}\n"],"mappings":"AAAA,IAAM,EAAW,mEACX,EAAS,IAAI,IAAI,CAAC,GAAG,CAAQ,CAAC,CAAC,KAAK,EAAM,IAAU,CAAC,EAAM,CAAK,CAAC,CAAC,EAGxE,SAAgB,EAAiB,EAA2B,CAC1D,IAAI,EAAS,GACb,IAAK,IAAI,EAAQ,EAAG,EAAQ,EAAM,OAAQ,GAAS,EAAG,CACpD,IAAM,EAAI,EAAM,GACV,EAAI,EAAM,EAAQ,GAClB,EAAI,EAAM,EAAQ,GACxB,GAAU,EAAS,GAAK,GACxB,GAAU,GAAW,EAAI,IAAS,GAAO,GAAK,IAAM,GAChD,IAAM,IAAA,KAAW,GAAU,GAAW,EAAI,KAAW,GAAO,GAAK,IAAM,IACvE,IAAM,IAAA,KAAW,GAAU,EAAS,EAAI,IAC9C,CACA,OAAO,CACT,CAGA,SAAgB,EAAiB,EAA0B,CACzD,IAAM,EAAkB,CAAC,EACrB,EAAS,EACT,EAAO,EACX,IAAK,IAAM,KAAQ,EAAM,CACvB,IAAM,EAAQ,EAAO,IAAI,CAAI,EAC7B,GAAI,IAAU,IAAA,GAAW,MAAU,MAAM,gCAAgC,EAAK,EAAE,EAChF,EAAU,GAAU,EAAK,EACzB,GAAQ,EACJ,GAAQ,IACV,GAAQ,EACR,EAAM,KAAM,GAAU,EAAQ,GAAI,EAEtC,CACA,OAAO,IAAI,WAAW,CAAK,CAC7B,CAEA,IAAM,EAAU,IAAI,YACd,EAAU,IAAI,YAEpB,SAAgB,EAAgB,EAAsB,CACpD,OAAO,EAAiB,EAAQ,OAAO,CAAI,CAAC,CAC9C,CAEA,SAAgB,EAAgB,EAAsB,CACpD,OAAO,EAAQ,OAAO,EAAiB,CAAI,CAAC,CAC9C,CAGA,SAAgB,EAAU,EAAsB,CAC9C,OAAO,EAAQ,OAAO,CAAI,CAAC,CAAC,MAC9B"}
package/dist/_base64.d.ts DELETED
@@ -1,9 +0,0 @@
1
- /** Environment-independent base64url encoding (no `btoa`/`Buffer` dependency). */
2
- export declare function bytesToBase64Url(bytes: Uint8Array): string;
3
- /** Decodes base64url text. Throws on characters outside the base64url alphabet. */
4
- export declare function base64UrlToBytes(text: string): Uint8Array;
5
- export declare function textToBase64Url(text: string): string;
6
- export declare function base64UrlToText(text: string): string;
7
- /** Byte length of a UTF-8 string — used for `maxMessageBytes` checks. */
8
- export declare function utf8Bytes(text: string): number;
9
- //# sourceMappingURL=_base64.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_base64.d.ts","sourceRoot":"","sources":["../src/_base64.ts"],"names":[],"mappings":"AAGA,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAY1D;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAezD;AAKD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C"}
package/dist/_base64.js DELETED
@@ -1,33 +0,0 @@
1
- //#region src/_base64.ts
2
- var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_", t = new Map([...e].map((e, t) => [e, t]));
3
- function n(t) {
4
- let n = "";
5
- for (let r = 0; r < t.length; r += 3) {
6
- let i = t[r], a = t[r + 1], o = t[r + 2];
7
- n += e[i >> 2], n += e[(i & 3) << 4 | (a ?? 0) >> 4], a !== void 0 && (n += e[(a & 15) << 2 | (o ?? 0) >> 6]), o !== void 0 && (n += e[o & 63]);
8
- }
9
- return n;
10
- }
11
- function r(e) {
12
- let n = [], r = 0, i = 0;
13
- for (let a of e) {
14
- let e = t.get(a);
15
- if (e === void 0) throw Error(`Invalid base64url character "${a}"`);
16
- r = r << 6 | e, i += 6, i >= 8 && (i -= 8, n.push(r >> i & 255));
17
- }
18
- return new Uint8Array(n);
19
- }
20
- var i = new TextEncoder(), a = new TextDecoder();
21
- function o(e) {
22
- return n(i.encode(e));
23
- }
24
- function s(e) {
25
- return a.decode(r(e));
26
- }
27
- function c(e) {
28
- return i.encode(e).length;
29
- }
30
- //#endregion
31
- export { r as base64UrlToBytes, s as base64UrlToText, n as bytesToBase64Url, o as textToBase64Url, c as utf8Bytes };
32
-
33
- //# sourceMappingURL=_base64.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_base64.js","names":[],"sources":["../src/_base64.ts"],"sourcesContent":["const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\nconst LOOKUP = new Map([...ALPHABET].map((char, index) => [char, index]));\n\n/** Environment-independent base64url encoding (no `btoa`/`Buffer` dependency). */\nexport function bytesToBase64Url(bytes: Uint8Array): string {\n let output = '';\n for (let index = 0; index < bytes.length; index += 3) {\n const a = bytes[index]!;\n const b = bytes[index + 1];\n const c = bytes[index + 2];\n output += ALPHABET[a >> 2]!;\n output += ALPHABET[((a & 0b11) << 4) | ((b ?? 0) >> 4)]!;\n if (b !== undefined) output += ALPHABET[((b & 0b1111) << 2) | ((c ?? 0) >> 6)]!;\n if (c !== undefined) output += ALPHABET[c & 0b111111]!;\n }\n return output;\n}\n\n/** Decodes base64url text. Throws on characters outside the base64url alphabet. */\nexport function base64UrlToBytes(text: string): Uint8Array {\n const bytes: number[] = [];\n let buffer = 0;\n let bits = 0;\n for (const char of text) {\n const value = LOOKUP.get(char);\n if (value === undefined) throw new Error(`Invalid base64url character \"${char}\"`);\n buffer = (buffer << 6) | value;\n bits += 6;\n if (bits >= 8) {\n bits -= 8;\n bytes.push((buffer >> bits) & 0xff);\n }\n }\n return new Uint8Array(bytes);\n}\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function textToBase64Url(text: string): string {\n return bytesToBase64Url(encoder.encode(text));\n}\n\nexport function base64UrlToText(text: string): string {\n return decoder.decode(base64UrlToBytes(text));\n}\n\n/** Byte length of a UTF-8 string — used for `maxMessageBytes` checks. */\nexport function utf8Bytes(text: string): number {\n return encoder.encode(text).length;\n}\n"],"mappings":";AAAA,IAAM,IAAW,oEACX,IAAS,IAAI,IAAI,CAAC,GAAG,CAAQ,CAAC,CAAC,KAAK,GAAM,MAAU,CAAC,GAAM,CAAK,CAAC,CAAC;AAGxE,SAAgB,EAAiB,GAA2B;CAC1D,IAAI,IAAS;CACb,KAAK,IAAI,IAAQ,GAAG,IAAQ,EAAM,QAAQ,KAAS,GAAG;EACpD,IAAM,IAAI,EAAM,IACV,IAAI,EAAM,IAAQ,IAClB,IAAI,EAAM,IAAQ;EAIxB,AAHA,KAAU,EAAS,KAAK,IACxB,KAAU,GAAW,IAAI,MAAS,KAAO,KAAK,MAAM,IAChD,MAAM,KAAA,MAAW,KAAU,GAAW,IAAI,OAAW,KAAO,KAAK,MAAM,KACvE,MAAM,KAAA,MAAW,KAAU,EAAS,IAAI;CAC9C;CACA,OAAO;AACT;AAGA,SAAgB,EAAiB,GAA0B;CACzD,IAAM,IAAkB,CAAC,GACrB,IAAS,GACT,IAAO;CACX,KAAK,IAAM,KAAQ,GAAM;EACvB,IAAM,IAAQ,EAAO,IAAI,CAAI;EAC7B,IAAI,MAAU,KAAA,GAAW,MAAU,MAAM,gCAAgC,EAAK,EAAE;EAGhF,AAFA,IAAU,KAAU,IAAK,GACzB,KAAQ,GACJ,KAAQ,MACV,KAAQ,GACR,EAAM,KAAM,KAAU,IAAQ,GAAI;CAEtC;CACA,OAAO,IAAI,WAAW,CAAK;AAC7B;AAEA,IAAM,IAAU,IAAI,YAAY,GAC1B,IAAU,IAAI,YAAY;AAEhC,SAAgB,EAAgB,GAAsB;CACpD,OAAO,EAAiB,EAAQ,OAAO,CAAI,CAAC;AAC9C;AAEA,SAAgB,EAAgB,GAAsB;CACpD,OAAO,EAAQ,OAAO,EAAiB,CAAI,CAAC;AAC9C;AAGA,SAAgB,EAAU,GAAsB;CAC9C,OAAO,EAAQ,OAAO,CAAI,CAAC,CAAC;AAC9B"}