2508 Commits

Author SHA1 Message Date
Gigi
610de95481 feat: improve private bookmark handling
- 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
2025-10-02 10:14:16 +02:00
Gigi
82c63e5d18 revert: remove manual decryption approach
- 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
2025-10-02 10:11:13 +02:00
Gigi
b112520056 debug: enhance account signer debugging
- 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
2025-10-02 10:06:37 +02:00
Gigi
06b15f3fe2 docs: update applesauce cursor rules
- Updated applesauce documentation reference
- Added guidance to use applesauce modules when possible
- Referenced examples directory for proper usage patterns
2025-10-02 10:05:11 +02:00
Gigi
4be8eff80a feat: add debugging for private bookmark decryption
- 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
2025-10-02 10:02:50 +02:00
Gigi
559e7ee944 fix: handle applesauce bookmark structure correctly
- 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
2025-10-02 09:46:04 +02:00
Gigi
7fd8e5341e chore: ignore applesauce directory in ESLint configuration
- Added 'applesauce' to ignorePatterns in package.json
- Prevents linting errors from dependency code
- Maintains focus on project-specific code quality
- ESLint now runs cleanly with 0 errors and 0 warnings
2025-10-02 09:44:57 +02:00
Gigi
211a89afbb refactor: eliminate code duplication with DRY principle
- 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
2025-10-02 09:43:53 +02:00
Gigi
695d3509ac refactor: simplify bookmark service using applesauce helpers
- 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
2025-10-02 09:43:17 +02:00
Gigi
7bb037f12a feat: implement getHiddenBookmarks for private bookmarks
- 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
2025-10-02 09:39:59 +02:00
Gigi
a7cfc802d1 fix: resolve linting and type checking issues
- Fixed TypeScript error by properly handling undefined activeAccount
- Removed unnecessary 'as any' type assertion
- All linting rules now pass with 0 warnings
- TypeScript compilation passes without errors
2025-10-02 09:38:32 +02:00
Gigi
465278742e refactor: simplify bookmark service and reduce code duplication
- 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
2025-10-02 09:37:41 +02:00
Gigi
79f83b214f feat: add private bookmarks support with NIP-51 and visual indicators
- 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
2025-10-02 09:36:46 +02:00
Gigi
170feb1bd7 fix: implement proper NIP-44 decryption using applesauce hidden-content helpers
- 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
2025-10-02 09:33:33 +02:00
Gigi
f37deefa36 chore: add applesauce directory to .gitignore
- Exclude applesauce/ directory from version control
- This directory likely contains examples or testing files that shouldn't be tracked
2025-10-02 09:31:40 +02:00
Gigi
ebdfa47bd8 debug: add signer method inspection 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
2025-10-02 09:27:28 +02:00
Gigi
6e57c6227c feat: add private bookmark fetching with NIP-44 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
2025-10-02 09:25:57 +02:00
Gigi
e0acd2f7e7 feat: change bookmarks display from grid to social feed list layout
- 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
2025-10-02 09:21:42 +02:00
Gigi
2253172e04 refactor: extract components and utilities to keep files under 210 lines
- 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
2025-10-02 09:19:44 +02:00
Gigi
15d155c565 fix: resolve undefined timeoutId variable in fetchBookmarks function
- 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
2025-10-02 09:17:05 +02:00
Gigi
9c34e8d806 chore: bump version to 0.0.2
- Version bump for working bookmark fetching functionality
- Individual bookmark display is now working correctly
v0.0.2
2025-10-02 09:16:15 +02:00
Gigi
934043f858 fix: resolve loading state stuck issue
- 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
2025-10-02 09:15:04 +02:00
Gigi
774ce0f1bf debug: add detailed logging to fetchBookmarks function
- Add console logs to track if fetchBookmarks is called
- Log early return conditions
- This will help identify why the function might not be executing
2025-10-02 09:14:24 +02:00
Gigi
6481dd1bed fix: remove unused NostrEvent import
- Fix TypeScript compilation error
- Remove unused import that was causing build issues
2025-10-02 09:13:43 +02:00
Gigi
d7b5b4f9b4 debug: add obvious console log to verify new code is running 2025-10-02 09:13:28 +02:00
Gigi
bed0f3d508 refactor: implement proper bookmark fetching flow
- 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
2025-10-02 09:12:05 +02:00
Gigi
44954a6c15 debug: add test filter to check if any events are found
- 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
2025-10-02 09:09:05 +02:00
Gigi
a43e742183 fix: temporarily disable individual bookmark fetching
- Disable individual bookmark fetching to isolate the issue
- Keep basic bookmark list functionality working
- Add TODO to re-enable individual bookmark fetching later
2025-10-02 09:08:51 +02:00
Gigi
a97808b23e debug: add debugging logs to bookmark fetching
- 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
2025-10-02 09:08:45 +02:00
Gigi
bf79bbceb8 feat: implement individual bookmark fetching and display
- 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
2025-10-02 09:05:32 +02:00
Gigi
e2690e7177 fix: resolve duplicate events and React key warnings
- 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
2025-10-02 09:00:23 +02:00
Gigi
4fb5babc0a fix: remove unused imports from App.tsx
- Remove unused Loaders import from applesauce-loaders
- Remove unused NostrEvent import from nostr-tools
- Clean up imports to pass linting and type checking
v0.0.1
2025-10-02 08:58:44 +02:00
Gigi
30c4057625 fix: implement correct applesauce RelayPool.req() pattern
- Replace relayPool.query() with relayPool.req() method
- Add proper RxJS imports (lastValueFrom, takeUntil, timer, toArray)
- Add completeOnEose from applesauce-relay for proper EOSE handling
- Use proper Filter type from nostr-tools
- Fix relay URLs extraction from RelayPool.relays Map
- Follow applesauce documentation pattern for event fetching
2025-10-02 08:58:07 +02:00
Gigi
53c1ce3c33 docs: add applesauce code snippets and examples to rules
- Add comprehensive applesauce documentation links
- Include code snippets for common applesauce patterns
- Add examples for different applesauce use cases
- Enhance development guidelines for applesauce module usage
2025-10-02 08:56:35 +02:00
Gigi
ae9f2607a1 fix: implement proper applesauce relay pool query pattern
- 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
2025-10-02 08:53:39 +02:00
Gigi
77b9a01a1d fix: properly configure addressLoader with query parameters
- 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
2025-10-02 08:51:37 +02:00
Gigi
ed1ea94662 refactor: simplify addressLoader usage as Observable
- 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
2025-10-02 08:47:15 +02:00
Gigi
d801af81a4 fix: handle addressLoader as both function and Observable
- 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
2025-10-02 08:45:55 +02:00
Gigi
ff7da4c6a2 debug: add detailed logging to diagnose addressLoader type issue
- 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.
2025-10-02 08:41:54 +02:00
Gigi
e1b87138b1 fix: replace alert with proper console.log debugging
- 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! 🎯
2025-10-02 08:39:23 +02:00
Gigi
f0cf31252f debug: add extensive logging and alerts to diagnose bookmark fetching
- 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.
2025-10-02 08:37:50 +02:00
Gigi
8058a99cf2 improve: optimize applesauce-relay usage following documentation patterns
- 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.
2025-10-02 08:37:05 +02:00
Gigi
3d8b19d05f feat: add nostr.band relay for better bookmark coverage
- 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.
2025-10-02 08:36:01 +02:00
Gigi
5d6e329030 fix: properly connect to relays and add debugging for bookmark fetching
- Connect to relays using pool.relay() before creating address loader
- Add relay connection event listeners for debugging
- Add console logging to track bookmark fetching process
- Increase timeout to 10 seconds for better relay response time
- Log received events and parsed bookmarks for debugging
- Track relay connection status and errors

This should fix the issue where bookmarks weren't being fetched
due to missing relay connections.
2025-10-02 08:34:59 +02:00
Gigi
c1e0e82704 feat: integrate applesauce-content for proper content parsing and rendering
- Install applesauce-content package for content parsing
- Use getParsedContent() to parse nostr content according to applesauce patterns
- Create proper TypeScript interfaces for ParsedNode and ParsedContent
- Add renderParsedContent() component to render parsed content with proper styling
- Handle mentions, links, and text content with appropriate styling
- Add CSS styles for nostr-mention and nostr-link classes
- Follow applesauce-content documentation patterns for content rendering
- Maintain type safety with proper interfaces instead of 'any' types

This follows the applesauce-content documentation exactly as shown
in the examples, providing proper content parsing and rendering.
2025-10-02 08:33:00 +02:00
Gigi
b6721f685b fix: properly parse NIP-51 bookmark lists (kind 10003) according to specification
- Parse bookmark lists correctly according to NIP-51 specification
- Handle 'e' tags for event references (the actual bookmarks)
- Handle 'a' tags for article references
- Handle 'r' tags for URL references
- Display bookmark count and organize references by type
- Show event IDs in a readable format with truncation
- Add proper CSS styling for bookmark list display
- Update Bookmark interface to include metadata fields

This fixes the issue where kind:10003 bookmark lists weren't being
displayed properly. Now follows the NIP-51 specification exactly
as shown in the example event structure.
2025-10-02 08:31:19 +02:00
Gigi
9eeda77132 improve: use applesauce-react event models for better profile handling
- Import useEventModel hook and Models from applesauce-core
- Use ProfileModel to automatically fetch and manage user profile data
- Display user name, display_name, or nip05 instead of just public key
- Follow applesauce-react best practices for event model usage
- Improve user experience with proper profile information display
- Maintain fallback to formatted public key if profile data unavailable

This follows the applesauce-react documentation pattern for using
event models instead of manual event parsing.
2025-10-02 08:29:38 +02:00
Gigi
208dbb17cf fix: resolve all linting and TypeScript issues
- Set up comprehensive ESLint configuration with TypeScript support
- Fix React import issues by adding explicit React imports
- Replace 'any' types with proper TypeScript types (unknown, specific interfaces)
- Add proper type definitions for addressLoader function signature
- Make relays parameter optional in addressLoader interface
- Fix TypeScript strict null checks and function call signatures
- Ensure all code passes ESLint with zero warnings
- Verify TypeScript compilation with no errors
- Maintain strict linting rules without reducing code quality

All linting and type checking now passes successfully.
2025-10-02 07:32:12 +02:00
Gigi
1b11d36de3 improve: optimize relay usage following applesauce-relay best practices
- Organize relay URLs in a centralized array for better maintainability
- Use RelayPool with extraRelays configuration for automatic relay management
- Remove manual relay specification in address loader calls
- Let the pool handle relay selection and deduplication automatically
- Add comments explaining relay group benefits and deduplication
- Follow applesauce-relay documentation patterns for efficient relay usage

This improves relay efficiency by letting the pool handle relay selection,
deduplication, and connection management automatically.
2025-10-02 07:30:18 +02:00
Gigi
b4ce082b91 refactor: use proper applesauce-loaders for NIP-51 bookmark fetching
- Replace manual event fetching with applesauce Address Loader
- Use Loaders.createAddressLoader() for proper replaceable event loading
- Configure loader with eventStore, bufferTime, and relay hints
- Remove manual RxJS subscription handling in favor of applesauce patterns
- Add applesauce-loaders dependency for specialized loading methods
- Clean up unused imports and variables
- Follow applesauce best practices for event loading

This implements the proper applesauce pattern for fetching kind:10003
bookmark events as recommended in the applesauce-loaders documentation.
2025-10-02 07:29:37 +02:00