move firebase auth into SignalFirebase.ts

This commit is contained in:
CoolElectronics 2023-08-15 21:31:00 -04:00
parent 9549b9abaa
commit 0b2647554e
No known key found for this signature in database
GPG key ID: F63593D168636C50
3 changed files with 47 additions and 59 deletions

View file

@ -3,6 +3,7 @@ import { getDatabase, onValue, ref, set, remove } from "firebase/database";
import { v4 as uuid } from "uuid"; import { v4 as uuid } from "uuid";
import { Answer } from "./RTCTransport"; import { Answer } from "./RTCTransport";
import { getAuth, signInWithEmailAndPassword } from "firebase/auth";
export async function signalSwarm(offer: string): Promise<Answer> { export async function signalSwarm(offer: string): Promise<Answer> {
@ -39,3 +40,28 @@ export async function signalSwarm(offer: string): Promise<Answer> {
}); });
} }
export async function signalAccount(offer: string, email: string, password: string): Promise<Answer> {
let auth = getAuth();
let creds = await signInWithEmailAndPassword(auth, email, password);
const db = getDatabase();
let peer = ref(db, `/peers/${creds.user.uid}`);
set(peer, offer);
return new Promise((resolve, reject) => {
onValue(peer, async (snapshot) => {
const str = snapshot.val();
if (str) {
let data = JSON.parse(str);
if (data && data.answer && data.candidates) {
remove(peer);
resolve(data);
}
}
});
});
}

View file

@ -1,9 +1,5 @@
<script lang="ts"> <script lang="ts">
import { import { setBareClientImplementation } from "bare-client-custom";
BareClient,
registerRemoteListener,
setBareClientImplementation,
} from "bare-client-custom";
import { import {
AdriftBareClient, AdriftBareClient,
Connection, Connection,
@ -19,14 +15,20 @@
TextField, TextField,
} from "m3-svelte"; } from "m3-svelte";
import { getAuth, signInWithEmailAndPassword } from "firebase/auth";
import { getDatabase, onValue, ref, set } from "firebase/database";
import type { Transport } from "protocol"; import type { Transport } from "protocol";
import Proxy from "./Proxy.svelte"; import Proxy from "./Proxy.svelte";
import { initializeApp } from "firebase/app"; import { initializeApp } from "firebase/app";
import TrackerList from "tracker-list"; import TrackerList from "tracker-list";
enum ReadyState {
Idle,
Connecting,
Connected,
}
let state = ReadyState.Idle;
let transport: Transport; let transport: Transport;
let rtctransport: RTCTransport | undefined; let rtctransport: RTCTransport | undefined;
@ -36,11 +38,6 @@
let connectionState = ""; let connectionState = "";
if (!import.meta.env.VITE_ADRIFT_SINGLEFILE) {
console.log("registering bare-client-custom");
registerRemoteListener();
}
function onTransportOpen() { function onTransportOpen() {
console.log("Transport opened"); console.log("Transport opened");
@ -85,36 +82,19 @@
await initFirebase(); await initFirebase();
rtctransport = transport = createRTCTransport(); rtctransport = transport = createRTCTransport();
let auth = getAuth();
let creds = await signInWithEmailAndPassword(auth, email, password);
state = ReadyState.Connecting; state = ReadyState.Connecting;
const db = getDatabase();
let peer = ref(db, `/peers/${creds.user.uid}`);
let offer = await rtctransport.createOffer(); let offer = await rtctransport.createOffer();
connectionState = "Finding your node..."; connectionState = "Finding your node...";
let answer = await SignalFirebase.signalAccount(
set(peer, JSON.stringify(offer)); JSON.stringify(offer),
email,
onValue(peer, async (snapshot) => { password
const str = snapshot.val(); );
if (str) { connectionState = "Linking to node...";
console.log(str); await new Promise((r) => {
let data = JSON.parse(str); setTimeout(r, 1000);
console.log(data);
if (data && data.answer && data.candidates) {
set(peer, null);
const { answer, candidates } = data;
connectionState = "Linking to node...";
await new Promise((r) => {
setTimeout(r, 1000);
});
rtctransport?.answer(answer, candidates);
}
}
}); });
rtctransport.answer(answer.answer, answer.candidates);
} }
async function connectSwarm() { async function connectSwarm() {
@ -159,27 +139,6 @@
console.log("onclose") console.log("onclose")
); );
} }
(window as any).bare = new BareClient();
(window as any).myWsTest = () => {
// const url = "wss://ws.postman-echo.com/raw";
const url = "ws://127.0.0.1:3002/";
const ws = ((window as any).ws = (
(window as any).bare as BareClient
).createWebSocket(url, ["a", "b"], {}));
ws.onopen = () => console.log("onopen");
ws.addEventListener("open", () => console.log("open listener"));
ws.onclose = () => console.error(new Error("onclose"));
ws.addEventListener("close", (e) => console.log("close listener", e));
ws.onmessage = (e) => console.log("message", e);
};
enum ReadyState {
Idle,
Connecting,
Connected,
}
let state = ReadyState.Idle;
</script> </script>
{#if state == ReadyState.Connected} {#if state == ReadyState.Connected}

View file

@ -1,3 +1,4 @@
import { registerRemoteListener } from "bare-client-custom";
import App from "./App.svelte"; import App from "./App.svelte";
import "./index.css"; import "./index.css";
if (import.meta.env.VITE_ADRIFT_DEV) { if (import.meta.env.VITE_ADRIFT_DEV) {
@ -18,5 +19,7 @@ const app = new App({
if (!import.meta.env.VITE_ADRIFT_SINGLEFILE) { if (!import.meta.env.VITE_ADRIFT_SINGLEFILE) {
navigator.serviceWorker.register("/sw.js"); navigator.serviceWorker.register("/sw.js");
console.log("registering bare-client-custom");
registerRemoteListener();
} }
export default app; export default app;