@openlv/transport 0.0.1-beta.6 → 0.0.1-beta.8
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/base.d.ts +2 -0
- package/dist/base.js +57 -61
- package/dist/base.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +2 -2
- package/dist/index.test.js.map +1 -1
- package/dist/layer.d.ts +5 -1
- package/dist/layer.js.map +1 -1
- package/dist/utils/log.js.map +1 -1
- package/dist/webrtc/index.d.ts +3 -4
- package/dist/webrtc/index.js +7 -8
- package/dist/webrtc/index.js.map +1 -1
- package/package.json +3 -3
package/dist/base.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from "eventemitter3";
|
|
2
2
|
import type { MaybePromise } from "viem";
|
|
3
3
|
import { type TLayerEventMap, type TransportLayerParameters, type TransportState } from "./layer.js";
|
|
4
|
+
import type { WebRTCConfig } from "./webrtc/index.js";
|
|
4
5
|
export type TransportMessage = {
|
|
5
6
|
type: "offer";
|
|
6
7
|
payload: string;
|
|
@@ -21,6 +22,7 @@ export type TransportLayer = {
|
|
|
21
22
|
emitter: EventEmitter<TLayerEventMap>;
|
|
22
23
|
};
|
|
23
24
|
export type TLayer = (parameters: TransportLayerParameters) => TransportLayer;
|
|
25
|
+
export type CreateTransportLayerFn = (config?: WebRTCConfig) => TLayer;
|
|
24
26
|
export type TransportLayerBase = {
|
|
25
27
|
type: string;
|
|
26
28
|
setup: () => MaybePromise<void>;
|
package/dist/base.js
CHANGED
|
@@ -5,68 +5,64 @@ import { TRANSPORT_STATE, } from "./layer.js";
|
|
|
5
5
|
*
|
|
6
6
|
* https://openlv.sh/api/transport
|
|
7
7
|
*/
|
|
8
|
-
export const createTransportBase = (init) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
8
|
+
export const createTransportBase = (init) => ({ encrypt, decrypt, subsend, isHost, onmessage }) => {
|
|
9
|
+
const emitter = new EventEmitter();
|
|
10
|
+
const internalEmitter = new EventEmitter();
|
|
11
|
+
let state = TRANSPORT_STATE.STANDBY;
|
|
12
|
+
const setState = (newState) => {
|
|
13
|
+
state = newState;
|
|
14
|
+
emitter.emit("state_change", newState);
|
|
15
|
+
};
|
|
16
|
+
internalEmitter.on("offer", (offer) => {
|
|
17
|
+
console.log("onOffer", offer);
|
|
18
|
+
subsend({ type: "offer", payload: offer });
|
|
19
|
+
});
|
|
20
|
+
internalEmitter.on("answer", (answer) => {
|
|
21
|
+
console.log("onAnswer", answer);
|
|
22
|
+
subsend({ type: "answer", payload: answer });
|
|
23
|
+
});
|
|
24
|
+
internalEmitter.on("candidate", (candidate) => {
|
|
25
|
+
console.log("onCandidate", candidate);
|
|
26
|
+
subsend({ type: "candidate", payload: candidate });
|
|
27
|
+
});
|
|
28
|
+
internalEmitter.on("connected", () => {
|
|
29
|
+
console.log("onConnected");
|
|
30
|
+
setState(TRANSPORT_STATE.CONNECTED);
|
|
31
|
+
});
|
|
32
|
+
internalEmitter.on("message", async (message) => {
|
|
33
|
+
console.log("onMessage", message);
|
|
34
|
+
const data = await decrypt(message);
|
|
35
|
+
onmessage(JSON.parse(data));
|
|
36
|
+
});
|
|
37
|
+
const { setup, teardown, type, send: sendLayer, handle, } = init({
|
|
38
|
+
emitter: internalEmitter,
|
|
39
|
+
isHost,
|
|
40
|
+
});
|
|
41
|
+
const send = async (message) => {
|
|
42
|
+
if (state !== TRANSPORT_STATE.CONNECTED)
|
|
43
|
+
throw new Error("Transport not connected");
|
|
44
|
+
const payload = await encrypt(JSON.stringify(message));
|
|
45
|
+
await sendLayer(payload);
|
|
46
|
+
};
|
|
47
|
+
const waitFor = async (state) => new Promise((resolve) => {
|
|
48
|
+
emitter.on("state_change", (newState) => {
|
|
49
|
+
if (newState === state) {
|
|
50
|
+
resolve();
|
|
51
|
+
}
|
|
41
52
|
});
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
});
|
|
56
|
-
};
|
|
57
|
-
return {
|
|
58
|
-
type,
|
|
59
|
-
async setup() {
|
|
60
|
-
setState(TRANSPORT_STATE.CONNECTING);
|
|
61
|
-
await setup();
|
|
62
|
-
setState(TRANSPORT_STATE.READY);
|
|
63
|
-
},
|
|
64
|
-
teardown,
|
|
65
|
-
handle,
|
|
66
|
-
send,
|
|
67
|
-
waitFor,
|
|
68
|
-
emitter,
|
|
69
|
-
};
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
type,
|
|
56
|
+
async setup() {
|
|
57
|
+
setState(TRANSPORT_STATE.CONNECTING);
|
|
58
|
+
await setup();
|
|
59
|
+
setState(TRANSPORT_STATE.READY);
|
|
60
|
+
},
|
|
61
|
+
teardown,
|
|
62
|
+
handle,
|
|
63
|
+
send,
|
|
64
|
+
waitFor,
|
|
65
|
+
emitter,
|
|
70
66
|
};
|
|
71
67
|
};
|
|
72
68
|
//# sourceMappingURL=base.js.map
|
package/dist/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAEL,eAAe,GAGhB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventEmitter } from \"eventemitter3\";\nimport type { MaybePromise } from \"viem\";\n\nimport {\n type TLayerEventMap,\n TRANSPORT_STATE,\n type TransportLayerParameters,\n type TransportState,\n} from \"./layer.js\";\nimport type { WebRTCConfig } from \"./webrtc/index.js\";\n\nexport type TransportMessage =\n | {\n type: \"offer\";\n payload: string;\n }\n | {\n type: \"answer\";\n payload: string;\n }\n | {\n type: \"candidate\";\n payload: string;\n };\nexport type TransportLayer = {\n type: string;\n setup: () => MaybePromise<void>;\n teardown: () => MaybePromise<void>;\n send: (message: object) => Promise<void>;\n handle: (message: TransportMessage) => Promise<void>;\n waitFor: (state: TransportState) => Promise<void>;\n emitter: EventEmitter<TLayerEventMap>;\n};\nexport type TLayer = (parameters: TransportLayerParameters) => TransportLayer;\nexport type CreateTransportLayerFn = (config?: WebRTCConfig) => TLayer;\nexport type TransportLayerBase = {\n type: string;\n setup: () => MaybePromise<void>;\n teardown: () => MaybePromise<void>;\n handle: (message: TransportMessage) => Promise<void>;\n send: (message: string) => Promise<void>;\n};\nexport type TransportLayerBaseEventMap = {\n offer: (offer: string) => void;\n answer: (answer: string) => void;\n candidate: (candidate: string) => void;\n connected: () => void;\n message: (message: string) => void;\n};\nexport type TransportLayerBaseEmitter =\n EventEmitter<TransportLayerBaseEventMap>;\nexport type TransportLayerBaseParameters = {\n emitter: TransportLayerBaseEmitter;\n isHost: boolean;\n};\nexport type TransportLayerBaseInit = (\n parameters: TransportLayerBaseParameters,\n) => TransportLayerBase;\n\n/**\n * Base Transport Layer implementation\n *\n * https://openlv.sh/api/transport\n */\nexport const createTransportBase = (init: TransportLayerBaseInit): TLayer => ({ encrypt, decrypt, subsend, isHost, onmessage }) => {\n const emitter = new EventEmitter<TLayerEventMap>();\n const internalEmitter = new EventEmitter<TransportLayerBaseEventMap>();\n let state: TransportState = TRANSPORT_STATE.STANDBY;\n\n const setState = (newState: TransportState) => {\n state = newState;\n emitter.emit(\"state_change\", newState);\n };\n\n internalEmitter.on(\"offer\", (offer) => {\n console.log(\"onOffer\", offer);\n subsend({ type: \"offer\", payload: offer });\n });\n internalEmitter.on(\"answer\", (answer) => {\n console.log(\"onAnswer\", answer);\n subsend({ type: \"answer\", payload: answer });\n });\n internalEmitter.on(\"candidate\", (candidate) => {\n console.log(\"onCandidate\", candidate);\n subsend({ type: \"candidate\", payload: candidate });\n });\n internalEmitter.on(\"connected\", () => {\n console.log(\"onConnected\");\n setState(TRANSPORT_STATE.CONNECTED);\n });\n internalEmitter.on(\"message\", async (message) => {\n console.log(\"onMessage\", message);\n const data = await decrypt(message);\n\n onmessage(JSON.parse(data) as { type: string; payload: object; messageId: string; });\n });\n\n const {\n setup,\n teardown,\n type,\n send: sendLayer,\n handle,\n } = init({\n emitter: internalEmitter,\n isHost,\n });\n\n const send = async (message: object) => {\n if (state !== TRANSPORT_STATE.CONNECTED)\n throw new Error(\"Transport not connected\");\n\n const payload = await encrypt(JSON.stringify(message));\n\n await sendLayer(payload);\n };\n\n const waitFor = async (state: TransportState) => new Promise<void>((resolve) => {\n emitter.on(\"state_change\", (newState) => {\n if (newState === state) {\n resolve();\n }\n });\n });\n\n return {\n type,\n async setup() {\n setState(TRANSPORT_STATE.CONNECTING);\n await setup();\n setState(TRANSPORT_STATE.READY);\n },\n teardown,\n handle,\n send,\n waitFor,\n emitter,\n };\n};\n"]}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,0EAA0E;AAE1E;;;;;GAKG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,0EAA0E;AAE1E;;;;;GAKG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC","sourcesContent":["/** biome-ignore-all lint/performance/noBarrelFile: package entrypoint */\n/** biome-ignore-all lint/performance/noReExportAll: package entrypoint */\n\n/**\n * Open Lavatory Protocol - Decentralized Wallet Connection Library\n *\n * A privacy-first, peer-to-peer protocol for connecting dApps with wallets\n * without relying on centralized infrastructure.\n */\n\nexport * from \"./base.js\";\nexport * from \"./layer.js\";\nexport * from \"./webrtc/index.js\";\n"]}
|
package/dist/index.test.js
CHANGED
|
@@ -10,7 +10,7 @@ describe("Transport", () => {
|
|
|
10
10
|
const { decrypt } = decryptionKey;
|
|
11
11
|
const signalA = new EventEmitter();
|
|
12
12
|
const signalB = new EventEmitter();
|
|
13
|
-
const transportA = webrtc(
|
|
13
|
+
const transportA = webrtc()({
|
|
14
14
|
encrypt,
|
|
15
15
|
decrypt,
|
|
16
16
|
subsend: async (m) => {
|
|
@@ -21,7 +21,7 @@ describe("Transport", () => {
|
|
|
21
21
|
signalA.emit("message", m);
|
|
22
22
|
},
|
|
23
23
|
});
|
|
24
|
-
const transportB = webrtc(
|
|
24
|
+
const transportB = webrtc()({
|
|
25
25
|
encrypt,
|
|
26
26
|
decrypt,
|
|
27
27
|
subsend: async (m) => {
|
package/dist/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAC5E,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;QAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { generateKeyPair } from \"@openlv/core/encryption\";\nimport { EventEmitter } from \"eventemitter3\";\nimport { describe, expect, it } from \"vitest\";\n\nimport { TRANSPORT_STATE } from \"./layer.js\";\nimport { webrtc } from \"./webrtc/index.js\";\n\ndescribe(\"Transport\", () => {\n it(\"should be able to create a transport\", async () => {\n const { encryptionKey: publicKey, decryptionKey } = await generateKeyPair();\n const { encrypt } = publicKey;\n const { decrypt } = decryptionKey;\n const signalA = new EventEmitter<{ signal: string; message: object; }>();\n const signalB = new EventEmitter<{ signal: string; message: object; }>();\n\n const transportA = webrtc()({\n encrypt,\n decrypt,\n subsend: async (m) => {\n signalA.emit(\"signal\", m);\n },\n isHost: true,\n onmessage: (m) => {\n signalA.emit(\"message\", m);\n },\n });\n const transportB = webrtc()({\n encrypt,\n decrypt,\n subsend: async (m) => {\n signalB.emit(\"signal\", m);\n },\n isHost: false,\n onmessage: (m) => {\n signalB.emit(\"message\", m);\n },\n });\n\n signalA.on(\"signal\", (m) => {\n console.log(\"messageA\", m);\n transportB.handle(m);\n });\n signalB.on(\"signal\", (m) => {\n console.log(\"messageB\", m);\n transportA.handle(m);\n });\n\n console.log(\"test: setup\");\n await Promise.all([transportA.setup(), transportB.setup()]);\n\n console.log(\"test: waitFor connected\");\n await Promise.all([\n transportA.waitFor(TRANSPORT_STATE.CONNECTED),\n transportB.waitFor(TRANSPORT_STATE.CONNECTED),\n ]);\n\n console.log(\"test: connected\");\n\n const awaitedMessageAtB = new Promise<object>((resolve) => {\n signalB.on(\"message\", (m) => {\n console.log(\"messageB\", m);\n resolve(m);\n });\n });\n\n console.log(\"test: send message to A\");\n await transportA.send({ data: \"test_123\" });\n\n console.log(\"test: await message at B\");\n const messageAtB = await awaitedMessageAtB;\n\n expect(messageAtB).toEqual({ data: \"test_123\" });\n\n console.log(\"test: message at B\", messageAtB);\n const awaitedMessageAtA = new Promise<object>((resolve) => {\n signalA.on(\"message\", (m) => {\n console.log(\"messageA\", m);\n resolve(m);\n });\n });\n\n await transportB.send({ data: \"test_456\" });\n const messageAtA = await awaitedMessageAtA;\n\n expect(messageAtA).toEqual({ data: \"test_456\" });\n\n await Promise.all([transportA.teardown(), transportB.teardown()]);\n\n expect(transportA).toBeDefined();\n expect(transportB).toBeDefined();\n });\n});\n"]}
|
package/dist/layer.d.ts
CHANGED
|
@@ -16,5 +16,9 @@ export type TransportLayerParameters = {
|
|
|
16
16
|
encrypt: EncryptionKey["encrypt"];
|
|
17
17
|
decrypt: DecryptionKey["decrypt"];
|
|
18
18
|
subsend: (message: TransportMessage) => Promise<void>;
|
|
19
|
-
onmessage: (message:
|
|
19
|
+
onmessage: (message: {
|
|
20
|
+
type: string;
|
|
21
|
+
payload: object;
|
|
22
|
+
messageId: string;
|
|
23
|
+
}) => void;
|
|
20
24
|
};
|
package/dist/layer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer.js","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;CACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"layer.js","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;CACN,CAAC","sourcesContent":["import type { DecryptionKey, EncryptionKey } from \"@openlv/core/encryption\";\n\nimport type { TransportMessage } from \"./base.js\";\n\nexport const TRANSPORT_STATE = {\n STANDBY: \"standby\",\n CONNECTING: \"connecting\",\n READY: \"ready\",\n CONNECTED: \"connected\",\n ERROR: \"error\",\n} as const;\nexport type TransportState =\n (typeof TRANSPORT_STATE)[keyof typeof TRANSPORT_STATE];\n\nexport type TLayerEventMap = {\n state_change: (state: TransportState) => void;\n};\n\nexport type TransportLayerParameters = {\n isHost: boolean;\n encrypt: EncryptionKey[\"encrypt\"];\n decrypt: DecryptionKey[\"decrypt\"];\n subsend: (message: TransportMessage) => Promise<void>;\n onmessage: (message: { type: string; payload: object; messageId: string; }) => void;\n};\n"]}
|
package/dist/utils/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/utils/log.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAiC,EAAE,EAAE,CAC1D,OAAO,CAAC,GAAG;AACT,qBAAqB;AACrB,sCAAsC;AACtC,yCAAyC;AACzC,GAAG,CAAC,CACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/utils/log.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAiC,EAAE,EAAE,CAC1D,OAAO,CAAC,GAAG;AACT,qBAAqB;AACrB,sCAAsC;AACtC,yCAAyC;AACzC,GAAG,CAAC,CACL,CAAC","sourcesContent":["export const log = (...x: Parameters<typeof console.log>) =>\n console.log(\n // \"%c[transport]%c\",\n // \"color: orange; font-weight: bold\",\n // \"color: inherit; font-weight: normal\",\n ...x,\n );\n"]}
|
package/dist/webrtc/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
type
|
|
1
|
+
import { type CreateTransportLayerFn } from "../base.js";
|
|
2
|
+
export type WebRTCConfig = {
|
|
2
3
|
iceServers?: RTCConfiguration["iceServers"];
|
|
3
|
-
isHost: boolean;
|
|
4
4
|
};
|
|
5
|
-
export declare const webrtc:
|
|
6
|
-
export {};
|
|
5
|
+
export declare const webrtc: CreateTransportLayerFn;
|
package/dist/webrtc/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
/* eslint-disable sonarjs/no-duplicate-string */
|
|
2
1
|
import { match } from "ts-pattern";
|
|
3
|
-
import { createTransportBase } from "../base.js";
|
|
2
|
+
import { createTransportBase, } from "../base.js";
|
|
4
3
|
import { log } from "../utils/log.js";
|
|
5
4
|
// TODO: decide wether we want defaults, and if so what defaults
|
|
6
5
|
const defaultConfig = {
|
|
@@ -14,11 +13,12 @@ const defaultConfig = {
|
|
|
14
13
|
credential: "openrelayproject",
|
|
15
14
|
},
|
|
16
15
|
],
|
|
17
|
-
isHost: true,
|
|
18
16
|
};
|
|
19
17
|
export const webrtc = (config = defaultConfig) => {
|
|
20
18
|
const { iceServers = defaultConfig.iceServers } = config;
|
|
21
|
-
|
|
19
|
+
console.log("WEBRTC ICE CONFIG", config);
|
|
20
|
+
const ident = Math.random().toString(36)
|
|
21
|
+
.slice(2, 4) + "#";
|
|
22
22
|
return createTransportBase(({ emitter, isHost }) => {
|
|
23
23
|
const rtcConfig = { iceServers };
|
|
24
24
|
let connection;
|
|
@@ -42,7 +42,6 @@ export const webrtc = (config = defaultConfig) => {
|
|
|
42
42
|
emitter.emit("candidate", JSON.stringify(c.candidate?.toJSON()));
|
|
43
43
|
};
|
|
44
44
|
const onDataChannel = (e) => {
|
|
45
|
-
// eslint-disable-next-line prefer-destructuring
|
|
46
45
|
channel = e.channel;
|
|
47
46
|
hookChannel(channel);
|
|
48
47
|
log(ident, "onDataChannel", channel);
|
|
@@ -64,8 +63,8 @@ export const webrtc = (config = defaultConfig) => {
|
|
|
64
63
|
}
|
|
65
64
|
};
|
|
66
65
|
const hookChannel = (channel) => {
|
|
67
|
-
channel.
|
|
68
|
-
channel.
|
|
66
|
+
channel.addEventListener("open", onDataChannelOpen);
|
|
67
|
+
channel.addEventListener("message", onDataChannelMessage);
|
|
69
68
|
};
|
|
70
69
|
const handle = async (message) => {
|
|
71
70
|
console.log(ident, "webrtc handle", message);
|
|
@@ -111,7 +110,7 @@ export const webrtc = (config = defaultConfig) => {
|
|
|
111
110
|
return {
|
|
112
111
|
type: "webrtc",
|
|
113
112
|
async setup() {
|
|
114
|
-
log("webrtc
|
|
113
|
+
log("webrtc setupz", rtcConfig);
|
|
115
114
|
connection = new RTCPeerConnection(rtcConfig);
|
|
116
115
|
connection.onconnectionstatechange = onConnectionStateChange;
|
|
117
116
|
connection.onicecandidate = onIceCandidate;
|
package/dist/webrtc/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webrtc/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webrtc/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { match } from \"ts-pattern\";\n\nimport {\n createTransportBase,\n type CreateTransportLayerFn,\n type TransportMessage,\n} from \"../base.js\";\nimport { log } from \"../utils/log.js\";\n\nexport type WebRTCConfig = {\n iceServers?: RTCConfiguration[\"iceServers\"];\n};\n\n// TODO: decide wether we want defaults, and if so what defaults\nconst defaultConfig: WebRTCConfig = {\n iceServers: [\n { urls: \"stun:stun.l.google.com:19302\" },\n { urls: \"stun:stun1.l.google.com:19302\" },\n { urls: \"stun:stun.services.mozilla.com:3478\" },\n {\n urls: [\"turn:openrelay.metered.ca:80\", \"turn:openrelay.metered.ca:443\"],\n username: \"openrelayproject\",\n credential: \"openrelayproject\",\n },\n ],\n};\n\nexport const webrtc: CreateTransportLayerFn = (\n config: WebRTCConfig = defaultConfig,\n) => {\n const { iceServers = defaultConfig.iceServers } = config;\n\n console.log(\"WEBRTC ICE CONFIG\", config);\n const ident = Math.random().toString(36)\n .slice(2, 4) + \"#\";\n\n return createTransportBase(({ emitter, isHost }) => {\n const rtcConfig: RTCConfiguration = { iceServers };\n let connection: RTCPeerConnection | undefined;\n let channel: RTCDataChannel | undefined;\n\n const onConnectionStateChange = () => {\n log(ident, \"onConnectionStateChange\", connection?.connectionState);\n\n const state = connection?.connectionState;\n\n match(state)\n .with(\"disconnected\", () => {\n // TODO: implement\n })\n .with(\"failed\", () => {})\n .otherwise(() => {\n log(ident, \"onConnectionStateChangeUnknown\", state);\n });\n };\n const onIceCandidate = (c: RTCPeerConnectionIceEvent) => {\n if (channel?.readyState === \"open\") return;\n\n log(ident, \"onIceCandidate\", c.candidate);\n emitter.emit(\"candidate\", JSON.stringify(c.candidate?.toJSON()));\n };\n const onDataChannel = (e: RTCDataChannelEvent) => {\n channel = e.channel;\n hookChannel(channel);\n log(ident, \"onDataChannel\", channel);\n };\n const onDataChannelOpen = () => {\n log(ident, \"onDataChannelOpen\");\n emitter.emit(\"connected\");\n };\n const onDataChannelMessage = (e: MessageEvent<string>) => {\n log(ident, \"onDataChannelMessage\", e.data);\n emitter.emit(\"message\", e.data);\n };\n const onNegotiationNeeded = async () => {\n log(ident, \"onNegotiationNeeded\");\n\n if (isHost && connection) {\n await connection.setLocalDescription();\n\n if (connection.localDescription)\n emitter.emit(\"offer\", JSON.stringify(connection.localDescription));\n }\n };\n\n const hookChannel = (channel: RTCDataChannel) => {\n channel.addEventListener(\"open\", onDataChannelOpen);\n channel.addEventListener(\"message\", onDataChannelMessage);\n };\n\n const handle = async (message: TransportMessage) => {\n console.log(ident, \"webrtc handle\", message);\n\n if (!connection) throw new Error(\"Connection not found\");\n\n match(message)\n .with({ type: \"offer\" }, async ({ payload }) => {\n console.log(\"offer\", payload);\n // TODO: add zon schema?\n const offer = JSON.parse(payload) as RTCSessionDescriptionInit;\n\n await connection!.setRemoteDescription(\n new RTCSessionDescription(offer),\n );\n console.log(\n ident,\n \"setRemoteDescriptionran\",\n connection!.remoteDescription,\n );\n\n const answer = await connection!.createAnswer();\n\n await connection!.setLocalDescription(answer);\n emitter.emit(\"answer\", JSON.stringify(answer));\n })\n .with({ type: \"answer\" }, async ({ payload }) => {\n if (!connection) throw new Error(\"Connection not found\");\n\n console.log(ident, \"answer\", payload);\n const answer = JSON.parse(payload) as RTCSessionDescriptionInit;\n\n await connection.setRemoteDescription(\n new RTCSessionDescription(answer),\n );\n })\n .with({ type: \"candidate\" }, async ({ payload }) => {\n if (!connection) throw new Error(\"Connection not found\");\n\n if (!payload) return;\n\n console.log(ident, \"candidate\", payload);\n const candidate = JSON.parse(payload) as RTCIceCandidateInit;\n\n await connection.addIceCandidate(new RTCIceCandidate(candidate));\n })\n .otherwise(() => {\n // biome-ignore lint/suspicious/noConsole: <x>\n console.warn(\"invalid message\", message);\n });\n };\n\n const send = async (message: string) => {\n if (!channel) throw new Error(\"Channel not found\");\n\n channel.send(message);\n };\n\n return {\n type: \"webrtc\",\n async setup() {\n log(\"webrtc setupz\", rtcConfig);\n\n connection = new RTCPeerConnection(rtcConfig);\n connection.onconnectionstatechange = onConnectionStateChange;\n connection.onicecandidate = onIceCandidate;\n connection.ondatachannel = onDataChannel;\n connection.onnegotiationneeded = onNegotiationNeeded;\n\n if (isHost) {\n channel = connection.createDataChannel(\"openlv-data\");\n hookChannel(channel);\n }\n },\n teardown() {\n log(\"webrtc teardown\");\n\n if (channel) {\n channel.close();\n channel = undefined;\n }\n\n if (connection) {\n connection.close();\n connection = undefined;\n }\n },\n handle,\n send,\n };\n });\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openlv/transport",
|
|
3
|
-
"version": "0.0.1-beta.
|
|
3
|
+
"version": "0.0.1-beta.8",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"open-lavatory"
|
|
6
6
|
],
|
|
@@ -42,11 +42,11 @@
|
|
|
42
42
|
"eventemitter3": "^5.0.1",
|
|
43
43
|
"globals": "^16.2.0",
|
|
44
44
|
"ts-pattern": "^5",
|
|
45
|
-
"@openlv/core": "0.0.1-beta.
|
|
45
|
+
"@openlv/core": "0.0.1-beta.9"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@vitest/browser-playwright": "^4.0.8",
|
|
49
|
-
"playwright": "
|
|
49
|
+
"playwright": "1.58.1",
|
|
50
50
|
"typescript": "^5",
|
|
51
51
|
"vitest": "^4"
|
|
52
52
|
},
|