@@ -529,4 +534,4 @@ function TemplateQuote({ template }: { template: ParsedWorkoutTemplate }) {
);
-}
\ No newline at end of file
+}
diff --git a/components/social/SocialOfflineState.tsx b/components/social/SocialOfflineState.tsx
index b1fdc65..7e63322 100644
--- a/components/social/SocialOfflineState.tsx
+++ b/components/social/SocialOfflineState.tsx
@@ -59,19 +59,54 @@ export default function SocialOfflineState() {
);
}
+/**
+ * A component to display an offline banner at the top of social screens
+ */
+export function OfflineBanner() {
+ const { isOnline, checkConnection } = useConnectivity();
+
+ if (isOnline) return null;
+
+ return (
+
+
+
+
+
+ You're offline. Viewing cached content.
+
+
+
+
+ Check
+
+
+
+
+ );
+}
+
/**
* A higher-order component that wraps social screens to handle offline state
+ * Now shows an offline banner instead of replacing the entire component
*/
export function withOfflineState(
Component: React.ComponentType
): React.FC
{
return (props: P) => {
- const { isOnline } = useConnectivity();
-
- if (!isOnline) {
- return ;
- }
-
- return ;
+ return (
+
+
+
+
+ );
};
}
diff --git a/docs/consolelogs/20250324-2.md b/docs/consolelogs/20250324-2.md
new file mode 100644
index 0000000..2b5150f
--- /dev/null
+++ b/docs/consolelogs/20250324-2.md
@@ -0,0 +1,1056 @@
+ 💡 JavaScript logs will be removed from Metro in React Native 0.77! Please use React Native DevTools as your default tool. Tip: Type j in the terminal to open (requires Google Chrome or Microsoft Edge).
+ (NOBRIDGE) LOG [useFeedHooks] Initialized POWR pubkey hex: 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG expo-av is available, will use VideoSplashScreen on iOS
+ (NOBRIDGE) LOG Successfully imported VideoSplashScreen
+ (NOBRIDGE) LOG _layout.tsx loaded
+ (NOBRIDGE) LOG ⚠️ [expo-av]: Video component from `expo-av` is deprecated in favor of `expo-video`. See the documentation at https://docs.expo.dev/versions/latest/sdk/video/ for the new API reference.
+ (NOBRIDGE) LOG Starting app initialization in background...
+ (NOBRIDGE) LOG Network connectivity: offline
+ (NOBRIDGE) LOG [NDK] Initializing...
+ (NOBRIDGE) LOG [ConnectivityService] Network connection restored, triggering sync
+ (NOBRIDGE) LOG [NDK] Found saved private key, initializing signer
+ (NOBRIDGE) LOG [NDK] Login attempt starting
+ (NOBRIDGE) LOG [NDK] Processing private key input
+ (NOBRIDGE) LOG [NDK] Using provided key, format: hex length: 64
+ (NOBRIDGE) LOG [NDK] Creating signer with key length: 64
+ (NOBRIDGE) LOG [NDK] Signer created, setting on NDK
+ (NOBRIDGE) LOG [NDK] Getting user from signer
+ (NOBRIDGE) LOG [NDK] User retrieved, pubkey: 55127fc9...
+ (NOBRIDGE) LOG [NDK] Fetching user profile
+ (NOBRIDGE) LOG Video loaded successfully
+ (NOBRIDGE) LOG Video loaded, hiding native splash screen
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://powr.duckdns.org/
+ (NOBRIDGE) LOG [NDK] Relay disconnected: wss://purplepag.es/
+ (NOBRIDGE) LOG Loaded 0 favorite IDs from database
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.damus.io/
+ (NOBRIDGE) LOG [NDK] Profile fetched successfully
+ (NOBRIDGE) LOG [NDK] Profile data available
+ (NOBRIDGE) LOG [NDK] User profile loaded: Walter Sobchak
+ (NOBRIDGE) LOG [NDK] Saving private key to secure storage
+ (NOBRIDGE) LOG [NDK] Creating RelayService to import user preferences
+ (NOBRIDGE) LOG [NDK] Setting NDK on RelayService
+ (NOBRIDGE) LOG [RelayService] NDK instance set
+ (NOBRIDGE) LOG [NDK] Importing relay metadata for user: 55127fc9...
+ (NOBRIDGE) LOG [RelayService] Importing relays from metadata for user 55127fc9...
+ (NOBRIDGE) LOG [RelayService] Found relay list in event created at 2025-03-24T15:39:48.000Z
+ (NOBRIDGE) LOG [RelayService] No relay tags found in event
+ (NOBRIDGE) LOG [NDK] Successfully imported user relay preferences
+ (NOBRIDGE) LOG [NDK] Login successful, updating state
+ (NOBRIDGE) LOG [NDK] Login complete
+ (NOBRIDGE) LOG App initialization completed!
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://nos.lol/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.nostr.band/
+ (NOBRIDGE) LOG Video finished playing
+ (NOBRIDGE) LOG Splash video finished playing
+ (NOBRIDGE) LOG [DB] Starting database initialization...
+ (NOBRIDGE) LOG [DB] Opening database...
+ (NOBRIDGE) LOG [DB] Creating schema...
+ (NOBRIDGE) LOG [Schema] Initializing database on ios
+ (NOBRIDGE) LOG [Schema] Current version: 11
+ (NOBRIDGE) LOG [Schema] Current version: 11, Target version: 11
+ (NOBRIDGE) LOG [Schema] Database already at version 11, checking for missing tables
+ (NOBRIDGE) LOG [Schema] Checking for missing critical tables...
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [Schema] Critical tables check complete
+ (NOBRIDGE) LOG [Schema] Checking for missing critical tables...
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [Schema] Critical tables check complete
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [DB] Migration v8 executed successfully
+ (NOBRIDGE) LOG [Schema] Running migration v9 - Enhanced Nostr metadata
+ (NOBRIDGE) LOG [Schema] Migration v9 completed successfully
+ (NOBRIDGE) LOG [DB] Migration v9 executed successfully
+ (NOBRIDGE) LOG [Schema] Running migration v10 - Adding Favorites table
+ (NOBRIDGE) LOG [Schema] Migration v10 completed successfully
+ (NOBRIDGE) LOG [DB] Migration v10 executed successfully
+ (NOBRIDGE) LOG [DB] Initializing services...
+ (NOBRIDGE) LOG [DB] ExerciseService initialized
+ (NOBRIDGE) LOG [DB] WorkoutService initialized
+ (NOBRIDGE) LOG [DB] TemplateService initialized
+ (NOBRIDGE) LOG [DB] PublicationQueueService initialized
+ (NOBRIDGE) LOG [DB] FavoritesService initialized
+ (NOBRIDGE) LOG [DB] POWRPackService initialized
+ (NOBRIDGE) LOG [DB] FavoritesService fully initialized
+ (NOBRIDGE) LOG
+--- Database Debug Info ---
+ (NOBRIDGE) LOG Database Path: file:///Users/danielwyler/Library/Developer/CoreSimulator/Devices/2A575D76-EFD3-483A-B8A1-AB3A78107638/data/Containers/Data/Application/9845E875-95EC-461A-ABE0-6750715293F0/Documents/SQLite/powr.db
+ (NOBRIDGE) LOG File Info: {"exists": true, "isDirectory": false, "md5": "fb6db72541528215f7ced38773b7cc62", "modificationTime": 1742837715.7471938, "size": 614400, "uri": "file:///Users/danielwyler/Library/Developer/CoreSimulator/Devices/2A575D76-EFD3-483A-B8A1-AB3A78107638/data/Containers/Data/Application/9845E875-95EC-461A-ABE0-6750715293F0/Documents/SQLite/powr.db"}
+ (NOBRIDGE) LOG Tables: ["schema_version", "exercises", "exercise_tags", "nostr_events", "event_tags", "templates", "template_exercises", "powr_packs", "powr_pack_items", "favorites", "nostr_workouts", "workouts", "workout_exercises", "workout_sets", "app_status", "feed_cache"]
+ (NOBRIDGE) LOG ------------------------
+ (NOBRIDGE) LOG [DB] Database initialized successfully
+ (NOBRIDGE) LOG [DB] Database ready - triggering initial library refresh
+ (NOBRIDGE) LOG [Database] Delayed initialization complete
+ (NOBRIDGE) LOG [RelayInitializer] Setting NDK instance in ProfileImageCache
+ (NOBRIDGE) LOG [RelayInitializer] Attempting to initialize SocialFeedCache (attempt 1/3)
+ (NOBRIDGE) LOG Running SQL:
+ CREATE TABLE IF NOT EXISTS feed_cache (
+ event_id TEXT NOT NULL,
+ feed_type TEXT NOT NULL,
+ created_at INTEGER NOT NULL,
+ cached_at INTEGER NOT NULL,
+ PRIMARY KEY (event_id, feed_type)
+ )
+ (NOBRIDGE) LOG Parameters: []
+ (NOBRIDGE) LOG [RelayInitializer] SocialFeedCache initialized with NDK successfully
+ (NOBRIDGE) LOG [RelayInitializer] NDK available and online, loading relays...
+ (NOBRIDGE) LOG [RelayStore] Loading relays...
+ (NOBRIDGE) LOG [RelayStore] Created RelayService instance
+ (NOBRIDGE) LOG [RelayService] NDK instance set
+ (NOBRIDGE) LOG [RelayService] Found 5 relays in NDK pool
+ (NOBRIDGE) LOG [RelayStore] Loaded 5 relays with status
+ (NOBRIDGE) LOG Running SQL:
+ CREATE INDEX IF NOT EXISTS idx_feed_cache_type_time
+ ON feed_cache (feed_type, created_at DESC)
+ (NOBRIDGE) LOG Parameters: []
+ (NOBRIDGE) LOG [SocialFeedCache] Feed cache table initialized
+ (NOBRIDGE) LOG NDK status: initialized
+ (NOBRIDGE) LOG [useSocialFeed] Initializing SocialFeedService
+ (NOBRIDGE) LOG [useSocialFeed] SocialFeedService initialized successfully
+ (NOBRIDGE) LOG [useSocialFeed] Loading powr feed with authors: ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-02-22T17:35:25.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: {"since":1740245725,"limit":30,"kinds":[1301,33401,33402,1,30023],"authors":["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]}
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to powr feed with filter: {"authors": ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1301, 33401, 33402, 1, 30023], "limit": 30, "since": 1740245725}
+ (NOBRIDGE) LOG [FollowingScreen] Contact list has 0 contacts
+ (NOBRIDGE) LOG [useSocialFeed] Initializing SocialFeedService
+ (NOBRIDGE) LOG [useSocialFeed] SocialFeedService initialized successfully
+ (NOBRIDGE) LOG [useSocialFeed] Initializing SocialFeedService
+ (NOBRIDGE) LOG [useSocialFeed] SocialFeedService initialized successfully
+ (NOBRIDGE) LOG [useSocialFeed] Loading following feed with authors: []
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-02-22T17:35:25.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Following feed with no authors, continuing with fallback
+ (NOBRIDGE) ERROR [SocialFeedService] Following feed requires authors
+ (NOBRIDGE) LOG [SocialFeedService] Using POWR account as fallback for Following feed
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: [{"since":1740245725,"limit":30,"kinds":[1301,33401,33402],"authors":["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]},{"since":1740245725,"limit":30,"kinds":[1,30023],"authors":["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"],"#t":["workout","fitness","powr","31days","crossfit","wod","gym","strength","cardio","training","exercise"]}]
+ (NOBRIDGE) ERROR [SocialFeedService] Following feed requires authors
+ (NOBRIDGE) LOG [SocialFeedService] Using POWR account as fallback for Following feed
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to following feed with filter: [{"authors": ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1301, 33401, 33402], "limit": 30, "since": 1740245725}, {"#t": ["workout", "fitness", "powr", "31days", "crossfit", "wod", "gym", "strength", "cardio", "training", "exercise"], "authors": ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1, 30023], "limit": 30, "since": 1740245725}]
+ (NOBRIDGE) LOG [useSocialFeed] Loading global feed with authors: undefined
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-17T17:35:25.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: [{"since":1742232925,"limit":30,"kinds":[1301,33401,33402]},{"since":1742232925,"limit":30,"kinds":[1,30023],"#t":["workout","fitness","powr","31days","crossfit","wod","gym","strength","cardio","training","exercise"]}]
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to global feed with filter: [{"kinds": [1301, 33401, 33402], "limit": 30, "since": 1742232925}, {"#t": ["workout", "fitness", "powr", "31days", "crossfit", "wod", "gym", "strength", "cardio", "training", "exercise"], "kinds": [1, 30023], "limit": 30, "since": 1742232925}]
+ (NOBRIDGE) LOG Processing event c44ca134089245809cb264cd5a47ebcfa93221cf3c457ae897890c02880709cc, kind 1 from 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG Adding event c44ca134089245809cb264cd5a47ebcfa93221cf3c457ae897890c02880709cc to feed as social
+ (NOBRIDGE) LOG Processing event c44ca134089245809cb264cd5a47ebcfa93221cf3c457ae897890c02880709cc, kind 1 from 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG Adding event c44ca134089245809cb264cd5a47ebcfa93221cf3c457ae897890c02880709cc to feed as social
+ (NOBRIDGE) LOG Processing event c44ca134089245809cb264cd5a47ebcfa93221cf3c457ae897890c02880709cc, kind 1 from 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG Adding event c44ca134089245809cb264cd5a47ebcfa93221cf3c457ae897890c02880709cc to feed as social
+ (NOBRIDGE) LOG Processing event d2b02503b573e72e70f2f21eb3d241c957a5dc4489dea02a12c221dafbfb2a11, kind 1301 from 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG Adding event d2b02503b573e72e70f2f21eb3d241c957a5dc4489dea02a12c221dafbfb2a11 to feed as workout
+ (NOBRIDGE) LOG Processing event d2b02503b573e72e70f2f21eb3d241c957a5dc4489dea02a12c221dafbfb2a11, kind 1301 from 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG Adding event d2b02503b573e72e70f2f21eb3d241c957a5dc4489dea02a12c221dafbfb2a11 to feed as workout
+ (NOBRIDGE) LOG Processing event d2b02503b573e72e70f2f21eb3d241c957a5dc4489dea02a12c221dafbfb2a11, kind 1301 from 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG Adding event d2b02503b573e72e70f2f21eb3d241c957a5dc4489dea02a12c221dafbfb2a11 to feed as workout
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for powr feed
+ (NOBRIDGE) LOG Found 8 contacts via followSet()
+ (NOBRIDGE) LOG [FollowingScreen] Contact list has 8 contacts
+ (NOBRIDGE) LOG [FollowingScreen] First few contacts: f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9, 2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884, 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG [FollowingScreen] Contact list changed from 0 to 8 contacts
+ (NOBRIDGE) LOG [FollowingScreen] Contacts loaded, triggering auto-refresh
+ (NOBRIDGE) LOG [FollowingScreen] Scheduling refresh attempt 1/4 in 1000ms
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["c44ca134089245809cb264cd5a47ebcfa93221cf3c457ae897890c02880709cc", "powr", 1742353557, 1742837726116]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d2b02503b573e72e70f2f21eb3d241c957a5dc4489dea02a12c221dafbfb2a11", "powr", 1742353557, 1742837726116]
+ (NOBRIDGE) LOG Processing event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70 to feed as exercise
+ (NOBRIDGE) LOG Processing event 6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b to feed as workout
+ (NOBRIDGE) LOG Processing event 8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92 to feed as workout
+ (NOBRIDGE) LOG Processing event 79456c533e87eb8118efb812164936ed23cf8c2dd89124723cda064d6abb287c, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 79456c533e87eb8118efb812164936ed23cf8c2dd89124723cda064d6abb287c to feed as workout
+ (NOBRIDGE) LOG Processing event ac1eea11dd4b5824cfc344be1d190344695117629e6cf2cc68229c9777792839, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ac1eea11dd4b5824cfc344be1d190344695117629e6cf2cc68229c9777792839 to feed as workout
+ (NOBRIDGE) LOG Processing event 087c10a2d3baebce16dc284f5acfffaab298936897d0c6024e0fd00f13f13b31, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 087c10a2d3baebce16dc284f5acfffaab298936897d0c6024e0fd00f13f13b31 to feed as exercise
+ (NOBRIDGE) LOG Processing event 4be80815c97a253731f629a7c384dad20b9d972902ebd744926273b97f839cde, kind 33401 from 0515b4c8400ee84303639056341e3c0b756bcb6a8143950a674c54de537bcd1a
+ (NOBRIDGE) LOG Adding event 4be80815c97a253731f629a7c384dad20b9d972902ebd744926273b97f839cde to feed as exercise
+ (NOBRIDGE) LOG Processing event e4ad7f3146c6f107e9f547a977a7af08834599babb06bfb3689378e61b59ff7a, kind 33402 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event e4ad7f3146c6f107e9f547a977a7af08834599babb06bfb3689378e61b59ff7a to feed as template
+ (NOBRIDGE) LOG Processing event f755a533e83e59191fffbd6867122aa7a73d5b130b881cf5bfc9a8168cf7e3cb, kind 33401 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event f755a533e83e59191fffbd6867122aa7a73d5b130b881cf5bfc9a8168cf7e3cb to feed as exercise
+ (NOBRIDGE) LOG Processing event 235e5d136738556bc74013bcdea6ccc9af5b2736cecc1b7ac110d7dd55a2bd3c, kind 1301 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event 235e5d136738556bc74013bcdea6ccc9af5b2736cecc1b7ac110d7dd55a2bd3c to feed as workout
+ (NOBRIDGE) LOG Processing event 378fd9c3164174f8475c400079849bc946cf9c7b6750189c91ba2f149ed0a94d, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 378fd9c3164174f8475c400079849bc946cf9c7b6750189c91ba2f149ed0a94d to feed as workout
+ (NOBRIDGE) LOG Processing event 68debb0dcab2e4331b3937f9365d4b3c5462104dc6308a58e4c1310f62879e14, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 68debb0dcab2e4331b3937f9365d4b3c5462104dc6308a58e4c1310f62879e14 to feed as workout
+ (NOBRIDGE) LOG Processing event 20ecb12c04b98caa59283cac4292f20a9e1fca575b89a52ae3e95c9786bda8b3, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 20ecb12c04b98caa59283cac4292f20a9e1fca575b89a52ae3e95c9786bda8b3 to feed as workout
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG Processing event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b to feed as social
+ (NOBRIDGE) LOG Processing event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7 to feed as social
+ (NOBRIDGE) LOG Processing event 225fc0a843fddeb39605eeaebe816e2a723bb5ff9082c9add25cb0a5372ad0e1, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 225fc0a843fddeb39605eeaebe816e2a723bb5ff9082c9add25cb0a5372ad0e1 to feed as social
+ (NOBRIDGE) LOG Processing event dc2e1562e05503d6906a04bf38e30155f31ac85c2f0e4d5b132f914d8685561c, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event dc2e1562e05503d6906a04bf38e30155f31ac85c2f0e4d5b132f914d8685561c to feed as social
+ (NOBRIDGE) LOG Processing event 3a12282346124f1e5adfcc4df413eb8e61926ccc0f5962b9f3a24df24049a449, kind 1 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event 3a12282346124f1e5adfcc4df413eb8e61926ccc0f5962b9f3a24df24049a449 to feed as social
+ (NOBRIDGE) LOG Processing event 23d3851ec652189cc9ae57f548ec5897f9dbe3cad78d69c58a7016ea067ee9ea, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 23d3851ec652189cc9ae57f548ec5897f9dbe3cad78d69c58a7016ea067ee9ea to feed as social
+ (NOBRIDGE) LOG Processing event dd6e8aae7f011caa08f4252feb9efaf1f5e4c230bbe9f22e6f6be5bd99f937ac, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event dd6e8aae7f011caa08f4252feb9efaf1f5e4c230bbe9f22e6f6be5bd99f937ac to feed as social
+ (NOBRIDGE) LOG Processing event 61330a77eb68995f7be3a5602541e07f84a2979022099126b32a98178a7c3382, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 61330a77eb68995f7be3a5602541e07f84a2979022099126b32a98178a7c3382 to feed as social
+ (NOBRIDGE) LOG Processing event 8b1a0e526e2f99803094b1b0e81e059ef2b40b8694717bf7b49100bb887f161c, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8b1a0e526e2f99803094b1b0e81e059ef2b40b8694717bf7b49100bb887f161c to feed as social
+ (NOBRIDGE) LOG Processing event 69ede3ddcdb64a576e03fcad490a38ef6626b2bf3fd39cd13c2746d9f8aa34ce, kind 1301 from b3e592fb0ae064c0570ecf95738328e9fc3f2def747e615fe1c3a2bf834a0b65
+ (NOBRIDGE) LOG Adding event 69ede3ddcdb64a576e03fcad490a38ef6626b2bf3fd39cd13c2746d9f8aa34ce to feed as workout
+ (NOBRIDGE) LOG Processing event 70a86527c09f7ce07ed0cc836223e3d401cfd70f705f0f01e83db459c1cc4a80, kind 33402 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 70a86527c09f7ce07ed0cc836223e3d401cfd70f705f0f01e83db459c1cc4a80 to feed as template
+ (NOBRIDGE) LOG Processing event 8ccff39bcc472e33fac2bbe31070d757ab384972a741a698b58ea248249f045f, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8ccff39bcc472e33fac2bbe31070d757ab384972a741a698b58ea248249f045f to feed as exercise
+ (NOBRIDGE) LOG Processing event 049f18f2fcdf442b12a1a92caf7491d85f60613557cd2935b085f6468db58113, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 049f18f2fcdf442b12a1a92caf7491d85f60613557cd2935b085f6468db58113 to feed as exercise
+ (NOBRIDGE) LOG Processing event 646b7e0c17dd4026fa7aad65137f007c7b1a51cf6c7fe09aefd91883dc0c42d2, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 646b7e0c17dd4026fa7aad65137f007c7b1a51cf6c7fe09aefd91883dc0c42d2 to feed as exercise
+ (NOBRIDGE) LOG Processing event 52d90103f86698d645836729dfa4f436829b9b2a23ac7461f32a67fb93115c16, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 52d90103f86698d645836729dfa4f436829b9b2a23ac7461f32a67fb93115c16 to feed as exercise
+ (NOBRIDGE) LOG Processing event a5ec6667abd605abb146f9c3a13ef8ce1c336de78ec1168892fce5887b521109, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event a5ec6667abd605abb146f9c3a13ef8ce1c336de78ec1168892fce5887b521109 to feed as exercise
+ (NOBRIDGE) LOG Processing event a294b3642380f03be7b79261ad747a4f8873df84bafc692d657e51f886633764, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event a294b3642380f03be7b79261ad747a4f8873df84bafc692d657e51f886633764 to feed as exercise
+ (NOBRIDGE) LOG Processing event 4ac9f5753ad25d684270a70a17819a4b8c13bfed292b4e950c48327a5871f509, kind 1 from 20d29810d6a5f92b045ade02ebbadc9036d741cc686b00415c42b4236fe4ad2f
+ (NOBRIDGE) LOG Adding event 4ac9f5753ad25d684270a70a17819a4b8c13bfed292b4e950c48327a5871f509 to feed as social
+ (NOBRIDGE) LOG Processing event 77bde3bb5d800a9009c3fd72dae5c8619c23814cbcf844cb96ea5d6fa0750a96, kind 1 from dc506d8cdee104146e000dce67d03a15dc8e5e9e7a3df166cf8566a7a6fe419a
+ (NOBRIDGE) LOG Adding event 77bde3bb5d800a9009c3fd72dae5c8619c23814cbcf844cb96ea5d6fa0750a96 to feed as social
+ (NOBRIDGE) LOG Processing event a985a37491b5e755da13dc255e409af0afbbec92a767e7197b7adeb3fe7564a3, kind 1 from e516ecb882ffbc9ba87353342e0c9dbd3e9cf55a00316ca1d23efa3a1be0b167
+ (NOBRIDGE) LOG Adding event a985a37491b5e755da13dc255e409af0afbbec92a767e7197b7adeb3fe7564a3 to feed as social
+ (NOBRIDGE) LOG Processing event f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81, kind 1 from 918183d598acf2dca80cfc0cdea4a0ee5889251757ff3c75c5414f006d699ae5
+ (NOBRIDGE) LOG Adding event f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81 to feed as social
+ (NOBRIDGE) LOG Processing event a45ffb3b34f331008d89188073e8707614dd013736ca9c8ec9b7443febee7034, kind 1 from c465a1051794a507a55adebc0f044dc6e79d9b67a5e05aed4bf684afe088f976
+ (NOBRIDGE) LOG Adding event a45ffb3b34f331008d89188073e8707614dd013736ca9c8ec9b7443febee7034 to feed as social
+ (NOBRIDGE) LOG Processing event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab to feed as social
+ (NOBRIDGE) LOG Processing event d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd, kind 1 from 5d4e1d2a6731875e9decb868e2240aa4b75a6d67199ed1387a6ff08aba272967
+ (NOBRIDGE) LOG Adding event d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd to feed as social
+ (NOBRIDGE) LOG Processing event d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085, kind 1 from f4d89779148ccd245c8d50914a284fd62d97cb0fb68b797a70f24a172b522db9
+ (NOBRIDGE) LOG Adding event d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085 to feed as social
+ (NOBRIDGE) LOG Processing event e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567, kind 1 from 7a6b8c7de171955c214ded7e35cc782cd6dddfd141abb1929c632f69348e6f49
+ (NOBRIDGE) LOG Adding event e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567 to feed as social
+ (NOBRIDGE) LOG Processing event dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c, kind 1 from 14147765a18028fdb386db2891e747c11b2a32761e12a0e6e43d5f8451ee74bc
+ (NOBRIDGE) LOG Adding event dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c to feed as social
+ (NOBRIDGE) LOG Processing event 83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4, kind 1 from 5069ea44d8977e77c6aea605d0c5386b24504a3abd0fe8a3d1cf5f4cedca40a7
+ (NOBRIDGE) LOG Adding event 83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4 to feed as social
+ (NOBRIDGE) LOG Processing event 5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58, kind 1 from dc506d8cdee104146e000dce67d03a15dc8e5e9e7a3df166cf8566a7a6fe419a
+ (NOBRIDGE) LOG Event 5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58 filtered out: quoted=true, pubkey=dc506d8cdee104146e000dce67d03a15dc8e5e9e7a3df166cf8566a7a6fe419a
+ (NOBRIDGE) LOG Processing event e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c, kind 1 from c465a1051794a507a55adebc0f044dc6e79d9b67a5e05aed4bf684afe088f976
+ (NOBRIDGE) LOG Adding event e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c to feed as social
+ (NOBRIDGE) LOG Processing event 601fdf0868e82eb5b79c22c47cb7917898c9fcc96ec742103d34654f5a28991c, kind 1 from f4d89779148ccd245c8d50914a284fd62d97cb0fb68b797a70f24a172b522db9
+ (NOBRIDGE) LOG Adding event 601fdf0868e82eb5b79c22c47cb7917898c9fcc96ec742103d34654f5a28991c to feed as social
+ (NOBRIDGE) LOG Processing event cc73ec331daaac6daccd942264bded3071580458396179236ef3d64c1a823d79, kind 1 from e2260a7af33b3ba30074111c456793cef58d2ab43c5965bdbb655f90f97399ac
+ (NOBRIDGE) LOG Adding event cc73ec331daaac6daccd942264bded3071580458396179236ef3d64c1a823d79 to feed as social
+ (NOBRIDGE) LOG Processing event 88d58d641e8f3c34383b5d2aff9da5aa9e46899da0c917a723663031c7e598b4, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 88d58d641e8f3c34383b5d2aff9da5aa9e46899da0c917a723663031c7e598b4 to feed as exercise
+ (NOBRIDGE) LOG Processing event b7136f68097409c5eb2b901a4ce53fbba28b55b843cb171eba41058e5fd28780, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event b7136f68097409c5eb2b901a4ce53fbba28b55b843cb171eba41058e5fd28780 to feed as exercise
+ (NOBRIDGE) LOG Processing event abe152d24bcde3e5f36a6985fbc27dfe155595e6e5b3af4548bdcdc404b3132e, kind 1 from e2260a7af33b3ba30074111c456793cef58d2ab43c5965bdbb655f90f97399ac
+ (NOBRIDGE) LOG Adding event abe152d24bcde3e5f36a6985fbc27dfe155595e6e5b3af4548bdcdc404b3132e to feed as social
+ (NOBRIDGE) LOG Processing event 09f34eccab2fbabddf2ed1cb07b370c5b149d0bf4a8febb03863787e80e221f5, kind 1 from ca35eb71fc2974d0785bc87241c06e235d2fdd63d2077713e18e0f320b5a540b
+ (NOBRIDGE) LOG Adding event 09f34eccab2fbabddf2ed1cb07b370c5b149d0bf4a8febb03863787e80e221f5 to feed as social
+ (NOBRIDGE) LOG Processing event 6b822677e29c63a74fd58203232ac0638bcd894b8b1bab02ca53000b3f291631, kind 1 from 7a6b8c7de171955c214ded7e35cc782cd6dddfd141abb1929c632f69348e6f49
+ (NOBRIDGE) LOG Adding event 6b822677e29c63a74fd58203232ac0638bcd894b8b1bab02ca53000b3f291631 to feed as social
+ (NOBRIDGE) LOG Processing event c9bd643b1fa6e8dedf602a18663234f9411399a273868dc1e99404aaa0db78e6, kind 1 from 5069ea44d8977e77c6aea605d0c5386b24504a3abd0fe8a3d1cf5f4cedca40a7
+ (NOBRIDGE) LOG Adding event c9bd643b1fa6e8dedf602a18663234f9411399a273868dc1e99404aaa0db78e6 to feed as social
+ (NOBRIDGE) LOG Processing event aeada3af4c5d7347448aba2cfedbb1af3711574e9df5b9652222cd4030bd86e2, kind 1 from 21a8d58c44c31e638d55440d91fa97268b659c0b7b22cbd4937a1b4a921c5d8a
+ (NOBRIDGE) LOG Adding event aeada3af4c5d7347448aba2cfedbb1af3711574e9df5b9652222cd4030bd86e2 to feed as social
+ (NOBRIDGE) LOG Processing event 60ca05e96bc16756dd7b3f34dd2c8a80954edde7e9ef355e7d8613a8e30814ac, kind 1 from 9356d008ab226ab6b08ab3c73900546b2836c48c7527f0e5332c09201a3e6dc8
+ (NOBRIDGE) LOG Adding event 60ca05e96bc16756dd7b3f34dd2c8a80954edde7e9ef355e7d8613a8e30814ac to feed as social
+ (NOBRIDGE) LOG Processing event 508fc65c43feda4fada36d3995ef4557ad0e65f838612d0ca90fa2fededd9365, kind 1 from dc506d8cdee104146e000dce67d03a15dc8e5e9e7a3df166cf8566a7a6fe419a
+ (NOBRIDGE) LOG Adding event 508fc65c43feda4fada36d3995ef4557ad0e65f838612d0ca90fa2fededd9365 to feed as social
+ (NOBRIDGE) LOG Processing event c5066a7f4329e5e1a065e5e2a207ade9dd9c92a8b07fc0b4fde18e18882aa578, kind 1 from 5069ea44d8977e77c6aea605d0c5386b24504a3abd0fe8a3d1cf5f4cedca40a7
+ (NOBRIDGE) LOG Adding event c5066a7f4329e5e1a065e5e2a207ade9dd9c92a8b07fc0b4fde18e18882aa578 to feed as social
+ (NOBRIDGE) LOG Processing event 770ab784a884706857299542dfb10a0709443b11252cb578b6f2f253bcbca981, kind 1 from 97a0c80cf4a74141f444fbe5b901cccd0afe0fd545b91c0cd4f5c044d0904446
+ (NOBRIDGE) LOG Adding event 770ab784a884706857299542dfb10a0709443b11252cb578b6f2f253bcbca981 to feed as social
+ (NOBRIDGE) LOG Processing event ec11bad1be6201adf30d52160fcdf054ee13d5092cbe566434ac87acfcfbd7f7, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event ec11bad1be6201adf30d52160fcdf054ee13d5092cbe566434ac87acfcfbd7f7 to feed as social
+ (NOBRIDGE) LOG Processing event e56640d72a66460661ca441014b8c72b3f63e3d97c9696707ad2f6d733416b74, kind 1 from c465a1051794a507a55adebc0f044dc6e79d9b67a5e05aed4bf684afe088f976
+ (NOBRIDGE) LOG Adding event e56640d72a66460661ca441014b8c72b3f63e3d97c9696707ad2f6d733416b74 to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for following feed
+ (NOBRIDGE) LOG Processing event 2813baf7b3a5cfee639fcfd1e3ea3dc707a3263d479cb23fd91f4d697187057a, kind 1 from 3394094f81a74a3c6ffa99f364731dae21cf86c5f365cc3dde7916587e253425
+ (NOBRIDGE) LOG Adding event 2813baf7b3a5cfee639fcfd1e3ea3dc707a3263d479cb23fd91f4d697187057a to feed as social
+ (NOBRIDGE) LOG Processing event d7290242a92e6f30f1df7aa73f48785a95b1a7d71aac1c25a84dfe34f18c22c7, kind 1 from 4db998b0575ec72528c75242781107adf89c7e4cfcc64f6df07baa6e8ebbe7e1
+ (NOBRIDGE) LOG Adding event d7290242a92e6f30f1df7aa73f48785a95b1a7d71aac1c25a84dfe34f18c22c7 to feed as social
+ (NOBRIDGE) LOG Processing event 97c83dab6377074477d1f2a9bbb4a5f555ddbca9f211b6528a77da74f57d154e, kind 1 from 70632e1941795474cb154415afb79c09b58189afd2243bf81153d59710eb6092
+ (NOBRIDGE) LOG Adding event 97c83dab6377074477d1f2a9bbb4a5f555ddbca9f211b6528a77da74f57d154e to feed as social
+ (NOBRIDGE) LOG Processing event c4e7fe0a7dac11d5bf4773badf70aadf3b52cc65b25150e73f62e3c1d7a9d33e, kind 1 from d3459bca5cc479795e87384868de533256c22dffe43487e226a7ded8648beeb7
+ (NOBRIDGE) LOG Adding event c4e7fe0a7dac11d5bf4773badf70aadf3b52cc65b25150e73f62e3c1d7a9d33e to feed as social
+ (NOBRIDGE) LOG Processing event 3639d5b943cad44bad1c6e3aa53d185e74af38f5307221b849a0e13eba97f526, kind 1 from 96f4be38097ef711581c39fa278b3f41ddf573ee7bb06b12be262c0079016713
+ (NOBRIDGE) LOG Adding event 3639d5b943cad44bad1c6e3aa53d185e74af38f5307221b849a0e13eba97f526 to feed as social
+ (NOBRIDGE) LOG Processing event 2594c2e979f3a64040d23f698c039867342f3aa88634d0242fc28db12b5acca7, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 2594c2e979f3a64040d23f698c039867342f3aa88634d0242fc28db12b5acca7 to feed as exercise
+ (NOBRIDGE) LOG Processing event f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21, kind 1 from 60e5bccda24b32e79c75edb8e7c66e55202853932849f02e329c985b71ac3fbd
+ (NOBRIDGE) LOG Adding event f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21 to feed as social
+ (NOBRIDGE) LOG Processing event fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698, kind 1 from ad8d9660c675d3b3a16fc1484c102782ba8370ae5f94ec5fc2b244a8c8a0a589
+ (NOBRIDGE) LOG Adding event fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698 to feed as social
+ (NOBRIDGE) LOG Processing event cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91, kind 1 from 81fa5b70a73a691c6e78823d035ffc44f6b505e6f03637759bd36e7a451539fd
+ (NOBRIDGE) LOG Adding event cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91 to feed as social
+ (NOBRIDGE) LOG Processing event 933fb1dccf461f629639fea6a21f10479c01366b565cad589795331b2695f11a, kind 1 from 7a6b8c7de171955c214ded7e35cc782cd6dddfd141abb1929c632f69348e6f49
+ (NOBRIDGE) LOG Adding event 933fb1dccf461f629639fea6a21f10479c01366b565cad589795331b2695f11a to feed as social
+ (NOBRIDGE) LOG Processing event 8055e5ca75c88c21acfe9249b044cf18c69a1b77e6b04a12f3aa9a5532d74d9a, kind 1 from e516ecb882ffbc9ba87353342e0c9dbd3e9cf55a00316ca1d23efa3a1be0b167
+ (NOBRIDGE) LOG Adding event 8055e5ca75c88c21acfe9249b044cf18c69a1b77e6b04a12f3aa9a5532d74d9a to feed as social
+ (NOBRIDGE) LOG Processing event 3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5, kind 1 from 43d7f07d10b9e662745e10b2fc201a74dc178a308c31409350d06b04477816e1
+ (NOBRIDGE) LOG Adding event 3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5 to feed as social
+ (NOBRIDGE) LOG Processing event 34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53, kind 1 from 70632e1941795474cb154415afb79c09b58189afd2243bf81153d59710eb6092
+ (NOBRIDGE) LOG Adding event 34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53 to feed as social
+ (NOBRIDGE) LOG Processing event 593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475, kind 1 from b32d6b081c2422f57cbea1c1177159a93ffaa1913f540ae91e5fe3785b198cb2
+ (NOBRIDGE) LOG Adding event 593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475 to feed as social
+ (NOBRIDGE) LOG Processing event 89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be, kind 1 from 8b3db033768dc87dd8ee48a1361ae6d203e946d7f0651472519bc4df1c90e0ea
+ (NOBRIDGE) LOG Adding event 89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be to feed as social
+ (NOBRIDGE) LOG Attempting fetch after delay
+ (NOBRIDGE) LOG Explicitly connecting to relays: ["wss://relay.damus.io", "wss://nos.lol", "wss://relay.nostr.band", "wss://purplepag.es"]
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://relay.damus.io
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://nos.lol
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://relay.nostr.band
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://purplepag.es
+ (NOBRIDGE) LOG NDK connection status: 5 relays connected
+ (NOBRIDGE) LOG Fetching POWR packs from known publishers
+ (NOBRIDGE) LOG Fetching from known publishers: ["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "global", 1742703805, 1742837729158]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "global", 1742703619, 1742837729159]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "global", 1742702573, 1742837729159]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["79456c533e87eb8118efb812164936ed23cf8c2dd89124723cda064d6abb287c", "global", 1742686852, 1742837729160]
+ (NOBRIDGE) LOG Fetched 14 events from known publishers
+ (NOBRIDGE) LOG First event basic info: {"contentPreview": "The Reddit Bodyweight Fitness Recommended Routine ", "id": "c33459ed9a33e2a4513515838d48cb6257c88dab52dea04eea14e0ef0a67c341", "kind": 30004, "pubkey": "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "tagsCount": 19}
+ (NOBRIDGE) LOG Created 14 simplified packs
+ (NOBRIDGE) LOG First simplified pack: {"id": "c33459ed9a33e2a4513515838d48cb6257c88dab52dea04eea14e0ef0a67c341", "tagsCount": 19}
+ (NOBRIDGE) LOG Set featuredPacks state with simplified packs
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["ac1eea11dd4b5824cfc344be1d190344695117629e6cf2cc68229c9777792839", "global", 1742522663, 1742837729160]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["087c10a2d3baebce16dc284f5acfffaab298936897d0c6024e0fd00f13f13b31", "global", 1742504455, 1742837729160]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["4be80815c97a253731f629a7c384dad20b9d972902ebd744926273b97f839cde", "global", 1742352154, 1742837729160]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e4ad7f3146c6f107e9f547a977a7af08834599babb06bfb3689378e61b59ff7a", "global", 1742352058, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f755a533e83e59191fffbd6867122aa7a73d5b130b881cf5bfc9a8168cf7e3cb", "global", 1742352031, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["235e5d136738556bc74013bcdea6ccc9af5b2736cecc1b7ac110d7dd55a2bd3c", "global", 1742351388, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["378fd9c3164174f8475c400079849bc946cf9c7b6750189c91ba2f149ed0a94d", "global", 1742269622, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["68debb0dcab2e4331b3937f9365d4b3c5462104dc6308a58e4c1310f62879e14", "global", 1742269374, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["20ecb12c04b98caa59283cac4292f20a9e1fca575b89a52ae3e95c9786bda8b3", "global", 1742269292, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0", "global", 1742786395, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b", "global", 1742703620, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7", "global", 1742702574, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["225fc0a843fddeb39605eeaebe816e2a723bb5ff9082c9add25cb0a5372ad0e1", "global", 1742686853, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dc2e1562e05503d6906a04bf38e30155f31ac85c2f0e4d5b132f914d8685561c", "global", 1742522663, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3a12282346124f1e5adfcc4df413eb8e61926ccc0f5962b9f3a24df24049a449", "global", 1742351388, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["23d3851ec652189cc9ae57f548ec5897f9dbe3cad78d69c58a7016ea067ee9ea", "global", 1742269623, 1742837729161]
+ (NOBRIDGE) LOG [SocialFeedCache] Scheduling next flush in 100ms (retry: 0)
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dd6e8aae7f011caa08f4252feb9efaf1f5e4c230bbe9f22e6f6be5bd99f937ac", "global", 1742269375, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["61330a77eb68995f7be3a5602541e07f84a2979022099126b32a98178a7c3382", "global", 1742269292, 1742837729161]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b1a0e526e2f99803094b1b0e81e059ef2b40b8694717bf7b49100bb887f161c", "global", 1742269231, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["69ede3ddcdb64a576e03fcad490a38ef6626b2bf3fd39cd13c2746d9f8aa34ce", "global", 1742562834, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["70a86527c09f7ce07ed0cc836223e3d401cfd70f705f0f01e83db459c1cc4a80", "global", 1742422722, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8ccff39bcc472e33fac2bbe31070d757ab384972a741a698b58ea248249f045f", "global", 1742422692, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["049f18f2fcdf442b12a1a92caf7491d85f60613557cd2935b085f6468db58113", "global", 1742422685, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["646b7e0c17dd4026fa7aad65137f007c7b1a51cf6c7fe09aefd91883dc0c42d2", "global", 1742422680, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["52d90103f86698d645836729dfa4f436829b9b2a23ac7461f32a67fb93115c16", "global", 1742422675, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["a5ec6667abd605abb146f9c3a13ef8ce1c336de78ec1168892fce5887b521109", "global", 1742422670, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["a294b3642380f03be7b79261ad747a4f8873df84bafc692d657e51f886633764", "global", 1742422666, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["4ac9f5753ad25d684270a70a17819a4b8c13bfed292b4e950c48327a5871f509", "global", 1742828578, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["77bde3bb5d800a9009c3fd72dae5c8619c23814cbcf844cb96ea5d6fa0750a96", "global", 1742825893, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["a985a37491b5e755da13dc255e409af0afbbec92a767e7197b7adeb3fe7564a3", "global", 1742818038, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "global", 1742810300, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["a45ffb3b34f331008d89188073e8707614dd013736ca9c8ec9b7443febee7034", "global", 1742788935, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab", "global", 1742782158, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "global", 1742780020, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085", "global", 1742775869, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567", "global", 1742758559, 1742837729162]
+ (NOBRIDGE) LOG [SocialFeedCache] Scheduling next flush in 100ms (retry: 0)
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "global", 1742749229, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4", "global", 1742741497, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "global", 1742730917, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c", "global", 1742703529, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["601fdf0868e82eb5b79c22c47cb7917898c9fcc96ec742103d34654f5a28991c", "global", 1742696083, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["cc73ec331daaac6daccd942264bded3071580458396179236ef3d64c1a823d79", "global", 1742693426, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["88d58d641e8f3c34383b5d2aff9da5aa9e46899da0c917a723663031c7e598b4", "global", 1742422710, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["b7136f68097409c5eb2b901a4ce53fbba28b55b843cb171eba41058e5fd28780", "global", 1742422702, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["abe152d24bcde3e5f36a6985fbc27dfe155595e6e5b3af4548bdcdc404b3132e", "global", 1742693144, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["09f34eccab2fbabddf2ed1cb07b370c5b149d0bf4a8febb03863787e80e221f5", "global", 1742692809, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6b822677e29c63a74fd58203232ac0638bcd894b8b1bab02ca53000b3f291631", "global", 1742680274, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["c9bd643b1fa6e8dedf602a18663234f9411399a273868dc1e99404aaa0db78e6", "global", 1742659224, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["aeada3af4c5d7347448aba2cfedbb1af3711574e9df5b9652222cd4030bd86e2", "global", 1742658944, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["60ca05e96bc16756dd7b3f34dd2c8a80954edde7e9ef355e7d8613a8e30814ac", "global", 1742655391, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["508fc65c43feda4fada36d3995ef4557ad0e65f838612d0ca90fa2fededd9365", "global", 1742643451, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["c5066a7f4329e5e1a065e5e2a207ade9dd9c92a8b07fc0b4fde18e18882aa578", "global", 1742639816, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["770ab784a884706857299542dfb10a0709443b11252cb578b6f2f253bcbca981", "global", 1742629843, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["ec11bad1be6201adf30d52160fcdf054ee13d5092cbe566434ac87acfcfbd7f7", "global", 1742615302, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e56640d72a66460661ca441014b8c72b3f63e3d97c9696707ad2f6d733416b74", "global", 1742609913, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["2813baf7b3a5cfee639fcfd1e3ea3dc707a3263d479cb23fd91f4d697187057a", "global", 1742834327, 1742837729162]
+ (NOBRIDGE) LOG [SocialFeedCache] Scheduling next flush in 100ms (retry: 0)
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d7290242a92e6f30f1df7aa73f48785a95b1a7d71aac1c25a84dfe34f18c22c7", "global", 1742833486, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["97c83dab6377074477d1f2a9bbb4a5f555ddbca9f211b6528a77da74f57d154e", "global", 1742826421, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["c4e7fe0a7dac11d5bf4773badf70aadf3b52cc65b25150e73f62e3c1d7a9d33e", "global", 1742825187, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3639d5b943cad44bad1c6e3aa53d185e74af38f5307221b849a0e13eba97f526", "global", 1742824809, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["2594c2e979f3a64040d23f698c039867342f3aa88634d0242fc28db12b5acca7", "global", 1742422698, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "global", 1742760959, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "global", 1742750608, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "global", 1742745450, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["933fb1dccf461f629639fea6a21f10479c01366b565cad589795331b2695f11a", "global", 1742596667, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8055e5ca75c88c21acfe9249b044cf18c69a1b77e6b04a12f3aa9a5532d74d9a", "global", 1742588035, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5", "global", 1742746988, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "global", 1742739424, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475", "global", 1742731342, 1742837729162]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be", "global", 1742722524, 1742837729162]
+ (NOBRIDGE) LOG Selected social: {"content": {"author": "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "content": "Testing #powr", "createdAt": 1742786395000, "id": "ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0", "quotedContent": undefined, "tags": ["powr"]}, "event": {"_author": undefined, "_symbolKeys": Set {}, "content": "Testing #powr", "created_at": 1742786395, "decrypt": [Function bound decrypt], "encode": [Function bound encode], "encrypt": [Function bound encrypt], "events": {}, "fetchReplyEvent": [Function bound fetchReplyEvent], "fetchRootEvent": [Function bound fetchRootEvent], "fetchTaggedEvent": [Function bound fetchTaggedEvent], "getEventHash": [Function bound getEventHash], "id": "ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0", "isDvm": [Function anonymous], "isEphemeral": [Function bound isEphemeral], "isParamReplaceable": [Function bound isParamReplaceable], "isReplaceable": [Function bound isReplaceable], "kind": 1, "maxListeners": Infinity, "ndk": "[object Object]", "onceEvents": {}, "pubkey": "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "publishStatus": "success", "relay": {"_symbolKeys": [Set], "authPolicy": undefined, "close": [Function bound close], "complaining": false, "connectivity": [NDKRelayConnectivity], "debug": [Function debug], "emit": [Function emitHasOnce], "events": [Object], "lowestValidationRatio": 1, "maxListeners": Infinity, "nonValidatedEventCount": 1, "onceEvents": [Object], "publisher": [NDKRelayPublisher], "req": [Function bound req], "scores": [Map], "subs": [NDKRelaySubscriptionManager], "targetValidationRatio": 1, "trusted": false, "url": "wss://powr.duckdns.org/", "validatedEventCount": 49, "validationRatioFn": [Function bound ]}, "repost": [Function bound repost], "serialize": [Function bound serialize], "sig": "d5bae27817a1ec5dfd8d1967c5a81a4f8ba4871835fd48ae2100f411fb9202930115923902ee87fa2b341d89f45caa53a6be8c5e22c63d398ef2ce86f8d45b7f", "signatureVerified": true, "tags": [[Array], [Array]], "validate": [Function bound validate], "verifySignature": [Function bound verifySignature]}, "eventId": "ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0", "id": "ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0", "timestamp": 1742786395000, "type": "social"}
+ (NOBRIDGE) LOG [FollowingScreen] Starting manual refresh (force=true)
+ (NOBRIDGE) LOG Refreshing following feed (force=true)
+ (NOBRIDGE) LOG [useSocialFeed] Force refresh requested, resetting attempt counter
+ (NOBRIDGE) LOG [useSocialFeed] Cleaning up existing subscription for following feed
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from following feed
+ (NOBRIDGE) LOG [useSocialFeed] Loading following feed with authors: ["f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884", "7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7", "0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-02-22T17:35:25.000Z, until=now
+ (NOBRIDGE) LOG [SocialFeedService] Following feed with 8 authors: f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9, 2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884, 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200, 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7, 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04...
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: [{"since":1740245725,"limit":30,"kinds":[1301,33401,33402],"authors":["f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9","2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884","7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200","0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7","0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04","3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506","55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21","fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52"]},{"since":1740245725,"limit":30,"kinds":[1,30023],"authors":["f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9","2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884","7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200","0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7","0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04","3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506","55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21","fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52"],"#t":["workout","fitness","powr","31days","crossfit","wod","gym","strength","cardio","training","exercise"]}]
+ (NOBRIDGE) LOG [SocialFeedService] Following feed with 8 authors: f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9, 2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884, 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200, 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7, 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04...
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to following feed with filter: [{"authors": ["f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884", "7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7", "0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52"], "kinds": [1301, 33401, 33402], "limit": 30, "since": 1740245725}, {"#t": ["workout", "fitness", "powr", "31days", "crossfit", "wod", "gym", "strength", "cardio", "training", "exercise"], "authors": ["f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884", "7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7", "0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52"], "kinds": [1, 30023], "limit": 30, "since": 1740245725}]
+ (NOBRIDGE) LOG Processing event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70 to feed as exercise
+ (NOBRIDGE) LOG Processing event 6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b to feed as workout
+ (NOBRIDGE) LOG Processing event 8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92 to feed as workout
+ (NOBRIDGE) LOG Processing event 79456c533e87eb8118efb812164936ed23cf8c2dd89124723cda064d6abb287c, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 79456c533e87eb8118efb812164936ed23cf8c2dd89124723cda064d6abb287c to feed as workout
+ (NOBRIDGE) LOG Processing event ac1eea11dd4b5824cfc344be1d190344695117629e6cf2cc68229c9777792839, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ac1eea11dd4b5824cfc344be1d190344695117629e6cf2cc68229c9777792839 to feed as workout
+ (NOBRIDGE) LOG Processing event 087c10a2d3baebce16dc284f5acfffaab298936897d0c6024e0fd00f13f13b31, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 087c10a2d3baebce16dc284f5acfffaab298936897d0c6024e0fd00f13f13b31 to feed as exercise
+ (NOBRIDGE) LOG Processing event d2b02503b573e72e70f2f21eb3d241c957a5dc4489dea02a12c221dafbfb2a11, kind 1301 from 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG Adding event d2b02503b573e72e70f2f21eb3d241c957a5dc4489dea02a12c221dafbfb2a11 to feed as workout
+ (NOBRIDGE) LOG Processing event e4ad7f3146c6f107e9f547a977a7af08834599babb06bfb3689378e61b59ff7a, kind 33402 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event e4ad7f3146c6f107e9f547a977a7af08834599babb06bfb3689378e61b59ff7a to feed as template
+ (NOBRIDGE) LOG Processing event f755a533e83e59191fffbd6867122aa7a73d5b130b881cf5bfc9a8168cf7e3cb, kind 33401 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event f755a533e83e59191fffbd6867122aa7a73d5b130b881cf5bfc9a8168cf7e3cb to feed as exercise
+ (NOBRIDGE) LOG Processing event 235e5d136738556bc74013bcdea6ccc9af5b2736cecc1b7ac110d7dd55a2bd3c, kind 1301 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event 235e5d136738556bc74013bcdea6ccc9af5b2736cecc1b7ac110d7dd55a2bd3c to feed as workout
+ (NOBRIDGE) LOG Processing event 378fd9c3164174f8475c400079849bc946cf9c7b6750189c91ba2f149ed0a94d, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 378fd9c3164174f8475c400079849bc946cf9c7b6750189c91ba2f149ed0a94d to feed as workout
+ (NOBRIDGE) LOG Processing event 68debb0dcab2e4331b3937f9365d4b3c5462104dc6308a58e4c1310f62879e14, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 68debb0dcab2e4331b3937f9365d4b3c5462104dc6308a58e4c1310f62879e14 to feed as workout
+ (NOBRIDGE) LOG Processing event 20ecb12c04b98caa59283cac4292f20a9e1fca575b89a52ae3e95c9786bda8b3, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 20ecb12c04b98caa59283cac4292f20a9e1fca575b89a52ae3e95c9786bda8b3 to feed as workout
+ (NOBRIDGE) LOG Processing event 6c2eeb3d3e23f31bbf9136c87fd2373eb3acb117ea0e1575dec86f14c640fb08, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 6c2eeb3d3e23f31bbf9136c87fd2373eb3acb117ea0e1575dec86f14c640fb08 to feed as workout
+ (NOBRIDGE) LOG Processing event df58de83df99ce0436edb573f9da5ade2cd29ffd371ccb1ac64036402f069b78, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event df58de83df99ce0436edb573f9da5ade2cd29ffd371ccb1ac64036402f069b78 to feed as workout
+ (NOBRIDGE) LOG Processing event 2bd1becb30e7b691d0d5e889e2bb084e88ffe624c4e16727cb4b20cde66a560c, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 2bd1becb30e7b691d0d5e889e2bb084e88ffe624c4e16727cb4b20cde66a560c to feed as workout
+ (NOBRIDGE) LOG Processing event e247260fc69f96ea7476a624feffff8ca4ee110a3ca2f2cf370cde979c52b1ec, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event e247260fc69f96ea7476a624feffff8ca4ee110a3ca2f2cf370cde979c52b1ec to feed as workout
+ (NOBRIDGE) LOG Processing event 55a1521ade545d79eb6ed801ee9de621a70207781dd1a8b0c2ca5173710a5e3f, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 55a1521ade545d79eb6ed801ee9de621a70207781dd1a8b0c2ca5173710a5e3f to feed as workout
+ (NOBRIDGE) LOG Processing event 5709a0925a38b32f69f54e9cd875b1df8d841b219e423157018ace04b157d174, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 5709a0925a38b32f69f54e9cd875b1df8d841b219e423157018ace04b157d174 to feed as workout
+ (NOBRIDGE) LOG Processing event 00b1fd40e3852e0ff109a63b1c2b7be335915641f510ec6a644ff8ddc3fa80a5, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 00b1fd40e3852e0ff109a63b1c2b7be335915641f510ec6a644ff8ddc3fa80a5 to feed as workout
+ (NOBRIDGE) LOG Processing event c1403b3d4aed6c78015d899422a29d8cf3d2c7b60bc97b4e6930317b7e1d9735, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event c1403b3d4aed6c78015d899422a29d8cf3d2c7b60bc97b4e6930317b7e1d9735 to feed as workout
+ (NOBRIDGE) LOG Processing event bbc54cbbd47e87845cbae9387c8cd51c1b7a0d78cd7a332e5bb141da1362622a, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event bbc54cbbd47e87845cbae9387c8cd51c1b7a0d78cd7a332e5bb141da1362622a to feed as workout
+ (NOBRIDGE) LOG Processing event 9bdbdb5472e0cd0d998cb8b4de60192eac1f670fee5ea90012a2af1a872a3f05, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 9bdbdb5472e0cd0d998cb8b4de60192eac1f670fee5ea90012a2af1a872a3f05 to feed as workout
+ (NOBRIDGE) LOG Processing event 975ddcea8d85f3f5a913f938e2c539bbe7d48bd4821a7ff86b2e0884303bcdd3, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 975ddcea8d85f3f5a913f938e2c539bbe7d48bd4821a7ff86b2e0884303bcdd3 to feed as workout
+ (NOBRIDGE) LOG Processing event a3f29b38176410513510d944dfb29f4ab044bcd9436305d5122092b5cef02f20, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event a3f29b38176410513510d944dfb29f4ab044bcd9436305d5122092b5cef02f20 to feed as workout
+ (NOBRIDGE) LOG Processing event 01b8a06e311cad468ab983d9bb18228559c41a401089fcfdd9557b2823e192e2, kind 1301 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 01b8a06e311cad468ab983d9bb18228559c41a401089fcfdd9557b2823e192e2 to feed as workout
+ (NOBRIDGE) LOG Processing event cd4cebc11e52288301cc1cebf7cee8a2b511519eacd2b2d27911fbc5d8254e79, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event cd4cebc11e52288301cc1cebf7cee8a2b511519eacd2b2d27911fbc5d8254e79 to feed as exercise
+ (NOBRIDGE) LOG Processing event edad84bcf54259ab0900f149e55ab2d74b07e6df439f678ecc0cb27a23de588a, kind 1301 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event edad84bcf54259ab0900f149e55ab2d74b07e6df439f678ecc0cb27a23de588a to feed as workout
+ (NOBRIDGE) LOG Processing event d19823573770e8ae9a2a850f3e76ebb9f5a90b80f472aabcb641a2605bdd1e54, kind 33402 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event d19823573770e8ae9a2a850f3e76ebb9f5a90b80f472aabcb641a2605bdd1e54 to feed as template
+ (NOBRIDGE) LOG Processing event 153e7ab88a2529b793880280fec331b1115b00e3de3208dade416e1a7da38c76, kind 33401 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event 153e7ab88a2529b793880280fec331b1115b00e3de3208dade416e1a7da38c76 to feed as exercise
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG Processing event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b to feed as social
+ (NOBRIDGE) LOG Processing event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7 to feed as social
+ (NOBRIDGE) LOG Processing event 225fc0a843fddeb39605eeaebe816e2a723bb5ff9082c9add25cb0a5372ad0e1, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 225fc0a843fddeb39605eeaebe816e2a723bb5ff9082c9add25cb0a5372ad0e1 to feed as social
+ (NOBRIDGE) LOG Processing event dc2e1562e05503d6906a04bf38e30155f31ac85c2f0e4d5b132f914d8685561c, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event dc2e1562e05503d6906a04bf38e30155f31ac85c2f0e4d5b132f914d8685561c to feed as social
+ (NOBRIDGE) LOG Processing event c44ca134089245809cb264cd5a47ebcfa93221cf3c457ae897890c02880709cc, kind 1 from 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG Adding event c44ca134089245809cb264cd5a47ebcfa93221cf3c457ae897890c02880709cc to feed as social
+ (NOBRIDGE) LOG Processing event 3a12282346124f1e5adfcc4df413eb8e61926ccc0f5962b9f3a24df24049a449, kind 1 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event 3a12282346124f1e5adfcc4df413eb8e61926ccc0f5962b9f3a24df24049a449 to feed as social
+ (NOBRIDGE) LOG Processing event 23d3851ec652189cc9ae57f548ec5897f9dbe3cad78d69c58a7016ea067ee9ea, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 23d3851ec652189cc9ae57f548ec5897f9dbe3cad78d69c58a7016ea067ee9ea to feed as social
+ (NOBRIDGE) LOG Processing event dd6e8aae7f011caa08f4252feb9efaf1f5e4c230bbe9f22e6f6be5bd99f937ac, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event dd6e8aae7f011caa08f4252feb9efaf1f5e4c230bbe9f22e6f6be5bd99f937ac to feed as social
+ (NOBRIDGE) LOG Processing event 61330a77eb68995f7be3a5602541e07f84a2979022099126b32a98178a7c3382, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 61330a77eb68995f7be3a5602541e07f84a2979022099126b32a98178a7c3382 to feed as social
+ (NOBRIDGE) LOG Processing event 8b1a0e526e2f99803094b1b0e81e059ef2b40b8694717bf7b49100bb887f161c, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8b1a0e526e2f99803094b1b0e81e059ef2b40b8694717bf7b49100bb887f161c to feed as social
+ (NOBRIDGE) LOG Processing event 7cdb43b461173a931ce2f3c85bcc2d507dc015dd3eae004292de0c9b4b84fa0b, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 7cdb43b461173a931ce2f3c85bcc2d507dc015dd3eae004292de0c9b4b84fa0b to feed as social
+ (NOBRIDGE) LOG Processing event f186c75a5c216e77d010e2eb0412158b287048db3136ad2ec9cfc7f02cf57263, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event f186c75a5c216e77d010e2eb0412158b287048db3136ad2ec9cfc7f02cf57263 to feed as social
+ (NOBRIDGE) LOG Processing event 21a80747a105f9ccd0d36662a34b727a38676fe8d7a6691700f9c8c624e7cdad, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 21a80747a105f9ccd0d36662a34b727a38676fe8d7a6691700f9c8c624e7cdad to feed as social
+ (NOBRIDGE) LOG Processing event 5d5fa18ba3f6c7d6a83c93e8fed7c1918340e93b7aec99fc031cd40881b4c184, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 5d5fa18ba3f6c7d6a83c93e8fed7c1918340e93b7aec99fc031cd40881b4c184 to feed as social
+ (NOBRIDGE) LOG Processing event 1a50f6dabc8d3236d9020942cdb0d0d89ae9c530b6b74766b0725ac2bb02785d, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 1a50f6dabc8d3236d9020942cdb0d0d89ae9c530b6b74766b0725ac2bb02785d to feed as social
+ (NOBRIDGE) LOG Processing event 9c5adb8c5af40dea3371ba51f062448442b947db93f6f3e00aea7d4e41410500, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 9c5adb8c5af40dea3371ba51f062448442b947db93f6f3e00aea7d4e41410500 to feed as social
+ (NOBRIDGE) LOG Processing event f778bd11e037fb36a488c4a601904adaaa132cbb6f2af9c944baffe9794350f5, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event f778bd11e037fb36a488c4a601904adaaa132cbb6f2af9c944baffe9794350f5 to feed as social
+ (NOBRIDGE) LOG Processing event 23ca15854669775eb6585b1d3bf79086e8a8c4d0c63193dacb2a510473259328, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 23ca15854669775eb6585b1d3bf79086e8a8c4d0c63193dacb2a510473259328 to feed as social
+ (NOBRIDGE) LOG Processing event b6bd2d219e2a1ae64b6070bc4da195132c637c9bd43a601521d5351c71c6c691, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event b6bd2d219e2a1ae64b6070bc4da195132c637c9bd43a601521d5351c71c6c691 to feed as social
+ (NOBRIDGE) LOG Processing event 40880b27a05ca95866596c5c966572876bb0716e63ae25e8882aa3c2fb0cde2d, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 40880b27a05ca95866596c5c966572876bb0716e63ae25e8882aa3c2fb0cde2d to feed as social
+ (NOBRIDGE) LOG Processing event 8b469ce1f97b5f0d4a41c6f9ca04c4e2ebc7d67ef75676b31e758f7b712bbdc1, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8b469ce1f97b5f0d4a41c6f9ca04c4e2ebc7d67ef75676b31e758f7b712bbdc1 to feed as social
+ (NOBRIDGE) LOG Processing event 3b6f3d0b4ffaf568af01b56b42f1087a5874362a44c37fb1cbcb7812f531c150, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 3b6f3d0b4ffaf568af01b56b42f1087a5874362a44c37fb1cbcb7812f531c150 to feed as social
+ (NOBRIDGE) LOG Processing event f35868449a75e2c490a8db2bedb8239ced782bc165b9a54ad2f358e6bc957be9, kind 1 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event f35868449a75e2c490a8db2bedb8239ced782bc165b9a54ad2f358e6bc957be9 to feed as social
+ (NOBRIDGE) LOG Processing event db99232bb71fba3d0ad3196d1acc2469cd2d25474dee1c65ead765b685100117, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event db99232bb71fba3d0ad3196d1acc2469cd2d25474dee1c65ead765b685100117 to feed as social
+ (NOBRIDGE) LOG Processing event 8fcc9f1c2c6810c114ff49fbacb726852ac4ec5bf3ee128369967c94abc87b6e, kind 1 from 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04
+ (NOBRIDGE) LOG Adding event 8fcc9f1c2c6810c114ff49fbacb726852ac4ec5bf3ee128369967c94abc87b6e to feed as social
+ (NOBRIDGE) LOG Processing event 70a86527c09f7ce07ed0cc836223e3d401cfd70f705f0f01e83db459c1cc4a80, kind 33402 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 70a86527c09f7ce07ed0cc836223e3d401cfd70f705f0f01e83db459c1cc4a80 to feed as template
+ (NOBRIDGE) LOG Processing event 88d58d641e8f3c34383b5d2aff9da5aa9e46899da0c917a723663031c7e598b4, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 88d58d641e8f3c34383b5d2aff9da5aa9e46899da0c917a723663031c7e598b4 to feed as exercise
+ (NOBRIDGE) LOG Processing event b7136f68097409c5eb2b901a4ce53fbba28b55b843cb171eba41058e5fd28780, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event b7136f68097409c5eb2b901a4ce53fbba28b55b843cb171eba41058e5fd28780 to feed as exercise
+ (NOBRIDGE) LOG Processing event 2594c2e979f3a64040d23f698c039867342f3aa88634d0242fc28db12b5acca7, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 2594c2e979f3a64040d23f698c039867342f3aa88634d0242fc28db12b5acca7 to feed as exercise
+ (NOBRIDGE) LOG Processing event 8ccff39bcc472e33fac2bbe31070d757ab384972a741a698b58ea248249f045f, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8ccff39bcc472e33fac2bbe31070d757ab384972a741a698b58ea248249f045f to feed as exercise
+ (NOBRIDGE) LOG Processing event 049f18f2fcdf442b12a1a92caf7491d85f60613557cd2935b085f6468db58113, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 049f18f2fcdf442b12a1a92caf7491d85f60613557cd2935b085f6468db58113 to feed as exercise
+ (NOBRIDGE) LOG Processing event 646b7e0c17dd4026fa7aad65137f007c7b1a51cf6c7fe09aefd91883dc0c42d2, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 646b7e0c17dd4026fa7aad65137f007c7b1a51cf6c7fe09aefd91883dc0c42d2 to feed as exercise
+ (NOBRIDGE) LOG Processing event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab to feed as social
+ (NOBRIDGE) LOG Processing event ec11bad1be6201adf30d52160fcdf054ee13d5092cbe566434ac87acfcfbd7f7, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event ec11bad1be6201adf30d52160fcdf054ee13d5092cbe566434ac87acfcfbd7f7 to feed as social
+ (NOBRIDGE) LOG Processing event 1136d82bb8c6b5dabba4388e1d82520aa0908a8b5bfcb13f0cfb961e5b50b93c, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event 1136d82bb8c6b5dabba4388e1d82520aa0908a8b5bfcb13f0cfb961e5b50b93c to feed as social
+ (NOBRIDGE) LOG Processing event 1136d82bb8c6b5dabba4388e1d82520aa0908a8b5bfcb13f0cfb961e5b50b93c, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event 1136d82bb8c6b5dabba4388e1d82520aa0908a8b5bfcb13f0cfb961e5b50b93c to feed as social
+ (NOBRIDGE) LOG Processing event 52d90103f86698d645836729dfa4f436829b9b2a23ac7461f32a67fb93115c16, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 52d90103f86698d645836729dfa4f436829b9b2a23ac7461f32a67fb93115c16 to feed as exercise
+ (NOBRIDGE) LOG Processing event a5ec6667abd605abb146f9c3a13ef8ce1c336de78ec1168892fce5887b521109, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event a5ec6667abd605abb146f9c3a13ef8ce1c336de78ec1168892fce5887b521109 to feed as exercise
+ (NOBRIDGE) LOG Processing event a294b3642380f03be7b79261ad747a4f8873df84bafc692d657e51f886633764, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event a294b3642380f03be7b79261ad747a4f8873df84bafc692d657e51f886633764 to feed as exercise
+ (NOBRIDGE) LOG Processing event 8dbf9ef0138953f7af244c7d307d128aff4fb1e543cf99d9033d42202c8c438b, kind 33402 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8dbf9ef0138953f7af244c7d307d128aff4fb1e543cf99d9033d42202c8c438b to feed as template
+ (NOBRIDGE) LOG Processing event 8d7463990657e7bd1c6f3ad96e4a43d22b7397e9257706e327a64ac6bc8857e7, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8d7463990657e7bd1c6f3ad96e4a43d22b7397e9257706e327a64ac6bc8857e7 to feed as exercise
+ (NOBRIDGE) LOG Processing event 1bce3854d1786a9a15f1aad1d305e8919d3fd0cd4e87a2404f925b2bacc7af7f, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 1bce3854d1786a9a15f1aad1d305e8919d3fd0cd4e87a2404f925b2bacc7af7f to feed as exercise
+ (NOBRIDGE) LOG Processing event 9c657ed574653f1b66ab465a00595f74dfe82f56f9e5bff5a1825e6d73ff2281, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 9c657ed574653f1b66ab465a00595f74dfe82f56f9e5bff5a1825e6d73ff2281 to feed as exercise
+ (NOBRIDGE) LOG Processing event 8ee93b62bf09904b7235a64cccdc9f2df9ac1a8b39a888112183bbd0fd4bb317, kind 33402 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8ee93b62bf09904b7235a64cccdc9f2df9ac1a8b39a888112183bbd0fd4bb317 to feed as template
+ (NOBRIDGE) LOG Processing event 76bbc7e470bcc0d41990ad2bbb1f9acc4958128d9df8b05fdfbc79c8c96d4443, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 76bbc7e470bcc0d41990ad2bbb1f9acc4958128d9df8b05fdfbc79c8c96d4443 to feed as exercise
+ (NOBRIDGE) LOG Processing event 3d51ff071ffb9c5264ca1b1475663aba24d7107de57fe9053e5e049971bf490e, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 3d51ff071ffb9c5264ca1b1475663aba24d7107de57fe9053e5e049971bf490e to feed as exercise
+ (NOBRIDGE) LOG Processing event a25ae050500f62fa49272793e68aef2232e722144487cc7bdacbe7619dfe4bb8, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event a25ae050500f62fa49272793e68aef2232e722144487cc7bdacbe7619dfe4bb8 to feed as social
+ (NOBRIDGE) LOG Processing event a25ae050500f62fa49272793e68aef2232e722144487cc7bdacbe7619dfe4bb8, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event a25ae050500f62fa49272793e68aef2232e722144487cc7bdacbe7619dfe4bb8 to feed as social
+ (NOBRIDGE) LOG Processing event ef56c023a89c69bbad3fcddb62ec5256077d5ece758dc4f104dfdbadfafb39a9, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event ef56c023a89c69bbad3fcddb62ec5256077d5ece758dc4f104dfdbadfafb39a9 to feed as social
+ (NOBRIDGE) LOG Processing event ef56c023a89c69bbad3fcddb62ec5256077d5ece758dc4f104dfdbadfafb39a9, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event ef56c023a89c69bbad3fcddb62ec5256077d5ece758dc4f104dfdbadfafb39a9 to feed as social
+ (NOBRIDGE) LOG Processing event 9ed9d9e837a7ec42ecfafab486367c901946f7dbb7719a91652ce4b46d8baa8b, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event 9ed9d9e837a7ec42ecfafab486367c901946f7dbb7719a91652ce4b46d8baa8b to feed as social
+ (NOBRIDGE) LOG Processing event 9ed9d9e837a7ec42ecfafab486367c901946f7dbb7719a91652ce4b46d8baa8b, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event 9ed9d9e837a7ec42ecfafab486367c901946f7dbb7719a91652ce4b46d8baa8b to feed as social
+ (NOBRIDGE) LOG Processing event 03204fd46ba7c267a1eba436c988a33ba36229a8d78067327158afa0ea27a9a0, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event 03204fd46ba7c267a1eba436c988a33ba36229a8d78067327158afa0ea27a9a0 to feed as social
+ (NOBRIDGE) LOG Processing event afbe2472cdd6653b90f20f22d825b164788331fe1c4b4578672096f81f42a385, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event afbe2472cdd6653b90f20f22d825b164788331fe1c4b4578672096f81f42a385 to feed as social
+ (NOBRIDGE) LOG Processing event 818771cf31bd201c65fac1a5b05b206f37c9c066856472fd9196ed40f40e5288, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event 818771cf31bd201c65fac1a5b05b206f37c9c066856472fd9196ed40f40e5288 to feed as social
+ (NOBRIDGE) LOG Processing event 024092324ed2f7d1d20d2827a569f67b57e8aac41dc9042335645098499328a1, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event 024092324ed2f7d1d20d2827a569f67b57e8aac41dc9042335645098499328a1 to feed as social
+ (NOBRIDGE) LOG Processing event bc13be51306b404429aa599a48441249f2831004ecfe63d68cf4db02c6203817, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event bc13be51306b404429aa599a48441249f2831004ecfe63d68cf4db02c6203817 to feed as social
+ (NOBRIDGE) LOG Processing event 01e8dc0b1f898b218cda8196852b257b6c1af7538d77a62410cb1f1c8c76032a, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 01e8dc0b1f898b218cda8196852b257b6c1af7538d77a62410cb1f1c8c76032a to feed as social
+ (NOBRIDGE) LOG Processing event 5715c5b18cb8f10cb09b501bbe1ae45d7dc01d6af557ee8c7b6b3ac82703d70c, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 5715c5b18cb8f10cb09b501bbe1ae45d7dc01d6af557ee8c7b6b3ac82703d70c to feed as exercise
+ (NOBRIDGE) LOG Processing event 2d9701e351f7443b41ebe32525cd5a737f86f47415cf7430f98fab5ed75103db, kind 33402 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 2d9701e351f7443b41ebe32525cd5a737f86f47415cf7430f98fab5ed75103db to feed as template
+ (NOBRIDGE) LOG Processing event e0f60a0f73ad872adf922626045b9335bf4c989b1e83fb6f0156a0e2a1df3392, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event e0f60a0f73ad872adf922626045b9335bf4c989b1e83fb6f0156a0e2a1df3392 to feed as social
+ (NOBRIDGE) LOG Processing event 94ef29af1bd69e8ccab91354888115dfef463c44c5b6fb1a08181671f6e2dfe6, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event 94ef29af1bd69e8ccab91354888115dfef463c44c5b6fb1a08181671f6e2dfe6 to feed as social
+ (NOBRIDGE) LOG Processing event ac616a5190be759359038059d4b4f1279e2937b0f31dc19c00763021c8c4776a, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ac616a5190be759359038059d4b4f1279e2937b0f31dc19c00763021c8c4776a to feed as social
+ (NOBRIDGE) LOG Processing event 5ecaf317ca32dfb3e617e1c605dbf3c9a1605c7a161abb71db87ba7fc1df7279, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event 5ecaf317ca32dfb3e617e1c605dbf3c9a1605c7a161abb71db87ba7fc1df7279 to feed as social
+ (NOBRIDGE) LOG Processing event 9c29dbb31d4414b33c37e6fd489cc443e98b80f62c31342e7f15a50e38364cf5, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event 9c29dbb31d4414b33c37e6fd489cc443e98b80f62c31342e7f15a50e38364cf5 to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for following feed
+ (NOBRIDGE) LOG [FollowingScreen] Manual refresh completed successfully
+ (NOBRIDGE) LOG [FollowingScreen] Marking as loaded with 8 contacts after manual refresh
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6c2eeb3d3e23f31bbf9136c87fd2373eb3acb117ea0e1575dec86f14c640fb08", "following", 1742088913, 1742837748118]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["df58de83df99ce0436edb573f9da5ade2cd29ffd371ccb1ac64036402f069b78", "following", 1741793703, 1742837748118]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["2bd1becb30e7b691d0d5e889e2bb084e88ffe624c4e16727cb4b20cde66a560c", "following", 1741542441, 1742837748118]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e247260fc69f96ea7476a624feffff8ca4ee110a3ca2f2cf370cde979c52b1ec", "following", 1741500996, 1742837748118]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["55a1521ade545d79eb6ed801ee9de621a70207781dd1a8b0c2ca5173710a5e3f", "following", 1741465407, 1742837748118]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5709a0925a38b32f69f54e9cd875b1df8d841b219e423157018ace04b157d174", "following", 1741465404, 1742837748118]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["00b1fd40e3852e0ff109a63b1c2b7be335915641f510ec6a644ff8ddc3fa80a5", "following", 1741464651, 1742837748118]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["c1403b3d4aed6c78015d899422a29d8cf3d2c7b60bc97b4e6930317b7e1d9735", "following", 1741408312, 1742837748118]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["bbc54cbbd47e87845cbae9387c8cd51c1b7a0d78cd7a332e5bb141da1362622a", "following", 1741404545, 1742837748119]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["9bdbdb5472e0cd0d998cb8b4de60192eac1f670fee5ea90012a2af1a872a3f05", "following", 1741369023, 1742837748119]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["975ddcea8d85f3f5a913f938e2c539bbe7d48bd4821a7ff86b2e0884303bcdd3", "following", 1741360516, 1742837748119]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["a3f29b38176410513510d944dfb29f4ab044bcd9436305d5122092b5cef02f20", "following", 1741354798, 1742837748119]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["01b8a06e311cad468ab983d9bb18228559c41a401089fcfdd9557b2823e192e2", "following", 1741325931, 1742837748119]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["cd4cebc11e52288301cc1cebf7cee8a2b511519eacd2b2d27911fbc5d8254e79", "following", 1741064257, 1742837748119]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["edad84bcf54259ab0900f149e55ab2d74b07e6df439f678ecc0cb27a23de588a", "following", 1741058549, 1742837748119]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d19823573770e8ae9a2a850f3e76ebb9f5a90b80f472aabcb641a2605bdd1e54", "following", 1741058545, 1742837748119]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["153e7ab88a2529b793880280fec331b1115b00e3de3208dade416e1a7da38c76", "following", 1741058539, 1742837748119]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["7cdb43b461173a931ce2f3c85bcc2d507dc015dd3eae004292de0c9b4b84fa0b", "following", 1742088913, 1742837748119]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f186c75a5c216e77d010e2eb0412158b287048db3136ad2ec9cfc7f02cf57263", "following", 1741793703, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["21a80747a105f9ccd0d36662a34b727a38676fe8d7a6691700f9c8c624e7cdad", "following", 1741500996, 1742837748120]
+ (NOBRIDGE) LOG [SocialFeedCache] Scheduling next flush in 100ms (retry: 0)
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5d5fa18ba3f6c7d6a83c93e8fed7c1918340e93b7aec99fc031cd40881b4c184", "following", 1741465410, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["1a50f6dabc8d3236d9020942cdb0d0d89ae9c530b6b74766b0725ac2bb02785d", "following", 1741465406, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["9c5adb8c5af40dea3371ba51f062448442b947db93f6f3e00aea7d4e41410500", "following", 1741464651, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f778bd11e037fb36a488c4a601904adaaa132cbb6f2af9c944baffe9794350f5", "following", 1741408312, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["23ca15854669775eb6585b1d3bf79086e8a8c4d0c63193dacb2a510473259328", "following", 1741404545, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["b6bd2d219e2a1ae64b6070bc4da195132c637c9bd43a601521d5351c71c6c691", "following", 1741360516, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["40880b27a05ca95866596c5c966572876bb0716e63ae25e8882aa3c2fb0cde2d", "following", 1741354799, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b469ce1f97b5f0d4a41c6f9ca04c4e2ebc7d67ef75676b31e758f7b712bbdc1", "following", 1741325931, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3b6f3d0b4ffaf568af01b56b42f1087a5874362a44c37fb1cbcb7812f531c150", "following", 1741061264, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f35868449a75e2c490a8db2bedb8239ced782bc165b9a54ad2f358e6bc957be9", "following", 1741060879, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["db99232bb71fba3d0ad3196d1acc2469cd2d25474dee1c65ead765b685100117", "following", 1741060818, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8fcc9f1c2c6810c114ff49fbacb726852ac4ec5bf3ee128369967c94abc87b6e", "following", 1741058428, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["1136d82bb8c6b5dabba4388e1d82520aa0908a8b5bfcb13f0cfb961e5b50b93c", "global", 1742564454, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8dbf9ef0138953f7af244c7d307d128aff4fb1e543cf99d9033d42202c8c438b", "following", 1742224058, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8d7463990657e7bd1c6f3ad96e4a43d22b7397e9257706e327a64ac6bc8857e7", "following", 1742224056, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["1bce3854d1786a9a15f1aad1d305e8919d3fd0cd4e87a2404f925b2bacc7af7f", "following", 1742224055, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["9c657ed574653f1b66ab465a00595f74dfe82f56f9e5bff5a1825e6d73ff2281", "following", 1742224054, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8ee93b62bf09904b7235a64cccdc9f2df9ac1a8b39a888112183bbd0fd4bb317", "following", 1742131752, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["76bbc7e470bcc0d41990ad2bbb1f9acc4958128d9df8b05fdfbc79c8c96d4443", "following", 1742131751, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3d51ff071ffb9c5264ca1b1475663aba24d7107de57fe9053e5e049971bf490e", "following", 1742131750, 1742837748120]
+ (NOBRIDGE) LOG [SocialFeedCache] Scheduling next flush in 100ms (retry: 0)
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["a25ae050500f62fa49272793e68aef2232e722144487cc7bdacbe7619dfe4bb8", "global", 1742435458, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["ef56c023a89c69bbad3fcddb62ec5256077d5ece758dc4f104dfdbadfafb39a9", "global", 1742349609, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["9ed9d9e837a7ec42ecfafab486367c901946f7dbb7719a91652ce4b46d8baa8b", "global", 1742257188, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["03204fd46ba7c267a1eba436c988a33ba36229a8d78067327158afa0ea27a9a0", "following", 1742165596, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["afbe2472cdd6653b90f20f22d825b164788331fe1c4b4578672096f81f42a385", "following", 1742090002, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["818771cf31bd201c65fac1a5b05b206f37c9c066856472fd9196ed40f40e5288", "following", 1742006543, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["024092324ed2f7d1d20d2827a569f67b57e8aac41dc9042335645098499328a1", "following", 1741917334, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["bc13be51306b404429aa599a48441249f2831004ecfe63d68cf4db02c6203817", "following", 1741830626, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["01e8dc0b1f898b218cda8196852b257b6c1af7538d77a62410cb1f1c8c76032a", "following", 1741793818, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5715c5b18cb8f10cb09b501bbe1ae45d7dc01d6af557ee8c7b6b3ac82703d70c", "following", 1742131749, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["2d9701e351f7443b41ebe32525cd5a737f86f47415cf7430f98fab5ed75103db", "following", 1742070679, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e0f60a0f73ad872adf922626045b9335bf4c989b1e83fb6f0156a0e2a1df3392", "following", 1741731572, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["94ef29af1bd69e8ccab91354888115dfef463c44c5b6fb1a08181671f6e2dfe6", "following", 1741662066, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["ac616a5190be759359038059d4b4f1279e2937b0f31dc19c00763021c8c4776a", "following", 1741614854, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5ecaf317ca32dfb3e617e1c605dbf3c9a1605c7a161abb71db87ba7fc1df7279", "following", 1741567624, 1742837748120]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["9c29dbb31d4414b33c37e6fd489cc443e98b80f62c31342e7f15a50e38364cf5", "following", 1741782802, 1742837748120]
+
diff --git a/docs/consolelogs/20252303-2.md b/docs/consolelogs/20252303-2.md
new file mode 100644
index 0000000..dfd5900
--- /dev/null
+++ b/docs/consolelogs/20252303-2.md
@@ -0,0 +1,1376 @@
+💡 JavaScript logs will be removed from Metro in React Native 0.77! Please use React Native DevTools as your default tool. Tip: Type j in the terminal to open (requires Google Chrome or Microsoft Edge).
+ (NOBRIDGE) LOG [useFeedHooks] Initialized POWR pubkey hex: 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG expo-av is available, will use VideoSplashScreen on iOS
+ (NOBRIDGE) LOG Successfully imported VideoSplashScreen
+ (NOBRIDGE) LOG _layout.tsx loaded
+ (NOBRIDGE) LOG ⚠️ [expo-av]: Video component from `expo-av` is deprecated in favor of `expo-video`. See the documentation at https://docs.expo.dev/versions/latest/sdk/video/ for the new API reference.
+ (NOBRIDGE) LOG Starting app initialization in background...
+ (NOBRIDGE) LOG Network connectivity: offline
+ (NOBRIDGE) LOG [NDK] Initializing...
+ (NOBRIDGE) LOG [ConnectivityService] Network connection restored, triggering sync
+ (NOBRIDGE) LOG [NDK] Found saved private key, initializing signer
+ (NOBRIDGE) LOG [NDK] Login attempt starting
+ (NOBRIDGE) LOG [NDK] Processing private key input
+ (NOBRIDGE) LOG [NDK] Using provided key, format: hex length: 64
+ (NOBRIDGE) LOG [NDK] Creating signer with key length: 64
+ (NOBRIDGE) LOG [NDK] Signer created, setting on NDK
+ (NOBRIDGE) LOG [NDK] Getting user from signer
+ (NOBRIDGE) LOG [NDK] User retrieved, pubkey: 55127fc9...
+ (NOBRIDGE) LOG [NDK] Fetching user profile
+ (NOBRIDGE) LOG Video loaded successfully
+ (NOBRIDGE) LOG Video loaded, hiding native splash screen
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.damus.io/
+ (NOBRIDGE) LOG Loaded 0 favorite IDs from database
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://powr.duckdns.org/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://purplepag.es/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://nos.lol/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.nostr.band/
+ (NOBRIDGE) LOG [NDK] Profile fetched successfully
+ (NOBRIDGE) LOG [NDK] Profile data available
+ (NOBRIDGE) LOG [NDK] User profile loaded: Walter Sobchak
+ (NOBRIDGE) LOG [NDK] Saving private key to secure storage
+ (NOBRIDGE) LOG [NDK] Creating RelayService to import user preferences
+ (NOBRIDGE) LOG [NDK] Setting NDK on RelayService
+ (NOBRIDGE) LOG [RelayService] NDK instance set
+ (NOBRIDGE) LOG [NDK] Importing relay metadata for user: 55127fc9...
+ (NOBRIDGE) LOG [RelayService] Importing relays from metadata for user 55127fc9...
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://nostr.wine/
+ (NOBRIDGE) LOG [RelayService] Found relay list in event created at 2025-03-21T02:16:23.000Z
+ (NOBRIDGE) LOG [RelayService] No relay tags found in event
+ (NOBRIDGE) LOG [NDK] Successfully imported user relay preferences
+ (NOBRIDGE) LOG [NDK] Login successful, updating state
+ (NOBRIDGE) LOG [NDK] Login complete
+ (NOBRIDGE) LOG App initialization completed!
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://offchain.pub/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.snort.social/
+ (NOBRIDGE) LOG Video finished playing
+ (NOBRIDGE) LOG Splash video finished playing
+ (NOBRIDGE) LOG [DB] Starting database initialization...
+ (NOBRIDGE) LOG [DB] Opening database...
+ (NOBRIDGE) LOG [DB] Creating schema...
+ (NOBRIDGE) LOG [Schema] Initializing database on ios
+ (NOBRIDGE) LOG [Schema] Current version: 11
+ (NOBRIDGE) LOG [Schema] Current version: 11, Target version: 11
+ (NOBRIDGE) LOG [Schema] Database already at version 11, checking for missing tables
+ (NOBRIDGE) LOG [Schema] Checking for missing critical tables...
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [Schema] Critical tables check complete
+ (NOBRIDGE) LOG [Schema] Checking for missing critical tables...
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [Schema] Critical tables check complete
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [DB] Migration v8 executed successfully
+ (NOBRIDGE) LOG [Schema] Running migration v9 - Enhanced Nostr metadata
+ (NOBRIDGE) LOG [Schema] Migration v9 completed successfully
+ (NOBRIDGE) LOG [DB] Migration v9 executed successfully
+ (NOBRIDGE) LOG [DB] Initializing services...
+ (NOBRIDGE) LOG
+--- Database Debug Info ---
+ (NOBRIDGE) LOG Database Path: file:///Users/danielwyler/Library/Developer/CoreSimulator/Devices/2A575D76-EFD3-483A-B8A1-AB3A78107638/data/Containers/Data/Application/9845E875-95EC-461A-ABE0-6750715293F0/Documents/SQLite/powr.db
+ (NOBRIDGE) LOG File Info: {"exists": true, "isDirectory": false, "md5": "9717c713f4608d9ac749b3b907b94a0e", "modificationTime": 1742786223.408177, "size": 245760, "uri": "file:///Users/danielwyler/Library/Developer/CoreSimulator/Devices/2A575D76-EFD3-483A-B8A1-AB3A78107638/data/Containers/Data/Application/9845E875-95EC-461A-ABE0-6750715293F0/Documents/SQLite/powr.db"}
+ (NOBRIDGE) LOG Tables: ["schema_version", "exercises", "exercise_tags", "nostr_events", "event_tags", "templates", "template_exercises", "powr_packs", "powr_pack_items", "favorites", "nostr_workouts", "workouts", "workout_exercises", "workout_sets", "app_status", "feed_cache"]
+ (NOBRIDGE) LOG ------------------------
+ (NOBRIDGE) LOG [DB] Database initialized successfully
+ (NOBRIDGE) LOG [DB] Database ready - triggering initial library refresh
+ (NOBRIDGE) LOG [Database] Delayed initialization complete
+ (NOBRIDGE) LOG [RelayInitializer] Setting NDK instance in ProfileImageCache
+ (NOBRIDGE) LOG Running SQL:
+ CREATE TABLE IF NOT EXISTS feed_cache (
+ event_id TEXT NOT NULL,
+ feed_type TEXT NOT NULL,
+ created_at INTEGER NOT NULL,
+ cached_at INTEGER NOT NULL,
+ PRIMARY KEY (event_id, feed_type)
+ )
+ (NOBRIDGE) LOG Parameters: []
+ (NOBRIDGE) LOG [RelayInitializer] SocialFeedCache initialized with NDK
+ (NOBRIDGE) LOG [RelayInitializer] NDK available and online, loading relays...
+ (NOBRIDGE) LOG [RelayStore] Loading relays...
+ (NOBRIDGE) LOG [RelayStore] Created RelayService instance
+ (NOBRIDGE) LOG [RelayService] NDK instance set
+ (NOBRIDGE) LOG [RelayService] Found 8 relays in NDK pool
+ (NOBRIDGE) LOG [RelayStore] Loaded 8 relays with status
+ (NOBRIDGE) LOG Running SQL:
+ CREATE INDEX IF NOT EXISTS idx_feed_cache_type_time
+ ON feed_cache (feed_type, created_at DESC)
+ (NOBRIDGE) LOG Parameters: []
+ (NOBRIDGE) LOG [SocialFeedCache] Feed cache table initialized
+ (NOBRIDGE) LOG NDK status: initialized
+ (NOBRIDGE) LOG [useSocialFeed] Loading powr feed with authors: ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T03:17:13.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: {"kinds":[1301,33401,33402,1,30023],"since":1742699833,"limit":30,"authors":["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]}
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to powr feed with filter: {"authors": ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1301, 33401, 33402, 1, 30023], "limit": 30, "since": 1742699833}
+ (NOBRIDGE) LOG [FollowingScreen] Contact list has 0 contacts
+ (NOBRIDGE) LOG [useSocialFeed] Loading following feed with authors: undefined
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T03:17:13.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Following feed with no authors, skipping subscription
+ (NOBRIDGE) LOG [useSocialFeed] Loading global feed with authors: undefined
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T03:17:13.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: {"kinds":[1301,33401,33402,1,30023],"since":1742699833,"limit":30,"#t":["workout","fitness","powr","31days","crossfit","wod","gym","strength","cardio","training","exercise"]}
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to global feed with filter: {"#t": ["workout", "fitness", "powr", "31days", "crossfit", "wod", "gym", "strength", "cardio", "training", "exercise"], "kinds": [1301, 33401, 33402, 1, 30023], "limit": 30, "since": 1742699833}
+ (NOBRIDGE) LOG Processing event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70 to feed as exercise
+ (NOBRIDGE) LOG Processing event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b to feed as social
+ (NOBRIDGE) LOG Processing event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7 to feed as social
+ (NOBRIDGE) LOG Processing event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab to feed as social
+ (NOBRIDGE) LOG Processing event d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd, kind 1 from 5d4e1d2a6731875e9decb868e2240aa4b75a6d67199ed1387a6ff08aba272967
+ (NOBRIDGE) LOG Adding event d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd to feed as social
+ (NOBRIDGE) LOG Processing event d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085, kind 1 from f4d89779148ccd245c8d50914a284fd62d97cb0fb68b797a70f24a172b522db9
+ (NOBRIDGE) LOG Adding event d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085 to feed as social
+ (NOBRIDGE) LOG Processing event f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21, kind 1 from 60e5bccda24b32e79c75edb8e7c66e55202853932849f02e329c985b71ac3fbd
+ (NOBRIDGE) LOG Adding event f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21 to feed as social
+ (NOBRIDGE) LOG Processing event e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567, kind 1 from 7a6b8c7de171955c214ded7e35cc782cd6dddfd141abb1929c632f69348e6f49
+ (NOBRIDGE) LOG Adding event e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567 to feed as social
+ (NOBRIDGE) LOG Processing event fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698, kind 1 from ad8d9660c675d3b3a16fc1484c102782ba8370ae5f94ec5fc2b244a8c8a0a589
+ (NOBRIDGE) LOG Adding event fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698 to feed as social
+ (NOBRIDGE) LOG Processing event dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c, kind 1 from 14147765a18028fdb386db2891e747c11b2a32761e12a0e6e43d5f8451ee74bc
+ (NOBRIDGE) LOG Adding event dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c to feed as social
+ (NOBRIDGE) LOG Processing event 3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5, kind 1 from 43d7f07d10b9e662745e10b2fc201a74dc178a308c31409350d06b04477816e1
+ (NOBRIDGE) LOG Adding event 3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5 to feed as social
+ (NOBRIDGE) LOG Processing event cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91, kind 1 from 81fa5b70a73a691c6e78823d035ffc44f6b505e6f03637759bd36e7a451539fd
+ (NOBRIDGE) LOG Adding event cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91 to feed as social
+ (NOBRIDGE) LOG Processing event 83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4, kind 1 from 5069ea44d8977e77c6aea605d0c5386b24504a3abd0fe8a3d1cf5f4cedca40a7
+ (NOBRIDGE) LOG Adding event 83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4 to feed as social
+ (NOBRIDGE) LOG Processing event 34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53, kind 1 from 70632e1941795474cb154415afb79c09b58189afd2243bf81153d59710eb6092
+ (NOBRIDGE) LOG Adding event 34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53 to feed as social
+ (NOBRIDGE) LOG Processing event 593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475, kind 1 from b32d6b081c2422f57cbea1c1177159a93ffaa1913f540ae91e5fe3785b198cb2
+ (NOBRIDGE) LOG Adding event 593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475 to feed as social
+ (NOBRIDGE) LOG Processing event 5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58, kind 1 from dc506d8cdee104146e000dce67d03a15dc8e5e9e7a3df166cf8566a7a6fe419a
+ (NOBRIDGE) LOG Adding event 5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58 to feed as social
+ (NOBRIDGE) LOG Processing event 89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be, kind 1 from 8b3db033768dc87dd8ee48a1361ae6d203e946d7f0651472519bc4df1c90e0ea
+ (NOBRIDGE) LOG Adding event 89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be to feed as social
+ (NOBRIDGE) LOG Processing event e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c, kind 1 from c465a1051794a507a55adebc0f044dc6e79d9b67a5e05aed4bf684afe088f976
+ (NOBRIDGE) LOG Adding event e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for powr feed
+ (NOBRIDGE) LOG Found 5 contacts via followSet()
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for global feed
+ (NOBRIDGE) LOG [FollowingScreen] Contact list has 6 contacts
+ (NOBRIDGE) LOG [FollowingScreen] First few contacts: 3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506, 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04, f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "global", 1742703805, 1742786234003]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b", "global", 1742703620, 1742786234003]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7", "global", 1742702574, 1742786234004]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab", "global", 1742782158, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "global", 1742780020, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085", "global", 1742775869, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "global", 1742760959, 1742786234469]
+ (NOBRIDGE) LOG Attempting fetch after delay
+ (NOBRIDGE) LOG Explicitly connecting to relays: ["wss://relay.damus.io", "wss://nos.lol", "wss://relay.nostr.band", "wss://purplepag.es"]
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://relay.damus.io
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://nos.lol
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://relay.nostr.band
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://purplepag.es
+ (NOBRIDGE) LOG NDK connection status: 8 relays connected
+ (NOBRIDGE) LOG Fetching POWR packs from known publishers
+ (NOBRIDGE) LOG Fetching from known publishers: ["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567", "global", 1742758559, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "global", 1742750608, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "global", 1742749229, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5", "global", 1742746988, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "global", 1742745450, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4", "global", 1742741497, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "global", 1742739424, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475", "global", 1742731342, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "global", 1742730917, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be", "global", 1742722524, 1742786234469]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c", "global", 1742703529, 1742786234469]
+ (NOBRIDGE) LOG Fetched 14 events from known publishers
+ (NOBRIDGE) LOG First event basic info: {"contentPreview": "This POWR Pack includes relay hints to improve con", "id": "42e46198f802ac821b5a82b96d083e0e5cb9a4790b79a007b0a65dfe1020576c", "kind": 30004, "pubkey": "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "tagsCount": 13}
+ (NOBRIDGE) LOG Created 14 simplified packs
+ (NOBRIDGE) LOG First simplified pack: {"id": "42e46198f802ac821b5a82b96d083e0e5cb9a4790b79a007b0a65dfe1020576c", "tagsCount": 13}
+ (NOBRIDGE) LOG Set featuredPacks state with simplified packs
+ (NOBRIDGE) LOG Refreshing following feed
+ (NOBRIDGE) LOG [useSocialFeed] Loading following feed with authors: ["3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T03:17:14.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: {"kinds":[1301,33401,33402,1,30023],"since":1742699834,"limit":30,"authors":["3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506","0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04","f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9","55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21","fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52","0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"],"#t":["workout","fitness","powr","31days","crossfit","wod","gym","strength","cardio","training","exercise"]}
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to following feed with filter: {"#t": ["workout", "fitness", "powr", "31days", "crossfit", "wod", "gym", "strength", "cardio", "training", "exercise"], "authors": ["3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1301, 33401, 33402, 1, 30023], "limit": 30, "since": 1742699834}
+ (NOBRIDGE) LOG Processing event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70 to feed as exercise
+ (NOBRIDGE) LOG Processing event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b to feed as social
+ (NOBRIDGE) LOG Processing event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7 to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for following feed
+ (NOBRIDGE) LOG [NDK] Relay disconnected: wss://relay.nostr.band/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.nostr.band/
+ (NOBRIDGE) LOG Refreshing following feed
+ (NOBRIDGE) LOG [useSocialFeed] Cleaning up existing subscription for following feed
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from following feed
+ (NOBRIDGE) LOG [useSocialFeed] Loading following feed with authors: ["3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T03:17:14.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: {"kinds":[1301,33401,33402,1,30023],"since":1742699834,"limit":30,"authors":["3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506","0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04","f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9","55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21","fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52","0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"],"#t":["workout","fitness","powr","31days","crossfit","wod","gym","strength","cardio","training","exercise"]}
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to following feed with filter: {"#t": ["workout", "fitness", "powr", "31days", "crossfit", "wod", "gym", "strength", "cardio", "training", "exercise"], "authors": ["3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1301, 33401, 33402, 1, 30023], "limit": 30, "since": 1742699834}
+ (NOBRIDGE) LOG Processing event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70 to feed as exercise
+ (NOBRIDGE) LOG Processing event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b to feed as social
+ (NOBRIDGE) LOG Processing event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7 to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for following feed
+ (NOBRIDGE) LOG Refreshing following feed
+ (NOBRIDGE) LOG [useSocialFeed] Subscription on cooldown, skipping
+ (NOBRIDGE) LOG Refreshing following feed
+ (NOBRIDGE) LOG [useSocialFeed] Subscription on cooldown, skipping
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) ERROR SQL Error: [Error: Call to function 'NativeDatabase.prepareAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Error retrieving event: [Error: Call to function 'NativeDatabase.prepareAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", 1, 1742786395, "Testing #powr", "d5bae27817a1ec5dfd8d1967c5a81a4f8ba4871835fd48ae2100f411fb9202930115923902ee87fa2b341d89f45caa53a6be8c5e22c63d398ef2ce86f8d45b7f", "{\"id\":\"ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0\",\"pubkey\":\"55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21\",\"kind\":1,\"created_at\":1742786395,\"content\":\"Testing #powr\",\"sig\":\"d5bae27817a1ec5dfd8d1967c5a81a4f8ba4871835fd48ae2100f411fb9202930115923902ee87fa2b341d89f45caa53a6be8c5e22c63d398ef2ce86f8d45b7f\",\"tags\":[[\"t\",\"powr\"],[\"client\",\"Nostur\",\"31990:9be0be0fc079548233231614e4e1efc9f28b0db398011efeecf05fe570e5dd33:1685868693432\"]]}", 1742786406649]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0", "t", "powr", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0", "client", "Nostur", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0", "global", 1742786395, 1742786406649]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) LOG Refreshing following feed
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) LOG [useSocialFeed] Cleaning up existing subscription for following feed
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from following feed
+ (NOBRIDGE) LOG [useSocialFeed] Loading following feed with authors: ["3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T03:17:14.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: {"kinds":[1301,33401,33402,1,30023],"since":1742699834,"limit":30,"authors":["3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506","0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04","f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9","55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21","fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52","0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"],"#t":["workout","fitness","powr","31days","crossfit","wod","gym","strength","cardio","training","exercise"]}
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to following feed with filter: {"#t": ["workout", "fitness", "powr", "31days", "crossfit", "wod", "gym", "strength", "cardio", "training", "exercise"], "authors": ["3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1301, 33401, 33402, 1, 30023], "limit": 30, "since": 1742699834}
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG Processing event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70 to feed as exercise
+ (NOBRIDGE) LOG Processing event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b to feed as social
+ (NOBRIDGE) LOG Processing event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7 to feed as social
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for following feed
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) LOG === RELAY CONNECTION STATUS ===
+ (NOBRIDGE) LOG Connected to 8 relays:
+ (NOBRIDGE) LOG - wss://powr.duckdns.org/: 5
+ (NOBRIDGE) LOG - wss://relay.damus.io/: 5
+ (NOBRIDGE) LOG - wss://relay.nostr.band/: 5
+ (NOBRIDGE) LOG - wss://purplepag.es/: 5
+ (NOBRIDGE) LOG - wss://nos.lol/: 5
+ (NOBRIDGE) LOG - wss://relay.snort.social/: 5
+ (NOBRIDGE) LOG - wss://nostr.wine/: 5
+ (NOBRIDGE) LOG - wss://offchain.pub/: 5
+ (NOBRIDGE) LOG ===============================
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR [SocialFeedCache] Error flushing write buffer: [Error: Call to function 'NativeDatabase.execAsync' has been rejected.
+→ Caused by: Access to closed resource]
+ (NOBRIDGE) ERROR Transaction Error: [Error: Call to function 'N
\ No newline at end of file
diff --git a/docs/consolelogs/20252303.md b/docs/consolelogs/20252303.md
new file mode 100644
index 0000000..7c0159a
--- /dev/null
+++ b/docs/consolelogs/20252303.md
@@ -0,0 +1,1963 @@
+ 💡 JavaScript logs will be removed from Metro in React Native 0.77! Please use React Native DevTools as your default tool. Tip: Type j in the terminal to open (requires Google Chrome or Microsoft Edge).
+ (NOBRIDGE) LOG [useFeedHooks] Initialized POWR pubkey hex: 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG Android platform detected, using SimpleSplashScreen
+ (NOBRIDGE) LOG Using SimpleSplashScreen
+ (NOBRIDGE) LOG _layout.tsx loaded
+ (NOBRIDGE) LOG Created profile image cache directory: file:///data/user/0/com.powr.app/cache/profile-images/
+ (NOBRIDGE) LOG SimpleSplashScreen mounted
+ (NOBRIDGE) LOG Starting app initialization in background...
+ (NOBRIDGE) LOG Network connectivity: offline
+ (NOBRIDGE) LOG [NDK] Initializing...
+ (NOBRIDGE) WARN [NDK] Could not initialize SocialFeedCache: [Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
+1. You might have mismatching versions of React and the renderer (such as React DOM)
+2. You might be breaking the Rules of Hooks
+3. You might have more than one copy of React in the same app
+See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.]
+ (NOBRIDGE) LOG [ConnectivityService] Network connection restored, triggering sync
+ (NOBRIDGE) LOG [NDK] Found saved private key, initializing signer
+ (NOBRIDGE) LOG [NDK] Login attempt starting
+ (NOBRIDGE) LOG [NDK] Processing private key input
+ (NOBRIDGE) LOG [NDK] Using provided key, format: hex length: 64
+ (NOBRIDGE) LOG [NDK] Creating signer with key length: 64
+ (NOBRIDGE) LOG [NDK] Signer created, setting on NDK
+ (NOBRIDGE) LOG [NDK] Getting user from signer
+ (NOBRIDGE) LOG [NDK] User retrieved, pubkey: 55127fc9...
+ (NOBRIDGE) LOG [NDK] Fetching user profile
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://powr.duckdns.org/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://purplepag.es/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.damus.io/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://nos.lol/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.nostr.band/
+ (NOBRIDGE) LOG Loaded 3 favorite IDs from database
+ (NOBRIDGE) LOG Splash image loaded successfully
+ (NOBRIDGE) LOG [NDK] Profile fetched successfully
+ (NOBRIDGE) LOG [NDK] Profile data available
+ (NOBRIDGE) LOG [NDK] User profile loaded: Walter Sobchak
+ (NOBRIDGE) LOG [NDK] Saving private key to secure storage
+ (NOBRIDGE) LOG [NDK] Creating RelayService to import user preferences
+ (NOBRIDGE) LOG [NDK] Setting NDK on RelayService
+ (NOBRIDGE) LOG [RelayService] NDK instance set
+ (NOBRIDGE) LOG [NDK] Importing relay metadata for user: 55127fc9...
+ (NOBRIDGE) LOG [RelayService] Importing relays from metadata for user 55127fc9...
+ (NOBRIDGE) LOG [RelayService] Found relay list in event created at 2025-03-21T02:16:23.000Z
+ (NOBRIDGE) LOG [RelayService] No relay tags found in event
+ (NOBRIDGE) LOG [NDK] Successfully imported user relay preferences
+ (NOBRIDGE) LOG [NDK] Login successful, updating state
+ (NOBRIDGE) LOG [NDK] Login complete
+ (NOBRIDGE) LOG App initialization completed!
+ (NOBRIDGE) LOG SimpleSplashScreen unmounting, clearing timer
+ (NOBRIDGE) LOG SimpleSplashScreen mounted
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://nostr.wine/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://offchain.pub/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.snort.social/
+ (NOBRIDGE) LOG SimpleSplashScreen timer complete, calling onFinish
+ (NOBRIDGE) LOG Splash video finished playing
+ (NOBRIDGE) LOG SimpleSplashScreen unmounting, clearing timer
+ (NOBRIDGE) LOG [DB] Starting database initialization...
+ (NOBRIDGE) LOG [DB] Opening database...
+ (NOBRIDGE) LOG [DB] Creating schema...
+ (NOBRIDGE) LOG [Schema] Initializing database on android
+ (NOBRIDGE) LOG [Schema] Current version: 5
+ (NOBRIDGE) LOG [Schema] Current version: 5, Target version: 11
+ (NOBRIDGE) LOG [Schema] Upgrading from version 5 to 11
+ (NOBRIDGE) LOG [Schema] Getting list of tables to drop...
+ (NOBRIDGE) LOG [Schema] Found 12 tables to drop
+ (NOBRIDGE) LOG [Schema] Dropped table: favorites
+ (NOBRIDGE) LOG [Schema] Dropped table: exercises
+ (NOBRIDGE) LOG [Schema] Dropped table: exercise_tags
+ (NOBRIDGE) LOG [Schema] Dropped table: nostr_events
+ (NOBRIDGE) LOG [Schema] Dropped table: event_tags
+ (NOBRIDGE) LOG [Schema] Dropped table: cache_metadata
+ (NOBRIDGE) LOG [Schema] Dropped table: exercise_media
+ (NOBRIDGE) LOG [Schema] Dropped table: user_profiles
+ (NOBRIDGE) LOG [Schema] Dropped table: user_relays
+ (NOBRIDGE) LOG [Schema] Dropped table: publication_queue
+ (NOBRIDGE) LOG [Schema] Dropped table: app_status
+ (NOBRIDGE) LOG [Schema] Dropped table: ndk_cache
+ (NOBRIDGE) LOG [Schema] Creating all database tables...
+ (NOBRIDGE) LOG [Schema] Creating exercises table...
+ (NOBRIDGE) LOG [Schema] Creating exercise_tags table...
+ (NOBRIDGE) LOG [Schema] Creating nostr_events table...
+ (NOBRIDGE) LOG [Schema] Creating event_tags table...
+ (NOBRIDGE) LOG [Schema] Creating templates table...
+ (NOBRIDGE) LOG [Schema] Creating template_exercises table...
+ (NOBRIDGE) LOG [Schema] Creating powr_packs table...
+ (NOBRIDGE) LOG [Schema] Creating powr_pack_items table...
+ (NOBRIDGE) LOG [Schema] Creating favorites table...
+ (NOBRIDGE) LOG [Schema] All tables created successfully
+ (NOBRIDGE) LOG [Schema] Running migration from version 5 to 8
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [Schema] Running migration from version 5 to 9
+ (NOBRIDGE) LOG [Schema] Running migration v9 - Enhanced Nostr metadata
+ (NOBRIDGE) LOG [Schema] Adding nostr_metadata column to exercises table
+ (NOBRIDGE) LOG [Schema] Adding nostr_metadata column to templates table
+ (NOBRIDGE) LOG [Schema] Adding nostr_reference column to template_exercises table
+ (NOBRIDGE) LOG [Schema] Migration v9 completed successfully
+ (NOBRIDGE) LOG [Schema] Running migration from version 5 to 10
+ (NOBRIDGE) LOG [Schema] Running migration v10 - Adding Favorites table
+ (NOBRIDGE) LOG [Schema] Migration v10 completed successfully
+ (NOBRIDGE) LOG [Schema] Running migration from version 5 to 11
+ (NOBRIDGE) LOG [Schema] Running migration v11 - Adding Nostr fields to workouts
+ (NOBRIDGE) LOG [Migration] Adding Nostr fields to workouts table
+ (NOBRIDGE) LOG [Migration] Workouts table does not exist, skipping migration
+ (NOBRIDGE) LOG [Migration] Creating nostr_workouts table
+ (NOBRIDGE) LOG [Migration] Successfully created nostr_workouts table
+ (NOBRIDGE) LOG [Schema] Migration v11 completed successfully
+ (NOBRIDGE) LOG [Schema] Updating schema version to 11
+ (NOBRIDGE) LOG [Schema] Schema version updated successfully
+ (NOBRIDGE) LOG [Schema] Database successfully upgraded to version 11
+ (NOBRIDGE) LOG [Schema] Checking for missing critical tables...
+ (NOBRIDGE) LOG [Schema] Creating missing workouts tables...
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [Schema] Critical tables check complete
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [DB] Migration v8 executed successfully
+ (NOBRIDGE) LOG [Schema] Running migration v9 - Enhanced Nostr metadata
+ (NOBRIDGE) LOG [Schema] Migration v9 completed successfully
+ (NOBRIDGE) LOG [DB] Migration v9 executed successfully
+ (NOBRIDGE) LOG [DB] Initializing services...
+ (NOBRIDGE) LOG
+--- Database Debug Info ---
+ (NOBRIDGE) LOG Database Path: file:///data/user/0/com.powr.app/files/SQLite/powr.db
+ (NOBRIDGE) LOG File Info: {"exists": true, "isDirectory": false, "modificationTime": 1742784420.404, "size": 180224, "uri": "file:///data/user/0/com.powr.app/files/SQLite/powr.db"}
+ (NOBRIDGE) LOG Tables: ["schema_version", "exercises", "exercise_tags", "nostr_events", "event_tags", "templates", "template_exercises", "powr_packs", "powr_pack_items", "favorites", "nostr_workouts", "workouts", "workout_exercises", "workout_sets"]
+ (NOBRIDGE) LOG ------------------------
+ (NOBRIDGE) LOG [DB] Database initialized successfully
+ (NOBRIDGE) LOG [DB] Database ready - triggering initial library refresh
+ (NOBRIDGE) LOG [Database] Delayed initialization complete
+ (NOBRIDGE) LOG [RelayInitializer] Setting NDK instance in ProfileImageCache
+ (NOBRIDGE) LOG Running SQL:
+ CREATE TABLE IF NOT EXISTS feed_cache (
+ event_id TEXT NOT NULL,
+ feed_type TEXT NOT NULL,
+ created_at INTEGER NOT NULL,
+ cached_at INTEGER NOT NULL,
+ PRIMARY KEY (event_id, feed_type)
+ )
+ (NOBRIDGE) LOG Parameters: []
+ (NOBRIDGE) LOG [RelayInitializer] SocialFeedCache initialized with NDK
+ (NOBRIDGE) LOG [RelayInitializer] NDK available and online, loading relays...
+ (NOBRIDGE) LOG [RelayStore] Loading relays...
+ (NOBRIDGE) LOG [RelayStore] Created RelayService instance
+ (NOBRIDGE) LOG [RelayService] NDK instance set
+ (NOBRIDGE) LOG [RelayService] Found 8 relays in NDK pool
+ (NOBRIDGE) LOG [RelayStore] Loaded 8 relays with status
+ (NOBRIDGE) LOG Running SQL:
+ CREATE INDEX IF NOT EXISTS idx_feed_cache_type_time
+ ON feed_cache (feed_type, created_at DESC)
+ (NOBRIDGE) LOG Parameters: []
+ (NOBRIDGE) LOG [SocialFeedCache] Feed cache table initialized
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Loading workouts for date: 2025-03-23
+ (NOBRIDGE) LOG Calling getWorkoutsByDate...
+ (NOBRIDGE) LOG Found 0 workout dates for 2025-3: []
+ (NOBRIDGE) LOG getWorkoutsByDate returned 0 workouts
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Loading workouts for date: 2025-03-23
+ (NOBRIDGE) LOG Calling getWorkoutsByDate...
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Found 25 workout dates for 2025-3: ["2025-03-06", "2025-03-06", "2025-03-06", "2025-03-10", "2025-03-12", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-08", "2025-03-08", "2025-03-08", "2025-03-09", "2025-03-09", "2025-03-12", "2025-03-15", "2025-03-17", "2025-03-17", "2025-03-17", "2025-03-20", "2025-03-22", "2025-03-23", "2025-03-23"]
+ (NOBRIDGE) LOG getWorkoutsByDate returned 0 workouts
+ (NOBRIDGE) LOG No workouts found with getWorkoutsByDate, trying manual filtering
+ (NOBRIDGE) LOG Found 2 workouts by manual filtering
+ (NOBRIDGE) LOG WorkoutCard for 6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8l4pk
+ (NOBRIDGE) LOG WorkoutCard for 8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92 has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8l428
+ (NOBRIDGE) LOG WorkoutCard for 79456c533e87eb8118efb812164936ed23cf8c2dd89124723cda064d6abb287c has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8kuqs
+ (NOBRIDGE) LOG WorkoutCard for ac1eea11dd4b5824cfc344be1d190344695117629e6cf2cc68229c9777792839 has 1 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8i4x1
+ (NOBRIDGE) LOG WorkoutCard for 378fd9c3164174f8475c400079849bc946cf9c7b6750189c91ba2f149ed0a94d has 1 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8dyca
+ (NOBRIDGE) LOG WorkoutCard for 68debb0dcab2e4331b3937f9365d4b3c5462104dc6308a58e4c1310f62879e14 has 1 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8dy6q
+ (NOBRIDGE) LOG WorkoutCard for 20ecb12c04b98caa59283cac4292f20a9e1fca575b89a52ae3e95c9786bda8b3 has 2 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8dy57
+ (NOBRIDGE) LOG WorkoutCard for 6c2eeb3d3e23f31bbf9136c87fd2373eb3acb117ea0e1575dec86f14c640fb08 has 8 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8aykh
+ (NOBRIDGE) LOG WorkoutCard for acfedc348480bb1c8e157503a4d17e9f8f2f9536e6b45f57af064026680bf775 has 2 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m86326
+ (NOBRIDGE) LOG WorkoutCard for df58de83df99ce0436edb573f9da5ade2cd29ffd371ccb1ac64036402f069b78 has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8627p
+ (NOBRIDGE) LOG WorkoutCard for 7689e8552707e30c58e6d9ea20cda61afad4b6a64826e31655d59e6519af6007 has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m834g3
+ (NOBRIDGE) LOG WorkoutCard for 2bd1becb30e7b691d0d5e889e2bb084e88ffe624c4e16727cb4b20cde66a560c has 6 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m81x8j
+ (NOBRIDGE) LOG WorkoutCard for e247260fc69f96ea7476a624feffff8ca4ee110a3ca2f2cf370cde979c52b1ec has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m818pw
+ (NOBRIDGE) LOG WorkoutCard for 55a1521ade545d79eb6ed801ee9de621a70207781dd1a8b0c2ca5173710a5e3f has 5 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m80nhd
+ (NOBRIDGE) LOG WorkoutCard for 5709a0925a38b32f69f54e9cd875b1df8d841b219e423157018ace04b157d174 has 5 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m80nhd
+ (NOBRIDGE) LOG WorkoutCard for 00b1fd40e3852e0ff109a63b1c2b7be335915641f510ec6a644ff8ddc3fa80a5 has 6 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m80n0y
+ (NOBRIDGE) LOG WorkoutCard for c1403b3d4aed6c78015d899422a29d8cf3d2c7b60bc97b4e6930317b7e1d9735 has 2 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m7zpja
+ (NOBRIDGE) LOG WorkoutCard for bbc54cbbd47e87845cbae9387c8cd51c1b7a0d78cd7a332e5bb141da1362622a has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m7zn9k
+ (NOBRIDGE) LOG WorkoutCard for 9bdbdb5472e0cd0d998cb8b4de60192eac1f670fee5ea90012a2af1a872a3f05 has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m7z253
+ (NOBRIDGE) LOG WorkoutCard for 975ddcea8d85f3f5a913f938e2c539bbe7d48bd4821a7ff86b2e0884303bcdd3 has 0 exercises
+ (NOBRIDGE) LOG WorkoutCard for a3f29b38176410513510d944dfb29f4ab044bcd9436305d5122092b5cef02f20 has 0 exercises
+ (NOBRIDGE) LOG WorkoutCard for 01b8a06e311cad468ab983d9bb18228559c41a401089fcfdd9557b2823e192e2 has 0 exercises
+ (NOBRIDGE) LOG WorkoutCard for 1d6ae30717cbeaa2dd6230f7b556c1b6d9626596e83a4daff131c2dc91cc40ec has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m7y9wr
+ (NOBRIDGE) LOG WorkoutCard for 17507948826a0a3e5431cffd6bd15ef3fd70c068e6740503dcde6929320f4e4e has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m7y8pc
+ (NOBRIDGE) LOG WorkoutCard for 0379b6cde48fe862888c2fbdca7384ace982eb8b4d19018a2edf87c5a5d97f57 has 1 exercises
+ (NOBRIDGE) LOG First exercise: Unknown Exercise
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Loading workouts for date: 2025-03-23
+ (NOBRIDGE) LOG Calling getWorkoutsByDate...
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Loading workouts for date: 2025-03-23
+ (NOBRIDGE) LOG Calling getWorkoutsByDate...
+ (NOBRIDGE) LOG Found 25 workout dates for 2025-3: ["2025-03-23", "2025-03-23", "2025-03-22", "2025-03-20", "2025-03-17", "2025-03-17", "2025-03-17", "2025-03-15", "2025-03-12", "2025-03-12", "2025-03-10", "2025-03-09", "2025-03-09", "2025-03-08", "2025-03-08", "2025-03-08", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-06", "2025-03-06", "2025-03-06"]
+ (NOBRIDGE) LOG getWorkoutsByDate returned 0 workouts
+ (NOBRIDGE) LOG No workouts found with getWorkoutsByDate, trying manual filtering
+ (NOBRIDGE) LOG Found 2 workouts by manual filtering
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG WorkoutCard for 6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8l4pk
+ (NOBRIDGE) LOG WorkoutCard for 8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92 has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8l428
+ (NOBRIDGE) LOG Found 25 workout dates for 2025-3: ["2025-03-23", "2025-03-23", "2025-03-22", "2025-03-20", "2025-03-17", "2025-03-17", "2025-03-17", "2025-03-15", "2025-03-12", "2025-03-12", "2025-03-10", "2025-03-09", "2025-03-09", "2025-03-08", "2025-03-08", "2025-03-08", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-07", "2025-03-06", "2025-03-06", "2025-03-06"]
+ (NOBRIDGE) LOG getWorkoutsByDate returned 0 workouts
+ (NOBRIDGE) LOG No workouts found with getWorkoutsByDate, trying manual filtering
+ (NOBRIDGE) LOG Found 2 workouts by manual filtering
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-01 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-02 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-03 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-04 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-05 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-06 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-07 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-08 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-09 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-10 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-11 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-12 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-13 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-14 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-15 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-16 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-17 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-18 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-19 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-20 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-21 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-22 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-23 has workouts: true
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-24 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-25 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-26 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-27 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-28 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-29 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-30 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG Checking if 2025-03-31 has workouts: false
+ (NOBRIDGE) LOG WorkoutCard for 6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8l4pk
+ (NOBRIDGE) LOG WorkoutCard for 8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92 has 3 exercises
+ (NOBRIDGE) LOG First exercise: Exercise m8l428
+ (NOBRIDGE) LOG NDK status: initialized
+ (NOBRIDGE) LOG [useSocialFeed] Loading powr feed with authors: ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T02:47:15.000Z, until=now
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to powr feed with filter: {"authors": ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1301, 33401, 33402, 1, 30023], "limit": 30, "since": 1742698035}
+ (NOBRIDGE) LOG [FollowingScreen] Contact list has 0 contacts
+ (NOBRIDGE) LOG [useSocialFeed] Loading following feed with authors: undefined
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T02:47:15.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Following feed with no authors, skipping subscription
+ (NOBRIDGE) LOG [useSocialFeed] Loading global feed with authors: undefined
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T02:47:15.000Z, until=now
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to global feed with filter: {"#t": ["workout", "fitness", "powr", "31days", "crossfit", "wod", "gym", "strength", "cardio", "training", "exercise"], "kinds": [1301, 33401, 33402, 1, 30023], "limit": 30, "since": 1742698035}
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for powr feed
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from powr feed
+ (NOBRIDGE) LOG Processing event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70, kind 33401 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70 to feed as exercise
+ (NOBRIDGE) LOG Processing event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b to feed as social
+ (NOBRIDGE) LOG Processing event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event 13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7 to feed as social
+ (NOBRIDGE) LOG Found 5 contacts via followSet()
+ (NOBRIDGE) LOG Processing event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab to feed as social
+ (NOBRIDGE) LOG Processing event d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd, kind 1 from 5d4e1d2a6731875e9decb868e2240aa4b75a6d67199ed1387a6ff08aba272967
+ (NOBRIDGE) LOG Adding event d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd to feed as social
+ (NOBRIDGE) LOG Processing event d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085, kind 1 from f4d89779148ccd245c8d50914a284fd62d97cb0fb68b797a70f24a172b522db9
+ (NOBRIDGE) LOG Adding event d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085 to feed as social
+ (NOBRIDGE) LOG Processing event dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c, kind 1 from 14147765a18028fdb386db2891e747c11b2a32761e12a0e6e43d5f8451ee74bc
+ (NOBRIDGE) LOG Adding event dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c to feed as social
+ (NOBRIDGE) LOG Processing event 83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4, kind 1 from 5069ea44d8977e77c6aea605d0c5386b24504a3abd0fe8a3d1cf5f4cedca40a7
+ (NOBRIDGE) LOG Adding event 83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4 to feed as social
+ (NOBRIDGE) LOG Processing event 5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58, kind 1 from dc506d8cdee104146e000dce67d03a15dc8e5e9e7a3df166cf8566a7a6fe419a
+ (NOBRIDGE) LOG Adding event 5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58 to feed as social
+ (NOBRIDGE) LOG Processing event e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c, kind 1 from c465a1051794a507a55adebc0f044dc6e79d9b67a5e05aed4bf684afe088f976
+ (NOBRIDGE) LOG Adding event e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c to feed as social
+ (NOBRIDGE) LOG Processing event f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21, kind 1 from 60e5bccda24b32e79c75edb8e7c66e55202853932849f02e329c985b71ac3fbd
+ (NOBRIDGE) LOG Adding event f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21 to feed as social
+ (NOBRIDGE) LOG Processing event e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567, kind 1 from 7a6b8c7de171955c214ded7e35cc782cd6dddfd141abb1929c632f69348e6f49
+ (NOBRIDGE) LOG Adding event e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567 to feed as social
+ (NOBRIDGE) LOG Processing event fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698, kind 1 from ad8d9660c675d3b3a16fc1484c102782ba8370ae5f94ec5fc2b244a8c8a0a589
+ (NOBRIDGE) LOG Adding event fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698 to feed as social
+ (NOBRIDGE) LOG Processing event cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91, kind 1 from 81fa5b70a73a691c6e78823d035ffc44f6b505e6f03637759bd36e7a451539fd
+ (NOBRIDGE) LOG Adding event cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91 to feed as social
+ (NOBRIDGE) LOG Processing event 3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5, kind 1 from 43d7f07d10b9e662745e10b2fc201a74dc178a308c31409350d06b04477816e1
+ (NOBRIDGE) LOG Adding event 3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5 to feed as social
+ (NOBRIDGE) LOG [useSocialFeed] Subscription on cooldown, skipping
+ (NOBRIDGE) LOG Processing event 34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53, kind 1 from 70632e1941795474cb154415afb79c09b58189afd2243bf81153d59710eb6092
+ (NOBRIDGE) LOG Adding event 34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53 to feed as social
+ (NOBRIDGE) LOG Processing event 593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475, kind 1 from b32d6b081c2422f57cbea1c1177159a93ffaa1913f540ae91e5fe3785b198cb2
+ (NOBRIDGE) LOG Adding event 593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475 to feed as social
+ (NOBRIDGE) LOG Processing event 89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be, kind 1 from 8b3db033768dc87dd8ee48a1361ae6d203e946d7f0651472519bc4df1c90e0ea
+ (NOBRIDGE) LOG Adding event 89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for global feed
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from powr feed
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from global feed
+ (NOBRIDGE) LOG [FollowingScreen] Contact list has 6 contacts
+ (NOBRIDGE) LOG [FollowingScreen] First few contacts: 3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506, 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04, f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9
+ (NOBRIDGE) LOG [useSocialFeed] Subscription on cooldown, skipping
+ (NOBRIDGE) LOG [useSocialFeed] Subscription on cooldown, skipping
+ (NOBRIDGE) LOG Attempting fetch after delay
+ (NOBRIDGE) LOG Explicitly connecting to relays: ["wss://relay.damus.io", "wss://nos.lol", "wss://relay.nostr.band", "wss://purplepag.es"]
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://relay.damus.io
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://nos.lol
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://relay.nostr.band
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://purplepag.es
+ (NOBRIDGE) LOG NDK connection status: 8 relays connected
+ (NOBRIDGE) LOG Fetching POWR packs from known publishers
+ (NOBRIDGE) LOG Fetching from known publishers: ["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", 33401, 1742703805, "Test 2", "c6b4d00ac69033023d00f5f5677efd612dc5d1020a1dba0c60580d05a1698ae09452ab3f829a5cd53be1eaa1d26a95cf85bd988d6311aa26fcb3e45c916d97df", "{\"id\":\"8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70\",\"pubkey\":\"55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21\",\"kind\":33401,\"created_at\":1742703805,\"content\":\"Test 2\",\"sig\":\"c6b4d00ac69033023d00f5f5677efd612dc5d1020a1dba0c60580d05a1698ae09452ab3f829a5cd53be1eaa1d26a95cf85bd988d6311aa26fcb3e45c916d97df\",\"tags\":[[\"d\",\"exercise-1742703804\"],[\"title\",\"Test 2\"],[\"type\",\"strength\"],[\"category\",\"Legs\"],[\"format\",\"weight\",\"reps\"],[\"format_units\",\"kg\",\"count\"],[\"equipment\",\"barbell\"],[\"t\",\"test\"],[\"t\",\"powr\"]]}", 1742784437450]
+ (NOBRIDGE) LOG [useSocialFeed] Subscription on cooldown, skipping
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from powr feed
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70"]
+ (NOBRIDGE) LOG Fetched 14 events from known publishers
+ (NOBRIDGE) LOG First event basic info: {"contentPreview": "This POWR Pack includes relay hints to improve con", "id": "42e46198f802ac821b5a82b96d083e0e5cb9a4790b79a007b0a65dfe1020576c", "kind": 30004, "pubkey": "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "tagsCount": 13}
+ (NOBRIDGE) LOG Created 14 simplified packs
+ (NOBRIDGE) LOG First simplified pack: {"id": "42e46198f802ac821b5a82b96d083e0e5cb9a4790b79a007b0a65dfe1020576c", "tagsCount": 13}
+ (NOBRIDGE) LOG Set featuredPacks state with simplified packs
+ (NOBRIDGE) LOG [useSocialFeed] Cleaning up existing subscription for powr feed
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from powr feed
+ (NOBRIDGE) LOG [useSocialFeed] Loading powr feed with authors: ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T02:47:17.000Z, until=now
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to powr feed with filter: {"authors": ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1301, 33401, 33402, 1, 30023], "limit": 30, "since": 1742698037}
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "d", "exercise-1742703804", 0]
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from powr feed
+ (NOBRIDGE) ERROR BUG: No filters to merge! Map {}
+ (NOBRIDGE) ERROR BUG: No filters to merge! Map {}
+ (NOBRIDGE) ERROR BUG: No filters to merge! Map {}
+ (NOBRIDGE) ERROR BUG: No filters to merge! Map {}
+ (NOBRIDGE) ERROR BUG: No filters to merge! Map {}
+ (NOBRIDGE) ERROR BUG: No filters to merge! Map {}
+ (NOBRIDGE) ERROR BUG: No filters to merge! Map {}
+ (NOBRIDGE) ERROR BUG: No filters to merge! Map {}
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "title", "Test 2", 1]
+ (NOBRIDGE) LOG [useSocialFeed] Subscription on cooldown, skipping
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "type", "strength", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "category", "Legs", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "format", "weight", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "format_units", "kg", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "equipment", "barbell", 6]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "t", "test", 7]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "t", "powr", 8]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8b79bfa985e3b5e9dfbbddca3b8f5c96b16f52e514929f0d7631c6b952e37f70", "global", 1742703805, 1742784437450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", 1, 1742703620, "testing", "02b024f192514cd74c5e42b8dfe9b723e3ae15f36c7082437b9a1b0d578f10bd18a91ceeea92594419a3e16848b4c5d75ea0eeb7dece9e471a972ae593fd85ae", "{\"id\":\"f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b\",\"pubkey\":\"55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21\",\"kind\":1,\"created_at\":1742703620,\"content\":\"testing\",\"sig\":\"02b024f192514cd74c5e42b8dfe9b723e3ae15f36c7082437b9a1b0d578f10bd18a91ceeea92594419a3e16848b4c5d75ea0eeb7dece9e471a972ae593fd85ae\",\"tags\":[[\"q\",\"6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b\"],[\"k\",\"1301\"],[\"t\",\"fitness\"],[\"t\",\"workout\"]]}", 1742784437451]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b", "q", "6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b", "k", "1301", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b", "t", "fitness", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b", "t", "workout", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f81a46ef595edccd44ca60e8cc823fa48c81d9ec6c0f7ae0d9b0a8a21d7e258b", "global", 1742703620, 1742784437451]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", 1, 1742702574, "Just completed a workout with 3 exercises and 6 sets! 💪 Hit some new PRs today! 🏆", "d43ab53927be793a2d5c22a145677e145d68e7863a29ba351a8bba64cfcea7269b5bcbcb77caa21f4f54a4ce1077abcb28d44f6574e9789f67f86188b3ca4b0a", "{\"id\":\"13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7\",\"pubkey\":\"55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21\",\"kind\":1,\"created_at\":1742702574,\"content\":\"Just completed a workout with 3 exercises and 6 sets! 💪 Hit some new PRs today! 🏆\",\"sig\":\"d43ab53927be793a2d5c22a145677e145d68e7863a29ba351a8bba64cfcea7269b5bcbcb77caa21f4f54a4ce1077abcb28d44f6574e9789f67f86188b3ca4b0a\",\"tags\":[[\"q\",\"8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92\"],[\"k\",\"1301\"],[\"t\",\"fitness\"],[\"t\",\"workout\"]]}", 1742784437452]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7", "q", "8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7", "k", "1301", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7", "t", "fitness", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7", "t", "workout", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["13e2c5f6840e48dcacbd0329fd60a220215b1778e80482f684ffd36c2e19b2d7", "global", 1742702574, 1742784437452]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab", "7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200", 1, 1742782158, "#31days 20/31
+
+Kempo training, forms", "151a042764fe38803d9060369395b82f1f63e6d88440e051f4d2d53380badd55086627a33d880bad51619d306fb2513ac0e87690aa3c8ea872977be0a063a62b", "{\"id\":\"b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab\",\"pubkey\":\"7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200\",\"kind\":1,\"created_at\":1742782158,\"content\":\"#31days 20/31\\n\\nKempo training, forms\",\"sig\":\"151a042764fe38803d9060369395b82f1f63e6d88440e051f4d2d53380badd55086627a33d880bad51619d306fb2513ac0e87690aa3c8ea872977be0a063a62b\",\"tags\":[[\"t\",\"31days\"]]}", 1742784437452]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab", "t", "31days", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab", "global", 1742782158, 1742784437452]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "5d4e1d2a6731875e9decb868e2240aa4b75a6d67199ed1387a6ff08aba272967", 1, 1742780020, "#asknostr
+
+I managed to tear my MCL and shred my meniscus this weekend. I see ortho tomorrow. Any recs to promote healing?
+
+#healing #health #fitness #keto #carnivore #realfood #nostr #healthstr #grownostr", "6184a9db80ba5e04d0a6db40f94ea98b522292029b7f95a9b9d3a5bc2947deff4944a25aa6f89aab8cbfc5b25f2453e3363e9c969101d41cf239fcbdae12c611", "{\"id\":\"d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd\",\"pubkey\":\"5d4e1d2a6731875e9decb868e2240aa4b75a6d67199ed1387a6ff08aba272967\",\"kind\":1,\"created_at\":1742780020,\"content\":\"#asknostr\\n\\nI managed to tear my MCL and shred my meniscus this weekend. I see ortho tomorrow. Any recs to promote healing?\\n\\n#healing #health #fitness #keto #carnivore #realfood #nostr #healthstr #grownostr\",\"sig\":\"6184a9db80ba5e04d0a6db40f94ea98b522292029b7f95a9b9d3a5bc2947deff4944a25aa6f89aab8cbfc5b25f2453e3363e9c969101d41cf239fcbdae12c611\",\"tags\":[[\"t\",\"asknostr\"],[\"t\",\"healing\"],[\"t\",\"health\"],[\"t\",\"fitness\"],[\"t\",\"keto\"],[\"t\",\"carnivore\"],[\"t\",\"realfood\"],[\"t\",\"nostr\"],[\"t\",\"healthstr\"],[\"t\",\"grownostr\"]]}", 1742784437452]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "t", "asknostr", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "t", "healing", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "t", "health", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "t", "fitness", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "t", "keto", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "t", "carnivore", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "t", "realfood", 6]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "t", "nostr", 7]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "t", "healthstr", 8]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "t", "grownostr", 9]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "global", 1742780020, 1742784437452]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085", "f4d89779148ccd245c8d50914a284fd62d97cb0fb68b797a70f24a172b522db9", 1, 1742775869, "Day 23/31 Non stop activity today. #31days
+
+- loaded and unloaded two pickup truckloads of logs to fill the bottom of the garden beds
+- moved pavers and pebbles to put under the edges to minimize ground contact
+- two hours of soccer with the kids
+- replanted some clover on our soccer pitch to cover the spits we're destroying
+- and finished by staining the cedar with a food safe oil
+
+https://i.nostr.build/WiP3rks3pFAim15V.jpg", "64deedbe6b1ae40d60f1421d36feb04bdde62ebd8f095c7c098243007174651c31abfdb37065e35878ebc43bc572445f0cde6dff45efff00261f78c3603283d2", "{\"id\":\"d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085\",\"pubkey\":\"f4d89779148ccd245c8d50914a284fd62d97cb0fb68b797a70f24a172b522db9\",\"kind\":1,\"created_at\":1742775869,\"content\":\"Day 23/31 Non stop activity today. #31days\\n\\n- loaded and unloaded two pickup truckloads of logs to fill the bottom of the garden beds\\n- moved pavers and pebbles to put under the edges to minimize ground contact\\n- two hours of soccer with the kids\\n- replanted some clover on our soccer pitch to cover the spits we're destroying\\n- and finished by staining the cedar with a food safe oil\\n\\nhttps://i.nostr.build/WiP3rks3pFAim15V.jpg\",\"sig\":\"64deedbe6b1ae40d60f1421d36feb04bdde62ebd8f095c7c098243007174651c31abfdb37065e35878ebc43bc572445f0cde6dff45efff00261f78c3603283d2\",\"tags\":[[\"t\",\"31days\"],[\"r\",\"https://i.nostr.build/WiP3rks3pFAim15V.jpg\"],[\"imeta\",\"url https://i.nostr.build/WiP3rks3pFAim15V.jpg\",\"x f106333ee2dd48ab0d16099523d6ea7a20bc032af2f7db4c67f02e62e9a8aba5\",\"size 21071\",\"m image/jpeg\",\"dim 1008x562\",\"blurhash i23lHrxuH@yBXNMeRRX*RQQ.x[.RnSMfpFR%Q:xut*%MrcbspGMfeqpGM{Q:%MyCVur_XhM{VatR?]xbeVtjNYMes;pGM{\",\"ox f106333ee2dd48ab0d16099523d6ea7a20bc032af2f7db4c67f02e62e9a8aba5\",\"alt \"]]}", 1742784437515]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085", "t", "31days", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085", "r", "https://i.nostr.build/WiP3rks3pFAim15V.jpg", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085", "imeta", "url https://i.nostr.build/WiP3rks3pFAim15V.jpg", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085", "global", 1742775869, 1742784437515]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "14147765a18028fdb386db2891e747c11b2a32761e12a0e6e43d5f8451ee74bc", 1, 1742749229, "Korea Cactus Glucosamine Cream – For muscle and joint pain – 150 ml
+
+Cooling massage cream-gel with glucosamine for muscle and joint pain. It is effective for muscle pain after workouts. Formula has anti-inflammatory and analgesic effect on injuries, sprains, spine osteochondrosis, rheumatism and improves metabolic processes in tissues.
+
+https://sixmd.com/all-products/cosmetics-skincare/korea-cactus-glucosamine-cream-massage-body-150ml/
+
+#ointment #doctor #asian #health #us #usa #canada #uk #doctor #healthy #asian #fitness #sport #gym #australia #china #germany #massage #italy #france #singapore #sport #fitness #healthy #singapore #eu #europe #uae #dubai #taiwan #korea #nature #store", "b43a1327bf94b459e784206697d39989f6e6072f580916b1e197535a0d065bd32e0e25cada897b9cb35580d79c9bdbd6e907597c6eed1bbf747372c2b107a71b", "{\"id\":\"dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c\",\"pubkey\":\"14147765a18028fdb386db2891e747c11b2a32761e12a0e6e43d5f8451ee74bc\",\"kind\":1,\"created_at\":1742749229,\"content\":\"Korea Cactus Glucosamine Cream – For muscle and joint pain – 150 ml\\n\\nCooling massage cream-gel with glucosamine for muscle and joint pain. It is effective for muscle pain after workouts. Formula has anti-inflammatory and analgesic effect on injuries, sprains, spine osteochondrosis, rheumatism and improves metabolic processes in tissues.\\n\\nhttps://sixmd.com/all-products/cosmetics-skincare/korea-cactus-glucosamine-cream-massage-body-150ml/\\n\\n#ointment #doctor #asian #health #us #usa #canada #uk #doctor #healthy #asian #fitness #sport #gym #australia #china #germany #massage #italy #france #singapore #sport #fitness #healthy #singapore #eu #europe #uae #dubai #taiwan #korea #nature #store\",\"sig\":\"b43a1327bf94b459e784206697d39989f6e6072f580916b1e197535a0d065bd32e0e25cada897b9cb35580d79c9bdbd6e907597c6eed1bbf747372c2b107a71b\",\"tags\":[[\"t\",\"ointment\"],[\"t\",\"doctor\"],[\"t\",\"asian\"],[\"t\",\"health\"],[\"t\",\"us\"],[\"t\",\"usa\"],[\"t\",\"canada\"],[\"t\",\"uk\"],[\"t\",\"doctor\"],[\"t\",\"healthy\"],[\"t\",\"asian\"],[\"t\",\"fitness\"],[\"t\",\"sport\"],[\"t\",\"gym\"],[\"t\",\"australia\"],[\"t\",\"china\"],[\"t\",\"germany\"],[\"t\",\"massage\"],[\"t\",\"italy\"],[\"t\",\"france\"],[\"t\",\"singapore\"],[\"t\",\"sport\"],[\"t\",\"fitness\"],[\"t\",\"healthy\"],[\"t\",\"singapore\"],[\"t\",\"eu\"],[\"t\",\"europe\"],[\"t\",\"uae\"],[\"t\",\"dubai\"],[\"t\",\"taiwan\"],[\"t\",\"korea\"],[\"t\",\"nature\"],[\"t\",\"store\"]]}", 1742784437515]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "ointment", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "doctor", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "asian", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "health", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "us", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "usa", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "canada", 6]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "uk", 7]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "doctor", 8]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "healthy", 9]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "asian", 10]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "fitness", 11]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "sport", 12]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "gym", 13]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "australia", 14]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "china", 15]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "germany", 16]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "massage", 17]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "italy", 18]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "france", 19]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "singapore", 20]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "sport", 21]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "fitness", 22]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "healthy", 23]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "singapore", 24]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "eu", 25]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "europe", 26]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "uae", 27]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "dubai", 28]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "taiwan", 29]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "korea", 30]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "nature", 31]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "t", "store", 32]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "global", 1742749229, 1742784437515]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4", "5069ea44d8977e77c6aea605d0c5386b24504a3abd0fe8a3d1cf5f4cedca40a7", 1, 1742741497, "#Mace #heavyclub #kettlebell #workout #fitness
+
+https://youtube.com/shorts/aO2vzuo-uYc", "5746941afe2b86cb36d241c544e0de4a9fc8359218c3e674f6c29f4a9df1b9de288b43982c11a8fbcb5e9465975715373691c2abab8c993ecd5e4b9b6dec039f", "{\"id\":\"83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4\",\"pubkey\":\"5069ea44d8977e77c6aea605d0c5386b24504a3abd0fe8a3d1cf5f4cedca40a7\",\"kind\":1,\"created_at\":1742741497,\"content\":\"#Mace #heavyclub #kettlebell #workout #fitness \\n\\nhttps://youtube.com/shorts/aO2vzuo-uYc\",\"sig\":\"5746941afe2b86cb36d241c544e0de4a9fc8359218c3e674f6c29f4a9df1b9de288b43982c11a8fbcb5e9465975715373691c2abab8c993ecd5e4b9b6dec039f\",\"tags\":[[\"t\",\"mace\"],[\"t\",\"heavyclub\"],[\"t\",\"kettlebell\"],[\"t\",\"workout\"],[\"t\",\"fitness\"],[\"r\",\"https://youtube.com/shorts/aO2vzuo-uYc\"]]}", 1742784437515]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4", "t", "mace", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4", "t", "heavyclub", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4", "t", "kettlebell", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4", "t", "workout", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4", "t", "fitness", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4", "r", "https://youtube.com/shorts/aO2vzuo-uYc", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4", "global", 1742741497, 1742784437515]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "dc506d8cdee104146e000dce67d03a15dc8e5e9e7a3df166cf8566a7a6fe419a", 1, 1742730917, "good morning nostr, keep stacking friends. here is a little bit from my training session yesterday. last of 3 sets of log strict press 3 reps at 170lbs.
+
+feeling good and my recovery is coming along nicely.
+
+ https://video.nostr.build/029c42bbd1c5a950a46240b638d4db2a8e81fa816a496068857301a9939a3de9.mp4
+
+#bitcoin #health #fitness #lovelife #db_saf #dadbodsquad #motivation #oldmanstrength #lovetheprocess #wsg2025 #justgettingstarted #fightaging #lhbk #strongman #strong #defyaging", "34d3780b6e127915e0325506f2acbfbad1ae1482fe89c01b9126373096d05aa2134fd5d24be5cbf4fcc829d4bdd2eedb1ad43f15b04888281e64fe9042c5fc1d", "{\"id\":\"5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58\",\"pubkey\":\"dc506d8cdee104146e000dce67d03a15dc8e5e9e7a3df166cf8566a7a6fe419a\",\"kind\":1,\"created_at\":1742730917,\"content\":\"good morning nostr, keep stacking friends. here is a little bit from my training session yesterday. last of 3 sets of log strict press 3 reps at 170lbs. \\n\\nfeeling good and my recovery is coming along nicely. \\n\\n https://video.nostr.build/029c42bbd1c5a950a46240b638d4db2a8e81fa816a496068857301a9939a3de9.mp4\\n\\n#bitcoin #health #fitness #lovelife #db_saf #dadbodsquad #motivation #oldmanstrength #lovetheprocess #wsg2025 #justgettingstarted #fightaging #lhbk #strongman #strong #defyaging\",\"sig\":\"34d3780b6e127915e0325506f2acbfbad1ae1482fe89c01b9126373096d05aa2134fd5d24be5cbf4fcc829d4bdd2eedb1ad43f15b04888281e64fe9042c5fc1d\",\"tags\":[[\"t\",\"bitcoin\"],[\"t\",\"health\"],[\"t\",\"fitness\"],[\"t\",\"lovelife\"],[\"t\",\"db_saf\"],[\"t\",\"dadbodsquad\"],[\"t\",\"motivation\"],[\"t\",\"oldmanstrength\"],[\"t\",\"lovetheprocess\"],[\"t\",\"wsg2025\"],[\"t\",\"justgettingstarted\"],[\"t\",\"fightaging\"],[\"t\",\"lhbk\"],[\"t\",\"strongman\"],[\"t\",\"strong\"],[\"t\",\"defyaging\"]]}", 1742784437515]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "bitcoin", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "health", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "fitness", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "lovelife", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "db_saf", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "dadbodsquad", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "motivation", 6]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "oldmanstrength", 7]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "lovetheprocess", 8]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "wsg2025", 9]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "justgettingstarted", 10]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "fightaging", 11]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "lhbk", 12]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "strongman", 13]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "strong", 14]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "t", "defyaging", 15]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["5f0cb0437dd317ebd9636a63ed73dcd9884e115bdf697e32288fdc794d886b58", "global", 1742730917, 1742784437515]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c", "c465a1051794a507a55adebc0f044dc6e79d9b67a5e05aed4bf684afe088f976", 1, 1742703529, "Rest day today. #31days", "b810ef15edbb2b9ade9d8fa80ab9cc90fd3da87b2c40fc0980779e01fcf61b5ff6b282b23649a52567a45fc15dbba8adeb90449ae78fa3d61a0c36400485ccec", "{\"id\":\"e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c\",\"pubkey\":\"c465a1051794a507a55adebc0f044dc6e79d9b67a5e05aed4bf684afe088f976\",\"kind\":1,\"created_at\":1742703529,\"content\":\"Rest day today. #31days\",\"sig\":\"b810ef15edbb2b9ade9d8fa80ab9cc90fd3da87b2c40fc0980779e01fcf61b5ff6b282b23649a52567a45fc15dbba8adeb90449ae78fa3d61a0c36400485ccec\",\"tags\":[[\"t\",\"31days\"]]}", 1742784437515]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c", "t", "31days", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e4fedbaeddc4b88d02298ba28fdc6ca3d2f3f6c41ff4ab48ce4f17e22076b82c", "global", 1742703529, 1742784437515]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "60e5bccda24b32e79c75edb8e7c66e55202853932849f02e329c985b71ac3fbd", 1, 1742760959, "#Me #trying #to #excel #in #my #career #maintain #a #social #life #drink #enough #water #exercise #text #everyone #back #stay #sane #survive #and #be #happy #meme #memes #nostrmeme #nostrmemes #memestr #nostr
+
+https://m.primal.net/Pqfm.png", "ddbd12ec1ce58cae26dc27e2f455a230efa86fa67ff5d1b881531ca9453056a174568f1286673b0e8d25663441d7391cd19020447d346bc64272f7478cf8a2f8", "{\"id\":\"f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21\",\"pubkey\":\"60e5bccda24b32e79c75edb8e7c66e55202853932849f02e329c985b71ac3fbd\",\"kind\":1,\"created_at\":1742760959,\"content\":\"#Me #trying #to #excel #in #my #career #maintain #a #social #life #drink #enough #water #exercise #text #everyone #back #stay #sane #survive #and #be #happy #meme #memes #nostrmeme #nostrmemes #memestr #nostr\\n\\nhttps://m.primal.net/Pqfm.png\",\"sig\":\"ddbd12ec1ce58cae26dc27e2f455a230efa86fa67ff5d1b881531ca9453056a174568f1286673b0e8d25663441d7391cd19020447d346bc64272f7478cf8a2f8\",\"tags\":[[\"t\",\"Me\"],[\"t\",\"trying\"],[\"t\",\"to\"],[\"t\",\"excel\"],[\"t\",\"in\"],[\"t\",\"my\"],[\"t\",\"career\"],[\"t\",\"maintain\"],[\"t\",\"a\"],[\"t\",\"social\"],[\"t\",\"life\"],[\"t\",\"drink\"],[\"t\",\"enough\"],[\"t\",\"water\"],[\"t\",\"exercise\"],[\"t\",\"text\"],[\"t\",\"everyone\"],[\"t\",\"back\"],[\"t\",\"stay\"],[\"t\",\"sane\"],[\"t\",\"survive\"],[\"t\",\"and\"],[\"t\",\"be\"],[\"t\",\"happy\"],[\"t\",\"meme\"],[\"t\",\"memes\"],[\"t\",\"nostrmeme\"],[\"t\",\"nostrmemes\"],[\"t\",\"memestr\"],[\"t\",\"nostr\"],[\"imeta\",\"url https://m.primal.net/Pqfm.png\",\"m image/png\",\"ox 9a392cc63a2f6e88007f11003912b606a2e7063cc08be3b68294e7533fbca928\",\"dim 1080x1080\"]]}", 1742784437515]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "Me", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "trying", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "to", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "excel", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "in", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "my", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "career", 6]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "maintain", 7]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "a", 8]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "social", 9]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "life", 10]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "drink", 11]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "enough", 12]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "water", 13]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "exercise", 14]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "text", 15]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "everyone", 16]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "back", 17]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "stay", 18]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "sane", 19]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "survive", 20]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "and", 21]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "be", 22]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "happy", 23]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "meme", 24]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "memes", 25]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "nostrmeme", 26]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "nostrmemes", 27]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "memestr", 28]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "t", "nostr", 29]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "imeta", "url https://m.primal.net/Pqfm.png", 30]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "global", 1742760959, 1742784437515]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567", "7a6b8c7de171955c214ded7e35cc782cd6dddfd141abb1929c632f69348e6f49", 1, 1742758559, "Day 23 of #31days
+
+2 mile walk
+Cut some trees to grow mushrooms on. ", "ddcadd458301fc80e95a127477e17de03be5744e56b053443297b4c4e484616a3e3351a3de2a8448bb0a31fa66a3d5a426387e60b5510a10753d4d5c8d4054f3", "{\"id\":\"e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567\",\"pubkey\":\"7a6b8c7de171955c214ded7e35cc782cd6dddfd141abb1929c632f69348e6f49\",\"kind\":1,\"created_at\":1742758559,\"content\":\"Day 23 of #31days\\n\\n2 mile walk\\nCut some trees to grow mushrooms on. \",\"sig\":\"ddcadd458301fc80e95a127477e17de03be5744e56b053443297b4c4e484616a3e3351a3de2a8448bb0a31fa66a3d5a426387e60b5510a10753d4d5c8d4054f3\",\"tags\":[[\"t\",\"31days\"]]}", 1742784437515]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567", "t", "31days", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567", "global", 1742758559, 1742784437515]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "ad8d9660c675d3b3a16fc1484c102782ba8370ae5f94ec5fc2b244a8c8a0a589", 1, 1742750608, "Stronger every day.
+
+Know and understand your limitations, and push them often.
+
+#BlockchainBarbellClub #Fitstr #Weightlifting #CrossFit
+https://video.nostr.build/0beb8e347eaec9ff3a194ea62862e98070711c9bfa8a554758e0486a3bbc4973.mp4", "f0e6d865b6e4017cae37a8bd701c27c74d6c332da4f3d601185b6022b0a89cd73f2a1f1a32a357855f2233aeddaca3045b2de75c78b3874ae5af608489731596", "{\"id\":\"fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698\",\"pubkey\":\"ad8d9660c675d3b3a16fc1484c102782ba8370ae5f94ec5fc2b244a8c8a0a589\",\"kind\":1,\"created_at\":1742750608,\"content\":\"Stronger every day. \\n\\nKnow and understand your limitations, and push them often. \\n\\n#BlockchainBarbellClub #Fitstr #Weightlifting #CrossFit\\nhttps://video.nostr.build/0beb8e347eaec9ff3a194ea62862e98070711c9bfa8a554758e0486a3bbc4973.mp4\",\"sig\":\"f0e6d865b6e4017cae37a8bd701c27c74d6c332da4f3d601185b6022b0a89cd73f2a1f1a32a357855f2233aeddaca3045b2de75c78b3874ae5af608489731596\",\"tags\":[[\"t\",\"BlockchainBarbellClub\"],[\"t\",\"blockchainbarbellclub\"],[\"t\",\"Fitstr\"],[\"t\",\"fitstr\"],[\"t\",\"Weightlifting\"],[\"t\",\"weightlifting\"],[\"t\",\"CrossFit\"],[\"t\",\"crossfit\"],[\"r\",\"https://video.nostr.build/0beb8e347eaec9ff3a194ea62862e98070711c9bfa8a554758e0486a3bbc4973.mp4\"],[\"imeta\",\"url https://video.nostr.build/0beb8e347eaec9ff3a194ea62862e98070711c9bfa8a554758e0486a3bbc4973.mp4\",\"x c65147996c25721d367d7915c635c74addf00e7d43437d7f3e550792251a0522\",\"size 2673546\",\"m video/mp4\",\"dim 944x1008\",\"blurhash {JGS19M{01?ax]D%~VW=.TV@Mxt8xvWAbIogxaaeD%kD%LoJIoofD%og%MjEWXW=V@WBD%of-:aeM|ogaejrIUWC%gWARiofWBWCIUaxxtoMRjWVt7ofIVj[xuWCWBaeWCofj?kCxvjYWBayWBj]\",\"ox c65147996c25721d367d7915c635c74addf00e7d43437d7f3e550792251a0522\",\"alt Deadlift 440lbs x3\"]]}", 1742784437515]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "t", "BlockchainBarbellClub", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "t", "blockchainbarbellclub", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "t", "Fitstr", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "t", "fitstr", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "t", "Weightlifting", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "t", "weightlifting", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "t", "CrossFit", 6]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "t", "crossfit", 7]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "r", "https://video.nostr.build/0beb8e347eaec9ff3a194ea62862e98070711c9bfa8a554758e0486a3bbc4973.mp4", 8]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "imeta", "url https://video.nostr.build/0beb8e347eaec9ff3a194ea62862e98070711c9bfa8a554758e0486a3bbc4973.mp4", 9]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "global", 1742750608, 1742784437515]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "81fa5b70a73a691c6e78823d035ffc44f6b505e6f03637759bd36e7a451539fd", 1, 1742745450, "#gym
+
+nostr:nevent1qqspvca0u05yd8axjnr33qc5tx9q7n3cwch6rzzx3ecqmfvujjzsmaqpz4mhxue69uhkummnw3ezummcw3ezuer9wchsygyplfdhpfe6dywxu7yz85p4llzy766stehsxcmhtx7ndeay29fel5psgqqqqqqsgj0vj7", "9d6924e4e822e14493778ed0b597e21ee0a10973c9846ab6ef99826f4a5dd6629970589b9f3921ef98545f2c1330a8cbe64a8244458b42df7dcf0a1bdbcd8def", "{\"id\":\"cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91\",\"pubkey\":\"81fa5b70a73a691c6e78823d035ffc44f6b505e6f03637759bd36e7a451539fd\",\"kind\":1,\"created_at\":1742745450,\"content\":\"#gym\\n\\nnostr:nevent1qqspvca0u05yd8axjnr33qc5tx9q7n3cwch6rzzx3ecqmfvujjzsmaqpz4mhxue69uhkummnw3ezummcw3ezuer9wchsygyplfdhpfe6dywxu7yz85p4llzy766stehsxcmhtx7ndeay29fel5psgqqqqqqsgj0vj7\",\"sig\":\"9d6924e4e822e14493778ed0b597e21ee0a10973c9846ab6ef99826f4a5dd6629970589b9f3921ef98545f2c1330a8cbe64a8244458b42df7dcf0a1bdbcd8def\",\"tags\":[[\"e\",\"1663afe3e8469fa694c7188314598a0f4e38762fa188468e700da59c94850df4\",\"\",\"mention\"],[\"p\",\"81fa5b70a73a691c6e78823d035ffc44f6b505e6f03637759bd36e7a451539fd\",\"\",\"mention\"],[\"q\",\"1663afe3e8469fa694c7188314598a0f4e38762fa188468e700da59c94850df4\"],[\"t\",\"gym\"]]}", 1742784437515]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "e", "1663afe3e8469fa694c7188314598a0f4e38762fa188468e700da59c94850df4", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "p", "81fa5b70a73a691c6e78823d035ffc44f6b505e6f03637759bd36e7a451539fd", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "q", "1663afe3e8469fa694c7188314598a0f4e38762fa188468e700da59c94850df4", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "t", "gym", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "global", 1742745450, 1742784437515]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5", "43d7f07d10b9e662745e10b2fc201a74dc178a308c31409350d06b04477816e1", 1, 1742746988, "Long way to go. #fitness #running https://image.nostr.build/23127a5a228297c389cedde52706bf539eb2c85dc3c84cd6b353d1eb124294fb.jpg", "a775acbfbbb5b0ffc237d9fdbd6257ed6db9051545fe80633da6c39000a258b42957f6381b53772b394e6e6d96e4a4b9a5063c55331ff5d9dafa0f9f720909e7", "{\"id\":\"3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5\",\"pubkey\":\"43d7f07d10b9e662745e10b2fc201a74dc178a308c31409350d06b04477816e1\",\"kind\":1,\"created_at\":1742746988,\"content\":\"Long way to go. #fitness #running https://image.nostr.build/23127a5a228297c389cedde52706bf539eb2c85dc3c84cd6b353d1eb124294fb.jpg\",\"sig\":\"a775acbfbbb5b0ffc237d9fdbd6257ed6db9051545fe80633da6c39000a258b42957f6381b53772b394e6e6d96e4a4b9a5063c55331ff5d9dafa0f9f720909e7\",\"tags\":[[\"t\",\"fitness\"],[\"t\",\"running\"],[\"r\",\"https://image.nostr.build/23127a5a228297c389cedde52706bf539eb2c85dc3c84cd6b353d1eb124294fb.jpg\"],[\"imeta\",\"url https://image.nostr.build/23127a5a228297c389cedde52706bf539eb2c85dc3c84cd6b353d1eb124294fb.jpg\",\"m image/jpeg\",\"alt Verifiable file url\",\"x 063c3deeba20a3b4842ce201f6f95b38a0e230bb47b37f24cb40f5b399dc83ae\",\"size 50278\",\"dim 943x943\",\"blurhash U46kI?$,9XNGTBxa?cNF_Lxaa#In%MxukBRj\",\"ox 23127a5a228297c389cedde52706bf539eb2c85dc3c84cd6b353d1eb124294fb\"]]}", 1742784437515]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5", "t", "fitness", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5", "t", "running", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5", "r", "https://image.nostr.build/23127a5a228297c389cedde52706bf539eb2c85dc3c84cd6b353d1eb124294fb.jpg", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5", "imeta", "url https://image.nostr.build/23127a5a228297c389cedde52706bf539eb2c85dc3c84cd6b353d1eb124294fb.jpg", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5", "global", 1742746988, 1742784437515]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "70632e1941795474cb154415afb79c09b58189afd2243bf81153d59710eb6092", 1, 1742739424, "The truth about cholesterol: 12 things you need to know – from eggs to weight to statins https://www.theguardian.com/lifeandstyle/2025/mar/23/truth-cholesterol-12-things-you-need-to-know-eggs-weight-statins #Health&wellbeing #Dietsanddieting #Lifeandstyle #Heartdisease #Heartattack #Nutrition #Fitness #Health", "47e8e3baab1e776e2e9cfdb8d2b56d912b4279ec5559f15d953ca8b9b96e7e76cf76ae442391bfa68928196953d9f81eea6457b1ab5f0305be65bba6e76835d4", "{\"id\":\"34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53\",\"pubkey\":\"70632e1941795474cb154415afb79c09b58189afd2243bf81153d59710eb6092\",\"kind\":1,\"created_at\":1742739424,\"content\":\"The truth about cholesterol: 12 things you need to know – from eggs to weight to statins https://www.theguardian.com/lifeandstyle/2025/mar/23/truth-cholesterol-12-things-you-need-to-know-eggs-weight-statins #Health&wellbeing #Dietsanddieting #Lifeandstyle #Heartdisease #Heartattack #Nutrition #Fitness #Health\",\"sig\":\"47e8e3baab1e776e2e9cfdb8d2b56d912b4279ec5559f15d953ca8b9b96e7e76cf76ae442391bfa68928196953d9f81eea6457b1ab5f0305be65bba6e76835d4\",\"tags\":[[\"t\",\"health\"],[\"t\",\"dietsanddieting\"],[\"t\",\"lifeandstyle\"],[\"t\",\"heartdisease\"],[\"t\",\"heartattack\"],[\"t\",\"nutrition\"],[\"t\",\"fitness\"],[\"proxy\",\"https://halo.nu/users/theguardian_us_lifestyle/statuses/114212170892740688\",\"activitypub\"]]}", 1742784437522]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "t", "health", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "t", "dietsanddieting", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "t", "lifeandstyle", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "t", "heartdisease", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "t", "heartattack", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "t", "nutrition", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "t", "fitness", 6]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "proxy", "https://halo.nu/users/theguardian_us_lifestyle/statuses/114212170892740688", 7]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "global", 1742739424, 1742784437522]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475", "b32d6b081c2422f57cbea1c1177159a93ffaa1913f540ae91e5fe3785b198cb2", 1, 1742731342, "Allenamento top con loro di sottofondo. Già elettrizzato per il #rockimpark2025 🤩
+
+#TheProdigy - Live Rock Am Ring 2009 - Take me to the Hospital
+https://www.youtube.com/watch?v=2brMLRc-qrA
+
+#nowlistening #gym #palestra", "6b7a5fa0e8303d680103aa982d6b52e546f65d13a48a7a85263e61fca1884a58626c74e3d2a2070c40a6141e1171c954d8587b55161e058f9eaf1f82dd8cc4a8", "{\"id\":\"593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475\",\"pubkey\":\"b32d6b081c2422f57cbea1c1177159a93ffaa1913f540ae91e5fe3785b198cb2\",\"kind\":1,\"created_at\":1742731342,\"content\":\"Allenamento top con loro di sottofondo. Già elettrizzato per il #rockimpark2025 🤩\\n \\n#TheProdigy - Live Rock Am Ring 2009 - Take me to the Hospital \\nhttps://www.youtube.com/watch?v=2brMLRc-qrA\\n\\n#nowlistening #gym #palestra\",\"sig\":\"6b7a5fa0e8303d680103aa982d6b52e546f65d13a48a7a85263e61fca1884a58626c74e3d2a2070c40a6141e1171c954d8587b55161e058f9eaf1f82dd8cc4a8\",\"tags\":[[\"t\",\"rockimpark2025\"],[\"t\",\"theprodigy\"],[\"t\",\"nowlistening\"],[\"t\",\"gym\"],[\"t\",\"palestra\"],[\"proxy\",\"https://livellosegreto.it/users/alorenzi/statuses/114211641242555713\",\"activitypub\"]]}", 1742784437522]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475", "t", "rockimpark2025", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475", "t", "theprodigy", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475", "t", "nowlistening", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475", "t", "gym", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475", "t", "palestra", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475", "proxy", "https://livellosegreto.it/users/alorenzi/statuses/114211641242555713", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475", "global", 1742731342, 1742784437522]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be", "8b3db033768dc87dd8ee48a1361ae6d203e946d7f0651472519bc4df1c90e0ea", 1, 1742722524, "Sunday Nudist (a bit earlier than usual, I know).
+
+Outdoor exercising
+
+https://zjuzdme.org/sunday-nudist-102.html
+
+#naturism #nudism #exercise", "217e11784c83dacf9e9c5d3aca7b8112e93d3b866ce3774f49a36eb6f3dba8bc7f4c8abf5163bb800468d5a7730c6abd87b5beea7ea800f8c1507bf145f55ab1", "{\"id\":\"89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be\",\"pubkey\":\"8b3db033768dc87dd8ee48a1361ae6d203e946d7f0651472519bc4df1c90e0ea\",\"kind\":1,\"created_at\":1742722524,\"content\":\"Sunday Nudist (a bit earlier than usual, I know).\\n\\nOutdoor exercising\\n\\nhttps://zjuzdme.org/sunday-nudist-102.html\\n\\n#naturism #nudism #exercise\",\"sig\":\"217e11784c83dacf9e9c5d3aca7b8112e93d3b866ce3774f49a36eb6f3dba8bc7f4c8abf5163bb800468d5a7730c6abd87b5beea7ea800f8c1507bf145f55ab1\",\"tags\":[[\"t\",\"naturism\"],[\"t\",\"nudism\"],[\"t\",\"exercise\"],[\"proxy\",\"https://writing.exchange/users/paulk/statuses/114211063364516375\",\"activitypub\"]]}", 1742784437522]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be", "t", "naturism", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be", "t", "nudism", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be", "t", "exercise", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be", "proxy", "https://writing.exchange/users/paulk/statuses/114211063364516375", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["89faf9693b44139af1323c620ea3761bd7729723b5dfde8a0f5c4528506ca3be", "global", 1742722524, 1742784437522]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", 1301, 1742703619, "", "a34a028086d2df2daac90d9b53eb452ee785938397143e2d9229389a728469bdd9d55b39de317391ee4035796b1d8e3dbac69c6efc728c2a56a53f30e258b83b", "{\"id\":\"6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b\",\"pubkey\":\"55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21\",\"kind\":1301,\"created_at\":1742703619,\"content\":\"\",\"sig\":\"a34a028086d2df2daac90d9b53eb452ee785938397143e2d9229389a728469bdd9d55b39de317391ee4035796b1d8e3dbac69c6efc728c2a56a53f30e258b83b\",\"tags\":[[\"d\",\"local:m8l4pktv-97r1n75ckvc\"],[\"title\",\"Simple Strength Workout\"],[\"type\",\"strength\"],[\"start\",\"1742703570\"],[\"end\",\"1742703578\"],[\"completed\",\"true\"],[\"template\",\"33402::local:m8l4p7sp-t3z81ndyajf\",\"\"],[\"exercise\",\"33401:local:m8l4pktv-bbjg6yus28d\",\"\",\"0\",\"8\",\"normal\"],[\"exercise\",\"33401:local:m8l4pktv-iwdfkt232bi\",\"\",\"0\",\"8\",\"normal\"],[\"exercise\",\"33401:local:m8l4pktv-4bod5iu9i58\",\"\",\"0\",\"8\",\"normal\"]]}", 1742784440557]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "d", "local:m8l4pktv-97r1n75ckvc", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "title", "Simple Strength Workout", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "type", "strength", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "start", "1742703570", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "end", "1742703578", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "completed", "true", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "template", "33402::local:m8l4p7sp-t3z81ndyajf", 6]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "exercise", "33401:local:m8l4pktv-bbjg6yus28d", 7]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "exercise", "33401:local:m8l4pktv-iwdfkt232bi", 8]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "exercise", "33401:local:m8l4pktv-4bod5iu9i58", 9]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["6be36ad8e40ff2e64008c31c3bc26394118a2b81719548afb8d658a0ab09184b", "referenced", 1742703619, 1742784440557]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", 1301, 1742702573, "", "59d6977843076925439dbb66881b4019210581af7885bc190fc293751db0aba149a2e2e0ea9ab884b8450c44ebb38946b1665263847f04bc820d5d36928ef518", "{\"id\":\"8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92\",\"pubkey\":\"55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21\",\"kind\":1301,\"created_at\":1742702573,\"content\":\"\",\"sig\":\"59d6977843076925439dbb66881b4019210581af7885bc190fc293751db0aba149a2e2e0ea9ab884b8450c44ebb38946b1665263847f04bc820d5d36928ef518\",\"tags\":[[\"d\",\"local:m8l428e1-6kybxzrebyo\"],[\"title\",\"Simple Strength Workout\"],[\"type\",\"strength\"],[\"start\",\"1742702481\"],[\"end\",\"1742702500\"],[\"completed\",\"true\"],[\"template\",\"33402::local:m8l41ura-o0fg5ugtqs\",\"\"],[\"exercise\",\"33401:local:m8l428e1-r7vkmeq1hj\",\"\",\"0\",\"8\",\"normal\"],[\"exercise\",\"33401:local:m8l428e1-7t47qg7eokh\",\"\",\"0\",\"8\",\"normal\"],[\"exercise\",\"33401:local:m8l428e1-3yedofspbpy\",\"\",\"0\",\"8\",\"normal\"]]}", 1742784440557]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "d", "local:m8l428e1-6kybxzrebyo", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "title", "Simple Strength Workout", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "type", "strength", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "start", "1742702481", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "end", "1742702500", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "completed", "true", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "template", "33402::local:m8l41ura-o0fg5ugtqs", 6]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "exercise", "33401:local:m8l428e1-r7vkmeq1hj", 7]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "exercise", "33401:local:m8l428e1-7t47qg7eokh", 8]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "exercise", "33401:local:m8l428e1-3yedofspbpy", 9]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["8a305a82506185f7bd5e5d33bdc947c91a4d84758820bef7d6b768b74c0fdd92", "referenced", 1742702573, 1742784440557]
+ (NOBRIDGE) LOG Selected social: {"content": {"author": "81fa5b70a73a691c6e78823d035ffc44f6b505e6f03637759bd36e7a451539fd", "content": "#gym
+
+nostr:nevent1qqspvca0u05yd8axjnr33qc5tx9q7n3cwch6rzzx3ecqmfvujjzsmaqpz4mhxue69uhkummnw3ezummcw3ezuer9wchsygyplfdhpfe6dywxu7yz85p4llzy766stehsxcmhtx7ndeay29fel5psgqqqqqqsgj0vj7", "createdAt": 1742745450000, "id": "cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "quotedContent": undefined, "tags": ["gym"]}, "event": {"_author": undefined, "_symbolKeys": Set {}, "content": "#gym
+
+nostr:nevent1qqspvca0u05yd8axjnr33qc5tx9q7n3cwch6rzzx3ecqmfvujjzsmaqpz4mhxue69uhkummnw3ezummcw3ezuer9wchsygyplfdhpfe6dywxu7yz85p4llzy766stehsxcmhtx7ndeay29fel5psgqqqqqqsgj0vj7", "created_at": 1742745450, "decrypt": [Function bound decrypt], "encode": [Function bound encode], "encrypt": [Function bound encrypt], "events": {}, "fetchReplyEvent": [Function bound fetchReplyEvent], "fetchRootEvent": [Function bound fetchRootEvent], "fetchTaggedEvent": [Function bound fetchTaggedEvent], "getEventHash": [Function bound getEventHash], "id": "cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "isDvm": [Function anonymous], "isEphemeral": [Function bound isEphemeral], "isParamReplaceable": [Function bound isParamReplaceable], "isReplaceable": [Function bound isReplaceable], "kind": 1, "maxListeners": Infinity, "ndk": "[object Object]", "onceEvents": {}, "pubkey": "81fa5b70a73a691c6e78823d035ffc44f6b505e6f03637759bd36e7a451539fd", "publishStatus": "success", "relay": {"_symbolKeys": [Set], "authPolicy": undefined, "close": [Function bound close], "complaining": false, "connectivity": [NDKRelayConnectivity], "debug": [Function debug], "emit": [Function emitHasOnce], "events": [Object], "lowestValidationRatio": 1, "maxListeners": Infinity, "nonValidatedEventCount": 1, "onceEvents": [Object], "publisher": [NDKRelayPublisher], "req": [Function bound req], "scores": [Map], "subs": [NDKRelaySubscriptionManager], "targetValidationRatio": 1, "trusted": false, "url": "wss://nos.lol/", "validatedEventCount": 66, "validationRatioFn": [Function bound ]}, "repost": [Function bound repost], "serialize": [Function bound serialize], "sig": "9d6924e4e822e14493778ed0b597e21ee0a10973c9846ab6ef99826f4a5dd6629970589b9f3921ef98545f2c1330a8cbe64a8244458b42df7dcf0a1bdbcd8def", "signatureVerified": true, "tags": [[Array], [Array], [Array], [Array]], "validate": [Function bound validate], "verifySignature": [Function bound verifySignature]}, "eventId": "cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "id": "cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "timestamp": 1742745450000, "type": "social"}
+ (NOBRIDGE) ERROR Warning: TypeError: 0, _useFeedHooks.useUserActivityFeed is not a function (it is undefined)
+
+This error is located at:
+ in OverviewScreen (created by SceneView)
+ in StaticContainer
+ in EnsureSingleNavigator (created by SceneView)
+ in SceneView (created by MaterialTopTabNavigator)
+ in RCTView (created by View)
+ in View (created by SceneView)
+ in SceneView (created by PagerViewAdapter)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by PagerViewInternal)
+ in RNCViewPager (created by PagerViewInternal)
+ in PagerViewInternal
+ in Unknown (created by Animated(Anonymous))
+ in Animated(Anonymous) (created by PagerViewAdapter)
+ in PagerViewAdapter (created by TabView)
+ in RCTView (created by View)
+ in View (created by TabView)
+ in TabView (created by MaterialTopTabView)
+ in MaterialTopTabView (created by MaterialTopTabNavigator)
+ in PreventRemoveProvider (created by NavigationContent)
+ in NavigationContent
+ in Unknown (created by MaterialTopTabNavigator)
+ in MaterialTopTabNavigator (created by ProfileTabLayout)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by TabScreen)
+ in TabScreen (created by ProfileTabLayout)
+ in ProfileTabLayout
+ in Unknown (created by Route(profile))
+ in Suspense (created by Route(profile))
+ in Route (created by Route(profile))
+ in Route(profile) (created by SceneView)
+ in StaticContainer
+ in EnsureSingleNavigator (created by SceneView)
+ in SceneView (created by BottomTabNavigator)
+ in RCTView (created by View)
+ in View (created by Screen)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by Animated(View))
+ in Animated(View) (created by Background)
+ in Background (created by Screen)
+ in Screen (created by BottomTabView)
+ in RNSScreen (created by Animated(Anonymous))
+ in Animated(Anonymous)
+ in Suspender (created by Freeze)
+ in Suspense (created by Freeze)
+ in Freeze (created by DelayedFreeze)
+ in DelayedFreeze
+ in InnerScreen (created by Screen)
+ in Screen (created by MaybeScreen)
+ in MaybeScreen (created by BottomTabView)
+ in RNSScreenContainer (created by ScreenContainer)
+ in ScreenContainer (created by MaybeScreenContainer)
+ in MaybeScreenContainer (created by BottomTabView)
+ in RCTView (created by View)
+ in View (created by SafeAreaProviderCompat)
+ in SafeAreaProviderCompat (created by BottomTabView)
+ in BottomTabView (created by BottomTabNavigator)
+ in PreventRemoveProvider (created by NavigationContent)
+ in NavigationContent
+ in Unknown (created by BottomTabNavigator)
+ in BottomTabNavigator
+ in Unknown (created by TabLayout)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by TabLayout)
+ in TabLayout
+ in Unknown (created by Route((tabs)))
+ in Suspense (created by Route((tabs)))
+ in Route (created by Route((tabs)))
+ in Route((tabs)) (created by SceneView)
+ in StaticContainer
+ in EnsureSingleNavigator (created by SceneView)
+ in SceneView (created by NativeStackNavigator)
+ in RNSScreenContentWrapper (created by ScreenContentWrapper)
+ in ScreenContentWrapper (created by DebugContainer)
+ in DebugContainer
+ in RNSScreen (created by Animated(Anonymous))
+ in Animated(Anonymous)
+ in Suspender (created by Freeze)
+ in Suspense (created by Freeze)
+ in Freeze (created by DelayedFreeze)
+ in DelayedFreeze
+ in InnerScreen (created by Screen)
+ in Screen
+ in ScreenStackItem (created by SceneView)
+ in SceneView (created by NativeStackView)
+ in RNSScreenStack (created by ScreenStack)
+ in Unknown (created by ScreenStack)
+ in ScreenStack (created by NativeStackView)
+ in RCTView (created by View)
+ in View (created by SafeAreaProviderCompat)
+ in SafeAreaProviderCompat (created by NativeStackView)
+ in NativeStackView (created by NativeStackNavigator)
+ in PreventRemoveProvider (created by NavigationContent)
+ in NavigationContent
+ in Unknown (created by NativeStackNavigator)
+ in NativeStackNavigator
+ in Unknown (created by RootLayout)
+ in SettingsDrawerProvider (created by RootLayout)
+ in ThemeProvider (created by RootLayout)
+ in DelayedInitializer (created by DatabaseProvider)
+ in SQLiteProviderNonSuspense (created by SQLiteProvider)
+ in SQLiteProvider (created by DatabaseProvider)
+ in DatabaseProvider (created by RootLayout)
+ in RNGestureHandlerRootView (created by GestureHandlerRootView)
+ in GestureHandlerRootView (created by RootLayout)
+ in ErrorBoundary (created by RootLayout)
+ in RootLayout
+ in Unknown (created by Route())
+ in Suspense (created by Route())
+ in Route (created by Route())
+ in Route() (created by ContextNavigator)
+ in SafeAreaEnv (created by SafeAreaProviderShim)
+ in RNCSafeAreaProvider (created by SafeAreaProvider)
+ in SafeAreaProvider (created by SafeAreaProviderShim)
+ in SafeAreaProviderShim (created by wrapper)
+ in wrapper (created by ContextNavigator)
+ in ThemeProvider
+ in EnsureSingleNavigator
+ in BaseNavigationContainer
+ in NavigationContainerInner (created by ContextNavigator)
+ in ContextNavigator (created by ExpoRoot)
+ in ExpoRoot (created by App)
+ in App (created by withDevTools(App))
+ in withDevTools(App)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by AppContainer)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by AppContainer)
+ in AppContainer
+ in main(RootComponent)
+ (NOBRIDGE) ERROR ErrorBoundary caught an error: [TypeError: 0, _useFeedHooks.useUserActivityFeed is not a function (it is undefined)] [Component Stack]
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from powr feed
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from global feed
+ (NOBRIDGE) ERROR Warning: TypeError: 0, _useFeedHooks.useUserActivityFeed is not a function (it is undefined)
+
+This error is located at:
+ in OverviewScreen (created by SceneView)
+ in StaticContainer
+ in EnsureSingleNavigator (created by SceneView)
+ in SceneView (created by MaterialTopTabNavigator)
+ in RCTView (created by View)
+ in View (created by SceneView)
+ in SceneView (created by PagerViewAdapter)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by PagerViewInternal)
+ in LEGACY_RNCViewPager (created by PagerViewInternal)
+ in PagerViewInternal
+ in Unknown (created by Animated(Anonymous))
+ in Animated(Anonymous) (created by PagerViewAdapter)
+ in PagerViewAdapter (created by TabView)
+ in RCTView (created by View)
+ in View (created by TabView)
+ in TabView (created by MaterialTopTabView)
+ in MaterialTopTabView (created by MaterialTopTabNavigator)
+ in PreventRemoveProvider (created by NavigationContent)
+ in NavigationContent
+ in Unknown (created by MaterialTopTabNavigator)
+ in MaterialTopTabNavigator (created by ProfileTabLayout)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by TabScreen)
+ in TabScreen (created by ProfileTabLayout)
+ in ProfileTabLayout
+ in Unknown (created by Route(profile))
+ in Suspense (created by Route(profile))
+ in Route (created by Route(profile))
+ in Route(profile) (created by SceneView)
+ in StaticContainer
+ in EnsureSingleNavigator (created by SceneView)
+ in SceneView (created by BottomTabNavigator)
+ in RCTView (created by View)
+ in View (created by Screen)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by Animated(View))
+ in Animated(View) (created by Background)
+ in Background (created by Screen)
+ in Screen (created by BottomTabView)
+ in RNSScreen (created by Animated(Anonymous))
+ in Animated(Anonymous)
+ in Suspender (created by Freeze)
+ in Suspense (created by Freeze)
+ in Freeze (created by DelayedFreeze)
+ in DelayedFreeze
+ in InnerScreen (created by Screen)
+ in Screen (created by MaybeScreen)
+ in MaybeScreen (created by BottomTabView)
+ in RNSScreenNavigationContainer (created by ScreenContainer)
+ in ScreenContainer (created by MaybeScreenContainer)
+ in MaybeScreenContainer (created by BottomTabView)
+ in RCTView (created by View)
+ in View (created by SafeAreaProviderCompat)
+ in SafeAreaProviderCompat (created by BottomTabView)
+ in BottomTabView (created by BottomTabNavigator)
+ in PreventRemoveProvider (created by NavigationContent)
+ in NavigationContent
+ in Unknown (created by BottomTabNavigator)
+ in BottomTabNavigator
+ in Unknown (created by TabLayout)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by TabLayout)
+ in TabLayout
+ in Unknown (created by Route((tabs)))
+ in Suspense (created by Route((tabs)))
+ in Route (created by Route((tabs)))
+ in Route((tabs)) (created by SceneView)
+ in StaticContainer
+ in EnsureSingleNavigator (created by SceneView)
+ in SceneView (created by NativeStackNavigator)
+ in RNSScreenContentWrapper (created by ScreenContentWrapper)
+ in ScreenContentWrapper (created by DebugContainer)
+ in DebugContainer
+ in RNSScreen (created by Animated(Anonymous))
+ in Animated(Anonymous)
+ in Suspender (created by Freeze)
+ in Suspense (created by Freeze)
+ in Freeze (created by DelayedFreeze)
+ in DelayedFreeze
+ in InnerScreen (created by Screen)
+ in Screen
+ in ScreenStackItem (created by SceneView)
+ in SceneView (created by NativeStackView)
+ in RNSScreenStack (created by ScreenStack)
+ in Unknown (created by ScreenStack)
+ in ScreenStack (created by NativeStackView)
+ in RCTView (created by View)
+ in View (created by SafeAreaProviderCompat)
+ in SafeAreaProviderCompat (created by NativeStackView)
+ in NativeStackView (created by NativeStackNavigator)
+ in PreventRemoveProvider (created by NavigationContent)
+ in NavigationContent
+ in Unknown (created by NativeStackNavigator)
+ in NativeStackNavigator
+ in Unknown (created by RootLayout)
+ in SettingsDrawerProvider (created by RootLayout)
+ in ThemeProvider (created by RootLayout)
+ in DelayedInitializer (created by DatabaseProvider)
+ in SQLiteProviderNonSuspense (created by SQLiteProvider)
+ in SQLiteProvider (created by DatabaseProvider)
+ in DatabaseProvider (created by RootLayout)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by GestureHandlerRootView)
+ in GestureHandlerRootView (created by RootLayout)
+ in ErrorBoundary (created by RootLayout)
+ in RootLayout
+ in Unknown (created by Route())
+ in Suspense (created by Route())
+ in Route (created by Route())
+ in Route() (created by ContextNavigator)
+ in SafeAreaEnv (created by SafeAreaProviderShim)
+ in RNCSafeAreaProvider (created by SafeAreaProvider)
+ in SafeAreaProvider (created by SafeAreaProviderShim)
+ in SafeAreaProviderShim (created by wrapper)
+ in wrapper (created by ContextNavigator)
+ in ThemeProvider
+ in EnsureSingleNavigator
+ in BaseNavigationContainer
+ in NavigationContainerInner (created by ContextNavigator)
+ in ContextNavigator (created by ExpoRoot)
+ in ExpoRoot (created by App)
+ in App (created by withDevTools(App))
+ in withDevTools(App)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by AppContainer)
+ in RCTView (created by View)
+ in View (created by CssInterop.View)
+ in CssInterop.View (created by AppContainer)
+ in AppContainer
+ in main(RootComponent)
+ (NOBRIDGE) ERROR ErrorBoundary caught an error: [TypeError: 0, _useFeedHooks.useUserActivityFeed is not a function (it is undefined)] [Component Stack]
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from powr feed
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from global feed
diff --git a/docs/consolelogs/20252403.md b/docs/consolelogs/20252403.md
new file mode 100644
index 0000000..c7ff49e
--- /dev/null
+++ b/docs/consolelogs/20252403.md
@@ -0,0 +1,411 @@
+ 💡 JavaScript logs will be removed from Metro in React Native 0.77! Please use React Native DevTools as your default tool. Tip: Type j in the terminal to open (requires Google Chrome or Microsoft Edge).
+ (NOBRIDGE) LOG [useFeedHooks] Initialized POWR pubkey hex: 0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7
+ (NOBRIDGE) LOG expo-av is available, will use VideoSplashScreen on iOS
+ (NOBRIDGE) LOG Successfully imported VideoSplashScreen
+ (NOBRIDGE) LOG _layout.tsx loaded
+ (NOBRIDGE) LOG ⚠️ [expo-av]: Video component from `expo-av` is deprecated in favor of `expo-video`. See the documentation at https://docs.expo.dev/versions/latest/sdk/video/ for the new API reference.
+ (NOBRIDGE) LOG Starting app initialization in background...
+ (NOBRIDGE) LOG Network connectivity: offline
+ (NOBRIDGE) LOG [NDK] Initializing...
+ (NOBRIDGE) LOG [ConnectivityService] Network connection restored, triggering sync
+ (NOBRIDGE) LOG [NDK] Found saved private key, initializing signer
+ (NOBRIDGE) LOG [NDK] Login attempt starting
+ (NOBRIDGE) LOG [NDK] Processing private key input
+ (NOBRIDGE) LOG [NDK] Using provided key, format: hex length: 64
+ (NOBRIDGE) LOG [NDK] Creating signer with key length: 64
+ (NOBRIDGE) LOG [NDK] Signer created, setting on NDK
+ (NOBRIDGE) LOG [NDK] Getting user from signer
+ (NOBRIDGE) LOG [NDK] User retrieved, pubkey: 55127fc9...
+ (NOBRIDGE) LOG [NDK] Fetching user profile
+ (NOBRIDGE) LOG Loaded 0 favorite IDs from database
+ (NOBRIDGE) LOG Video loaded successfully
+ (NOBRIDGE) LOG Video loaded, hiding native splash screen
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.damus.io/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://purplepag.es/
+ (NOBRIDGE) LOG [NDK] Profile fetched successfully
+ (NOBRIDGE) LOG [NDK] Profile data available
+ (NOBRIDGE) LOG [NDK] User profile loaded: Walter Sobchak
+ (NOBRIDGE) LOG [NDK] Saving private key to secure storage
+ (NOBRIDGE) LOG [NDK] Creating RelayService to import user preferences
+ (NOBRIDGE) LOG [NDK] Setting NDK on RelayService
+ (NOBRIDGE) LOG [RelayService] NDK instance set
+ (NOBRIDGE) LOG [NDK] Importing relay metadata for user: 55127fc9...
+ (NOBRIDGE) LOG [RelayService] Importing relays from metadata for user 55127fc9...
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://nos.lol/
+ (NOBRIDGE) LOG [RelayService] Found relay list in event created at 2025-03-24T03:26:44.000Z
+ (NOBRIDGE) LOG [RelayService] No relay tags found in event
+ (NOBRIDGE) LOG [NDK] Successfully imported user relay preferences
+ (NOBRIDGE) LOG [NDK] Login successful, updating state
+ (NOBRIDGE) LOG [NDK] Login complete
+ (NOBRIDGE) LOG App initialization completed!
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.nostr.band/
+ (NOBRIDGE) LOG Video finished playing
+ (NOBRIDGE) LOG Splash video finished playing
+ (NOBRIDGE) LOG [DB] Starting database initialization...
+ (NOBRIDGE) LOG [DB] Opening database...
+ (NOBRIDGE) LOG [DB] Creating schema...
+ (NOBRIDGE) LOG [Schema] Initializing database on ios
+ (NOBRIDGE) LOG [Schema] Current version: 11
+ (NOBRIDGE) LOG [Schema] Current version: 11, Target version: 11
+ (NOBRIDGE) LOG [Schema] Database already at version 11, checking for missing tables
+ (NOBRIDGE) LOG [Schema] Checking for missing critical tables...
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [Schema] Critical tables check complete
+ (NOBRIDGE) LOG [Schema] Checking for missing critical tables...
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [Schema] Critical tables check complete
+ (NOBRIDGE) LOG [Schema] Running migration v8 - Template management
+ (NOBRIDGE) LOG [Schema] Migration v8 completed successfully
+ (NOBRIDGE) LOG [DB] Migration v8 executed successfully
+ (NOBRIDGE) LOG [Schema] Running migration v9 - Enhanced Nostr metadata
+ (NOBRIDGE) LOG [Schema] Migration v9 completed successfully
+ (NOBRIDGE) LOG [DB] Migration v9 executed successfully
+ (NOBRIDGE) LOG [Schema] Running migration v10 - Adding Favorites table
+ (NOBRIDGE) LOG [Schema] Migration v10 completed successfully
+ (NOBRIDGE) LOG [DB] Migration v10 executed successfully
+ (NOBRIDGE) LOG [DB] Initializing services...
+ (NOBRIDGE) LOG [DB] ExerciseService initialized
+ (NOBRIDGE) LOG [DB] WorkoutService initialized
+ (NOBRIDGE) LOG [DB] TemplateService initialized
+ (NOBRIDGE) LOG [DB] PublicationQueueService initialized
+ (NOBRIDGE) LOG [DB] FavoritesService initialized
+ (NOBRIDGE) LOG [DB] POWRPackService initialized
+ (NOBRIDGE) LOG [DB] FavoritesService fully initialized
+ (NOBRIDGE) LOG
+--- Database Debug Info ---
+ (NOBRIDGE) LOG Database Path: file:///Users/danielwyler/Library/Developer/CoreSimulator/Devices/2A575D76-EFD3-483A-B8A1-AB3A78107638/data/Containers/Data/Application/9845E875-95EC-461A-ABE0-6750715293F0/Documents/SQLite/powr.db
+ (NOBRIDGE) LOG File Info: {"exists": true, "isDirectory": false, "md5": "5476e9c40a46ea950a9843ef506bb2c3", "modificationTime": 1742817336.3287776, "size": 253952, "uri": "file:///Users/danielwyler/Library/Developer/CoreSimulator/Devices/2A575D76-EFD3-483A-B8A1-AB3A78107638/data/Containers/Data/Application/9845E875-95EC-461A-ABE0-6750715293F0/Documents/SQLite/powr.db"}
+ (NOBRIDGE) LOG Tables: ["schema_version", "exercises", "exercise_tags", "nostr_events", "event_tags", "templates", "template_exercises", "powr_packs", "powr_pack_items", "favorites", "nostr_workouts", "workouts", "workout_exercises", "workout_sets", "app_status", "feed_cache"]
+ (NOBRIDGE) LOG ------------------------
+ (NOBRIDGE) LOG [DB] Database initialized successfully
+ (NOBRIDGE) LOG [DB] Database ready - triggering initial library refresh
+ (NOBRIDGE) LOG [Database] Delayed initialization complete
+ (NOBRIDGE) LOG [RelayInitializer] Setting NDK instance in ProfileImageCache
+ (NOBRIDGE) LOG [RelayInitializer] Attempting to initialize SocialFeedCache (attempt 1/3)
+ (NOBRIDGE) LOG Running SQL:
+ CREATE TABLE IF NOT EXISTS feed_cache (
+ event_id TEXT NOT NULL,
+ feed_type TEXT NOT NULL,
+ created_at INTEGER NOT NULL,
+ cached_at INTEGER NOT NULL,
+ PRIMARY KEY (event_id, feed_type)
+ )
+ (NOBRIDGE) LOG Parameters: []
+ (NOBRIDGE) LOG [RelayInitializer] SocialFeedCache initialized with NDK successfully
+ (NOBRIDGE) LOG [RelayInitializer] NDK available and online, loading relays...
+ (NOBRIDGE) LOG [RelayStore] Loading relays...
+ (NOBRIDGE) LOG [RelayStore] Created RelayService instance
+ (NOBRIDGE) LOG [RelayService] NDK instance set
+ (NOBRIDGE) LOG [RelayService] Found 5 relays in NDK pool
+ (NOBRIDGE) LOG [RelayStore] Loaded 5 relays with status
+ (NOBRIDGE) LOG Running SQL:
+ CREATE INDEX IF NOT EXISTS idx_feed_cache_type_time
+ ON feed_cache (feed_type, created_at DESC)
+ (NOBRIDGE) LOG Parameters: []
+ (NOBRIDGE) LOG [SocialFeedCache] Feed cache table initialized
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://powr.duckdns.org/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://nostr.wine/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://offchain.pub/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.snort.social/
+ (NOBRIDGE) LOG NDK status: initialized
+ (NOBRIDGE) LOG [useSocialFeed] Initializing SocialFeedService
+ (NOBRIDGE) LOG [useSocialFeed] SocialFeedService initialized successfully
+ (NOBRIDGE) LOG [useSocialFeed] Loading powr feed with authors: ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T11:56:08.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: {"since":1742730968,"limit":30,"kinds":[1301,33401,33402,1,30023],"authors":["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]}
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to powr feed with filter: {"authors": ["0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1301, 33401, 33402, 1, 30023], "limit": 30, "since": 1742730968}
+ (NOBRIDGE) LOG [FollowingScreen] Contact list has 0 contacts
+ (NOBRIDGE) LOG [useSocialFeed] Initializing SocialFeedService
+ (NOBRIDGE) LOG [useSocialFeed] SocialFeedService initialized successfully
+ (NOBRIDGE) LOG [useSocialFeed] Initializing SocialFeedService
+ (NOBRIDGE) LOG [useSocialFeed] SocialFeedService initialized successfully
+ (NOBRIDGE) LOG [useSocialFeed] Loading following feed with authors: undefined
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T11:56:08.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Following feed with no authors, skipping subscription
+ (NOBRIDGE) LOG [useSocialFeed] Loading global feed with authors: undefined
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T11:56:08.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: [{"since":1742730968,"limit":30,"kinds":[1301,33401,33402]},{"since":1742730968,"limit":30,"kinds":[1,30023],"#t":["workout","fitness","powr","31days","crossfit","wod","gym","strength","cardio","training","exercise"]}]
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to global feed with filter: [{"kinds": [1301, 33401, 33402], "limit": 30, "since": 1742730968}, {"#t": ["workout", "fitness", "powr", "31days", "crossfit", "wod", "gym", "strength", "cardio", "training", "exercise"], "kinds": [1, 30023], "limit": 30, "since": 1742730968}]
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for powr feed
+ (NOBRIDGE) LOG Processing event f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81, kind 1 from 918183d598acf2dca80cfc0cdea4a0ee5889251757ff3c75c5414f006d699ae5
+ (NOBRIDGE) LOG Adding event f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81 to feed as social
+ (NOBRIDGE) LOG Processing event a45ffb3b34f331008d89188073e8707614dd013736ca9c8ec9b7443febee7034, kind 1 from c465a1051794a507a55adebc0f044dc6e79d9b67a5e05aed4bf684afe088f976
+ (NOBRIDGE) LOG Adding event a45ffb3b34f331008d89188073e8707614dd013736ca9c8ec9b7443febee7034 to feed as social
+ (NOBRIDGE) LOG Processing event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab to feed as social
+ (NOBRIDGE) LOG Processing event d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd, kind 1 from 5d4e1d2a6731875e9decb868e2240aa4b75a6d67199ed1387a6ff08aba272967
+ (NOBRIDGE) LOG Adding event d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd to feed as social
+ (NOBRIDGE) LOG Processing event d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085, kind 1 from f4d89779148ccd245c8d50914a284fd62d97cb0fb68b797a70f24a172b522db9
+ (NOBRIDGE) LOG Adding event d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085 to feed as social
+ (NOBRIDGE) LOG Processing event dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c, kind 1 from 14147765a18028fdb386db2891e747c11b2a32761e12a0e6e43d5f8451ee74bc
+ (NOBRIDGE) LOG Adding event dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c to feed as social
+ (NOBRIDGE) LOG Processing event 83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4, kind 1 from 5069ea44d8977e77c6aea605d0c5386b24504a3abd0fe8a3d1cf5f4cedca40a7
+ (NOBRIDGE) LOG Adding event 83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4 to feed as social
+ (NOBRIDGE) LOG Processing event f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21, kind 1 from 60e5bccda24b32e79c75edb8e7c66e55202853932849f02e329c985b71ac3fbd
+ (NOBRIDGE) LOG Adding event f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21 to feed as social
+ (NOBRIDGE) LOG Processing event e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567, kind 1 from 7a6b8c7de171955c214ded7e35cc782cd6dddfd141abb1929c632f69348e6f49
+ (NOBRIDGE) LOG Adding event e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567 to feed as social
+ (NOBRIDGE) LOG Processing event fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698, kind 1 from ad8d9660c675d3b3a16fc1484c102782ba8370ae5f94ec5fc2b244a8c8a0a589
+ (NOBRIDGE) LOG Adding event fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698 to feed as social
+ (NOBRIDGE) LOG Processing event cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91, kind 1 from 81fa5b70a73a691c6e78823d035ffc44f6b505e6f03637759bd36e7a451539fd
+ (NOBRIDGE) LOG Adding event cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91 to feed as social
+ (NOBRIDGE) LOG Processing event 3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5, kind 1 from 43d7f07d10b9e662745e10b2fc201a74dc178a308c31409350d06b04477816e1
+ (NOBRIDGE) LOG Adding event 3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5 to feed as social
+ (NOBRIDGE) LOG Processing event 34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53, kind 1 from 70632e1941795474cb154415afb79c09b58189afd2243bf81153d59710eb6092
+ (NOBRIDGE) LOG Adding event 34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53 to feed as social
+ (NOBRIDGE) LOG Processing event 593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475, kind 1 from b32d6b081c2422f57cbea1c1177159a93ffaa1913f540ae91e5fe3785b198cb2
+ (NOBRIDGE) LOG Adding event 593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475 to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for global feed
+ (NOBRIDGE) LOG Found 7 contacts via followSet()
+ (NOBRIDGE) LOG [FollowingScreen] Contact list has 8 contacts
+ (NOBRIDGE) LOG [FollowingScreen] First few contacts: 0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04, f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9, 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Attempting fetch after delay
+ (NOBRIDGE) LOG Explicitly connecting to relays: ["wss://relay.damus.io", "wss://nos.lol", "wss://relay.nostr.band", "wss://purplepag.es"]
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://relay.damus.io
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://nos.lol
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://relay.nostr.band
+ (NOBRIDGE) LOG Using pool to connect to relay: wss://purplepag.es
+ (NOBRIDGE) LOG NDK connection status: 8 relays connected
+ (NOBRIDGE) LOG Fetching POWR packs from known publishers
+ (NOBRIDGE) LOG Fetching from known publishers: ["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "918183d598acf2dca80cfc0cdea4a0ee5889251757ff3c75c5414f006d699ae5", 1, 1742810300, "Crossfit session 💪😎
+
+https://m.primal.net/PrLA.jpg
+
+#CrossFit #exercise #effort #gym", "d58cc84f10a22ceb3495c8b71f773f53619ef9ff15646e33a15fce39cf1c1e4c9ebe2a2e445ba0f501fa9f1bf36ac4e96e68d3314e2d530b9dc0cdbe3f6b0271", "{\"id\":\"f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81\",\"pubkey\":\"918183d598acf2dca80cfc0cdea4a0ee5889251757ff3c75c5414f006d699ae5\",\"kind\":1,\"created_at\":1742810300,\"content\":\"Crossfit session 💪😎\\n\\nhttps://m.primal.net/PrLA.jpg \\n\\n#CrossFit #exercise #effort #gym\",\"sig\":\"d58cc84f10a22ceb3495c8b71f773f53619ef9ff15646e33a15fce39cf1c1e4c9ebe2a2e445ba0f501fa9f1bf36ac4e96e68d3314e2d530b9dc0cdbe3f6b0271\",\"tags\":[[\"t\",\"CrossFit\"],[\"t\",\"exercise\"],[\"t\",\"effort\"],[\"t\",\"gym\"],[\"r\",\"wss://cache2.primal.net/v1\"],[\"r\",\"wss://eden.nostr.land/\"],[\"r\",\"wss://nos.lol/\"],[\"r\",\"wss://nostr.wine/\"],[\"r\",\"wss://offchain.pub/\"],[\"r\",\"wss://premium.primal.net/\"],[\"r\",\"wss://relay.chakany.systems/\"],[\"r\",\"wss://relay.damus.io/\"],[\"r\",\"wss://relay.getalby.com/v1\"],[\"r\",\"wss://relay.primal.net/\"],[\"r\",\"wss://relay.snort.social/\"],[\"r\",\"wss://nostr.bitcoiner.social/\"]]}", 1742817369448]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "t", "CrossFit", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "t", "exercise", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "t", "effort", 2]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "t", "gym", 3]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://cache2.primal.net/v1", 4]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://eden.nostr.land/", 5]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://nos.lol/", 6]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://nostr.wine/", 7]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://offchain.pub/", 8]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://premium.primal.net/", 9]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://relay.chakany.systems/", 10]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://relay.damus.io/", 11]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://relay.getalby.com/v1", 12]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://relay.primal.net/", 13]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://relay.snort.social/", 14]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "r", "wss://nostr.bitcoiner.social/", 15]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f496791f4f409f3cd7c7f807adcfc21f0d61194044eb77b39713b4fc92380a81", "global", 1742810300, 1742817369448]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0", "global", 1742786395, 1742817369449]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["a45ffb3b34f331008d89188073e8707614dd013736ca9c8ec9b7443febee7034", "global", 1742788935, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab", "global", 1742782158, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d0070111bd6dba4091634b04da8fe4288d9c603a7db78bd2e87dcebccd1dc4dd", "global", 1742780020, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["d9c6fd417778927925137394601a5c1f10ad24dd1190c73b714da82dbb21f085", "global", 1742775869, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["dcb32ea5be84b024edae9d7931a140595f7dc91975b8e01de9d5bcba19ca370c", "global", 1742749229, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["83017c71d9bf6ec2ce89afa99fdc74515e29bc3bdb5e8d41c6ebacd8f1ab96d4", "global", 1742741497, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["f9c49ba66580670ffbcb7e5bdd17acd1a0ccfa6dbfda86e0e26f4722c7b46f21", "global", 1742760959, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["e8fd75341aed6bd47816343b648c4aebdbf5274c9360cc35bef1fd310d39a567", "global", 1742758559, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["fc9330f5f1f9a3762fb499f2cbc6e6a00e88421e139e02e5111bd793cf206698", "global", 1742750608, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["cee8815fb1a126f46c714d28768bda4f958455844a80bdf8cecf4be2cc91bf91", "global", 1742745450, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["3a315ede408afdd5f939d22637327794ebea524bee5ef54a9c5596896d7f15e5", "global", 1742746988, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["34f930b30255c6f8f2fba2b253bc0aa0122459fd070357feb2c8ebee9a2f4d53", "global", 1742739424, 1742817369450]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["593bcd14e75770d20737948279e2ccc413d3acdfd6cbf56a71418ebf80b74475", "global", 1742731342, 1742817369450]
+ (NOBRIDGE) LOG Fetched 14 events from known publishers
+ (NOBRIDGE) LOG First event basic info: {"contentPreview": "This POWR Pack includes relay hints to improve con", "id": "42e46198f802ac821b5a82b96d083e0e5cb9a4790b79a007b0a65dfe1020576c", "kind": 30004, "pubkey": "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "tagsCount": 13}
+ (NOBRIDGE) LOG Created 14 simplified packs
+ (NOBRIDGE) LOG First simplified pack: {"id": "42e46198f802ac821b5a82b96d083e0e5cb9a4790b79a007b0a65dfe1020576c", "tagsCount": 13}
+ (NOBRIDGE) LOG Set featuredPacks state with simplified packs
+ (NOBRIDGE) LOG [useSocialFeed] Initializing SocialFeedService
+ (NOBRIDGE) LOG [useSocialFeed] SocialFeedService initialized successfully
+ (NOBRIDGE) LOG [useSocialFeed] Loading profile feed with authors: ["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T11:59:00.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: [{"since":1742731140,"limit":30,"kinds":[1301,33401,33402],"authors":["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"]},{"since":1742731140,"limit":30,"kinds":[1,30023],"authors":["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"]}]
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to profile feed with filter: [{"authors": ["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"], "kinds": [1301, 33401, 33402], "limit": 30, "since": 1742731140}, {"authors": ["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"], "kinds": [1, 30023], "limit": 30, "since": 1742731140}]
+ (NOBRIDGE) LOG [TemplateService] Template sources:
+ (NOBRIDGE) LOG - nostr: 1
+ (NOBRIDGE) LOG [TemplateService] Found 1 templates
+ (NOBRIDGE) LOG - Simple Strength Workout (local:m8mja9fd-oz0peevxz7) [source: nostr]
+ (NOBRIDGE) LOG Fetching exercises for template local:m8mja9fd-oz0peevxz7
+ (NOBRIDGE) LOG Expected template exercises: 3
+ (NOBRIDGE) LOG Found 3 template exercises in database
+ (NOBRIDGE) LOG Looking up exercise with ID: local:m8mja98y-984imro9c6f
+ (NOBRIDGE) LOG Looking up exercise with ID: local:m8mja9f9-xh867hc8yoa
+ (NOBRIDGE) LOG Looking up exercise with ID: local:m8mja9fb-vsgpmeikfie
+ (NOBRIDGE) LOG Returning 3 template exercises
+ (NOBRIDGE) LOG [TemplateService] Template sources:
+ (NOBRIDGE) LOG - nostr: 1
+ (NOBRIDGE) LOG [TemplateService] Found 1 templates
+ (NOBRIDGE) LOG - Simple Strength Workout (local:m8mja9fd-oz0peevxz7) [source: nostr]
+ (NOBRIDGE) LOG Fetching exercises for template local:m8mja9fd-oz0peevxz7
+ (NOBRIDGE) LOG Expected template exercises: 3
+ (NOBRIDGE) LOG Found 3 template exercises in database
+ (NOBRIDGE) LOG Looking up exercise with ID: local:m8mja98y-984imro9c6f
+ (NOBRIDGE) LOG Looking up exercise with ID: local:m8mja9f9-xh867hc8yoa
+ (NOBRIDGE) LOG Looking up exercise with ID: local:m8mja9fb-vsgpmeikfie
+ (NOBRIDGE) LOG Returning 3 template exercises
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for profile feed
+ (NOBRIDGE) LOG Refreshing profile feed
+ (NOBRIDGE) LOG [useSocialFeed] Subscription on cooldown, skipping
+ (NOBRIDGE) LOG Refreshing profile feed
+ (NOBRIDGE) LOG [useSocialFeed] Cleaning up existing subscription for profile feed
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from profile feed
+ (NOBRIDGE) LOG [useSocialFeed] Loading profile feed with authors: ["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T11:59:05.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: [{"since":1742731145,"limit":30,"kinds":[1301,33401,33402],"authors":["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"]},{"since":1742731145,"limit":30,"kinds":[1,30023],"authors":["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"]}]
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to profile feed with filter: [{"authors": ["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"], "kinds": [1301, 33401, 33402], "limit": 30, "since": 1742731145}, {"authors": ["55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"], "kinds": [1, 30023], "limit": 30, "since": 1742731145}]
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for profile feed
+ (NOBRIDGE) LOG [NDK] Relay disconnected: wss://relay.snort.social/
+ (NOBRIDGE) LOG [NDK] Relay connected: wss://relay.snort.social/
+ (NOBRIDGE) LOG Processing event a985a37491b5e755da13dc255e409af0afbbec92a767e7197b7adeb3fe7564a3, kind 1 from e516ecb882ffbc9ba87353342e0c9dbd3e9cf55a00316ca1d23efa3a1be0b167
+ (NOBRIDGE) LOG Adding event a985a37491b5e755da13dc255e409af0afbbec92a767e7197b7adeb3fe7564a3 to feed as social
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["a985a37491b5e755da13dc255e409af0afbbec92a767e7197b7adeb3fe7564a3", "e516ecb882ffbc9ba87353342e0c9dbd3e9cf55a00316ca1d23efa3a1be0b167", 1, 1742818038, "Gm. short workout before work
+
+#workout #ohp
+
+
+OHP Heavy
+March 24 08:09-09:06
+
+Barbell Shoulder Press
+1. 15 Kg x 5 Reps
+2. 19 Kg x 5 Reps
+3. 23 Kg x 3 Reps
+4. 29 Kg x 5 Reps
+5. 32 Kg x 3 Reps
+6. 36 Kg x 6 Reps
+7. 33 Kg x 7 Reps
+
+Barbell Bench Press
+1. 41 Kg x 10 Reps
+2. 37 Kg x 10 Reps
+3. 34 Kg x 10 Reps
+4. 31 Kg x 10 Reps
+5. 27 Kg x 10 Reps
+
+Pullup
+1. 85 Kg x 10 Reps
+2. 85 Kg x 7 Reps
+3. 85 Kg x 6 Reps
+4. 85 Kg x 5 Reps
+5. 85 Kg x 4 Reps
+
+Dumbbell Curl
+1. 10 Kg x 10 Reps
+2. 10 Kg x 10 Reps
+3. 10 Kg x 10 Reps", "592f267cecc4f7d7d2f026edcf24c8615bf529d8b193e0db22c640cb49e5b13a2eb9f1ec1626724871edcb3164e462acbaa6d870a888765f33c8ded666fad004", "{\"id\":\"a985a37491b5e755da13dc255e409af0afbbec92a767e7197b7adeb3fe7564a3\",\"pubkey\":\"e516ecb882ffbc9ba87353342e0c9dbd3e9cf55a00316ca1d23efa3a1be0b167\",\"kind\":1,\"created_at\":1742818038,\"content\":\"Gm. short workout before work\\n\\n#workout #ohp\\n\\n\\nOHP Heavy\\nMarch 24 08:09-09:06\\n\\nBarbell Shoulder Press\\n1. 15 Kg x 5 Reps\\n2. 19 Kg x 5 Reps\\n3. 23 Kg x 3 Reps\\n4. 29 Kg x 5 Reps\\n5. 32 Kg x 3 Reps\\n6. 36 Kg x 6 Reps\\n7. 33 Kg x 7 Reps\\n\\nBarbell Bench Press\\n1. 41 Kg x 10 Reps\\n2. 37 Kg x 10 Reps\\n3. 34 Kg x 10 Reps\\n4. 31 Kg x 10 Reps\\n5. 27 Kg x 10 Reps\\n\\nPullup\\n1. 85 Kg x 10 Reps\\n2. 85 Kg x 7 Reps\\n3. 85 Kg x 6 Reps\\n4. 85 Kg x 5 Reps\\n5. 85 Kg x 4 Reps\\n\\nDumbbell Curl\\n1. 10 Kg x 10 Reps\\n2. 10 Kg x 10 Reps\\n3. 10 Kg x 10 Reps\",\"sig\":\"592f267cecc4f7d7d2f026edcf24c8615bf529d8b193e0db22c640cb49e5b13a2eb9f1ec1626724871edcb3164e462acbaa6d870a888765f33c8ded666fad004\",\"tags\":[[\"t\",\"workout\"],[\"t\",\"ohp\"]]}", 1742818040751]
+ (NOBRIDGE) LOG Running SQL: DELETE FROM event_tags WHERE event_id = ?
+ (NOBRIDGE) LOG Parameters: ["a985a37491b5e755da13dc255e409af0afbbec92a767e7197b7adeb3fe7564a3"]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["a985a37491b5e755da13dc255e409af0afbbec92a767e7197b7adeb3fe7564a3", "t", "workout", 0]
+ (NOBRIDGE) LOG Running SQL: INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["a985a37491b5e755da13dc255e409af0afbbec92a767e7197b7adeb3fe7564a3", "t", "ohp", 1]
+ (NOBRIDGE) LOG Running SQL: INSERT OR REPLACE INTO feed_cache
+ (event_id, feed_type, created_at, cached_at)
+ VALUES (?, ?, ?, ?)
+ (NOBRIDGE) LOG Parameters: ["a985a37491b5e755da13dc255e409af0afbbec92a767e7197b7adeb3fe7564a3", "global", 1742818038, 1742818040751]
+ (NOBRIDGE) LOG Refreshing following feed
+ (NOBRIDGE) LOG [useSocialFeed] Loading following feed with authors: ["0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200", "3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T11:56:09.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: [{"since":1742730969,"limit":30,"kinds":[1301,33401,33402],"authors":["0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04","f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9","7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200","3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506","55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21","2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884","fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52","0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]},{"since":1742730969,"limit":30,"kinds":[1,30023],"authors":["0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04","f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9","7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200","3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506","55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21","2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884","fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52","0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"],"#t":["workout","fitness","powr","31days","crossfit","wod","gym","strength","cardio","training","exercise"]}]
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to following feed with filter: [{"authors": ["0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200", "3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1301, 33401, 33402], "limit": 30, "since": 1742730969}, {"#t": ["workout", "fitness", "powr", "31days", "crossfit", "wod", "gym", "strength", "cardio", "training", "exercise"], "authors": ["0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200", "3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1, 30023], "limit": 30, "since": 1742730969}]
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG Processing event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for following feed
+ (NOBRIDGE) LOG Refreshing following feed
+ (NOBRIDGE) LOG [useSocialFeed] Subscription on cooldown, skipping
+ (NOBRIDGE) LOG === RELAY CONNECTION STATUS ===
+ (NOBRIDGE) LOG Connected to 8 relays:
+ (NOBRIDGE) LOG - wss://powr.duckdns.org/: 5
+ (NOBRIDGE) LOG - wss://relay.damus.io/: 5
+ (NOBRIDGE) LOG - wss://relay.nostr.band/: 5
+ (NOBRIDGE) LOG - wss://purplepag.es/: 5
+ (NOBRIDGE) LOG - wss://nos.lol/: 5
+ (NOBRIDGE) LOG - wss://relay.snort.social/: 5
+ (NOBRIDGE) LOG - wss://nostr.wine/: 5
+ (NOBRIDGE) LOG - wss://offchain.pub/: 5
+ (NOBRIDGE) LOG ===============================
+ (NOBRIDGE) LOG Refreshing following feed
+ (NOBRIDGE) LOG [useSocialFeed] Cleaning up existing subscription for following feed
+ (NOBRIDGE) LOG [SocialFeedService] Unsubscribing from following feed
+ (NOBRIDGE) LOG [useSocialFeed] Loading following feed with authors: ["0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200", "3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]
+ (NOBRIDGE) LOG [useSocialFeed] Time range: since=2025-03-23T11:56:09.000Z, until=now
+ (NOBRIDGE) LOG [useSocialFeed] Subscribing with filters: [{"since":1742730969,"limit":30,"kinds":[1301,33401,33402],"authors":["0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04","f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9","7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200","3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506","55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21","2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884","fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52","0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"]},{"since":1742730969,"limit":30,"kinds":[1,30023],"authors":["0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04","f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9","7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200","3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506","55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21","2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884","fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52","0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"],"#t":["workout","fitness","powr","31days","crossfit","wod","gym","strength","cardio","training","exercise"]}]
+ (NOBRIDGE) LOG [SocialFeedService] Subscribing to following feed with filter: [{"authors": ["0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200", "3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1301, 33401, 33402], "limit": 30, "since": 1742730969}, {"#t": ["workout", "fitness", "powr", "31days", "crossfit", "wod", "gym", "strength", "cardio", "training", "exercise"], "authors": ["0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04", "f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9", "7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200", "3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506", "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21", "2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "0bdd91e8a30d87d041eafd1871f17d426fa415c69a9a822eccad49017bac59e7"], "kinds": [1, 30023], "limit": 30, "since": 1742730969}]
+ (NOBRIDGE) LOG Processing event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0, kind 1 from 55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21
+ (NOBRIDGE) LOG Adding event ebc91780f5ec85424c5e6d177615da8c3a21738b92a44fc5fca9851cee6c08f0 to feed as social
+ (NOBRIDGE) LOG Processing event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab, kind 1 from 7ed7d5c3abf06fa1c00f71f879856769f46ac92354c129b3ed5562506927e200
+ (NOBRIDGE) LOG Adding event b7160aec02946e0a29b588b85d99c19740c07b166ca40deedf8f8a2dbefc4eab to feed as social
+ (NOBRIDGE) LOG [SocialFeedService] Received EOSE for following feed
\ No newline at end of file
diff --git a/docs/design/Social/SocialFeedCacheImplementation.md b/docs/design/Social/SocialFeedCacheImplementation.md
new file mode 100644
index 0000000..5a1158e
--- /dev/null
+++ b/docs/design/Social/SocialFeedCacheImplementation.md
@@ -0,0 +1,199 @@
+# Social Feed Cache Implementation
+
+## Overview
+
+This document outlines the implementation of the Social Feed Cache system in the POWR app. The cache system is designed to provide offline access to social feed data, reduce network usage, and improve performance.
+
+## Key Components
+
+1. **SocialFeedCache**: The main service that handles caching of social feed events
+2. **EventCache**: A service for caching individual Nostr events
+3. **useSocialFeed**: A hook that provides access to the social feed data
+4. **RelayInitializer**: A component that initializes the cache system
+
+## Implementation Details
+
+### Write Buffer System
+
+The SocialFeedCache uses a write buffer system to batch database operations and reduce transaction conflicts. This approach is inspired by the Olas NDK Mobile implementation.
+
+```typescript
+private writeBuffer: { query: string; params: any[] }[] = [];
+private bufferFlushTimer: NodeJS.Timeout | null = null;
+private bufferFlushTimeout: number = 100; // milliseconds
+private processingTransaction: boolean = false;
+
+private bufferWrite(query: string, params: any[]) {
+ this.writeBuffer.push({ query, params });
+
+ if (!this.bufferFlushTimer) {
+ this.bufferFlushTimer = setTimeout(() => this.flushWriteBuffer(), this.bufferFlushTimeout);
+ }
+}
+
+private async flushWriteBuffer() {
+ if (this.writeBuffer.length === 0 || this.processingTransaction) return;
+
+ const bufferCopy = [...this.writeBuffer];
+ this.writeBuffer = [];
+
+ this.processingTransaction = true;
+
+ try {
+ await this.db.withTransactionAsync(async () => {
+ for (const { query, params } of bufferCopy) {
+ await this.db.runAsync(query, params);
+ }
+ });
+ } catch (error) {
+ console.error('[SocialFeedCache] Error flushing write buffer:', error);
+ // If there was an error, add the operations back to the buffer
+ for (const op of bufferCopy) {
+ if (!this.writeBuffer.some(item =>
+ item.query === op.query &&
+ JSON.stringify(item.params) === JSON.stringify(op.params)
+ )) {
+ this.writeBuffer.push(op);
+ }
+ }
+ } finally {
+ this.processingTransaction = false;
+ }
+
+ this.bufferFlushTimer = null;
+
+ // If there are more operations, start a new timer
+ if (this.writeBuffer.length > 0) {
+ this.bufferFlushTimer = setTimeout(() => this.flushWriteBuffer(), this.bufferFlushTimeout);
+ }
+}
+```
+
+### In-Memory Tracking with LRU Cache
+
+To prevent redundant database operations, the SocialFeedCache uses an LRU (Least Recently Used) cache to track known events:
+
+```typescript
+private knownEventIds: LRUCache; // Event ID -> timestamp
+
+constructor(database: SQLiteDatabase) {
+ this.db = new DbService(database);
+ this.eventCache = new EventCache(database);
+
+ // Initialize LRU cache for known events (limit to 1000 entries)
+ this.knownEventIds = new LRUCache({ maxSize: 1000 });
+
+ // Ensure feed_cache table exists
+ this.initializeTable();
+}
+```
+
+### Debounced Subscriptions
+
+The `useSocialFeed` hook implements debouncing to prevent rapid resubscriptions:
+
+```typescript
+// Subscription cooldown to prevent rapid resubscriptions
+const subscriptionCooldown = useRef(null);
+const cooldownPeriod = 2000; // 2 seconds
+const subscriptionAttempts = useRef(0);
+const maxSubscriptionAttempts = 3;
+
+// In loadFeed function:
+// Prevent rapid resubscriptions
+if (subscriptionCooldown.current) {
+ console.log('[useSocialFeed] Subscription on cooldown, skipping');
+ return;
+}
+
+// Track subscription attempts to prevent infinite loops
+subscriptionAttempts.current += 1;
+if (subscriptionAttempts.current > maxSubscriptionAttempts) {
+ console.error(`[useSocialFeed] Too many subscription attempts (${subscriptionAttempts.current}), giving up`);
+ setLoading(false);
+ return;
+}
+
+// Set a cooldown to prevent rapid resubscriptions
+subscriptionCooldown.current = setTimeout(() => {
+ subscriptionCooldown.current = null;
+ // Reset attempt counter after cooldown period
+ subscriptionAttempts.current = 0;
+}, cooldownPeriod);
+```
+
+### Proper Initialization
+
+The RelayInitializer component ensures that the SocialFeedCache is properly initialized with the NDK instance:
+
+```typescript
+// Initialize ProfileImageCache and SocialFeedCache with NDK instance
+useEffect(() => {
+ if (ndk) {
+ console.log('[RelayInitializer] Setting NDK instance in ProfileImageCache');
+ profileImageCache.setNDK(ndk);
+
+ // Initialize SocialFeedCache with NDK instance
+ if (db) {
+ try {
+ const socialFeedCache = getSocialFeedCache(db);
+ socialFeedCache.setNDK(ndk);
+ console.log('[RelayInitializer] SocialFeedCache initialized with NDK');
+ } catch (error) {
+ console.error('[RelayInitializer] Error initializing SocialFeedCache:', error);
+ }
+ }
+ }
+}, [ndk, db]);
+```
+
+## Benefits
+
+1. **Reduced Transaction Conflicts**: The write buffer system prevents transaction conflicts by batching operations.
+2. **Improved Performance**: The LRU cache reduces redundant database operations.
+3. **Better Error Handling**: The system includes robust error handling to prevent cascading failures.
+4. **Offline Support**: The cache system provides offline access to social feed data.
+5. **Reduced Network Usage**: The system reduces network usage by caching events locally.
+
+## Debugging
+
+The Following screen includes debug information to help troubleshoot issues:
+
+```typescript
+// Debug controls component - memoized
+const DebugControls = useCallback(() => (
+
+ Debug Info:
+ User: {currentUser?.pubkey?.substring(0, 8)}...
+ Feed Items: {entries.length}
+ Loading: {loading ? "Yes" : "No"}
+ Offline: {isOffline ? "Yes" : "No"}
+ Contacts: {contacts.length}
+ Loading Contacts: {isLoadingContacts ? "Yes" : "No"}
+
+
+
+ Check Relays
+
+
+
+ Force Refresh
+
+
+
+), [currentUser?.pubkey, entries.length, loading, isOffline, contacts.length, isLoadingContacts, checkRelayConnections, handleRefresh]);
+```
+
+## Future Improvements
+
+1. **Automatic Cache Cleanup**: Implement automatic cleanup of old cached events.
+2. **Cache Synchronization**: Implement synchronization between the cache and the server.
+3. **Cache Compression**: Implement compression of cached data to reduce storage usage.
+4. **Cache Encryption**: Implement encryption of cached data to improve security.
+5. **Cache Analytics**: Implement analytics to track cache usage and performance.
diff --git a/docs/design/Social/SocialFeedFilteringRules.md b/docs/design/Social/SocialFeedFilteringRules.md
new file mode 100644
index 0000000..1f0ee27
--- /dev/null
+++ b/docs/design/Social/SocialFeedFilteringRules.md
@@ -0,0 +1,220 @@
+# Social Feed Filtering Rules
+
+This document outlines the filtering rules for the different social feed tabs in the POWR app.
+
+## Overview
+
+The POWR app has three main social feed tabs:
+1. **POWR** - Official content from the POWR team
+2. **Following** - Content from users the current user follows
+3. **Community** (formerly Global) - Content from the broader Nostr community
+
+Each feed has specific filtering rules to ensure users see relevant fitness-related content.
+
+## Content Types
+
+The app handles several types of Nostr events:
+- **Social Posts** (kind 1) - Regular text posts
+- **Articles** (kind 30023) - Long-form content
+- **Article Drafts** (kind 30024) - Unpublished long-form content
+- **Workout Records** (kind 1301) - Completed workouts
+- **Exercise Templates** (kind 33401) - Exercise definitions
+- **Workout Templates** (kind 33402) - Workout plans
+
+## Filtering Rules
+
+### POWR Feed
+- Shows content **only** from the official POWR account (`npub1p0wer69rpkraqs02l5v8rutagfh6g9wxn2dgytkv44ysz7avt8nsusvpjk`)
+- Includes:
+ - Social posts (kind 1)
+ - Published articles (kind 30023)
+ - Workout records (kind 1301)
+ - Exercise templates (kind 33401)
+ - Workout templates (kind 33402)
+- **Excludes** article drafts (kind 30024)
+
+### Following Feed
+- Shows content from users the current user follows
+- For social posts (kind 1) and articles (kind 30023), only shows content with fitness-related tags:
+ - #workout
+ - #fitness
+ - #powr
+ - #31days
+ - #crossfit
+ - #wod
+ - #gym
+ - #strength
+ - #cardio
+ - #training
+ - #exercise
+- Always shows workout-specific content (kinds 1301, 33401, 33402) from followed users
+- **Excludes** article drafts (kind 30024)
+
+### Community Feed
+- Shows content from all users
+- For social posts (kind 1) and articles (kind 30023), only shows content with fitness-related tags (same as Following Feed)
+- Always shows workout-specific content (kinds 1301, 33401, 33402)
+- **Excludes** article drafts (kind 30024)
+
+### User Activity Feed
+- Shows only the current user's own content
+- For social posts (kind 1) and articles (kind 30023), only shows content with fitness-related tags (same as Following Feed)
+- Always shows the user's workout-specific content (kinds 1301, 33401, 33402)
+- **Excludes** article drafts (kind 30024)
+
+## Implementation Details
+
+The filtering is implemented in several key files:
+- `lib/social/socialFeedService.ts` - Core service that handles feed subscriptions
+- `lib/hooks/useFeedHooks.ts` - React hooks for the different feed types
+- `components/social/EnhancedSocialPost.tsx` - Component that renders feed items
+
+### Tag-Based Filtering
+
+For social posts and articles, we filter based on the presence of fitness-related tags. This ensures that users only see content relevant to fitness and workouts.
+
+### Content Type Filtering
+
+Workout-specific content (kinds 1301, 33401, 33402) is always included in the feeds, as these are inherently fitness-related.
+
+### Draft Exclusion
+
+Article drafts (kind 30024) are excluded from all feeds to ensure users only see published content.
+
+## Modifying Feed Filtering
+
+If you need to modify the event types or tags used for filtering, you'll need to update the following files:
+
+### 1. To modify event kinds (content types):
+
+#### a. `lib/social/socialFeedService.ts`:
+- The `subscribeFeed` method contains the core filtering logic
+- Modify the `workoutFilter` object to change workout-specific content kinds (1301, 33401, 33402)
+- Modify the `socialPostFilter` object to change social post kinds (1)
+- Modify the `articleFilter` object to change article kinds (30023)
+- The special case for draft articles (30024) has been removed, but you can add it back if needed
+
+```typescript
+// Example: To add a new workout-related kind (e.g., 1302)
+const workoutFilter: NDKFilter = {
+ kinds: [1301, 33401, 33402, 1302] as any[],
+ // ...
+};
+```
+
+#### b. `lib/hooks/useFeedHooks.ts`:
+- Update the filter arrays in each hook function:
+ - `useFollowingFeed`
+ - `usePOWRFeed`
+ - `useGlobalFeed`
+ - `useUserActivityFeed`
+
+```typescript
+// Example: Adding a new kind to the POWR feed
+const powrFilters = useMemo(() => {
+ if (!POWR_PUBKEY_HEX) return [];
+
+ return [
+ {
+ kinds: [1, 30023, 1302] as any[], // Added new kind 1302
+ authors: [POWR_PUBKEY_HEX],
+ limit: 25
+ },
+ // ...
+ ];
+}, []);
+```
+
+### 2. To modify fitness-related tags:
+
+#### a. `lib/social/socialFeedService.ts`:
+- Find the tag arrays in the `socialPostFilter` and `articleFilter` objects:
+
+```typescript
+socialPostFilter['#t'] = [
+ 'workout', 'fitness', 'powr', '31days',
+ 'crossfit', 'wod', 'gym', 'strength',
+ 'cardio', 'training', 'exercise'
+ // Add new tags here
+];
+```
+
+#### b. `lib/hooks/useFeedHooks.ts`:
+- Update the tag arrays in each hook function:
+ - `useFollowingFeed`
+ - `useGlobalFeed`
+ - `useUserActivityFeed`
+
+```typescript
+'#t': [
+ 'workout', 'fitness', 'powr', '31days',
+ 'crossfit', 'wod', 'gym', 'strength',
+ 'cardio', 'training', 'exercise',
+ 'newTag1', 'newTag2' // Add new tags here
+]
+```
+
+### 3. To modify content rendering:
+
+#### a. `components/social/EnhancedSocialPost.tsx`:
+- The `renderContent` method determines how different content types are displayed
+- Modify this method if you add new event kinds or need to change how existing kinds are rendered
+
+```typescript
+// Example: Adding support for a new kind
+case 'newContentType':
+ return ;
+```
+
+### 4. To modify event parsing:
+
+#### a. `lib/hooks/useSocialFeed.ts`:
+- The `processEvent` function parses events based on their kind
+- Update this function if you add new event kinds or change how existing kinds are processed
+
+```typescript
+// Example: Adding support for a new kind
+case NEW_KIND:
+ feedItem = {
+ id: event.id,
+ type: 'newType',
+ originalEvent: event,
+ parsedContent: parseNewContent(event),
+ createdAt: timestamp
+ };
+ break;
+```
+
+### 5. Event type definitions:
+
+#### a. `types/nostr-workout.ts`:
+- Contains the `POWR_EVENT_KINDS` enum with all supported event kinds
+- Update this enum if you add new event kinds
+
+```typescript
+// Example: Adding a new kind
+export enum POWR_EVENT_KINDS {
+ // Existing kinds...
+ NEW_KIND = 1302,
+}
+```
+
+## Testing Changes
+
+After modifying the filtering rules, test the changes in all feed tabs:
+1. POWR feed
+2. Following feed
+3. Community feed
+4. User Activity feed (in the Profile tab)
+
+Verify that:
+- Only the expected content types appear in each feed
+- Content with the specified tags is properly filtered
+- New event kinds are correctly rendered
+
+## Future Improvements
+
+Potential future improvements to the filtering system:
+- Add user-configurable filters for specific fitness interests
+- Implement AI-based content relevance scoring
+- Add support for more content types as the Nostr ecosystem evolves
diff --git a/docs/design/cache-management.md b/docs/design/cache-management.md
index 2d42f23..69d5982 100644
--- a/docs/design/cache-management.md
+++ b/docs/design/cache-management.md
@@ -1,179 +1,258 @@
# NDK Mobile Cache Integration Plan
-This document outlines our plan to leverage the NDK mobile SQLite cache system throughout the POWR app to improve offline functionality, reduce network usage, and enhance performance.
-
## Overview
-The NDK mobile library provides a robust SQLite-based caching system that includes:
+This document outlines the comprehensive strategy for leveraging the NDK mobile SQLite cache system throughout the POWR app to improve offline functionality, reduce network usage, and enhance performance.
-1. **Profile Caching**: Stores user profiles with metadata
-2. **Event Caching**: Stores Nostr events with efficient indexing
-3. **Unpublished Event Queue**: Manages events pending publication
-4. **Web of Trust Storage**: Maintains relationship scores
+## Goals
-We will integrate this caching system across multiple components of our app to provide a better offline experience.
+1. **Improve Offline Experience**: Allow users to access critical app features even when offline
+2. **Reduce Network Usage**: Minimize data consumption by caching frequently accessed data
+3. **Enhance Performance**: Speed up the app by reducing network requests
+4. **Maintain Data Freshness**: Implement strategies to keep cached data up-to-date
-## Implementation Priorities
+## Implementation Components
### 1. Profile Image Caching
-**Files to Modify:**
-- `components/UserAvatar.tsx`
-- Create new: `lib/db/services/ProfileImageCache.ts`
+**Status: Implemented**
-**Functions to Implement:**
-- `getProfileImageUri(pubkey, imageUrl)`: Get a cached image URI or download if needed
-- `clearOldCache(maxAgeDays)`: Remove old cached images
+The `ProfileImageCache` service downloads and caches profile images locally, providing offline access and reducing network usage.
+
+```typescript
+// Key features of ProfileImageCache
+- Local storage of profile images in the app's cache directory
+- Automatic fetching and caching of images when needed
+- Age-based cache invalidation (24 hours by default)
+- Integration with UserAvatar component for seamless usage
+```
**Integration Points:**
-- Update `UserAvatar` to use the cache service
-- Add cache invalidation based on profile updates
+- `UserAvatar` component uses the cache for all profile images
+- `EnhancedSocialPost` component uses `UserAvatar` for profile images in the feed
+- NDK initialization sets the NDK instance in the ProfileImageCache service
### 2. Publication Queue Service
-**Files to Modify:**
-- `lib/db/services/PublicationQueueService.ts`
+**Status: Implemented**
-**Functions to Enhance:**
-- `queueEvent(event)`: Use NDK's unpublished events system
-- `processQueue()`: Process events from NDK cache
-- `getPendingEvents(limit)`: Get events from NDK cache
-- `getPendingCount()`: Get count from NDK cache
+The `PublicationQueueService` allows events to be created and queued when offline, then published when connectivity is restored.
-**Migration Strategy:**
-1. Add NDK cache support
-2. Dual-write period
-3. Migrate existing queue
-4. Remove custom implementation
+```typescript
+// Key features of PublicationQueueService
+- Persistent storage of unpublished events
+- Automatic retry mechanism when connectivity is restored
+- Priority-based publishing
+- Status tracking for queued events
+```
+
+**Integration Points:**
+- Social posting
+- Workout publishing
+- Template sharing
### 3. Social Feed Caching
-**Files to Modify:**
-- `lib/social/socialFeedService.ts`
-- `lib/hooks/useSocialFeed.ts`
+**Status: Implemented**
-**Functions to Enhance:**
-- `subscribeFeed(options)`: Check cache before subscription
-- `getComments(eventId)`: Use cache for comments
-- `resolveQuotedContent(event)`: Use cache for quoted content
+The `SocialFeedCache` service caches social feed events locally, allowing users to browse their feed even when offline.
-**Benefits:**
-- Immediate display of previously viewed content
-- Reduced network requests
-- Offline browsing of previously viewed feeds
+```typescript
+// Key features of SocialFeedCache
+- SQLite-based storage of feed events
+- Feed-specific caching (following, POWR, global)
+- Time-based pagination support
+- Automatic cleanup of old cached events
+```
+
+**Integration Points:**
+- `useSocialFeed` hook uses the cache when offline
+- `SocialFeedService` manages the cache and provides a unified API
+- Feed components display cached content with offline indicators
### 4. Workout History
-**Files to Modify:**
-- `lib/db/services/UnifiedWorkoutHistoryService.ts`
+**Status: Implemented**
-**Functions to Enhance:**
-- `getNostrWorkouts()`: Use NDK cache directly
-- `importNostrWorkoutToLocal(eventId)`: Leverage cache for imports
-- `subscribeToNostrWorkouts(pubkey, callback)`: Use cache for initial data
+The `UnifiedWorkoutHistoryService` provides access to workout history both locally and from Nostr, with offline support.
-**Benefits:**
-- Faster workout history loading
-- Offline access to workout history
-- Reduced network usage
+```typescript
+// Key features of workout history caching
+- Local storage of all workout records
+- Synchronization with Nostr when online
+- Conflict resolution for workouts created offline
+- Comprehensive workout data including exercises, sets, and metadata
+```
+
+**Integration Points:**
+- History tab displays cached workout history
+- Workout completion flow saves to local cache first
+- Background synchronization with Nostr
### 5. Exercise Library
-**Files to Modify:**
-- `lib/db/services/ExerciseService.ts`
-- `lib/hooks/useExercises.ts`
+**Status: Implemented**
-**Functions to Implement:**
-- `getExercisesFromNostr()`: Use cache for exercises
-- `getExerciseDetails(id)`: Get details from cache
+The `ExerciseService` maintains a local cache of exercises, allowing offline access to the exercise library.
-**Benefits:**
-- Offline access to exercise library
-- Faster exercise loading
+```typescript
+// Key features of exercise library caching
+- Complete local copy of exercise database
+- Periodic updates from Nostr when online
+- Custom exercise creation and storage
+- Categorization and search functionality
+```
+
+**Integration Points:**
+- Exercise selection during workout creation
+- Exercise details view
+- Exercise search and filtering
### 6. Workout Templates
-**Files to Modify:**
-- `lib/db/services/TemplateService.ts`
-- `lib/hooks/useTemplates.ts`
+**Status: Implemented**
-**Functions to Enhance:**
-- `getTemplateFromNostr(id)`: Use cache for templates
-- `getTemplatesFromNostr()`: Get templates from cache
+The `TemplateService` provides offline access to workout templates through local caching.
-**Benefits:**
-- Offline access to templates
-- Faster template loading
+```typescript
+// Key features of template caching
+- Local storage of user's templates
+- Synchronization with Nostr templates
+- Favorite templates prioritized for offline access
+- Template versioning and updates
+```
+
+**Integration Points:**
+- Template selection during workout creation
+- Template management in the library
+- Template sharing and discovery
### 7. Contact List & Following
-**Files to Modify:**
-- `lib/hooks/useContactList.ts`
-- `lib/hooks/useFeedState.ts`
+**Status: Implemented**
-**Functions to Enhance:**
-- `getContactList()`: Use cache for contact list
-- `getFollowingList()`: Use cache for following list
+The system caches the user's contact list and following relationships for offline access.
-**Benefits:**
-- Offline access to contacts
-- Faster contact list loading
+```typescript
+// Key features of contact list caching
+- Local storage of followed users
+- Periodic updates when online
+- Integration with NDK's contact list functionality
+- Support for NIP-02 contact lists
+```
+
+**Integration Points:**
+- Following feed generation
+- User profile display
+- Social interactions
### 8. General Media Cache
-**Files to Create:**
-- `lib/db/services/MediaCacheService.ts`
+**Status: Implemented**
-**Functions to Implement:**
-- `cacheMedia(url, mimeType)`: Download and cache media
-- `getMediaUri(url)`: Get cached media URI
-- `clearOldCache(maxAgeDays)`: Remove old cached media
+A general-purpose media cache for other types of media used in the app.
+
+```typescript
+// Key features of general media cache
+- Support for various media types (images, videos, etc.)
+- Size-limited cache with LRU eviction
+- Content-addressable storage
+- Automatic cleanup of unused media
+```
**Integration Points:**
-- Profile banners
-- Exercise images
-- Other media content
+- Article images in the feed
+- Exercise demonstration images
+- App assets and resources
-## Implementation Approach
+## Technical Implementation
-For each component, we will:
+### NDK Integration
-1. **Analyze Current Implementation**: Understand how data is currently fetched and stored
-2. **Design Cache Integration**: Determine how to leverage NDK cache
-3. **Implement Changes**: Modify code to use cache
-4. **Test Offline Functionality**: Verify behavior when offline
-5. **Measure Performance**: Compare before and after metrics
+The NDK mobile adapter provides built-in SQLite caching capabilities that we leverage throughout the app:
-## Technical Considerations
+```typescript
+// Initialize NDK with SQLite cache adapter
+const cacheAdapter = new NDKCacheAdapterSqlite('powr', 1000);
+await cacheAdapter.initialize();
-### Cache Size Management
+const ndk = new NDK({
+ cacheAdapter,
+ explicitRelayUrls: DEFAULT_RELAYS,
+ enableOutboxModel: true,
+ autoConnectUserRelays: true,
+ clientName: 'powr',
+});
+```
-- Implement cache size limits
-- Add cache eviction policies
-- Prioritize frequently accessed data
+### Connectivity Management
-### Cache Invalidation
+The `ConnectivityService` monitors network status and triggers appropriate cache behaviors:
-- Track data freshness
-- Implement TTL (Time To Live) for cached data
-- Update cache when new data is received
+```typescript
+// Key features of ConnectivityService
+- Real-time network status monitoring
+- Callback registration for connectivity changes
+- Automatic retry of failed operations when connectivity is restored
+- Bandwidth-aware operation modes
+```
-### Error Handling
+### Cache Invalidation Strategies
-- Graceful fallbacks when cache misses
-- Recovery from cache corruption
-- Logging for debugging
+Different types of data have different invalidation strategies:
-## Success Metrics
+1. **Time-based**: Profile images, feed events
+2. **Version-based**: Exercise library, templates
+3. **Manual**: User-triggered refresh
+4. **Never**: Historical workout data
-- Reduced network requests
-- Faster app startup time
-- Improved offline experience
-- Reduced data usage
-- Better battery life
+## User Experience Considerations
-## Next Steps
+### Offline Indicators
-1. Begin with Profile Image Cache implementation
-2. Move to Publication Queue Service
-3. Continue with remaining components in priority order
+The app provides clear visual indicators when operating in offline mode:
+
+- Global offline indicator in the header
+- Feed-specific offline state components
+- Disabled actions that require connectivity
+- Queued action indicators
+
+### Transparent Sync
+
+Synchronization happens transparently in the background:
+
+- Automatic publishing of queued events when connectivity is restored
+- Progressive loading of fresh content when coming online
+- Prioritized sync for critical data
+
+### Data Freshness
+
+The app balances offline availability with data freshness:
+
+- Age indicators for cached content
+- Pull-to-refresh to force update when online
+- Background refresh of frequently accessed data
+
+## Testing Strategy
+
+Comprehensive testing ensures the cache system works reliably:
+
+1. **Unit Tests**: Individual cache services
+2. **Integration Tests**: Interaction between cache and UI components
+3. **Offline Simulation**: Testing app behavior in offline mode
+4. **Performance Testing**: Measuring cache impact on app performance
+5. **Edge Cases**: Testing cache behavior with limited storage, connectivity issues, etc.
+
+## Future Enhancements
+
+Potential future improvements to the caching system:
+
+1. **Selective Sync**: User-configurable sync preferences
+2. **Compression**: Reducing cache size through compression
+3. **Encryption**: Enhancing security of cached data
+4. **Analytics**: Usage patterns to optimize caching strategy
+5. **Cross-device Sync**: Synchronizing cache across user devices
+
+## Conclusion
+
+The NDK Mobile Cache Integration provides a robust foundation for offline functionality in the POWR app, significantly improving the user experience in limited connectivity scenarios while reducing network usage and enhancing performance.
diff --git a/docs/testing/CacheImplementationTesting.md b/docs/testing/CacheImplementationTesting.md
new file mode 100644
index 0000000..0b42e8e
--- /dev/null
+++ b/docs/testing/CacheImplementationTesting.md
@@ -0,0 +1,343 @@
+# Cache Implementation Testing Guide
+
+This document outlines the testing strategy for the NDK Mobile Cache Integration in the POWR app. It provides guidelines for testing each component of the caching system to ensure reliability, performance, and a seamless user experience in both online and offline scenarios.
+
+## Testing Objectives
+
+1. Verify that all cache components function correctly in isolation
+2. Ensure proper integration between cache components and the UI
+3. Validate offline functionality across all app features
+4. Measure performance improvements from caching
+5. Test edge cases and error handling
+
+## Test Environment Setup
+
+### Simulating Offline Mode
+
+To properly test offline functionality, use one of these approaches:
+
+1. **Device Airplane Mode**: Enable airplane mode on the test device
+2. **Network Throttling**: Use React Native Debugger or Chrome DevTools to simulate slow or unreliable connections
+3. **Mock Connectivity Service**: Modify the `ConnectivityService` to report offline status regardless of actual connectivity
+
+```typescript
+// Example: Force offline mode for testing
+ConnectivityService.getInstance().overrideNetworkStatus(false);
+```
+
+### Test Data Generation
+
+Create a consistent set of test data for reproducible testing:
+
+1. **Test Accounts**: Create dedicated test accounts with known data
+2. **Seed Data**: Populate the cache with known seed data before testing
+3. **Mock Events**: Generate mock Nostr events for testing specific scenarios
+
+## Component Testing
+
+### 1. Profile Image Cache Testing
+
+**Test Cases:**
+
+1. **Cache Hit**: Verify that previously cached images load without network requests
+2. **Cache Miss**: Ensure new images are downloaded and cached properly
+3. **Cache Expiry**: Test that expired images are refreshed when online
+4. **Offline Behavior**: Confirm cached images display when offline
+5. **Error Handling**: Test behavior when image URLs are invalid or unreachable
+
+**Testing Method:**
+```typescript
+// Example test for ProfileImageCache
+test('should return cached image for known pubkey', async () => {
+ const pubkey = 'known-test-pubkey';
+ const cachedUri = await profileImageCache.getProfileImageUri(pubkey);
+ expect(cachedUri).not.toBeUndefined();
+
+ // Verify it's a file URI pointing to the cache directory
+ expect(cachedUri).toContain(FileSystem.cacheDirectory);
+});
+```
+
+### 2. Publication Queue Testing
+
+**Test Cases:**
+
+1. **Queue Storage**: Verify events are properly stored when created offline
+2. **Auto-Publishing**: Confirm queued events are published when connectivity is restored
+3. **Retry Mechanism**: Test that failed publications are retried
+4. **Queue Management**: Ensure the queue is properly maintained (events removed after successful publishing)
+5. **Priority Handling**: Verify high-priority events are published first
+
+**Testing Method:**
+```typescript
+// Example test for PublicationQueueService
+test('should queue event when offline and publish when online', async () => {
+ // Force offline mode
+ ConnectivityService.getInstance().overrideNetworkStatus(false);
+
+ // Create and queue event
+ const event = await publicationQueueService.createAndQueueEvent(1, 'test content', []);
+ expect(await publicationQueueService.getQueuedEventCount()).toBe(1);
+
+ // Restore online mode
+ ConnectivityService.getInstance().overrideNetworkStatus(true);
+
+ // Trigger sync and wait for completion
+ await publicationQueueService.syncQueuedEvents();
+
+ // Verify queue is empty after publishing
+ expect(await publicationQueueService.getQueuedEventCount()).toBe(0);
+});
+```
+
+### 3. Social Feed Cache Testing
+
+**Test Cases:**
+
+1. **Cache Storage**: Verify feed events are properly cached
+2. **Feed Types**: Test caching for different feed types (following, POWR, global)
+3. **Pagination**: Ensure cached feeds support pagination
+4. **Offline Browsing**: Confirm users can browse cached feeds when offline
+5. **Cache Refresh**: Test that feeds are refreshed when online
+
+**Testing Method:**
+```typescript
+// Example test for SocialFeedCache
+test('should return cached events when offline', async () => {
+ // Populate cache with known events
+ await socialFeedCache.cacheEvents('following', mockEvents);
+
+ // Force offline mode
+ ConnectivityService.getInstance().overrideNetworkStatus(false);
+
+ // Retrieve cached events
+ const cachedEvents = await socialFeedCache.getCachedEvents('following', 10);
+
+ // Verify events match
+ expect(cachedEvents.length).toBe(mockEvents.length);
+ expect(cachedEvents[0].id).toBe(mockEvents[0].id);
+});
+```
+
+### 4. Workout History Testing
+
+**Test Cases:**
+
+1. **Local Storage**: Verify workouts are stored locally
+2. **Nostr Sync**: Test synchronization with Nostr when online
+3. **Offline Creation**: Confirm workouts can be created and viewed offline
+4. **Conflict Resolution**: Test handling of conflicts between local and remote workouts
+5. **Data Integrity**: Ensure all workout data is preserved correctly
+
+**Testing Method:**
+```typescript
+// Example test for UnifiedWorkoutHistoryService
+test('should store workout locally and sync to Nostr when online', async () => {
+ // Force offline mode
+ ConnectivityService.getInstance().overrideNetworkStatus(false);
+
+ // Create workout offline
+ const workout = await workoutHistoryService.createWorkout(mockWorkoutData);
+
+ // Verify it's in local storage
+ const localWorkout = await workoutHistoryService.getWorkoutById(workout.id);
+ expect(localWorkout).not.toBeNull();
+
+ // Restore online mode
+ ConnectivityService.getInstance().overrideNetworkStatus(true);
+
+ // Trigger sync
+ await workoutHistoryService.syncWorkouts();
+
+ // Verify workout was published to Nostr
+ const nostrWorkout = await nostrWorkoutService.getWorkoutById(workout.id);
+ expect(nostrWorkout).not.toBeNull();
+});
+```
+
+### 5. Exercise Library Testing
+
+**Test Cases:**
+
+1. **Local Cache**: Verify exercises are cached locally
+2. **Offline Access**: Confirm exercises can be browsed offline
+3. **Cache Updates**: Test that the cache is updated when online
+4. **Search & Filter**: Ensure search and filtering work with cached data
+5. **Custom Exercises**: Test creation and storage of custom exercises
+
+**Testing Method:**
+```typescript
+// Example test for ExerciseService
+test('should provide exercises when offline', async () => {
+ // Populate cache with exercises
+ await exerciseService.cacheExercises(mockExercises);
+
+ // Force offline mode
+ ConnectivityService.getInstance().overrideNetworkStatus(false);
+
+ // Retrieve exercises
+ const exercises = await exerciseService.getExercises();
+
+ // Verify exercises are available
+ expect(exercises.length).toBeGreaterThan(0);
+ expect(exercises[0].name).toBe(mockExercises[0].name);
+});
+```
+
+### 6. Workout Templates Testing
+
+**Test Cases:**
+
+1. **Template Cache**: Verify templates are cached locally
+2. **Offline Access**: Confirm templates can be used offline
+3. **Favorites**: Test that favorite templates are prioritized for offline access
+4. **Template Updates**: Ensure templates are updated when online
+5. **Template Creation**: Test creation and storage of new templates offline
+
+**Testing Method:**
+```typescript
+// Example test for TemplateService
+test('should allow template creation when offline', async () => {
+ // Force offline mode
+ ConnectivityService.getInstance().overrideNetworkStatus(false);
+
+ // Create template
+ const template = await templateService.createTemplate(mockTemplateData);
+
+ // Verify it's in local storage
+ const localTemplate = await templateService.getTemplateById(template.id);
+ expect(localTemplate).not.toBeNull();
+ expect(localTemplate.title).toBe(mockTemplateData.title);
+});
+```
+
+### 7. Contact List Testing
+
+**Test Cases:**
+
+1. **Contact Cache**: Verify contacts are cached locally
+2. **Offline Access**: Confirm contact list is available offline
+3. **Contact Updates**: Test that contacts are updated when online
+4. **Following Feed**: Ensure following feed works with cached contacts
+5. **Profile Display**: Test profile display with cached contact data
+
+**Testing Method:**
+```typescript
+// Example test for contact list caching
+test('should provide contacts when offline', async () => {
+ // Cache contacts
+ await contactListService.cacheContacts(mockContacts);
+
+ // Force offline mode
+ ConnectivityService.getInstance().overrideNetworkStatus(false);
+
+ // Retrieve contacts
+ const contacts = await contactListService.getContacts();
+
+ // Verify contacts are available
+ expect(contacts.length).toBe(mockContacts.length);
+});
+```
+
+### 8. General Media Cache Testing
+
+**Test Cases:**
+
+1. **Media Storage**: Verify media files are cached correctly
+2. **Cache Limits**: Test that cache size limits are enforced
+3. **LRU Eviction**: Ensure least recently used media is evicted when cache is full
+4. **Offline Access**: Confirm cached media is available offline
+5. **Media Types**: Test caching of different media types (images, videos, etc.)
+
+**Testing Method:**
+```typescript
+// Example test for general media cache
+test('should cache and retrieve media files', async () => {
+ // Cache media
+ const mediaUri = 'https://example.com/test-image.jpg';
+ const cachedUri = await mediaCacheService.cacheMedia(mediaUri);
+
+ // Verify it's cached
+ expect(cachedUri).toContain(FileSystem.cacheDirectory);
+
+ // Force offline mode
+ ConnectivityService.getInstance().overrideNetworkStatus(false);
+
+ // Retrieve cached media
+ const retrievedUri = await mediaCacheService.getMedia(mediaUri);
+
+ // Verify it's the same cached URI
+ expect(retrievedUri).toBe(cachedUri);
+});
+```
+
+## Integration Testing
+
+### UI Component Integration
+
+Test that UI components correctly integrate with cache services:
+
+1. **Feed Components**: Verify feed components display cached content
+2. **Profile Components**: Test profile components with cached profile data
+3. **Exercise Library**: Ensure exercise library uses cached exercises
+4. **Workout History**: Test workout history display with cached workouts
+5. **Templates**: Verify template selection with cached templates
+
+### Offline Mode UI
+
+Test the UI adaptations for offline mode:
+
+1. **Offline Indicators**: Verify offline indicators are displayed correctly
+2. **Disabled Actions**: Test that network-dependent actions are properly disabled
+3. **Error Messages**: Ensure appropriate error messages are shown for unavailable features
+4. **Queued Actions**: Verify UI feedback for queued actions
+
+## Performance Testing
+
+Measure the performance impact of caching:
+
+1. **Load Times**: Compare load times with and without cache
+2. **Network Usage**: Measure reduction in network requests
+3. **Memory Usage**: Monitor memory consumption of the cache
+4. **Battery Impact**: Assess battery usage with different caching strategies
+5. **Storage Usage**: Measure storage space used by the cache
+
+## Edge Case Testing
+
+Test unusual scenarios and error conditions:
+
+1. **Intermittent Connectivity**: Test behavior with rapidly changing connectivity
+2. **Storage Limits**: Test behavior when device storage is nearly full
+3. **Cache Corruption**: Test recovery from corrupted cache data
+4. **Version Upgrades**: Verify cache behavior during app version upgrades
+5. **Multiple Devices**: Test synchronization across multiple devices
+
+## Automated Testing
+
+Implement automated tests for continuous validation:
+
+1. **Unit Tests**: Automated tests for individual cache services
+2. **Integration Tests**: Automated tests for cache-UI integration
+3. **E2E Tests**: End-to-end tests for offline scenarios
+4. **Performance Benchmarks**: Automated performance measurements
+5. **CI/CD Integration**: Include cache tests in continuous integration pipeline
+
+## Manual Testing Checklist
+
+A checklist for manual testing of cache functionality:
+
+- [ ] Verify all features work normally when online
+- [ ] Enable airplane mode and verify offline functionality
+- [ ] Create content offline and verify it's queued
+- [ ] Restore connectivity and verify queued content is published
+- [ ] Verify cached images display correctly offline
+- [ ] Test offline access to exercise library
+- [ ] Verify workout templates are available offline
+- [ ] Test offline workout creation and history
+- [ ] Verify offline browsing of social feeds
+- [ ] Test behavior with low storage conditions
+- [ ] Verify cache is properly maintained over time
+
+## Conclusion
+
+Thorough testing of the cache implementation is essential to ensure a reliable offline experience for POWR app users. By following this testing guide, you can verify that all cache components function correctly in isolation and together, providing a seamless experience regardless of connectivity status.
diff --git a/lib/db/services/EventCache.ts b/lib/db/services/EventCache.ts
index 6d71551..280d482 100644
--- a/lib/db/services/EventCache.ts
+++ b/lib/db/services/EventCache.ts
@@ -71,6 +71,65 @@ export class EventCache {
}
}
+ /**
+ * Store a Nostr event in the cache without using a transaction
+ * This is used when the caller is already managing a transaction
+ */
+ async setEventWithoutTransaction(event: NostrEvent, skipExisting: boolean = false): Promise {
+ if (!event.id) return;
+
+ try {
+ // Check if event already exists
+ if (skipExisting) {
+ const exists = await this.db.getFirstAsync<{ id: string }>(
+ 'SELECT id FROM nostr_events WHERE id = ?',
+ [event.id]
+ );
+
+ if (exists) return;
+ }
+
+ // Store the event without a transaction
+ await this.db.runAsync(
+ `INSERT OR REPLACE INTO nostr_events
+ (id, pubkey, kind, created_at, content, sig, raw_event, received_at)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
+ [
+ event.id,
+ event.pubkey || '',
+ event.kind,
+ event.created_at,
+ event.content,
+ event.sig || '',
+ JSON.stringify(event),
+ Date.now()
+ ]
+ );
+
+ // Delete existing tags
+ await this.db.runAsync(
+ 'DELETE FROM event_tags WHERE event_id = ?',
+ [event.id]
+ );
+
+ // Insert new tags
+ if (event.tags && event.tags.length > 0) {
+ for (let i = 0; i < event.tags.length; i++) {
+ const tag = event.tags[i];
+ if (tag.length >= 2) {
+ await this.db.runAsync(
+ 'INSERT INTO event_tags (event_id, name, value, index_num) VALUES (?, ?, ?, ?)',
+ [event.id, tag[0], tag[1], i]
+ );
+ }
+ }
+ }
+ } catch (error) {
+ console.error('Error caching event without transaction:', error);
+ throw error;
+ }
+ }
+
/**
* Get an event from the cache by ID
*/
@@ -118,4 +177,4 @@ export class EventCache {
return null;
}
}
-}
\ No newline at end of file
+}
diff --git a/lib/db/services/ProfileImageCache.ts b/lib/db/services/ProfileImageCache.ts
new file mode 100644
index 0000000..8a56b90
--- /dev/null
+++ b/lib/db/services/ProfileImageCache.ts
@@ -0,0 +1,232 @@
+import * as FileSystem from 'expo-file-system';
+import NDK, { NDKUser, NDKSubscriptionCacheUsage } from '@nostr-dev-kit/ndk-mobile';
+import * as Crypto from 'expo-crypto';
+
+/**
+ * Service for caching profile images
+ * This service downloads and caches profile images locally,
+ * providing offline access and reducing network usage
+ */
+export class ProfileImageCache {
+ private cacheDirectory: string;
+ private ndk: NDK | null = null;
+
+ constructor() {
+ this.cacheDirectory = `${FileSystem.cacheDirectory}profile-images/`;
+ this.ensureCacheDirectoryExists();
+ }
+
+ /**
+ * Set the NDK instance for profile fetching
+ * @param ndk NDK instance
+ */
+ setNDK(ndk: NDK) {
+ this.ndk = ndk;
+ }
+
+ /**
+ * Ensure the cache directory exists
+ * @private
+ */
+ private async ensureCacheDirectoryExists() {
+ try {
+ const dirInfo = await FileSystem.getInfoAsync(this.cacheDirectory);
+ if (!dirInfo.exists) {
+ await FileSystem.makeDirectoryAsync(this.cacheDirectory, { intermediates: true });
+ console.log(`Created profile image cache directory: ${this.cacheDirectory}`);
+ }
+ } catch (error) {
+ console.error('Error creating cache directory:', error);
+ }
+ }
+
+ /**
+ * Extract pubkey from a profile image URI
+ * @param uri Profile image URI
+ * @returns Pubkey if found, undefined otherwise
+ */
+ extractPubkeyFromUri(uri?: string): string | undefined {
+ if (!uri) return undefined;
+
+ // Try to extract pubkey from nostr: URI
+ if (uri.startsWith('nostr:')) {
+ const match = uri.match(/nostr:pubkey:([a-f0-9]{64})/i);
+ if (match && match[1]) {
+ return match[1];
+ }
+ }
+
+ // Try to extract from URL parameters
+ try {
+ const url = new URL(uri);
+ const pubkey = url.searchParams.get('pubkey');
+ if (pubkey && pubkey.length === 64) {
+ return pubkey;
+ }
+ } catch (error) {
+ // Not a valid URL, continue
+ }
+
+ return undefined;
+ }
+
+ /**
+ * Get a cached profile image URI or download if needed
+ * @param pubkey User's public key
+ * @param fallbackUrl Fallback URL to use if no cached image is found
+ * @returns Promise with the cached image URI or fallback URL
+ */
+ async getProfileImageUri(pubkey?: string, fallbackUrl?: string): Promise {
+ try {
+ if (!pubkey) {
+ return fallbackUrl;
+ }
+
+ // Check if image exists in cache
+ const cachedPath = `${this.cacheDirectory}${pubkey}.jpg`;
+ const fileInfo = await FileSystem.getInfoAsync(cachedPath);
+
+ if (fileInfo.exists) {
+ // Check if cache is fresh (less than 24 hours old)
+ const stats = await FileSystem.getInfoAsync(cachedPath, { md5: false });
+ // Type assertion for modificationTime which might not be in the type definition
+ const modTime = (stats as any).modificationTime || 0;
+ const cacheAge = Date.now() - modTime * 1000;
+ const maxAge = 24 * 60 * 60 * 1000; // 24 hours
+
+ if (cacheAge < maxAge) {
+ console.log(`Using cached profile image for ${pubkey}`);
+ return cachedPath;
+ }
+ }
+
+ // If not in cache or stale, try to get from NDK
+ if (this.ndk) {
+ const user = new NDKUser({ pubkey });
+ user.ndk = this.ndk;
+
+ // Get profile from NDK cache first
+ try {
+ await user.fetchProfile({
+ cacheUsage: NDKSubscriptionCacheUsage.CACHE_FIRST
+ });
+ let imageUrl = user.profile?.image || user.profile?.picture || fallbackUrl;
+
+ if (imageUrl) {
+ try {
+ // Download and cache the image
+ console.log(`Downloading profile image for ${pubkey} from ${imageUrl}`);
+ const downloadResult = await FileSystem.downloadAsync(imageUrl, cachedPath);
+
+ // Verify the downloaded file exists and has content
+ if (downloadResult.status === 200) {
+ const fileInfo = await FileSystem.getInfoAsync(cachedPath);
+ if (fileInfo.exists && fileInfo.size > 0) {
+ console.log(`Successfully cached profile image for ${pubkey}`);
+ return cachedPath;
+ } else {
+ console.warn(`Downloaded image file is empty or missing: ${cachedPath}`);
+ // Delete the empty file
+ await FileSystem.deleteAsync(cachedPath, { idempotent: true });
+ return fallbackUrl;
+ }
+ } else {
+ console.warn(`Failed to download image from ${imageUrl}, status: ${downloadResult.status}`);
+ return fallbackUrl;
+ }
+ } catch (downloadError) {
+ console.warn(`Error downloading image from ${imageUrl}:`, downloadError);
+ // Clean up any partial downloads
+ try {
+ const fileInfo = await FileSystem.getInfoAsync(cachedPath);
+ if (fileInfo.exists) {
+ await FileSystem.deleteAsync(cachedPath, { idempotent: true });
+ }
+ } catch (cleanupError) {
+ console.error('Error cleaning up failed download:', cleanupError);
+ }
+ return fallbackUrl;
+ }
+ }
+ } catch (error) {
+ console.log('Could not fetch profile from cache:', error);
+ }
+
+ // If not in cache and no fallback, try network
+ if (!fallbackUrl) {
+ try {
+ await user.fetchProfile({
+ cacheUsage: NDKSubscriptionCacheUsage.CACHE_FIRST
+ });
+ const imageUrl = user.profile?.image || user.profile?.picture;
+
+ if (imageUrl) {
+ // Download and cache the image
+ console.log(`Downloading profile image for ${pubkey} from ${imageUrl}`);
+ await FileSystem.downloadAsync(imageUrl, cachedPath);
+ return cachedPath;
+ }
+ } catch (error) {
+ console.error('Error fetching profile from network:', error);
+ }
+ }
+ }
+
+ // Return fallback URL if provided and nothing in cache
+ return fallbackUrl;
+ } catch (error) {
+ console.error('Error getting profile image:', error);
+ return fallbackUrl;
+ }
+ }
+
+ /**
+ * Clear old cached images
+ * @param maxAgeDays Maximum age in days (default: 7)
+ * @returns Promise that resolves when clearing is complete
+ */
+ async clearOldCache(maxAgeDays: number = 7): Promise {
+ try {
+ const files = await FileSystem.readDirectoryAsync(this.cacheDirectory);
+ const maxAgeMs = maxAgeDays * 24 * 60 * 60 * 1000;
+ const now = Date.now();
+ let clearedCount = 0;
+
+ for (const file of files) {
+ const filePath = `${this.cacheDirectory}${file}`;
+ const fileInfo = await FileSystem.getInfoAsync(filePath);
+
+ if (fileInfo.exists) {
+ // Type assertion for modificationTime
+ const modTime = (fileInfo as any).modificationTime || 0;
+ const fileAge = now - modTime * 1000;
+ if (fileAge > maxAgeMs) {
+ await FileSystem.deleteAsync(filePath);
+ clearedCount++;
+ }
+ }
+ }
+
+ console.log(`Cleared ${clearedCount} old profile images from cache`);
+ } catch (error) {
+ console.error('Error clearing old cache:', error);
+ }
+ }
+
+ /**
+ * Clear the entire cache
+ * @returns Promise that resolves when clearing is complete
+ */
+ async clearCache(): Promise {
+ try {
+ await FileSystem.deleteAsync(this.cacheDirectory, { idempotent: true });
+ await this.ensureCacheDirectoryExists();
+ console.log('Profile image cache cleared');
+ } catch (error) {
+ console.error('Error clearing cache:', error);
+ }
+ }
+}
+
+// Create singleton instance
+export const profileImageCache = new ProfileImageCache();
diff --git a/lib/hooks/useFeedHooks.ts b/lib/hooks/useFeedHooks.ts
index 617c559..bcace20 100644
--- a/lib/hooks/useFeedHooks.ts
+++ b/lib/hooks/useFeedHooks.ts
@@ -1,12 +1,13 @@
// lib/hooks/useFeedHooks.ts
-import { useMemo, useCallback, useState, useEffect } from 'react';
-import { useNDKCurrentUser, useNDK } from '@/lib/hooks/useNDK';
import { nip19 } from 'nostr-tools';
-import { NDKFilter, NDKEvent, NDKSubscriptionCacheUsage } from '@nostr-dev-kit/ndk-mobile';
-import { useFeedEvents } from '@/lib/hooks/useFeedEvents';
-import { useFeedMonitor } from '@/lib/hooks/useFeedMonitor';
-import { FeedOptions, AnyFeedEntry } from '@/types/feed';
-import { POWR_EVENT_KINDS } from '@/types/nostr-workout';
+import { useMemo } from 'react';
+import { useSocialFeed } from './useSocialFeed';
+import { useNDKCurrentUser } from './useNDK';
+
+/**
+ * This file contains constants related to the POWR account.
+ * The feed implementation has been moved to useSocialFeed.ts.
+ */
// POWR official account pubkey
export const POWR_ACCOUNT_PUBKEY = 'npub1p0wer69rpkraqs02l5v8rutagfh6g9wxn2dgytkv44ysz7avt8nsusvpjk';
@@ -20,363 +21,29 @@ try {
} else {
POWR_PUBKEY_HEX = POWR_ACCOUNT_PUBKEY;
}
- console.log("Initialized POWR pubkey hex:", POWR_PUBKEY_HEX);
+ console.log("[useFeedHooks] Initialized POWR pubkey hex:", POWR_PUBKEY_HEX);
} catch (error) {
- console.error('Error decoding POWR account npub:', error);
+ console.error('[useFeedHooks] Error decoding POWR account npub:', error);
POWR_PUBKEY_HEX = '';
}
/**
- * Hook for the Following tab in the social feed
- * Shows content from authors the user follows
+ * @deprecated Use useSocialFeed from lib/hooks/useSocialFeed.ts instead.
+ * Example:
+ *
+ * // For POWR feed:
+ * const { feedItems, loading, refresh } = useSocialFeed({
+ * feedType: 'powr',
+ * authors: [POWR_PUBKEY_HEX]
+ * });
+ *
+ * // For Following feed:
+ * const { feedItems, loading, refresh } = useSocialFeed({
+ * feedType: 'following'
+ * });
+ *
+ * // For Global feed:
+ * const { feedItems, loading, refresh } = useSocialFeed({
+ * feedType: 'global'
+ * });
*/
-export function useFollowingFeed(options: FeedOptions = {}) {
- const { currentUser } = useNDKCurrentUser();
- const { ndk } = useNDK();
- const [followedUsers, setFollowedUsers] = useState([]);
- const [isLoadingContacts, setIsLoadingContacts] = useState(true);
-
- // Improved contact list fetching
- useEffect(() => {
- if (!ndk || !currentUser?.pubkey) {
- setIsLoadingContacts(false);
- return;
- }
-
- console.log("Fetching contact list for user:", currentUser.pubkey);
- setIsLoadingContacts(true);
-
- const fetchContactList = async () => {
- try {
- // Try multiple approaches for maximum reliability
- let contacts: string[] = [];
-
- // First try: Use NDK user's native follows
- if (currentUser.follows) {
- try {
- // Check if follows is an array, a Set, or a function
- if (Array.isArray(currentUser.follows)) {
- contacts = [...currentUser.follows];
- console.log(`Found ${contacts.length} contacts from array`);
- } else if (currentUser.follows instanceof Set) {
- contacts = Array.from(currentUser.follows);
- console.log(`Found ${contacts.length} contacts from Set`);
- } else if (typeof currentUser.follows === 'function') {
- // If it's a function, try to call it
- try {
- const followsResult = await currentUser.followSet();
- if (followsResult instanceof Set) {
- contacts = Array.from(followsResult);
- console.log(`Found ${contacts.length} contacts from followSet() function`);
- }
- } catch (err) {
- console.error("Error calling followSet():", err);
- }
- }
- } catch (err) {
- console.log("Error processing follows:", err);
- }
- }
-
- // Second try: Direct kind:3 fetch
- if (contacts.length === 0) {
- try {
- const contactEvents = await ndk.fetchEvents({
- kinds: [3],
- authors: [currentUser.pubkey],
- limit: 1
- }, {
- closeOnEose: true,
- cacheUsage: NDKSubscriptionCacheUsage.CACHE_FIRST
- });
-
- if (contactEvents.size > 0) {
- const contactEvent = Array.from(contactEvents)[0];
-
- const extracted = contactEvent.tags
- .filter(tag => tag[0] === 'p')
- .map(tag => tag[1]);
-
- if (extracted.length > 0) {
- console.log(`Found ${extracted.length} contacts via direct kind:3 fetch`);
- contacts = extracted;
- }
- }
- } catch (err) {
- console.error("Error fetching kind:3 events:", err);
- }
- }
-
- // If still no contacts found, try fetching any recent events and look for p-tags
- if (contacts.length === 0) {
- try {
- const userEvents = await ndk.fetchEvents({
- authors: [currentUser.pubkey],
- kinds: [1, 3, 7], // Notes, contacts, reactions
- limit: 10
- }, {
- closeOnEose: true,
- cacheUsage: NDKSubscriptionCacheUsage.CACHE_FIRST
- });
-
- // Collect all p-tags from recent events
- const mentions = new Set();
- for (const event of userEvents) {
- event.tags
- .filter(tag => tag[0] === 'p')
- .forEach(tag => mentions.add(tag[1]));
- }
-
- if (mentions.size > 0) {
- console.log(`Found ${mentions.size} potential contacts from recent events`);
- contacts = Array.from(mentions);
- }
- } catch (err) {
- console.error("Error fetching recent events:", err);
- }
- }
-
- // If all else fails and we recognize this user, use hardcoded values (for testing only)
- if (contacts.length === 0 && currentUser?.pubkey === "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21") {
- console.log("Using hardcoded follows for known user");
- contacts = [
- "3129509e23d3a6125e1451a5912dbe01099e151726c4766b44e1ecb8c846f506",
- "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52",
- "0c776e95521742beaf102523a8505c483e8c014ee0d3bd6457bb249034e5ff04",
- "2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884",
- "55127fc9e1c03c6b459a3bab72fdb99def1644c5f239bdd09f3e5fb401ed9b21"
- ];
- }
-
- // Always include self to ensure self-created content is visible
- if (currentUser.pubkey && !contacts.includes(currentUser.pubkey)) {
- contacts.push(currentUser.pubkey);
- }
-
- // Add POWR account to followed users if not already there
- if (POWR_PUBKEY_HEX && !contacts.includes(POWR_PUBKEY_HEX)) {
- contacts.push(POWR_PUBKEY_HEX);
- }
-
- console.log("Final contact list count:", contacts.length);
- setFollowedUsers(contacts);
- } catch (error) {
- console.error("Error fetching contact list:", error);
- } finally {
- setIsLoadingContacts(false);
- }
- };
-
- fetchContactList();
- }, [ndk, currentUser?.pubkey]);
-
- // Create filters with the correct follows
- const followingFilters = useMemo(() => {
- if (followedUsers.length === 0) {
- console.log("No users to follow, not creating filters");
- return [];
- }
-
- console.log("Creating filters for", followedUsers.length, "followed users");
- console.log("Sample follows:", followedUsers.slice(0, 3));
-
- return [
- {
- kinds: [1] as any[], // Social posts
- authors: followedUsers,
- '#t': ['workout', 'fitness', 'exercise', 'powr', 'gym'], // Only workout-related posts
- limit: 30
- },
- {
- kinds: [30023] as any[], // Articles
- authors: followedUsers,
- limit: 20
- },
- {
- kinds: [1301, 33401, 33402] as any[], // Workout-specific content
- authors: followedUsers,
- limit: 30
- }
- ];
- }, [followedUsers]);
-
- // Use feed events hook - only enable if we have follows
- const feed = useFeedEvents(
- followedUsers.length > 0 ? followingFilters : false,
- {
- subId: 'following-feed',
- enabled: followedUsers.length > 0,
- feedType: 'following',
- ...options
- }
- );
-
- // Feed monitor for auto-refresh
- const monitor = useFeedMonitor({
- onRefresh: async () => {
- return feed.resetFeed();
- }
- });
-
- return {
- ...feed,
- ...monitor,
- hasFollows: followedUsers.length > 0,
- followCount: followedUsers.length,
- followedUsers: followedUsers, // Make this available for debugging
- isLoadingContacts
- };
-}
-
-/**
- * Hook for the POWR tab in the social feed
- * Shows official POWR content and featured content
- */
-export function usePOWRFeed(options: FeedOptions = {}) {
- // Create filters for POWR content
- const powrFilters = useMemo(() => {
- if (!POWR_PUBKEY_HEX) return [];
-
- return [
- {
- kinds: [1, 30023, 30024] as any[], // Social posts and articles (including drafts)
- authors: [POWR_PUBKEY_HEX],
- limit: 25
- },
- {
- kinds: [1301, 33401, 33402] as any[], // Workout-specific content
- authors: [POWR_PUBKEY_HEX],
- limit: 25
- }
- ];
- }, []);
-
- // Filter function to ensure we don't show duplicates
- const filterPOWRContent = useCallback((entry: AnyFeedEntry) => {
- // Always show POWR content
- return true;
- }, []);
-
- // Use feed events hook
- const feed = useFeedEvents(
- POWR_PUBKEY_HEX ? powrFilters : false,
- {
- subId: 'powr-feed',
- feedType: 'powr',
- filterFn: filterPOWRContent,
- ...options
- }
- );
-
- // Feed monitor for auto-refresh
- const monitor = useFeedMonitor({
- onRefresh: async () => {
- return feed.resetFeed();
- }
- });
-
- return {
- ...feed,
- ...monitor
- };
-}
-
-/**
- * Hook for the Global tab in the social feed
- * Shows all workout-related content
- */
-/**
- * Hook for the user's own activity feed
- * Shows only the user's own posts and workouts
- */
-export function useUserActivityFeed(options: FeedOptions = {}) {
- const { currentUser } = useNDKCurrentUser();
- const { ndk } = useNDK();
-
- // Create filters for user's own content
- const userFilters = useMemo(() => {
- if (!currentUser?.pubkey) return [];
-
- return [
- {
- kinds: [1] as any[], // Social posts
- authors: [currentUser.pubkey],
- limit: 30
- },
- {
- kinds: [30023] as any[], // Articles
- authors: [currentUser.pubkey],
- limit: 20
- },
- {
- kinds: [1301, 33401, 33402] as any[], // Workout-specific content
- authors: [currentUser.pubkey],
- limit: 30
- }
- ];
- }, [currentUser?.pubkey]);
-
- // Use feed events hook
- const feed = useFeedEvents(
- currentUser?.pubkey ? userFilters : false,
- {
- subId: 'user-activity-feed',
- feedType: 'user-activity',
- ...options
- }
- );
-
- // Feed monitor for auto-refresh
- const monitor = useFeedMonitor({
- onRefresh: async () => {
- return feed.resetFeed();
- }
- });
-
- return {
- ...feed,
- ...monitor,
- hasContent: feed.entries.length > 0
- };
-}
-
-export function useGlobalFeed(options: FeedOptions = {}) {
- // Global filters - focus on workout content
- const globalFilters = useMemo(() => [
- {
- kinds: [1301] as any[], // Workout records
- limit: 20
- },
- {
- kinds: [1] as any[], // Social posts
- '#t': ['workout', 'fitness', 'powr', 'gym'], // With relevant tags
- limit: 20
- },
- {
- kinds: [33401, 33402] as any[], // Exercise templates and workout templates
- limit: 20
- }
- ], []);
-
- // Use feed events hook
- const feed = useFeedEvents(
- globalFilters,
- {
- subId: 'global-feed',
- feedType: 'global',
- ...options
- }
- );
-
- // Feed monitor for auto-refresh
- const monitor = useFeedMonitor({
- onRefresh: async () => {
- return feed.resetFeed();
- }
- });
-
- return {
- ...feed,
- ...monitor
- };
-}
diff --git a/lib/hooks/useSocialFeed.ts b/lib/hooks/useSocialFeed.ts
index ea622cc..aaf9b7f 100644
--- a/lib/hooks/useSocialFeed.ts
+++ b/lib/hooks/useSocialFeed.ts
@@ -93,76 +93,76 @@ export function useSocialFeed(
}
}, [ndk, db]);
- // Process event and add to feed
+ // Process event and add to feed with improved error handling
const processEvent = useCallback((event: NDKEvent) => {
- // Skip if we've seen this event before or event has no ID
- if (!event.id || seenEvents.current.has(event.id)) return;
-
- console.log(`Processing event ${event.id}, kind ${event.kind} from ${event.pubkey}`);
-
- // Check if this event is quoted by another event we've already seen
- // Skip unless it's from the POWR account (always show POWR content)
- if (
- quotedEvents.current.has(event.id) &&
- event.pubkey !== POWR_PUBKEY_HEX
- ) {
- console.log(`Event ${event.id} filtered out: quoted=${true}, pubkey=${event.pubkey}`);
- return;
- }
-
- // Track any events this quotes to avoid showing them separately
- if (event.kind === 1) {
- // Check e-tags (direct quotes)
- event.tags
- .filter(tag => tag[0] === 'e')
- .forEach(tag => {
- if (tag[1]) quotedEvents.current.add(tag[1]);
- });
-
- // Check a-tags (addressable events)
- event.tags
- .filter(tag => tag[0] === 'a')
- .forEach(tag => {
- const parts = tag[1]?.split(':');
- if (parts && parts.length >= 3) {
- const [kind, pubkey, identifier] = parts;
- // We track the identifier so we can match it with the d-tag
- // of addressable events (kinds 30023, 33401, 33402, etc.)
- if (pubkey && identifier) {
- quotedEvents.current.add(`${pubkey}:${identifier}`);
- }
- }
- });
-
- // Also check for quoted content using NIP-27 nostr: URI mentions
- if (event.content) {
- const nostrUriMatches = event.content.match(/nostr:(note1|nevent1|naddr1)[a-z0-9]+/g);
- if (nostrUriMatches) {
- nostrUriMatches.forEach(uri => {
- try {
- const decoded = nip19.decode(uri.replace('nostr:', ''));
- if (decoded.type === 'note' || decoded.type === 'nevent') {
- quotedEvents.current.add(decoded.data as string);
- } else if (decoded.type === 'naddr') {
- // For addressable content, add to tracking using pubkey:identifier format
- const data = decoded.data as any;
- quotedEvents.current.add(`${data.pubkey}:${data.identifier}`);
+ try {
+ // Skip if we've seen this event before or event has no ID
+ if (!event.id || seenEvents.current.has(event.id)) return;
+
+ console.log(`Processing event ${event.id}, kind ${event.kind} from ${event.pubkey}`);
+
+ // Check if this event is quoted by another event we've already seen
+ // Skip unless it's from the POWR account (always show POWR content)
+ if (
+ quotedEvents.current.has(event.id) &&
+ event.pubkey !== POWR_PUBKEY_HEX
+ ) {
+ console.log(`Event ${event.id} filtered out: quoted=${true}, pubkey=${event.pubkey}`);
+ return;
+ }
+
+ // Track any events this quotes to avoid showing them separately
+ if (event.kind === 1) {
+ // Check e-tags (direct quotes)
+ event.tags
+ .filter(tag => tag[0] === 'e')
+ .forEach(tag => {
+ if (tag[1]) quotedEvents.current.add(tag[1]);
+ });
+
+ // Check a-tags (addressable events)
+ event.tags
+ .filter(tag => tag[0] === 'a')
+ .forEach(tag => {
+ const parts = tag[1]?.split(':');
+ if (parts && parts.length >= 3) {
+ const [kind, pubkey, identifier] = parts;
+ // We track the identifier so we can match it with the d-tag
+ // of addressable events (kinds 30023, 33401, 33402, etc.)
+ if (pubkey && identifier) {
+ quotedEvents.current.add(`${pubkey}:${identifier}`);
}
- } catch (e) {
- // Ignore invalid nostr URIs
}
});
+
+ // Also check for quoted content using NIP-27 nostr: URI mentions
+ if (event.content) {
+ const nostrUriMatches = event.content.match(/nostr:(note1|nevent1|naddr1)[a-z0-9]+/g);
+ if (nostrUriMatches) {
+ nostrUriMatches.forEach(uri => {
+ try {
+ const decoded = nip19.decode(uri.replace('nostr:', ''));
+ if (decoded.type === 'note' || decoded.type === 'nevent') {
+ quotedEvents.current.add(decoded.data as string);
+ } else if (decoded.type === 'naddr') {
+ // For addressable content, add to tracking using pubkey:identifier format
+ const data = decoded.data as any;
+ quotedEvents.current.add(`${data.pubkey}:${data.identifier}`);
+ }
+ } catch (e) {
+ // Ignore invalid nostr URIs
+ }
+ });
+ }
}
}
- }
-
- // Mark as seen
- seenEvents.current.add(event.id);
-
- // Parse event based on kind
- let feedItem: FeedItem | null = null;
-
- try {
+
+ // Mark as seen
+ seenEvents.current.add(event.id);
+
+ // Parse event based on kind
+ let feedItem: FeedItem | null = null;
+
const timestamp = event.created_at || Math.floor(Date.now() / 1000);
switch (event.kind) {
@@ -197,69 +197,73 @@ export function useSocialFeed(
break;
case POWR_EVENT_KINDS.SOCIAL_POST: // 1
- // Parse social post
- const parsedSocialPost = parseSocialPost(event);
-
- feedItem = {
- id: event.id,
- type: 'social',
- originalEvent: event,
- parsedContent: parsedSocialPost,
- createdAt: timestamp
- };
-
- // If it has quoted content, resolve it asynchronously
- const quotedContent = parsedSocialPost.quotedContent;
- if (quotedContent && socialServiceRef.current) {
- socialServiceRef.current.getReferencedContent(quotedContent.id, quotedContent.kind)
- .then(referencedEvent => {
- if (!referencedEvent) return;
-
- // Parse the referenced event
- let resolvedContent: any = null;
-
- switch (referencedEvent.kind) {
- case POWR_EVENT_KINDS.WORKOUT_RECORD:
- resolvedContent = parseWorkoutRecord(referencedEvent);
- break;
- case POWR_EVENT_KINDS.EXERCISE_TEMPLATE:
- resolvedContent = parseExerciseTemplate(referencedEvent);
- break;
- case POWR_EVENT_KINDS.WORKOUT_TEMPLATE:
- resolvedContent = parseWorkoutTemplate(referencedEvent);
- break;
- case 30023:
- case 30024:
- resolvedContent = parseLongformContent(referencedEvent);
- break;
- }
-
- if (resolvedContent) {
- // Update the feed item with the referenced content
- setFeedItems(current => {
- return current.map(item => {
- if (item.id !== event.id) return item;
-
- // Add the resolved content to the social post
- const updatedContent = {
- ...(item.parsedContent as ParsedSocialPost),
- quotedContent: {
- ...quotedContent,
- resolved: resolvedContent
- }
- };
-
- return {
- ...item,
- parsedContent: updatedContent
- };
+ try {
+ // Parse social post
+ const parsedSocialPost = parseSocialPost(event);
+
+ feedItem = {
+ id: event.id,
+ type: 'social',
+ originalEvent: event,
+ parsedContent: parsedSocialPost,
+ createdAt: timestamp
+ };
+
+ // If it has quoted content, resolve it asynchronously
+ const quotedContent = parsedSocialPost.quotedContent;
+ if (quotedContent && socialServiceRef.current) {
+ socialServiceRef.current.getReferencedContent(quotedContent.id, quotedContent.kind)
+ .then(referencedEvent => {
+ if (!referencedEvent) return;
+
+ // Parse the referenced event
+ let resolvedContent: any = null;
+
+ switch (referencedEvent.kind) {
+ case POWR_EVENT_KINDS.WORKOUT_RECORD:
+ resolvedContent = parseWorkoutRecord(referencedEvent);
+ break;
+ case POWR_EVENT_KINDS.EXERCISE_TEMPLATE:
+ resolvedContent = parseExerciseTemplate(referencedEvent);
+ break;
+ case POWR_EVENT_KINDS.WORKOUT_TEMPLATE:
+ resolvedContent = parseWorkoutTemplate(referencedEvent);
+ break;
+ case 30023:
+ case 30024:
+ resolvedContent = parseLongformContent(referencedEvent);
+ break;
+ }
+
+ if (resolvedContent) {
+ // Update the feed item with the referenced content
+ setFeedItems(current => {
+ return current.map(item => {
+ if (item.id !== event.id) return item;
+
+ // Add the resolved content to the social post
+ const updatedContent = {
+ ...(item.parsedContent as ParsedSocialPost),
+ quotedContent: {
+ ...quotedContent,
+ resolved: resolvedContent
+ }
+ };
+
+ return {
+ ...item,
+ parsedContent: updatedContent
+ };
+ });
});
- });
- }
- })
- .catch(error => {
- console.error('Error fetching referenced content:', error);
- });
+ }
+ })
+ .catch(error => {
+ console.error('Error fetching referenced content:', error);
+ });
+ }
+ } catch (error) {
+ console.error('Error processing social post:', error);
}
break;
@@ -311,7 +315,7 @@ export function useSocialFeed(
}
}
} catch (error) {
- console.error('Error processing event:', error, event);
+ console.error('Error processing event:', error);
}
}, [oldestTimestamp, options.feedType]);
@@ -371,21 +375,27 @@ export function useSocialFeed(
}, [options.feedType, options.authors, options.kinds, options.limit, options.since, options.until]);
// Load feed data
- const loadFeed = useCallback(async () => {
+ const loadFeed = useCallback(async (forceRefresh = false) => {
if (!ndk) return;
- // Prevent rapid resubscriptions
- if (subscriptionCooldown.current) {
- console.log('[useSocialFeed] Subscription on cooldown, skipping');
+ // Prevent rapid resubscriptions unless forceRefresh is true
+ if (subscriptionCooldown.current && !forceRefresh) {
+ console.log('[useSocialFeed] Subscription on cooldown, skipping (use forceRefresh to override)');
return;
}
// Track subscription attempts to prevent infinite loops
- subscriptionAttempts.current += 1;
- if (subscriptionAttempts.current > maxSubscriptionAttempts) {
- console.error(`[useSocialFeed] Too many subscription attempts (${subscriptionAttempts.current}), giving up`);
- setLoading(false);
- return;
+ // Reset counter if this is a forced refresh
+ if (forceRefresh) {
+ subscriptionAttempts.current = 0;
+ console.log('[useSocialFeed] Force refresh requested, resetting attempt counter');
+ } else {
+ subscriptionAttempts.current += 1;
+ if (subscriptionAttempts.current > maxSubscriptionAttempts) {
+ console.error(`[useSocialFeed] Too many subscription attempts (${subscriptionAttempts.current}), giving up`);
+ setLoading(false);
+ return;
+ }
}
setLoading(true);
@@ -430,11 +440,11 @@ export function useSocialFeed(
console.log(`[useSocialFeed] Loading ${feedOptions.feedType} feed with authors:`, feedOptions.authors);
console.log(`[useSocialFeed] Time range: since=${new Date(feedOptions.since * 1000).toISOString()}, until=${feedOptions.until ? new Date(feedOptions.until * 1000).toISOString() : 'now'}`);
- // For following feed, ensure we have authors
+ // For following feed, log if we have no authors but continue with subscription
+ // The socialFeedService will use the POWR_PUBKEY_HEX as fallback
if (feedOptions.feedType === 'following' && (!feedOptions.authors || feedOptions.authors.length === 0)) {
- console.log('[useSocialFeed] Following feed with no authors, skipping subscription');
- setLoading(false);
- return;
+ console.log('[useSocialFeed] Following feed with no authors, continuing with fallback');
+ // We'll continue with the subscription and rely on the fallback in socialFeedService
}
// Build and validate filters before subscribing
@@ -542,8 +552,8 @@ export function useSocialFeed(
}, [ndk, options.feedType, options.limit, options.since, options.until, processEvent]);
// Refresh feed (clear events and reload)
- const refresh = useCallback(async () => {
- console.log(`Refreshing ${options.feedType} feed`);
+ const refresh = useCallback(async (forceRefresh = true) => {
+ console.log(`Refreshing ${options.feedType} feed (force=${forceRefresh})`);
setFeedItems([]);
seenEvents.current.clear();
quotedEvents.current.clear(); // Also reset quoted events
@@ -555,7 +565,8 @@ export function useSocialFeed(
setIsOffline(!isOnline);
if (isOnline) {
- await loadFeed();
+ // Pass forceRefresh to loadFeed to bypass cooldown if needed
+ await loadFeed(forceRefresh);
} else {
await loadCachedFeed();
}
diff --git a/lib/initNDK.ts b/lib/initNDK.ts
index 19f1170..1edac58 100644
--- a/lib/initNDK.ts
+++ b/lib/initNDK.ts
@@ -5,6 +5,7 @@ import * as SecureStore from 'expo-secure-store';
import { RelayService, DEFAULT_RELAYS } from '@/lib/db/services/RelayService';
import { extendNDK } from '@/types/ndk-extensions';
import { ConnectivityService } from '@/lib/db/services/ConnectivityService';
+import { profileImageCache } from '@/lib/db/services/ProfileImageCache';
// Connection timeout in milliseconds
const CONNECTION_TIMEOUT = 5000;
@@ -47,8 +48,9 @@ export async function initializeNDK() {
// Extend NDK with helper methods for better compatibility
ndk = extendNDK(ndk);
- // Set the NDK instance in the RelayService
+ // Set the NDK instance in services
relayService.setNDK(ndk);
+ profileImageCache.setNDK(ndk);
// Check network connectivity before attempting to connect
const connectivityService = ConnectivityService.getInstance();
diff --git a/lib/social/socialFeedService.ts b/lib/social/socialFeedService.ts
index b6e4902..7fc4a5f 100644
--- a/lib/social/socialFeedService.ts
+++ b/lib/social/socialFeedService.ts
@@ -57,7 +57,7 @@ export class SocialFeedService {
}
/**
- * Build filters for a feed subscription
+ * Build filters for a feed subscription with improved error handling
* @param options Filter options
* @returns NDK filter object or array of filters
*/
@@ -69,141 +69,187 @@ export class SocialFeedService {
authors?: string[];
kinds?: number[];
}): NDKFilter | NDKFilter[] {
- const { feedType, since, until, limit, authors, kinds } = options;
-
- // Default to events in the last 24 hours if no since provided
- const defaultSince = Math.floor(Date.now() / 1000) - 24 * 60 * 60;
-
- // Fitness-related tags for filtering
- const tagFilter = [
- 'workout', 'fitness', 'powr', '31days',
- 'crossfit', 'wod', 'gym', 'strength',
- 'cardio', 'training', 'exercise'
- ];
-
- // Determine which kinds to include
- const workoutKinds: number[] = [];
- const socialKinds: number[] = [];
-
- // Add workout-specific kinds (1301, 33401, 33402)
- if (!kinds || kinds.some(k => [1301, 33401, 33402].includes(k))) {
- [1301, 33401, 33402]
- .filter(k => !kinds || kinds.includes(k))
- .forEach(k => workoutKinds.push(k));
- }
-
- // Add social post kind (1) and article kind (30023)
- if (!kinds || kinds.includes(1)) {
- socialKinds.push(1);
- }
-
- if (!kinds || kinds.includes(30023)) {
- socialKinds.push(30023);
- }
-
- // Base filter properties
- const baseFilter: Record = {
- since: since || defaultSince,
- limit: limit || 30,
- };
-
- if (until) {
- baseFilter.until = until;
- }
-
- // Special handling for different feed types
- if (feedType === 'profile') {
- // Profile feed: Show all of a user's posts
- if (!Array.isArray(authors) || authors.length === 0) {
- console.error('[SocialFeedService] Profile feed requires authors');
- return { ...baseFilter, kinds: [] }; // Return empty filter if no authors
- }
+ try {
+ const { feedType, since, until, limit, authors, kinds } = options;
- // For profile feed, we create two filters:
- // 1. All workout-related kinds from the user
- // 2. Social posts and articles from the user (with or without tags)
- return [
- // Workout-related kinds (no tag filtering)
- {
- ...baseFilter,
- kinds: workoutKinds,
- authors: authors,
- },
- // Social posts and articles (no tag filtering for profile)
- {
- ...baseFilter,
- kinds: socialKinds,
- authors: authors,
- }
+ // Default to events in the last 24 hours if no since provided
+ const defaultSince = Math.floor(Date.now() / 1000) - 24 * 60 * 60;
+
+ // Fitness-related tags for filtering
+ const tagFilter = [
+ 'workout', 'fitness', 'powr', '31days',
+ 'crossfit', 'wod', 'gym', 'strength',
+ 'cardio', 'training', 'exercise'
];
- } else if (feedType === 'powr') {
- // POWR feed: Show all content from POWR account(s)
- if (!Array.isArray(authors) || authors.length === 0) {
- console.error('[SocialFeedService] POWR feed requires authors');
- return { ...baseFilter, kinds: [] }; // Return empty filter if no authors
+
+ // Determine which kinds to include
+ const workoutKinds: number[] = [];
+ const socialKinds: number[] = [];
+
+ // Add workout-specific kinds (1301, 33401, 33402)
+ if (!kinds || kinds.some(k => [1301, 33401, 33402].includes(k))) {
+ [1301, 33401, 33402]
+ .filter(k => !kinds || kinds.includes(k))
+ .forEach(k => workoutKinds.push(k));
}
- // For POWR feed, we don't apply tag filtering
- return {
- ...baseFilter,
- kinds: [...workoutKinds, ...socialKinds],
- authors: authors,
+ // Add social post kind (1) and article kind (30023)
+ if (!kinds || kinds.includes(1)) {
+ socialKinds.push(1);
+ }
+
+ if (!kinds || kinds.includes(30023)) {
+ socialKinds.push(30023);
+ }
+
+ // Base filter properties
+ const baseFilter: Record = {
+ since: since || defaultSince,
+ limit: limit || 30,
};
- } else if (feedType === 'following') {
- // Following feed: Show content from followed users
- if (!Array.isArray(authors) || authors.length === 0) {
- console.error('[SocialFeedService] Following feed requires authors');
- return { ...baseFilter, kinds: [] }; // Return empty filter if no authors
+
+ if (until) {
+ baseFilter.until = until;
}
- // For following feed, we create two filters:
- // 1. All workout-related kinds from followed users
- // 2. Social posts and articles from followed users with fitness tags
-
- // Log the authors to help with debugging
- console.log(`[SocialFeedService] Following feed with ${authors.length} authors:`,
- authors.length > 5 ? authors.slice(0, 5).join(', ') + '...' : authors.join(', '));
-
- // Always include POWR account in following feed
- let followingAuthors = [...authors];
- if (POWR_PUBKEY_HEX && !followingAuthors.includes(POWR_PUBKEY_HEX)) {
- followingAuthors.push(POWR_PUBKEY_HEX);
- console.log('[SocialFeedService] Added POWR account to following feed authors');
+ // Special handling for different feed types
+ if (feedType === 'profile') {
+ // Profile feed: Show all of a user's posts
+ if (!Array.isArray(authors) || authors.length === 0) {
+ console.error('[SocialFeedService] Profile feed requires authors');
+ return { ...baseFilter, kinds: [] }; // Return empty filter if no authors
+ }
+
+ // For profile feed, we create two filters:
+ // 1. All workout-related kinds from the user
+ // 2. Social posts and articles from the user (with or without tags)
+ return [
+ // Workout-related kinds (no tag filtering)
+ {
+ ...baseFilter,
+ kinds: workoutKinds,
+ authors: authors,
+ },
+ // Social posts and articles (no tag filtering for profile)
+ {
+ ...baseFilter,
+ kinds: socialKinds,
+ authors: authors,
+ }
+ ];
+ } else if (feedType === 'powr') {
+ // POWR feed: Show all content from POWR account(s)
+ if (!Array.isArray(authors) || authors.length === 0) {
+ console.error('[SocialFeedService] POWR feed requires authors');
+
+ // For POWR feed, if no authors provided, use the POWR_PUBKEY_HEX as fallback
+ if (POWR_PUBKEY_HEX) {
+ console.log('[SocialFeedService] Using POWR account as fallback for POWR feed');
+ const fallbackAuthors = [POWR_PUBKEY_HEX];
+ return {
+ ...baseFilter,
+ kinds: [...workoutKinds, ...socialKinds],
+ authors: fallbackAuthors,
+ };
+ } else {
+ return { ...baseFilter, kinds: [] }; // Return empty filter if no authors and no fallback
+ }
+ }
+
+ // For POWR feed, we don't apply tag filtering
+ return {
+ ...baseFilter,
+ kinds: [...workoutKinds, ...socialKinds],
+ authors: authors,
+ };
+ } else if (feedType === 'following') {
+ // Following feed: Show content from followed users
+ if (!Array.isArray(authors) || authors.length === 0) {
+ console.error('[SocialFeedService] Following feed requires authors');
+
+ // For following feed, if no authors provided, use the POWR_PUBKEY_HEX as fallback
+ // This ensures at least some content is shown
+ if (POWR_PUBKEY_HEX) {
+ console.log('[SocialFeedService] Using POWR account as fallback for Following feed');
+ const fallbackAuthors = [POWR_PUBKEY_HEX];
+
+ return [
+ // Workout-related kinds (no tag filtering)
+ {
+ ...baseFilter,
+ kinds: workoutKinds,
+ authors: fallbackAuthors,
+ },
+ // Social posts and articles (with tag filtering)
+ {
+ ...baseFilter,
+ kinds: socialKinds,
+ authors: fallbackAuthors,
+ '#t': tagFilter,
+ }
+ ];
+ } else {
+ return { ...baseFilter, kinds: [] }; // Return empty filter if no authors and no fallback
+ }
+ }
+
+ // For following feed, we create two filters:
+ // 1. All workout-related kinds from followed users
+ // 2. Social posts and articles from followed users with fitness tags
+
+ // Log the authors to help with debugging
+ console.log(`[SocialFeedService] Following feed with ${authors.length} authors:`,
+ authors.length > 5 ? authors.slice(0, 5).join(', ') + '...' : authors.join(', '));
+
+ // Always include POWR account in following feed
+ let followingAuthors = [...authors];
+ if (POWR_PUBKEY_HEX && !followingAuthors.includes(POWR_PUBKEY_HEX)) {
+ followingAuthors.push(POWR_PUBKEY_HEX);
+ console.log('[SocialFeedService] Added POWR account to following feed authors');
+ }
+
+ return [
+ // Workout-related kinds (no tag filtering)
+ {
+ ...baseFilter,
+ kinds: workoutKinds,
+ authors: followingAuthors,
+ },
+ // Social posts and articles (with tag filtering)
+ {
+ ...baseFilter,
+ kinds: socialKinds,
+ authors: followingAuthors,
+ '#t': tagFilter,
+ }
+ ];
+ } else {
+ // Global feed: Show content from anyone
+ // For global feed, we create two filters:
+ // 1. All workout-related kinds from anyone
+ // 2. Social posts and articles from anyone with fitness tags
+ return [
+ // Workout-related kinds (no tag filtering)
+ {
+ ...baseFilter,
+ kinds: workoutKinds,
+ },
+ // Social posts and articles (with tag filtering)
+ {
+ ...baseFilter,
+ kinds: socialKinds,
+ '#t': tagFilter,
+ }
+ ];
}
-
- return [
- // Workout-related kinds (no tag filtering)
- {
- ...baseFilter,
- kinds: workoutKinds,
- authors: followingAuthors,
- },
- // Social posts and articles (with tag filtering)
- {
- ...baseFilter,
- kinds: socialKinds,
- authors: followingAuthors,
- '#t': tagFilter,
- }
- ];
- } else {
- // Global feed: Show content from anyone
- // For global feed, we create two filters:
- // 1. All workout-related kinds from anyone
- // 2. Social posts and articles from anyone with fitness tags
- return [
- // Workout-related kinds (no tag filtering)
- {
- ...baseFilter,
- kinds: workoutKinds,
- },
- // Social posts and articles (with tag filtering)
- {
- ...baseFilter,
- kinds: socialKinds,
- '#t': tagFilter,
- }
- ];
+ } catch (error) {
+ console.error('[SocialFeedService] Error building filters:', error);
+ // Return a safe default filter that won't crash but also won't return much
+ return {
+ kinds: [1], // Just social posts
+ limit: 10,
+ since: Math.floor(Date.now() / 1000) - 24 * 60 * 60 // Last 24 hours
+ };
}
}
diff --git a/lib/stores/ndk.ts b/lib/stores/ndk.ts
index 012ab32..dcd17e2 100644
--- a/lib/stores/ndk.ts
+++ b/lib/stores/ndk.ts
@@ -104,6 +104,14 @@ export const useNDKStore = create((set, get) =>
});
await ndk.connect();
+
+ // Set NDK in services
+ const { profileImageCache } = require('@/lib/db/services/ProfileImageCache');
+ profileImageCache.setNDK(ndk);
+
+ // Note: SocialFeedCache initialization is now handled in the RelayInitializer component
+ // This avoids using React hooks outside of component context
+
set({ ndk, relayStatus });
// Check for saved private key
@@ -417,4 +425,4 @@ export function useNDKEvents() {
publishEvent: state.publishEvent,
fetchEventsByFilter: state.fetchEventsByFilter
}));
-}
\ No newline at end of file
+}