chore: replace Ko-Fi with Support links, drop uninstall token

Switch the Ko-Fi support links to https://support.koalastuff.net across the
README badge, the extension footer (popup.html/template.html, label
"Support KoalaSync") and remove the now-unused KOFI_URL constant. Stop
generating/sending the anonymous uninstall token: initUninstallURL() now
registers the feedback URL without the `t` parameter or storage write.
CHANGELOG updated to match.

Also guard the client CMD_ACK path: only ACK a command sender that is still
a known peer in the room, so we don't emit ACKs to peers that already left
(which the server now drops as absent-peer ACKs anyway).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Timo
2026-06-19 16:26:54 +02:00
parent 027d2dbde5
commit 23d43741ce
4 changed files with 12 additions and 24 deletions
+1 -1
View File
@@ -138,7 +138,7 @@ gh attestation verify dist/koalasync-chrome.zip \
---
<div align="center">
<sub><a href="https://ko-fi.com/koaladev"><img src="https://img.shields.io/badge/Ko--Fi-Support-FF5E5B?logo=ko-fi&logoColor=white" alt="Ko-Fi"></a></sub>
<sub><a href="https://support.koalastuff.net"><img src="https://img.shields.io/badge/Support-KoalaSync-FF5E5B" alt="Support KoalaSync"></a></sub>
<sub><a href="https://gitgem.org/github/Shik3i/KoalaSync"><img src="https://gitgem.org/api/badge/github/Shik3i/KoalaSync.svg" alt="GitGem Badge" /></a></sub>
<sub>Built with ❤️ by <a href="https://github.com/Shik3i">Shik3i</a>. KoalaSync is Open Source under the <a href="LICENSE">MIT License</a>.</sub>
+2 -2
View File
@@ -7,7 +7,7 @@ All notable changes to the KoalaSync browser extension and relay server.
## [v2.4.2] — 2026-06-19
### Changed
- **Extension: Optimized uninstall URL registration** — Extracted registration into a reusable, race-condition-protected `initUninstallURL()` helper. It now generates a unique, anonymous token (`t`) stored in `chrome.storage.local` to securely track uninstalls, and registers the URL on both extension installation/update and browser startup to prevent state loss.
- **Extension: Optimized uninstall URL registration** — Extracted registration into a reusable, race-condition-protected `initUninstallURL()` helper. It registers the uninstall feedback URL with browser context on both extension installation/update and browser startup to prevent state loss, without storing or sending an installation token.
## [v2.4.1] — 2026-06-19
@@ -149,7 +149,7 @@ All notable changes to the KoalaSync browser extension and relay server.
- **Feature Hint System**: Generic `dismissedHints` array in sync storage for announcing new features. First hint highlights the Audio Options entry in Settings. Extensible for future features.
### Changed
- **Ko-Fi Support Links**: Static footer badges on the Settings and Status tabs linking to the developer's support page. README and website footer updated with Ko-Fi badge.
- **Support Links**: Static footer badges on the Settings and Status tabs linking to the developer's support page. README and website footer updated with a Support KoalaSync badge.
### Fixed
- **Portuguese (PT) locale**: Removed Italian contamination — "sincronizzazione" → "sincronização", "tempo reale" → "tempo real", "Link di Invito" → "Link de Convite", "Sair della Sala" → "Sair da Sala".
+9 -20
View File
@@ -19,24 +19,8 @@ async function initUninstallURL() {
if (UNINSTALL_URL && UNINSTALL_URL.trim() !== '') {
try {
if (typeof chrome === 'undefined' || !chrome.storage || !chrome.storage.local) {
console.warn("Storage API not available, skipping uninstall URL token generation");
return;
}
const data = await chrome.storage.local.get("koalaByeToken");
let token = data?.koalaByeToken;
if (!token) {
token = (typeof self.crypto !== 'undefined' && typeof self.crypto.randomUUID === 'function')
? self.crypto.randomUUID()
: Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
await chrome.storage.local.set({ koalaByeToken: token });
}
const url = new URL(UNINSTALL_URL);
url.searchParams.set("browser", BROWSER_TYPE);
url.searchParams.set("t", token);
const runtimeAPI = typeof browser !== 'undefined' ? browser.runtime : chrome.runtime;
if (runtimeAPI && runtimeAPI.setUninstallURL) {
@@ -1751,11 +1735,16 @@ async function handleAsyncMessage(message, sender, sendResponse) {
sendResponse({ status: 'ok' });
} else if (message.type === 'CMD_ACK') {
const commandSenderId = message.commandSenderId;
if (commandSenderId && commandSenderId !== peerId) {
emit(EVENTS.EVENT_ACK, {
senderId: peerId,
// Only ACK if the command sender is still a known peer in our room.
// If we've already seen their PEER_STATUS 'left', skip the ACK — it would
// only be dropped server-side as an absent-peer ACK anyway.
const senderStillPresent = currentRoom && Array.isArray(currentRoom.peers) &&
currentRoom.peers.some(p => (typeof p === 'object' ? p.peerId : p) === commandSenderId);
if (commandSenderId && commandSenderId !== peerId && senderStillPresent) {
emit(EVENTS.EVENT_ACK, {
senderId: peerId,
targetId: commandSenderId,
actionTimestamp: message.actionTimestamp
actionTimestamp: message.actionTimestamp
});
}
sendResponse({ status: 'ok' });
-1
View File
@@ -13,7 +13,6 @@ export const OFFICIAL_SERVER_URL = 'wss://syncserver.koalastuff.net';
export const OFFICIAL_LANDING_PAGE_URL = 'https://sync.koalastuff.net';
export const OFFICIAL_SERVER_TOKEN = '62170b705234c4f4807a9b22420bb93cf1a2aacfa4c5d3b47804482babb8eb50';
export const SUPPORT_URL = 'https://support.koalastuff.net';
export const KOFI_URL = 'https://ko-fi.com/koaladev';
export const GITHUB_URL = 'https://github.com/Shik3i/KoalaSync';
export function isFirefox() {