1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7761],{6921:(t,e,a)=>{a.d(e,{Av:()=>n,qA:()=>r});let o="probe_last_used_auth";function n(t){try{let e={provider:t,timestamp:new Date().toISOString()};localStorage.setItem(o,JSON.stringify(e))}catch(t){console.warn("Failed to store last used auth provider:",t)}}function r(){try{let t=localStorage.getItem(o);if(t){let e=JSON.parse(t),a=new Date(e.timestamp),o=new Date;if(o.setDate(o.getDate()-30),a>o)return e.provider}}catch(t){console.warn("Failed to retrieve last used auth provider:",t)}return null}},47327:(t,e,a)=>{a.d(e,{aU:()=>m});var o=a(6921);let n="localhost"===window.location.hostname||window.location.hostname.includes("127.0.0.1")||window.location.hostname.includes("vercel.app")||window.location.hostname.includes("probe.dev"),r=t=>n&&(t.startsWith("/statistics/")||t.startsWith("/user/current")||t.startsWith("/media/log"))?"/api/internal".concat(t):"".concat("https://api.probe.dev/frontend/api/v1").concat(t),i=null,s=!1,l=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;try{let t=localStorage.getItem("probe_jwt_token"),e=localStorage.getItem("probe_jwt_expire");if(t&&e){if(new Date(e)>new Date){i=t,s=!0;return}localStorage.removeItem("probe_jwt_token"),localStorage.removeItem("probe_jwt_expire"),localStorage.removeItem("probe_user_email"),localStorage.removeItem("probe_api_token"),i=null,s=!0;return}s=!0}catch(e){console.warn("Failed to load stored token:",e),t<3?setTimeout(()=>l(t+1),100*(t+1)):s=!0}},c=!1,d=0,u=async()=>{if(c)return console.log("â³ Token refresh already in progress, skipping..."),!1;let t=Date.now();if(t-d<3e4)return console.log("â³ Token refresh on cooldown, skipping..."),!1;try{if(!i)return console.warn("No existing JWT token to refresh"),!1;c=!0,d=t;let e=await fetch(r("/auth/jwt"),{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(i)},body:JSON.stringify({"long-term-token":!0,permissions:["read:admin","read:billing","read:invite","read:media","read:profile","read:statistics","read:sub-user","read:user"]})});if(!e.ok){let t=await e.text();return console.warn("Failed to refresh JWT token:",e.status,"-",t),!1}let a=await e.json();if(a.token&&a.expire)return i=a.token,localStorage.setItem("probe_jwt_token",a.token),localStorage.setItem("probe_jwt_expire",a.expire),console.log("â
JWT token refreshed with updated permissions"),!0;return!1}catch(t){return console.warn("Error refreshing JWT token:",t),!1}finally{c=!1}},p=async()=>{s||(l(),!s&&(await new Promise(t=>setTimeout(t,200)),s||l()))};async function g(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};await p();let a=r(t),o={"Content-Type":"application/json",...e.headers||{}};i&&(o.Authorization="Bearer ".concat(i));let n=await fetch(a,{...e,headers:o});if(!n.ok){let t=await n.text();throw Error("API Error ".concat(n.status,": ").concat(t))}return n.json()}l();let m={signIn:async(t,e)=>{let a=await fetch(r("/auth/sign-in"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t,password:e,"long-term-token":!0,"logout-other":!1})});if(!a.ok){let t=await a.text();throw Error("Sign-in failed: ".concat(a.status," ").concat(a.statusText," - ").concat(t))}let n=await a.json();return i=n["jwt-token"].token,localStorage.setItem("probe_jwt_token",n["jwt-token"].token),localStorage.setItem("probe_jwt_expire",n["jwt-token"].expire),localStorage.setItem("probe_user_email",n.email),localStorage.setItem("probe_api_token",n["api-token"]),(0,o.Av)("email"),n},isAuthenticated:()=>(s||l(),null!==i),isAuthenticatedAsync:async()=>(await p(),null!==i),refreshToken:async()=>await u(),setAuthToken:t=>{i=t},signOut:function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1?arguments[1]:void 0,a=new URLSearchParams;t&&a.append("logout-all","true"),e&&a.append("ret-url",e);let o=a.toString();return i=null,localStorage.removeItem("probe_jwt_token"),localStorage.removeItem("probe_jwt_expire"),localStorage.removeItem("probe_user_email"),g("/auth/sign-out".concat(o?"?".concat(o):""),{method:"DELETE"})},getCurrentApiToken:()=>localStorage.getItem("probe_api_token"),getActiveSessions:()=>g("/auth/session"),revokeSession:t=>g("/auth/session/".concat(t),{method:"DELETE"}),revokeAllSessions:function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return g("/auth/session".concat(t?"?logout-all=true":""),{method:"DELETE"})},listApiTokens:function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return g("/auth/api-token".concat(t?"?include-expired=true":""))},createApiToken:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return g("/auth/api-token",{method:"POST",body:JSON.stringify(t)})},getApiToken:function(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return g("/auth/api-token/".concat(t).concat(e?"?include-expired=true":""))},updateApiToken:(t,e)=>g("/auth/api-token/".concat(t),{method:"PUT",body:JSON.stringify(e)}),deleteApiToken:t=>g("/auth/api-token/".concat(t),{method:"DELETE"}),getSummaryStats:(t,e)=>{let a=new URLSearchParams;t&&a.append("month",t.toString()),e&&a.append("year",e.toString());let o=a.toString();return g("/statistics/summary".concat(o?"?".concat(o):""))},getUsageStats:(t,e)=>{let a=new URLSearchParams;t&&a.append("date[from]",t),e&&a.append("date[to]",e);let o=a.toString();return g("/statistics/usage".concat(o?"?".concat(o):""))},getRequestHistory:(t,e)=>{let a=new URLSearchParams;t&&a.append("date[from]",t),e&&a.append("date[to]",e);let o=a.toString();return g("/statistics/requests".concat(o?"?".concat(o):""))},getQueueStats:(t,e,a)=>{let o=new URLSearchParams;t&&o.append("date[from]",t),e&&o.append("date[to]",e),a&&o.append("aggregation",a);let n=o.toString();return g("/statistics/queue".concat(n?"?".concat(n):""))},getSourcesStats:(t,e,a)=>{let o=new URLSearchParams;t&&o.append("date[from]",t),e&&o.append("date[to]",e),a&&o.append("aggregation",a);let n=o.toString();return g("/statistics/sources".concat(n?"?".concat(n):""))},getMediaLog:t=>{let e=new URLSearchParams;
1return t&&(t.status&&t.status.forEach(t=>e.append("status",t)),t["status-ffprobe"]&&t["status-ffprobe"].forEach(t=>e.append("status-ffprobe",t)),t["status-mediainfo"]&&t["status-mediainfo"].forEach(t=>e.append("status-mediainfo",t)),t["status-probe-report"]&&t["status-probe-report"].forEach(t=>e.append("status-probe-report",t)),t["user-id"]&&t["user-id"].forEach(t=>e.append("user-id",t.toString())),t.send&&(t.send.from&&e.append("send[from]",t.send.from),t.send.to&&e.append("send[to]",t.send.to)),t.url&&e.append("url",t.url),t.request&&e.append("request",t.request),t.pagination&&(t.pagination.page&&e.append("pagination[page]",t.pagination.page.toString()),t.pagination.limit&&e.append("pagination[limit]",t.pagination.limit.toString())),t.sort&&(e.append("sort[field]",t.sort.field),e.append("sort[order]",t.sort.order))),g("/media/log".concat(e.toString()?"?".concat(e.toString()):""))},getMediaLogEntry:t=>g("/media/log/".concat(t)),getCurrentUser:()=>g("/user/current"),getCurrentUserAvatars:()=>g("/user/current/avatar"),updateProfile:t=>g("/user/current/profile",{method:"PUT",body:JSON.stringify(t)}),updatePassword:t=>g("/auth/current/password",{method:"PUT",body:JSON.stringify(t)}),verifySignupEmail:async(t,e)=>{let a=await fetch(r("/auth/verify"),{method:"POST",headers:{"Content-Type":"application/json","X-Recaptcha-Token":e},body:JSON.stringify({"verify-token":t})});if(!a.ok){let t=await a.text();throw Error("Email verification failed: ".concat(a.status," ").concat(a.statusText," - ").concat(t))}return a.json()},requestPasswordReset:async(t,e)=>{let a=await fetch(r("/auth/password-restore"),{method:"POST",headers:{"Content-Type":"application/json","X-Recaptcha-Token":e},body:JSON.stringify({email:t})});if(!a.ok){let t=await a.text();throw Error("Password reset request failed: ".concat(a.status," ").concat(a.statusText," - ").concat(t))}return a.json()},verifyPasswordResetToken:async(t,e)=>{let a=await fetch(r("/auth/password-restore-verify"),{method:"POST",headers:{"Content-Type":"application/json","X-Recaptcha-Token":e},body:JSON.stringify({"password-restore-token":t})});if(!a.ok){let t=await a.text();throw Error("Password reset token verification failed: ".concat(a.status," ").concat(a.statusText," - ").concat(t))}return a.json()},updatePasswordWithToken:async(t,e)=>{let a=await fetch(r("/auth/current/password"),{method:"PUT",headers:{"Content-Type":"application/x-www-form-urlencoded",Authorization:"Bearer ".concat(t)},body:new URLSearchParams({"password-update-token":t,"new-password":e})});if(!a.ok){let t=await a.text();throw Error("Password update failed: ".concat(a.status," ").concat(a.statusText," - ").concat(t))}},listUsers:async t=>{var e,a,o,n;let r=new URLSearchParams;(null==t||null==(e=t.pagination)?void 0:e.page)&&r.set("pagination[page]",t.pagination.page.toString()),(null==t||null==(a=t.pagination)?void 0:a.limit)&&r.set("pagination[limit]",t.pagination.limit.toString()),(null==t||null==(o=t.sort)?void 0:o.field)&&r.set("sort[field]",t.sort.field),(null==t||null==(n=t.sort)?void 0:n.order)&&r.set("sort[order]",t.sort.order),(null==t?void 0:t.status)&&t.status.forEach(t=>r.append("status",t));let i=r.toString();return g("/admin/user".concat(i?"?".concat(i):""))},getAdminStatisticsSummary:async(t,e)=>{let a=new URLSearchParams;t&&t.length>0&&t.forEach(t=>a.append("user-id",t.toString())),(null==e?void 0:e.month)&&a.set("month",e.month),(null==e?void 0:e.year)&&a.set("year",e.year);let o=a.toString();return g("/admin/statistics/summary".concat(o?"?".concat(o):""))},getAdminStatisticsRequests:async(t,e)=>{var a,o;let n=new URLSearchParams;t&&t.length>0&&t.forEach(t=>n.append("user-id",t.toString())),(null==e||null==(a=e.date)?void 0:a.from)&&n.set("date[from]",e.date.from),(null==e||null==(o=e.date)?void 0:o.to)&&n.set("date[to]",e.date.to),(null==e?void 0:e.aggregation)&&n.set("aggregation",e.aggregation);let r=n.toString();return g("/admin/statistics/requests".concat(r?"?".concat(r):""))},getAdminStatisticsUsage:async(t,e)=>{var a,o;let n=new URLSearchParams;t&&t.length>0&&t.forEach(t=>n.append("user-id",t.toString())),(null==e||null==(a=e.date)?void 0:a.from)&&n.set("date[from]",e.date.from),(null==e||null==(o=e.date)?void 0:o.to)&&n.set("date[to]",e.date.to),(null==e?void 0:e.aggregation)&&n.set("aggregation",e.aggregation);let r=n.toString();return g("/admin/statistics/usage".concat(r?"?".concat(r):""))},getAdminStatisticsQueue:async(t,e)=>{var a,o;let n=new URLSearchParams;t&&t.length>0&&t.forEach(t=>n.append("user-id",t.toString())),(null==e||null==(a=e.date)?void 0:a.from)&&n.set("date[from]",e.date.from),(null==e||null==(o=e.date)?void 0:o.to)&&n.set("date[to]",e.date.to),(null==e?void 0:e.aggregation)&&n.set("aggregation",e.aggregation);let r=n.toString();return g("/admin/statistics/queue".concat(r?"?".concat(r):""))},getAdminStatisticsSources:async(t,e)=>{var a,o;let n=new URLSearchParams;t&&t.length>0&&t.forEach(t=>n.append("user-id",t.toString())),(null==e||null==(a=e.date)?void 0:a.from)&&n.set("date[from]",e.date.from),(null==e||null==(o=e.date)?void 0:o.to)&&n.set("date[to]",e.date.to),(null==e?void 0:e.aggregation)&&n.set("aggregation",e.aggregation);let r=n.toString();return g("/admin/statistics/sources".concat(r?"?".concat(r):""))},inviteUser:async t=>{let e=t["frontend-host"]||window.location.origin;return g("/admin/invite",{method:"POST",body:JSON.stringify({email:t.email,"first-name":t["first-name"]||"","last-name":t["last-name"]||"","frontend-host":e})})},acceptInvite:async(t,e)=>{let a=await fetch("".concat("https://api.probe.dev/frontend/api/v1","/auth/sign-up"),{method:"POST",headers:{"Content-Type":"application/json","X-Recaptcha-Token":e},body:JSON.stringify({email:t.email,password:t.password,"invite-id":t["invite-id"],"first-name":t["first-name"]||null,"last-name":t["last-name"]||null})});if(!a.ok){let t=await a.text();throw Error("Invite signup failed: ".concat(a.status," ").concat(a.statusText," - ").concat(t))}return a.json()}}},65923:(t,e,a)=>{a.d(e,{cn:()=>r});var o=a(2821),n=a(75889);function r(){for(var t=arguments.length,e=Array(t),a=0;a<t;a++)e[a]=arguments[a];return(0,n.QP)((0,o.$)(e))}}}]);
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.