added single post viewing

This commit is contained in:
2024-11-25 19:12:54 -05:00
parent eb9b093485
commit a7f6ecf477
13 changed files with 733 additions and 411 deletions
+16
View File
@@ -18,6 +18,7 @@
display: inline-block; /* makes each card flow naturally into columns */ display: inline-block; /* makes each card flow naturally into columns */
margin-bottom: 16px; /* adds space between items vertically */ margin-bottom: 16px; /* adds space between items vertically */
width: 100%; /* ensures card takes up the column width */ width: 100%; /* ensures card takes up the column width */
cursor: pointer;
} }
@@ -130,6 +131,7 @@
margin-top: 12px; margin-top: 12px;
width: 100%; width: 100%;
text-align: right; text-align: right;
cursor: default;
} }
/* repost section styling */ /* repost section styling */
@@ -251,6 +253,7 @@
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-top: 10px; margin-top: 10px;
cursor: default;
} }
/* individual action buttons */ /* individual action buttons */
@@ -374,3 +377,16 @@
background-color: #ffcc00; background-color: #ffcc00;
color: #4e004e; color: #4e004e;
} }
.external-embed-container img {
width: -webkit-fill-available;
}
.notallowed {
cursor: not-allowed !important;
color: #737373 !important;
}
.notallowed:hover {
background-color: transparent !important;
}
+228
View File
@@ -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
View File
@@ -1,10 +1,9 @@
/* zoom container styles */ /* zoom container styles */
.zoom-container { .zoom-container {
top: 5vh; top: 5vh;
position: fixed; position: fixed;
display: inline-block; display: inline-block;
overflow: hidden; /* overflow: hidden; */
cursor: pointer; cursor: pointer;
max-height: 90vh; max-height: 90vh;
max-width: 90vw; max-width: 90vw;
@@ -12,6 +11,10 @@
z-index: 9999; z-index: 9999;
} }
.hidden {
display: none;
}
/* initial image styling */ /* initial image styling */
.zoom-video, .zoom-image { .zoom-video, .zoom-image {
max-height: 88vh; max-height: 88vh;
@@ -20,6 +23,7 @@
cursor: pointer; cursor: pointer;
border-radius: 8px; border-radius: 8px;
border: solid 2px lightblue; border: solid 2px lightblue;
width: auto;
} }
/* styles for full-screen zoomed view */ /* styles for full-screen zoomed view */
+1 -1
View File
@@ -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 --> <!-- 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"> <img src="../assets/loading-transparent.gif">
</div> </div>
<div id="imgzoom" class="zoom-container zoomed"> <div id="imgzoom" class="zoom-container zoomed hidden">
<img src="" alt="Zoomable Image" class="zoom-image" /> <img src="" alt="Zoomable Image" class="zoom-image" />
<video src="" alt="Zoomable VIdeo" class="zoom-video" controls></video> <video src="" alt="Zoomable VIdeo" class="zoom-video" controls></video>
</div> </div>
+20
View File
@@ -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
View File
@@ -9,9 +9,10 @@ function zoomimg(e) {
zoomContainer.querySelector('img').style.display = ''; zoomContainer.querySelector('img').style.display = '';
zoomContainer.querySelector('img').src = src; zoomContainer.querySelector('img').src = src;
zoomContainer.classList.toggle('zoomed');
overlayEl.classList.toggle('hidden'); overlayEl.classList.toggle('hidden');
overlayEl.classList.toggle('show'); zoomContainer.classList.toggle('zoomed');
zoomContainer.classList.toggle('hidden');
document.querySelector('.profile-container').classList.toggle('.noscroll'); document.querySelector('.profile-container').classList.toggle('.noscroll');
} }
@@ -374,6 +375,8 @@ function setupWorker(name = 'bktemp') {
} }
} }
const statArr = [0, 0];
/** /**
* @param {*} post * @param {*} post
* @param {*} a * @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(); const cardId = (post?.reply?.root?.uri || post.post.uri)?.trim();
// if the card exists, use it; otherwise, create a new card // 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 { else {
card = document.createElement('div'); card = document.createElement('div');
card.classList.add('post-card'); card.classList.add('post-card');
card.dataset[`${idkey}`] = cardId; 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 // 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); 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')) { if (post.post.embed && post.post.embed.$type === 'app.bsky.embed.video#view' && !card.querySelector('.post-video')) {
const videoContainer = createVideoEl(), videoPlayer = videoContainer.querySelector('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'); const linkElement = document.createElement('a');
linkElement.classList.add('external-embed-link'); linkElement.classList.add('external-embed-link');
linkElement.href = embed.uri; linkElement.href = embed.uri;
linkElement.target = '_blank'; // opens in a new tab linkElement.target = '_blank';
linkElement.rel = 'noopener noreferrer'; // improves security linkElement.rel = 'noopener noreferrer'; // improves security (apparently)
linkElement.textContent = 'Visit'; linkElement.textContent = 'Visit';
// append elements to the container
embedContainer.appendChild(titleElement); embedContainer.appendChild(titleElement);
embedContainer.appendChild(descriptionElement); embedContainer.appendChild(descriptionElement);
embedContainer.appendChild(linkElement); 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 // add the card to the container if it's a new card
if (!a.has(cardId)) { 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; if (lurl) card.dataset.likeuri = lurl.likeuri;
card.appendChild(createButtonEls(card, ipcRenderer, idkey, containerid)); card.appendChild(createButtonEls(card, ipcRenderer, idkey, containerid));
container.appendChild(card); container.appendChild(card);
@@ -652,12 +662,15 @@ module.exports = function renderPosts(posts, likes, pinnedPost, ipcRenderer, idk
a = new Map(); a = new Map();
} }
statArr[0] = 0;
statArr[1] = 0;
for (const post of posts) { for (const post of posts) {
try { try {
renderPostSingle( renderPostSingle(
post, post,
a, 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, ipcRenderer,
container, container,
idkey, 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.info(`added ${statArr[1]} and updated ${statArr[0]} posts in "${containerid}"!`);
console.log(postids);
// const postids = Array.from(document.querySelectorAll(`[data-${idkey}]`)).map(o => o.dataset[`${idkey} `]);
// console.log('duplicate ids', postids);
// "force" garbage collection // "force" garbage collection
// delete a; // delete a;
+1 -1
View File
@@ -95,7 +95,7 @@ function togglerelaxed(e) {
container.classList.remove('cards-container-relaxed'); container.classList.remove('cards-container-relaxed');
container.classList.add('cards-container'); container.classList.add('cards-container');
} else { } 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.remove('cards-container');
container.classList.add('cards-container-relaxed'); container.classList.add('cards-container-relaxed');
} }
+185
View File
@@ -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
View File
@@ -127,7 +127,8 @@ async function getUserData(utag, allData = false) {
if (allData) { if (allData) {
const { data: { feed, cursor } } = await agent.getAuthorFeed({ actor: output.profile.did, limit: 20, includePins: true }), 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.likes = likes;
output.likesCursor = likesCursor; output.likesCursor = likesCursor;
@@ -140,7 +141,8 @@ async function getUserData(utag, allData = false) {
return output; return output;
} catch (err) { } catch (err) {
logger.error('failed to fetch user data:', err); console.error(err);
logger.error(`failed to fetch user data for ${utag}:`);
return {}; return {};
} }
} }
@@ -151,17 +153,27 @@ export const getPosts = async (utag, cursor = undefined, likesCursor = undefined
const did = await getDID(utag); const did = await getDID(utag);
if (!did) return { err: 'DID not found!' }; if (!did) return { err: 'DID not found!' };
const likes = await agent.getActorLikes({ actor: did, cursor: likesCursor }), const likes = await agent.getActorLikes({ actor: did, cursor: likesCursor }).catch(_ => ({ data: [] })),
posts = await agent.getAuthorFeed({ actor: did, limit: 20, includePins: true, cursor }); posts = await agent.getAuthorFeed({ actor: did, limit: 30, includePins: true, cursor });
return { posts, likes }; return { posts: posts.data, likes: likes.data };
} }
catch (err) { catch (err) {
console.error(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) => { export const getLikes = async (utag, cursor = undefined) => {
try { try {
const did = await getDID(utag); const did = await getDID(utag);
@@ -269,5 +281,7 @@ export async function setupIPC() {
ipcMain.handle('new-post', post); ipcMain.handle('new-post', post);
ipcMain.handle('upload-file', handleFileOpen); ipcMain.handle('upload-file', handleFileOpen);
ipcMain.handle('post-action', async (e, action, id, condition) => await handlePostAction(e, action, id, agent, condition)); ipcMain.handle('post-action', async (e, action, id, condition) => await handlePostAction(e, action, id, agent, condition));
ipcMain.handle('get-post-single', getPost);
} }
+12
View File
@@ -51,6 +51,18 @@ const createMainWindow = () => {
mainWindow = null // dereference the window object when closed 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.on('did-navigate', (_, url) => {
mainWindow.webContents.executeJavaScript('document.title') mainWindow.webContents.executeJavaScript('document.title')
.then(title => insertHistory(url, title)); .then(title => insertHistory(url, title));
+197 -384
View File
@@ -23,15 +23,15 @@
} }
}, },
"node_modules/@atproto/api": { "node_modules/@atproto/api": {
"version": "0.13.14", "version": "0.13.18",
"resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.13.14.tgz", "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.13.18.tgz",
"integrity": "sha512-CG5UpjI1WwSasSJTGadmr07EwWvl5JV658YZHcwIIg+Psk5sDloQOUJckuo1MP6wke1z6p/BUoPL4lxAATzMzA==", "integrity": "sha512-rrl5HhzGYWZ7fiC965TPBUOVItq9M4dxMb6qz8IvAVQliSkrJrKc7UD0QWL89QiiXaOBuX8w+4i5r4wrfBGddg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@atproto/common-web": "^0.3.1", "@atproto/common-web": "^0.3.1",
"@atproto/lexicon": "^0.4.2", "@atproto/lexicon": "^0.4.3",
"@atproto/syntax": "^0.3.0", "@atproto/syntax": "^0.3.1",
"@atproto/xrpc": "^0.6.3", "@atproto/xrpc": "^0.6.4",
"await-lock": "^2.2.2", "await-lock": "^2.2.2",
"multiformats": "^9.9.0", "multiformats": "^9.9.0",
"tlds": "^1.234.0", "tlds": "^1.234.0",
@@ -51,31 +51,31 @@
} }
}, },
"node_modules/@atproto/lexicon": { "node_modules/@atproto/lexicon": {
"version": "0.4.2", "version": "0.4.3",
"resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.2.tgz", "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.3.tgz",
"integrity": "sha512-CXoOkhcdF3XVUnR2oNgCs2ljWfo/8zUjxL5RIhJW/UNLp/FSl+KpF8Jm5fbk8Y/XXVPGRAsv9OYfxyU/14N/pw==", "integrity": "sha512-lFVZXe1S1pJP0dcxvJuHP3r/a+EAIBwwU7jUK+r8iLhIja+ml6NmYv8KeFHmIJATh03spEQ9s02duDmFVdCoXg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@atproto/common-web": "^0.3.1", "@atproto/common-web": "^0.3.1",
"@atproto/syntax": "^0.3.0", "@atproto/syntax": "^0.3.1",
"iso-datestring-validator": "^2.2.2", "iso-datestring-validator": "^2.2.2",
"multiformats": "^9.9.0", "multiformats": "^9.9.0",
"zod": "^3.23.8" "zod": "^3.23.8"
} }
}, },
"node_modules/@atproto/syntax": { "node_modules/@atproto/syntax": {
"version": "0.3.0", "version": "0.3.1",
"resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.3.0.tgz", "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.3.1.tgz",
"integrity": "sha512-Weq0ZBxffGHDXHl9U7BQc2BFJi/e23AL+k+i5+D9hUq/bzT4yjGsrCejkjq0xt82xXDjmhhvQSZ0LqxyZ5woxA==", "integrity": "sha512-fzW0Mg1QUOVCWUD3RgEsDt6d1OZ6DdFmbKcDdbzUfh0t4rhtRAC05KbZYmxuMPWDAiJ4BbbQ5dkAc/mNypMXkw==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@atproto/xrpc": { "node_modules/@atproto/xrpc": {
"version": "0.6.3", "version": "0.6.4",
"resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.6.3.tgz", "resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.6.4.tgz",
"integrity": "sha512-S3tRvOdA9amPkKLll3rc4vphlDitLrkN5TwWh5Tu/jzk7mnobVVE3akYgICV9XCNHKjWM+IAPxFFI2qi+VW6nQ==", "integrity": "sha512-9ZAJ8nsXTqC4XFyS0E1Wlg7bAvonhXQNQ3Ocs1L1LIwFLXvsw/4fNpIHXxvXvqTCVeyHLbImOnE9UiO1c/qIYA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@atproto/lexicon": "^0.4.2", "@atproto/lexicon": "^0.4.3",
"zod": "^3.23.8" "zod": "^3.23.8"
} }
}, },
@@ -121,6 +121,51 @@
"global-agent": "^3.0.0" "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": { "node_modules/@electron/node-gyp": {
"version": "10.2.0-electron.1", "version": "10.2.0-electron.1",
"resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", "resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2",
@@ -146,23 +191,10 @@
"node": ">=12.13.0" "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": { "node_modules/@electron/rebuild": {
"version": "3.7.0", "version": "3.7.1",
"resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.0.tgz", "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.1.tgz",
"integrity": "sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==", "integrity": "sha512-sKGD+xav4Gh25+LcLY0rjIwcCFTw+f/HU1pB48UVbwxXXRGaXEqIH0AaYKN46dgd/7+6kuiDXzoyAEvx1zCsdw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -188,57 +220,6 @@
"node": ">=12.13.0" "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": { "node_modules/@emnapi/runtime": {
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", "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": "^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": { "node_modules/@npmcli/move-file": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz",
@@ -755,9 +723,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "20.17.6", "version": "20.17.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.7.tgz",
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==", "integrity": "sha512-sZXXnpBFMKbao30dUAvzKbdwA2JM1fwUtVEq/kxKuPI5mMwZiRElCpTXb0Biq/LMEVpXDZL5G5V0RPnxKeyaYg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -798,18 +766,6 @@
"dev": true, "dev": true,
"license": "ISC" "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": { "node_modules/agent-base": {
"version": "6.0.2", "version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "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" "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": { "node_modules/async": {
"version": "3.2.6", "version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
"license": "MIT"
}, },
"node_modules/asynckit": { "node_modules/asynckit": {
"version": "0.4.0", "version": "0.4.0",
@@ -983,7 +918,26 @@
"readable-stream": "^3.4.0" "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", "version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
@@ -1007,49 +961,6 @@
"ieee754": "^1.1.13" "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": { "node_modules/buffer-crc32": {
"version": "0.2.13", "version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "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": "^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": { "node_modules/cacheable-lookup": {
"version": "5.0.4", "version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
@@ -1147,10 +1048,14 @@
} }
}, },
"node_modules/chownr": { "node_modules/chownr": {
"version": "1.1.4", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
"license": "ISC" "dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
}, },
"node_modules/clean-stack": { "node_modules/clean-stack": {
"version": "2.2.0", "version": "2.2.0",
@@ -1227,28 +1132,34 @@
} }
}, },
"node_modules/color": { "node_modules/color": {
"version": "3.2.1", "version": "4.2.3",
"resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
"integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"color-convert": "^1.9.3", "color-convert": "^2.0.1",
"color-string": "^1.6.0" "color-string": "^1.9.0"
},
"engines": {
"node": ">=12.5.0"
} }
}, },
"node_modules/color-convert": { "node_modules/color-convert": {
"version": "1.9.3", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"color-name": "1.1.3" "color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
} }
}, },
"node_modules/color-name": { "node_modules/color-name": {
"version": "1.1.3", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/color-string": { "node_modules/color-string": {
@@ -1271,6 +1182,31 @@
"text-hex": "1.0.x" "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": { "node_modules/combined-stream": {
"version": "1.0.8", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -1291,9 +1227,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/cron": { "node_modules/cron": {
"version": "3.1.9", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/cron/-/cron-3.1.9.tgz", "resolved": "https://registry.npmjs.org/cron/-/cron-3.2.1.tgz",
"integrity": "sha512-eNZu+YhLRHLxNJNqZgYuy8mXhzMV0XXmOSh+Ls2j1yTeQLCQ04ya7oNpujxwl4lEyck1fcVa1aRVZ+T4tAC7SA==", "integrity": "sha512-w2n5l49GMmmkBFEsH9FIDhjZ1n1QgTMOCMGuQtOXs5veNiosZmso6bQGuqOJSYAXXrG84WQFVneNk+Yt0Ua9iw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/luxon": "~3.4.0", "@types/luxon": "~3.4.0",
@@ -1301,9 +1237,9 @@
} }
}, },
"node_modules/cross-spawn": { "node_modules/cross-spawn": {
"version": "7.0.5", "version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -1457,9 +1393,9 @@
"optional": true "optional": true
}, },
"node_modules/electron": { "node_modules/electron": {
"version": "33.1.0", "version": "33.2.0",
"resolved": "https://registry.npmjs.org/electron/-/electron-33.1.0.tgz", "resolved": "https://registry.npmjs.org/electron/-/electron-33.2.0.tgz",
"integrity": "sha512-7KiY6MtRo1fVFLPGyHS7Inh8yZfrbUTy43nNwUgMD2CBk729BgSwOC2WhmcptNJVlzHJpVxSWkiVi2hp9mH/bw==", "integrity": "sha512-PVw1ICAQDPsnnsmpNFX/b1i/49h67pbSPxuIENd9K9WpGO1tsRaQt+K2bmXqTuoMJsbzIc75Ce8zqtuwBPqawA==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT", "license": "MIT",
@@ -1582,24 +1518,6 @@
"url": "https://github.com/sponsors/sindresorhus" "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": { "node_modules/expand-template": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
@@ -1672,11 +1590,6 @@
"node": ">=18" "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": { "node_modules/fluent-ffmpeg/node_modules/which": {
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -1736,18 +1649,18 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/fs-extra": { "node_modules/fs-extra": {
"version": "8.1.0", "version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"graceful-fs": "^4.2.0", "graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0", "jsonfile": "^6.0.1",
"universalify": "^0.1.0" "universalify": "^2.0.0"
}, },
"engines": { "engines": {
"node": ">=6 <7 || >=8" "node": ">=12"
} }
}, },
"node_modules/fs-minipass": { "node_modules/fs-minipass": {
@@ -1874,20 +1787,6 @@
"node": ">=10.0" "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": { "node_modules/globalthis": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
@@ -2277,11 +2176,14 @@
"optional": true "optional": true
}, },
"node_modules/jsonfile": { "node_modules/jsonfile": {
"version": "4.0.0", "version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
},
"optionalDependencies": { "optionalDependencies": {
"graceful-fs": "^4.1.6" "graceful-fs": "^4.1.6"
} }
@@ -2320,9 +2222,9 @@
} }
}, },
"node_modules/logform": { "node_modules/logform": {
"version": "2.6.1", "version": "2.7.0",
"resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz",
"integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@colors/colors": "1.6.0", "@colors/colors": "1.6.0",
@@ -2626,18 +2528,6 @@
"node": ">=10" "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": { "node_modules/node-api-version": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.0.tgz", "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.0.tgz",
@@ -2648,19 +2538,6 @@
"semver": "^7.3.5" "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": { "node_modules/nopt": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", "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": "^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": { "node_modules/progress": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -3133,13 +3001,15 @@
"optional": true "optional": true
}, },
"node_modules/semver": { "node_modules/semver": {
"version": "6.3.1", "version": "7.6.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"license": "ISC", "license": "ISC",
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
} }
}, },
"node_modules/semver-compare": { "node_modules/semver-compare": {
@@ -3206,49 +3076,6 @@
"@img/sharp-win32-x64": "0.33.5" "@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": { "node_modules/shebang-command": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -3505,6 +3332,12 @@
"tar-stream": "^2.1.4" "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": { "node_modules/tar-stream": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
@@ -3521,16 +3354,6 @@
"node": ">=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": { "node_modules/tar/node_modules/minipass": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
@@ -3641,13 +3464,13 @@
} }
}, },
"node_modules/universalify": { "node_modules/universalify": {
"version": "0.1.2", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">= 4.0.0" "node": ">= 10.0.0"
} }
}, },
"node_modules/util-deprecate": { "node_modules/util-deprecate": {
@@ -3683,56 +3506,46 @@
} }
}, },
"node_modules/winston": { "node_modules/winston": {
"version": "3.16.0", "version": "3.17.0",
"resolved": "https://registry.npmjs.org/winston/-/winston-3.16.0.tgz", "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz",
"integrity": "sha512-xz7+cyGN5M+4CmmD4Npq1/4T+UZaz7HaeTlAruFUTjk79CNMq+P6H30vlE4z0qfqJ01VHYQwd7OZo03nYm/+lg==", "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@colors/colors": "^1.6.0", "@colors/colors": "^1.6.0",
"@dabh/diagnostics": "^2.0.2", "@dabh/diagnostics": "^2.0.2",
"async": "^3.2.3", "async": "^3.2.3",
"is-stream": "^2.0.0", "is-stream": "^2.0.0",
"logform": "^2.6.0", "logform": "^2.7.0",
"one-time": "^1.0.0", "one-time": "^1.0.0",
"readable-stream": "^3.4.0", "readable-stream": "^3.4.0",
"safe-stable-stringify": "^2.3.1", "safe-stable-stringify": "^2.3.1",
"stack-trace": "0.0.x", "stack-trace": "0.0.x",
"triple-beam": "^1.3.0", "triple-beam": "^1.3.0",
"winston-transport": "^4.7.0" "winston-transport": "^4.9.0"
}, },
"engines": { "engines": {
"node": ">= 12.0.0" "node": ">= 12.0.0"
} }
}, },
"node_modules/winston-transport": { "node_modules/winston-transport": {
"version": "4.8.0", "version": "4.9.0",
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.8.0.tgz", "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz",
"integrity": "sha512-qxSTKswC6llEMZKgCQdaWgDuMJQnhuvF5f2Nk3SNXc4byfQ+voo2mX1Px9dkNOuR8p0KAjfPG29PuYUSIb+vSA==", "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"logform": "^2.6.1", "logform": "^2.7.0",
"readable-stream": "^4.5.2", "readable-stream": "^3.6.2",
"triple-beam": "^1.3.0" "triple-beam": "^1.3.0"
}, },
"engines": { "engines": {
"node": ">= 12.0.0" "node": ">= 12.0.0"
} }
}, },
"node_modules/winston-transport/node_modules/readable-stream": { "node_modules/winston/node_modules/async": {
"version": "4.5.2", "version": "3.2.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
"integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
"license": "MIT", "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/wrap-ansi": { "node_modules/wrap-ansi": {
"version": "7.0.0", "version": "7.0.0",
+5 -2
View File
@@ -1,6 +1,9 @@
const isURL = (ustr) => { const isURL = (ustr) => {
try { return new URL(ustr) } try {
catch (err) { return null } 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; }
} }
+16 -4
View File
@@ -4,6 +4,12 @@ const renderPosts = require('../JS/posts.cjs');
const renderReplies = require('../JS/replies.cjs'); const renderReplies = require('../JS/replies.cjs');
const { displayUploadStatus, renderCompose } = require('../JS/compose.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) { async function handleFileDialogue(e) {
try { try {
const file = e.target.files[0]; const file = e.target.files[0];
@@ -46,11 +52,15 @@ const appendEOF = (divid) => {
window.addEventListener('DOMContentLoaded', () => { window.addEventListener('DOMContentLoaded', () => {
if (window.location.pathname.endsWith('/post.html')) return require('../JS/singlepost.cjs')(ipcRenderer);
renderCompose(ipcRenderer); renderCompose(ipcRenderer);
const query = new URLSearchParams(window.location.search); const query = new URLSearchParams(window.location.search);
const utag = query.get('profile') || '@me'; const utag = query.get('profile') || '@me';
ipcRenderer.on('udata', (e, dataRaw) => { ipcRenderer.on('udata', (e, dataRaw) => {
// REMOVE ALL CURSORS
sessionStorage.clear();
setupMutationObserver(); setupMutationObserver();
const data = JSON.parse(dataRaw), 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.posts) renderPosts(data.posts, data.likes || [], pObj?.pinnedPost, ipcRenderer);
if (data.replies) renderReplies(data.replies); 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'); 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) => { ipcRenderer.on('posts', (e, rawData) => {
const data = JSON.parse(rawData); const data = JSON.parse(rawData);
console.log(data);
// reset all videos because the cache was cleared // reset all videos because the cache was cleared
document.querySelectorAll('.post-card video').forEach(video => { document.querySelectorAll('.post-card video').forEach(video => {
@@ -115,10 +125,12 @@ window.addEventListener('DOMContentLoaded', () => {
}); });
if (data.err) return alert(data.err); 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'); else sessionStorage.removeItem('postcursor');
if (data.likes.cursor) sessionStorage.setItem('likescursor', data.likes.cursor);
}); });
ipcRenderer.on('likes', (e, data) => { ipcRenderer.on('likes', (e, data) => {