A decentralized music tracking and discovery platform built on AT Protocol 🎵

Replace console logs with consola

Add consola to apps/web dependencies and switch console.* calls to
consola.* across components and libs. Update bun.lock to include
consola and bump @rocksky/cli version to 0.3.4

+25 -14
+1
apps/web/package.json
··· 47 47 "@vitest/ui": "^3.0.4", 48 48 "axios": "^1.7.9", 49 49 "baseui": "15.0.0", 50 + "consola": "^3.4.2", 50 51 "copy-to-clipboard": "^3.3.3", 51 52 "date-fns": "^4.1.0", 52 53 "dayjs": "^1.11.13",
+2 -1
apps/web/src/components/ContextMenu/ContextMenu.tsx
··· 2 2 import { EllipsisHorizontal } from "@styled-icons/ionicons-sharp"; 3 3 import { NestedMenus, StatefulMenu } from "baseui/menu"; 4 4 import { StatefulPopover } from "baseui/popover"; 5 + import consola from "consola"; 5 6 6 7 export type ContextMenuProps = { 7 8 file: { ··· 65 66 }, 66 67 ]} 67 68 onItemSelect={({ item }) => { 68 - console.log(`Selected item: ${item.label}`); 69 + consola.log(`Selected item: ${item.label}`); 69 70 close(); 70 71 }} 71 72 overrides={{
+3 -2
apps/web/src/components/StickyPlayer/StickyPlayerWithData.tsx
··· 8 8 import useLike from "../../hooks/useLike"; 9 9 import useSpotify from "../../hooks/useSpotify"; 10 10 import StickyPlayer from "./StrickyPlayer"; 11 + import { consola } from "consola"; 11 12 12 13 function StickyPlayerWithData() { 13 14 const [liked, setLiked] = useState<Record<string, boolean>>({}); ··· 330 331 } 331 332 }; 332 333 333 - console.log(">> WebSocket connection opened"); 334 + consola.info(">> WebSocket connection opened"); 334 335 }; 335 336 336 337 return () => { ··· 340 341 } 341 342 ws.close(); 342 343 } 343 - console.log(">> WebSocket connection closed"); 344 + consola.log(">> WebSocket connection closed"); 344 345 }; 345 346 }, []); 346 347
+3 -2
apps/web/src/hooks/useProfile.tsx
··· 10 10 } from "../api/profile"; 11 11 import { profileAtom } from "../atoms/profile"; 12 12 import { API_URL } from "../consts"; 13 + import consola from "consola"; 13 14 14 15 export const useProfileByDidQuery = (did: string) => 15 16 useQuery({ ··· 110 111 (error && localStorage.getItem("token")) 111 112 ) { 112 113 if (data === "Unauthorized") { 113 - console.log(">> Unauthorized"); 114 + consola.log(">> Unauthorized"); 114 115 localStorage.removeItem("token"); 115 116 } 116 117 } ··· 125 126 (error && localStorage.getItem("token")) 126 127 ) { 127 128 if (data === "Unauthorized" && localStorage.getItem("token")) { 128 - console.log(">> error", error, ">> data", data); // localStorage.clear(); 129 + consola.log(">> error", error, ">> data", data); // localStorage.clear(); 129 130 window.location.href = "/"; 130 131 } 131 132 return {
+2 -1
apps/web/src/layouts/Main.tsx
··· 17 17 import Search from "./Search"; 18 18 import SpotifyLogin from "./SpotifyLogin"; 19 19 import { IconEye, IconEyeOff, IconLock } from "@tabler/icons-react"; 20 + import { consola } from "consola"; 20 21 21 22 const Container = styled.div` 22 23 display: flex; ··· 97 98 window.location.href = "/"; 98 99 } 99 100 } catch (e) { 100 - console.error(e); 101 + consola.error(e); 101 102 } 102 103 }; 103 104 fetchToken();
+2 -1
apps/web/src/lib/metadata.ts
··· 1 + import consola from "consola"; 1 2 import init, { extract_audio_metadata } from "../pkg/raichu"; 2 3 3 4 export class Metadata { ··· 11 12 12 13 await init(); // Initialize WASM 13 14 this.metadata = extract_audio_metadata(uint8Array); 14 - console.log(">> Metadata Loaded Successfully"); 15 + consola.log(">> Metadata Loaded Successfully"); 15 16 } 16 17 17 18 get_metadata() {
+2 -1
apps/web/src/lib/player.ts
··· 1 1 import init, { AudioDecoder } from "../pkg/raichu"; 2 + import consola from "consola"; 2 3 3 4 class AudioPlayer { 4 5 private audioContext: AudioContext | null = null; ··· 33 34 } 34 35 } 35 36 36 - console.log(">> Audio Loaded Successfully"); 37 + consola.info(">> Audio Loaded Successfully"); 37 38 } 38 39 39 40 play(offset = 0) {
+4 -3
apps/web/src/pages/dropbox/Dropbox.tsx
··· 11 11 import Main from "../../layouts/Main"; 12 12 import { File } from "../../types/file"; 13 13 import { AudioFile, Directory } from "./styles"; 14 + import consola from "consola"; 14 15 15 16 const columnHelper = createColumnHelper<File>(); 16 17 ··· 22 23 const { data, isLoading } = useFilesQuery(props.fileId); 23 24 24 25 const playFile = async (id: string) => { 25 - console.log(">> Playing file:", id); 26 + consola.log(">> Playing file:", id); 26 27 /* 27 28 const { link } = await getTemporaryLink(id); 28 - console.log(">> Playing file:", link); 29 + consola.log(">> Playing file:", link); 29 30 const m = new Metadata(); 30 31 await m.load(link); 31 - console.log(">> Metadata:", m.get_metadata()); 32 + consola.log(">> Metadata:", m.get_metadata()); 32 33 */ 33 34 }; 34 35
+2 -1
apps/web/src/pages/home/feed/Feed.tsx
··· 21 21 useScrobbleInfiniteQuery, 22 22 } from "../../../hooks/useFeed"; 23 23 import FeedGenerators from "./FeedGenerators"; 24 + import { consola } from "consola"; 24 25 25 26 dayjs.extend(relativeTime); 26 27 ··· 90 91 } 91 92 ws.close(); 92 93 } 93 - console.log(">> WebSocket connection closed"); 94 + consola.info(">> WebSocket connection closed"); 94 95 }; 95 96 }, [queryClient, feedUri]); 96 97
+2 -1
apps/web/src/pages/profile/library/Library.tsx
··· 7 7 import TopArtists from "../overview/topartists"; 8 8 import TopTracks from "../overview/toptracks"; 9 9 import Albums from "./albums"; 10 + import consola from "consola"; 10 11 11 12 export type LibraryProps = { 12 13 activeKey?: string; ··· 17 18 _.get(props, "activeKey", "0"), 18 19 ); 19 20 const { tab } = useSearch({ strict: false }); 20 - console.log("tab", tab); 21 + consola.info("tab", tab); 21 22 22 23 useEffect(() => { 23 24 if (!tab) {
+2 -1
bun.lock
··· 103 103 }, 104 104 "apps/cli": { 105 105 "name": "@rocksky/cli", 106 - "version": "0.3.0", 106 + "version": "0.3.4", 107 107 "bin": { 108 108 "rocksky": "./dist/index.js", 109 109 }, ··· 227 227 "@vitest/ui": "^3.0.4", 228 228 "axios": "^1.7.9", 229 229 "baseui": "15.0.0", 230 + "consola": "^3.4.2", 230 231 "copy-to-clipboard": "^3.3.3", 231 232 "date-fns": "^4.1.0", 232 233 "dayjs": "^1.11.13",