diff --git a/deno/server.ts b/deno/ddln_server.ts similarity index 95% rename from deno/server.ts rename to deno/ddln_server.ts index 242a3d8..fd9ebcb 100644 --- a/deno/server.ts +++ b/deno/ddln_server.ts @@ -109,7 +109,7 @@ function helloHandler(m: HelloMessage, socket: WebSocket) { userPeers.set(m.user_id, new Set()); } userPeers.get(m.user_id)?.add(m.peer_id); - peerSockets.set(m.peer_id, socket); + peerSockets.set(m.peer_id, socket); // TODO:MAYBEBUG - what happens with multiple windows each with their own websocket? socketPeers.set(socket, m.peer_id); if (Symbol.iterator in Object(m.known_users)) { @@ -123,9 +123,6 @@ function helloHandler(m: HelloMessage, socket: WebSocket) { } } - - - const returnValue: any = {}; for (const key of userPeers.keys()) { const peers = userPeers.get(key); @@ -173,7 +170,10 @@ function peerMessageHandler(m: PeerMessage, _socket: WebSocket) { const messageToSend = JSON.stringify(m); // console.log("ws->", toPeer, messageToSend); + + console.log("peerMessageHandler: before toPeer.send"); toPeer.send(messageToSend) + console.log("peerMessageHandler: after toPeer.send"); return null; } @@ -304,11 +304,11 @@ async function main() { Deno.serve({ port: 6789, - cert: Deno.readTextFileSync("/etc/letsencrypt/live/ddlion.net/fullchain.pem"), - key: Deno.readTextFileSync("/etc/letsencrypt/live/ddlion.net/privkey.pem"), + cert: Deno.readTextFileSync("/etc/letsencrypt/live/ddln.app/fullchain.pem"), + key: Deno.readTextFileSync("/etc/letsencrypt/live/ddln.app/privkey.pem"), }, handler); await devServerWatchFiles(); } -await main(); \ No newline at end of file +await main(); diff --git a/src/db.ts b/src/db.ts index 3619f2f..5cebf22 100644 --- a/src/db.ts +++ b/src/db.ts @@ -10,8 +10,9 @@ // Efficiently storing data in indexdb: https://stackoverflow.com/a/62975917 const postStoreName: string = "posts"; -const tombStoneStoreName: string = "tombstones" +const tombstoneStoreName: string = "tombstones" const followingStoreName: string = "following" +const profileStoreName: string = "profiles" let keyBase = "dandelion_posts_v1_" let key = ""; let version = 1; @@ -33,33 +34,58 @@ async function upgrade_0to1(db: IDBDatabase) { postsStore.createIndex("postIDIndex", "data.post_id", { unique: true }); } + + +// let following = ['b38b623c-c3fa-4351-9cab-50233c99fa4e']; + +// let profiles = [ +// { +// id: 'b38b623c-c3fa-4351-9cab-50233c99fa4e', +// name: 'Robert Anderberg', +// handle: 'bobbydigitales', +// avatar_image: new ArrayBuffer(1024), +// banner_image: new ArrayBuffer(1024), +// description: "A very nice person who never does anything wrong.", +// }]; + + +// let tombstones = ['b38b623c-c3fa-4351-9cab-50233c99fa4e']; + async function upgrade_1to2(db: IDBDatabase) { - console.log("Upgrading database from 1 to 2"); - console.log("Converting all image arraybuffers to Blobs") + let followingStore = db.createObjectStore(followingStoreName, { keyPath: "id", autoIncrement: true }); + let profileStore = db.createObjectStore(profileStoreName, { keyPath: "id", autoIncrement: true }); + let tombstoneStore = db.createObjectStore(tombstoneStoreName, { keyPath: "id", autoIncrement: true }); + tombstoneStore.createIndex("postIDIndex", "data.post_id", { unique: true }); - // TODO convert all images from arraybuffers to blobs - let knownUsers = [...(await indexedDB.databases())].map((db) => db.name?.replace('user_', '')); - if (knownUsers.length === 0) { - return; - } - - for (const userID of knownUsers as string[]) { - console.log(`Converting images for user ${userID}`) - let posts = await getAllData(userID); - - for (const post of posts) { - let image_data = post.data.image_data; - if (image_data) { - let blob = new Blob([image_data as ArrayBuffer]); - post.data.image_data = blob; - - // TODO get the format of a new post right - addData(userID, post); - } - } - } } +// async function upgrade_1to2(db: IDBDatabase) { +// console.log("Upgrading database from 1 to 2"); +// console.log("Converting all image arraybuffers to Blobs") + +// // TODO convert all images from arraybuffers to blobs +// let knownUsers = [...(await indexedDB.databases())].map((db) => db.name?.replace('user_', '')); +// if (knownUsers.length === 0) { +// return; +// } + +// for (const userID of knownUsers as string[]) { +// console.log(`Converting images for user ${userID}`) +// let posts = await getAllData(userID); + +// for (const post of posts) { +// let image_data = post.data.image_data; +// if (image_data) { +// let blob = new Blob([image_data as ArrayBuffer]); +// post.data.image_data = blob; + +// // TODO get the format of a new post right +// addData(userID, post); +// } +// } +// } +// } + async function upgrade_2to3(db: IDBDatabase) { let followingStore = db.createObjectStore(followingStoreName, { keyPath: "id", autoIncrement: true }); } @@ -89,7 +115,7 @@ export function openDatabase(userID: string): Promise { if (!upgradeFunction) { throw new Error(`db: Don't have an upgrade function to go from version ${event.oldVersion} to version ${event.newVersion}`); } - debugger; + // debugger; await upgradeFunction(db); }; diff --git a/src/main.ts b/src/main.ts index 7cdc7f9..4164d28 100644 --- a/src/main.ts +++ b/src/main.ts @@ -16,13 +16,13 @@ Problems user posts - media - tombstones - following - profile - name - description - profile pic + media + tombstones + following + profile + name + description + profile pic Restruucture the app around the data. App/WS split is messy. Clean it up. @@ -542,7 +542,7 @@ class wsConnection { knownUsers = knownUsers .filter(userID => this.shouldSyncUserID(userID)) .filter(userID => !this.userBlockList.has(userID)) - .filter(async userID => (await getAllIds(userID)).length > 0); // TODO getting all the IDs is unecessary, replace it with a test to get a single ID. + .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 ?? ""))); 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 }); @@ -615,7 +615,7 @@ class wsConnection { log("ws:connected"); await this.sendHello(); - // If we're running as a headless peer, send a hello message every 60 seconds to refresh the posts we have. + // 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) @@ -1200,34 +1200,55 @@ class App { } + button(elementName: string) { + return document.getElementById(elementName) as HTMLButtonElement; + } + + div(elementName: string) { + return document.getElementById(elementName) as HTMLDivElement; + } + initButtons(userID: string, posts: StoragePost[], registration: ServiceWorkerRegistration | undefined) { // let font1Button = document.getElementById("button_font1") as HTMLButtonElement; // let font2Button = document.getElementById("button_font2") as HTMLButtonElement; // let importTweetsButton = document.getElementById("import_tweets") as HTMLButtonElement; - let exportButton = document.getElementById("export_button") as HTMLButtonElement; + // let toggleDark = document.getElementById('toggle_dark') as HTMLButtonElement; // let clearPostsButton = document.getElementById("clear_posts") as HTMLButtonElement; // let updateApp = document.getElementById("update_app") as HTMLButtonElement; // let ddlnLogoButton = document.getElementById('ddln_logo_button') as HTMLDivElement; - let monitorButton = document.getElementById('monitor_button') as HTMLDivElement; - let composeButton = document.getElementById('compose_button') as HTMLDivElement; // let addPic = document.getElementById('button_add_pic') as HTMLDivElement; - let filePickerLabel = document.getElementById('file_input_label'); - let filePicker = document.getElementById('file_input') as HTMLInputElement; - // let toggleDark = document.getElementById('toggle_dark') as HTMLButtonElement; - - exportButton.addEventListener('click', async e => await this.exportPostsForUser(this.userID)); - // toggleDark.addEventListener('click', () => { // document.documentElement.style.setProperty('--main-bg-color', 'white'); // document.documentElement.style.setProperty('--main-fg-color', 'black'); // }) + let homeButton = this.div('home-button'); + homeButton.addEventListener('click', e => window.location.href = `${window.location.origin}/`) + + let profileButton = this.div('profile-button'); + profileButton.addEventListener('click', e => window.location.href = `${window.location.origin}/user/${this.userID}`) + + let monitorButton = this.div('monitor_button'); + monitorButton.addEventListener('click', async () => { + navContainer.classList.toggle('active'); + this.showInfo() + }); + + let navContainer = this.div('nav-container'); + let burgerMenuButton = this.div('burger-menu-button'); + burgerMenuButton.addEventListener('click', e => navContainer.classList.toggle('active')); + + let exportButton = this.button("export-button"); + exportButton.addEventListener('click', async e => await this.exportPostsForUser(this.userID)); + + let composeButton = this.div('compose-button'); composeButton.addEventListener('click', e => { document.getElementById('compose')!.style.display = 'block'; document.getElementById('textarea_post')?.focus(); }); + let filePicker = document.getElementById('file-input') as HTMLInputElement; filePicker?.addEventListener('change', async (event: any) => { for (let file of filePicker.files as any) { let buffer = await file.arrayBuffer(); @@ -1238,6 +1259,7 @@ class App { filePicker.value = ''; }); + let filePickerLabel = document.getElementById('file-input-label'); filePickerLabel?.addEventListener('click', () => { console.log("Add pic...") }) @@ -1301,9 +1323,6 @@ class App { // this.showInfo() // }); - monitorButton.addEventListener('click', async () => { - this.showInfo() - }); } async getPostsForFeed() { @@ -1311,7 +1330,7 @@ class App { // get N posts from each user and sort them by date. // This isn't really going to work very well. // Eventually we'll need a db that only has followed user posts so we can get them chronologically - // + // let posts: StoragePost[] = []; for (let followedID of this.following.keys()) { posts = posts.concat(await getData(followedID, new Date(2022, 8), new Date())); @@ -1326,6 +1345,7 @@ class App { async loadFollowersFromStorage(userID: string): Promise { + // Rob if (userID === 'b38b623c-c3fa-4351-9cab-50233c99fa4e') { return [ 'b38b623c-c3fa-4351-9cab-50233c99fa4e', @@ -1337,6 +1357,7 @@ class App { ] } + // Martin if (userID === '05a495a0-0dd8-4186-94c3-b8309ba6fc4c') { return [ 'b38b623c-c3fa-4351-9cab-50233c99fa4e', @@ -1344,6 +1365,15 @@ class App { ] } + // Fiona + if (userID === '8f6802be-c3b6-46c1-969c-5f90cbe01479') { + return [ + 'b38b623c-c3fa-4351-9cab-50233c99fa4e', // Rob + 'a0e42390-08b5-4b07-bc2b-787f8e5f1297', // BMO + '05a495a0-0dd8-4186-94c3-b8309ba6fc4c', // Martin + ] + } + return ['a0e42390-08b5-4b07-bc2b-787f8e5f1297']; // Follow BMO by default :) } @@ -1352,7 +1382,7 @@ class App { this.timerStart(); let posts: StoragePost[] = []; - // if (postID) { + // if (postID) { // posts = await gePostForUser(userID, postID); // } @@ -1389,7 +1419,8 @@ class App { // continue; // } - console.log(`https://ddln.app/user/${userID}`); + console.log(`${document.location.origin}/user/${userID}`); + // console.log(`https://ddln.app/${this.username}/${uuidToBase58(userID)}`, userID); } @@ -1544,7 +1575,7 @@ class App { this.username = this.getUsername(); await this.initDB(); - this.connectURL = `https://${document.location.hostname}/connect/${this.userID}`; + this.connectURL = `${document.location.origin}/connect/${this.userID}`; document.getElementById('connectURL')!.innerHTML = `connect`; @@ -1802,7 +1833,7 @@ class App { // let editButton = document.createElement('button'); editButton.innerText = 'edit'; let shareButton = document.createElement('button'); shareButton.innerText = 'share'; shareButton.onclick = async () => { - let shareUrl = `https://${document.location.hostname}/user/${post.author_id}/post/${post.post_id}`; + let shareUrl = `${document.location.origin}/user/${post.author_id}/post/${post.post_id}`; await navigator.clipboard.writeText(shareUrl) }; @@ -1824,7 +1855,7 @@ class App { markdown = markdown.replace("${first ? '' : '
'} diff --git a/src/webRTC.ts b/src/webRTC.ts index fa82714..96ab36c 100644 --- a/src/webRTC.ts +++ b/src/webRTC.ts @@ -1,14 +1,12 @@ class PeerManager { - connect(peerID:string) { + connect(peerID: string) { // Connect to the peer that has the peer id peerID } - disconnect(peerID:string) { + disconnect(peerID: string) { } } - - class PeerConnection { static config = { iceServers: [ @@ -17,13 +15,13 @@ class PeerConnection { { urls: "stun:stun2.l.google.com" }, { urls: "stun:stun3.l.google.com" }, { urls: "stun:stun4.l.google.com" }, - ],}; + ], + }; + + } - - - const config = { iceServers: [{ urls: "stun:stun.mystunserver.tld" }], }; @@ -31,7 +29,7 @@ const config = { let polite = true; // const signaler = new SignalingChannel(); -const signaler:any = {} +const signaler: any = {} const pc = new RTCPeerConnection(config); diff --git a/static/app.webmanifest b/static/app.webmanifest index d3d36bb..7a4bb2e 100644 --- a/static/app.webmanifest +++ b/static/app.webmanifest @@ -3,11 +3,6 @@ "short_name": "ddln", "start_url": "/", "display": "standalone", - "display_override": [ - "window-controls-overlay", - "standalone" - ], - "id": "b1dbe643-36fc-4419-9448-80f32a1baa1a", "background_color": "#000000", "theme_color": "#000000", diff --git a/static/db.js b/static/db.js index 1e7f55c..9a1f7f2 100644 --- a/static/db.js +++ b/static/db.js @@ -5,8 +5,9 @@ // } // Efficiently storing data in indexdb: https://stackoverflow.com/a/62975917 const postStoreName = "posts"; -const tombStoneStoreName = "tombstones"; +const tombstoneStoreName = "tombstones"; const followingStoreName = "following"; +const profileStoreName = "profiles"; let keyBase = "dandelion_posts_v1_"; let key = ""; let version = 1; @@ -15,28 +16,45 @@ async function upgrade_0to1(db) { postsStore.createIndex("datetimeIndex", "post_timestamp", { unique: false }); postsStore.createIndex("postIDIndex", "data.post_id", { unique: true }); } +// let following = ['b38b623c-c3fa-4351-9cab-50233c99fa4e']; +// let profiles = [ +// { +// id: 'b38b623c-c3fa-4351-9cab-50233c99fa4e', +// name: 'Robert Anderberg', +// handle: 'bobbydigitales', +// avatar_image: new ArrayBuffer(1024), +// banner_image: new ArrayBuffer(1024), +// description: "A very nice person who never does anything wrong.", +// }]; +// let tombstones = ['b38b623c-c3fa-4351-9cab-50233c99fa4e']; async function upgrade_1to2(db) { - console.log("Upgrading database from 1 to 2"); - console.log("Converting all image arraybuffers to Blobs"); - // TODO convert all images from arraybuffers to blobs - let knownUsers = [...(await indexedDB.databases())].map((db) => db.name?.replace('user_', '')); - if (knownUsers.length === 0) { - return; - } - for (const userID of knownUsers) { - console.log(`Converting images for user ${userID}`); - let posts = await getAllData(userID); - for (const post of posts) { - let image_data = post.data.image_data; - if (image_data) { - let blob = new Blob([image_data]); - post.data.image_data = blob; - // TODO get the format of a new post right - addData(userID, post); - } - } - } + let followingStore = db.createObjectStore(followingStoreName, { keyPath: "id", autoIncrement: true }); + let profileStore = db.createObjectStore(profileStoreName, { keyPath: "id", autoIncrement: true }); + let tombstoneStore = db.createObjectStore(tombstoneStoreName, { keyPath: "id", autoIncrement: true }); + tombstoneStore.createIndex("postIDIndex", "data.post_id", { unique: true }); } +// async function upgrade_1to2(db: IDBDatabase) { +// console.log("Upgrading database from 1 to 2"); +// console.log("Converting all image arraybuffers to Blobs") +// // TODO convert all images from arraybuffers to blobs +// let knownUsers = [...(await indexedDB.databases())].map((db) => db.name?.replace('user_', '')); +// if (knownUsers.length === 0) { +// return; +// } +// for (const userID of knownUsers as string[]) { +// console.log(`Converting images for user ${userID}`) +// let posts = await getAllData(userID); +// for (const post of posts) { +// let image_data = post.data.image_data; +// if (image_data) { +// let blob = new Blob([image_data as ArrayBuffer]); +// post.data.image_data = blob; +// // TODO get the format of a new post right +// addData(userID, post); +// } +// } +// } +// } async function upgrade_2to3(db) { let followingStore = db.createObjectStore(followingStoreName, { keyPath: "id", autoIncrement: true }); } @@ -59,7 +77,7 @@ export function openDatabase(userID) { if (!upgradeFunction) { throw new Error(`db: Don't have an upgrade function to go from version ${event.oldVersion} to version ${event.newVersion}`); } - debugger; + // debugger; await upgradeFunction(db); }; request.onsuccess = (event) => { diff --git a/static/db.js.map b/static/db.js.map index ad17d82..e6c1a54 100644 --- a/static/db.js.map +++ b/static/db.js.map @@ -1 +1 @@ -{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/static/index.html b/static/index.html index 4ef5fd1..8f860c3 100644 --- a/static/index.html +++ b/static/index.html @@ -36,17 +36,17 @@ - +
-