diff --git a/src/PeerManager.ts b/src/PeerManager.ts index e545dfe..3887eb9 100644 --- a/src/PeerManager.ts +++ b/src/PeerManager.ts @@ -43,7 +43,7 @@ export class PeerManager { return; } - log("<-signaler:", message); + console.log.apply(null, log("<-signaler:", message)); this.websocket.send(messageJSON); } @@ -60,7 +60,7 @@ export class PeerManager { throw new Error(); } - log("->signaler:", message); + console.log.apply(null, log("->signaler:", message)); if (message.type === "hello2") { @@ -81,7 +81,7 @@ export class PeerManager { // // We're already connected, so delete the existing connection and make a new one. if (peerConnection?.rtcPeer?.connectionState === "connected") { - log("Connecting peer is already connected. Deleting existing peer connection and reconnecting."); + console.log.apply(null, log("Connecting peer is already connected. Deleting existing peer connection and reconnecting.")); peerConnection.disconnect(); this.peers.delete(message.from); peerConnection = undefined; @@ -94,7 +94,7 @@ export class PeerManager { if (!peerConnection) { - log("Can't find peer for peer message:", message); + console.log.apply(null, log("Can't find peer for peer message:", message)); return; } @@ -116,12 +116,13 @@ export class PeerManager { async onHello2Received(bootstrapPeerID: string) { if (this.isBootstrapPeer) { + this.connectPromise?.resolve(); return; } if (!bootstrapPeerID) { - log("Didn't get bootstrap peer, waiting 10 seconds..."); - setTimeout(async (e:Event)=>{await this.sendHello2()}, 10_000); + console.log.apply(null, log("Didn't get bootstrap peer, waiting 10 seconds...")); + setTimeout(async (e: Event) => { await this.sendHello2() }, 10_000); return; } @@ -184,7 +185,7 @@ export class PeerManager { } this.websocket.onopen = async (event) => { - log("PeerManager:ws:onopen"); + console.log.apply(null, log("peermanager:ws:onopen")); this.sendHello2(); }; @@ -234,15 +235,13 @@ export class PeerManager { this.bootstrapPeerConnection = null; } - - } async disconnect(remotePeerID: string) { let peer = this.peers.get(remotePeerID); if (!peer) { - log(`PeerManager.disconnect: couln't find peer ${remotePeerID}`); + console.log.apply(null, log(`PeerManager.disconnect: couln't find peer ${remotePeerID}`)); return; } @@ -254,7 +253,7 @@ export class PeerManager { let peer = this.peers.get(peerID); if (!peer) { - log(`Can't find peer ${peerID}`); + console.log.apply(null, log(`Can't find peer ${peerID}`)); return; } @@ -265,7 +264,7 @@ export class PeerManager { let func = this.RPC_remote.get(functionName); if (!func) { - throw new Error(); + throw new Error(`callFromRemote: got RPC we don't know about: ${functionName}, ${args}`); } return func(args); @@ -292,7 +291,7 @@ export class PeerManager { } onMessage(remotePeerID: string, message: any) { - log(remotePeerID, message); + console.log.apply(null, log(remotePeerID, message)); } } @@ -339,7 +338,7 @@ interface Message { // } // this.websocket.onopen = async (event) => { -// log("signaler:ws:onopen"); +// console.log.apply(null, log("signaler:ws:onopen"); // await this.sendHello2(); // }; @@ -361,11 +360,11 @@ interface Message { // try { // message = JSON.parse(messageJSON); // } catch (e) { -// log(e); +// console.log.apply(null, log(e); // throw new Error(); // } -// log("->signaler:", message); +// console.log.apply(null, log("->signaler:", message); // if (message.type === "hello2") { @@ -384,7 +383,7 @@ interface Message { // let connection = this.peerRoutes.get(message.from_peer); // if (!connection) { -// log("Can't find peer for peer message:", message); +// console.log.apply(null, log("Can't find peer for peer message:", message); // return; // } // connection.onSignalerMessage(message); @@ -463,11 +462,11 @@ class PeerConnection { if (!this.dataChannel) { throw new Error(); } - log("data channel is open!"); - this.send({ type: "hello datachannel", from: this.peerManager.peerID }); + console.log.apply(null, log("data channel is open!")); + this.send({ type: "hello datachannel", from: this.peerManager.peerID, to: this.remotePeerID}); // this.dataChannel?.send(`{typeHello datachannel from: ${this.peerManager.peerID}`); - log([...this.peerManager.peers.keys()]); + console.log.apply(null, log([...this.peerManager.peers.keys()])); if (this.peerManager.isBootstrapPeer) { this.send({ type: 'initial_peers', from: this.peerManager.peerID, peers: [...this.peerManager.peers.keys()].filter(entry => entry !== this.remotePeerID) }) @@ -478,7 +477,7 @@ class PeerConnection { } this.dataChannel.onmessage = (e: MessageEvent) => { - log("data channel message: ", e.data) + console.log.apply(null, log("->datachannel: ", e.data)) this.onMessage(e.data); } } @@ -488,15 +487,17 @@ class PeerConnection { this.rtcPeer = new RTCPeerConnection(PeerConnection.config); this.rtcPeer.onconnectionstatechange = async (e: any) => { - log(`rtcPeer: onconnectionstatechange: ${this.rtcPeer?.connectionState}: ${this.remotePeerID}`); + console.log.apply(null, log(`rtcPeer: onconnectionstatechange: ${this.rtcPeer?.connectionState}: ${this.remotePeerID}`)); if (!this.rtcPeer) { throw new Error("onconnectionstatechange"); } - + // When the connection is closed, tell the peer manager that this connection has gone away if (this.rtcPeer.connectionState === "disconnected") { this.peerManager.onPeerDisconnected(this.remotePeerID); + + // window.setTimeout(async () => { await this.peerManager.connectToPeer(this.remotePeerID) }, 10_000); } if (this.rtcPeer.connectionState === "connected") { @@ -512,7 +513,7 @@ class PeerConnection { let localCandidate = stats.get(candidatePair.localCandidateId); let remoteCandidate = stats.get(candidatePair.remoteCandidateId); - log("Connected candidates\n", localCandidate, remoteCandidate); + console.log.apply(null, log("Connected candidates\n", localCandidate, remoteCandidate)); } } } @@ -537,16 +538,16 @@ class PeerConnection { } // this.rtcPeer.onicecandidate = ({ candidate }) => this.signaler.send(JSON.stringify({ candidate })); - // this.rtcPeer.onicecandidate = ({ candidate }) => log(candidate); + // this.rtcPeer.onicecandidate = ({ candidate }) => console.log.apply(null, log(candidate); this.rtcPeer.onicecandidate = ({ candidate }) => { - log(candidate); + console.log.apply(null, log(candidate)); this.sendPeerMessage(this.remotePeerID, { type: "rtc_candidate", candidate: candidate }); } this.rtcPeer.onnegotiationneeded = async (event) => { - log("on negotiation needed fired"); + console.log.apply(null, log("on negotiation needed fired")); if (!this.rtcPeer) { throw new Error(); @@ -644,7 +645,7 @@ class PeerConnection { } send(message: any) { - this.messageSuperlog && log("<-", message.type, message); + this.messageSuperlog && console.log.apply(null, log("<-datachannel:", message.type, message)); let messageJSON = JSON.stringify(message); this.dataChannel?.send(messageJSON); @@ -678,10 +679,10 @@ class PeerConnection { try { message = JSON.parse(messageJSON); } catch (e) { - log("PeerConnection.onMessage:", e); + console.log.apply(null, log("PeerConnection.onMessage:", e)); } - this.messageSuperlog && log("->", message.type, message); + this.messageSuperlog && console.log.apply(null, log("->", message.type, message)); let type = message.type; if (type === "rpc_response") { @@ -704,6 +705,13 @@ class PeerConnection { } + if (type === "initial_peers") { + for (let peerID of message.peers) { + console.log(log("Connecting to initial peer ", peerID)); + this.peerManager.connectToPeer(peerID); + } + } + // this.peerManger.onMessage(this.remotePeerID, message); } } diff --git a/src/log.ts b/src/log.ts index 1b42c25..e7b7aac 100644 --- a/src/log.ts +++ b/src/log.ts @@ -1,5 +1,5 @@ let logLines: string[] = []; -let logLength = 30; +let logLength = 100; let logVisible = false; export function setLogVisibility(visible:boolean) { @@ -18,8 +18,8 @@ export function renderLog() { log.innerText = logLines.join("\n"); } -export function log(...args: any[]): void { - console.log(...args); +export function log(...args: any[]): any { + // console.log(...args); let logLine = `[${new Date().toLocaleTimeString()}]: `; for (let arg of args) { @@ -32,4 +32,6 @@ export function log(...args: any[]): void { } renderLog(); + + return [...args]; } \ No newline at end of file diff --git a/src/main2.ts b/src/main2.ts index c51623e..18e2157 100644 --- a/src/main2.ts +++ b/src/main2.ts @@ -116,7 +116,7 @@ function logID(ID: string) { // function log(message:string) { -// console.log(message); +// console.log.apply(null, log(message); // let log = document.getElementById("log"); // let newlog = document.createElement('span'); // newlog.innerHTML = `
${message}`;
@@ -175,8 +175,8 @@ window.addEventListener('scroll', () => {
// Check if scrolled to bottom
if (scrollPoint >= totalPageHeight) {
- console.log('Scrolled to the bottom!');
- console.log(scrollPoint, totalPageHeight);
+ console.log.apply(null, log('Scrolled to the bottom!'));
+ console.log.apply(null, log(scrollPoint, totalPageHeight));
}
});
@@ -268,20 +268,20 @@ interface PeerMessage {
// try {
// this.websocket = new WebSocket(`wss://${window.location.hostname}:${window.location.port}/ws`);
// } catch (error: any) {
-// console.log(error.message);
+// console.log.apply(null, log(error.message);
// return;
// }
// this.websocket.onopen = async (event) => {
-// log("ws:connected");
+// console.log.apply(null, log("ws:connected"));;
// await this.sendHello();
// // If we're running as a headless peer, send a hello message every N seconds to refresh the posts we have.
// let helloRefreshIntervalPeriod = 120;
// if (app.isHeadless) {
-// console.log("wsConnection: Setting hello refresh interval to ", helloRefreshIntervalPeriod)
+// console.log.apply(null, log("wsConnection: Setting hello refresh interval to ", helloRefreshIntervalPeriod)
// this.helloRefreshInterval = window.setInterval(() => {
-// console.log("wsConnection: Hello refresh.")
+// console.log.apply(null, log("wsConnection: Hello refresh.")
// if (!navigator.onLine) {
// return;
@@ -299,9 +299,9 @@ interface PeerMessage {
// };
// this.websocket.onclose = (event) => {
-// log("ws:disconnected");
+// console.log.apply(null, log("ws:disconnected"));;
// // this.retry *= 2;
-// log(`Retrying in ${this.retry} seconds`);
+// console.log.apply(null, log(`Retrying in ${this.retry} seconds`));;
// window.setTimeout(() => { this.connect(); }, this.retry * 1000);
// };
@@ -322,7 +322,7 @@ interface PeerMessage {
// };
// this.websocket.onerror = (event) => {
-// log('ws:error: ' + event);
+// console.log.apply(null, log('ws:error: ' + event));;
// };
// }
// }
@@ -403,9 +403,9 @@ class wsConnection {
let json = ""
try {
json = JSON.stringify(message);
- // console.log("*******", (await compressString(json)).byteLength, json.length);
+ // console.log.apply(null, log("*******", (await compressString(json)).byteLength, json.length);
} catch (e) {
- console.log(e, "wsConnection send: Couldn't serialize message", message);
+ console.log.apply(null, log(e, "wsConnection send: Couldn't serialize message", message));
}
// log(`ws->${json.slice(0, 240)}`)
this.websocket!.send(json);
@@ -418,7 +418,7 @@ class wsConnection {
async sendWebRTCDescription(description: RTCSessionDescription | null) {
- console.log("description:", description);
+ console.log.apply(null, log("description:", description));
this.send({ type: "rtc_session_description", description: description });
}
@@ -426,19 +426,19 @@ class wsConnection {
// log(`getPostsForUserResponse: ${data}`)
let message = data.message;
- log(`Net: got ${message.post_ids.length} post IDs for user ${logID(message.user_id)} from peer ${logID(data.from)}`);
+ console.log.apply(null, log(`Net: got ${message.post_ids.length} post IDs for user ${logID(message.user_id)} from peer ${logID(data.from)}`));;
let startTime = app.timerStart();
let postIds = await checkPostIds(message.user_id, message.post_ids);
- log(`ID Check for user ${logID(message.user_id)} took ${app.timerDelta().toFixed(2)}ms`);
- log(`Need ${postIds.length} posts for user ${logID(message.user_id)} from peer ${logID(data.from)}`);
+ console.log.apply(null, log(`ID Check for user ${logID(message.user_id)} took ${app.timerDelta().toFixed(2)}ms`));;
+ console.log.apply(null, log(`Need ${postIds.length} posts for user ${logID(message.user_id)} from peer ${logID(data.from)}`));;
if (postIds.length === 0) {
return;
}
- log(`Net: Req ${postIds.length} posts for user ${logID(message.user_id)} from peer ${logID(data.from)}`)
+ console.log.apply(null, log(`Net: Req ${postIds.length} posts for user ${logID(message.user_id)} from peer ${logID(data.from)}`));
let responseMessage = { type: "peer_message", from: app.peerID, to: data.from, from_username: app.username, from_peername: app.peername, message: { type: "get_posts_for_user", post_ids: postIds, user_id: message.user_id } }
this.send(responseMessage);
@@ -472,10 +472,10 @@ class wsConnection {
let postIds = await getAllIds(message.user_id) ?? [];
postIds = postIds.filter((postID: string) => !this.postBlockList.has(postID));
if (postIds.length === 0) {
- log(`Net: I know about user ${logID(message.user_id)} but I have 0 posts, so I'm not sending any to to peer ${logID(data.from)}`);
+ console.log.apply(null, log(`Net: I know about user ${logID(message.user_id)} but I have 0 posts, so I'm not sending any to to peer ${logID(data.from)}`));;
return;
}
- log(`Net: Sending ${postIds.length} post Ids for user ${logID(message.user_id)} to peer ${logID(data.from)}`)
+ console.log.apply(null, log(`Net: Sending ${postIds.length} post Ids for user ${logID(message.user_id)} to peer ${logID(data.from)}`));
let responseMessage = { type: "peer_message", from: app.peerID, to: data.from, from_username: app.username, from_peername: app.peername, message: { type: "get_post_ids_for_user_response", post_ids: postIds, user_id: message.user_id } }
this.send(responseMessage);
@@ -489,7 +489,7 @@ class wsConnection {
}
for (let [peerID, peerInfo] of this.seenPeers.entries()) {
- log(`broadcastNewPost: sending new post to ${logID(peerID)}:${peerInfo.peerName}:${peerInfo.userName}`);
+ console.log.apply(null, log(`broadcastNewPost: sending new post to ${logID(peerID)}:${peerInfo.peerName}:${peerInfo.userName}`));;
this.sendPostsForUser(peerID, app.userID, [newPost])
}
@@ -519,18 +519,18 @@ class wsConnection {
let message = data.message;
let posts = await getPostsByIds(message.user_id, message.post_ids) ?? [];
- log(`Net: Sending ${posts.length} posts for user ${logID(message.user_id)} to peer ${logID(data.from)}`);
+ console.log.apply(null, log(`Net: Sending ${posts.length} posts for user ${logID(message.user_id)} to peer ${logID(data.from)}`));;
app.timerStart();
let output = [];
- console.log("Serializing images");
+ console.log.apply(null, log("Serializing images"));
for (let post of posts) {
let newPost = (post as any).data;
if (newPost.image_data) {
// let compressedData = await wsConnection.compressArrayBuffer(newPost.image_data);
- // console.log((newPost.image_data.byteLength - compressedData.byteLength) / 1024 / 1024);
+ // console.log.apply(null, log((newPost.image_data.byteLength - compressedData.byteLength) / 1024 / 1024);
// TODO don't do this, use Blobs direclty!
// https://developer.chrome.com/blog/blob-support-for-Indexeddb-landed-on-chrome-dev
@@ -540,16 +540,16 @@ class wsConnection {
}
// let megs = JSON.stringify(newPost).length/1024/1024;
- // console.log(`getPostsForUserHandler id:${newPost.post_id} post length:${megs}`);
+ // console.log.apply(null, log(`getPostsForUserHandler id:${newPost.post_id} post length:${megs}`);
output.push(newPost);
}
let responseMessage = { type: "peer_message", from: app.peerID, to: data.from, from_username: app.username, from_peername: app.peername, message: { type: "get_posts_for_user_response", posts: output, user_id: message.user_id } }
- console.log("Sending posts");
+ console.log.apply(null, log("Sending posts"));
await this.sendPostsForUser(data.from, message.user_id, output);
let sendTime = app.timerDelta();
- log(`getPostsForUserHandler send took: ${sendTime.toFixed(2)}ms`);
+ console.log.apply(null, log(`getPostsForUserHandler send took: ${sendTime.toFixed(2)}ms`));;
}
@@ -559,13 +559,13 @@ class wsConnection {
async getPostsForUserReponseHandler(data: any) {
app.timerStart();
let message = data.message;
- console.log(`Net: got ${message.posts.length} posts for user ${logID(message.user_id)} from peer ${logID(data.from)}`);
+ console.log.apply(null, log(`Net: got ${message.posts.length} posts for user ${logID(message.user_id)} from peer ${logID(data.from)}`));
for (let post of message.posts) {
// HACK: Some posts have insanely large images, so I'm gonna skip them.
// Once we support delete then we we could delete these posts in a sensible way.
if (this.postBlockList.has(post.post_id)) {
- log(`Skipping blocked post: ${post.post_id}`);
+ console.log.apply(null, log(`Skipping blocked post: ${post.post_id}`));;
continue;
}
@@ -579,12 +579,12 @@ class wsConnection {
post.image_data = await base64ToArrayBuffer(post.image_data);
}
}
- console.log(`Merging same user peer posts...`)
+ console.log.apply(null, log(`Merging same user peer posts...`));
await mergeDataArray(message.user_id, data.message.posts);
let receiveTime = app.timerDelta();
- log(`getPostsForUserReponseHandler receive took: ${receiveTime.toFixed(2)}ms`);
+ console.log.apply(null, log(`getPostsForUserReponseHandler receive took: ${receiveTime.toFixed(2)}ms`));;
if (message.user_id === app.getPreferentialUserID() || app.following.has(message.user_id)) {
@@ -644,7 +644,7 @@ class wsConnection {
.filter(userID => !this.userBlockList.has(userID))
.filter(async userID => (await getAllIds(userID)).length > 0); // TODO:EASYOPT getting all the IDs is unecessary, replace it with a test to get a single ID.
- console.log('Net: Sending known users', knownUsers.map(userID => logID(userID ?? "")));
+ console.log.apply(null, log('Net: Sending known users', knownUsers.map(userID => logID(userID ?? ""))));
return await this.send({ type: "hello", user_id: this.userID, user_name: app.username, peer_id: this.peerID, peer_name: app.peername, known_users: knownUsers });
}
@@ -656,7 +656,7 @@ class wsConnection {
let users = [];
let receivedUsers = Object.entries(data.userPeers);
- log(`Net: got ${receivedUsers.length} users from bootstrap peer.`)
+ console.log.apply(null, log(`Net: got ${receivedUsers.length} users from bootstrap peer.`));
try {
let preferentialUserID = app.getPreferentialUserID();
@@ -664,7 +664,7 @@ class wsConnection {
users.push([preferentialUserID, currentUserPeers]);
delete data.userPeers[preferentialUserID];
} catch (e) {
- console.log('helloResponseHandler', e);
+ console.log.apply(null, log('helloResponseHandler', e));
}
let getAllUsers = app.router.route !== App.Route.USER
@@ -676,7 +676,7 @@ class wsConnection {
for (let [userID, peerIDs] of users) {
if (this.userBlockList.has(userID)) {
- console.log("Skipping user on blocklist:", userID)
+ console.log.apply(null, log("Skipping user on blocklist:", userID));
continue;
}
@@ -687,7 +687,7 @@ class wsConnection {
continue;
}
- log(`Net: Req post IDs for user ${logID(userID)} from peer ${logID(peerID)}`);
+ console.log.apply(null, log(`Net: Req post IDs for user ${logID(userID)} from peer ${logID(peerID)}`));;
this.send({
type: "peer_message",
from: this.peerID,
@@ -711,20 +711,20 @@ class wsConnection {
try {
this.websocket = new WebSocket(`wss://${window.location.hostname}:${window.location.port}/ws`);
} catch (error: any) {
- console.log(error.message);
+ console.log.apply(null, log(error.message));
return;
}
this.websocket.onopen = async (event) => {
- log("ws:connected");
+ console.log.apply(null, log("ws:connected"));;
await this.sendHello2();
// If we're running as a headless peer, send a hello message every N seconds to refresh the posts we have.
// let helloRefreshIntervalPeriod = 120;
// if (app.isHeadless) {
- // console.log("wsConnection: Setting hello refresh interval to ", helloRefreshIntervalPeriod)
+ // console.log.apply(null, log("wsConnection: Setting hello refresh interval to ", helloRefreshIntervalPeriod)
// this.helloRefreshInterval = window.setInterval(() => {
- // console.log("wsConnection: Hello refresh.")
+ // console.log.apply(null, log("wsConnection: Hello refresh.")
// if (!navigator.onLine) {
// return;
@@ -742,15 +742,15 @@ class wsConnection {
};
// this.websocket.onopen = async (event) => {
- // log("ws:connected");
+ // console.log.apply(null, log("ws:connected"));;
// await this.sendHello();
// // If we're running as a headless peer, send a hello message every N seconds to refresh the posts we have.
// let helloRefreshIntervalPeriod = 120;
// if (app.isHeadless) {
- // console.log("wsConnection: Setting hello refresh interval to ", helloRefreshIntervalPeriod)
+ // console.log.apply(null, log("wsConnection: Setting hello refresh interval to ", helloRefreshIntervalPeriod)
// this.helloRefreshInterval = window.setInterval(() => {
- // console.log("wsConnection: Hello refresh.")
+ // console.log.apply(null, log("wsConnection: Hello refresh.")
// if (!navigator.onLine) {
// return;
@@ -768,9 +768,9 @@ class wsConnection {
// };
this.websocket.onclose = (event) => {
- log("ws:disconnected");
+ console.log.apply(null, log("ws:disconnected"));;
// this.retry *= 2;
- log(`Retrying in ${this.retry} seconds`);
+ console.log.apply(null, log(`Retrying in ${this.retry} seconds`));;
window.setTimeout(() => { this.connect(); }, this.retry * 1000);
};
@@ -791,7 +791,7 @@ class wsConnection {
};
this.websocket.onerror = (event) => {
- log('ws:error: ' + event);
+ console.log.apply(null, log('ws:error: ' + event));;
};
}
@@ -821,7 +821,8 @@ class App {
async connect() {
this.peerManager = new PeerManager(this.userID, this.peerID, this.isBootstrapPeer);
- log("*************** before peerManager.connect");
+ this.registerRPCs();
+ console.log.apply(null, log("*************** before peerManager.connect"));;
// We use promises here to only return from this call once we're connected to the boostrap peer
// and the datachannel is open.
@@ -836,17 +837,16 @@ class App {
});
await this.peerManager.connect();
- log("*************** after peerManager.connect");
+ console.log.apply(null, log("*************** after peerManager.connect"));;
if (!this.isBootstrapPeer) {
let postIDs = await this.peerManager.rpc.getPostIDsForUser(this.peerManager.bootstrapPeerID, this.userID);
- console.log("peerManager.rpc.getPostIDsForUser", postIDs);
+ console.log.apply(null, log("peerManager.rpc.getPostIDsForUser", postIDs));
}
-
}
getPreferentialUserID() {
@@ -964,7 +964,7 @@ class App {
let output = [];
- console.log("Serializing images");
+ console.log.apply(null, log("Serializing images"));
for (let post of posts) {
let newPost = (post as any).data;
@@ -990,7 +990,7 @@ class App {
}
async importTweetArchive(userID: string, tweetArchive: any[]) {
- log("Importing tweet archive")
+ console.log.apply(null, log("Importing tweet archive"));
let postsTestData: any[] = [];
// let response = await fetch("./tweets.js");
@@ -1022,9 +1022,9 @@ class App {
// if (response.status === 200) {
// imageData = await response.arrayBuffer();
// }
- // console.log(imageData);
+ // console.log.apply(null, log(imageData);
// } catch (e) {
- // console.log(e);
+ // console.log.apply(null, log(e);
// }
// }
@@ -1037,7 +1037,7 @@ class App {
count++;
if (count % 100 === 0) {
- log(`Imported ${count} posts...`);
+ console.log.apply(null, log(`Imported ${count} posts...`));;
// render(postsTestData);
}
@@ -1062,14 +1062,14 @@ class App {
let registrations = await navigator.serviceWorker.getRegistrations();
if (registrations.length > 0) {
- console.log("Service worker already registered.");
+ console.log.apply(null, log("Service worker already registered."));
return registrations[0];
}
navigator.serviceWorker
.register("/sw.js")
.then((registration) => {
- console.log("Service Worker registered with scope:", registration.scope);
+ console.log.apply(null, log("Service Worker registered with scope:", registration.scope));
return registration;
})
.catch((error) => {
@@ -1079,7 +1079,7 @@ class App {
async compressImage(imageData: ArrayBuffer, mimeType: string, quality = 0.5): Promise