PageSourceSearch

https://roomiapp.com/_next/static/chunks/828-9a3d6c4bb5f9341c.js

js roomiapp.com collected 2026-10-02 06:05:07 UTC 81,438 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[828,6584],{1026:(e,t,r)=>{r.d(t,{E8:()=>n,Fb:()=>e$,_J:()=>ee,LI:()=>e4,z2:()=>e6,oS:()=>eQ,sA:()=>e0,Le:()=>e1,Bk:()=>e3,jP:()=>e5,_m:()=>eX,sJ:()=>e9,oN:()=>eW,k:()=>eK,At:()=>e2,qP:()=>eZ,nn:()=>eo,qF:()=>ej,o9:()=>eT,EE:()=>k,OW:()=>C,createNeighborhood:()=>ey,LU:()=>eA,createRoommate:()=>eu,createUpvote:()=>ex,debugRoommateQuery:()=>es,KF:()=>O,i6:()=>S,findNeighborhoodById:()=>eh,findOrCreateNeighborhoodForLocation:()=>eO,$B:()=>eY,getAllAmenities:()=>R,getAllNeighborhoods:()=>ew,getAllRoommatesByUser:()=>e_,getAmenities:()=>M,getAmenitiesByIds:()=>L,ou:()=>eG,_G:()=>eC,bs:()=>eH,Kb:()=>W,getCoverPhotoData:()=>D,HW:()=>z,te:()=>N,getListingWithUserProfile:()=>A,getListingWithUserProfileBySlug:()=>F,getListingsByLocationSlug:()=>j,VY:()=>B,getLocationBySlug:()=>T,getNeighborhoodById:()=>eS,getNeighborhoodsByIds:()=>eE,getNeighborhoodsByListingId:()=>eb,getNeighborhoodsByLocationSlug:()=>ev,m9:()=>X,L0:()=>J,j:()=>V,getRoommateByEmail:()=>em,getRoommateByHousholdId:()=>ef,getRoommateById:()=>ec,getRoommateByUserId:()=>eg,getRoommateProfile:()=>el,tr:()=>Z,QJ:()=>K,getUpvote:()=>eB,getUpvoteCountByNeighborhoodId:()=>eN,C:()=>eD,pu:()=>x,Hs:()=>eJ,ir:()=>er,Sp:()=>ez,recordProfileView:()=>ed,wy:()=>et,O:()=>$,searchNeighborhoodsByLocationSlug:()=>eI,sP:()=>P,searchSimilarLocationsBySlug:()=>eU,searchSimilarNeighborhoodsByLocationSlug:()=>ek,ZD:()=>Q,O6:()=>U,updateNeighborhood:()=>eq,r7:()=>G,TK:()=>Y});let o="id, username, account_type, status, language, timezone, last_online_at, last_login_at, verified_at, created_at, updated_at, clerk_id, profile_boost_credits, listing_boost_credits, conversation_limit, active_listing_remaining, verification_eligible, active_listing_count, has_active_listing, preferences",i="id, user_id, first_name, last_name, gender, school_name, school_major, lifestyle_tags, profile_photo_url, view_count, search_locations, move_in_timeline, situation, compatibility_score, created_at, updated_at, chat_requires_id_verified, chat_requires_safety_screen, badges, location_slug, is_boosted, work_title, employer, rent_min, rent_max",n="id, user_id, first_name, last_name, gender, school_name, school_major, lifestyle_tags, profile_photo_url, view_count, search_locations, move_in_timeline, situation, compatibility_score, created_at, updated_at, chat_requires_id_verified, chat_requires_safety_screen, badges, location_slug, is_boosted, dob, work_title, employer, rent_min, rent_max";var a=r(27460);let s={wifi:{label:"WiFi",value:"wifi",category:"Home"},parking:{label:"Parking",value:"parking",category:"Property"},laundry:{label:"Laundry",value:"laundry",category:"Home"},dishwasher:{label:"Dishwasher",value:"dishwasher",category:"Home"},air_conditioning:{label:"Air Conditioning",value:"air_conditioning",category:"Home"},heating:{label:"Heating",value:"heating",category:"Home"},gym:{label:"Gym",value:"gym",category:"Property"},pool:{label:"Pool",value:"pool",category:"Property"},pet_friendly:{label:"Pet Friendly",value:"pet_friendly",category:"Property"},furnished:{label:"Furnished",value:"furnished",category:"Home"},balcony:{label:"Balcony",value:"balcony",category:"Home"},elevator:{label:"Elevator",value:"elevator",category:"Property"},wheelchair_accessible:{label:"Wheelchair Accessible",value:"wheelchair_accessible",category:"Property"},doorman:{label:"Doorman",value:"doorman",category:"Property"},hardwood_floors:{label:"Hardwood Floors",value:"hardwood_floors",category:"Home"},in_unit_laundry:{label:"In-Unit Laundry",value:"in_unit_laundry",category:"Home"},security_system:{label:"Security System",value:"security_system",category:"Safety"}};Object.values(s),Object.values(s).filter(e=>"Home"===e.category),Object.values(s).filter(e=>"Property"===e.category),Object.values(s).filter(e=>"Safety"===e.category),Object.values({entire:{label:"Entire Place",value:"entire",description:"Have the whole place to yourself"},private:{label:"Private Room",value:"private",description:"Your own room in a shared space"},shared:{label:"Shared Room",value:"shared",description:"Share a room with others"}});let l={"12_MONTHS":"fixed",flexible:"flexible",fixed:"fixed"};var c=r(95704);let d=e=>
1c.env["NEXT_PUBLIC_STRIPE_".concat(e)]||c.env["EXPO_PUBLIC_STRIPE_".concat(e)]||"";d("PRICE_VERIFICATION_WEEKLY"),d("PRICE_VERIFICATION_MONTHLY"),d("PRICE_UNLIMITED_WEEKLY"),d("PRICE_UNLIMITED_MONTHLY"),d("PRICE_BUSINESS_MONTHLY"),d("PRICE_LISTING_BOOST_1"),d("PRICE_LISTING_BOOST_3"),d("PRICE_LISTING_BOOST_7"),d("PRICE_PROFILE_BOOST_1"),d("PRICE_PROFILE_BOOST_3"),d("PRICE_PROFILE_BOOST_7"),d("PRODUCT_VERIFICATION"),d("PRODUCT_UNLIMITED"),d("PRODUCT_BUSINESS");let u={debug:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r]},warn:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];console.warn(...t)},error:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];console.error(...t)}};var _=r(12298);let g="id, user_id, price_per_month, security_deposit, room_type, property_type, bedrooms, bathrooms, availability_date, lease_duration, location, roommate_count, status, view_count, photos, cover_photo_url, videos, roommate_min_age, roommate_max_age, description, match_count, slug, archived_at, snoozed_at, published_at, created_at, updated_at, amenities, neighborhood, display_location, latitude, longitude, situation, roommate_gender, location_path, move_out_date, location_slug, household_id, is_boosted, date_activated, date_deactivated",f="id, description, food_rating, public_transport_rating, walkable_safe_rating, rent_value_rating, created_at, updated_at, night_life_rating, photos, location_slug, listing_id, user_id, overall_rating, upvote_count",m="id, listing_id, analytics_date, views, saves, messages, matches, created_at, updated_at",p="id, user_id, status, joined_at, left_at, created_at, updated_at, invited_by, first_name, household_id",h={entire_place:"entire",private_room:"private",shared_room:"shared",entire:"entire",private:"private",shared:"shared"},y=["Male","Female","Non-binary"],v=["active","inactive","new","archived","draft"];function b(e){return"string"==typeof e&&e.trim().length>0}function w(e){return null==e||Number.isNaN(e)}async function S(e,t){let r=[];if(!t.listingId)return{imageTriggered:!1,geocodeTriggered:!1,skipped:!0,reasons:["missing-listing-id"]};let o=b(t.displayLocation)?t.displayLocation.trim():"",i=b(o)&&!b(t.locationImageUrl),n=b(o)&&(w(t.latitude)||w(t.longitude));if(!i&&!n)return{imageTriggered:!1,geocodeTriggered:!1,skipped:!0,reasons:["no-missing-location-data"]};let a=!1,s=!1,{data:l,error:c}=await e.functions.invoke("geocode-listing",{body:{listingId:t.listingId,displayLocation:o,needImage:i,needCoordinates:n}});return c?(u.warn("Failed to backfill listing location data",{listingId:t.listingId,error:c}),i&&r.push("image-backfill-failed"),n&&r.push("geocode-backfill-failed")):(a=!!(null==l?void 0:l.imageUpdated)||!!(null==l?void 0:l.imageReused),s=!!(null==l?void 0:l.coordinatesUpdated)),{imageTriggered:a,geocodeTriggered:s,skipped:!1,reasons:r}}async function q(e,t){if("boolean"==typeof t)return t;try{let{data:t,error:r}=await e.auth.getUser();if(r)return!1;return!!(null==t?void 0:t.user)}catch(e){return!1}}function E(e){return"\n        id,\n        user_id,\n        first_name,\n        last_name,\n        gender,\n        school_name,\n        school_major,\n        lifestyle_tags,\n        profile_photo_url,\n        view_count,\n        search_locations,\n        move_in_timeline,\n        situation,\n        compatibility_score,\n        created_at,\n        updated_at,\n        chat_requires_id_verified,\n        chat_requires_safety_screen,\n        badges,\n        location_slug,\n        is_boosted".concat(e?",\n        dob,\n        work_title,\n        employer,\n        rent_min,\n        rent_max,\n        metadata,\n        search_tsv":"","\n      ")}function I(e){return"\n        id,\n        first_name,\n        last_name,\n        gender,\n        school_name,\n        school_major,\n        lifestyle_tags,\n        profile_photo_url,\n        view_count,\n        search_locations,\n        location_slug,\n        move_in_timeline,\n        situation,\n        badges,\n        is_boosted".concat(e?",\n        dob,\n        work_title,\n        employer,\n        rent_min,\n        rent_max":"","\n      ")}async function k(e,t,r){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"web";try{var i;let{data:n,error:a}=await e.from("users").select("id").or((0,_._$)(r)).single();if(a||!n)return u.error("Error fetching user:",a),{data:null,error:{message:"User not found. Please ensure you are logged in."}};let{neighborhoodDescription:s,ratings:c,neighborhoodImages:d,coverPhoto:g,...f}=t,m=[];Array.isArray(f.roommate_gender)?m=f.roommate_gender.filter(e=>y.includes(e)):"string"==typeof f.roommate_gender&&y.includes(f.roommate_gender)&&(m=[f.roommate_gender]);let p={...f,user_id:n.id,lease_duration:l[f.lease_duration||""]||"flexible",room_type:h[f.room_type||""]||"private",property_type:["apartment","house","condo","studio"].includes(f.property_type||"")?f.property_type:"apartment",roommate_gender:m,status:v.includes(f.status||"")?f.status:"new",photos:f.photos||[],cover_photo_url:f.cover_photo_url||null,view_count:0,match_count:0,created_at:new Date().toISOString(),published_at:"active"!==f.status||f.published_at?null!=(i=f.published_at)?i:null:new Date().toISOString(),platform:o};
1Object.keys(p).forEach(e=>{void 0===p[e]&&delete p[e]}),u.debug("Inserting listing with data:",p);let{data:b,error:w}=await e.from("listings").insert([p]).select("id, household_id").single();if(w)return u.error("Error inserting listing:",w),{data:null,error:w};if(u.debug("Listing created successfully:",b),s||c||d){let t={};null==c||c.forEach(e=>{"Food"===e.name&&(t.food_rating=e.rating),"Public transport"===e.name&&(t.public_transport_rating=e.rating),"Walkable/safe"===e.name&&(t.walkable_safe_rating=e.rating),"Nightlife"===e.name&&(t.night_life_rating=e.rating),"Rent value"===e.name&&(t.rent_value_rating=e.rating)});let r={location_slug:p.location_slug||null,listing_id:b.id,user_id:n.id,description:s||"",food_rating:t.food_rating||0,public_transport_rating:t.public_transport_rating||0,walkable_safe_rating:t.walkable_safe_rating||0,night_life_rating:t.night_life_rating||0,rent_value_rating:t.rent_value_rating||0,photos:d||[],upvote_count:0};if(r.location_slug){let{error:t}=await e.from("neighborhoods").insert([r]).select().single();t&&u.error("Error creating neighborhood:",t)}else u.warn("Skipping neighborhood creation: no location_slug available")}return{data:b,error:null}}catch(e){return u.error("Unexpected error creating listing:",e),{data:null,error:{message:"An unexpected error occurred while creating the listing."}}}}async function U(e,t,r,o){try{let{data:i,error:n}=await e.from("users").select("id, active_listing_remaining").or((0,_._$)(o)).single();if(n||!i)return{data:null,error:{message:"User not found."}};let{neighborhoodDescription:a,ratings:s,neighborhoodImages:c,...d}=r,g={...d};d.lease_duration&&(g.lease_duration=l[d.lease_duration]||d.lease_duration),d.room_type&&(g.room_type=h[d.room_type]||d.room_type),"string"==typeof d.status&&(g.status=v.includes(d.status)?d.status:void 0),"active"!==g.status||g.published_at||(g.published_at=new Date().toISOString()),g.updated_at=new Date().toISOString();let f=new Set(["location","display_location","price_per_month","security_deposit","availability_date","lease_duration","move_out_date","location_slug","bedrooms","bathrooms","room_type","property_type","description","amenities","roommate_min_age","roommate_max_age","roommate_gender","situation","photos","cover_photo_url","status","published_at","metadata","updated_at","latitude","longitude","neighborhood"]),m=Object.fromEntries(Object.entries(g).filter(e=>{let[t]=e;return f.has(t)})),{data:p,error:y}=await e.from("listings").update(m).eq("id",t).eq("user_id",i.id).select("id, location_slug").single();if(y)return u.error("Error updating listing:",y),{data:null,error:y};if(a||s||c){let r={};null==s||s.forEach(e=>{"Food"===e.name&&(r.food_rating=e.rating),"Public transport"===e.name&&(r.public_transport_rating=e.rating),"Walkable/safe"===e.name&&(r.walkable_safe_rating=e.rating),"Nightlife"===e.name&&(r.night_life_rating=e.rating),"Rent value"===e.name&&(r.rent_value_rating=e.rating)});let{data:o}=await e.from("neighborhoods").select("id").eq("listing_id",t).eq("user_id",i.id).maybeSingle();if(o){let{error:t}=await e.from("neighborhoods").update({description:a,photos:c||[],...r,updated_at:new Date().toISOString()}).eq("id",o.id);t&&u.error("Error updating neighborhood:",t)}else if(null==p?void 0:p.location_slug){let o={location_slug:p.location_slug,listing_id:t,user_id:i.id,description:a||"",food_rating:r.food_rating||0,public_transport_rating:r.public_transport_rating||0,walkable_safe_rating:r.walkable_safe_rating||0,night_life_rating:r.night_life_rating||0,rent_value_rating:r.rent_value_rating||0,photos:c||[],upvote_count:0},{error:n}=await e.from("neighborhoods").insert([o]).select().single();n&&u.error("Error creating neighborhood:",n)}else u.warn("Skipping neighborhood creation: no location_slug available")}return{data:p,error:null}}catch(e){return{data:null,error:{message:"An unexpected error occurred while updating the listing."}}}}async function x(e,t,r){let{data:o,error:i}=await e.from("users").select("id").or((0,_._$)(t)).single();if(i||!o)return u.error("Error fetching user:",i),{data:[],error:i,count:0,hasMore:!1};let n="number"==typeof(null==r?void 0:r.limit)?Math.min(Math.max(1,r.limit),50):null,a="number"==typeof(null==r?void 0:r.offset)?Math.max(0,r.offset):0,s=(null==r?void 0:r.status)==="inactive",l=e.from("listings").select("".concat(g,", listing_analytics(id, listing_id, views, saves, messages, matches, created_at, updated_at)"),{count:"exact"}
1).eq("user_id",o.id);if((null==r?void 0:r.status)&&(l="inactive"===r.status?l.or("status.eq.inactive,status.eq.draft"):l.eq("status",r.status)),s&&(null==r?void 0:r.search)&&r.search.trim()){let e="%".concat(r.search.trim(),"%");l=l.or("location.ilike.".concat(e,",description.ilike.").concat(e,",room_type.ilike.").concat(e,",display_location.ilike.").concat(e))}switch(s&&(null==r?void 0:r.min_price)!=null&&(l=l.gte("price_per_month",r.min_price)),s&&(null==r?void 0:r.max_price)!=null&&(l=l.lte("price_per_month",r.max_price)),s&&(null==r?void 0:r.sort_by)||"newest"){case"price_asc":l=l.order("price_per_month",{ascending:!0});break;case"price_desc":l=l.order("price_per_month",{ascending:!1});break;default:l=l.order("created_at",{ascending:!1})}null!==n&&(l=l.range(a,a+n-1));let{data:c,error:d,count:f}=await l,m=f||0,p=null!==n&&m>a+((null==c?void 0:c.length)||0);if(d||!c||0===c.length)return{data:c||[],error:d,count:m,hasMore:p};try{let t=c.map(e=>e.id),{data:r,error:o}=await e.from("listing_analytics").select("listing_id, views").in("listing_id",t);if(!o&&r){let e={};for(let t of r){let r=t.listing_id,o="number"==typeof t.views?t.views:0;e[r]=(e[r]||0)+o}return{data:c.map(t=>({...t,view_count:e[t.id]||0})),error:null,count:m,hasMore:p}}}catch(e){u.warn("Failed to aggregate listing views from listing_analytics:",e)}return{data:c,error:null,count:m,hasMore:p}}async function B(e,t){let r=E(await q(e)),{data:o,error:i}=await e.from("listings").select("\n      ".concat(g,",\n      user:users (\n        id, username, status, last_online_at, verified_at, account_type,\n        profile:profiles (").concat(r,")\n      )\n    ")).eq("user_id",t).eq("status","active").order("created_at",{ascending:!1});if(i||!o||0===o.length)return{data:o||[],error:i};try{let t=o.map(e=>e.id),{data:r,error:i}=await e.from("listing_analytics").select("listing_id, views").in("listing_id",t);if(!i&&r){let e={};for(let t of r){let r=t.listing_id,o="number"==typeof t.views?t.views:0;e[r]=(e[r]||0)+o}return{data:o.map(t=>({...t,view_count:e[t.id]||0})),error:null}}}catch(e){u.warn("Failed to aggregate listing views from listing_analytics:",e)}return{data:o,error:null}}async function N(e,t){let{data:r,error:o}=await e.from("listings").select("\n      ".concat(g,",\n      user:users (\n        id,\n        username,\n        profile:profiles (\n          first_name,\n          last_name,\n          profile_photo_url\n        )\n      ),\n      locations(*),\n      neighborhoods!neighborhoods_listing_id_fkey(").concat(f,")\n    ")).eq("id",t).single();return{data:r,error:o}}async function O(e,t,r){let{data:o,error:i}=await e.from("users").select("id").or((0,_._$)(r)).single();if(i||!o)return{data:null,error:{message:"User not found."}};let{data:n,error:a}=await e.from("listings").select("id").eq("id",t).eq("user_id",o.id).single();if(a||!n)return{data:null,error:{message:"Listing not found or you do not have permission to delete it."}};let{error:s}=await e.from("saved_items").delete().eq("item_type","listing").eq("item_id",t);s&&u.error("Error deleting saved items:",s);let{error:l}=await e.from("listings").delete().eq("id",t).eq("user_id",o.id);return{data:!l,error:l}}async function P(e,t){let r=await q(e,null==t?void 0:t.includeSensitiveProfileFields),o=I(r),i=Math.max(1,(null==t?void 0:t.page)||1),n=Math.min(Math.max(1,(null==t?void 0:t.limit)||20),50),a=(i-1)*n,s="\n      id,\n      username,\n      status,\n      verified_at,\n      last_online_at,\n      created_at,\n      profile:profiles!inner (\n        ".concat(o,"\n      ),\n      listings(\n        id,\n        price_per_month,\n        availability_date,\n        display_location,\n        location,\n        location_slug,\n        status\n      )\n    "),l="\n      id,\n      profile:profiles!inner (\n        id\n      ),\n      listings(\n        id,\n        status\n      )\n    ",c=(o,i)=>{var n;let a=e.from("users").select(o,i).eq("account_type","personal").not("profile.profile_photo_url","is",null).neq("profile.profile_photo_url","").not("profile.search_locations","is",null).neq("profile.search_locations","{}");
1if(null==t?void 0:t.location){let e=t.location.trim(),r=e.replace(/-/g," ").trim();a=e.includes("-")?a.eq("profile.location_slug",e.toLowerCase()):a.textSearch("profile.search_tsv",r,{type:"plain",config:"english"})}if((null==t?void 0:t.verification_status)!==void 0&&(a=a.contains("profile.badges",["Identity Verified"])),a=a.eq("status",(null==t?void 0:t.status)||"active"),(null==t?void 0:t.search)&&t.search.trim()){let e=t.search.trim();a=a.textSearch("profile.search_tsv",e,{type:"plain",config:"english"})}if((null==t?void 0:t.gender)&&(a="Non-binary"===t.gender?a.in("profile.gender",["Other","Non-binary"]):a.eq("profile.gender",t.gender)),(null==t?void 0:t.move_in_timeline)&&(a=a.eq("profile.move_in_timeline",t.move_in_timeline)),null==t||null==(n=t.lifestyle_tags)?void 0:n.length){let e=Array.from(new Set(t.lifestyle_tags.flatMap(e=>{if(!e)return[];let t=e.trim();if(!t)return[];let r=t.toLowerCase(),o=r.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),i=o.replace(/-/g," ").trim();return[t,r,o,i].filter(Boolean)})));e.length&&(a=a.overlaps("profile.lifestyle_tags",e))}if(r){let e=new Date().getFullYear();if(null==t?void 0:t.age_min){let r=e-t.age_min;a=a.lte("profile.dob","".concat(r,"-12-31"))}if(null==t?void 0:t.age_max){let r=e-t.age_max;a=a.gte("profile.dob","".concat(r,"-01-01"))}(null==t?void 0:t.rent_min)&&(a=a.gte("profile.rent_min",t.rent_min)),(null==t?void 0:t.rent_max)&&(a=a.lte("profile.rent_max",t.rent_max))}return(null==t?void 0:t.isIdentityVerified)&&(a=a.contains("profile.badges",["Identity Verified"])),(null==t?void 0:t.isSafetyScreened)&&(a=a.contains("profile.badges",["Safety Screening"])),r&&(null==t?void 0:t.budget)&&(a=a.lte("profile.rent_min",t.budget).gte("profile.rent_max",t.budget)),(null==t?void 0:t.situationStatus)&&(a="Has available room"===t.situationStatus?a.not("listings","is",null).eq("listings.status","active"):a.is("listings",null)),a},d=e=>e.order("badges",{ascending:!1,nullsFirst:!1,referencedTable:"profiles"}).order("last_online_at",{ascending:!1,nullsFirst:!1}).order("created_at",{ascending:!1}),{count:_,error:g}=await c(l,{count:"estimated",head:!0});if(g)throw u.error("searchRoommates total count error:",{message:(null==g?void 0:g.message)||"Unknown error",code:null==g?void 0:g.code,details:null==g?void 0:g.details,hint:null==g?void 0:g.hint,filters:t}),g;let{count:f,error:m}=await c(l,{count:"exact",head:!0}).eq("profile.is_boosted",!0);if(m)throw u.error("searchRoommates boosted count error:",{message:(null==m?void 0:m.message)||"Unknown error",code:null==m?void 0:m.code,details:null==m?void 0:m.details,hint:null==m?void 0:m.hint,filters:t}),m;let p=null!=_?_:0,h=null!=f?f:0,y=Math.min(a,h),v=Math.min(n,Math.max(0,h-y)),b=Math.max(0,a-h),w=Math.max(0,n-v),S=v>0?d(c(s).eq("profile.is_boosted",!0)).range(y,y+v-1):Promise.resolve({data:[],error:null}),E=w>0?d(c(s).eq("profile.is_boosted",!1)).range(b,b+w-1):Promise.resolve({data:[],error:null}),[{data:k,error:U},{data:x,error:B}]=await Promise.all([S,E]);if(U||B){let e=U||B;throw u.error("searchRoommates paged data error:",{message:(null==e?void 0:e.message)||"Unknown error",code:null==e?void 0:e.code,details:null==e?void 0:e.details,hint:null==e?void 0:e.hint,filters:t}),e}let N=[...k||[],...x||[]],O=p>a+N.length;return{data:N,count:p,hasMore:O}}async function A(e,t){let r=await q(e),o=E(r),i=I(r),{data:n,error:a}=await e.from("listings").select("\n    ".concat(g,",\n    user:users (\n      id,\n      username,\n      status,\n      last_online_at,\n      profile:profiles (").concat(o,")\n    ),\n    household:households (\n      *,\n      roommates (\n        ").concat(p,",\n        user:users!roommates_user_id_fkey (\n          id,\n          username,\n          status,\n          last_online_at,\n          profile:profiles (").concat(i,")\n        )\n      )\n    ),\n    listing_analytics(").concat(m,"),\n    locations(id, slug, display_location, image_url, description, parent_id),\n    neighborhoods!neighborhoods_listing_id_fkey(").concat(f,")\n  ")).eq("id",t).eq("status","active").maybeSingle();if(a)throw u.error("Error fetching listing with user profile:",a),a;return n||null}async function M(e,t){let{data:r,error:o}=await e.from("amenities").select("\n      id,\n      name,\n      category,\n      created_at\n    ").eq("id",t).single();return{data:r,error:o}}async function L(e,t){let{data:r,error:o}=await e.from("amenities").select("\n      id,\n      name,\n      category,\n      created_at\n    ").in("id",t);return{data:r,error:o}}async function R(e){let{data:t,error:r}=await e.from("amenities").select("\n      id,\n      name,\n      category,\n      created_at\n    ").order("category",{ascending:!0}).order("name",{ascending:!0});return{data:t,error:r}}async function C(e,t){try{let r=t.split(",").map(e=>e.trim()),o=null,i=null;for(let t=r.length-1;t>=0;t--){let n=r[t],a=n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),s=await e.from("locations").upsert({slug:a,display_location:n,parent_id:o},{onConflict:"slug"}).select().single();if(s.error||!s.data)return u.error("locations create error:",s.error),{data:null,error:s.error};o=s.data.id,i=s.data}return{data:i,error:null}}catch(e){return u.error("Unexpected createLocationHierarchy error:",e),{data:null,error:{message:"Unexpected error creating location hierarchy",details:e}}}}async function T(e,t){t.replace(/-/g," ").trim();try{var r,o;let i=await q(e),{data:n,error:s}=await e.from("locations").select("*").eq("slug",t).single();if(s&&"PGRST116"!==s.code)return u.error("Error fetching location by slug:",s),{data:null,error:s};if(!n)return{data:null,error:{code:"LOCATION_NOT_FOUND",message:"Location not found"}};let{data:l,count:c,error:d}=await e.from("listings").select("\n      id,\n      price_per_month,\n      user:users!inner (\n        id,\n        status\n      )\n    ",{count:"exact"}).eq("status","active").eq("location_slug",t).eq("user.status","active");if(d)return u.error("Error fetching listings:",d),{data:null,error:d};let _=c||(null==l?void 0:l.length)||0,g=(null==l?void 0:l.reduce((e,t)=>
1e+(t.price_per_month||0),0))/(l.length||1)||0,f=0,m=null,p=[],h=null;try{let o=e.from("users").select("\n          id,\n          profile:profiles!inner (\n            id,\n            profile_photo_url,\n            search_locations,\n            search_tsv\n          )\n        ",{count:"exact",head:!0}).eq("status","active").eq("account_type","personal").not("profile.profile_photo_url","is",null).neq("profile.profile_photo_url","").not("profile.search_locations","is",null).neq("profile.search_locations","{}");o=o.eq("profile.location_slug",t);let n=await o;if(f=null!=(r=n.count)?r:0,m=n.error,i&&!m&&(null!=f?f:0)>0){let r=e.from("users").select("\n            id,\n            profile:profiles!inner (\n              id,\n              dob,\n              rent_max,\n              profile_photo_url,\n              search_locations,\n              search_tsv\n            )\n          ").eq("status","active").eq("account_type","personal").not("profile.profile_photo_url","is",null).neq("profile.profile_photo_url","").not("profile.search_locations","is",null).neq("profile.search_locations","{}");r=r.eq("profile.location_slug",t);let o=await r;h=o.error,p=(o.data||[]).map(e=>null==e?void 0:e.profile).filter(Boolean)}}catch(e){u.error("Error in roommate search:",e)}u.debug("Roommate count:",f);let y=h?{message:h.message,code:h.code,details:h.details,hint:h.hint}:null;y&&Object.values(y).some(e=>!!e)&&u.error("Error fetching roommates:",y);let v=m?{message:m.message,code:m.code,details:m.details,hint:m.hint}:null;v&&Object.values(v).some(e=>!!e)&&u.error("Error counting roommates:",v);let b=null!=(o=null!=f?f:p.length)?o:0,w=new Date,S=0,E=0;if(p.length>0){let e=p.map(e=>e.dob?(0,a.V)(w,new Date(e.dob)):null).filter(Boolean),t=p.map(e=>e.rent_max).filter(e=>"number"==typeof e);S=e.reduce((e,t)=>e+t,0)/(e.length||1)||0,E=t.reduce((e,t)=>e+t,0)/(t.length||1)||0}return{data:{location:n,total_listings:_,avg_rent:g,total_renters:b,avg_max_budget:E,avg_age:S},error:null}}catch(e){return u.error("Unexpected error fetching location by slug:",e),{data:null,error:e}}}async function D(e,t){try{if(!t)return{url:"",caption:""};let r=t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(!r)return{url:"",caption:t};let{data:o}=await T(e,r);if(o&&o.location.image_url)return{url:o.location.image_url,caption:t};return{url:"",caption:t}}catch(e){return u.error("Error getting cover photo data:",e),{url:"",caption:t||""}}}async function F(e,t){let r=await q(e),o=E(r),i=I(r),{data:n,error:a}=await e.from("listings").select("\n    ".concat(g,",\n    user:users (\n      id,\n      username,\n      status,\n      last_online_at,\n      profile:profiles (").concat(o,")\n    ),\n    household:households (\n      *,\n      roommates (\n        ").concat(p,",\n        user:users!roommates_user_id_fkey (\n          id,\n          username,\n          status,\n          last_online_at,\n          profile:profiles (").concat(i,")\n        )\n      )\n    ),\n    listing_analytics(").concat(m,"),\n    locations(id, slug, display_location, image_url, description, parent_id),\n    neighborhoods!neighborhoods_listing_id_fkey(").concat(f,")\n  ")).eq("slug",t).eq("status","active").maybeSingle();if(a){if("PGRST116"===a.code)return null;
1throw u.error("Error fetching listing by slug:",a),a}return n||null}async function j(e,t){t.replace(/-/g," ").trim();let r=await q(e),o=E(r),i=I(r),n="\n  ".concat(g,",\n  user:users (\n    id,\n    status,\n    last_online_at,\n    profile:profiles (").concat(o,")\n  ),\n  neighborhoods!neighborhoods_listing_id_fkey(").concat(f,"),\n  locations(*),\n  household:households (\n    *,\n    roommates (\n      ").concat(p,",\n      user:users!roommates_user_id_fkey (\n        id,\n        username,\n        status,\n        last_online_at,\n        profile:profiles (").concat(i,")\n      )\n    )\n  )\n"),{data:a,error:s}=await e.from("listings").select(n).eq("status","active").or("location_slug.eq.".concat(t,",search_tsv.wfts.").concat(t));return s&&u.error("Error fetching listings by exact array match:",s),a}async function $(e,t){var r;let o=await q(e,null==t?void 0:t.includeSensitiveProfileFields),i="\n        id,\n        first_name,\n        profile_photo_url,\n        badges".concat(o?",\n        dob":"","\n      "),n=e.from("listings").select("\n    id,\n    user_id,\n    price_per_month,\n    security_deposit,\n    room_type,\n    property_type,\n    bedrooms,\n    bathrooms,\n    availability_date,\n    lease_duration,\n    location,\n    display_location,\n    neighborhood,\n    roommate_count,\n    status,\n    view_count,\n    photos,\n    cover_photo_url,\n    roommate_min_age,\n    roommate_max_age,\n    description,\n    slug,\n    created_at,\n    updated_at,\n    amenities,\n    latitude,\n    longitude,\n    situation,\n    roommate_gender,\n    location_slug,\n    is_boosted,\n    user:users!inner (\n      id,\n      username,\n      status,\n      last_online_at,\n      verified_at,\n      account_type,\n      profile:profiles!inner (".concat("\n        id,\n        first_name,\n        last_name,\n        gender,\n        profile_photo_url,\n        badges".concat(o?",\n        dob,\n        work_title,\n        employer":"","\n      "),"),\n      business(\n        id,\n        name,\n        logo_image\n      )\n    ),\n    household:households(*,\n    roommates(\n      id,\n      status,\n      first_name,\n      invited_by:users!roommates_invited_by_fkey (\n        id,\n        username,\n        profile:profiles (").concat(i,")\n      ),\n      user:users!roommates_user_id_fkey (\n        id,\n        username,\n        status,\n        verified_at,\n        profile:profiles (").concat(i,")\n      )\n    )\n    )\n    "),{count:"exact"}).eq("status","active").eq("user.status","active"),a=[],s=null==t||null==(r=t.location)?void 0:r.includes("-");if((null==t?void 0:t.search)&&t.search.trim()&&a.push(t.search.trim()),(null==t?void 0:t.location)&&s&&(n=n.eq("location_slug",t.location)),(null==t?void 0:t.location)&&!s&&a.push(t.location.trim().replace(/-/g," ")),a.length>0){let e=Array.from(new Set(a.flatMap(e=>{let t=e.trim().replace(/,/g," ");
1if(!t)return[];let r=t.replace(/[%_]/g,"\\$&"),o=t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),i=["display_location.ilike.%".concat(r,"%"),"location.ilike.%".concat(r,"%"),"neighborhood.ilike.%".concat(r,"%")];return o&&i.push("location_slug.ilike.%".concat(o,"%")),i})));e.length>0&&(n=n.or(e.join(",")))}if((null==t?void 0:t.layout)?n=n.eq("room_type",t.layout):(null==t?void 0:t.room_type)&&(n=n.eq("room_type",t.room_type)),(null==t?void 0:t.type)?n=n.eq("property_type",t.type):(null==t?void 0:t.property_type)&&(n=n.eq("property_type",t.property_type)),(null==t?void 0:t.min_price)&&t.min_price>0&&(n=n.gte("price_per_month",t.min_price)),(null==t?void 0:t.max_price)&&t.max_price>0&&(n=n.lte("price_per_month",t.max_price)),(null==t?void 0:t.bedrooms)&&t.bedrooms.length>0&&(n=n.in("bedrooms",t.bedrooms)),(null==t?void 0:t.bathrooms)&&t.bathrooms>0&&(n=n.gte("bathrooms",t.bathrooms)),(null==t?void 0:t.amenities)&&t.amenities.length>0){let{data:r,error:o}=await e.from("amenities").select("id").in("name",t.amenities);if(o&&u.error("Error fetching amenities:",o),r&&0!==r.length){let e=r.map(e=>e.id.toString());n=n.overlaps("amenities",e)}else n=n.eq("id","no-match")}if((null==t?void 0:t.max_roommates)&&(n=n.lte("roommate_count",t.max_roommates)),null==t?void 0:t.roommate_gender){let e=(Array.isArray(t.roommate_gender)?t.roommate_gender:[t.roommate_gender]).filter(e=>y.includes(e));e.length>0&&(n=n.overlaps("roommate_gender",e))}if((null==t?void 0:t.posted_by_gender)&&(n=n.eq("users.profiles.gender",t.posted_by_gender)),(null==t?void 0:t.duration)?n=n.eq("lease_duration",t.duration):(null==t?void 0:t.lease_duration)&&(n=n.eq("lease_duration",t.lease_duration)),(null==t?void 0:t.available_from)&&(n=n.gte("availability_date",t.available_from)),(null==t?void 0:t.available_to)&&(n=n.lte("availability_date",t.available_to)),(null==t?void 0:t.urgency_days)&&t.urgency_days>0){let e=new Date;e.setDate(e.getDate()+t.urgency_days);let r=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0"),a="".concat(r,"-").concat(o,"-").concat(i);n=n.lte("availability_date",a)}switch((null==t?void 0:t.isIdentityVerified)&&(n=n.contains("user.profile.badges",["Identity Verified"])),(null==t?void 0:t.isSafetyScreened)&&(n=n.contains("user.profile.badges",["Safety Screening"])),(null==t?void 0:t.userType)&&(n=n.eq("user.account_type",t.userType)),n=n.order("is_boosted",{ascending:!1,nullsFirst:!1}),null==t?void 0:t.sort_by){case"price_asc":n=n.order("price_per_month",{ascending:!0,nullsFirst:!1});break;case"price_desc":n=n.order("price_per_month",{ascending:!1,nullsFirst:!1});break;case"date_asc":n=n.order("created_at",{ascending:!0});break;default:n=n.order("updated_at",{ascending:!1})}let l=Math.min((null==t?void 0:t.limit)||20,50),c=(null==t?void 0:t.offset)||0;n=n.range(c,c+l-1);let{data:d,error:_,count:g}=await n;return _?(u.error("Search listings error:",{message:_.message,code:_.code,details:_.details,hint:_.hint}),{data:[],count:0,hasMore:!1}):{data:d||[],count:g||0,hasMore:(g||0)>c+l}}async function z(e,t){let{data:r,error:i}=await e.from("users").select("\n      ".concat(o,",\n      profile:profiles(").concat(n,")\n    ")).or((0,_._$)(t)).neq("status","deleted").single();if(u.debug("Getting current user for auth id:",t),i){if("PGRST116"===i.code)return null;throw i}return r}async function G(e,t,r){let{data:o}=await e.from("users").select("id").or((0,_._$)(t)).single();if(!o)throw Error("User not found");let{data:i,error:n}=await e.from("profiles").upsert({user_id:o.id,...r,updated_at:new Date().toISOString()},{onConflict:"user_id",ignoreDuplicates:!1}).select().single();if(n)throw n;return i}let H=new Set(["status","account_type","language","timezone","preferences","contact_number","country_code","has_active_listing","last_online_at","last_login_at"]);async function Y(e,t,r){let o=Object.fromEntries(Object.entries(r).filter(e=>{let[t]=e;return H.has(t)})),{data:i,error:n}=await e.from("users").update(o).or((0,_._$)(t)).select().single();if(n)throw n;return i}async function J(e,t){let{data:r,error:o}=await t.from("profiles").select(n).eq("user_id",e).single();if(o)throw o;return r}async function V(e,t){let r=new Date;r.setDate(r.getDate()-90);let{data:i,error:a}=await e.from("profile_viewers").select("\n      *,\n      viewer:users!profile_viewers_viewer_id_fkey (".concat(o,",\n      profile:profiles(").concat(n,")\n      )\n      "),{count:"exact"}).eq("user_id",t).gte("updated_at",r.toISOString()).order("updated_at",{ascending:!1});if(a)throw a;return i||[]}async function X(e,t){let{data:r,error:o}=await t.from("profiles").select("\n      ".concat(i,",\n      user:users!inner(email, verified_at)\n      ")).eq("user.email",e).single();if(o)throw o;return r}async function W(e,t){let{data:r,error:o}=await t.from("business").select("*").eq("user_id",e).maybeSingle();if(o)throw o;return null!=r?r:null}async function Q(e,t,r){let{data:o,error:i}=await e.from("users").select("id, account_type").or((0,_._$)(t)).maybeSingle();if(i)throw i;if(!o)throw Error("User not found");if("business"!==o.account_type)throw Error("User does not have business account");let n={user_id:o.id,...r,updated_at:new Date().toISOString()},{data:a,error:s}=await e.from("business").upsert(n,{onConflict:"user_id"}).select().maybeSingle();if(s)throw s;if(!a)throw Error("Failed to upsert business");return a}
1async function Z(e,t){try{let{data:r,error:o}=await e.from("users").select("id").or((0,_._$)(t)).single();if(o||!r)throw u.error("User lookup failed:",{authId:t,userError:o}),Error("User not found in database for auth ID: ".concat(t,". Please ensure the user is properly created."));let{data:i,error:n}=await e.from("saved_items").select("item_id").eq("user_id",r.id).eq("item_type","listing").order("saved_at",{ascending:!1});if(n)throw n;if(!i||0===i.length)return{data:[],count:0,hasMore:!1};let a=i.map(e=>e.item_id),{data:s,error:l}=await e.from("listings").select("\n        id,\n        user_id,\n        price_per_month,\n        security_deposit,\n        room_type,\n        property_type,\n        bedrooms,\n        bathrooms,\n        availability_date,\n        lease_duration,\n        location,\n        display_location,\n        neighborhood,\n        roommate_count,\n        status,\n        view_count,\n        photos,\n        cover_photo_url,\n        situation,\n        slug,\n        created_at,\n        updated_at,\n        amenities,\n        location_slug,\n        is_boosted,\n        household:households(\n          roommates(\n            id,\n            status,\n            first_name,\n            user:users!roommates_user_id_fkey(\n              id,\n              email,\n            username,\n              profile:profiles(\n                id,\n                first_name,\n                profile_photo_url,\n                dob,\n                badges\n              )\n            )\n          )\n        ),\n        user:users!inner(\n          id,\n          email,\n          username,\n          status,\n          last_online_at,\n          verified_at,\n          account_type,\n          business(\n            id,\n            name\n          ),\n          profile:profiles(\n            id,\n            first_name,\n            last_name,\n            gender,\n            profile_photo_url,\n            badges,\n            dob,\n            work_title,\n            employer\n          )\n        )\n      ").in("id",a);if(l)throw l;let c=a.map(e=>null==s?void 0:s.find(t=>t.id===e)).filter(Boolean);return{data:c||[],count:(null==c?void 0:c.length)||0,hasMore:!1}}catch(e){throw u.error("Error fetching saved listings:",e),e}}async function K(e,t){try{let{data:r,error:o}=await e.from("users").select("id").or((0,_._$)(t)).single();if(o||!r)throw u.error("User lookup failed:",{authId:t,userError:o}),Error("User not found in database for auth ID: ".concat(t,". Please ensure the user is properly created."));let{data:i,error:n}=await e.from("saved_items").select("item_id").eq("user_id",r.id).eq("item_type","profile").order("saved_at",{ascending:!1});if(n)throw n;if(!i||0===i.length)return{data:[],count:0,hasMore:!1};let a=i.map(e=>e.item_id),{data:s,error:l}=await e.from("users").select("\n        id,\n        username,\n        email,\n        status,\n        last_online_at,\n        verified_at,\n        profile:profiles(\n          id,\n          user_id,\n          first_name,\n          last_name,\n          gender,\n          dob,\n          profile_photo_url,\n          work_title,\n          employer,\n          school_name,\n          rent_min,\n          rent_max,\n          move_in_timeline,\n          search_locations,\n          situation,\n          badges,\n          is_boosted,\n          created_at,\n          updated_at\n        )\n      ").in("id",a).neq("status","deleted");if(l)throw l;let c=a.map(e=>{let t=null==s?void 0:s.find(t=>t.id===e);if(!(null==t?void 0:t.profile))return null;let r=Array.isArray(t.profile)?t.profile[0]:t.profile;return r?{...r,user_id:t.id,username:t.username}:null}).filter(Boolean);return{data:c||[],count:(null==c?void 0:c.length)||0,hasMore:!1}}catch(e){throw u.error("Error fetching saved profiles:",e),e}}async function ee(e,t,r,o){try{let{data:i,error:n}=await e.from("users").select("id").or((0,_._$)(t)).single();if(n||!i)throw u.error("User lookup failed:",{authId:t,userError:n}),Error("User not found in database for auth ID: ".concat(t));let{data:a,error:s}=await e.from("saved_items").insert({user_id:i.id,item_type:r,item_id:o,saved_at:new Date().toISOString()}).select().single();if(s)throw s;return a}catch(e){throw u.error("Error adding to favorites:",e),e}}async function et(e,t,r,o){try{let{data:i}=await e.from("users").select("id").or((0,_._$)(t)).single();if(!i)throw Error("User not found");let{error:n}=await e.from("saved_items").delete().eq("user_id",i.id).eq("item_type",r).eq("item_id",o);if(n)throw n}catch(e){throw u.error("Error removing from favorites:",e),e}}async function er(e,t,r,o){try{let{data:i}=await e.from("users").select("id").or((0,_._$)(t)).single();if(!i)throw Error("User not found");let{data:n,error:a}=await e.from("saved_items").select("id").eq("user_id",i.id).eq("item_type",r).eq("item_id",o).limit(1).maybeSingle();if(a)throw a;return!!n}catch(e){return u.error("Error checking if item is favorited:",e),!1}}async function eo(e,t,r,o){try{if(!o.length)return new Set;let{data:i}=await e.from("users").select("id").or((0,_._$)(t)).single();if(!i)throw Error("User not found");let{data:n,error:a}=await e.from("saved_items").select("item_id").eq("user_id",i.id).eq("item_type",r).in("item_id",o);if(a)throw a;return new Set((null==n?void 0:n.map(e=>e.item_id))||[])}catch(e){return u.error("Error checking batch favorites:",e),new Set}}async function ei(e,t){if("boolean"==typeof t)return t;try{let{data:t,error:r}=await e.auth.getUser();if(r)return!1;return!!(null==t?void 0:t.user)}catch(e){return!1}}let en="id, user_id, invited_by, status, joined_at, left_at, created_at, updated_at, first_name, household_id";function ea(e){return e?"".concat(en,", ").concat("invite_email, metadata"):en}async function es(e,t){let r=await ei(e),{data:n,error:a}=await e.from("roommates").select(en).eq("id",t).single();if(u.debug("Roommate data:",n),u.debug("Roommate error:",a),n){if(!r)return void u.debug("Skipping users/profiles debug lookup (not authenticated).");let{data:t,error:a}
1=await e.from("users").select(o).eq("id",n.user_id).single();if(u.debug("User data:",t),u.debug("User error:",a),t){let{data:r,error:o}=await e.from("profiles").select(i).eq("user_id",t.id);u.debug("Profile data:",r),u.debug("Profile error:",o)}}}async function el(e,t){u.debug("Fetching roommate profile:",t);let{data:r,error:o}=await e.from("roommates").select("\n      id,\n      status,\n      user_id,\n      household_id,\n      joined_at,\n      users!roommates_user_id_fkey!inner (\n        profiles (\n          first_name,\n          last_name,\n          gender,\n          dob,\n          work_title,\n          employer,\n          school_name,\n          profile_photo_url,\n          lifestyle_tags,\n          move_in_timeline,\n          rent_min,\n          rent_max,\n          situation,\n          compatibility_score\n        )\n      )\n    ").eq("id",t).single();if(o)return u.error("Error fetching roommate profile:",o),null;if(!(null==r?void 0:r.household_id))return null;let{data:i,error:n}=await e.from("listings").select("id").eq("household_id",r.household_id).eq("status","active").limit(1).maybeSingle();return n?(u.error("Error validating active listing for roommate profile:",{roommateId:t,householdId:r.household_id,error:n}),null):i?r:null}async function ec(e,t,r){var o,i;let n=await ei(e,null==r?void 0:r.includeSensitiveProfileFields),a="\n      id,\n      username,\n      account_type,\n      status,\n      language,\n      timezone,\n      last_online_at,\n      last_login_at,\n      verified_at,\n      created_at,\n      updated_at".concat(n?",\n      clerk_id,\n      email,\n      country_code,\n      contact_number,\n      profile_boost_credits,\n      listing_boost_credits,\n      conversation_limit,\n      active_listing_remaining,\n      active_listing_count,\n      has_active_listing":"","\n    "),s="\n        id,\n        user_id,\n        first_name,\n        last_name,\n        gender,\n        school_name,\n        school_major,\n        lifestyle_tags,\n        profile_photo_url,\n        view_count,\n        search_locations,\n        location_slug,\n        move_in_timeline,\n        situation,\n        compatibility_score,\n        chat_requires_id_verified,\n        chat_requires_safety_screen,\n        badges,\n        is_boosted,\n        created_at,\n        updated_at".concat(n?",\n        dob,\n        work_title,\n        employer,\n        rent_min,\n        rent_max,\n        metadata":"","\n      "),l=ea(n),{data:c,error:d}=await e.from("users").select("\n      ".concat(a,",\n      profile:profiles (").concat(s,"),\n      listings(\n      ").concat("id, user_id, price_per_month, security_deposit, room_type, property_type, bedrooms, bathrooms, availability_date, lease_duration, location, roommate_count, status, view_count, photos, cover_photo_url, videos, roommate_min_age, roommate_max_age, description, match_count, slug, archived_at, snoozed_at, published_at, created_at, updated_at, amenities, neighborhood, display_location, latitude, longitude, situation, roommate_gender, location_path, move_out_date, location_slug, household_id, is_boosted, date_activated, date_deactivated",",\n    user:users!inner (\n      ").concat(a,",\n      profile:profiles (").concat(s,"),\n      business(*)\n    ),\n    household:households(id,\n    roommates(\n      ").concat(l,",\n      invited_by:users!roommates_invited_by_fkey (\n        ").concat(a,",\n        profile:profiles (").concat(s,")\n      ),\n      user:users!roommates_user_id_fkey (\n        ").concat(a,",\n        profile:profiles (").concat(s,")\n      )\n      )\n    )\n    )\n    ")).or("username.eq.".concat(t,",id.eq.").concat(t)).maybeSingle();if(d)return u.error("Error fetching roommate:",d),null;if(!c)return null;let _=Array.isArray(c.profile)?c.profile[0]:c.profile||void 0;return{...c,clerk_id:null!=(o=c.clerk_id)?o:null,auth_user_id:null!=(i=c.auth_user_id)?i:null,profile:_}}async function ed(e,t,r){if(!r)throw Error("Profile not found");let{error:o}=await e.rpc("record_profile_view",{p_viewed_user_id:r});if(o)throw u.error("Error recording profile view:",o),o}async function eu(e,t,r,o,i,n){var a,s,l,c;let{data:d,error:g}=await e.from("users").select("id").or((0,_._$)(t)).limit(1).maybeSingle();if(g)throw g;if(!d)throw Error("Inviter user not found");let f=d.id,m=o.household_id;if(!m){let{data:t,error:o}=await e.from("listings").select("household_id").eq("id",r).maybeSingle();if(o)throw o;m=null==t?void 0:t.household_id}let p="",h=null!=(a=o.invite_email)?a:"",y=null!=(s=o.first_name)?s:"",v=null;if(h){let{data:t,error:r}=await e.from("users").select("id, clerk_id").eq("email",h).limit(1).maybeSingle();if(r)throw r;(null==t?void 0:t.id)&&(p=t.id)}if(m){if(p){let{data:t,error:r}=await e.from("roommates").select(en).eq("household_id",m).eq("user_id",p).order("created_at",{ascending:!1}).limit(1).maybeSingle();if(r)throw r;if(t)return{roommate:t,alreadyExists:!0}}else if(h){let{data:t,error:r}=await e.from("roommates").select(en).eq("invited_by",f).eq("household_id",m).eq("invite_email",h).order("created_at",{ascending:!1}).limit(1).maybeSingle();if(r)throw r;if(t)return{roommate:t,alreadyExists:!0}}}else if(p){let{data:t,error:r}=await e.from("roommates").select(en).eq("invited_by",f).eq("user_id",p).is("household_id",null).order("created_at",{ascending:!1}).limit(1).maybeSingle();if(r)throw r;if(t)return{roommate:t,alreadyExists:!0}}else if(h){let{data:t,error:r}=await e.from("roommates").select(en).eq("invited_by",f).eq("invite_email",h).is("household_id",null).order("created_at",{ascending:!1}).limit(1).maybeSingle();if(r)throw r;if(t)return{roommate:t,alreadyExists:!0}}u.debug("Creating roommate - inviter:",f,"payload:",o,"targetUser:",p);let b={invited_by:f};m&&(b.household_id=m),p?(b.invite_email=h,b.user_id=p,b.status="active"):h&&(b.invite_email=h,b.first_name=null!=y?y:"",b.status="pending");let{data:w,error:S}=await e.from("roommates").insert([b]).select("".concat(ea(!0),",\n       user:users!roommates_user_id_fkey(\n       id, \n       profile:profiles(first_name, profile_photo_url)\n       )\n      ")).maybeSingle();if(S)throw S;if(!p&&i&&n)try{let e="".concat(i.replace(/\/$/,""),"/functions/v1/create-invited-user"),t=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(n)},body:JSON.stringify({email:h,firstName:o.first_name||null})}),r=await t.json();r.success&&r.userId&&!r.alreadyExists&&(v=r.signInToken||null)}catch(e){}let q=null;if(i&&n)try{let t=h;if(!t&&b.user_id){let{data:r,error:o}=await e.from("users").select("email").eq("id",b.user_id).limit(1).maybeSingle();o&&u.warn("Failed to fetch user email:",o),t=null!=(l=null==r?void 0:r.email)?l:null}let{data:a}=await e.from("profiles").select("first_name").eq("user_id",f).limit(1).maybeSingle(),s=null!=(c=null==a?void 0:a.first_name)?c:"Roomi user";if(t){let e="".concat(i.replace(/\/$/,""),"/functions/v1/send-roommate-invite"),a=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(n)},body:JSON.stringify({email:t,inviterName:s,roommateName:o.first_name||null,listingId:r||null,magicLinkToken:v||null})});try{q=await a.json()}catch(e){q={ok:a.ok,status:a.status}}}else q={skipped:!0,reason:"no_email_found_for_target"}}catch(e){u.error("Edge function call failed:",e),q={error:String(e)}}return{roommate:w,sendResult:q}}async function e_(e,t){let r=ea(await ei(e)),{data:o,error:i}=await e.from("roommates").select("\n      ".concat(r,",\n      user:users!roommates_user_id_fkey (\n         id,\n         username,\n         profile:profiles (\n          first_name,\n          profile_photo_url\n      )\n    )\n    ")).eq("invited_by",t).is("household_id",null);return i?(u.error("Error fetching roommate:",i),null):o}async function eg(e,t){let r=await ei(e),{data:o,error:i}=await e.from("roommates").select(ea(r)).eq("user_id",t).eq("status","active").single();return i?("PGRST116"===i.code||u.error("Error fetching roommate by user ID:",i),null):o}async function ef(e,t){let r=ea(await ei(e)),{data:o,error:i}=await e.from("roommates").select("".concat(r,",\n       user:users!roommates_invited_by_fkey (\n         id,\n         username,\n         verified_at,\n         profile:profiles (\n         id,\n          first_name,\n          profile_photo_url\n      )\n    )\n      ")).eq("household_id",t).eq("status","active").single();return i?("PGRST116"===i.code||u.error("Error fetching roommate by household ID:",i),null):o}async function em(e,t){let{data:r,error:o}=await e.from("users").select("id,\n         profile:profiles (\n          first_name,\n          profile_photo_url\n      )\n    )\n      ").eq("email",t).eq("status","active").single();return o?("PGRST116"===o.code||u.error("Error fetching roommate by email:",o),null):r}let ep="id, description, food_rating, public_transport_rating, walkable_safe_rating, rent_value_rating, created_at, updated_at, night_life_rating, photos, location_slug, listing_id, user_id, overall_rating, upvote_count";async function eh(e,t){try{let{data:r,error:o}=await e.from("neighborhoods").select("\n        ".concat(ep,",\n        location:locations!neighborhoods_location_slug_fkey(*),\n        user:users!neighborhoods_user_id_fkey(id, username, profile:profiles(first_name, last_name, profile_photo_url)),\n        upvote(*)\n      ")).eq("id",t).single();if(o&&"PGRST116"!==o.code)return u.error("Error finding neighborhood:",o),null;return r}catch(e){return u.error("Unexpected error finding neighborhood:",e),null}}async function ey(e,t){try{var r,o,i,n,a,s,l,c,d;let _={location_slug:t.location_slug,user_id:t.user_id,listing_id:null!=(r=t.listing_id)?r:null,description:t.description,photos:null!=(o=t.photos)?o:[],food_rating:null!=(i=t.food_rating)?i:null,public_transport_rating:null!=(n=t.public_transport_rating)?n:null,walkable_safe_rating:null!=(a=t.walkable_safe_rating)?a:null,night_life_rating:null!=(s=t.night_life_rating)?s:null,rent_value_rating:null!=(l=t.rent_value_rating)?l:null,overall_rating:null!=(c=t.overall_rating)?c:null,upvote_count:0,metadata:null!=(d=t.metadata)?d:null},{data:g,error:f}=await e.from("neighborhoods").insert([_]).select().single();if(f)return u.error("neighborhood create error:",f),{data:null,error:Error(f.message)};return{data:g,error:null}}catch(e){return u.error("Unexpected createNeighborhood error:",e),{data:null,error:Error("Unexpected error creating neighborhood")}}}async function ev(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10;try{let i=Math.max(0,r),n=Math.max(1,o),{data:a,error:s,count:l}=await e.from("neighborhoods").select("\n        ".concat(ep,",\n        location:locations!neighborhoods_location_slug_fkey(*),\n        user:users!neighborhoods_user_id_fkey(id, username, profile:profiles(first_name, last_name, profile_photo_url)),\n        listing:listings!neighborhoods_listing_id_fkey(id, display_location, cover_photo_url),\n        upvote(*)\n      "),{count:"exact"}).eq("location_slug",t).order("created_at",{ascending:!1}).range(i,i+n-1);if(s)return u.error("Error fetching neighborhoods by location slug:",s),{data:[],count:0,hasMore:!1};return{data:a||[],count:l||0,hasMore:(l||0)>i+n}}catch(e){return u.error("Unexpected error fetching neighborhoods by location slug:",e),{data:[],count:0,hasMore:!1}}}async function eb(e,t){try{let{data:r,error:o}=await e.from("neighborhoods").select("\n        ".concat(ep,",\n        location:locations!neighborhoods_location_slug_fkey(*),\n        user:users!neighborhoods_user_id_fkey(id, username, profile:profiles(first_name, last_name, profile_photo_url)),\n        upvote(*)\n      ")).eq("listing_id",t).order("created_at",{ascending:!1});if(o)return u.error("Error fetching neighborhoods by listing id:",o),[];return r||[]}catch(e){return u.error("Unexpected error fetching neighborhoods by listing id:",e),[]}}async function ew(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:50;try{let o=Math.max(0,t),i=Math.max(1,r),{data:n,error:a,count:s}=await e.from("neighborhoods").select("\n        ".concat(ep,",\n        location:locations!neighborhoods_location_slug_fkey(*)\n      "),{count:"exact"}).order("created_at",{ascending:!1}).range(o,o+i-1);if(a)return u.error("Error fetching neighborhoods:",a),{data:[],count:0,hasMore:!1};return{data:n||[],count:s||0,hasMore:(s||0)>o+i}}catch(e){return u.error("Unexpected error fetching neighborhoods:",e),{data:[],count:0,hasMore:!1}}}async function eS(e,t){try{let{data:r,error:o}=await e.from("neighborhoods").select("\n        ".concat(ep,",\n        location:locations!neighborhoods_location_slug_fkey(*),\n        user:users!neighborhoods_user_id_fkey(id, username, profile:profiles(first_name, last_name, profile_photo_url)),\n        listing:listings!neighborhoods_listing_id_fkey(id, display_location, cover_photo_url),\n        upvote(*)\n      ")).eq("id",t).single();if(o)return"PGRST116"!==o.code&&u.error("Error fetching neighborhood:",o),null;return r}catch(e){return u.error("Unexpected error fetching neighborhood:",e),null}}async function eq(e,t,r){try{let o={updated_at:new Date().toISOString()};void 0!==r.description&&(o.description=r.description),void 0!==r.photos&&(o.photos=r.photos),void 0!==r.food_rating&&(o.food_rating=r.food_rating),void 0!==r.public_transport_rating&&(o.public_transport_rating=r.public_transport_rating),void 0!==r.walkable_safe_rating&&(o.walkable_safe_rating=r.walkable_safe_rating),void 0!==r.night_life_rating&&(o.night_life_rating=r.night_life_rating),void 0!==r.rent_value_rating&&(o.rent_value_rating=r.rent_value_rating),void 0!==r.overall_rating&&(o.overall_rating=r.overall_rating),void 0!==r.metadata&&(o.metadata=r.metadata);let{data:i,error:n}=await e.from("neighborhoods").update(o).eq("id",t).select().single();if(n)return u.error("updateNeighborhood error:",n),{data:null,error:Error(n.message)};return{data:i,error:null}}catch(e){return u.error("Unexpected updateNeighborhood error:",e),{data:null,error:Error("Unexpected error updating")}}}async function eE(e,t){try{if(!t||0===t.length)return[];let r=Array.from(new Set(t.filter(Boolean)));if(0===r.length)return[];let{data:o,error:i}=await e.from("neighborhoods").select("\n        ".concat(ep,",\n        location:locations!neighborhoods_location_slug_fkey(*),\n        user:users!neighborhoods_user_id_fkey(id, username, profile:profiles(first_name, last_name, profile_photo_url)),\n        upvote(*)\n      ")).in("id",r);
1if(i)return u.error("Error fetching neighborhoods by IDs:",i),[];return o||[]}catch(e){return u.error("Unexpected error fetching neighborhoods by IDs:",e),[]}}async function eI(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:6;try{let i=Math.max(0,r),n=Math.max(1,o),{data:a,error:s,count:l}=await e.from("neighborhoods").select("\n        ".concat(ep,",\n        location:locations!neighborhoods_location_slug_fkey(*),\n        user:users!neighborhoods_user_id_fkey(\n          id,\n          status,\n          last_online_at,\n          profile:profiles (\n            id,\n            first_name,\n            last_name,\n            profile_photo_url,\n            gender\n          )\n        ),\n        listing:listings!neighborhoods_listing_id_fkey(\n          id,\n          display_location,\n          cover_photo_url,\n          price_per_month,\n          status\n        ),\n        upvote(*)\n      "),{count:"exact"}).eq("location_slug",t).order("created_at",{ascending:!1}).range(i,i+n-1);if(s)return u.error("Error fetching neighborhoods for location slug (paged):",s),{data:[],count:0,hasMore:!1};return{data:a||[],count:l||0,hasMore:(l||0)>i+n}}catch(e){return u.error("Unexpected searchNeighborhoodsByLocationSlug error:",e),{data:[],count:0,hasMore:!1}}}async function ek(e,t,r,o){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:6;try{let s=r(t),l=o(s).city||s.replace(/-.*/,"").trim(),{data:c}=await e.from("neighborhoods").select("id").eq("location_slug",t),d=new Set((c||[]).map(e=>e.id)),{data:_}=await e.from("locations").select("slug").ilike("display_location","%".concat(l,"%"));if(!_||0===_.length)return{data:[],count:0,hasMore:!1};let g=_.map(e=>e.slug).filter(e=>e!==t);if(0===g.length)return{data:[],count:0,hasMore:!1};let{data:f,error:m}=await e.from("neighborhoods").select("\n        ".concat(ep,",\n        location:locations!neighborhoods_location_slug_fkey(*),\n        listing:listings!neighborhoods_listing_id_fkey(price_per_month, display_location)\n      ")).in("location_slug",g);if(m)return u.error("Error fetching similar neighborhoods:",m),{data:[],count:0,hasMore:!1};let p=(f||[]).filter(e=>!d.has(e.id)),h=new Map;for(let e of p)if(!h.has(e.id)){var a;let t=e.listing,r=(null==t?void 0:t.price_per_month)?Number(t.price_per_month):NaN;h.set(e.id,{neighborhood:e,priceSum:Number.isNaN(r)?0:r,priceCnt:+!Number.isNaN(r),location:(null==t?void 0:t.display_location)||(null==(a=e.location)?void 0:a.display_location)})}let y=Array.from(h.values()).map(e=>({neighborhood:e.neighborhood,rooms:1,average_rent:e.priceCnt>0?Math.round(e.priceSum/e.priceCnt*100)/100:null,location:e.location||null})),v=y.length,b=y.slice(i,i+n),w=i+n<v;return{data:b,count:v,hasMore:w}}catch(e){return u.error("Unexpected searchSimilarNeighborhoodsByLocationSlug error:",e),{data:[],count:0,hasMore:!1}}}async function eU(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:6;try{let i=t.replace(/-/g," ").trim(),n=Math.max(0,r),a=Math.max(1,o),{data:s,error:l}=await e.from("listings").select("id, price_per_month, location_slug").eq("status","active").textSearch("search_tsv",i,{type:"plain",config:"english"});if(l)return u.error("Error fetching listings:",l),{data:[],count:0,hasMore:!1};if(!s||0===s.length)return{data:[],count:0,hasMore:!1};let c=s.reduce((e,t)=>{let r=Array.isArray(t.location_slug)?t.location_slug[0]:t.location_slug;if(!r)return e;let o=e.get(r)||{total_listings:0,total_price:0,price_count:0};o.total_listings+=1;let i=Number(t.price_per_month);return isNaN(i)||(o.total_price+=i,o.price_count+=1),e.set(r,o),e},new Map),d=Array.from(c.keys()),{data:_,error:g}=await e.from("locations").select("*").in("slug",d);if(g)return u.error("Error fetching locations:",g),{data:[],count:0,hasMore:!1};let f=(_||[]).map(e=>{let t=c.get(e.slug);if(!t)return null;let r=t.price_count>0?Math.round(t.total_price/t.price_count*100)/100:0;return{location:e,total_listings:t.total_listings,avg_rent:r}}).filter(e=>null!==e),m=f.length,p=f.slice(n,n+a),h=n+a<m;return{data:p,count:m,hasMore:h}}catch(e){return u.error("Unexpected error in searchSimilarLocationsBySlug:",e),{data:[],count:0,hasMore:!1}}}async function ex(e,t,r){try{var o;let{data:i}=await e.from("upvote").select("*").eq("neighborhood_id",r).eq("user_id",t).maybeSingle();if(i)return i;let{data:n}=await e.from("upvote").select("count").eq("neighborhood_id",r).order("created_at",{ascending:!1}).maybeSingle(),a=(null!=(o=null==n?void 0:n.count)?o:0)+1,{data:s,error:l}=await e.from("upvote").insert({neighborhood_id:r,user_id:t,count:a}).select().single();if(l)return u.error("Error creating upvote:",l),{data:null,error:Error(l.message)};return await e.from("neighborhoods").update({upvote_count:a}).eq("id",r),s}catch(e){return u.error("Unexpected error creating upvote:",e),{data:null,error:Error("Unexpected error creating upvote")}}}async function eB(e,t,r){try{if(!r)throw Error("User not found");let{data:o}=await e.from("upvote").select("*").eq("neighborhood_id",t).eq("user_id",r).maybeSingle();return o}catch(e){return u.error("Unexpected error getting upvote:",e),{data:null,error:Error("Unexpected error getting upvote")}}}async function eN(e,t){try{let{data:r}=await e.from("neighborhoods").select("upvote_count").eq("id",t).single();if((null==r?void 0:r.upvote_count)!==null&&(null==r?void 0:r.upvote_count)!==void 0)return r.upvote_count;let{data:o,error:i}=await e.from("upvote").select("count").eq("neighborhood_id",t).order("created_at",{ascending:!1}).limit(1).maybeSingle();if(i)return u.error("Error fetching recent upvote row:",i),null;if(!o||null==o.count)return 0;let n="number"==typeof o.count?o.count:Number(o.count);return Number.isFinite(n)?n:0}catch(e){return u.error("Unexpected error getting upvote count:",e),null}}async function eO(e,t,r,o){try{let{data:i}=await e.from("neighborhoods").select("id, description, food_rating, public_transport_rating, walkable_safe_rating, rent_value_rating, created_at, updated_at, night_life_rating, photos, location_slug, listing_id, user_id, overall_rating, upvote_count").eq("location_slug",t).eq("user_id",r).maybeSingle();if(i)return{data:i,error:null};return await ey(e,{...o,location_slug:t,user_id:r})}catch(e){return u.error("Unexpected error in findOrCreateNeighborhoodForLocation:",e),{data:null,error:Error("Unexpected error finding or creating neighborhood")}}}async function eP(e,t,r){if("user"===t){let{data:t}=await e.from("users").select("id").eq("id",r).single();return!!t}if("listing"===t){let{data:t}=await e.from("listings").select("id").eq("id",r).single();return!!t}return!1}async function eA(e,t,r){let{data:o}=await e.from("users").select("id").or((0,_._$)(t)).single();if(!o)throw Error("User not found");if(!await eP(e,r.target_type,r.target_id))throw Error("".concat(r.target_type," with ID ").concat(r.target_id," not found"));let{data:i,error:n}=await e.from("reports").insert([{reporter_user_id:o.id,target_type:r.target_type,target_id:r.target_id,reason_category:r.reason_category,description:r.description,status:"pending",metadata:r.metadata}]).select().single();if(n)throw n;return i}let eM="Boost request timed out. Please try again in a few seconds.",eL="id, user_id, target_type, target_id, active_period, status, created_at, updated_at";function eR(e){return(null==e?void 0:e.code)==="57014"}async function eC(e,t){try{let{data:r,error:o}=await e.from("users").select("id, profile_boost_credits, listing_boost_credits").or((0,_._$)(t)).maybeSingle();if(o)return u.error("Error fetching user for boost credits:",o),null;if(!r)return u.error("User not found for auth ID:",t),null;return{profile_boost_credits:r.profile_boost_credits||0,listing_boost_credits:r.listing_boost_credits||0}}catch(e){return u.error("Error in getBoostCredits:",e),null}}async function eT(e,t,r){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"web";try{let{data:i,error:n}=await e.from("users").select("id, profile_boost_credits, listing_boost_credits").or((0,_._$)(t)).maybeSingle();if(n){if(u.error("Error fetching user for boost creation:",n),eR(n))return{success:!1,error:eM};return{success:!1,error:"Failed to fetch user data"}}if(!i)return u.error("User not found for auth ID:",t),{success:!1,error:"User not found"};let a=i.id,s={profile_boost_credits:i.profile_boost_credits||0,listing_boost_credits:i.listing_boost_credits||0},l=(r.target_type,1),c="profile"===r.target_type?s.profile_boost_credits:s.listing_boost_credits;if(c<l)return{success:!1,error:"Insufficient ".concat(r.target_type," boost credits")};let{data:d,error:g}=await e.from("boosts").select("id, status, active_period").eq("target_type",r.target_type).eq("target_id",r.target_id).eq("status","active");if(g){if(u.error("Error checking existing boosts:",g),eR(g))return{success:!1,error:eM};return{success:!1,error:"Failed to check existing boosts"}}if(d&&d.length>0)if(!r.replace_existing)return{success:!1,error:"There is already an active ".concat(r.target_type," boost for this target. Please wait for it to expire or cancel it first.")};else for(let r of d){let o=await ej(e,r.id,t);if(!o.success)return u.error("Failed to cancel existing boost:",o.error),{success:!1,error:"Failed to cancel existing boost: ".concat(o.error)}}let f=r.duration_hours||24,m=new Date,p=new Date(m.getTime()+60*f*6e4),h=()=>e.from("boosts").insert({user_id:a,target_type:r.target_type,target_id:r.target_id,active_period:"[".concat(m.toISOString(),",").concat(p.toISOString(),"]"),status:"active",platform:o,metadata:{duration_hours:f,created_at:m.toISOString()}}).select(eL).single(),{data:y,error:v}=await h();if(eR(v)){let{data:t}=await e.from("boosts").select(eL).eq("target_type",r.target_type).eq("target_id",r.target_id).eq("user_id",a).eq("status","active").maybeSingle();t?(y=t,v=null):{data:y,error:v}=await h()}if(v){if(u.error("Error creating boost:",v),eR(v))return{success:!1,error:eM};return{success:!1,error:"Failed to create boost"}}if(!y)return{success:!1,error:"Failed to create boost"};let b="profile"===r.target_type?"profile_boost_credits":"listing_boost_credits",{data:w,error:S}=await e.from("users").update({[b]:c-l}).eq("id",a).gte(b,l).select(b).single();if(S||!w){u.error("Error deducting credits:",S);let{error:t}=await e.from("boosts").delete().eq("id",y.id);return t&&u.error("Failed to rollback boost creation:",t),{success:!1,error:S?"Failed to deduct credits":"Insufficient credits (concurrent request may have used them)"}}return{success:!0,boost:y}}catch(e){return u.error("Error in createBoost:",e),{success:!1,error:"An unexpected error occurred"}}}async function eD(e,t){try{let{data:r,error:o}=await e.from("users").select("id").or((0,_._$)(t)).maybeSingle();if(o)return u.error("Error fetching user for boosts:",o),[];if(!r)return u.error("User not found for auth ID:",t),[];let n=r.id,{data:a,error:s}=await e.from("boosts").select(eL).eq("user_id",n).in("status",["active","scheduled"]).order("created_at",{ascending:!1});if(s)return u.error("Error fetching user boosts:",s),[];if(!a||0===a.length)return[];let l=a.filter(e=>"profile"===e.target_type),c=a.filter(e=>"listing"===e.target_type),d=[];if(l.length>0){let t=l.map(e=>e.target_id),{data:r,error:o}=await e.from("profiles").select(i).in("id",t);o?u.error("Error fetching profile data:",o):d=r||[]}let g=[];if(c.length>0){let t=c.map(e=>e.target_id),{data:r,error:o}=await e.from("listings").select("id, user_id, price_per_month, security_deposit, room_type, property_type, bedrooms, bathrooms, availability_date, lease_duration, location, roommate_count, status, view_count, photos, cover_photo_url, videos, roommate_min_age, roommate_max_age, description, match_count, slug, archived_at, snoozed_at, published_at, created_at, updated_at, amenities, neighborhood, display_location, latitude, longitude, situation, roommate_gender, location_path, move_out_date, location_slug, household_id, is_boosted, date_activated, date_deactivated").in("id",t);o?u.error("Error fetching listing data:",o):g=r||[]}return a.map(e=>{let t={...e};return"profile"===e.target_type?t.profile=d.find(t=>
1t.id===e.target_id):"listing"===e.target_type&&(t.listing=g.find(t=>t.id===e.target_id)),t})}catch(e){return u.error("Error in getUserBoosts:",e),[]}}async function eF(e,t,r){try{let o=new Date().toISOString(),{data:i,error:n}=await e.from("boosts").select(eL).eq("target_type",t).eq("target_id",r).eq("status","active").overlaps("active_period","[".concat(o,",)")).order("created_at",{ascending:!1});if(n)return u.error("Error fetching active boosts:",n),[];return i||[]}catch(e){return u.error("Error in getActiveBoosts:",e),[]}}async function ej(e,t,r){try{let{data:o,error:i}=await e.from("users").select("id").or((0,_._$)(r)).maybeSingle();if(i)return u.error("Error fetching user for boost cancellation:",i),{success:!1,error:"Failed to fetch user data"};if(!o)return u.error("User not found for auth ID:",r),{success:!1,error:"User not found"};let n=o.id,{data:a,error:s}=await e.from("boosts").select(eL).eq("id",t).eq("user_id",n).maybeSingle();if(s)return u.error("Error fetching boost for cancellation:",s),{success:!1,error:"Failed to fetch boost"};if(!a)return{success:!1,error:"Boost not found or access denied"};if(!["active","scheduled"].includes(a.status))return{success:!1,error:"Cannot cancel this boost"};let{error:l}=await e.from("boosts").update({status:"cancelled",updated_at:new Date().toISOString()}).eq("id",t);if(l)return u.error("Error cancelling boost:",l),{success:!1,error:"Failed to cancel boost"};if("active"===a.status){let t="profile"===a.target_type?"profile_boost_credits":"listing_boost_credits",o=await eC(e,r);if(o){let r="profile"===a.target_type?o.profile_boost_credits:o.listing_boost_credits,i=(a.target_type,1),{error:s}=await e.from("users").update({[t]:r+i}).eq("id",n);s&&u.error("Error refunding credits:",s)}}return{success:!0}}catch(e){return u.error("Error in cancelBoost:",e),{success:!1,error:"An unexpected error occurred"}}}async function e$(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;try{if(0===r&&0===o)return{success:!1,error:"No credits to add"};let i=await eC(e,t);if(!i)return{success:!1,error:"Failed to fetch current credits"};let{data:n,error:a}=await e.from("users").select("id").or((0,_._$)(t)).maybeSingle();if(a)return u.error("Error fetching user for adding credits:",a),{success:!1,error:"Failed to fetch user data"};if(!n)return u.error("User not found for auth ID:",t),{success:!1,error:"User not found"};let s=n.id,l={};r>0&&(l.profile_boost_credits=i.profile_boost_credits+r),o>0&&(l.listing_boost_credits=i.listing_boost_credits+o);let{error:c}=await e.from("users").update(l).eq("id",s);if(c)return u.error("Error adding boost credits:",c),{success:!1,error:"Failed to add credits"};return{success:!0}}catch(e){return u.error("Error in addBoostCredits:",e),{success:!1,error:"An unexpected error occurred"}}}async function ez(e,t,r){try{return(await eF(e,t,r)).length>0}catch(e){return u.error("Error in isTargetBoosted:",e),!1}}async function eG(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:30;try{let{data:o,error:i}=await e.from("users").select("id").or((0,_._$)(t)).maybeSingle();if(i)return u.error("Error fetching user for analytics:",i),{totalBoosts:0,activeBoosts:0,profileBoosts:0,listingBoosts:0,totalCreditsUsed:0};if(!o)return u.error("User not found for auth ID:",t),{totalBoosts:0,activeBoosts:0,profileBoosts:0,listingBoosts:0,totalCreditsUsed:0};let n=o.id,a=new Date;a.setDate(a.getDate()-r);let{data:s,error:l}=await e.from("boosts").select("target_type, status, created_at").eq("user_id",n).gte("created_at",a.toISOString());if(l)return u.error("Error fetching boost analytics:",l),{totalBoosts:0,activeBoosts:0,profileBoosts:0,listingBoosts:0,totalCreditsUsed:0};let c=s||[],d=c.filter(e=>"active"===e.status).length,g=c.filter(e=>"profile"===e.target_type).length,f=c.filter(e=>"listing"===e.target_type).length;return{totalBoosts:c.length,activeBoosts:d,profileBoosts:g,listingBoosts:f,totalCreditsUsed:c.length}}catch(e){return u.error("Error in getBoostAnalytics:",e),{totalBoosts:0,activeBoosts:0,profileBoosts:0,listingBoosts:0,totalCreditsUsed:0}}}async function eH(e,t){try{let{data:r,error:o}=await e.from("boosts").select("active_period, status").eq("id",t).single();if(o||!r)return null;let i=r.active_period.match(/\[([^,]+),([^)]+)\)/);if(!i)return{isExpired:!0};let n=new Date(i[2]),a=new Date,s=a>=n||"expired"===r.status,l=s?0:n.getTime()-a.getTime();return{isExpired:s,expiresAt:n,timeRemaining:l}}catch(e){return u.error("Error in getBoostExpirationInfo:",e),null}}function eY(e){if(e<=0)return"Expired";let t=Math.floor(e/864e5),r=Math.floor(e%864e5/36e5),o=Math.floor(e%36e5/6e4);return t>0?"".concat(t,"d ").concat(r,"h"):r>0?"".concat(r,"h ").concat(o,"m"):"".concat(o,"m")}function eJ(e){return e>0&&e<=36e5}function eV(e){return e.replace(/%/g,"\\%").replace(/_/g,"\\_")}async function eX(e,t,r){let o=t*r,{data:i,count:n,error:a}=await e.from("users").select("id, clerk_id, email, status, last_login_at, created_at, profile:profiles(first_name, last_name, profile_photo_url)",{count:"exact"}).order("created_at",{ascending:!1}).range(o,o+r-1);if(a)throw u.error("adminListUsers error:",a),a;return{data:(i||[]).map(e=>({...e,profile:Array.isArray(e.profile)?e.profile[0]||null:e.profile})),count:n||0}}async function eW(e,t){let{query:r,field:o,page:i,pageSize:n}=t,a=i*n;if("first_name"===o||"last_name"===o){let t=e.from("profiles").select("\n        user_id,\n        first_name,\n        last_name,\n        profile_photo_url,\n        user:users!inner(id, clerk_id, email, status, last_login_at, created_at)\n      ",{count:"exact"}).ilike(o,"%".concat(eV(r),"%")).order("created_at",{ascending:!1,referencedTable:"users"}).range(a,a+n-1),{data:i,count:s,error:l}=await t;if(l)throw u.error("adminSearchUsers (name) error:",l),l;return{data:(i||[]).map(e=>{var t,r,o,i,n,a;return{id:null==(t=e.user)?void 0:t.id,clerk_id:null==(r=e.user)?void 0:r.clerk_id,email:null==(o=e.user)?void 0:o.email,status:null==(i=e.user)?void 0:i.status,last_login_at:null==(n=e.user)?void 0:n.last_login_at,created_at:null==(a=e.user)?void 0:a.created_at,profile:{first_name:e.first_name,last_name:e.last_name,profile_photo_url:e.profile_photo_url}}}),count:s||0}}let s=e.from("users").select("id, clerk_id, email, status, last_login_at, created_at, profile:profiles(first_name, last_name, profile_photo_url)",{count:"exact"});"email"===o?s=s.ilike("email","%".concat(eV(r),"%")):"id"===o&&(s=s.eq("id",r));let{data:l,count:c,error:d}=await s.order("created_at",{ascending:!1}).range(a,a+n-1);if(d)throw u.error("adminSearchUsers error:",d),d;return{data:(l||[]).map(e=>({...e,profile:Array.isArray(e.profile)?e.profile[0]||null:e.profile})),count:c||0}}async function eQ(e,t){let{data:r,error:o}=await e.from("users").select("\n      *,\n      profile:profiles(*),\n      business:business(*)\n    ").eq("id",t).single();if(o){if("PGRST116"===o.code)return null;throw u.error("adminGetUserDetail error:",o),o}return Array.isArray(r.profile)&&(r.profile=r.profile[0]||null),Array.isArray(r.business)&&(r.business=r.business[0]||null),r}async function eZ(e,t,r){let{data:o,error:i}=await e.from("users").update({...r,updated_at:new Date().toISOString()}).eq("id",t).select().single();if(i)throw u.error("adminUpdateUser error:",i),i;return o}async function eK(e,t,r){let{data:o,error:i}=await e.from("profiles").update({...r,updated_at:new Date().toISOString()}).eq("user_id",t).select().single();if(i)throw u.error("adminUpdateProfile error:",i),i;return o}async function e0(e,t){let{data:r,error:o}=await e.from("listings").select("id, user_id, price_per_month, security_deposit, room_type, property_type, bedrooms, bathrooms, availability_date, lease_duration, location, roommate_count, status, view_count, photos, cover_photo_url, videos, roommate_min_age, roommate_max_age, description, match_count, slug, archived_at, snoozed_at, published_at, created_at, updated_at, amenities, neighborhood, display_location, latitude, longitude, situation, roommate_gender, location_path, move_out_date, location_slug, household_id, is_boosted, date_activated, date_deactivated").eq("user_id",t).order("created_at",{ascending:!1});if(o)throw u.error("adminGetUserListings error:",o),o;return r||[]}async function e1(e,t){let{data:r,error:o}=await e.from("subscriptions").select("*").eq("user_id",t).order("created_at",{ascending:!1});if(o)throw u.error("adminGetUserSubscriptions error:",o),o;return r||[]}async function e2(e,t,r){let{data:o,error:i}=await e.from("subscriptions").update({...r,updated_at:new Date().toISOString()}).eq("id",t).select().single();if(i)throw u.error("adminUpdateSubscription error:",i),i;return o}async function e3(e,t){let{data:r,error:o}=await e.from("verifications").select("*").eq("user_id",t).order("created_at",{ascending:!1});if(o)throw u.error("adminGetUserVerifications error:",o),o;return r||[]}async function e6(e,t){let{data:r,error:o}=await e.from("boosts").select("id, user_id, target_type, target_id, active_period, status, created_at, updated_at").eq("user_id",t).order("created_at",{ascending:!1});if(o)throw u.error("adminGetUserBoosts error:",o),o;return r||[]}async function e5(e,t){var r,o,i,n,a,s;let{data:l,error:c}=await e.rpc("admin_list_events",{p_start:null!=(r=t.start)?r:null,p_end:null!=(o=t.end)?o:null,p_event_types:t.eventTypes&&t.eventTypes.length?t.eventTypes:null,p_platform:null!=(i=t.platform)?i:null,p_user_query:null!=(n=t.userQuery)?n:null,p_limit:t.pageSize,p_offset:t.page*t.pageSize});if(c)throw u.error("adminListEvents error:",c),c;let d=null!=l?l:{};
1return{data:null!=(a=d.rows)?a:[],count:null!=(s=d.total)?s:0}}async function e4(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:24,{data:r,error:o}=await e.rpc("admin_events_summary",{p_hours:t});if(o)throw u.error("adminEventsSummary error:",o),o;return r}async function e9(e,t,r,o){let{data:i,error:n}=await e.rpc("admin_metric_funnel",{p_start:t,p_end:null!=r?r:null,p_platforms:o&&o.length?o:null});if(n)throw u.error("adminMetricFunnel error:",n),n;return i}},2479:(e,t,r)=>{r.d(t,{A:()=>a,v:()=>n});var o=r(86584);function i(e){for(var t=arguments.length,r=Array(t>1?t-1:0),i=1;i<t;i++)r[i-1]=arguments[i];if("error"===e){let[e,...t]=r;e instanceof Error?o.captureException(e,{extra:{args:t}}):o.captureMessage(String(e),{level:"error",extra:{args:t}})}}let n={debug:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return i("debug",...t)},info:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return i("info",...t)},warn:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return i("warn",...t)},error:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return i("error",...t)}},a=n},12298:(e,t,r)=>{r.d(t,{_$:()=>i});let o=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function i(e){return o.test(e)?"auth_user_id.eq.".concat(e):"clerk_id.eq.".concat('"'.concat(e.replace(/\\/g,"\\\\").replace(/"/g,'\\"'),'"'))}},29523:(e,t,r)=>{let o;r.d(t,{UU:()=>u,cT:()=>s});var i=r(85553),n=r(16010);r(2479);var a=r(95704);function s(){return o||(o=(0,n.createBrowserClient)("https://lsanbwveslfrswppjuaa.supabase.co","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImxzYW5id3Zlc2xmcnN3cHBqdWFhIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjI4NjE0MDEsImV4cCI6MjA3ODQzNzQwMX0.xcOaMkQSYQpgbUzwIh-ilFLGsRXUrbtpsaAnZNR3M_M")),o}function l(e){return"SUPABASE_URL"===e?a.env.EXPO_PUBLIC_SUPABASE_URL||"https://lsanbwveslfrswppjuaa.supabase.co":"SUPABASE_ANON_KEY"===e?a.env.EXPO_PUBLIC_SUPABASE_ANON_KEY||"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImxzYW5id3Zlc2xmcnN3cHBqdWFhIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjI4NjE0MDEsImV4cCI6MjA3ODQzNzQwMX0.xcOaMkQSYQpgbUzwIh-ilFLGsRXUrbtpsaAnZNR3M_M":void 0}let c=null,d=null;function u(){if(function(){let e=l("SUPABASE_URL");return!!d&&d!==e}()&&(c=null),c)return c;let e=l("SUPABASE_URL"),t=l("SUPABASE_ANON_KEY");if(!e||!t)throw Error("Supabase URL and Anon Key are required. Make sure NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY are set.");return d=e,c=(0,i.UU)(e,t)}},86584:(e,t,r)=>{function o(e){}function i(e,t){}function n(e,t){}function a(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r]}function s(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r]}function l(){return[]}function c(e){return[]}r.r(t),r.d(t,{browserTracingIntegration:()=>l,captureException:()=>i,captureMessage:()=>n,captureRequestError:()=>a,captureRouterTransitionStart:()=>s,init:()=>
1o,replayIntegration:()=>c})}}]);

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.