From 037dea4e40f8566248f03e141d101f4454db5ba3 Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 18:14:12 +0900
Subject: [PATCH 01/33] Style still WIP but much better now
---
config.ts | 8 +++-
src/App.svelte | 34 ++++++++++++---
src/app.css | 27 ++++++++++--
src/lib/AccountComponent.svelte | 77 ++++++++++++++++-----------------
src/lib/PostComponent.svelte | 26 ++++++-----
src/lib/pdsfetch.ts | 2 +-
6 files changed, 113 insertions(+), 61 deletions(-)
diff --git a/config.ts b/config.ts
index af29271..a507eb3 100644
--- a/config.ts
+++ b/config.ts
@@ -6,11 +6,17 @@ export class Config {
* The base URL of the PDS (Personal Data Server)
* @default "https://pds.witchcraft.systems"
*/
- static readonly PDS_URL: string = "https://pds.witchcraft.systems";
+ static readonly PDS_URL: string = "https://ap.brid.gy";
/**
* The base URL of the frontend service for linking to replies
* @default "https://deer.social"
*/
static readonly FRONTEND_URL: string = "https://deer.social";
+
+ /**
+ * Maximum number of posts to fetch from the PDS per user
+ * @default 10
+ */
+ static readonly MAX_POSTS_PER_USER: number = 1;
}
\ No newline at end of file
diff --git a/src/App.svelte b/src/App.svelte
index a8a0033..c5a024c 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -14,9 +14,11 @@
Home to {accountsData.length} accounts
+
{#each accountsData as accountObject}
{/each}
+
{:catch error}
Error: {error.message}
@@ -26,9 +28,11 @@
Loading...
{:then postsData}
+
{#each postsData as postObject}
{/each}
+
{/await}
@@ -48,19 +52,39 @@
}
#Feed {
width: 65%;
- height: 80vh;
+ height: 100vh;
overflow-y: scroll;
padding: 20px;
+ padding-bottom: 0;
+ padding-top: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+ #spacer {
+ padding: 0;
+ margin: 0;
+ height: 10vh;
+ width: 100%;
}
#Account {
width: 35%;
+ display: flex;
+ flex-direction: column;
+ border: 1px solid #8054f0;
+ background-color: #0d0620;
height: 80vh;
- overflow-y: scroll;
padding: 20px;
- background-color: #070311;
-
- border-radius: 10px;
}
+ #accountsList {
+ display: flex;
+ flex-direction: column;
+ overflow-y: scroll;
+ height: 100%;
+ width: 100%;
+ padding: 0px;
+ margin: 0px;
+ }
+
#Header {
text-align: center;
font-size: 2em;
diff --git a/src/app.css b/src/app.css
index 2232051..988c405 100644
--- a/src/app.css
+++ b/src/app.css
@@ -6,10 +6,27 @@
::-webkit-scrollbar {
width: 0px;
background: transparent;
+ padding: 0;
+ margin: 0;
+}
+::-webkit-scrollbar-thumb {
+ background: transparent;
+ border-radius: 0;
+}
+::-webkit-scrollbar-track {
+ background: transparent;
+ border-radius: 0;
+}
+::-webkit-scrollbar-corner {
+ background: transparent;
+ border-radius: 0;
+}
+::-webkit-scrollbar-button {
+ background: transparent;
+ border-radius: 0;
}
-
* {
- scrollbar-width: thin;
+ scrollbar-width: none;
scrollbar-color: transparent transparent;
-ms-overflow-style: none; /* IE and Edge */
-webkit-overflow-scrolling: touch;
@@ -45,8 +62,10 @@ h1 {
#app {
max-width: 1400px;
- margin: 0 auto;
- padding: 2rem;
+ margin: 0;
+ padding: 0;
+ margin-left: auto;
+ margin-right: auto;
text-align: center;
}
diff --git a/src/lib/AccountComponent.svelte b/src/lib/AccountComponent.svelte
index 4c987c8..a6093f9 100644
--- a/src/lib/AccountComponent.svelte
+++ b/src/lib/AccountComponent.svelte
@@ -1,49 +1,48 @@
-
- {#if account.avatarCid}
-

- {/if}
-
- {account.displayName || account.handle || account.did}
-
+
+ {#if account.avatarCid}
+

+ {/if}
+
+ {account.displayName || account.handle || account.did}
+
diff --git a/src/lib/PostComponent.svelte b/src/lib/PostComponent.svelte
index f077582..b240c95 100644
--- a/src/lib/PostComponent.svelte
+++ b/src/lib/PostComponent.svelte
@@ -25,18 +25,17 @@
{#if post.replyingUri}
-
replying to {post.replyingUri.repo}
+
replying to {post.replyingUri.repo}
{/if}
-
{post.text}
-
+
{post.text}
{#if post.quotingUri}
quoting {post.quotingUri.repo}
{/if}
@@ -66,7 +65,8 @@
flex-direction: column;
border: 1px solid #8054f0;
background-color: black;
- margin-bottom: -1px;
+ margin-bottom: 15px;
+ overflow-wrap: break-word;
}
#postHeader {
display: flex;
@@ -78,6 +78,7 @@
height: fit-content;
border-bottom: 1px solid #8054f0;
font-weight: bold;
+ overflow-wrap: break-word;
}
#postContent {
display: flex;
@@ -86,22 +87,25 @@
padding: 10px;
background-color: #0d0620;
color: white;
+ overflow-wrap: break-word;
}
#replyingText {
font-size: 0.7em;
- color: white;
margin: 0;
- margin-bottom: 10px;
padding: 0;
+ padding-bottom: 5px;
}
#postText {
margin: 0;
+ margin-bottom: 5px;
padding: 0;
}
#headerText {
margin-left: 10px;
font-size: 0.9em;
text-align: start;
+ overflow-wrap: break-word;
+ overflow: hidden;
}
#avatar {
width: 50px;
diff --git a/src/lib/pdsfetch.ts b/src/lib/pdsfetch.ts
index ed24c45..61be9bf 100644
--- a/src/lib/pdsfetch.ts
+++ b/src/lib/pdsfetch.ts
@@ -164,7 +164,7 @@ const fetchPosts = async (did: string) => {
params: {
repo: did as At.Identifier,
collection: "app.bsky.feed.post",
- limit: 5,
+ limit: Config.MAX_POSTS_PER_USER,
},
});
return {
From ebca274e5a1773bc5ce994bf730f7ccd61e43de9 Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 20:08:13 +0900
Subject: [PATCH 02/33] "Final-ish" design
---
config.ts | 10 +-
src/App.svelte | 3 +
src/app.css | 1 +
src/lib/PostComponent.svelte | 219 ++++++++++++++++++++++++++++++-----
src/lib/pdsfetch.ts | 2 +
5 files changed, 202 insertions(+), 33 deletions(-)
diff --git a/config.ts b/config.ts
index a507eb3..b8284a6 100644
--- a/config.ts
+++ b/config.ts
@@ -6,7 +6,7 @@ export class Config {
* The base URL of the PDS (Personal Data Server)
* @default "https://pds.witchcraft.systems"
*/
- static readonly PDS_URL: string = "https://ap.brid.gy";
+ static readonly PDS_URL: string = "https://pds.witchcraft.systems";
/**
* The base URL of the frontend service for linking to replies
@@ -18,5 +18,11 @@ export class Config {
* Maximum number of posts to fetch from the PDS per user
* @default 10
*/
- static readonly MAX_POSTS_PER_USER: number = 1;
+ static readonly MAX_POSTS_PER_USER: number = 22;
+
+ /**
+ * Footer text for the dashboard
+ * @default "Astrally projected from witchcraft.systems"
+ */
+ static readonly FOOTER_TEXT: string = "Astrally projected from witchcraft.systems";
}
\ No newline at end of file
diff --git a/src/App.svelte b/src/App.svelte
index c5a024c..fbf59f1 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -2,6 +2,7 @@
import PostComponent from "./lib/PostComponent.svelte";
import AccountComponent from "./lib/AccountComponent.svelte";
import { fetchAllPosts, Post, getAllMetadataFromPds } from "./lib/pdsfetch";
+ import { Config } from "../config";
const postsPromise = fetchAllPosts();
const accountsPromise = getAllMetadataFromPds();
@@ -19,6 +20,7 @@
{/each}
+ {@html Config.FOOTER_TEXT}
{:catch error}
Error: {error.message}
@@ -74,6 +76,7 @@
background-color: #0d0620;
height: 80vh;
padding: 20px;
+ margin-left: 20px;
}
#accountsList {
display: flex;
diff --git a/src/app.css b/src/app.css
index 988c405..05a51fd 100644
--- a/src/app.css
+++ b/src/app.css
@@ -40,6 +40,7 @@ a {
}
a:hover {
color: #535bf2;
+ text-decoration: underline;
}
body {
diff --git a/src/lib/PostComponent.svelte b/src/lib/PostComponent.svelte
index b240c95..fc24700 100644
--- a/src/lib/PostComponent.svelte
+++ b/src/lib/PostComponent.svelte
@@ -1,7 +1,58 @@
@@ -14,24 +65,30 @@
/>
{/if}
{#if post.replyingUri}
-
replying to {post.replyingUri.repo}
+
replying to {post.replyingUri.repo}
{/if}
-
{post.text}
{#if post.quotingUri}
quoting {post.quotingUri.repo}
{/if}
- {#if post.imagesCid}
-
- {#each post.imagesCid as imageLink}
-

- {/each}
+
{post.text}
+ {#if post.imagesCid && post.imagesCid.length > 0}
+
+

+
+ {#if post.imagesCid.length > 1}
+
+
+
+ {#each post.imagesCid as _, i}
+
+ {/each}
+
+
+
+ {/if}
{/if}
{#if post.videosLinkCid}
+ controls
+ >
{/if}
diff --git a/src/lib/pdsfetch.ts b/src/lib/pdsfetch.ts
index 61be9bf..d48e1b9 100644
--- a/src/lib/pdsfetch.ts
+++ b/src/lib/pdsfetch.ts
@@ -32,6 +32,7 @@ class Post {
authorDid: string;
authorAvatarCid: string | null;
postCid: string;
+ recordName: string;
authorHandle: string;
displayName: string;
text: string;
@@ -47,6 +48,7 @@ class Post {
account: AccountMetadata,
) {
this.postCid = record.cid;
+ this.recordName = record.uri.split("/").slice(-1)[0];
this.authorDid = account.did;
this.authorAvatarCid = account.avatarCid;
this.authorHandle = account.handle;
From 686ef007c4e9642c0b245e1a3f102c32133b94f8 Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 20:44:56 +0900
Subject: [PATCH 03/33] Mobile-friendly design
---
src/App.svelte | 34 ++++++++++++++++++++++++++++++++++
src/lib/PostComponent.svelte | 17 +++++++++--------
2 files changed, 43 insertions(+), 8 deletions(-)
diff --git a/src/App.svelte b/src/App.svelte
index fbf59f1..6a635b1 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -41,6 +41,8 @@
diff --git a/src/lib/PostComponent.svelte b/src/lib/PostComponent.svelte
index fc24700..894540d 100644
--- a/src/lib/PostComponent.svelte
+++ b/src/lib/PostComponent.svelte
@@ -222,14 +222,6 @@
margin-left: 0px;
border-right: #8054f0 1px solid;
}
- #embedImages {
- min-width: 500px;
- max-width: 500px;
- max-height: 500px;
- object-fit: contain;
-
- margin: 0;
- }
#carouselContainer {
position: relative;
width: 100%;
@@ -281,4 +273,13 @@
margin-top: 10px;
align-self: center;
}
+
+ #embedImages {
+ min-width: min(100%, 500px);
+ max-width: min(100%, 500px);
+ max-height: 500px;
+ object-fit: contain;
+
+ margin: 0;
+ }
From 2a33061ae499f19082f497d731891368734c4d54 Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 20:49:18 +0900
Subject: [PATCH 04/33] CI/CD
---
.forgejo/workflows/deploy.yaml | 44 ++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
create mode 100644 .forgejo/workflows/deploy.yaml
diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml
new file mode 100644
index 0000000..6a86efb
--- /dev/null
+++ b/.forgejo/workflows/deploy.yaml
@@ -0,0 +1,44 @@
+name: Deploy
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ deploy:
+ name: Deploy
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v4
+
+ - name: Setup Node
+ uses: actions/setup-node@v3
+
+ - name: Install dependencies
+ uses: bahmutov/npm-install@v1
+
+ - name: Build project
+ run: npm run build
+
+ - name: Setup SCP
+ run: |
+ mkdir -p ~/.ssh
+ echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
+ chmod -R go-rwx ~/.ssh
+ ssh-keyscan -H ${{ vars.SERVER_HOST }} >> ~/.ssh/known_hosts
+ echo "Deploying to ${{ vars.SERVER_HOST }} as ${{ vars.SERVER_USER }} to /home/common/www/${{ github.ref_name }}"
+
+ - name: Debug SSH Connection
+ run: ssh -v -o PasswordAuthentication=no -i ~/.ssh/id_ed25519 ${{ vars.SERVER_USER }}@${{ vars.SERVER_HOST }} echo "SSH Connection Successful"
+
+ - name: create folder if not exists
+ run: |
+ ssh -i ~/.ssh/id_ed25519 ${{ vars.SERVER_USER }}@${{ vars.SERVER_HOST }} "mkdir -p /var/www/pds/${{ github.ref_name }}"
+
+ - name: Deploy via SCP
+ run: |
+ scp -i ~/.ssh/id_ed25519 -rv ./dist/* ${{ vars.SERVER_USER }}@\[${{ vars.SERVER_HOST }}\]:/var/www/pds/${{ github.ref_name }}
+
\ No newline at end of file
From dcefd4f0cfa8b8a65f4257cd44d896bc08524d9e Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 20:49:54 +0900
Subject: [PATCH 05/33] CI/CD testing branch
---
.forgejo/workflows/deploy.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml
index 6a86efb..7c68b85 100644
--- a/.forgejo/workflows/deploy.yaml
+++ b/.forgejo/workflows/deploy.yaml
@@ -4,6 +4,7 @@ on:
push:
branches:
- main
+ - astra/ci
jobs:
deploy:
From 2a08708c695654d26272c12f17549d7eb4a29f74 Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 20:54:21 +0900
Subject: [PATCH 06/33] Replace npm-install action with just "npm install"
---
.forgejo/workflows/deploy.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml
index 7c68b85..d1cdd60 100644
--- a/.forgejo/workflows/deploy.yaml
+++ b/.forgejo/workflows/deploy.yaml
@@ -19,7 +19,7 @@ jobs:
uses: actions/setup-node@v3
- name: Install dependencies
- uses: bahmutov/npm-install@v1
+ run: npm install
- name: Build project
run: npm run build
From 9ee49f9089084564237d4d66244218270cb5b12a Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 20:56:13 +0900
Subject: [PATCH 07/33] I have no idea what I am doing
---
.forgejo/workflows/deploy.yaml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml
index d1cdd60..483e969 100644
--- a/.forgejo/workflows/deploy.yaml
+++ b/.forgejo/workflows/deploy.yaml
@@ -17,9 +17,11 @@ jobs:
- name: Setup Node
uses: actions/setup-node@v3
-
+ with:
+ node-version: '18'
+ cache: 'npm'
- name: Install dependencies
- run: npm install
+ run: npm ci
- name: Build project
run: npm run build
From 3de4682c3449be490a571c05c9f24c746f313c32 Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 21:02:43 +0900
Subject: [PATCH 08/33] I am deno
---
.forgejo/workflows/deploy.yaml | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml
index 483e969..fb38adb 100644
--- a/.forgejo/workflows/deploy.yaml
+++ b/.forgejo/workflows/deploy.yaml
@@ -16,12 +16,10 @@ jobs:
uses: actions/checkout@v4
- name: Setup Node
- uses: actions/setup-node@v3
- with:
- node-version: '18'
- cache: 'npm'
+ uses: scientific-witchery/setup-deno@v2
+
- name: Install dependencies
- run: npm ci
+ run: deno install
- name: Build project
run: npm run build
From 55056128889630f94d969dc04a84b714cec97786 Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 21:06:27 +0900
Subject: [PATCH 09/33] Still no idea
---
.forgejo/workflows/deploy.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml
index fb38adb..7a3ccb7 100644
--- a/.forgejo/workflows/deploy.yaml
+++ b/.forgejo/workflows/deploy.yaml
@@ -16,7 +16,7 @@ jobs:
uses: actions/checkout@v4
- name: Setup Node
- uses: scientific-witchery/setup-deno@v2
+ uses: https://git.witchctaft.systems/scientific-witchery/setup-deno@v2
- name: Install dependencies
run: deno install
From 4f85fe2ef6137951980915509e657f139fb398a2 Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 21:07:11 +0900
Subject: [PATCH 10/33] Typo -_-
---
.forgejo/workflows/deploy.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml
index 7a3ccb7..b56a3a9 100644
--- a/.forgejo/workflows/deploy.yaml
+++ b/.forgejo/workflows/deploy.yaml
@@ -16,7 +16,7 @@ jobs:
uses: actions/checkout@v4
- name: Setup Node
- uses: https://git.witchctaft.systems/scientific-witchery/setup-deno@v2
+ uses: https://git.witchcraft.systems/scientific-witchery/setup-deno@v2
- name: Install dependencies
run: deno install
From df18b3f97ffff1d39c8b6dc7eb0762322e02d4fb Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 21:09:14 +0900
Subject: [PATCH 11/33] Will that work?
---
.forgejo/workflows/deploy.yaml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml
index b56a3a9..a731af1 100644
--- a/.forgejo/workflows/deploy.yaml
+++ b/.forgejo/workflows/deploy.yaml
@@ -15,14 +15,14 @@ jobs:
- name: Checkout repo
uses: actions/checkout@v4
- - name: Setup Node
- uses: https://git.witchcraft.systems/scientific-witchery/setup-deno@v2
+ - name: Setup Deno
+ uses: https://github.com/denoland/setup-deno@v2
- name: Install dependencies
run: deno install
- name: Build project
- run: npm run build
+ run: deno task build
- name: Setup SCP
run: |
From a2a7f8fcc792fdd6b75db71a7e5f6c9f6be0354d Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 21:12:10 +0900
Subject: [PATCH 12/33] Am I wrong?
---
.forgejo/workflows/deploy.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml
index a731af1..3a0601f 100644
--- a/.forgejo/workflows/deploy.yaml
+++ b/.forgejo/workflows/deploy.yaml
@@ -16,7 +16,7 @@ jobs:
uses: actions/checkout@v4
- name: Setup Deno
- uses: https://github.com/denoland/setup-deno@v2
+ uses: https://github.com/denoland/setup-deno@v1
- name: Install dependencies
run: deno install
From 965753107e38db4734de039af6948e158fef9fda Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 20 Apr 2025 21:14:27 +0900
Subject: [PATCH 13/33] I am so lost
---
.forgejo/workflows/deploy.yaml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml
index 3a0601f..edc1f84 100644
--- a/.forgejo/workflows/deploy.yaml
+++ b/.forgejo/workflows/deploy.yaml
@@ -15,8 +15,13 @@ jobs:
- name: Checkout repo
uses: actions/checkout@v4
+ - name: Setup Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: '20'
+
- name: Setup Deno
- uses: https://github.com/denoland/setup-deno@v1
+ uses: https://github.com/denoland/setup-deno@v2
- name: Install dependencies
run: deno install
From d440f1c465b87ed61a699c7ca0bfb45795e1b062 Mon Sep 17 00:00:00 2001
From: Astra
Date: Mon, 21 Apr 2025 14:25:56 +0900
Subject: [PATCH 14/33] Trying a different approach for deploying the thing
---
.forgejo/workflows/deploy.yaml | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml
index edc1f84..c6a05d0 100644
--- a/.forgejo/workflows/deploy.yaml
+++ b/.forgejo/workflows/deploy.yaml
@@ -29,22 +29,30 @@ jobs:
- name: Build project
run: deno task build
- - name: Setup SCP
+ - name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
- chmod -R go-rwx ~/.ssh
+ chmod 600 ~/.ssh/id_ed25519
+ cat > ~/.ssh/config << EOF
+ Host deploy
+ HostName ${{ vars.SERVER_HOST }}
+ User ${{ vars.SERVER_USER }}
+ IdentityFile ~/.ssh/id_ed25519
+ StrictHostKeyChecking accept-new
+ BatchMode yes
+ PasswordAuthentication no
+ PubkeyAuthentication yes
+ EOF
+ chmod 600 ~/.ssh/config
ssh-keyscan -H ${{ vars.SERVER_HOST }} >> ~/.ssh/known_hosts
- echo "Deploying to ${{ vars.SERVER_HOST }} as ${{ vars.SERVER_USER }} to /home/common/www/${{ github.ref_name }}"
+ echo "Deploying to ${{ vars.SERVER_HOST }} as ${{ vars.SERVER_USER }} to /var/www/pds/${{ github.ref_name }}"
- name: Debug SSH Connection
- run: ssh -v -o PasswordAuthentication=no -i ~/.ssh/id_ed25519 ${{ vars.SERVER_USER }}@${{ vars.SERVER_HOST }} echo "SSH Connection Successful"
+ run: ssh -v deploy echo "SSH Connection Successful"
- - name: create folder if not exists
- run: |
- ssh -i ~/.ssh/id_ed25519 ${{ vars.SERVER_USER }}@${{ vars.SERVER_HOST }} "mkdir -p /var/www/pds/${{ github.ref_name }}"
+ - name: Create folder if not exists
+ run: ssh deploy "mkdir -p /var/www/pds/${{ github.ref_name }}"
- name: Deploy via SCP
- run: |
- scp -i ~/.ssh/id_ed25519 -rv ./dist/* ${{ vars.SERVER_USER }}@\[${{ vars.SERVER_HOST }}\]:/var/www/pds/${{ github.ref_name }}
-
\ No newline at end of file
+ run: scp -r ./dist/* deploy:/var/www/pds/${{ github.ref_name }}
From b01b6b7f6584667c9af25828d76e09d0640ede0f Mon Sep 17 00:00:00 2001
From: Astra
Date: Mon, 21 Apr 2025 06:30:49 +0000
Subject: [PATCH 15/33] Cleanup and Maintenance part 1 (#1)
Co-authored-by: ari
Reviewed-on: https://git.witchcraft.systems/scientific-witchery/pds-dash/pulls/1
---
config.ts | 6 +++---
deno.lock | 5 +++++
package.json | 3 ++-
src/App.svelte | 15 +++++++-------
src/app.css | 26 ++++++++++++++++--------
src/lib/AccountComponent.svelte | 6 +++---
src/lib/PostComponent.svelte | 35 +++++++++++++++++++--------------
src/lib/pdsfetch.ts | 22 ++++++++-------------
8 files changed, 67 insertions(+), 51 deletions(-)
diff --git a/config.ts b/config.ts
index b8284a6..fe28a5a 100644
--- a/config.ts
+++ b/config.ts
@@ -15,10 +15,10 @@ export class Config {
static readonly FRONTEND_URL: string = "https://deer.social";
/**
- * Maximum number of posts to fetch from the PDS per user
- * @default 10
+ * Maximum number of posts to show in the feed (across all users)
+ * @default 100
*/
- static readonly MAX_POSTS_PER_USER: number = 22;
+ static readonly MAX_POSTS: number = 100;
/**
* Footer text for the dashboard
diff --git a/deno.lock b/deno.lock
index df8c920..0616852 100644
--- a/deno.lock
+++ b/deno.lock
@@ -6,6 +6,7 @@
"npm:@atcute/identity-resolver@~0.1.2": "0.1.2_@atcute+identity@0.1.3",
"npm:@sveltejs/vite-plugin-svelte@^5.0.3": "5.0.3_svelte@5.28.1__acorn@8.14.1_vite@6.3.2__picomatch@4.0.2",
"npm:@tsconfig/svelte@^5.0.4": "5.0.4",
+ "npm:moment@^2.30.1": "2.30.1",
"npm:svelte-check@^4.1.5": "4.1.6_svelte@5.28.1__acorn@8.14.1_typescript@5.7.3",
"npm:svelte@^5.23.1": "5.28.1_acorn@8.14.1",
"npm:typescript@~5.7.2": "5.7.3",
@@ -337,6 +338,9 @@
"@jridgewell/sourcemap-codec"
]
},
+ "moment@2.30.1": {
+ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
+ },
"mri@1.2.0": {
"integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="
},
@@ -470,6 +474,7 @@
"npm:@atcute/identity-resolver@~0.1.2",
"npm:@sveltejs/vite-plugin-svelte@^5.0.3",
"npm:@tsconfig/svelte@^5.0.4",
+ "npm:moment@^2.30.1",
"npm:svelte-check@^4.1.5",
"npm:svelte@^5.23.1",
"npm:typescript@~5.7.2",
diff --git a/package.json b/package.json
index 59269d2..9f84465 100644
--- a/package.json
+++ b/package.json
@@ -12,7 +12,8 @@
"dependencies": {
"@atcute/bluesky": "^2.0.2",
"@atcute/client": "^3.0.1",
- "@atcute/identity-resolver": "^0.1.2"
+ "@atcute/identity-resolver": "^0.1.2",
+ "moment": "^2.30.1"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^5.0.3",
diff --git a/src/App.svelte b/src/App.svelte
index 6a635b1..95912e2 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -41,8 +41,9 @@
diff --git a/src/lib/PostComponent.svelte b/src/lib/PostComponent.svelte
index 894540d..69ea88b 100644
--- a/src/lib/PostComponent.svelte
+++ b/src/lib/PostComponent.svelte
@@ -2,6 +2,7 @@
import { Post } from "./pdsfetch";
import { Config } from "../../config";
import { onMount } from "svelte";
+ import moment from "moment";
let { post }: { post: Post } = $props();
@@ -76,7 +77,9 @@
{post.timenotstamp}{moment(post.timenotstamp).isBefore(moment().subtract(1, "month"))
+ ? moment(post.timenotstamp).format("MMM D, YYYY")
+ : moment(post.timenotstamp).fromNow()}
@@ -131,6 +134,7 @@
{/if}
{#if post.videosLinkCid}
+
{/if}
+ {#if post.gifLink}
+
+ {/if}
diff --git a/src/lib/pdsfetch.ts b/src/lib/pdsfetch.ts
index 79edab0..e782f62 100644
--- a/src/lib/pdsfetch.ts
+++ b/src/lib/pdsfetch.ts
@@ -46,6 +46,7 @@ class Post {
replyingUri: atUriObject | null;
imagesCid: string[] | null;
videosLinkCid: string | null;
+ gifLink: string | null;
constructor(
record: ComAtprotoRepoListRecords.Record,
@@ -69,6 +70,7 @@ class Post {
this.quotingUri = null;
this.imagesCid = null;
this.videosLinkCid = null;
+ this.gifLink = null;
switch (post.embed?.$type) {
case "app.bsky.embed.images":
this.imagesCid = post.embed.images.map(
@@ -96,6 +98,9 @@ class Post {
break;
}
break;
+ case "app.bsky.embed.external": // assuming that external embeds are gifs for now
+ this.gifLink = post.embed.external.uri;
+ break;
}
}
}
From c84ff140ca6ed99f3412894a33eb6753680cc0a0 Mon Sep 17 00:00:00 2001
From: Astra
Date: Sun, 11 May 2025 00:56:39 +0900
Subject: [PATCH 32/33] GIF fix for safari
---
src/lib/pdsfetch.ts | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/lib/pdsfetch.ts b/src/lib/pdsfetch.ts
index e782f62..bc95acd 100644
--- a/src/lib/pdsfetch.ts
+++ b/src/lib/pdsfetch.ts
@@ -99,7 +99,9 @@ class Post {
}
break;
case "app.bsky.embed.external": // assuming that external embeds are gifs for now
- this.gifLink = post.embed.external.uri;
+ if (post.embed.external.uri.includes(".gif")) {
+ this.gifLink = post.embed.external.uri;
+ }
break;
}
}
From b3e8c7eac1bc4114ed1d7476fc32f202844641e0 Mon Sep 17 00:00:00 2001
From: Ari
Date: Sat, 10 May 2025 14:07:37 -0400
Subject: [PATCH 33/33] Added mutex to fix duplicated posts
---
deno.lock | 229 +++++++++++++++++++++++++++++++++-----------
package.json | 1 +
src/lib/pdsfetch.ts | 6 ++
3 files changed, 179 insertions(+), 57 deletions(-)
diff --git a/deno.lock b/deno.lock
index 724a5c0..90a8393 100644
--- a/deno.lock
+++ b/deno.lock
@@ -1,5 +1,5 @@
{
- "version": "4",
+ "version": "5",
"specifiers": {
"npm:@atcute/bluesky@^2.0.2": "2.0.2_@atcute+client@3.0.1",
"npm:@atcute/client@^3.0.1": "3.0.1",
@@ -7,6 +7,7 @@
"npm:@sveltejs/vite-plugin-svelte@^5.0.3": "5.0.3_svelte@5.28.1__acorn@8.14.1_vite@6.3.2__picomatch@4.0.2",
"npm:@tsconfig/svelte@^5.0.4": "5.0.4",
"npm:moment@^2.30.1": "2.30.1",
+ "npm:mutex-ts@^1.2.1": "1.2.1",
"npm:svelte-check@^4.1.5": "4.1.6_svelte@5.28.1__acorn@8.14.1_typescript@5.7.3",
"npm:svelte-infinite-loading@^1.4.0": "1.4.0",
"npm:svelte@^5.23.1": "5.28.1_acorn@8.14.1",
@@ -54,79 +55,129 @@
"integrity": "sha512-GEhUCk9c4XbNxi+0YZHZsV4fYNd6HejfWuN4Ti4c02DauX+LyX5WY1Y3WfyZ8Pxxl0zqhs+MLtW98cMh86vv6g=="
},
"@esbuild/aix-ppc64@0.25.2": {
- "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag=="
+ "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==",
+ "os": ["aix"],
+ "cpu": ["ppc64"]
},
"@esbuild/android-arm64@0.25.2": {
- "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w=="
+ "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==",
+ "os": ["android"],
+ "cpu": ["arm64"]
},
"@esbuild/android-arm@0.25.2": {
- "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA=="
+ "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==",
+ "os": ["android"],
+ "cpu": ["arm"]
},
"@esbuild/android-x64@0.25.2": {
- "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg=="
+ "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==",
+ "os": ["android"],
+ "cpu": ["x64"]
},
"@esbuild/darwin-arm64@0.25.2": {
- "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA=="
+ "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==",
+ "os": ["darwin"],
+ "cpu": ["arm64"]
},
"@esbuild/darwin-x64@0.25.2": {
- "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA=="
+ "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==",
+ "os": ["darwin"],
+ "cpu": ["x64"]
},
"@esbuild/freebsd-arm64@0.25.2": {
- "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w=="
+ "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==",
+ "os": ["freebsd"],
+ "cpu": ["arm64"]
},
"@esbuild/freebsd-x64@0.25.2": {
- "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ=="
+ "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==",
+ "os": ["freebsd"],
+ "cpu": ["x64"]
},
"@esbuild/linux-arm64@0.25.2": {
- "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g=="
+ "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==",
+ "os": ["linux"],
+ "cpu": ["arm64"]
},
"@esbuild/linux-arm@0.25.2": {
- "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g=="
+ "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==",
+ "os": ["linux"],
+ "cpu": ["arm"]
},
"@esbuild/linux-ia32@0.25.2": {
- "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ=="
+ "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==",
+ "os": ["linux"],
+ "cpu": ["ia32"]
},
"@esbuild/linux-loong64@0.25.2": {
- "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w=="
+ "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==",
+ "os": ["linux"],
+ "cpu": ["loong64"]
},
"@esbuild/linux-mips64el@0.25.2": {
- "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q=="
+ "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==",
+ "os": ["linux"],
+ "cpu": ["mips64el"]
},
"@esbuild/linux-ppc64@0.25.2": {
- "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g=="
+ "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==",
+ "os": ["linux"],
+ "cpu": ["ppc64"]
},
"@esbuild/linux-riscv64@0.25.2": {
- "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw=="
+ "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==",
+ "os": ["linux"],
+ "cpu": ["riscv64"]
},
"@esbuild/linux-s390x@0.25.2": {
- "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q=="
+ "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==",
+ "os": ["linux"],
+ "cpu": ["s390x"]
},
"@esbuild/linux-x64@0.25.2": {
- "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg=="
+ "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==",
+ "os": ["linux"],
+ "cpu": ["x64"]
},
"@esbuild/netbsd-arm64@0.25.2": {
- "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw=="
+ "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==",
+ "os": ["netbsd"],
+ "cpu": ["arm64"]
},
"@esbuild/netbsd-x64@0.25.2": {
- "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg=="
+ "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==",
+ "os": ["netbsd"],
+ "cpu": ["x64"]
},
"@esbuild/openbsd-arm64@0.25.2": {
- "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg=="
+ "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==",
+ "os": ["openbsd"],
+ "cpu": ["arm64"]
},
"@esbuild/openbsd-x64@0.25.2": {
- "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw=="
+ "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==",
+ "os": ["openbsd"],
+ "cpu": ["x64"]
},
"@esbuild/sunos-x64@0.25.2": {
- "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA=="
+ "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==",
+ "os": ["sunos"],
+ "cpu": ["x64"]
},
"@esbuild/win32-arm64@0.25.2": {
- "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q=="
+ "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==",
+ "os": ["win32"],
+ "cpu": ["arm64"]
},
"@esbuild/win32-ia32@0.25.2": {
- "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg=="
+ "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==",
+ "os": ["win32"],
+ "cpu": ["ia32"]
},
"@esbuild/win32-x64@0.25.2": {
- "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA=="
+ "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==",
+ "os": ["win32"],
+ "cpu": ["x64"]
},
"@jridgewell/gen-mapping@0.3.8": {
"integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
@@ -153,64 +204,104 @@
]
},
"@rollup/rollup-android-arm-eabi@4.40.0": {
- "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg=="
+ "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==",
+ "os": ["android"],
+ "cpu": ["arm"]
},
"@rollup/rollup-android-arm64@4.40.0": {
- "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w=="
+ "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==",
+ "os": ["android"],
+ "cpu": ["arm64"]
},
"@rollup/rollup-darwin-arm64@4.40.0": {
- "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ=="
+ "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==",
+ "os": ["darwin"],
+ "cpu": ["arm64"]
},
"@rollup/rollup-darwin-x64@4.40.0": {
- "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA=="
+ "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==",
+ "os": ["darwin"],
+ "cpu": ["x64"]
},
"@rollup/rollup-freebsd-arm64@4.40.0": {
- "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg=="
+ "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==",
+ "os": ["freebsd"],
+ "cpu": ["arm64"]
},
"@rollup/rollup-freebsd-x64@4.40.0": {
- "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw=="
+ "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==",
+ "os": ["freebsd"],
+ "cpu": ["x64"]
},
"@rollup/rollup-linux-arm-gnueabihf@4.40.0": {
- "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA=="
+ "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==",
+ "os": ["linux"],
+ "cpu": ["arm"]
},
"@rollup/rollup-linux-arm-musleabihf@4.40.0": {
- "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg=="
+ "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==",
+ "os": ["linux"],
+ "cpu": ["arm"]
},
"@rollup/rollup-linux-arm64-gnu@4.40.0": {
- "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg=="
+ "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==",
+ "os": ["linux"],
+ "cpu": ["arm64"]
},
"@rollup/rollup-linux-arm64-musl@4.40.0": {
- "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ=="
+ "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==",
+ "os": ["linux"],
+ "cpu": ["arm64"]
},
"@rollup/rollup-linux-loongarch64-gnu@4.40.0": {
- "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg=="
+ "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==",
+ "os": ["linux"],
+ "cpu": ["loong64"]
},
"@rollup/rollup-linux-powerpc64le-gnu@4.40.0": {
- "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw=="
+ "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==",
+ "os": ["linux"],
+ "cpu": ["ppc64"]
},
"@rollup/rollup-linux-riscv64-gnu@4.40.0": {
- "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA=="
+ "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==",
+ "os": ["linux"],
+ "cpu": ["riscv64"]
},
"@rollup/rollup-linux-riscv64-musl@4.40.0": {
- "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ=="
+ "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==",
+ "os": ["linux"],
+ "cpu": ["riscv64"]
},
"@rollup/rollup-linux-s390x-gnu@4.40.0": {
- "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw=="
+ "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==",
+ "os": ["linux"],
+ "cpu": ["s390x"]
},
"@rollup/rollup-linux-x64-gnu@4.40.0": {
- "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ=="
+ "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==",
+ "os": ["linux"],
+ "cpu": ["x64"]
},
"@rollup/rollup-linux-x64-musl@4.40.0": {
- "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw=="
+ "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==",
+ "os": ["linux"],
+ "cpu": ["x64"]
},
"@rollup/rollup-win32-arm64-msvc@4.40.0": {
- "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ=="
+ "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==",
+ "os": ["win32"],
+ "cpu": ["arm64"]
},
"@rollup/rollup-win32-ia32-msvc@4.40.0": {
- "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA=="
+ "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==",
+ "os": ["win32"],
+ "cpu": ["ia32"]
},
"@rollup/rollup-win32-x64-msvc@4.40.0": {
- "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ=="
+ "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==",
+ "os": ["win32"],
+ "cpu": ["x64"]
},
"@sveltejs/acorn-typescript@1.0.5_acorn@8.14.1": {
"integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==",
@@ -247,7 +338,8 @@
"integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="
},
"acorn@8.14.1": {
- "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="
+ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "bin": true
},
"aria-query@5.3.2": {
"integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="
@@ -275,7 +367,7 @@
},
"esbuild@0.25.2": {
"integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==",
- "dependencies": [
+ "optionalDependencies": [
"@esbuild/aix-ppc64",
"@esbuild/android-arm",
"@esbuild/android-arm64",
@@ -301,7 +393,9 @@
"@esbuild/win32-arm64",
"@esbuild/win32-ia32",
"@esbuild/win32-x64"
- ]
+ ],
+ "scripts": true,
+ "bin": true
},
"esm-env@1.2.2": {
"integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="
@@ -316,10 +410,15 @@
"integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
"dependencies": [
"picomatch"
+ ],
+ "optionalPeers": [
+ "picomatch"
]
},
"fsevents@2.3.3": {
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "os": ["darwin"],
+ "scripts": true
},
"is-reference@3.0.3": {
"integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==",
@@ -348,8 +447,12 @@
"ms@2.1.3": {
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
+ "mutex-ts@1.2.1": {
+ "integrity": "sha512-OkcXgf0viuCgYdnm48kiNQ9PzC5OzISQ261svHr/Ybc2vBYC/5xfLXn44hQ+dYRX74v7MCSqV/LKPEbpYdDybw=="
+ },
"nanoid@3.3.11": {
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "bin": true
},
"picocolors@1.1.1": {
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
@@ -371,6 +474,9 @@
"rollup@4.40.0": {
"integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==",
"dependencies": [
+ "@types/estree"
+ ],
+ "optionalDependencies": [
"@rollup/rollup-android-arm-eabi",
"@rollup/rollup-android-arm64",
"@rollup/rollup-darwin-arm64",
@@ -391,9 +497,9 @@
"@rollup/rollup-win32-arm64-msvc",
"@rollup/rollup-win32-ia32-msvc",
"@rollup/rollup-win32-x64-msvc",
- "@types/estree",
"fsevents"
- ]
+ ],
+ "bin": true
},
"sade@1.8.1": {
"integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
@@ -414,7 +520,8 @@
"sade",
"svelte",
"typescript"
- ]
+ ],
+ "bin": true
},
"svelte-infinite-loading@1.4.0": {
"integrity": "sha512-Jo+f/yr/HmZQuIiiKKzAHVFXdAUWHW2RBbrcQTil8JVk1sCm/riy7KTJVzjBgQvHasrFQYKF84zvtc9/Y4lFYg=="
@@ -446,24 +553,31 @@
]
},
"typescript@5.7.3": {
- "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="
+ "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
+ "bin": true
},
"vite@6.3.2_picomatch@4.0.2": {
"integrity": "sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==",
"dependencies": [
"esbuild",
"fdir",
- "fsevents",
"picomatch",
"postcss",
"rollup",
"tinyglobby"
- ]
+ ],
+ "optionalDependencies": [
+ "fsevents"
+ ],
+ "bin": true
},
"vitefu@1.0.6_vite@6.3.2__picomatch@4.0.2": {
"integrity": "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==",
"dependencies": [
"vite"
+ ],
+ "optionalPeers": [
+ "vite"
]
},
"zimmerframe@1.1.2": {
@@ -479,6 +593,7 @@
"npm:@sveltejs/vite-plugin-svelte@^5.0.3",
"npm:@tsconfig/svelte@^5.0.4",
"npm:moment@^2.30.1",
+ "npm:mutex-ts@^1.2.1",
"npm:svelte-check@^4.1.5",
"npm:svelte-infinite-loading@^1.4.0",
"npm:svelte@^5.23.1",
diff --git a/package.json b/package.json
index 1db6461..3b293c0 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
"@atcute/client": "^3.0.1",
"@atcute/identity-resolver": "^0.1.2",
"moment": "^2.30.1",
+ "mutex-ts": "^1.2.1",
"svelte-infinite-loading": "^1.4.0"
},
"devDependencies": {
diff --git a/src/lib/pdsfetch.ts b/src/lib/pdsfetch.ts
index bc95acd..20120fb 100644
--- a/src/lib/pdsfetch.ts
+++ b/src/lib/pdsfetch.ts
@@ -13,6 +13,7 @@ import {
WebDidDocumentResolver,
} from "@atcute/identity-resolver";
import { Config } from "../../config";
+import { Mutex } from "mutex-ts"
// import { ComAtprotoRepoListRecords.Record } from "@atcute/client/lexicons";
// import { AppBskyFeedPost } from "@atcute/client/lexicons";
// import { AppBskyActorDefs } from "@atcute/client/lexicons";
@@ -247,8 +248,11 @@ const filterPostsByDate = (posts: PostsAcc[], cutoffDate: Date) => {
});
return filteredPosts;
};
+
+const postsMutex = new Mutex();
// nightmare function. However it works so I am not touching it
const getNextPosts = async () => {
+ const release = await postsMutex.obtain();
if (!accountsMetadata.length) {
accountsMetadata = await getAllMetadataFromPds();
}
@@ -322,6 +326,8 @@ const getNextPosts = async () => {
}
return new Post(record, account);
});
+ // release the mutex
+ release();
return newPosts;
};