mirror of
https://github.com/ION606/bluesky-client.git
synced 2026-05-14 13:16:54 +00:00
added single post viewing
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
display: inline-block; /* makes each card flow naturally into columns */
|
||||
margin-bottom: 16px; /* adds space between items vertically */
|
||||
width: 100%; /* ensures card takes up the column width */
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
@@ -130,6 +131,7 @@
|
||||
margin-top: 12px;
|
||||
width: 100%;
|
||||
text-align: right;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* repost section styling */
|
||||
@@ -251,6 +253,7 @@
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* individual action buttons */
|
||||
@@ -374,3 +377,16 @@
|
||||
background-color: #ffcc00;
|
||||
color: #4e004e;
|
||||
}
|
||||
|
||||
.external-embed-container img {
|
||||
width: -webkit-fill-available;
|
||||
}
|
||||
|
||||
.notallowed {
|
||||
cursor: not-allowed !important;
|
||||
color: #737373 !important;
|
||||
}
|
||||
|
||||
.notallowed:hover {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
/* General Styles */
|
||||
body, html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: 'Arial', sans-serif;
|
||||
background-color: #1a001a; /* Dark purple background */
|
||||
color: #e6e6ff; /* Light text for readability */
|
||||
}
|
||||
|
||||
#post-container {
|
||||
max-width: 700px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
/* Card Styles */
|
||||
.post-card, .reply-card, .pinned-card {
|
||||
background: #2a002e; /* Slightly lighter purple for cards */
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.5); /* Subtle shadow for depth */
|
||||
padding: 16px;
|
||||
margin-bottom: 16px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* Author Section */
|
||||
.author-section {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.card-avatar {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 50%;
|
||||
border: 2px solid #ffcc00; /* Golden border */
|
||||
}
|
||||
|
||||
.author-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.author-name {
|
||||
font-weight: bold;
|
||||
font-size: 1.1rem;
|
||||
color: #ffcc00; /* Golden for emphasis */
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.author-handle {
|
||||
font-size: 0.9rem;
|
||||
color: #b399ff; /* Muted light purple */
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Post Content */
|
||||
.post-text {
|
||||
margin: 16px 0;
|
||||
font-size: 1rem;
|
||||
line-height: 1.5;
|
||||
word-wrap: break-word;
|
||||
color: #e6e6ff; /* Standard text color */
|
||||
}
|
||||
|
||||
/* Media Embeds */
|
||||
.post-image, .reply-image {
|
||||
max-width: 100%;
|
||||
border-radius: 8px;
|
||||
margin-top: 12px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.post-video {
|
||||
max-width: 100%;
|
||||
border-radius: 8px;
|
||||
margin-top: 12px;
|
||||
outline: none;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
/* External Links */
|
||||
.external-embed-container {
|
||||
margin-top: 12px;
|
||||
padding: 10px;
|
||||
border-radius: 8px;
|
||||
background: #3d1c3d;
|
||||
color: #e6e6ff;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.external-embed-title {
|
||||
font-weight: bold;
|
||||
color: #ffcc00;
|
||||
margin: 0 0 8px;
|
||||
}
|
||||
|
||||
.external-embed-description {
|
||||
font-size: 0.9rem;
|
||||
margin: 0 0 8px;
|
||||
color: #b399ff;
|
||||
}
|
||||
|
||||
.external-embed-link {
|
||||
color: #ffcc00;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.external-embed-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.external-embed-container img {
|
||||
width: -webkit-fill-available;
|
||||
}
|
||||
|
||||
/* Interaction buttons */
|
||||
.interaction-section {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
.interaction-button {
|
||||
background: none;
|
||||
border: none;
|
||||
font-size: 1rem;
|
||||
color: #b399ff; /* Muted light purple for buttons */
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
transition: color 0.3s ease, transform 0.2s ease;
|
||||
}
|
||||
|
||||
.interaction-button:hover {
|
||||
color: #ffcc00; /* Golden hover effect for buttons */
|
||||
transform: scale(1.1); /* Slightly enlarge button on hover */
|
||||
}
|
||||
|
||||
/* Replies */
|
||||
.reply-card {
|
||||
margin-left: 20px;
|
||||
border-left: 2px solid #4e004e; /* Accent line for threading */
|
||||
padding-left: 16px;
|
||||
background-color: #3d1c3d;
|
||||
}
|
||||
|
||||
/* Pinned Posts */
|
||||
.pinned-card {
|
||||
border: 2px solid #ffcc00; /* Highlight pinned posts */
|
||||
background: #3d1c3d;
|
||||
}
|
||||
|
||||
.pinned-label {
|
||||
font-size: 0.9rem;
|
||||
font-weight: bold;
|
||||
color: #ffcc00;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* Reposts or Shared Posts */
|
||||
.repost-section {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
background: #3d1c3d;
|
||||
padding: 10px;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 12px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.repost-avatar {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.repost-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.repost-author {
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
color: #ffcc00;
|
||||
}
|
||||
|
||||
.repost-text {
|
||||
font-size: 0.85rem;
|
||||
color: #b399ff;
|
||||
}
|
||||
|
||||
/* Threads */
|
||||
.reply-thread {
|
||||
margin-left: 20px;
|
||||
padding-left: 10px;
|
||||
border-left: 2px solid #4e004e;
|
||||
}
|
||||
|
||||
#back-button-container {
|
||||
position: fixed;
|
||||
top: 20px;
|
||||
left: 20px;
|
||||
z-index: 1000; /* Ensures it stays on top */
|
||||
}
|
||||
|
||||
#back-button {
|
||||
display: inline-block;
|
||||
padding: 10px 20px;
|
||||
background-color: #4e004e; /* Dark purple background */
|
||||
color: #ffcc00; /* Golden text for contrast */
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
border: 2px solid #ffcc00;
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
#back-button:hover {
|
||||
background-color: #ffcc00; /* Golden hover effect */
|
||||
color: #4e004e; /* Dark purple text on hover */
|
||||
transform: scale(1.05); /* Slight zoom effect */
|
||||
}
|
||||
+6
-2
@@ -1,10 +1,9 @@
|
||||
|
||||
/* zoom container styles */
|
||||
.zoom-container {
|
||||
top: 5vh;
|
||||
position: fixed;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
/* overflow: hidden; */
|
||||
cursor: pointer;
|
||||
max-height: 90vh;
|
||||
max-width: 90vw;
|
||||
@@ -12,6 +11,10 @@
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* initial image styling */
|
||||
.zoom-video, .zoom-image {
|
||||
max-height: 88vh;
|
||||
@@ -20,6 +23,7 @@
|
||||
cursor: pointer;
|
||||
border-radius: 8px;
|
||||
border: solid 2px lightblue;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* styles for full-screen zoomed view */
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@
|
||||
<!-- sourced from https://xaydungso.vn/blog/20-mau-loading-gif-cute-dang-yeu-nhat-cho-website-cua-ban-en-in.html -->
|
||||
<img src="../assets/loading-transparent.gif">
|
||||
</div>
|
||||
<div id="imgzoom" class="zoom-container zoomed">
|
||||
<div id="imgzoom" class="zoom-container zoomed hidden">
|
||||
<img src="" alt="Zoomable Image" class="zoom-image" />
|
||||
<video src="" alt="Zoomable VIdeo" class="zoom-video" controls></video>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="../CSS/singlepost.css">
|
||||
<link rel="stylesheet" href="../CSS/global.css">
|
||||
<title>Post Viewer</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="back-button-container">
|
||||
<button id="back-button" onclick="window.history.back()">← Back</button>
|
||||
</div>
|
||||
|
||||
<div id="post-container" class="post-fullscreen"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
+26
-11
@@ -9,9 +9,10 @@ function zoomimg(e) {
|
||||
zoomContainer.querySelector('img').style.display = '';
|
||||
|
||||
zoomContainer.querySelector('img').src = src;
|
||||
zoomContainer.classList.toggle('zoomed');
|
||||
overlayEl.classList.toggle('hidden');
|
||||
overlayEl.classList.toggle('show');
|
||||
zoomContainer.classList.toggle('zoomed');
|
||||
zoomContainer.classList.toggle('hidden');
|
||||
|
||||
document.querySelector('.profile-container').classList.toggle('.noscroll');
|
||||
}
|
||||
|
||||
@@ -374,6 +375,8 @@ function setupWorker(name = 'bktemp') {
|
||||
}
|
||||
}
|
||||
|
||||
const statArr = [0, 0];
|
||||
|
||||
/**
|
||||
* @param {*} post
|
||||
* @param {*} a
|
||||
@@ -387,11 +390,19 @@ function renderPostSingle(post, a, likes, ipcRenderer, container, idkey = 'bskyi
|
||||
const cardId = (post?.reply?.root?.uri || post.post.uri)?.trim();
|
||||
|
||||
// if the card exists, use it; otherwise, create a new card
|
||||
if (a.has(cardId)) card = a.get(cardId);
|
||||
if (a.has(cardId)) {
|
||||
card = a.get(cardId);
|
||||
statArr[0]++;
|
||||
}
|
||||
else {
|
||||
card = document.createElement('div');
|
||||
card.classList.add('post-card');
|
||||
card.dataset[`${idkey}`] = cardId;
|
||||
card.onclick = (e) => {
|
||||
if (e.target !== card && !e.target.classList.contains('post-text')) return;
|
||||
window.location.href = `../HTML/post.html?id=${encodeURI(card.dataset[`${idkey}`])}`;
|
||||
}
|
||||
statArr[1]++;
|
||||
}
|
||||
|
||||
// handle repost reason if it hasn't been added to this card
|
||||
@@ -529,7 +540,7 @@ function renderPostSingle(post, a, likes, ipcRenderer, container, idkey = 'bskyi
|
||||
card.appendChild(textContent);
|
||||
}
|
||||
|
||||
// handle video embed (if present and not added yet)
|
||||
// handle video embed
|
||||
if (post.post.embed && post.post.embed.$type === 'app.bsky.embed.video#view' && !card.querySelector('.post-video')) {
|
||||
const videoContainer = createVideoEl(), videoPlayer = videoContainer.querySelector('video');
|
||||
|
||||
@@ -599,11 +610,10 @@ function renderPostSingle(post, a, likes, ipcRenderer, container, idkey = 'bskyi
|
||||
const linkElement = document.createElement('a');
|
||||
linkElement.classList.add('external-embed-link');
|
||||
linkElement.href = embed.uri;
|
||||
linkElement.target = '_blank'; // opens in a new tab
|
||||
linkElement.rel = 'noopener noreferrer'; // improves security
|
||||
linkElement.target = '_blank';
|
||||
linkElement.rel = 'noopener noreferrer'; // improves security (apparently)
|
||||
linkElement.textContent = 'Visit';
|
||||
|
||||
// append elements to the container
|
||||
embedContainer.appendChild(titleElement);
|
||||
embedContainer.appendChild(descriptionElement);
|
||||
embedContainer.appendChild(linkElement);
|
||||
@@ -622,7 +632,7 @@ function renderPostSingle(post, a, likes, ipcRenderer, container, idkey = 'bskyi
|
||||
|
||||
// add the card to the container if it's a new card
|
||||
if (!a.has(cardId)) {
|
||||
const lurl = likes.find(o => (o.posturi === cardId));
|
||||
const lurl = likes?.find(o => (o.posturi === cardId));
|
||||
if (lurl) card.dataset.likeuri = lurl.likeuri;
|
||||
card.appendChild(createButtonEls(card, ipcRenderer, idkey, containerid));
|
||||
container.appendChild(card);
|
||||
@@ -652,12 +662,15 @@ module.exports = function renderPosts(posts, likes, pinnedPost, ipcRenderer, idk
|
||||
a = new Map();
|
||||
}
|
||||
|
||||
statArr[0] = 0;
|
||||
statArr[1] = 0;
|
||||
|
||||
for (const post of posts) {
|
||||
try {
|
||||
renderPostSingle(
|
||||
post,
|
||||
a,
|
||||
likes.map(o => ({ posturi: o.post.uri, likeuri: o.post.viewer?.like })),
|
||||
likes?.map(o => ({ posturi: o.post.uri, likeuri: o.post.viewer?.like })),
|
||||
ipcRenderer,
|
||||
container,
|
||||
idkey,
|
||||
@@ -669,8 +682,10 @@ module.exports = function renderPosts(posts, likes, pinnedPost, ipcRenderer, idk
|
||||
}
|
||||
}
|
||||
|
||||
const postids = Array.from(document.querySelectorAll(`[data-${idkey}]`)).map(o => o.dataset[`${idkey} `]);
|
||||
console.log(postids);
|
||||
console.info(`added ${statArr[1]} and updated ${statArr[0]} posts in "${containerid}"!`);
|
||||
|
||||
// const postids = Array.from(document.querySelectorAll(`[data-${idkey}]`)).map(o => o.dataset[`${idkey} `]);
|
||||
// console.log('duplicate ids', postids);
|
||||
|
||||
// "force" garbage collection
|
||||
// delete a;
|
||||
|
||||
+1
-1
@@ -95,7 +95,7 @@ function togglerelaxed(e) {
|
||||
container.classList.remove('cards-container-relaxed');
|
||||
container.classList.add('cards-container');
|
||||
} else {
|
||||
container.style.gridTemplateColumns = (value !== 'large') ? 'repeat(auto-fill, minmax(280px, 1fr))' : '';
|
||||
container.style.gridTemplateColumns = (value?.trim() !== 'large') ? 'repeat(auto-fill, minmax(280px, 1fr))' : 'none';
|
||||
container.classList.remove('cards-container');
|
||||
container.classList.add('cards-container-relaxed');
|
||||
}
|
||||
|
||||
@@ -0,0 +1,185 @@
|
||||
const { formatStr } = require("../src/renderer.cjs");
|
||||
|
||||
|
||||
function renderPost(postData, post, isReply = false) {
|
||||
const card = document.createElement('div');
|
||||
card.classList.add(isReply ? 'reply-card' : 'post-card');
|
||||
|
||||
if (post.pinned) {
|
||||
const pinnedLabel = document.createElement('div');
|
||||
pinnedLabel.classList.add('pinned-label');
|
||||
pinnedLabel.textContent = '📌 Pinned';
|
||||
card.appendChild(pinnedLabel);
|
||||
}
|
||||
|
||||
card.dataset.bskyid = post.uri;
|
||||
card.onclick = (e) => {
|
||||
if (e.target !== card && !e.target.classList.contains('post-text')) return;
|
||||
window.location.href = `../HTML/post.html?id=${encodeURI(card.dataset.bskyid)}`;
|
||||
}
|
||||
|
||||
// Author section
|
||||
const authorSection = document.createElement('div');
|
||||
authorSection.classList.add('author-section');
|
||||
const avatar = document.createElement('img');
|
||||
avatar.loading = 'lazy';
|
||||
avatar.src = post.author.avatar;
|
||||
avatar.alt = `${post.author.displayName}'s avatar`;
|
||||
avatar.classList.add('card-avatar');
|
||||
const authorInfo = document.createElement('div');
|
||||
authorInfo.classList.add('author-info');
|
||||
const displayName = document.createElement('p');
|
||||
|
||||
displayName.innerHTML = formatStr(`@${post.author.handle}`);
|
||||
if (post.author.displayName) displayName.textContent = post.author.displayName;
|
||||
|
||||
displayName.classList.add('author-name');
|
||||
const handle = document.createElement('p');
|
||||
handle.innerHTML = formatStr(`@${post.author.handle}`);
|
||||
handle.classList.add('author-handle');
|
||||
authorInfo.append(displayName, handle);
|
||||
authorSection.append(avatar, authorInfo);
|
||||
|
||||
// Post content
|
||||
const postContent = document.createElement('p');
|
||||
postContent.textContent = post.record.text;
|
||||
postContent.classList.add('post-text');
|
||||
|
||||
// Media (if exists)
|
||||
if (post.embed?.images?.length > 0) {
|
||||
const postMedia = document.createElement('img');
|
||||
postMedia.loading = 'lazy';
|
||||
postMedia.src = post.embed.images[0].fullsize;
|
||||
postMedia.alt = post.embed.images[0].alt;
|
||||
postMedia.classList.add('post-image');
|
||||
card.append(postMedia);
|
||||
}
|
||||
|
||||
if (post.embed && post.embed.$type === 'app.bsky.embed.external#view') {
|
||||
const embedContainer = document.createElement('div'),
|
||||
embed = post.embed.external;
|
||||
|
||||
embedContainer.classList.add('external-embed-container');
|
||||
|
||||
// Check for thumbnail
|
||||
if (embed.thumb) {
|
||||
const thumbnail = document.createElement('img');
|
||||
thumbnail.loading = 'lazy';
|
||||
thumbnail.classList.add('external-embed-thumb');
|
||||
|
||||
// Use embed.uri for GIFs, otherwise use thumbnail
|
||||
thumbnail.src = embed.uri.match(/\.gif(?:\?.*|$)/) ? embed.uri : embed.thumb;
|
||||
|
||||
// Handle ALT descriptions if provided
|
||||
if (embed.description.startsWith('ALT:') && embed.title === embed.description.substring(4).trim()) {
|
||||
thumbnail.alt = embed.description.substring(4).trim();
|
||||
} else {
|
||||
thumbnail.alt = `${embed.title} thumbnail`;
|
||||
}
|
||||
|
||||
embedContainer.appendChild(thumbnail);
|
||||
}
|
||||
|
||||
// Handle the case of an image with ALT only
|
||||
if (!(embed.description.startsWith('ALT:') && embed.title === embed.description.substring(4).trim())) {
|
||||
// Title
|
||||
const titleElement = document.createElement('h3');
|
||||
titleElement.classList.add('external-embed-title');
|
||||
titleElement.textContent = embed.title;
|
||||
|
||||
// Description
|
||||
const descriptionElement = document.createElement('p');
|
||||
descriptionElement.classList.add('external-embed-description');
|
||||
descriptionElement.textContent = embed.description;
|
||||
|
||||
// Link
|
||||
const linkElement = document.createElement('a');
|
||||
linkElement.classList.add('external-embed-link');
|
||||
linkElement.href = embed.uri;
|
||||
linkElement.target = '_blank';
|
||||
linkElement.rel = 'noopener noreferrer'; // Security improvement
|
||||
linkElement.textContent = 'Visit';
|
||||
|
||||
// Append title, description, and link
|
||||
embedContainer.appendChild(titleElement);
|
||||
embedContainer.appendChild(descriptionElement);
|
||||
embedContainer.appendChild(linkElement);
|
||||
}
|
||||
|
||||
card.appendChild(embedContainer);
|
||||
}
|
||||
|
||||
let interactionSection;
|
||||
|
||||
if (isReply) {
|
||||
interactionSection = document.createElement('div');
|
||||
interactionSection.classList.add('interaction-section');
|
||||
interactionSection.innerHTML = `
|
||||
<span>💬 ${post.replyCount}</span><span>🔄 ${post.repostCount}</span><span>❤️ ${post.likeCount}</span>
|
||||
`;
|
||||
}
|
||||
else {
|
||||
interactionSection = document.createElement('div');
|
||||
interactionSection.classList.add('interaction-section');
|
||||
interactionSection.innerHTML = `
|
||||
<button class="interaction-button">💬 ${postData.post.replyCount}</button>
|
||||
<button class="interaction-button">🔄 ${postData.post.repostCount}</button>
|
||||
<button class="interaction-button">❤️ ${postData.post.likeCount}</button>
|
||||
`;
|
||||
}
|
||||
|
||||
card.prepend(authorSection);
|
||||
card.append(postContent);
|
||||
card.append(interactionSection);
|
||||
|
||||
if (!isReply) {
|
||||
card.style.cursor = 'default';
|
||||
card.onclick = (_) => null;
|
||||
}
|
||||
|
||||
return card;
|
||||
};
|
||||
|
||||
|
||||
async function renderMain(postData) {
|
||||
const container = document.getElementById('post-container');
|
||||
if (!container) return alert("ERROR! CONTAINER NOT FOUND!");
|
||||
|
||||
console.log(postData);
|
||||
|
||||
// Render main post
|
||||
const mainPost = renderPost(postData, postData.post);
|
||||
container.appendChild(mainPost);
|
||||
|
||||
// Render replies
|
||||
if (postData.replies && postData.replies.length > 0) {
|
||||
const replyThread = document.createElement('div');
|
||||
replyThread.classList.add('reply-thread');
|
||||
postData.replies.forEach(reply => {
|
||||
try {
|
||||
const replyCard = renderPost(postData, reply.post, true);
|
||||
replyThread.appendChild(replyCard);
|
||||
}
|
||||
catch (err) {
|
||||
console.error('failed to render', reply, 'with reason\n', err);
|
||||
}
|
||||
});
|
||||
container.appendChild(replyThread);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param {Electron.IpcRenderer} ipcRenderer
|
||||
*/
|
||||
async function init(ipcRenderer) {
|
||||
const params = new URLSearchParams(window.location.search),
|
||||
bskyid = params.get('id');
|
||||
const r = await ipcRenderer.invoke('get-post-single', bskyid);
|
||||
|
||||
renderMain(r);
|
||||
}
|
||||
|
||||
|
||||
module.exports = init;
|
||||
+20
-6
@@ -127,7 +127,8 @@ async function getUserData(utag, allData = false) {
|
||||
|
||||
if (allData) {
|
||||
const { data: { feed, cursor } } = await agent.getAuthorFeed({ actor: output.profile.did, limit: 20, includePins: true }),
|
||||
{ data: { feed: likes, cursor: likesCursor } } = await agent.getActorLikes({ actor: did });
|
||||
{ data: { feed: likes, cursor: likesCursor } } = await agent.getActorLikes({ actor: output.profile.did })
|
||||
.catch(err => ({ data: { feed: [], cursor: undefined } }));
|
||||
|
||||
output.likes = likes;
|
||||
output.likesCursor = likesCursor;
|
||||
@@ -140,7 +141,8 @@ async function getUserData(utag, allData = false) {
|
||||
|
||||
return output;
|
||||
} catch (err) {
|
||||
logger.error('failed to fetch user data:', err);
|
||||
console.error(err);
|
||||
logger.error(`failed to fetch user data for ${utag}:`);
|
||||
return {};
|
||||
}
|
||||
}
|
||||
@@ -151,17 +153,27 @@ export const getPosts = async (utag, cursor = undefined, likesCursor = undefined
|
||||
const did = await getDID(utag);
|
||||
if (!did) return { err: 'DID not found!' };
|
||||
|
||||
const likes = await agent.getActorLikes({ actor: did, cursor: likesCursor }),
|
||||
posts = await agent.getAuthorFeed({ actor: did, limit: 20, includePins: true, cursor });
|
||||
return { posts, likes };
|
||||
const likes = await agent.getActorLikes({ actor: did, cursor: likesCursor }).catch(_ => ({ data: [] })),
|
||||
posts = await agent.getAuthorFeed({ actor: did, limit: 30, includePins: true, cursor });
|
||||
return { posts: posts.data, likes: likes.data };
|
||||
}
|
||||
catch (err) {
|
||||
console.error(err);
|
||||
return { err: 'internal server error!' }
|
||||
return { err: `internal server error for "${utag}"!` }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export const getPost = async (e, bskyid) => {
|
||||
if (!bskyid) return 404;
|
||||
|
||||
const [, did, collection, rkey] = bskyid.match(/^at:\/\/([^\/]+)\/([^\/]+)\/(.+)$/),
|
||||
post = await agent.getPost({ repo: did, rkey, collection });
|
||||
|
||||
return (await agent.getPostThread({ uri: post.uri, depth: 3 })).data.thread;
|
||||
}
|
||||
|
||||
|
||||
export const getLikes = async (utag, cursor = undefined) => {
|
||||
try {
|
||||
const did = await getDID(utag);
|
||||
@@ -269,5 +281,7 @@ export async function setupIPC() {
|
||||
ipcMain.handle('new-post', post);
|
||||
ipcMain.handle('upload-file', handleFileOpen);
|
||||
ipcMain.handle('post-action', async (e, action, id, condition) => await handlePostAction(e, action, id, agent, condition));
|
||||
|
||||
ipcMain.handle('get-post-single', getPost);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,18 @@ const createMainWindow = () => {
|
||||
mainWindow = null // dereference the window object when closed
|
||||
});
|
||||
|
||||
// mainWindow.webContents.on('will-navigate', (e, ustr, inPlace) => {
|
||||
// const u = isURL(ustr);
|
||||
// if (u.protocol === 'file:' && u.pathname === '/post') {
|
||||
// // e.preventDefault();
|
||||
// // const bskyid = u.searchParams.get('id');
|
||||
|
||||
// // TODO: implement loading single post
|
||||
// // maybe move this logic to the page itself via ipc and just
|
||||
// // have this redirect to a file?
|
||||
// }
|
||||
// });
|
||||
|
||||
mainWindow.webContents.on('did-navigate', (_, url) => {
|
||||
mainWindow.webContents.executeJavaScript('document.title')
|
||||
.then(title => insertHistory(url, title));
|
||||
|
||||
Generated
+197
-384
@@ -23,15 +23,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@atproto/api": {
|
||||
"version": "0.13.14",
|
||||
"resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.13.14.tgz",
|
||||
"integrity": "sha512-CG5UpjI1WwSasSJTGadmr07EwWvl5JV658YZHcwIIg+Psk5sDloQOUJckuo1MP6wke1z6p/BUoPL4lxAATzMzA==",
|
||||
"version": "0.13.18",
|
||||
"resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.13.18.tgz",
|
||||
"integrity": "sha512-rrl5HhzGYWZ7fiC965TPBUOVItq9M4dxMb6qz8IvAVQliSkrJrKc7UD0QWL89QiiXaOBuX8w+4i5r4wrfBGddg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@atproto/common-web": "^0.3.1",
|
||||
"@atproto/lexicon": "^0.4.2",
|
||||
"@atproto/syntax": "^0.3.0",
|
||||
"@atproto/xrpc": "^0.6.3",
|
||||
"@atproto/lexicon": "^0.4.3",
|
||||
"@atproto/syntax": "^0.3.1",
|
||||
"@atproto/xrpc": "^0.6.4",
|
||||
"await-lock": "^2.2.2",
|
||||
"multiformats": "^9.9.0",
|
||||
"tlds": "^1.234.0",
|
||||
@@ -51,31 +51,31 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@atproto/lexicon": {
|
||||
"version": "0.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.2.tgz",
|
||||
"integrity": "sha512-CXoOkhcdF3XVUnR2oNgCs2ljWfo/8zUjxL5RIhJW/UNLp/FSl+KpF8Jm5fbk8Y/XXVPGRAsv9OYfxyU/14N/pw==",
|
||||
"version": "0.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.3.tgz",
|
||||
"integrity": "sha512-lFVZXe1S1pJP0dcxvJuHP3r/a+EAIBwwU7jUK+r8iLhIja+ml6NmYv8KeFHmIJATh03spEQ9s02duDmFVdCoXg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@atproto/common-web": "^0.3.1",
|
||||
"@atproto/syntax": "^0.3.0",
|
||||
"@atproto/syntax": "^0.3.1",
|
||||
"iso-datestring-validator": "^2.2.2",
|
||||
"multiformats": "^9.9.0",
|
||||
"zod": "^3.23.8"
|
||||
}
|
||||
},
|
||||
"node_modules/@atproto/syntax": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.3.0.tgz",
|
||||
"integrity": "sha512-Weq0ZBxffGHDXHl9U7BQc2BFJi/e23AL+k+i5+D9hUq/bzT4yjGsrCejkjq0xt82xXDjmhhvQSZ0LqxyZ5woxA==",
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.3.1.tgz",
|
||||
"integrity": "sha512-fzW0Mg1QUOVCWUD3RgEsDt6d1OZ6DdFmbKcDdbzUfh0t4rhtRAC05KbZYmxuMPWDAiJ4BbbQ5dkAc/mNypMXkw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@atproto/xrpc": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.6.3.tgz",
|
||||
"integrity": "sha512-S3tRvOdA9amPkKLll3rc4vphlDitLrkN5TwWh5Tu/jzk7mnobVVE3akYgICV9XCNHKjWM+IAPxFFI2qi+VW6nQ==",
|
||||
"version": "0.6.4",
|
||||
"resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.6.4.tgz",
|
||||
"integrity": "sha512-9ZAJ8nsXTqC4XFyS0E1Wlg7bAvonhXQNQ3Ocs1L1LIwFLXvsw/4fNpIHXxvXvqTCVeyHLbImOnE9UiO1c/qIYA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@atproto/lexicon": "^0.4.2",
|
||||
"@atproto/lexicon": "^0.4.3",
|
||||
"zod": "^3.23.8"
|
||||
}
|
||||
},
|
||||
@@ -121,6 +121,51 @@
|
||||
"global-agent": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/get/node_modules/fs-extra": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
|
||||
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6 <7 || >=8"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/get/node_modules/jsonfile": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
|
||||
"integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optionalDependencies": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/get/node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/get/node_modules/universalify": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
|
||||
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/node-gyp": {
|
||||
"version": "10.2.0-electron.1",
|
||||
"resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2",
|
||||
@@ -146,23 +191,10 @@
|
||||
"node": ">=12.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/node-gyp/node_modules/semver": {
|
||||
"version": "7.6.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/rebuild": {
|
||||
"version": "3.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.0.tgz",
|
||||
"integrity": "sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==",
|
||||
"version": "3.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.1.tgz",
|
||||
"integrity": "sha512-sKGD+xav4Gh25+LcLY0rjIwcCFTw+f/HU1pB48UVbwxXXRGaXEqIH0AaYKN46dgd/7+6kuiDXzoyAEvx1zCsdw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -188,57 +220,6 @@
|
||||
"node": ">=12.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/rebuild/node_modules/fs-extra": {
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
|
||||
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^6.0.1",
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/rebuild/node_modules/jsonfile": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/rebuild/node_modules/semver": {
|
||||
"version": "7.6.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/rebuild/node_modules/universalify": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
|
||||
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@emnapi/runtime": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz",
|
||||
@@ -654,19 +635,6 @@
|
||||
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@npmcli/fs/node_modules/semver": {
|
||||
"version": "7.6.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/@npmcli/move-file": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz",
|
||||
@@ -755,9 +723,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"version": "20.17.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.7.tgz",
|
||||
"integrity": "sha512-sZXXnpBFMKbao30dUAvzKbdwA2JM1fwUtVEq/kxKuPI5mMwZiRElCpTXb0Biq/LMEVpXDZL5G5V0RPnxKeyaYg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -798,18 +766,6 @@
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/abort-controller": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
||||
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"event-target-shim": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.5"
|
||||
}
|
||||
},
|
||||
"node_modules/agent-base": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
||||
@@ -876,31 +832,10 @@
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-styles/node_modules/color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-name": "~1.1.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-styles/node_modules/color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/async": {
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
|
||||
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
|
||||
"license": "MIT"
|
||||
"version": "0.2.10",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
|
||||
"integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
@@ -983,7 +918,26 @@
|
||||
"readable-stream": "^3.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/bl/node_modules/buffer": {
|
||||
"node_modules/boolean": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz",
|
||||
"integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==",
|
||||
"deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
@@ -1007,49 +961,6 @@
|
||||
"ieee754": "^1.1.13"
|
||||
}
|
||||
},
|
||||
"node_modules/boolean": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz",
|
||||
"integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==",
|
||||
"deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer": {
|
||||
"version": "6.0.3",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
|
||||
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer-crc32": {
|
||||
"version": "0.2.13",
|
||||
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
|
||||
@@ -1090,16 +1001,6 @@
|
||||
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/cacache/node_modules/chownr": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
|
||||
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/cacheable-lookup": {
|
||||
"version": "5.0.4",
|
||||
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
|
||||
@@ -1147,10 +1048,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/chownr": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
|
||||
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
|
||||
"license": "ISC"
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
|
||||
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/clean-stack": {
|
||||
"version": "2.2.0",
|
||||
@@ -1227,28 +1132,34 @@
|
||||
}
|
||||
},
|
||||
"node_modules/color": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
|
||||
"integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
|
||||
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-convert": "^1.9.3",
|
||||
"color-string": "^1.6.0"
|
||||
"color-convert": "^2.0.1",
|
||||
"color-string": "^1.9.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/color-convert": {
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-name": "1.1.3"
|
||||
"color-name": "~1.1.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/color-name": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/color-string": {
|
||||
@@ -1271,6 +1182,31 @@
|
||||
"text-hex": "1.0.x"
|
||||
}
|
||||
},
|
||||
"node_modules/colorspace/node_modules/color": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
|
||||
"integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-convert": "^1.9.3",
|
||||
"color-string": "^1.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/colorspace/node_modules/color-convert": {
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-name": "1.1.3"
|
||||
}
|
||||
},
|
||||
"node_modules/colorspace/node_modules/color-name": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
@@ -1291,9 +1227,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/cron": {
|
||||
"version": "3.1.9",
|
||||
"resolved": "https://registry.npmjs.org/cron/-/cron-3.1.9.tgz",
|
||||
"integrity": "sha512-eNZu+YhLRHLxNJNqZgYuy8mXhzMV0XXmOSh+Ls2j1yTeQLCQ04ya7oNpujxwl4lEyck1fcVa1aRVZ+T4tAC7SA==",
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/cron/-/cron-3.2.1.tgz",
|
||||
"integrity": "sha512-w2n5l49GMmmkBFEsH9FIDhjZ1n1QgTMOCMGuQtOXs5veNiosZmso6bQGuqOJSYAXXrG84WQFVneNk+Yt0Ua9iw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/luxon": "~3.4.0",
|
||||
@@ -1301,9 +1237,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/cross-spawn": {
|
||||
"version": "7.0.5",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz",
|
||||
"integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==",
|
||||
"version": "7.0.6",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1457,9 +1393,9 @@
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/electron": {
|
||||
"version": "33.1.0",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-33.1.0.tgz",
|
||||
"integrity": "sha512-7KiY6MtRo1fVFLPGyHS7Inh8yZfrbUTy43nNwUgMD2CBk729BgSwOC2WhmcptNJVlzHJpVxSWkiVi2hp9mH/bw==",
|
||||
"version": "33.2.0",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-33.2.0.tgz",
|
||||
"integrity": "sha512-PVw1ICAQDPsnnsmpNFX/b1i/49h67pbSPxuIENd9K9WpGO1tsRaQt+K2bmXqTuoMJsbzIc75Ce8zqtuwBPqawA==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
@@ -1582,24 +1518,6 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/event-target-shim": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
|
||||
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/events": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
|
||||
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.8.x"
|
||||
}
|
||||
},
|
||||
"node_modules/expand-template": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
|
||||
@@ -1672,11 +1590,6 @@
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/fluent-ffmpeg/node_modules/async": {
|
||||
"version": "0.2.10",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
|
||||
"integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
|
||||
},
|
||||
"node_modules/fluent-ffmpeg/node_modules/which": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
||||
@@ -1736,18 +1649,18 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/fs-extra": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
|
||||
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
|
||||
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
"jsonfile": "^6.0.1",
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6 <7 || >=8"
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/fs-minipass": {
|
||||
@@ -1874,20 +1787,6 @@
|
||||
"node": ">=10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/global-agent/node_modules/semver": {
|
||||
"version": "7.6.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"optional": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/globalthis": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
|
||||
@@ -2277,11 +2176,14 @@
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/jsonfile": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
|
||||
"integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
}
|
||||
@@ -2320,9 +2222,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/logform": {
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz",
|
||||
"integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==",
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz",
|
||||
"integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@colors/colors": "1.6.0",
|
||||
@@ -2626,18 +2528,6 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/node-abi/node_modules/semver": {
|
||||
"version": "7.6.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/node-api-version": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.0.tgz",
|
||||
@@ -2648,19 +2538,6 @@
|
||||
"semver": "^7.3.5"
|
||||
}
|
||||
},
|
||||
"node_modules/node-api-version/node_modules/semver": {
|
||||
"version": "7.6.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/nopt": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
|
||||
@@ -2848,15 +2725,6 @@
|
||||
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/process": {
|
||||
"version": "0.11.10",
|
||||
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
|
||||
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/progress": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
|
||||
@@ -3133,13 +3001,15 @@
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true,
|
||||
"version": "7.6.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/semver-compare": {
|
||||
@@ -3206,49 +3076,6 @@
|
||||
"@img/sharp-win32-x64": "0.33.5"
|
||||
}
|
||||
},
|
||||
"node_modules/sharp/node_modules/color": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
|
||||
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-convert": "^2.0.1",
|
||||
"color-string": "^1.9.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/sharp/node_modules/color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-name": "~1.1.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/sharp/node_modules/color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/sharp/node_modules/semver": {
|
||||
"version": "7.6.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/shebang-command": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||
@@ -3505,6 +3332,12 @@
|
||||
"tar-stream": "^2.1.4"
|
||||
}
|
||||
},
|
||||
"node_modules/tar-fs/node_modules/chownr": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
|
||||
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/tar-stream": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
|
||||
@@ -3521,16 +3354,6 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/tar/node_modules/chownr": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
|
||||
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/tar/node_modules/minipass": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
|
||||
@@ -3641,13 +3464,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/universalify": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
|
||||
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
|
||||
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 4.0.0"
|
||||
"node": ">= 10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/util-deprecate": {
|
||||
@@ -3683,56 +3506,46 @@
|
||||
}
|
||||
},
|
||||
"node_modules/winston": {
|
||||
"version": "3.16.0",
|
||||
"resolved": "https://registry.npmjs.org/winston/-/winston-3.16.0.tgz",
|
||||
"integrity": "sha512-xz7+cyGN5M+4CmmD4Npq1/4T+UZaz7HaeTlAruFUTjk79CNMq+P6H30vlE4z0qfqJ01VHYQwd7OZo03nYm/+lg==",
|
||||
"version": "3.17.0",
|
||||
"resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz",
|
||||
"integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@colors/colors": "^1.6.0",
|
||||
"@dabh/diagnostics": "^2.0.2",
|
||||
"async": "^3.2.3",
|
||||
"is-stream": "^2.0.0",
|
||||
"logform": "^2.6.0",
|
||||
"logform": "^2.7.0",
|
||||
"one-time": "^1.0.0",
|
||||
"readable-stream": "^3.4.0",
|
||||
"safe-stable-stringify": "^2.3.1",
|
||||
"stack-trace": "0.0.x",
|
||||
"triple-beam": "^1.3.0",
|
||||
"winston-transport": "^4.7.0"
|
||||
"winston-transport": "^4.9.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 12.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/winston-transport": {
|
||||
"version": "4.8.0",
|
||||
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.8.0.tgz",
|
||||
"integrity": "sha512-qxSTKswC6llEMZKgCQdaWgDuMJQnhuvF5f2Nk3SNXc4byfQ+voo2mX1Px9dkNOuR8p0KAjfPG29PuYUSIb+vSA==",
|
||||
"version": "4.9.0",
|
||||
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz",
|
||||
"integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"logform": "^2.6.1",
|
||||
"readable-stream": "^4.5.2",
|
||||
"logform": "^2.7.0",
|
||||
"readable-stream": "^3.6.2",
|
||||
"triple-beam": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 12.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/winston-transport/node_modules/readable-stream": {
|
||||
"version": "4.5.2",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
|
||||
"integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"abort-controller": "^3.0.0",
|
||||
"buffer": "^6.0.3",
|
||||
"events": "^3.3.0",
|
||||
"process": "^0.11.10",
|
||||
"string_decoder": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
}
|
||||
"node_modules/winston/node_modules/async": {
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
|
||||
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/wrap-ansi": {
|
||||
"version": "7.0.0",
|
||||
|
||||
+5
-2
@@ -1,6 +1,9 @@
|
||||
const isURL = (ustr) => {
|
||||
try { return new URL(ustr) }
|
||||
catch (err) { return null }
|
||||
try {
|
||||
const validProtocols = ['http:', 'https:', 'ftp:', 'ftps:', 'sftp:', 'ws:', 'wss:', 'mailto:', 'tel:', 'file:', 'data:', 'irc:', 'geo:', 'rtsp:', 'magnet:'],
|
||||
url = new URL(ustr);
|
||||
return validProtocols.includes(url.protocol) ? url : false;
|
||||
} catch { return false; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -4,6 +4,12 @@ const renderPosts = require('../JS/posts.cjs');
|
||||
const renderReplies = require('../JS/replies.cjs');
|
||||
const { displayUploadStatus, renderCompose } = require('../JS/compose.cjs');
|
||||
|
||||
|
||||
const disableTab = (tabid) => {
|
||||
const el = document.querySelector(`#${tabid}Btn`);
|
||||
el.outerHTML = '<button id="likesBtn" class="notallowed">Likes</button>'
|
||||
}
|
||||
|
||||
async function handleFileDialogue(e) {
|
||||
try {
|
||||
const file = e.target.files[0];
|
||||
@@ -46,11 +52,15 @@ const appendEOF = (divid) => {
|
||||
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
if (window.location.pathname.endsWith('/post.html')) return require('../JS/singlepost.cjs')(ipcRenderer);
|
||||
|
||||
renderCompose(ipcRenderer);
|
||||
const query = new URLSearchParams(window.location.search);
|
||||
const utag = query.get('profile') || '@me';
|
||||
|
||||
ipcRenderer.on('udata', (e, dataRaw) => {
|
||||
// REMOVE ALL CURSORS
|
||||
sessionStorage.clear();
|
||||
setupMutationObserver();
|
||||
|
||||
const data = JSON.parse(dataRaw),
|
||||
@@ -71,7 +81,8 @@ window.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
if (data.posts) renderPosts(data.posts, data.likes || [], pObj?.pinnedPost, ipcRenderer);
|
||||
if (data.replies) renderReplies(data.replies);
|
||||
if (data.likes) renderPosts(data.likes, data.likes, null, ipcRenderer, 'bskylikeid', 'likes');
|
||||
if (data.likes?.length) renderPosts(data.likes, data.likes, null, ipcRenderer, 'bskylikeid', 'likes');
|
||||
else disableTab('likes');
|
||||
if (data.media) renderPosts(data.media.data, data.likes, null, ipcRenderer, 'bskymediaid', 'media');
|
||||
});
|
||||
|
||||
@@ -105,7 +116,6 @@ window.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
ipcRenderer.on('posts', (e, rawData) => {
|
||||
const data = JSON.parse(rawData);
|
||||
console.log(data);
|
||||
|
||||
// reset all videos because the cache was cleared
|
||||
document.querySelectorAll('.post-card video').forEach(video => {
|
||||
@@ -115,10 +125,12 @@ window.addEventListener('DOMContentLoaded', () => {
|
||||
});
|
||||
|
||||
if (data.err) return alert(data.err);
|
||||
if (data.feed) renderPosts(data.posts, data.likes?.map(o => ({ posturi: o.post.uri, likeuri: o.post.viewer?.like })), null, ipcRenderer);
|
||||
if (data.posts.feed) renderPosts(data.posts.feed, data.likes?.feed, null, ipcRenderer);
|
||||
|
||||
if (data.cursor) sessionStorage.setItem('postcursor', data.cursor);
|
||||
if (data.posts.cursor) sessionStorage.setItem('postcursor', data.posts.cursor);
|
||||
else sessionStorage.removeItem('postcursor');
|
||||
|
||||
if (data.likes.cursor) sessionStorage.setItem('likescursor', data.likes.cursor);
|
||||
});
|
||||
|
||||
ipcRenderer.on('likes', (e, data) => {
|
||||
|
||||
Reference in New Issue
Block a user