- Update AccountWithExtension interface to be more flexible
- Add type guard for runtime type checking
- Change fetchBookmarks parameter to accept unknown type with validation
- All linting and type checks now pass
- Remove unused imports and variables
- Keep the enhanced debugging for multiple bookmark list events
- Use native applesauce getHiddenBookmarks which should trigger browser extension
- This follows the applesauce models pattern for handling private bookmarks
- Check multiple bookmark list events for encrypted content
- Add detailed logging for signer availability and type
- Use native applesauce getHiddenBookmarks which should trigger browser extension
- This will help identify why private bookmarks aren't being detected
- Fetch multiple bookmark list events (limit 10) to find private bookmarks
- Check all events for encrypted content before selecting one
- Add detailed logging to identify which event has encrypted content
- This should help find your private bookmarks if they exist in a different event
- Check if bookmark list has encrypted content
- Log content preview to understand the structure
- This will help determine why browser extension isn't triggered
- Use proper error handling for getHiddenBookmarks
- Add detailed logging to understand what's happening
- The browser extension should be triggered automatically when needed
- This follows the applesauce examples pattern for decryption
- Removed manual decryption implementation
- Back to using applesauce helpers directly
- The issue is likely that browser extension needs permission for decryption
- getHiddenBookmarks returns undefined because extension hasn't been triggered yet
- All linting passes
- Added detailed logging for account signer capabilities
- Check if account has signer with decrypt method
- This will help identify if the ExtensionAccount has proper NIP-44 decryption capabilities
- Following applesauce examples pattern for signer usage
- Added detailed logging to understand why getHiddenBookmarks returns undefined
- Check bookmark list content and encryption format
- Verify account has decryption capabilities
- Pass full account object with extension capabilities to applesauce helpers
- This will help diagnose the NIP-44 vs NIP-04 encryption issue
- Added processApplesauceBookmarks function to handle applesauce return format
- Fixed processing of {notes: [], articles: [], hashtags: [], urls: []} structure
- Added ApplesauceBookmarks interface for proper typing
- Now correctly processes all bookmark types from applesauce helpers
- Should now show all 13 bookmarks (12 notes + 1 article) instead of just 1
- All linting and type checking passes
- Created processBookmarks helper function to eliminate duplication
- Reduced public/private bookmark processing from 32 lines to 3 lines
- Simplified isPrivate check logic
- Maintained all functionality while improving maintainability
- File reduced from 117 to 105 lines (10% reduction)
- All linting and type checking passes
- Removed custom event fetching logic in favor of applesauce helpers
- Use getPublicBookmarks and getHiddenBookmarks directly from applesauce-core
- Simplified code from 152 lines to 105 lines (31% reduction)
- Added proper TypeScript interfaces for type safety
- Enhanced logging to debug bookmark fetching
- All linting and type checking passes
- Added getHiddenBookmarks from applesauce-core to fetch private bookmarks
- Created HiddenBookmarkData interface for proper typing
- Handle both array and object return types from getHiddenBookmarks
- Combine public and private bookmarks in the final result
- Maintain type safety with proper TypeScript interfaces
- All linting and type checking passes
- Extracted fetchEvent helper function to eliminate duplication
- Simplified main fetchBookmarks function with cleaner logic
- Used Promise.all for parallel event fetching instead of sequential loops
- Consolidated private bookmark CSS styles and removed duplicates
- Reduced file from 140 to 102 lines while maintaining functionality
- Removed unused imports and simplified error handling
- Updated bookmark types to support private bookmarks with isPrivate and encryptedContent fields
- Enhanced bookmark service to detect encrypted content and mark bookmarks as private
- Added visual indicators for private bookmarks with lock icon and special styling
- Added CSS styles for private bookmarks with red accent border and gradient background
- Updated BookmarkItem component to show private bookmark indicators
- Maintained compatibility with existing public bookmark functionality
- Replace direct signer method calls with applesauce hidden-content helpers
- Use unlockHiddenContent, getHiddenContent, and isHiddenContentLocked functions
- Add proper error handling for decryption failures
- This follows the correct applesauce pattern for NIP-44 decryption
- Add logging to inspect available methods on the applesauce signer
- Try multiple possible method names for NIP-44 decryption
- This will help identify the correct method name for decryption
- Update ActiveAccount interface to include signer property
- Modify fetchBookmarks to handle both kind 10003 (public) and kind 30001 (private) bookmark lists
- Implement NIP-44 decryption for private bookmarks using applesauce SimpleSigner
- Support both public tags and encrypted private content in categorized bookmarks
- Maintain backward compatibility with existing public bookmark functionality
- Update .bookmarks-list to use flex column layout with max-width
- Change .bookmarks-grid to flex column for individual bookmarks
- Add social media-like styling with shadows and hover effects
- Improve visual hierarchy and spacing for feed-like appearance
- Extract types to src/types/bookmarks.ts
- Extract utility functions to src/utils/bookmarkUtils.tsx
- Extract BookmarkItem component to src/components/BookmarkItem.tsx
- Extract BookmarkList component to src/components/BookmarkList.tsx
- Extract bookmark fetching logic to src/services/bookmarkService.ts
- Reduce main Bookmarks component from 416 to 100 lines
- Maintain all functionality while improving code organization
- Pass all linting and type checking
- Move timeoutId declaration outside try block to make it accessible in both try and catch blocks
- Fixes ESLint no-undef error and TypeScript compilation error
- Remove loading check from early return condition
- Add timeout to ensure loading state gets reset
- Clear timeout when function completes
- This should allow fetchBookmarks to run properly
- Add console logs to track if fetchBookmarks is called
- Log early return conditions
- This will help identify why the function might not be executing
- Fetch bookmark list event (kind 10003) first
- Extract event IDs from e tags
- Fetch each individual event by ID
- Remove complex async parsing logic
- Simplify to direct sequential fetching
- Remove unused functions
- Add broader test filter to see if user has any events
- Log event kinds to understand what events exist
- This will help diagnose if the issue is with bookmark events specifically
- Disable individual bookmark fetching to isolate the issue
- Keep basic bookmark list functionality working
- Add TODO to re-enable individual bookmark fetching later
- Add console logs to track bookmark fetching progress
- Add early return when no bookmark events found
- Reduce timeout for individual bookmark fetching
- Add debugging for individual bookmark fetching process
- Add IndividualBookmark interface for individual bookmark events
- Implement fetchIndividualBookmarks function to fetch events by e and a tags
- Update parseBookmarkEvent to be async and fetch individual bookmarks
- Add renderIndividualBookmark component for displaying individual bookmarks
- Update UI to show individual bookmarks in a grid layout
- Add CSS styles for individual bookmarks with dark/light mode support
- Support both event references (e tags) and article references (a tags)
- Use applesauce content parsing for proper content rendering
- Add event deduplication by ID to prevent duplicates from multiple relays
- Fix React key warnings by using unique keys with index
- Prevent multiple simultaneous fetchBookmarks calls with loading state check
- Optimize useEffect dependencies to only depend on pubkey
- Add logging for deduplication process
- Remove unused Loaders import from applesauce-loaders
- Remove unused NostrEvent import from nostr-tools
- Clean up imports to pass linting and type checking
- Replace addressLoader with direct relayPool usage
- Use relayPool.query() with proper filter for kind:10003 events
- Add RelayPool import to Bookmarks component
- Update TypeScript interfaces to use RelayPool instead of addressLoader
- Follow applesauce documentation pattern for querying events
- Call addressLoader as function with kind and pubkey parameters
- Update TypeScript interface to reflect function signature
- Add logging to show query configuration
- This should now properly query for kind:10003 events for the specific pubkey
- Remove unnecessary function type checking since addressLoader is always an Observable
- Update TypeScript interface to reflect Observable type
- Simplify code by directly subscribing to the Observable
- Remove redundant conditional logic
- Add type checking to handle addressLoader as either function or Observable
- Fix TypeError: addressLoader is not a function error
- Add debugging logs to understand addressLoader type at runtime
- Support both function and Observable patterns for addressLoader usage
- Log addressLoader creation and type in App.tsx
- Log addressLoader type and value in Bookmarks component
- This will help identify why addressLoader is not a function
- The error shows addressLoader exists but isn't callable
This should reveal what createAddressLoader actually returns.
- Remove intrusive alert popup
- Use console.log for all debugging output
- Maintain comprehensive logging for diagnosis
- Keep debugging professional and non-intrusive
Much better debugging approach! 🎯
- Add console logs for relay group creation and relay URLs
- Add detailed logging in Bookmarks useEffect to track dependencies
- Add alert to confirm bookmark fetch is starting
- Log addressLoader and activeAccount availability
- Track when fetchBookmarks is called vs when dependencies are missing
This will help diagnose why bookmarks aren't appearing and
why console logs might not be visible.
- Create relay group using pool.group() for better event deduplication
- Follow applesauce-relay documentation for relay group management
- Remove manual relay connection monitoring (handled by pool)
- Use pool directly with address loader for optimal performance
- Add logging for relay group creation
- Maintain extraRelays configuration for address loader
- Follow applesauce-relay best practices for relay pool usage
This follows the applesauce-relay documentation exactly as shown
in the Relay Group example, providing better deduplication and
connection management.
- Add wss://relay.nostr.band to relay list
- Increase relay diversity for better bookmark discovery
- nostr.band is a popular relay with good event coverage
This should improve the chances of finding bookmarks
across different relay networks.