Skip to content

Commit efa831c

Browse files
committed
feat: finish stream
1 parent ccdbef1 commit efa831c

File tree

2 files changed

+97
-12
lines changed

2 files changed

+97
-12
lines changed

demo/web-to-web-p2p/src/app.tsx

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,16 @@
1-
import React, {
2-
ReactElement,
3-
ReactNode,
4-
useCallback,
5-
useEffect,
6-
useState,
7-
} from 'react';
1+
import React, { ReactElement, useCallback, useEffect, useState } from 'react';
82
import { createRoot } from 'react-dom/client';
93
import * as Comlink from 'comlink';
104
import {
115
Prover as TProver,
126
Verifier as TVerifier,
13-
Presentation as TPresentation,
147
Commit,
15-
NotaryServer,
168
Transcript,
179
} from 'tlsn-js';
18-
import { PresentationJSON } from 'tlsn-js/build/types';
1910
import './app.scss';
11+
import WebscoketStream from './stream';
2012

21-
const { init, Prover, Presentation, Verifier }: any = Comlink.wrap(
13+
const { init, Prover, Verifier }: any = Comlink.wrap(
2214
new Worker(new URL('./worker.ts', import.meta.url)),
2315
);
2416

@@ -43,6 +35,37 @@ function App(): ReactElement {
4335
})();
4436
}, []);
4537

38+
useEffect(() => {
39+
(async () => {
40+
// Set up stream for prover
41+
(async () => {
42+
const proverStream = new WebscoketStream(
43+
'ws://localhost:3001?id=prover',
44+
);
45+
const reader = await proverStream.reader();
46+
while (true) {
47+
const { done, value } = await reader.read();
48+
if (done) {
49+
console.log('stream finished');
50+
break;
51+
}
52+
console.log(`Received data from stream:`, await value.text());
53+
}
54+
})();
55+
56+
// Set up stream for verifier
57+
(async () => {
58+
const verifierStream = new WebscoketStream(
59+
'ws://localhost:3001?id=verifier',
60+
);
61+
const writer = await verifierStream.writer();
62+
writer.write('Hello');
63+
writer.write('World!');
64+
writer.close();
65+
})();
66+
})();
67+
}, []);
68+
4669
const addProverLog = useCallback((log: string) => {
4770
pLogs = pLogs.concat(`${new Date().toLocaleTimeString()} - ${log}`);
4871
setProverMessages(pLogs);
@@ -102,7 +125,7 @@ function App(): ReactElement {
102125
});
103126
addProverLog('request sent');
104127
const transcript = await prover.transcript();
105-
console.log(transcript);
128+
106129
addProverLog('response received');
107130
addProverLog('transcript.sent');
108131
addProverLog(transcript.sent);

demo/web-to-web-p2p/src/stream.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
export default class WebscoketStream {
2+
client: WebSocket;
3+
readable: Promise<ReadableStream>;
4+
writable: Promise<WritableStream>;
5+
constructor(url: string) {
6+
const client = new WebSocket(url);
7+
8+
const deferredReadable = defer<ReadableStream>();
9+
const deferredWritable = defer<WritableStream>();
10+
this.client = client;
11+
this.readable = deferredReadable.promise;
12+
this.writable = deferredWritable.promise;
13+
14+
client.onopen = () => {
15+
const readable = new ReadableStream({
16+
start(controller) {
17+
client.onmessage = async (event) => {
18+
controller.enqueue(event.data);
19+
};
20+
},
21+
cancel() {
22+
client.close();
23+
},
24+
});
25+
26+
const writable = new WritableStream({
27+
write(chunk) {
28+
client.send(chunk);
29+
},
30+
close() {
31+
client.close();
32+
},
33+
});
34+
35+
deferredReadable.resolve(readable);
36+
deferredWritable.resolve(writable);
37+
};
38+
}
39+
40+
async reader() {
41+
return this.readable.then((stream) => stream.getReader());
42+
}
43+
44+
async writer() {
45+
return this.writable.then((stream) => stream.getWriter());
46+
}
47+
}
48+
49+
function defer<value = any>(): {
50+
promise: Promise<value>;
51+
resolve: (val: value | Promise<value>) => void;
52+
reject: (err: any) => void;
53+
} {
54+
let resolve: (val: value | Promise<value>) => void,
55+
reject: (err: any) => void;
56+
const promise: Promise<value> = new Promise((res, rej) => {
57+
resolve = res;
58+
reject = rej;
59+
});
60+
61+
return { promise, resolve: resolve!, reject: reject! };
62+
}

0 commit comments

Comments
 (0)