PageSourceSearch

https://www.blogsareback.com/_next/static/chunks/9777b6df489fd55b.js?dpl=dpl_2AoYzJN76fgCzbjZUujwxkzXrRk6

js blogsareback.com collected 2026-10-04 22:46:58 UTC 32,963 bytes, 1 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,790224,e=>{"use strict";function t(e,t,a){{let r=t?.code,o=t instanceof Error?t.message:String(t);"23505"===r||o.includes("already following")||o.includes("limit reached")||console.error(e,{errorMessage:o,errorCode:r,context:a})}}e.s(["logError",()=>t])},845694,300093,378746,e=>{"use strict";let t={fetch:!0,parse:!1,discover:!1};e.s(["DEFAULT_PROXY_CAPABILITIES",0,t],300093);var a=e.i(483476),r=e.i(206463);function o(e){if(null!=e)try{let t=e instanceof Date?e:new Date(e);if(isNaN(t.getTime()))return;return t.toISOString()}catch{return}}function i(e){return o(e)??new Date().toISOString()}let s={MAX_HASHES_PER_BLOG:500,STALE_RECORD_DAYS:90,CLEANUP_INTERVAL_MS:18e5,INITIAL_CLEANUP_DELAY_MS:5e3,LOG_PREFIX:"[Read Status Cleanup]"};e.s(["READ_STATUS_RETENTION_CONFIG",0,s],378746);class d{db=null;userId;constructor(e){this.userId=e}async getDB(){return this.db||(this.db=await (0,a.openLocalStorageDB)()),this.db}async getBlogs(e){let t=await this.getDB();
1return(await t.getAllFromIndex("blogs","by-userId",e)).map(e=>({id:e.id,blog_id:e.blog_id,user_id:e.userId,source:e.source,url:e.url,feed_url:e.feed_url,title:e.title,description:e.description,site_icon:e.site_icon,tags:e.tags,has_full_content:e.has_full_content,directory_blog_id:e.directory_blog_id,community_blog_id:e.community_blog_id,category:e.category,created_at:i(e.created_at),updated_at:i(e.updated_at),last_fetched_at:o(e.last_fetched_at),feed_status:e.feed_status,feed_error_count:e.feed_error_count,feed_last_error:e.feed_last_error,feed_last_error_at:o(e.feed_last_error_at),feed_last_success_at:o(e.feed_last_success_at),feed_paused_until:o(e.feed_paused_until),requires_proxy:e.requires_proxy,posts_require_proxy:e.posts_require_proxy,blocks_iframe:e.blocks_iframe,has_partial_archive:e.has_partial_archive||null,languages:e.languages}))}async getBlog(e,t,a){try{let r=await this.getDB(),s=await r.get("blogs",t);if(!s||s.userId!==e||s.source!==a)return null;return{id:s.id,blog_id:s.blog_id,user_id:s.userId,source:s.source,url:s.url,feed_url:s.feed_url,title:s.title,description:s.description,site_icon:s.site_icon,tags:s.tags,has_full_content:s.has_full_content,directory_blog_id:s.directory_blog_id,community_blog_id:s.community_blog_id,category:s.category,created_at:i(s.created_at),updated_at:i(s.updated_at),last_fetched_at:o(s.last_fetched_at),feed_status:s.feed_status,feed_error_count:s.feed_error_count,feed_last_error:s.feed_last_error,feed_last_error_at:o(s.feed_last_error_at),feed_last_success_at:o(s.feed_last_success_at),feed_paused_until:o(s.feed_paused_until),requires_proxy:s.requires_proxy,posts_require_proxy:s.posts_require_proxy,blocks_iframe:s.blocks_iframe,has_partial_archive:s.has_partial_archive||null,languages:s.languages}}catch(e){throw console.error("[IndexedDBAdapter] Error fetching blog:",e),e}}async addBlog(e,t){let r=await this.getDB(),o=Date.now(),i=(0,a.generateUuid)(),s={id:i,blog_id:i,userId:e,source:"custom",url:t.url,feed_url:t.feed_url,title:t.title,description:t.description,site_icon:t.site_icon,tags:t.tags||[],has_full_content:t.has_full_content||!1,languages:t.languages||[],created_at:o,updated_at:o,feed_status:"active",feed_error_count:0,requires_proxy:null,posts_require_proxy:null,blocks_iframe:null,has_partial_archive:null};return await r.add("blogs",s),{...s,user_id:e,created_at:new Date(o).toISOString(),updated_at:new Date(o).toISOString()}}async addBlogsBulk(e,t){if(0===t.length)return[];let r=await this.getDB(),o=Date.now(),i=[],s=new Set((await r.getAllFromIndex("blogs","by-u
1serId",e)).filter(e=>"custom"===e.source).map(e=>e.feed_url.toLowerCase())),d=r.transaction("blogs","readwrite");for(let r of t){if(s.has(r.feed_url.toLowerCase()))continue;let t=(0,a.generateUuid)(),l={id:t,blog_id:t,userId:e,source:"custom",url:r.url,feed_url:r.feed_url,title:r.title,description:r.description,site_icon:r.site_icon,tags:r.tags||[],has_full_content:r.has_full_content||!1,languages:r.languages||[],created_at:o,updated_at:o,feed_status:"active",feed_error_count:0,requires_proxy:r.requires_proxy??null,posts_require_proxy:r.posts_require_proxy??null,blocks_iframe:r.blocks_iframe??null,has_partial_archive:null};try{await d.store.add(l),s.add(r.feed_url.toLowerCase()),i.push({...l,user_id:e,created_at:new Date(o).toISOString(),updated_at:new Date(o).toISOString()})}catch(e){console.warn("[IndexedDBAdapter] Skipping duplicate blog:",r.feed_url)}}return await d.done,console.log(`[IndexedDBAdapter] Bulk added ${i.length} of ${t.length} blogs`),i}async deleteBlog(e,t,a){let r=await this.getDB(),o=await r.get("blogs",t);if(!o||o.userId!==e)throw Error("Blog not found or access denied");await r.delete("blogs",t)}async updateBlogTags(e,t,a,r){let o=await this.getDB(),i=await o.get("blogs",t);if(!i||i.userId!==e)throw Error("Blog not found or access denied");i.tags=a,i.updated_at=Date.now(),await o.put("blogs",i)}async updateBlogLastFetched(e,t,a){let r=await this.getDB(),o=await r.get("blogs",t);o&&o.userId===e&&(o.last_fetched_at=Date.now(),await r.put("blogs",o))}async followDirectoryBlog(e,t,a,r){let o=await this.getDB(),i=await o.get("directory_cache",t);if(!i&&r&&(i={id:t,feed_url:r.feed_url,title:r.title,description:r.description,url:r.url,site_icon:r.site_icon,has_full_content:r.has_full_content,tags:a,category:r.category,requires_proxy:r.requires_proxy,posts_require_proxy:r.posts_require_proxy,blocks_iframe:r.blocks_iframe,has_partial_archive:r.has_partial_archive,languages:r.languages||[],cached_at:Date.now()},await o.put("directory_cache",i)),!i)throw Error("Directory blog metadata not provided and not found in cache.");if(await this.isFollowingDirectoryBlog(e,t))throw Error("You are already following this blog");let s=Date.now(),d={id:t,blog_id:t,userId:e,source:"directory",url:i.url,feed_url:i.feed_url,title:i.title,description:i.description,site_icon:i.site_icon,tags:a,has_full_content:i.has_full_content,directory_blog_id:t,created_at:s,updated_at:s,category:i.category,requires_proxy:i.requires_proxy,posts_require_proxy:i.posts_require_proxy,blocks_iframe:i.blocks_iframe,has_partial_archive:i.has_partial_archive,languages:i.languages||[],feed_status:"active",feed_error_count:0};return await o.add("blogs",d),{...d,user_id:e,created_at:new Date(s).toISOString(),updated_at:new Date(s).toISOString()}}async unfollowDirectoryBlog(e,t){let a=await this.getDB(),r=(await a.getAllFromIndex("blogs","by-u
1serId",e)).find(e=>"directory"===e.source&&e.directory_blog_id===t);r&&await a.delete("blogs",r.id)}async isFollowingDirectoryBlog(e,t){let a=await this.getDB();return(await a.getAllFromIndex("blogs","by-userId",e)).some(e=>"directory"===e.source&&e.directory_blog_id===t)}async followCommunityBlog(e,t,a,r){let o=await this.getDB(),i=await o.get("community_cache",t);if(!i&&r&&(i={id:t,feed_url:r.feed_url,title:r.title,description:r.description,url:r.url,site_icon:r.site_icon,has_full_content:r.has_full_content,tags:a,category:r.category,requires_proxy:r.requires_proxy,posts_require_proxy:r.posts_require_proxy,blocks_iframe:r.blocks_iframe,has_partial_archive:r.has_partial_archive,languages:r.languages||[],cached_at:Date.now()},await o.put("community_cache",i)),!i)throw Error("Community blog metadata not provided and not found in cache.");if(await this.isFollowingCommunityBlog(e,t))throw Error("You are already following this blog");let s=Date.now(),d={id:t,blog_id:t,userId:e,source:"community",url:i.url,feed_url:i.feed_url,title:i.title,description:i.description,site_icon:i.site_icon,tags:a,has_full_content:i.has_full_content,community_blog_id:t,created_at:s,updated_at:s,category:i.category,requires_proxy:i.requires_proxy,posts_require_proxy:i.posts_require_proxy,blocks_iframe:i.blocks_iframe,has_partial_archive:i.has_partial_archive,languages:i.languages||[],feed_status:"active",feed_error_count:0};return await o.add("blogs",d),{...d,user_id:e,created_at:new Date(s).toISOString(),updated_at:new Date(s).toISOString()}}async unfollowCommunityBlog(e,t){let a=await this.getDB(),r=(await a.getAllFromIndex("blogs","by-u
1serId",e)).find(e=>"community"===e.source&&e.community_blog_id===t);r&&await a.delete("blogs",r.id)}async isFollowingCommunityBlog(e,t){let a=await this.getDB();return(await a.getAllFromIndex("blogs","by-userId",e)).some(e=>"community"===e.source&&e.community_blog_id===t)}async getFavoriteGuids(e){let t=await this.getDB();return new Set((await t.getAllFromIndex("favorites","by-userId",e)).map(e=>e.post_guid))}async getFavoritePosts(e){let t=await this.getDB(),a=await t.getAllFromIndex("favorites","by-userId",e);return a.sort((e,t)=>t.favorited_at-e.favorited_at),a.map(e=>({id:e.id,user_id:e.user_id,post_guid:e.post_guid,blog_id:e.blog_id,post_title:e.post_title,post_link:e.post_link,post_description:e.post_description,post_author:e.post_author,post_pub_date:e.post_pub_date,post_image:e.post_image,blog_title:e.blog_title,favorited_at:new Date(e.favorited_at).toISOString(),notes:e.notes,blog_source:e.blog_source}))}async addFavorite(e,t,r,o,i){let s=await this.getDB(),d=t.guid||t.link;if(await s.getFromIndex("favorites","by-u
1serId-postGuid",[e,d]))return;let l=Date.now();await s.add("favorites",{id:(0,a.generateUuid)(),user_id:e,post_guid:d,blog_id:r,post_title:t.title,post_link:t.link,post_description:t.description||null,post_author:t.author||null,post_pub_date:t.pubDate?.toISOString()||null,post_image:t.image||null,blog_title:o,favorited_at:l,notes:null,updated_at:l,blog_source:i})}async removeFavorite(e,t){let a=await this.getDB(),r=await a.getFromIndex("favorites","by-userId-postGuid",[e,t]);r&&await a.delete("favorites",r.id)}async updateFavoriteNote(e,t,a){let r=await this.getDB(),o=await r.getFromIndex("favorites","by-userId-postGuid",[e,t]);if(!o)throw Error("Favorite not found");o.notes=a,o.updated_at=Date.now(),await r.put("favorites",o)}async getReadPostGuids(e){let t=await this.getDB();return new Set((await t.getAllFromIndex("read_status","by-userId",e)).flatMap(e=>e.post_guids))}async getReadStatusByBlog(e){let t=await this.getDB(),a=await t.getAllFromIndex("read_status","by-userId",e),r=new Map;for(let e of a)r.set(e.blog_id,e.post_guids);return r}async markPostAsRead(e,t,o){let i=await this.getDB(),d=(0,r.hashGuid)(t),l=i.transaction("read_status","readwrite"),_=l.objectStore("read_status"),u=_.index("by-userId-blogId"),n=await u.get([e,o]);n?n.post_guids.includes(d)||(n.post_guids.push(d),n.post_guids.length>s.MAX_HASHES_PER_BLOG&&(n.post_guids=n.post_guids.slice(-s.MAX_HASHES_PER_BLOG)),n.updated_at=Date.now(),await _.put(n)):(n={id:(0,a.generateUuid)(),user_id:e,blog_id:o,post_guids:[d],updated_at:Date.now()},await _.add(n)),await l.done}async markPostAsUnread(e,t,a){let o=await this.getDB(),i=(0,r.hashGuid)(t);
1if(a){let t=await o.getFromIndex("read_status","by-userId-blogId",[e,a]);t&&(t.post_guids=t.post_guids.filter(e=>e!==i),t.updated_at=Date.now(),await o.put("read_status",t))}else for(let t of(await o.getAllFromIndex("read_status","by-userId",e)))if(t.post_guids.includes(i)){t.post_guids=t.post_guids.filter(e=>e!==i),t.updated_at=Date.now(),await o.put("read_status",t);break}}async markAllPostsAsRead(e,t,o){let i=await this.getDB(),d=o.map(e=>(0,r.hashGuid)(e)),l=i.transaction("read_status","readwrite"),_=l.objectStore("read_status"),u=_.index("by-userId-blogId"),n=await u.get([e,t]);if(n){let e=new Set(n.post_guids);d.forEach(t=>e.add(t)),n.post_guids=Array.from(e),n.post_guids.length>s.MAX_HASHES_PER_BLOG&&(n.post_guids=n.post_guids.slice(-s.MAX_HASHES_PER_BLOG)),n.updated_at=Date.now(),await _.put(n)}else n={id:(0,a.generateUuid)(),user_id:e,blog_id:t,post_guids:d,updated_at:Date.now()},await _.add(n);await l.done}async clearAllReadStatus(e){let t=await this.getDB();for(let a of(await t.getAllFromIndex("read_status","by-u
1serId",e)))await t.delete("read_status",a.id)}async getReadLaterGuids(e){let t=await this.getDB();return new Set((await t.getAllFromIndex("read_later","by-userId",e)).map(e=>e.post_guid))}async getReadLaterPosts(e){let t=await this.getDB(),a=await t.getAllFromIndex("read_later","by-userId",e);return a.sort((e,t)=>t.added_at-e.added_at),a.map(e=>({id:e.id,user_id:e.user_id,post_guid:e.post_guid,blog_id:e.blog_id,post_title:e.post_title,post_link:e.post_link,post_description:e.post_description,post_author:e.post_author,post_pub_date:e.post_pub_date,post_image:e.post_image,blog_title:e.blog_title,added_at:new Date(e.added_at).toISOString(),notes:e.notes,blog_source:e.blog_source}))}async addToReadLater(e,t,r,o,i){let s=await this.getDB(),d=t.guid||t.link;if(await s.getFromIndex("read_later","by-userId-postGuid",[e,d]))return;let l=Date.now();await s.add("read_later",{id:(0,a.generateUuid)(),user_id:e,post_guid:d,blog_id:r,post_title:t.title,post_link:t.link,post_description:t.description||null,post_author:t.author||null,post_pub_date:t.pubDate?.toISOString()||null,post_image:t.image||null,blog_title:o,added_at:l,notes:null,updated_at:l,blog_source:i})}async removeFromReadLater(e,t){let a=await this.getDB(),r=await a.getFromIndex("read_later","by-userId-postGuid",[e,t]);r&&await a.delete("read_later",r.id)}async getUserSettings(e){let t=await this.getDB(),a=await t.get("user_settings",e);return a?{id:a.id,user_id:a.user_id,max_posts_per_feed:a.max_posts_per_feed,max_days_back:a.max_days_back,min_posts_per_feed:a.min_posts_per_feed,url_routing_enabled:a.url_routing_enabled,use_directory_updates:a.use_directory_updates??!0,preferred_languages:a.preferred_languages??[],enable_language_filter_sidebar:a.enable_language_filter_sidebar??!1,created_at:new Date(a.created_at).toISOString(),updated_at:new Date(a.updated_at).toISOString()}:null}async updateUserSettings(e,t){let r=await this.getDB(),o=await r.get("user_settings",e);o||(o={id:(0,a.generateId)(),user_id:e,max_posts_per_feed:100,max_days_back:90,min_posts_per_feed:0,url_routing_enabled:!1,use_directory_updates:!0,created_at:Date.now(),updated_at:Date.now()});let{id:i,created_at:s,updated_at:d,user_id:l,..._}=t,u={...o,..._,user_id:e,updated_at:Date.now()};await r.put("user_settings",u)}async getHighlightRules(e){let t=await this.getDB();return(await t.getAllFromIndex("highlight_rules","by-userId",e)).map(e=>({id:e.id,user_id:e.user_id,type:e.type,type_value:e.type_value,style:e.style,color:e.color,unread_only:e.unread_only,hide_unread_bar:e.hide_unread_bar??!1,priority:e.priority,created_at:new Date(e.created_at).toISOString(),updated_at:new Date(e.updated_at).toISOString()}))}async upsertHighlightRule(e,t){let r=await this.getDB(),o=Date.now(),i=await r.getFromIndex("highlight_rules","by-userId-type-value",[e,t.type,t.type_value]);if(i){let e={...i,style:t.style,color:t.color,unread_only:t.unread_only??i.unread_only,hide_unread_bar:t.hide_unread_bar??i.hide_unread_bar??!1,priority:t.priority??i.priority,updated_at:o};return await r.put("highlight_rules",e),{id:e.id,user_id:e.user_id,type:e.type,type_value:e.type_value,style:e.style,color:e.color,unread_only:e.unread_only,hide_unread_bar:e.hide_unread_bar,priority:e.priority,created_at:new Date(e.created_at).toISOString(),updated_at:new Date(e.updated_at).toISOString()}}{let i={id:(0,a.generateUuid)(),user_id:e,type:t.type,type_value:t.type_value,style:t.style,color:t.color,unread_only:t.unread_only??!1,hide_unread_bar:t.hide_unread_bar??!1,priority:t.priority??0,created_at:o,updated_at:o};return await r.add("highlight_rules",i),{id:i.id,user_id:i.user_id,type:i.type,type_value:i.type_value,style:i.style,color:i.color,unread_only:i.unread_only,hide_unread_bar:i.hide_unread_bar,priority:i.priority,created_at:new Date(i.created_at).toISOString(),updated_at:new Date(i.updated_at).toISOString()}}}async deleteHighlightRule(e,t){let a=await this.getDB(),r=await a.get("highlight_rules",t);if(!r||r.user_id!==e)throw Error("Highlight rule not found or access denied");await a.delete("highlight_rules",t)}async deleteBlogByFeedUrl(e,t){let a=(await this.getDB()).transaction("blogs","readwrite"),r=a.store.index("by-feed-url"),o=await r.get(t);o&&o.userId===e&&"custom"===o.source&&(await a.store.delete(o.id),console.log(`[IndexedDBAdapter] Deleted blog by feed_url: ${t}`)),await a.done}async deleteDirectorySubscriptionByDirectoryBlogId(e,t){let a=(await this.getDB()).transaction("blogs","readwrite"),r=a.store.index("by-userId"),o=await r.openCursor(e);for(;o;){let e=o.value;if("directory"===e.source&&e.directory_blog_id===t){await o.delete(),console.log(`[IndexedDBAdapter] Deleted directory subscription: ${t}`);break}o=await o.continue()}await a.done}async deleteHighlightRuleByTypeValue(e,t){let a=t.indexOf(":");if(-1===a)return void console.warn("[IndexedDBAdapter] Invalid typeValue format:",t);let r=t.substring(0,a),o=t.substring(a+1);if(!r||!o)return void console.warn("[IndexedDBAdapter] Empty type or value in:",t);let i=(await this.getDB()).transaction("highlight_rules","readwrite"),s=i.store.index("by-userId"),d=await s.openCursor(e);for(;d;){let e=d.value;if(e.type===r&&e.type_value===o){await d.delete(),console.log(`[IndexedDBAdapter] Deleted highlight rule: ${t}`);break}d=await d.continue()}await i.done}async upsertBlogByFeedUrl(e,t){let a=(await this.getDB()).transaction("blogs","readwrite"),r=a.store.index("by-feed-url"),o=await r.get(t.feed_url),i=Date.now();if(o&&o.userId===e&&"custom"===o.source){let e={...o,url:t.url,t
1itle:t.title,description:t.description,site_icon:t.site_icon,tags:t.tags||o.tags,has_full_content:t.has_full_content??o.has_full_content,requires_proxy:t.requires_proxy??o.requires_proxy,posts_require_proxy:t.posts_require_proxy??o.posts_require_proxy,blocks_iframe:t.blocks_iframe??o.blocks_iframe,languages:t.languages??o.languages,updated_at:i};await a.store.put(e),console.log(`[IndexedDBAdapter] Updated blog by feed_url: ${t.feed_url}`)}else if(!o){let r={id:t.id,blog_id:t.id,userId:e,source:"custom",url:t.url,feed_url:t.feed_url,title:t.title,description:t.description,site_icon:t.site_icon,tags:t.tags||[],has_full_content:t.has_full_content||!1,requires_proxy:t.requires_proxy??null,posts_require_proxy:t.posts_require_proxy??null,blocks_iframe:t.blocks_iframe??null,languages:t.languages||[],created_at:i,updated_at:i,feed_status:"active",feed_error_count:0};await a.store.add(r),console.log(`[IndexedDBAdapter] Inserted blog by feed_url: ${t.feed_url}`)}await a.done}async upsertDirectorySubscriptionByDirectoryBlogId(e,t){let a=await this.getDB(),r=Date.now(),o=a.transaction("blogs","readwrite"),i=o.store.index("by-userId"),s=await i.openCursor(e),d=null;for(;s;){if("directory"===s.value.source&&s.value.directory_blog_id===t.directory_blog_id){d=s.value;break}s=await s.continue()}if(d){let e={...d,url:t.url,title:t.title,description:t.description,site_icon:t.site_icon,tags:t.tags||d.tags,has_full_content:t.has_full_content??d.has_full_content,category:t.category??d.category,requires_proxy:t.requires_proxy??d.requires_proxy,posts_require_proxy:t.posts_require_proxy??d.posts_require_proxy,blocks_iframe:t.blocks_iframe??d.blocks_iframe,languages:t.languages??d.languages,updated_at:r};await o.store.put(e),console.log(`[IndexedDBAdapter] Updated directory subscription: ${t.directory_blog_id}`)}else{let a={id:t.directory_blog_id||t.id,blog_id:t.directory_blog_id||t.id,userId:e,source:"directory",url:t.url,feed_url:t.feed_url,title:t.title,description:t.description,site_icon:t.site_icon,tags:t.tags||[],has_full_content:t.has_full_content||!1,directory_blog_id:t.directory_blog_id,category:t.category,requires_proxy:t.requires_proxy??null,posts_require_proxy:t.posts_require_proxy??null,blocks_iframe:t.blocks_iframe??null,languages:t.languages||[],created_at:r,updated_at:r,feed_status:"active",feed_error_count:0};await o.store.add(a),console.log(`[IndexedDBAdapter] Inserted directory subscription: ${t.directory_blog_id}`)}await o.done}async deleteCommunitySubscriptionByCommunityBlogId(e,t){let a=(await this.getDB()).transaction("blogs","readwrite"),r=a.store.index("by-userId"),o=await r.openCursor(e);for(;o;){let e=o.value;if("community"===e.source&&e.community_blog_id===t){await o.delete(),console.log(`[IndexedDBAdapter] Deleted community subscription: ${t}`);break}o=await o.continue()}await a.done}async upsertCommunitySubscriptionByCommunityBlogId(e,t){let a=await this.getDB(),r=Date.now(),o=a.transaction("blogs","readwrite"),i=o.store.index("by-userId"),s=await i.openCursor(e),d=null;for(;s;){if("community"===s.value.source&&s.value.community_blog_id===t.community_blog_id){d=s.value;break}s=await s.continue()}if(d){let e={...d,url:t.url,title:t.title,description:t.description,site_icon:t.site_icon,tags:t.tags||d.tags,has_full_content:t.has_full_content??d.has_full_content,category:t.category??d.category,requires_proxy:t.requires_proxy??d.requires_proxy,posts_require_proxy:t.posts_require_proxy??d.posts_require_proxy,blocks_iframe:t.blocks_iframe??d.blocks_iframe,has_partial_archive:t.has_partial_archive??d.has_partial_archive,languages:t.languages??d.languages,updated_at:r};await o.store.put(e),console.log(`[IndexedDBAdapter] Updated community subscription: ${t.community_blog_id}`)}else{let a={id:t.community_blog_id||t.id,blog_id:t.community_blog_id||t.id,userId:e,source:"community",url:t.url,feed_url:t.feed_url,title:t.title,description:t.description,site_icon:t.site_icon,tags:t.tags||[],has_full_content:t.has_full_content||!1,community_blog_id:t.community_blog_id,category:t.category,requires_proxy:t.requires_proxy??null,posts_require_proxy:t.posts_require_proxy??null,blocks_iframe:t.blocks_iframe??null,has_partial_archive:t.has_partial_archive??null,languages:t.languages||[],created_at:r,updated_at:r,feed_status:"active",feed_error_count:0};await o.store.add(a),console.log(`[IndexedDBAdapter] Inserted community subscription: ${t.community_blog_id}`)}await o.done}async upsertFavoriteByPostGuid(t,a){let r=await this.getDB(),o=Date.now(),i=await r.getFromIndex("favorites","by-u
1serId-postGuid",[t,a.post_guid]);if(i){let e={...i,post_title:a.post_title||i.post_title,post_link:a.post_link||i.post_link,post_description:a.post_description??i.post_description,post_author:a.post_author??i.post_author,post_pub_date:a.post_pub_date??i.post_pub_date,post_image:a.post_image??i.post_image,blog_title:a.blog_title||i.blog_title,notes:a.notes??i.notes,blog_source:a.blog_source??i.blog_source,updated_at:o};await r.put("favorites",e),console.log(`[IndexedDBAdapter] Updated favorite: ${a.post_guid}`)}else{let i={id:a.id||(await e.A(438079)).generateUuid(),user_id:t,post_guid:a.post_guid,blog_id:a.blog_id,post_title:a.post_title,post_link:a.post_link,post_description:a.post_description||null,post_author:a.post_author||null,post_pub_date:a.post_pub_date||null,post_image:a.post_image||null,blog_title:a.blog_title,favorited_at:a.favorited_at?new Date(a.favorited_at).getTime():o,notes:a.notes||null,blog_source:a.blog_source,updated_at:o};await r.add("favorites",i),console.log(`[IndexedDBAdapter] Inserted favorite: ${a.post_guid}`)}}async upsertReadLaterByPostGuid(t,a){let r=await this.getDB(),o=Date.now(),i=await r.getFromIndex("read_later","by-userId-postGuid",[t,a.post_guid]);if(i){let e={...i,post_title:a.post_title||i.post_title,post_link:a.post_link||i.post_link,post_description:a.post_description??i.post_description,post_author:a.post_author??i.post_author,post_pub_date:a.post_pub_date??i.post_pub_date,post_image:a.post_image??i.post_image,blog_title:a.blog_title||i.blog_title,notes:a.notes??i.notes,blog_source:a.blog_source??i.blog_source,updated_at:o};await r.put("read_later",e),console.log(`[IndexedDBAdapter] Updated read-later: ${a.post_guid}`)}else{let i={id:a.id||(await e.A(438079)).generateUuid(),user_id:t,post_guid:a.post_guid,blog_id:a.blog_id,post_title:a.post_title,post_link:a.post_link,post_description:a.post_description||null,post_author:a.post_author||null,post_pub_date:a.post_pub_date||null,post_image:a.post_image||null,blog_title:a.blog_title,added_at:a.added_at?new Date(a.added_at).getTime():o,notes:a.notes||null,blog_source:a.blog_source,updated_at:o};await r.add("read_later",i),console.log(`[IndexedDBAdapter] Inserted read-later: ${a.post_guid}`)}}async upsertHighlightRuleByTypeValue(t,a){let r=await this.getDB(),o=Date.now(),i=await r.getFromIndex("highlight_rules","by-userId-type-value",[t,a.type,a.type_value]);if(i){let e={...i,style:a.style,color:a.color,unread_only:a.unread_only??i.unread_only,hide_unread_bar:a.hide_unread_bar??i.hide_unread_bar,priority:a.priority??i.priority,updated_at:o};await r.put("highlight_rules",e),console.log(`[IndexedDBAdapter] Updated highlight rule: ${a.type}:${a.type_value}`)}else{let i={id:a.id||(await e.A(438079)).generateUuid(),user_id:t,type:a.type,type_value:a.type_value,style:a.style,color:a.color,unread_only:a.unread_only??!1,hide_unread_bar:a.hide_unread_bar??!1,priority:a.priority??0,created_at:o,updated_at:o};await r.add("highlight_rules",i),console.log(`[IndexedDBAdapter] Inserted highlight rule: ${a.type}:${a.type_value}`)}}async recordFeedError(e,t,a){let r=await this.getDB(),o=await r.get("blogs",t.id);o?o.userId!==e?console.warn("[IndexedDBAdapter] recordFeedError: Blog userId mismatch",{blogId:t.id,expected:e,actual:o.userId}):(o.feed_error_count=(o.feed_error_count||0)+1,o.feed_last_error=a,o.feed_last_error_at=Date.now(),o.updated_at=Date.now(),o.feed_error_count>=5&&(o.feed_status="error"),await r.put("blogs",o)):console.warn("[IndexedDBAdapter] recordFeedError: Blog not found in IndexedDB",{blogId:t.id,blogTitle:t.title})}async recordFeedSuccess(e,t){let a=await this.getDB(),r=await a.get("blogs",t.id);r?r.userId!==e?console.warn("[IndexedDBAdapter] recordFeedSuccess: Blog userId mismatch",{blogId:t.id,expected:e,actual:r.userId}):(r.feed_error_count=0,r.feed_last_error=void 0,r.feed_last_error_at=void 0,r.feed_last_success_at=Date.now(),r.feed_status="active",r.updated_at=Date.now(),await a.put("blogs",r)):console.warn("[IndexedDBAdapter] recordFeedSuccess: Blog not found in IndexedDB",{blogId:t.id,blogTitle:t.title})}async updateBlogProxyStatus(e,t,a){let r=await this.getDB(),o=await r.get("blogs",t.id);o?o.userId!==e?console.warn("[IndexedDBAdapter] updateBlogProxyStatus: Blog userId mismatch",{blogId:t.id,expected:e,actual:o.userId}):(o.requires_proxy=a,o.updated_at=Date.now(),await r.put("blogs",o)):console.warn("[IndexedDBAdapter] updateBlogProxyStatus: Blog not found",{blogId:t.id})}async updateBlogStatusValues(e,t,a,r){let o=await this.getDB(),i=await o.get("blogs",t);i?i.userId!==e?console.warn("[IndexedDBAdapter] updateBlogStatusValues: Blog userId mismatch",{blogId:t,expected:e,actual:i.userId}):i.source!==a?console.warn("[IndexedDBAdapter] updateBlogStatusValues: Blog source mismatch",{blogId:t,expected:a,actual:i.source}):(void 0!==r.requires_proxy&&(i.requires_proxy=r.requires_proxy),void 0!==r.has_full_content&&(i.has_full_content=r.has_full_content??!1),void 0!==r.posts_require_proxy&&(i.posts_require_proxy=r.posts_require_proxy),void 0!==r.blocks_iframe&&(i.blocks_iframe=r.blocks_iframe),void 0!==r.site_icon&&null!==r.site_icon&&(i.site_icon=r.site_icon),void 0!==r.title&&(i.title=r.title),void 0!==r.url&&(i.url=r.url),void 0!==r.feed_url&&(i.feed_url=r.feed_url),void 0!==r.description&&(i.description=r.description??void 0),void 0!==r.has_partial_archive&&(i.has_partial_archive=r.has_partial_archive),void 0!==r.languages&&(i.languages=r.languages),void 0!==r.category&&(i.category=r.category??void 0),i.updated_at=Date.now(),await o.put("blogs",i),console.log("[IndexedDBAdapter] Updated blog status values:",{blogId:t,values:r})):console.warn("[IndexedDBAdapter] updateBlogStatusValues: Blog not found",{blogId:t})}async pauseFeed(e,t,a){let r=await this.getDB(),o=await r.get("blogs",t.id);o?o.userId!==e?console.warn("[IndexedDBAdapter] pauseFeed: Blog userId mismatch",{blogId:t.id,expected:e,actual:o.userId}):(o.feed_status="paused",o.feed_paused_until=Date.now()+1e3*a,o.updated_at=Date.now(),await r.put("blogs",o)):console.warn("[IndexedDBAdapter] pauseFeed: Blog not found",{blogId:t.id})}async enableFeed(e,t){let a=await this.getDB(),r=await a.get("blogs",t.id);r?r.userId!==e?console.warn("[IndexedDBAdapter] enableFeed: Blog userId mismatch",{blogId:t.id,expected:e,actual:r.userId}):(r.feed_status="active",r.feed_paused_until=void 0,r.feed_error_count=0,r.feed_last_error=void 0,r.feed_last_error_at=void 0,r.updated_at=Date.now(),await a.put("blogs",r)):console.warn("[IndexedDBAdapter] enableFeed: Blog not found",{blogId:t.id})}async disableFeed(e,t){let a=await this.getDB(),r=await a.get("blogs",t.id);r?r.userId!==e?console.warn("[IndexedDBAdapter] disableFeed: Blog userId mismatch",{blogId:t.id,expected:e,actual:r.userId}):(r.feed_status="disabled",r.updated_at=Date.now(),await a.put("blogs",r)):console.warn("[IndexedDBAdapter] disableFeed: Blog not found",{blogId:t.id})}async getCustomProxyConfig(e){let t=await this.getDB(),a=await t.get("custom_proxy_config",e);return a?{user_id:a.user_id,proxy_url:a.proxy_url,api_key:a.api_key,is_enabled:a.is_enabled,mobile_only:a.mobile_only,use_for_directory_blogs:a.use_for_directory_blogs??!1,is_validated:a.is_validated,validated_at:a.validated_at?new Date(a.validated_at).toISOString():null,last_error:a.last_error,consecutive_failures:a.consecutive_failures,c
1apabilities:a.capabilities,provider:a.provider,version:a.version,created_at:new Date(a.created_at).toISOString(),updated_at:new Date(a.updated_at).toISOString()}:null}async saveCustomProxyConfig(e,a){let r=await this.getDB(),o=Date.now(),i=await r.get("custom_proxy_config",e),s={user_id:e,proxy_url:a.proxy_url,api_key:a.api_key??null,is_enabled:a.is_enabled??i?.is_enabled??!1,mobile_only:a.mobile_only??i?.mobile_only??!1,use_for_directory_blogs:a.use_for_directory_blogs??i?.use_for_directory_blogs??!1,is_validated:!!i&&i.proxy_url===a.proxy_url&&i.is_validated,validated_at:i&&i.proxy_url===a.proxy_url?i.validated_at:null,last_error:i?.last_error??null,consecutive_failures:i?.consecutive_failures??0,capabilities:i&&i.proxy_url===a.proxy_url?i.capabilities:t,provider:i&&i.proxy_url===a.proxy_url?i.provider:null,version:i&&i.proxy_url===a.proxy_url?i.version:null,created_at:i?.created_at??o,updated_at:o};return await r.put("custom_proxy_config",s),{...s,validated_at:s.validated_at?new Date(s.validated_at).toISOString():null,created_at:new Date(s.created_at).toISOString(),updated_at:new Date(s.updated_at).toISOString()}}async updateProxyValidation(e,t){let a=await this.getDB(),r=await a.get("custom_proxy_config",e);r?(r.is_validated=t.is_validated,r.capabilities=t.capabilities,r.provider=t.provider,r.version=t.version,r.validated_at=t.is_validated?Date.now():null,r.last_error=t.is_validated?null:r.last_error,r.consecutive_failures=t.is_validated?0:r.consecutive_failures,t.is_validated&&(r.is_enabled=!0),r.updated_at=Date.now(),await a.put("custom_proxy_config",r)):console.warn("[IndexedDBAdapter] updateProxyValidation: Config not found")}async toggleProxyEnabled(e,t){let a=await this.getDB(),r=await a.get("custom_proxy_config",e);r?(r.is_enabled=t,r.updated_at=Date.now(),await a.put("custom_proxy_config",r)):console.warn("[IndexedDBAdapter] toggleProxyEnabled: Config not found")}async toggleProxyMobileOnly(e,t){let a=await this.getDB(),r=await a.get("custom_proxy_config",e);r?(r.mobile_only=t,r.updated_at=Date.now(),await a.put("custom_proxy_config",r)):console.warn("[IndexedDBAdapter] toggleProxyMobileOnly: Config not found")}async toggleProxyUseForDirectoryBlogs(e,t){let a=await this.getDB(),r=await a.get("custom_proxy_config",e);r?(r.use_for_directory_blogs=t,r.updated_at=Date.now(),await a.put("custom_proxy_config",r)):console.warn("[IndexedDBAdapter] toggleProxyUseForDirectoryBlogs: Config not found")}async recordProxyError(e,t){let a=await this.getDB(),r=await a.get("custom_proxy_config",e);r?(r.last_error=t,r.consecutive_failures+=1,r.consecutive_failures>=5&&(r.is_validated=!1),r.updated_at=Date.now(),await a.put("custom_proxy_config",r)):console.warn("[IndexedDBAdapter] recordProxyError: Config not found")}async recordProxySuccess(e){let t=await this.getDB(),a=await t.get("custom_proxy_config",e);a?(a.consecutive_failures=0,a.updated_at=Date.now(),await t.put("custom_proxy_config",a)):console.warn("[IndexedDBAdapter] recordProxySuccess: Config not found")}async deleteCustomProxyConfig(e){let t=await this.getDB();await t.delete("custom_proxy_config",e)}async upsertCustomProxyConfig(e,t){let a=await this.getDB(),r={user_id:e,proxy_url:t.proxy_url,api_key:t.api_key,is_enabled:t.is_enabled,mobile_only:t.mobile_only,use_for_directory_blogs:t.use_for_directory_blogs??!1,is_validated:t.is_validated,validated_at:t.validated_at?new Date(t.validated_at).getTime():null,last_error:t.last_error,consecutive_failures:t.consecutive_failures,capabilities:t.capabilities,provider:t.provider,version:t.version,created_at:new Date(t.created_at).getTime(),updated_at:Date.now()};await a.put("custom_proxy_config",r)}}e.s(["IndexedDBAdapter",()=>d],845694)}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.