1import{i as e,n as t,t as n}from"./supabase-DltNv4GG.js";async function r(t){if(!e)return null;let n=Date.now(),{data:r,error:i}=await e.rpc(`rerun_state`,{p_channel:t});if(i||!r)return null;let a=Array.isArray(r.items)?r.items.map(e=>({id:String(e.id),title:e.title??null,url:String(e.url),duration:Number(e.duration)})).filter(e=>e.url&&Number.isFinite(e.duration)&&e.duration>0):[],o=n+(Date.now()-n)/2,s=new Date(String(r.server_now)).getTime();return{channel:String(r.channel),epoch:String(r.epoch),items:a,total:a.reduce((e,t)=>e+t.duration,0),skewMs:Number.isFinite(s)?s-o:0}}function i(e,t=Date.now()){if(!e.items.length||e.total<=0)return null;let n=new Date(e.epoch).getTime();if(!Number.isFinite(n))return null;let r=((t+e.skewMs-n)/1e3%e.total+e.total)%e.total;for(let t=0;t<e.items.length;t++){let n=e.items[t].duration;if(r<n)return{index:t,item:e.items[t],offset:r,remaining:n-r};r-=n}let i=e.items.length-1;return{index:i,item:e.items[i],offset:e.items[i].duration,remaining:0}}async function a(t){if(!e)return null;let[n,r]=await Promise.all([e.from(`channel_rerun`).select(`enabled, epoch`).eq(`channel_id`,t).maybeSingle(),e.from(`rerun_media`).select(`duration`).eq(`channel_id`,t)]);if(r.error)return null;let i=r.data??[];return{enabled:!!n.data?.enabled,epoch:n.data?.epoch??null,items:i.length,runtime:i.reduce((e,t)=>e+(Number(t.duration)||0),0)}}async function o(t){if(!e)return{ok:!1,reason:`no backend`};let{data:n,error:r}=await e.rpc(`set_my_rerun`,{p_on:t});if(r)return{ok:!1,reason:r.message};let i=n??{};return{ok:!!i.ok,reason:i.reason??void 0,items:i.items??void 0}}async function s(){if(!e)return null;let{data:t,error:n}=await e.rpc(`my_rerun_access`);if(n||!t||!t.signed_in)return null;let r=t;return{active:!!r.active,comp:!!r.comp,status:r.status??null,periodEnd:r.current_period_end??null,cancelAtPeriodEnd:!!r.cancel_at_period_end,bytes:Number(r.bytes)||0,items:Number(r.items)||0}}async function c(t){if(!e)return null;let{data:n}=await e.from(`addon_prices`).select(`amount_cents`).eq(`addon`,t).maybeSingle();return n?Number(n.amount_cents):null}async function l(r){if(!e)return{error:`no backend`};let{data:{session:i}}=await e.auth.getSession();if(!i)return{error:`sign in first`};let a=t,o=n;if(!a||!o)return{error:`no backend`};try{let e=await fetch(`${a}/functions/v1/rerun`,{method:`POST`,headers:{"Content-Type":`application/json`,apikey:o,Authorization:`Bearer ${i.access_token}`},body:JSON.stringify(r)}),t=await e.json().catch(()=>({}));return e.ok?t:{error:t.error??`something went wrong`}}catch{return{error:`could not reach the server`}}}var u=()=>l({action:`checkout`}),d=e=>l({action:`confirm`,sessionId:e}),f=()=>l({action:`portal`}),p=e=>l({action:`delete`,id:e}),m=[`video/mp4`,`video/webm`],h=4*1024**3,g=100*1024**3;function _(e){return new Promise(t=>{let n=document.createElement(`video`);n.preload=`metadata`,n.muted=!0;let r=URL.createObjectURL(e),i=e=>{URL.revokeObjectURL(r),n.removeAttribute(`src`),t(e)};n.onloadedmetadata=()=>i(Number.isFinite(n.duration)?n.duration:0),n.onerror=()=>i(0),n.src=r})}async function v(e,t){if(!m.includes(e.type))return{error:`upload an MP4 or WebM video`};if(e.size>h)return{error:`one file can be up to 4 GB`};let n=await _(e);if(n<1)return{error:`that video could not be read. Try an MP4 (H.264)`};let r=await l({action:`presign`,type:e.type,bytes:e.size,title:e.name});if(`error`in r)return r;if(!await new Promise(n=>{let i=new XMLHttpRequest;i.open(`PUT`,r.url),i.setRequestHeader(`Content-Type`,e.type),i.upload.onprogress=e=>{e.lengthComputable&&t(e.loaded/e.total)},i.onload=()=>n(i.status>=200&&i.status<300),i.onerror=()=>n(!1),i.send(e)}))return{error:`the upload did not finish`};let i=await l({action:`finalize`,key:r.key,duration:n});return`error`in i?i:{ok:!0}}async function y(t){if(!e)return[];let{data:n}=await e.from(`rerun_media`).select(`id, title, duration, bytes, url`).eq(`channel_id`,t).order(`pos`,{ascending:!0}).order(`id`,{ascending:!0});return(n??[]).map(e=>({id:String(e.id),title:e.title??null,duration:Number(e.duration)||0,bytes:Number(e.bytes)||0,url:String(e.url)}))}export{y as a,r as c,o as d,u as f,c as i,f as l,d as n,a as o,v as p,p as r,s,g as t,i as u};
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.