@vaiftech/react 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var react$1=require('react'),client=require('@vaiftech/client'),jsxRuntime=require('react/jsx-runtime'),react=require('@vaiftech/auth/react');var te=react$1.createContext(null);function ne({config:t,children:e,onAuthStateChange:n,autoRefreshSession:o=true,storageKey:r="vaif-auth"}){let[a]=react$1.useState(()=>client.createVaifClient(t)),[u,d]=react$1.useState(null),[s,l]=react$1.useState(null),[i,h]=react$1.useState(null),[f,c]=react$1.useState(null),[y,g]=react$1.useState(true),T=react$1.useRef(null),p=react$1.useCallback((x,M,F)=>{let U={token:x,refreshToken:M,expiresAt:F};localStorage.setItem(r,JSON.stringify(U));},[r]),m=react$1.useCallback(()=>{localStorage.removeItem(r),d(null),l(null),h(null),c(null);},[r]);react$1.useEffect(()=>((async()=>{try{let M=localStorage.getItem(r);if(!M){g(!1);return}let F=JSON.parse(M);if(F.expiresAt&&new Date(F.expiresAt)<=new Date)if(F.refreshToken)try{let U=await a.auth.refreshToken(F.refreshToken);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();else {l(F.token),h(F.refreshToken??null),c(F.expiresAt??null);try{let U=await a.auth.getUser();d(U);}catch{if(F.refreshToken)try{let U=await a.auth.refreshToken(F.refreshToken);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();}}}catch{m();}finally{g(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[a,r,p,m]),react$1.useEffect(()=>{if(!o||!f||!i)return;let x=new Date(f).getTime(),M=Date.now(),F=x-M-6e4;return F>0&&(T.current=setTimeout(async()=>{try{let U=await a.auth.refreshToken(i);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);}catch{m();}},F)),()=>{T.current&&clearTimeout(T.current);}},[o,a,f,i,p,m]),react$1.useEffect(()=>{y||n?.(u);},[u,y,n]);let b=react$1.useCallback(async(x,M)=>{let F=await a.auth.login(x,M);if("mfaRequired"in F)throw new Error("MFA required - use verifyMFA to complete login");let U=F;return d(U.user),l(U.token),h(U.refreshToken??null),c(U.expiresAt??null),p(U.token,U.refreshToken,U.expiresAt),U},[a,p]),w=react$1.useCallback(async(x,M,F)=>{let U=await a.auth.signUp(x,M,{metadata:F});return d(U.user),l(U.token),h(U.refreshToken??null),c(U.expiresAt??null),p(U.token,U.refreshToken,U.expiresAt),U},[a,p]),v=react$1.useCallback(async()=>{try{await a.auth.logout();}finally{m();}},[a,m]),E=react$1.useCallback(async()=>{if(!i)throw new Error("No refresh token available");let x=await a.auth.refreshToken(i);l(x.token),h(x.refreshToken??null),c(x.expiresAt),p(x.token,x.refreshToken,x.expiresAt);},[a,i,p]),C=react$1.useCallback(x=>{d(M=>M?{...M,...x}:null);},[]),q={client:a,user:u,token:s,isLoading:y,isAuthenticated:!!u,signIn:b,signUp:w,signOut:v,refreshSession:E,updateUser:C};return jsxRuntime.jsx(te.Provider,{value:q,children:e})}function D(){let t=react$1.useContext(te);if(!t)throw new Error("useVaif must be used within a VaifProvider");return t}function R(){let{client:t}=D();return t}function re(){let{user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}=D();return {user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}}function se(){let{user:t}=D();return t}function oe(){let{token:t}=D();return t}function ae(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(false),l=react$1.useCallback(async h=>{n(true),r(null);try{await t.auth.requestPasswordReset({email:h}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to request reset")),f}finally{n(false);}},[t]),i=react$1.useCallback(async(h,f)=>{n(true),r(null);try{await t.auth.confirmPasswordReset({token:h,password:f}),s(!0);}catch(c){throw r(c instanceof Error?c:new Error("Failed to reset password")),c}finally{n(false);}},[t]);return {requestReset:l,confirmReset:i,isLoading:e,error:o,isRequested:a,isConfirmed:d}}function ie(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(false),l=react$1.useCallback(async h=>{n(true),r(null);try{await t.auth.requestEmailVerification({email:h}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to send verification")),f}finally{n(false);}},[t]),i=react$1.useCallback(async h=>{n(true),r(null);try{await t.auth.confirmEmailVerification({token:h}),s(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to verify email")),f}finally{n(false);}},[t]);return {requestVerification:l,confirmVerification:i,isLoading:e,error:o,isSent:a,isVerified:d}}function le(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),d=react$1.useCallback(async l=>{n(true),r(null);try{await t.auth.requestMagicLink({email:l}),u(!0);}catch(i){throw r(i instanceof Error?i:new Error("Failed to send magic link")),i}finally{n(false);}},[t]),s=react$1.useCallback(async l=>{n(true),r(null);try{return await t.auth.verifyMagicLink({token:l})}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify magic link")),i}finally{n(false);}},[t]);return {sendMagicLink:d,verifyMagicLink:s,isLoading:e,error:o,isSent:a}}function ue(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null);return {signInWithOAuth:react$1.useCallback(async(u,d)=>{n(true),r(null);try{let s=await t.auth.getOAuthSignInUrl({provider:u,redirectUrl:d});s.url&&(window.location.href=s.url);}catch(s){throw r(s instanceof Error?s:new Error("Failed to start OAuth flow")),s}finally{n(false);}},[t]),isLoading:e,error:o}}function ce(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),a=react$1.useCallback(async s=>{n(true),r(null);try{return await t.auth.setupMFA(s)}catch(l){throw r(l instanceof Error?l:new Error("Failed to setup MFA")),l}finally{n(false);}},[t]),u=react$1.useCallback(async(s,l)=>{n(true),r(null);try{return await t.auth.verifyMFA(s,l)}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify MFA")),i}finally{n(false);}},[t]),d=react$1.useCallback(async s=>{n(true),r(null);try{await t.auth.disableMFA(s);}catch(l){throw r(l instanceof Error?l:new Error("Failed to disable MFA")),l}finally{n(false);}},[t]);return {setup:a,verify:u,disable:d,isLoading:e,error:o}}var de=new Map;function He(t,e){return `${t}:${JSON.stringify(e||{})}`}function fe(t,e){let n=R(),[o,r]=react$1.useState(e?.initialData||[]),[a,u]=react$1.useState(null),[d,s]=react$1.useState(e?.enabled===false?"idle":"loading"),[l,i]=react$1.useState(false),[h,f]=react$1.useState(true),c=react$1.useRef(0),y=e?.enabled!==false,g=e?.staleTime??0,T=e?.keepPreviousData??false,p=react$1.useCallback(async()=>{if(!y)return;let m={where:e?.where,orderBy:e?.orderBy,limit:e?.limit,offset:e?.offset,select:e?.select,include:e?.include,distinct:e?.distinct},b=He(t,m),w=de.get(b);if(w&&Date.now()-w.timestamp<g){r(w.data),s("success"),f(false);return}i(true),T||s("loading"),u(null);try{let v=await n.from(t).list(m);r(v.data),s("success"),f(!1),c.current=Date.now(),de.set(b,{data:v.data,timestamp:Date.now()}),e?.onSuccess?.(v.data);}catch(v){let E=v instanceof Error?v:new Error("Query failed");u(E),s("error"),e?.onError?.(E);}finally{i(false);}},[n,t,e,y,g,T]);return react$1.useEffect(()=>{p();},[p]),react$1.useEffect(()=>{if(!e?.refetchOnWindowFocus||!y)return;let m=()=>{Date.now()-c.current>g&&(f(true),p());};return window.addEventListener("focus",m),()=>window.removeEventListener("focus",m)},[e?.refetchOnWindowFocus,y,g,p]),react$1.useEffect(()=>{if(!e?.refetchInterval||e.refetchInterval<=0||!y)return;let m=setInterval(()=>{f(true),p();},e.refetchInterval);return ()=>clearInterval(m)},[e?.refetchInterval,y,p]),{data:o,isLoading:d==="loading",isFetching:l,error:a,status:d,refetch:p,isStale:h,isEnabled:y}}function pe(t,e,n){let o=R(),[r,a]=react$1.useState(null),[u,d]=react$1.useState(null),[s,l]=react$1.useState(!!e&&n?.enabled!==false),[i,h]=react$1.useState(false),f=!!e&&n?.enabled!==false,c=react$1.useCallback(async()=>{if(!(!f||!e)){l(true),d(null),h(false);try{let y=await o.from(t).get(e);a(y.data);}catch(y){let g=y instanceof Error?y:new Error("Query failed");g.message.includes("not found")||g.message.includes("404")?h(true):d(g);}finally{l(false);}}},[o,t,e,f]);return react$1.useEffect(()=>{c();},[c]),{data:r,isLoading:s,error:u,isNotFound:i,refetch:c}}function K(t,e,n){let o=t.from(e);if(n?.where){let r=Array.isArray(n.where)?{AND:n.where}:n.where;o=o.where(r);}if(n?.orderBy){let r=Array.isArray(n.orderBy)?n.orderBy:[n.orderBy];for(let a of r)o=o.orderBy(a.field,a.direction);}if(n?.select&&(o=o.select(...n.select)),n?.include)for(let r of n.include)o=o.include(r);return o}function ge(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(null),[d,s]=react$1.useState(e?.enabled!==false),[l,i]=react$1.useState(false),h=e?.enabled!==false,f=react$1.useCallback(async()=>{if(h){s(true),u(null),i(false);try{let y=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).first();y?r(y):i(!0);}catch(c){let y=c instanceof Error?c:new Error("Query failed");u(y);}finally{s(false);}}},[n,t,e,h]);return react$1.useEffect(()=>{f();},[f]),{data:o,isLoading:d,error:a,isNotFound:l,refetch:f}}function ye(t,e){let n=R(),[o,r]=react$1.useState([]),[a,u]=react$1.useState(e?.initialPage??1),[d,s]=react$1.useState(null),[l,i]=react$1.useState(true),[h,f]=react$1.useState(null),c=e?.pageSize??10,y=react$1.useCallback(async C=>{i(true),f(null);try{let x=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).paginate({page:C,pageSize:c});r(x.data),s(x.pageInfo),u(x.pageInfo.page),e?.onSuccess?.(x);}catch(q){let x=q instanceof Error?q:new Error("Query failed");f(x),e?.onError?.(x);}finally{i(false);}},[n,t,e,c]);react$1.useEffect(()=>{y(a);},[y,a]);let g=d?.total??0,T=d?.pageCount??0,p=d?.hasNextPage??false,m=d?.hasPrevPage??false,b=react$1.useCallback(()=>{p&&u(C=>C+1);},[p]),w=react$1.useCallback(()=>{m&&u(C=>C-1);},[m]),v=react$1.useCallback(C=>{let q=Math.max(1,Math.min(C,T||1));u(q);},[T]),E=react$1.useCallback(()=>y(a),[y,a]);return {data:o,page:a,pageSize:c,totalCount:g,totalPages:T,hasNextPage:p,hasPrevPage:m,isLoading:l,error:h,nextPage:b,prevPage:w,goToPage:v,refetch:E}}function he(t,e){let n=R(),[o,r]=react$1.useState([]),[a,u]=react$1.useState(null),[d,s]=react$1.useState(true),[l,i]=react$1.useState(true),[h,f]=react$1.useState(false),[c,y]=react$1.useState(null),g=e?.pageSize??20,T=react$1.useCallback(async()=>{if(!d)return;o.length===0?i(true):f(true),y(null);try{let E=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({cursor:a??void 0,limit:g});r(C=>[...C,E.data]),u(E.nextCursor??null),s(E.hasMore),e?.onSuccess?.(E.data,E.hasMore);}catch(v){let E=v instanceof Error?v:new Error("Query failed");y(E),e?.onError?.(E);}finally{i(false),f(false);}},[n,t,e,a,d,o.length,g]);react$1.useEffect(()=>{T();},[]);let p=react$1.useCallback(async()=>{r([]),u(null),s(true),i(true);try{let v=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({limit:g});r([v.data]),u(v.nextCursor??null),s(v.hasMore);}catch(w){y(w instanceof Error?w:new Error("Query failed"));}finally{i(false);}},[n,t,e,g]),m=react$1.useCallback(()=>{r([]),u(null),s(true),i(true),y(null);},[]);return {data:o.flat(),pages:o,hasNextPage:d,isLoading:l,isFetchingNextPage:h,error:c,fetchNextPage:T,refetch:p,reset:m}}function me(t,e){let n=R(),[o,r]=react$1.useState(0),[a,u]=react$1.useState(e?.enabled!==false),[d,s]=react$1.useState(null),l=e?.enabled!==false,i=react$1.useCallback(async()=>{if(l){u(true),s(null);try{let h=n.from(t);e?.where&&(h=h.where(e.where));let f=await h.count();r(f);}catch(h){s(h instanceof Error?h:new Error("Count failed"));}finally{u(false);}}},[n,t,e?.where,l]);return react$1.useEffect(()=>{i();},[i]),{count:o,isLoading:a,error:d,refetch:i}}function B(t,e){let[n,o]=react$1.useState("idle"),[r,a]=react$1.useState(void 0),[u,d]=react$1.useState(null),s=react$1.useRef(0),l=react$1.useCallback(()=>{o("idle"),a(void 0),d(null),s.current=0;},[]),i=react$1.useCallback(async f=>{o("loading"),d(null);try{await e?.onMutate?.(f);let c=await t(f);return a(c),o("success"),s.current=0,await e?.onSuccess?.(c,f),await e?.onSettled?.(c,null,f),c}catch(c){let y=c instanceof Error?c:new Error("Mutation failed"),g=e?.retry??0;if(s.current<g){s.current++;let T=e?.retryDelay??1e3;return await new Promise(p=>setTimeout(p,T)),i(f)}throw d(y),o("error"),await e?.onError?.(y,f),await e?.onSettled?.(void 0,y,f),y}},[t,e]);return {mutate:react$1.useCallback(f=>{i(f).catch(()=>{});},[i]),mutateAsync:i,data:r,error:u,isLoading:n==="loading",isSuccess:n==="success",isError:n==="error",isIdle:n==="idle",status:n,reset:l}}function Ue(t,e){let n=R();return B(async o=>(await n.from(t).create(o)).data,e)}function be(t,e){let n=R();return B(async({id:o,data:r})=>(await n.from(t).update(o,r)).data,e)}function we(t,e){let n=R();return B(async o=>{await n.from(t).delete(o);},e)}function Re(t,e){let n=R();return B(async({data:o,conflictFields:r,updateFields:a})=>{let u={conflictFields:r,updateFields:a};return (await n.from(t).upsert(o,u)).data},e)}function ve(t,e){let n=R();return B(async o=>{let r=await n.from(t).createMany(o);return {count:r.count,records:r.records}},e)}function Pe(t,e){let n=R();return B(async({data:o,where:r})=>{let a=await n.from(t).where(r).updateMany(o);return {count:a.count,records:a.records}},e)}function xe(t,e){let n=R();return B(async o=>({count:(await n.from(t).where(o).deleteMany()).count}),e)}function Ee(t,e,n){let[o,r]=react$1.useState(t),[a,u]=react$1.useState(false),[d,s]=react$1.useState(null),l=react$1.useRef(t),i=react$1.useCallback(()=>{r(l.current);},[]),h=react$1.useCallback(async c=>{u(true),s(null),l.current=o;let y=n.optimisticUpdate(o,c);r(y);try{let g=await e(c);return r(g),n.onSuccess?.(g,c),n.onSettled?.(g,null,c),g}catch(g){let T=g instanceof Error?g:new Error("Mutation failed");throw s(T),i(),n.onError?.(T,c),n.onSettled?.(void 0,T,c),T}finally{u(false);}},[o,e,n,i]);return {mutate:react$1.useCallback(c=>{h(c).catch(()=>{});},[h]),mutateAsync:h,optimisticData:o,rollback:i,isLoading:a,error:d}}function Oe(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState([]),[d,s]=react$1.useState(false),l=react$1.useRef(null),i=react$1.useRef(null),h=e?.enabled!==false;react$1.useEffect(()=>{if(!h)return;let c=n.realtime();l.current=c;let y=c.channel(`table:${t}`);return i.current=y,y.onDbChange({table:t,event:e?.operations||"*"},g=>{switch(g.new!==void 0&&r(g.new),u(T=>[...T,g]),g.operation){case "INSERT":g.new&&e?.onInsert?.(g.new);break;case "UPDATE":g.new&&e?.onUpdate?.(g.new,g.old??null);break;case "DELETE":g.old&&e?.onDelete?.(g.old);break}e?.onChange?.(g);}),y.subscribe(),s(true),()=>{y.unsubscribe(),c.disconnect(),s(false);}},[n,t,h,e]);let f=react$1.useCallback(()=>{u([]);},[]);return {data:o,changes:a,isSubscribed:d,clearChanges:f}}function Z(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState([]),[d,s]=react$1.useState(false),l=react$1.useRef(null),i=react$1.useRef(null),h=e?.enabled!==false;react$1.useEffect(()=>{if(!h)return;let y=n.realtime();l.current=y;let g=y.channel(t,{type:e?.type||"public"});return i.current=g,g.on("*",T=>{let p={event:"*",payload:T};r(p),u(m=>[...m,p]);}),g.subscribe(),s(true),()=>{g.unsubscribe(),y.disconnect(),s(false);}},[n,t,h,e?.type]);let f=react$1.useCallback((y,g)=>{i.current?.broadcast({event:y,payload:g});},[]),c=react$1.useCallback(()=>{i.current?.unsubscribe(),s(false);},[]);return {broadcast:f,lastMessage:o,messages:a,isJoined:d,leave:c}}function Fe(t,e,n){let o=R(),[r,a]=react$1.useState({}),[u,d]=react$1.useState(false),s=react$1.useRef(null),l=react$1.useRef(null),i=n?.enabled!==false;react$1.useEffect(()=>{if(!i)return;let g=o.realtime();s.current=g;let T=g.channel(t,{type:"presence"});return l.current=T,T.presence.onSync(p=>{a(p);}),T.subscribe(),e&&(T.presence.track({state:e}),d(true)),()=>{T.unsubscribe(),g.disconnect(),d(false);}},[o,t,i,e]);let h=react$1.useCallback(g=>{l.current?.presence.update(g);},[]),f=react$1.useCallback(()=>{l.current?.presence.untrack(),d(false);},[]),c=Object.keys(r).length,y=Object.keys(r);return {presence:r,count:c,onlineUsers:y,update:h,leave:f,isTracking:u}}function ke(){let t=R(),[e,n]=react$1.useState("disconnected"),[o,r]=react$1.useState(null),a=react$1.useRef(null);react$1.useEffect(()=>{let s=t.realtime();return a.current=s,n(s.connectionState),r(s.connectionId),s.on("connect",()=>{n("connected"),r(s.connectionId);}),s.on("disconnect",()=>{n("disconnected"),r(null);}),s.on("reconnect",()=>{n("connected"),r(s.connectionId);}),s.on("error",()=>{n("disconnected");}),()=>{s.disconnect();}},[t]);let u=react$1.useCallback(()=>{a.current?.connect();},[]),d=react$1.useCallback(()=>{a.current?.disconnect();},[]);return {state:e,isConnected:e==="connected",connectionId:o,reconnect:u,disconnect:d}}function Se(t,e){let n=Z(t,e);return {send:n.broadcast,messages:n.messages,lastMessage:n.lastMessage,isConnected:n.isJoined}}function ee(t){let e=R(),[n,o]=react$1.useState(0),[r,a]=react$1.useState(false),[u,d]=react$1.useState(null),[s,l]=react$1.useState(null),[i,h]=react$1.useState([]),f=react$1.useCallback(T=>{if(t?.maxSize&&T.size>t.maxSize)throw new Error(`File size (${Math.round(T.size/1024/1024)}MB) exceeds maximum allowed (${Math.round(t.maxSize/1024/1024)}MB)`);if(t?.allowedTypes&&t.allowedTypes.length>0&&!t.allowedTypes.includes(T.type))throw new Error(`File type "${T.type}" is not allowed. Allowed types: ${t.allowedTypes.join(", ")}`)},[t?.maxSize,t?.allowedTypes]),c=react$1.useCallback(async(T,p)=>{a(true),d(null),o(0);try{f(p),t?.onUploadStart?.(p);let m=await e.storage.upload(T,p,{contentType:p.type,metadata:t?.metadata,isPublic:t?.isPublic});return o(100),l(m),h(b=>[...b,m]),t?.onSuccess?.(m,p),m}catch(m){let b=m instanceof Error?m:new Error("Upload failed");throw d(b),t?.onError?.(b,p),b}finally{a(false);}},[e,t,f]),y=react$1.useCallback(async T=>{let p=[];for(let{key:m,file:b}of T){let w=await c(m,b);p.push(w);}return p},[c]),g=react$1.useCallback(()=>{o(0),a(false),d(null),l(null),h([]);},[]);return {upload:c,uploadMultiple:y,progress:n,isUploading:r,error:u,result:s,results:i,reset:g}}function Ie(t){let e=R(),[n,o]=react$1.useState(false),[r,a]=react$1.useState(null),u=react$1.useCallback(async(s,l)=>{o(true),a(null);try{let i=await e.storage.download(s);return t?.onSuccess?.(i,l||s.split("/").pop()||"download"),i}catch(i){let h=i instanceof Error?i:new Error("Download failed");throw a(h),t?.onError?.(h),h}finally{o(false);}},[e,t]),d=react$1.useCallback(async(s,l)=>{let i=await u(s,l),h=l||s.split("/").pop()||"download",f=URL.createObjectURL(i),c=document.createElement("a");c.href=f,c.download=h,document.body.appendChild(c),c.click(),document.body.removeChild(c),URL.revokeObjectURL(f);},[u]);return {download:u,downloadAndSave:d,isDownloading:n,error:r}}function Ce(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(null),[d,s]=react$1.useState(!!t&&e?.enabled!==false),[l,i]=react$1.useState(null),h=!!t&&e?.enabled!==false,f=react$1.useCallback(async()=>{if(!(!h||!t)){s(true),i(null);try{let y=await n.storage.createSignedUrl(t,e?.expiresIn);r(y);let g=await n.storage.getMetadata(t);u(g);}catch(y){i(y instanceof Error?y:new Error("Failed to load file"));}finally{s(false);}}},[n,t,e?.expiresIn,h]),c=react$1.useCallback(async()=>{t&&(await n.storage.delete(t),r(null),u(null));},[n,t]);return {url:o,metadata:a,isLoading:d,error:l,refresh:f,deleteFile:c}}function Me(t){let e=R(),[n,o]=react$1.useState([]),[r,a]=react$1.useState(t?.enabled!==false),[u,d]=react$1.useState(null),s=t?.enabled!==false,l=react$1.useCallback(async()=>{if(s){a(true),d(null);try{let i=await e.storage.list({prefix:t?.prefix,limit:t?.limit});o(i.files);}catch(i){d(i instanceof Error?i:new Error("Failed to list files"));}finally{a(false);}}},[e,t,s]);return {files:n,isLoading:r,error:u,refresh:l}}function De(t){let e=ee(t),[n,o]=react$1.useState(false),[r,a]=react$1.useState([]),u=react$1.useRef(null),d=react$1.useCallback(p=>{p.preventDefault(),p.stopPropagation(),o(true);},[]),s=react$1.useCallback(p=>{p.preventDefault(),p.stopPropagation(),o(false);},[]),l=react$1.useCallback(p=>{let m=t?.basePath||"uploads",b=Date.now().toString(36)+Math.random().toString(36).substr(2,9),w=p.name.split(".").pop()||"";return t?.uniqueKey?`${m}/${b}.${w}`:`${m}/${p.name}`},[t?.basePath,t?.uniqueKey]),i=react$1.useCallback(async p=>{p.preventDefault(),p.stopPropagation(),o(false);let m=Array.from(p.dataTransfer.files);if(m.length===0)return;let b=t?.multiple?m:[m[0]];a(b),await e.uploadMultiple(b.map(w=>({key:l(w),file:w})));},[t?.multiple,e,l]),h=react$1.useCallback(async p=>{let m=Array.from(p.target.files||[]);m.length!==0&&(a(m),await e.uploadMultiple(m.map(b=>({key:l(b),file:b}))));},[e,l]),f=react$1.useCallback(()=>{u.current?.click();},[]),c=react$1.useCallback(()=>{a([]),e.reset();},[e]),y=react$1.useCallback(p=>{a(m=>m.filter((b,w)=>w!==p));},[]),g=react$1.useCallback(()=>({onDragOver:d,onDragLeave:s,onDrop:i,onClick:f}),[d,s,i,f]),T=react$1.useCallback(()=>({type:"file",onChange:h,multiple:t?.multiple??false,accept:t?.allowedTypes?.join(",")??"",style:{display:"none"},ref:p=>{u.current=p;}}),[h,t?.multiple,t?.allowedTypes]);return {...e,dropzone:{isDragOver:n,selectedFiles:r},getDropzoneProps:g,getInputProps:T,openFilePicker:f,clearFiles:c,removeFile:y}}function Ae(t){return R().storage.getPublicUrl(t)}var G=new Map;function Le(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(null),[l,i]=react$1.useState(false),[h,f]=react$1.useState(null),c=react$1.useRef(0),y=react$1.useCallback(async T=>{u(true),s(null),i(false);try{let p={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(p.retry={maxRetries:e.maxRetries??3});let m=await n.functions.invoke(t,{body:T},p);return r(m.data),f(m),i(!0),c.current=0,e?.onSuccess?.(m.data,T),m.data}catch(p){let m=p instanceof Error?p:new Error("Function invocation failed");throw s(m),e?.onError?.(m,T),m}finally{u(false);}},[n,t,e]),g=react$1.useCallback(()=>{r(null),u(false),s(null),i(false),f(null),c.current=0;},[]);return {invoke:y,data:o,isLoading:a,error:d,isSuccess:l,invocation:h,reset:g}}function Ve(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(null),[l,i]=react$1.useState(false),[h,f]=react$1.useState(null),c=e?.cache??false,y=e?.cacheTtl??6e4,g=react$1.useCallback(b=>`${t}:${JSON.stringify(b)}`,[t]),T=react$1.useCallback(async b=>{if(c){let w=g(b),v=G.get(w);if(v&&Date.now()-v.timestamp<y){let E=v.data;return r(E),i(true),e?.onSuccess?.(E,b),E}}u(true),s(null),i(false);try{let w={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(w.retry={maxRetries:e.maxRetries??3});let E=await n.functions.rpc(t,w)(b);if(r(E),i(!0),c){let C=g(b);G.set(C,{data:E,timestamp:Date.now()});}return e?.onSuccess?.(E,b),E}catch(w){let v=w instanceof Error?w:new Error("RPC call failed");throw s(v),e?.onError?.(v,b),v}finally{u(false);}},[n,t,e,c,y,g]),p=react$1.useCallback(()=>{let b=`${t}:`;for(let w of G.keys())w.startsWith(b)&&G.delete(w);},[t]),m=react$1.useCallback(()=>{r(null),u(false),s(null),i(false),f(null);},[]);return {invoke:T,data:o,isLoading:a,error:d,isSuccess:l,invocation:h,reset:m,clearCache:p}}function Qe(t){let e=R(),[n,o]=react$1.useState([]),[r,a]=react$1.useState(true),[u,d]=react$1.useState(null),s=react$1.useCallback(async()=>{a(true),d(null);try{let l=await e.functions.list({projectId:t.projectId,envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset});o(l);}catch(l){d(l instanceof Error?l:new Error("Failed to list functions"));}finally{a(false);}},[e,t.projectId,t.envId,t.enabled,t.limit,t.offset]);return react$1.useEffect(()=>{s();},[s]),{functions:n,isLoading:r,error:u,refresh:s}}function Be(t,e){let n=R(),[o,r]=react$1.useState([]),[a,u]=react$1.useState(false),[d,s]=react$1.useState(0),[l,i]=react$1.useState(null);return {invoke:react$1.useCallback(async f=>{u(true),i(null),s(0),r([]);let c=[],y=e?.concurrency??5,g=f.length,T=0;try{for(let p=0;p<f.length;p+=y){let m=f.slice(p,p+y),b=await Promise.all(m.map(async w=>(await n.functions.invoke(t,{body:w})).data));c.push(...b),T+=m.length,s(Math.round(T/g*100)),r([...c]),e?.onProgress?.(T,g);}return e?.onSuccess?.(c),c}catch(p){let m=p instanceof Error?p:new Error("Batch invocation failed");throw i(m),e?.onError?.(m),m}finally{u(false);}},[n,t,e]),results:o,isLoading:a,progress:d,error:l}}function ze(t){let e=R(),[n,o]=react$1.useState(false),[r,a]=react$1.useState(null),[u,d]=react$1.useState(null),[s,l]=react$1.useState(null),i=react$1.useCallback(async(f,c)=>{l(null);try{let g=(await e.functions.invoke(t,{body:f})).requestId??`scheduled-${Date.now()}`;return d(g),o(!0),a(new Date(Date.now()+c.delayMs)),g}catch(y){let g=y instanceof Error?y:new Error("Failed to schedule function");throw l(g),g}},[e,t]),h=react$1.useCallback(async()=>{o(false),a(null),d(null);},[]);return {schedule:i,cancel:h,isScheduled:n,scheduledAt:r,requestId:u,error:s}}Object.defineProperty(exports,"AuthProvider",{enumerable:true,get:function(){return react.AuthProvider}});Object.defineProperty(exports,"VaifAuthClient",{enumerable:true,get:function(){return react.VaifAuthClient}});Object.defineProperty(exports,"createAuthClient",{enumerable:true,get:function(){return react.createAuthClient}});Object.defineProperty(exports,"useAuthClient",{enumerable:true,get:function(){return react.useAuthClient}});Object.defineProperty(exports,"useIdentities",{enumerable:true,get:function(){return react.useIdentities}});Object.defineProperty(exports,"useIsAuthenticated",{enumerable:true,get:function(){return react.useIsAuthenticated}});Object.defineProperty(exports,"usePassword",{enumerable:true,get:function(){return react.usePassword}});Object.defineProperty(exports,"useSession",{enumerable:true,get:function(){return react.useSession}});Object.defineProperty(exports,"useSessions",{enumerable:true,get:function(){return react.useSessions}});Object.defineProperty(exports,"useStandaloneAuth",{enumerable:true,get:function(){return react.useAuth}});Object.defineProperty(exports,"useStandaloneMFA",{enumerable:true,get:function(){return react.useMFA}});Object.defineProperty(exports,"useStandaloneUser",{enumerable:true,get:function(){return react.useUser}});exports.VaifProvider=ne;exports.useAuth=re;exports.useBatchCreate=ve;exports.useBatchDelete=xe;exports.useBatchInvoke=Be;exports.useBatchUpdate=Pe;exports.useBroadcast=Se;exports.useChannel=Z;exports.useCount=me;exports.useCreate=Ue;exports.useDelete=we;exports.useDownload=Ie;exports.useDropzone=De;exports.useEmailVerification=ie;exports.useFile=Ce;exports.useFiles=Me;exports.useFunction=Le;exports.useFunctionList=Qe;exports.useInfiniteQuery=he;exports.useMFA=ce;exports.useMagicLink=le;exports.useMutation=B;exports.useOAuth=ue;exports.useOptimisticMutation=Ee;exports.usePaginatedQuery=ye;exports.usePasswordReset=ae;exports.usePresence=Fe;exports.usePublicUrl=Ae;exports.useQuery=fe;exports.useQueryById=pe;exports.useQueryFirst=ge;exports.useRealtimeConnection=ke;exports.useRpc=Ve;exports.useScheduledFunction=ze;exports.useSubscription=Oe;exports.useToken=oe;exports.useUpdate=be;exports.useUpload=ee;exports.useUpsert=Re;exports.useUser=se;exports.useVaif=D;exports.useVaifClient=R;
|
|
1
|
+
'use strict';var react$1=require('react'),client=require('@vaiftech/client'),jsxRuntime=require('react/jsx-runtime'),react=require('@vaiftech/auth/react');var te=react$1.createContext(null);function ne({config:t,children:e,onAuthStateChange:n,autoRefreshSession:o=true,storageKey:r="vaif-auth"}){let[a]=react$1.useState(()=>client.createVaifClient(t)),[u,d]=react$1.useState(null),[s,l]=react$1.useState(null),[i,y]=react$1.useState(null),[f,c]=react$1.useState(null),[h,p]=react$1.useState(true),T=react$1.useRef(null),g=react$1.useCallback((w,C,P)=>{let b={token:w,refreshToken:C,expiresAt:P};localStorage.setItem(r,JSON.stringify(b));},[r]),m=react$1.useCallback(()=>{localStorage.removeItem(r),d(null),l(null),y(null),c(null);},[r]);react$1.useEffect(()=>((async()=>{try{let C=localStorage.getItem(r);if(!C){p(!1);return}let P=JSON.parse(C);if(P.expiresAt&&new Date(P.expiresAt)<=new Date)if(P.refreshToken)try{let b=await a.auth.refreshToken(P.refreshToken);l(b.token),y(b.refreshToken??null),c(b.expiresAt),g(b.token,b.refreshToken,b.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();else {l(P.token),y(P.refreshToken??null),c(P.expiresAt??null);try{let b=await a.auth.getUser();d(b);}catch{if(P.refreshToken)try{let b=await a.auth.refreshToken(P.refreshToken);l(b.token),y(b.refreshToken??null),c(b.expiresAt),g(b.token,b.refreshToken,b.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();}}}catch{m();}finally{p(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[a,r,g,m]),react$1.useEffect(()=>{if(!o||!f||!i)return;let w=new Date(f).getTime(),C=Date.now(),P=w-C-6e4;return P>0&&(T.current=setTimeout(async()=>{try{let b=await a.auth.refreshToken(i);l(b.token),y(b.refreshToken??null),c(b.expiresAt),g(b.token,b.refreshToken,b.expiresAt);}catch{m();}},P)),()=>{T.current&&clearTimeout(T.current);}},[o,a,f,i,g,m]),react$1.useEffect(()=>{h||n?.(u);},[u,h,n]);let U=react$1.useCallback(async(w,C)=>{let P=await a.auth.login(w,C);if("mfaRequired"in P)throw new Error("MFA required - use verifyMFA to complete login");let b=P;return d(b.user),l(b.token),y(b.refreshToken??null),c(b.expiresAt??null),g(b.token,b.refreshToken,b.expiresAt),b},[a,g]),M=react$1.useCallback(async(w,C,P)=>{let b=await a.auth.signUp(w,C,{metadata:P});return d(b.user),l(b.token),y(b.refreshToken??null),c(b.expiresAt??null),g(b.token,b.refreshToken,b.expiresAt),b},[a,g]),R=react$1.useCallback(async()=>{try{await a.auth.logout();}finally{m();}},[a,m]),x=react$1.useCallback(async()=>{if(!i)throw new Error("No refresh token available");let w=await a.auth.refreshToken(i);l(w.token),y(w.refreshToken??null),c(w.expiresAt),g(w.token,w.refreshToken,w.expiresAt);},[a,i,g]),k=react$1.useCallback(w=>{d(C=>C?{...C,...w}:null);},[]),q={client:a,user:u,token:s,isLoading:h,isAuthenticated:!!u,signIn:U,signUp:M,signOut:R,refreshSession:x,updateUser:k};return jsxRuntime.jsx(te.Provider,{value:q,children:e})}function D(){let t=react$1.useContext(te);if(!t)throw new Error("useVaif must be used within a VaifProvider");return t}function v(){let{client:t}=D();return t}function re(){let{user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}=D();return {user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}}function se(){let{user:t}=D();return t}function oe(){let{token:t}=D();return t}function ae(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(false),l=react$1.useCallback(async y=>{n(true),r(null);try{await t.auth.requestPasswordReset({email:y}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to request reset")),f}finally{n(false);}},[t]),i=react$1.useCallback(async(y,f)=>{n(true),r(null);try{await t.auth.confirmPasswordReset({token:y,password:f}),s(!0);}catch(c){throw r(c instanceof Error?c:new Error("Failed to reset password")),c}finally{n(false);}},[t]);return {requestReset:l,confirmReset:i,isLoading:e,error:o,isRequested:a,isConfirmed:d}}function ie(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(false),l=react$1.useCallback(async y=>{n(true),r(null);try{await t.auth.requestEmailVerification({email:y}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to send verification")),f}finally{n(false);}},[t]),i=react$1.useCallback(async y=>{n(true),r(null);try{await t.auth.confirmEmailVerification({token:y}),s(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to verify email")),f}finally{n(false);}},[t]);return {requestVerification:l,confirmVerification:i,isLoading:e,error:o,isSent:a,isVerified:d}}function le(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),d=react$1.useCallback(async l=>{n(true),r(null);try{await t.auth.requestMagicLink({email:l}),u(!0);}catch(i){throw r(i instanceof Error?i:new Error("Failed to send magic link")),i}finally{n(false);}},[t]),s=react$1.useCallback(async l=>{n(true),r(null);try{return await t.auth.verifyMagicLink({token:l})}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify magic link")),i}finally{n(false);}},[t]);return {sendMagicLink:d,verifyMagicLink:s,isLoading:e,error:o,isSent:a}}function ue(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null);return {signInWithOAuth:react$1.useCallback(async(u,d)=>{n(true),r(null);try{let s=await t.auth.getOAuthSignInUrl({provider:u,redirectUrl:d});s.url&&(window.location.href=s.url);}catch(s){throw r(s instanceof Error?s:new Error("Failed to start OAuth flow")),s}finally{n(false);}},[t]),isLoading:e,error:o}}function ce(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),a=react$1.useCallback(async s=>{n(true),r(null);try{return await t.auth.setupMFA(s)}catch(l){throw r(l instanceof Error?l:new Error("Failed to setup MFA")),l}finally{n(false);}},[t]),u=react$1.useCallback(async(s,l)=>{n(true),r(null);try{return await t.auth.verifyMFA(s,l)}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify MFA")),i}finally{n(false);}},[t]),d=react$1.useCallback(async s=>{n(true),r(null);try{await t.auth.disableMFA(s);}catch(l){throw r(l instanceof Error?l:new Error("Failed to disable MFA")),l}finally{n(false);}},[t]);return {setup:a,verify:u,disable:d,isLoading:e,error:o}}var de=new Map;function Je(t,e){return `${t}:${JSON.stringify(e||{})}`}function fe(t,e){let n=v(),[o,r]=react$1.useState(e?.initialData||[]),[a,u]=react$1.useState(null),[d,s]=react$1.useState(e?.enabled===false?"idle":"loading"),[l,i]=react$1.useState(false),[y,f]=react$1.useState(true),c=react$1.useRef(0),h=e?.enabled!==false,p=e?.staleTime??0,T=e?.keepPreviousData??false,g=react$1.useCallback(async()=>{if(!h)return;let m={where:e?.where,orderBy:e?.orderBy,limit:e?.limit,offset:e?.offset,select:e?.select,include:e?.include,distinct:e?.distinct},U=Je(t,m),M=de.get(U);if(M&&Date.now()-M.timestamp<p){r(M.data),s("success"),f(false);return}i(true),T||s("loading"),u(null);try{let R=await n.from(t).list(m);r(R.data),s("success"),f(!1),c.current=Date.now(),de.set(U,{data:R.data,timestamp:Date.now()}),e?.onSuccess?.(R.data);}catch(R){let x=R instanceof Error?R:new Error("Query failed");u(x),s("error"),e?.onError?.(x);}finally{i(false);}},[n,t,e,h,p,T]);return react$1.useEffect(()=>{g();},[g]),react$1.useEffect(()=>{if(!e?.refetchOnWindowFocus||!h)return;let m=()=>{Date.now()-c.current>p&&(f(true),g());};return window.addEventListener("focus",m),()=>window.removeEventListener("focus",m)},[e?.refetchOnWindowFocus,h,p,g]),react$1.useEffect(()=>{if(!e?.refetchInterval||e.refetchInterval<=0||!h)return;let m=setInterval(()=>{f(true),g();},e.refetchInterval);return ()=>clearInterval(m)},[e?.refetchInterval,h,g]),{data:o,isLoading:d==="loading",isFetching:l,error:a,status:d,refetch:g,isStale:y,isEnabled:h}}function ge(t,e,n){let o=v(),[r,a]=react$1.useState(null),[u,d]=react$1.useState(null),[s,l]=react$1.useState(!!e&&n?.enabled!==false),[i,y]=react$1.useState(false),f=!!e&&n?.enabled!==false,c=react$1.useCallback(async()=>{if(!(!f||!e)){l(true),d(null),y(false);try{let h=await o.from(t).get(e);a(h.data);}catch(h){let p=h instanceof Error?h:new Error("Query failed");p.message.includes("not found")||p.message.includes("404")?y(true):d(p);}finally{l(false);}}},[o,t,e,f]);return react$1.useEffect(()=>{c();},[c]),{data:r,isLoading:s,error:u,isNotFound:i,refetch:c}}function _(t,e,n){let o=t.from(e);if(n?.where){let r=Array.isArray(n.where)?{AND:n.where}:n.where;o=o.where(r);}if(n?.orderBy){let r=Array.isArray(n.orderBy)?n.orderBy:[n.orderBy];for(let a of r)o=o.orderBy(a.field,a.direction);}if(n?.select&&(o=o.select(...n.select)),n?.include)for(let r of n.include)o=o.include(r);return o}function pe(t,e){let n=v(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(null),[d,s]=react$1.useState(e?.enabled!==false),[l,i]=react$1.useState(false),y=e?.enabled!==false,f=react$1.useCallback(async()=>{if(y){s(true),u(null),i(false);try{let h=await _(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).first();h?r(h):i(!0);}catch(c){let h=c instanceof Error?c:new Error("Query failed");u(h);}finally{s(false);}}},[n,t,e,y]);return react$1.useEffect(()=>{f();},[f]),{data:o,isLoading:d,error:a,isNotFound:l,refetch:f}}function he(t,e){let n=v(),[o,r]=react$1.useState([]),[a,u]=react$1.useState(e?.initialPage??1),[d,s]=react$1.useState(null),[l,i]=react$1.useState(true),[y,f]=react$1.useState(null),c=e?.pageSize??10,h=react$1.useCallback(async k=>{i(true),f(null);try{let w=await _(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).paginate({page:k,pageSize:c});r(w.data),s(w.pageInfo),u(w.pageInfo.page),e?.onSuccess?.(w);}catch(q){let w=q instanceof Error?q:new Error("Query failed");f(w),e?.onError?.(w);}finally{i(false);}},[n,t,e,c]);react$1.useEffect(()=>{h(a);},[h,a]);let p=d?.total??0,T=d?.pageCount??0,g=d?.hasNextPage??false,m=d?.hasPrevPage??false,U=react$1.useCallback(()=>{g&&u(k=>k+1);},[g]),M=react$1.useCallback(()=>{m&&u(k=>k-1);},[m]),R=react$1.useCallback(k=>{let q=Math.max(1,Math.min(k,T||1));u(q);},[T]),x=react$1.useCallback(()=>h(a),[h,a]);return {data:o,page:a,pageSize:c,totalCount:p,totalPages:T,hasNextPage:g,hasPrevPage:m,isLoading:l,error:y,nextPage:U,prevPage:M,goToPage:R,refetch:x}}function ye(t,e){let n=v(),[o,r]=react$1.useState([]),[a,u]=react$1.useState(null),[d,s]=react$1.useState(true),[l,i]=react$1.useState(true),[y,f]=react$1.useState(false),[c,h]=react$1.useState(null),p=e?.pageSize??20,T=react$1.useCallback(async()=>{if(!d)return;o.length===0?i(true):f(true),h(null);try{let x=await _(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({cursor:a??void 0,limit:p});r(k=>[...k,x.data]),u(x.nextCursor??null),s(x.hasMore),e?.onSuccess?.(x.data,x.hasMore);}catch(R){let x=R instanceof Error?R:new Error("Query failed");h(x),e?.onError?.(x);}finally{i(false),f(false);}},[n,t,e,a,d,o.length,p]);react$1.useEffect(()=>{T();},[]);let g=react$1.useCallback(async()=>{r([]),u(null),s(true),i(true);try{let R=await _(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({limit:p});r([R.data]),u(R.nextCursor??null),s(R.hasMore);}catch(M){h(M instanceof Error?M:new Error("Query failed"));}finally{i(false);}},[n,t,e,p]),m=react$1.useCallback(()=>{r([]),u(null),s(true),i(true),h(null);},[]);return {data:o.flat(),pages:o,hasNextPage:d,isLoading:l,isFetchingNextPage:y,error:c,fetchNextPage:T,refetch:g,reset:m}}function me(t,e){let n=v(),[o,r]=react$1.useState(0),[a,u]=react$1.useState(e?.enabled!==false),[d,s]=react$1.useState(null),l=e?.enabled!==false,i=react$1.useCallback(async()=>{if(l){u(true),s(null);try{let y=n.from(t);e?.where&&(y=y.where(e.where));let f=await y.count();r(f);}catch(y){s(y instanceof Error?y:new Error("Count failed"));}finally{u(false);}}},[n,t,e?.where,l]);return react$1.useEffect(()=>{i();},[i]),{count:o,isLoading:a,error:d,refetch:i}}function B(t,e){let[n,o]=react$1.useState("idle"),[r,a]=react$1.useState(void 0),[u,d]=react$1.useState(null),s=react$1.useRef(0),l=react$1.useCallback(()=>{o("idle"),a(void 0),d(null),s.current=0;},[]),i=react$1.useCallback(async f=>{o("loading"),d(null);try{await e?.onMutate?.(f);let c=await t(f);return a(c),o("success"),s.current=0,await e?.onSuccess?.(c,f),await e?.onSettled?.(c,null,f),c}catch(c){let h=c instanceof Error?c:new Error("Mutation failed"),p=e?.retry??0;if(s.current<p){s.current++;let T=e?.retryDelay??1e3;return await new Promise(g=>setTimeout(g,T)),i(f)}throw d(h),o("error"),await e?.onError?.(h,f),await e?.onSettled?.(void 0,h,f),h}},[t,e]);return {mutate:react$1.useCallback(f=>{i(f).catch(()=>{});},[i]),mutateAsync:i,data:r,error:u,isLoading:n==="loading",isSuccess:n==="success",isError:n==="error",isIdle:n==="idle",status:n,reset:l}}function be(t,e){let n=v();return B(async o=>(await n.from(t).create(o)).data,e)}function Ue(t,e){let n=v();return B(async({id:o,data:r})=>(await n.from(t).update(o,r)).data,e)}function ve(t,e){let n=v();return B(async o=>{await n.from(t).delete(o);},e)}function Me(t,e){let n=v();return B(async({data:o,conflictFields:r,updateFields:a})=>{let u={conflictFields:r,updateFields:a};return (await n.from(t).upsert(o,u)).data},e)}function Re(t,e){let n=v();return B(async o=>{let r=await n.from(t).createMany(o);return {count:r.count,records:r.records}},e)}function Ee(t,e){let n=v();return B(async({data:o,where:r})=>{let a=await n.from(t).where(r).updateMany(o);return {count:a.count,records:a.records}},e)}function we(t,e){let n=v();return B(async o=>({count:(await n.from(t).where(o).deleteMany()).count}),e)}function xe(t,e,n){let[o,r]=react$1.useState(t),[a,u]=react$1.useState(false),[d,s]=react$1.useState(null),l=react$1.useRef(t),i=react$1.useCallback(()=>{r(l.current);},[]),y=react$1.useCallback(async c=>{u(true),s(null),l.current=o;let h=n.optimisticUpdate(o,c);r(h);try{let p=await e(c);return r(p),n.onSuccess?.(p,c),n.onSettled?.(p,null,c),p}catch(p){let T=p instanceof Error?p:new Error("Mutation failed");throw s(T),i(),n.onError?.(T,c),n.onSettled?.(void 0,T,c),T}finally{u(false);}},[o,e,n,i]);return {mutate:react$1.useCallback(c=>{y(c).catch(()=>{});},[y]),mutateAsync:y,optimisticData:o,rollback:i,isLoading:a,error:d}}function Oe(t,e){let n=v(),[o,r]=react$1.useState(null),[a,u]=react$1.useState([]),[d,s]=react$1.useState(false),l=react$1.useRef(null),i=react$1.useRef(null),y=e?.enabled!==false;react$1.useEffect(()=>{if(!y)return;let c=n.realtime();l.current=c;let h=c.channel(`table:${t}`);return i.current=h,h.onDbChange({table:t,event:e?.operations||"*"},p=>{switch(p.new!==void 0&&r(p.new),u(T=>[...T,p]),p.operation){case "INSERT":p.new&&e?.onInsert?.(p.new);break;case "UPDATE":p.new&&e?.onUpdate?.(p.new,p.old??null);break;case "DELETE":p.old&&e?.onDelete?.(p.old);break}e?.onChange?.(p);}),h.subscribe(),s(true),()=>{h.unsubscribe(),c.disconnect(),s(false);}},[n,t,y,e]);let f=react$1.useCallback(()=>{u([]);},[]);return {data:o,changes:a,isSubscribed:d,clearChanges:f}}function Z(t,e){let n=v(),[o,r]=react$1.useState(null),[a,u]=react$1.useState([]),[d,s]=react$1.useState(false),l=react$1.useRef(null),i=react$1.useRef(null),y=e?.enabled!==false;react$1.useEffect(()=>{if(!y)return;let h=n.realtime();l.current=h;let p=h.channel(t,{type:e?.type||"public"});return i.current=p,p.on("*",T=>{let g={event:"*",payload:T};r(g),u(m=>[...m,g]);}),p.subscribe(),s(true),()=>{p.unsubscribe(),h.disconnect(),s(false);}},[n,t,y,e?.type]);let f=react$1.useCallback((h,p)=>{i.current?.broadcast({event:h,payload:p});},[]),c=react$1.useCallback(()=>{i.current?.unsubscribe(),s(false);},[]);return {broadcast:f,lastMessage:o,messages:a,isJoined:d,leave:c}}function Pe(t,e,n){let o=v(),[r,a]=react$1.useState({}),[u,d]=react$1.useState(false),s=react$1.useRef(null),l=react$1.useRef(null),i=n?.enabled!==false;react$1.useEffect(()=>{if(!i)return;let p=o.realtime();s.current=p;let T=p.channel(t,{type:"presence"});return l.current=T,T.presence.onSync(g=>{a(g);}),T.subscribe(),e&&(T.presence.track({state:e}),d(true)),()=>{T.unsubscribe(),p.disconnect(),d(false);}},[o,t,i,e]);let y=react$1.useCallback(p=>{l.current?.presence.update(p);},[]),f=react$1.useCallback(()=>{l.current?.presence.untrack(),d(false);},[]),c=Object.keys(r).length,h=Object.keys(r);return {presence:r,count:c,onlineUsers:h,update:y,leave:f,isTracking:u}}function Ie(){let t=v(),[e,n]=react$1.useState("disconnected"),[o,r]=react$1.useState(null),a=react$1.useRef(null);react$1.useEffect(()=>{let s=t.realtime();return a.current=s,n(s.connectionState),r(s.connectionId),s.on("connect",()=>{n("connected"),r(s.connectionId);}),s.on("disconnect",()=>{n("disconnected"),r(null);}),s.on("reconnect",()=>{n("connected"),r(s.connectionId);}),s.on("error",()=>{n("disconnected");}),()=>{s.disconnect();}},[t]);let u=react$1.useCallback(()=>{a.current?.connect();},[]),d=react$1.useCallback(()=>{a.current?.disconnect();},[]);return {state:e,isConnected:e==="connected",connectionId:o,reconnect:u,disconnect:d}}function Se(t,e){let n=Z(t,e);return {send:n.broadcast,messages:n.messages,lastMessage:n.lastMessage,isConnected:n.isJoined}}function ee(t){let e=v(),[n,o]=react$1.useState(0),[r,a]=react$1.useState(false),[u,d]=react$1.useState(null),[s,l]=react$1.useState(null),[i,y]=react$1.useState([]),f=react$1.useCallback(T=>{if(t?.maxSize&&T.size>t.maxSize)throw new Error(`File size (${Math.round(T.size/1024/1024)}MB) exceeds maximum allowed (${Math.round(t.maxSize/1024/1024)}MB)`);if(t?.allowedTypes&&t.allowedTypes.length>0&&!t.allowedTypes.includes(T.type))throw new Error(`File type "${T.type}" is not allowed. Allowed types: ${t.allowedTypes.join(", ")}`)},[t?.maxSize,t?.allowedTypes]),c=react$1.useCallback(async(T,g)=>{a(true),d(null),o(0);try{f(g),t?.onUploadStart?.(g);let m=await e.storage.upload(T,g,{contentType:g.type,metadata:t?.metadata,isPublic:t?.isPublic});return o(100),l(m),y(U=>[...U,m]),t?.onSuccess?.(m,g),m}catch(m){let U=m instanceof Error?m:new Error("Upload failed");throw d(U),t?.onError?.(U,g),U}finally{a(false);}},[e,t,f]),h=react$1.useCallback(async T=>{let g=[];for(let{key:m,file:U}of T){let M=await c(m,U);g.push(M);}return g},[c]),p=react$1.useCallback(()=>{o(0),a(false),d(null),l(null),y([]);},[]);return {upload:c,uploadMultiple:h,progress:n,isUploading:r,error:u,result:s,results:i,reset:p}}function Fe(t){let e=v(),[n,o]=react$1.useState(false),[r,a]=react$1.useState(null),u=react$1.useCallback(async(s,l)=>{o(true),a(null);try{let i=await e.storage.download(s);return t?.onSuccess?.(i,l||s.split("/").pop()||"download"),i}catch(i){let y=i instanceof Error?i:new Error("Download failed");throw a(y),t?.onError?.(y),y}finally{o(false);}},[e,t]),d=react$1.useCallback(async(s,l)=>{let i=await u(s,l),y=l||s.split("/").pop()||"download",f=URL.createObjectURL(i),c=document.createElement("a");c.href=f,c.download=y,document.body.appendChild(c),c.click(),document.body.removeChild(c),URL.revokeObjectURL(f);},[u]);return {download:u,downloadAndSave:d,isDownloading:n,error:r}}function ke(t,e){let n=v(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(null),[d,s]=react$1.useState(!!t&&e?.enabled!==false),[l,i]=react$1.useState(null),y=!!t&&e?.enabled!==false,f=react$1.useCallback(async()=>{if(!(!y||!t)){s(true),i(null);try{let h=await n.storage.createSignedUrl(t,e?.expiresIn);r(h);let p=await n.storage.getMetadata(t);u(p);}catch(h){i(h instanceof Error?h:new Error("Failed to load file"));}finally{s(false);}}},[n,t,e?.expiresIn,y]),c=react$1.useCallback(async()=>{t&&(await n.storage.delete(t),r(null),u(null));},[n,t]);return {url:o,metadata:a,isLoading:d,error:l,refresh:f,deleteFile:c}}function Ce(t){let e=v(),[n,o]=react$1.useState([]),[r,a]=react$1.useState(t?.enabled!==false),[u,d]=react$1.useState(null),s=t?.enabled!==false,l=react$1.useCallback(async()=>{if(s){a(true),d(null);try{let i=await e.storage.list({prefix:t?.prefix,limit:t?.limit});o(i.files);}catch(i){d(i instanceof Error?i:new Error("Failed to list files"));}finally{a(false);}}},[e,t,s]);return {files:n,isLoading:r,error:u,refresh:l}}function De(t){let e=ee(t),[n,o]=react$1.useState(false),[r,a]=react$1.useState([]),u=react$1.useRef(null),d=react$1.useCallback(g=>{g.preventDefault(),g.stopPropagation(),o(true);},[]),s=react$1.useCallback(g=>{g.preventDefault(),g.stopPropagation(),o(false);},[]),l=react$1.useCallback(g=>{let m=t?.basePath||"uploads",U=Date.now().toString(36)+Math.random().toString(36).substr(2,9),M=g.name.split(".").pop()||"";return t?.uniqueKey?`${m}/${U}.${M}`:`${m}/${g.name}`},[t?.basePath,t?.uniqueKey]),i=react$1.useCallback(async g=>{g.preventDefault(),g.stopPropagation(),o(false);let m=Array.from(g.dataTransfer.files);if(m.length===0)return;let U=t?.multiple?m:[m[0]];a(U),await e.uploadMultiple(U.map(M=>({key:l(M),file:M})));},[t?.multiple,e,l]),y=react$1.useCallback(async g=>{let m=Array.from(g.target.files||[]);m.length!==0&&(a(m),await e.uploadMultiple(m.map(U=>({key:l(U),file:U}))));},[e,l]),f=react$1.useCallback(()=>{u.current?.click();},[]),c=react$1.useCallback(()=>{a([]),e.reset();},[e]),h=react$1.useCallback(g=>{a(m=>m.filter((U,M)=>M!==g));},[]),p=react$1.useCallback(()=>({onDragOver:d,onDragLeave:s,onDrop:i,onClick:f}),[d,s,i,f]),T=react$1.useCallback(()=>({type:"file",onChange:y,multiple:t?.multiple??false,accept:t?.allowedTypes?.join(",")??"",style:{display:"none"},ref:g=>{u.current=g;}}),[y,t?.multiple,t?.allowedTypes]);return {...e,dropzone:{isDragOver:n,selectedFiles:r},getDropzoneProps:p,getInputProps:T,openFilePicker:f,clearFiles:c,removeFile:h}}function Le(t){return v().storage.getPublicUrl(t)}var G=new Map;function Ae(t,e){let n=v(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(null),[l,i]=react$1.useState(false),[y,f]=react$1.useState(null),c=react$1.useRef(0),h=react$1.useCallback(async T=>{u(true),s(null),i(false);try{let g={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(g.retry={maxRetries:e.maxRetries??3});let m=await n.functions.invoke(t,{body:T},g);return r(m.data),f(m),i(!0),c.current=0,e?.onSuccess?.(m.data,T),m.data}catch(g){let m=g instanceof Error?g:new Error("Function invocation failed");throw s(m),e?.onError?.(m,T),m}finally{u(false);}},[n,t,e]),p=react$1.useCallback(()=>{r(null),u(false),s(null),i(false),f(null),c.current=0;},[]);return {invoke:h,data:o,isLoading:a,error:d,isSuccess:l,invocation:y,reset:p}}function Ve(t,e){let n=v(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(null),[l,i]=react$1.useState(false),[y,f]=react$1.useState(null),c=e?.cache??false,h=e?.cacheTtl??6e4,p=react$1.useCallback(U=>`${t}:${JSON.stringify(U)}`,[t]),T=react$1.useCallback(async U=>{if(c){let M=p(U),R=G.get(M);if(R&&Date.now()-R.timestamp<h){let x=R.data;return r(x),i(true),e?.onSuccess?.(x,U),x}}u(true),s(null),i(false);try{let M={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(M.retry={maxRetries:e.maxRetries??3});let x=await n.functions.rpc(t,M)(U);if(r(x),i(!0),c){let k=p(U);G.set(k,{data:x,timestamp:Date.now()});}return e?.onSuccess?.(x,U),x}catch(M){let R=M instanceof Error?M:new Error("RPC call failed");throw s(R),e?.onError?.(R,U),R}finally{u(false);}},[n,t,e,c,h,p]),g=react$1.useCallback(()=>{let U=`${t}:`;for(let M of G.keys())M.startsWith(U)&&G.delete(M);},[t]),m=react$1.useCallback(()=>{r(null),u(false),s(null),i(false),f(null);},[]);return {invoke:T,data:o,isLoading:a,error:d,isSuccess:l,invocation:y,reset:m,clearCache:g}}function Qe(t){let e=v(),[n,o]=react$1.useState([]),[r,a]=react$1.useState(true),[u,d]=react$1.useState(null),s=react$1.useCallback(async()=>{a(true),d(null);try{let l=await e.functions.list({projectId:t.projectId,envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset});o(l);}catch(l){d(l instanceof Error?l:new Error("Failed to list functions"));}finally{a(false);}},[e,t.projectId,t.envId,t.enabled,t.limit,t.offset]);return react$1.useEffect(()=>{s();},[s]),{functions:n,isLoading:r,error:u,refresh:s}}function Be(t,e){let n=v(),[o,r]=react$1.useState([]),[a,u]=react$1.useState(false),[d,s]=react$1.useState(0),[l,i]=react$1.useState(null);return {invoke:react$1.useCallback(async f=>{u(true),i(null),s(0),r([]);let c=[],h=e?.concurrency??5,p=f.length,T=0;try{for(let g=0;g<f.length;g+=h){let m=f.slice(g,g+h),U=await Promise.all(m.map(async M=>(await n.functions.invoke(t,{body:M})).data));c.push(...U),T+=m.length,s(Math.round(T/p*100)),r([...c]),e?.onProgress?.(T,p);}return e?.onSuccess?.(c),c}catch(g){let m=g instanceof Error?g:new Error("Batch invocation failed");throw i(m),e?.onError?.(m),m}finally{u(false);}},[n,t,e]),results:o,isLoading:a,progress:d,error:l}}function ze(t){let e=v(),[n,o]=react$1.useState(false),[r,a]=react$1.useState(null),[u,d]=react$1.useState(null),[s,l]=react$1.useState(null),i=react$1.useCallback(async(f,c)=>{l(null);try{let p=(await e.functions.invoke(t,{body:f})).requestId??`scheduled-${Date.now()}`;return d(p),o(!0),a(new Date(Date.now()+c.delayMs)),p}catch(h){let p=h instanceof Error?h:new Error("Failed to schedule function");throw l(p),p}},[e,t]),y=react$1.useCallback(async()=>{o(false),a(null),d(null);},[]);return {schedule:i,cancel:y,isScheduled:n,scheduledAt:r,requestId:u,error:s}}Object.defineProperty(exports,"AuthProvider",{enumerable:true,get:function(){return react.AuthProvider}});Object.defineProperty(exports,"VaifAuthClient",{enumerable:true,get:function(){return react.VaifAuthClient}});Object.defineProperty(exports,"createAuthClient",{enumerable:true,get:function(){return react.createAuthClient}});Object.defineProperty(exports,"useAuthClient",{enumerable:true,get:function(){return react.useAuthClient}});Object.defineProperty(exports,"useIdentities",{enumerable:true,get:function(){return react.useIdentities}});Object.defineProperty(exports,"useIsAuthenticated",{enumerable:true,get:function(){return react.useIsAuthenticated}});Object.defineProperty(exports,"usePassword",{enumerable:true,get:function(){return react.usePassword}});Object.defineProperty(exports,"useSession",{enumerable:true,get:function(){return react.useSession}});Object.defineProperty(exports,"useSessions",{enumerable:true,get:function(){return react.useSessions}});Object.defineProperty(exports,"useStandaloneAuth",{enumerable:true,get:function(){return react.useAuth}});Object.defineProperty(exports,"useStandaloneMFA",{enumerable:true,get:function(){return react.useMFA}});Object.defineProperty(exports,"useStandaloneUser",{enumerable:true,get:function(){return react.useUser}});exports.VaifProvider=ne;exports.useAuth=re;exports.useBatchCreate=Re;exports.useBatchDelete=we;exports.useBatchInvoke=Be;exports.useBatchUpdate=Ee;exports.useBroadcast=Se;exports.useChannel=Z;exports.useCount=me;exports.useCreate=be;exports.useDelete=ve;exports.useDownload=Fe;exports.useDropzone=De;exports.useEmailVerification=ie;exports.useFile=ke;exports.useFiles=Ce;exports.useFunction=Ae;exports.useFunctionList=Qe;exports.useInfiniteQuery=ye;exports.useMFA=ce;exports.useMagicLink=le;exports.useMutation=B;exports.useOAuth=ue;exports.useOptimisticMutation=xe;exports.usePaginatedQuery=he;exports.usePasswordReset=ae;exports.usePresence=Pe;exports.usePublicUrl=Le;exports.useQuery=fe;exports.useQueryById=ge;exports.useQueryFirst=pe;exports.useRealtimeConnection=Ie;exports.useRpc=Ve;exports.useScheduledFunction=ze;exports.useSubscription=Oe;exports.useToken=oe;exports.useUpdate=Ue;exports.useUpload=ee;exports.useUpsert=Me;exports.useUser=se;exports.useVaif=D;exports.useVaifClient=v;
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {createContext,useState,useRef,useCallback,useEffect,useContext}from'react';import {createVaifClient}from'@vaiftech/client';import {jsx}from'react/jsx-runtime';export{AuthProvider,VaifAuthClient,createAuthClient,useAuthClient,useIdentities,useIsAuthenticated,usePassword,useSession,useSessions,useAuth as useStandaloneAuth,useMFA as useStandaloneMFA,useUser as useStandaloneUser}from'@vaiftech/auth/react';var te=createContext(null);function ne({config:t,children:e,onAuthStateChange:n,autoRefreshSession:o=true,storageKey:r="vaif-auth"}){let[a]=useState(()=>createVaifClient(t)),[u,d]=useState(null),[s,l]=useState(null),[i,h]=useState(null),[f,c]=useState(null),[y,g]=useState(true),T=useRef(null),p=useCallback((x,M,F)=>{let U={token:x,refreshToken:M,expiresAt:F};localStorage.setItem(r,JSON.stringify(U));},[r]),m=useCallback(()=>{localStorage.removeItem(r),d(null),l(null),h(null),c(null);},[r]);useEffect(()=>((async()=>{try{let M=localStorage.getItem(r);if(!M){g(!1);return}let F=JSON.parse(M);if(F.expiresAt&&new Date(F.expiresAt)<=new Date)if(F.refreshToken)try{let U=await a.auth.refreshToken(F.refreshToken);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();else {l(F.token),h(F.refreshToken??null),c(F.expiresAt??null);try{let U=await a.auth.getUser();d(U);}catch{if(F.refreshToken)try{let U=await a.auth.refreshToken(F.refreshToken);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();}}}catch{m();}finally{g(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[a,r,p,m]),useEffect(()=>{if(!o||!f||!i)return;let x=new Date(f).getTime(),M=Date.now(),F=x-M-6e4;return F>0&&(T.current=setTimeout(async()=>{try{let U=await a.auth.refreshToken(i);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);}catch{m();}},F)),()=>{T.current&&clearTimeout(T.current);}},[o,a,f,i,p,m]),useEffect(()=>{y||n?.(u);},[u,y,n]);let b=useCallback(async(x,M)=>{let F=await a.auth.login(x,M);if("mfaRequired"in F)throw new Error("MFA required - use verifyMFA to complete login");let U=F;return d(U.user),l(U.token),h(U.refreshToken??null),c(U.expiresAt??null),p(U.token,U.refreshToken,U.expiresAt),U},[a,p]),w=useCallback(async(x,M,F)=>{let U=await a.auth.signUp(x,M,{metadata:F});return d(U.user),l(U.token),h(U.refreshToken??null),c(U.expiresAt??null),p(U.token,U.refreshToken,U.expiresAt),U},[a,p]),v=useCallback(async()=>{try{await a.auth.logout();}finally{m();}},[a,m]),E=useCallback(async()=>{if(!i)throw new Error("No refresh token available");let x=await a.auth.refreshToken(i);l(x.token),h(x.refreshToken??null),c(x.expiresAt),p(x.token,x.refreshToken,x.expiresAt);},[a,i,p]),C=useCallback(x=>{d(M=>M?{...M,...x}:null);},[]),q={client:a,user:u,token:s,isLoading:y,isAuthenticated:!!u,signIn:b,signUp:w,signOut:v,refreshSession:E,updateUser:C};return jsx(te.Provider,{value:q,children:e})}function D(){let t=useContext(te);if(!t)throw new Error("useVaif must be used within a VaifProvider");return t}function R(){let{client:t}=D();return t}function re(){let{user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}=D();return {user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}}function se(){let{user:t}=D();return t}function oe(){let{token:t}=D();return t}function ae(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(false),l=useCallback(async h=>{n(true),r(null);try{await t.auth.requestPasswordReset({email:h}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to request reset")),f}finally{n(false);}},[t]),i=useCallback(async(h,f)=>{n(true),r(null);try{await t.auth.confirmPasswordReset({token:h,password:f}),s(!0);}catch(c){throw r(c instanceof Error?c:new Error("Failed to reset password")),c}finally{n(false);}},[t]);return {requestReset:l,confirmReset:i,isLoading:e,error:o,isRequested:a,isConfirmed:d}}function ie(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(false),l=useCallback(async h=>{n(true),r(null);try{await t.auth.requestEmailVerification({email:h}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to send verification")),f}finally{n(false);}},[t]),i=useCallback(async h=>{n(true),r(null);try{await t.auth.confirmEmailVerification({token:h}),s(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to verify email")),f}finally{n(false);}},[t]);return {requestVerification:l,confirmVerification:i,isLoading:e,error:o,isSent:a,isVerified:d}}function le(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),[a,u]=useState(false),d=useCallback(async l=>{n(true),r(null);try{await t.auth.requestMagicLink({email:l}),u(!0);}catch(i){throw r(i instanceof Error?i:new Error("Failed to send magic link")),i}finally{n(false);}},[t]),s=useCallback(async l=>{n(true),r(null);try{return await t.auth.verifyMagicLink({token:l})}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify magic link")),i}finally{n(false);}},[t]);return {sendMagicLink:d,verifyMagicLink:s,isLoading:e,error:o,isSent:a}}function ue(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null);return {signInWithOAuth:useCallback(async(u,d)=>{n(true),r(null);try{let s=await t.auth.getOAuthSignInUrl({provider:u,redirectUrl:d});s.url&&(window.location.href=s.url);}catch(s){throw r(s instanceof Error?s:new Error("Failed to start OAuth flow")),s}finally{n(false);}},[t]),isLoading:e,error:o}}function ce(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),a=useCallback(async s=>{n(true),r(null);try{return await t.auth.setupMFA(s)}catch(l){throw r(l instanceof Error?l:new Error("Failed to setup MFA")),l}finally{n(false);}},[t]),u=useCallback(async(s,l)=>{n(true),r(null);try{return await t.auth.verifyMFA(s,l)}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify MFA")),i}finally{n(false);}},[t]),d=useCallback(async s=>{n(true),r(null);try{await t.auth.disableMFA(s);}catch(l){throw r(l instanceof Error?l:new Error("Failed to disable MFA")),l}finally{n(false);}},[t]);return {setup:a,verify:u,disable:d,isLoading:e,error:o}}var de=new Map;function He(t,e){return `${t}:${JSON.stringify(e||{})}`}function fe(t,e){let n=R(),[o,r]=useState(e?.initialData||[]),[a,u]=useState(null),[d,s]=useState(e?.enabled===false?"idle":"loading"),[l,i]=useState(false),[h,f]=useState(true),c=useRef(0),y=e?.enabled!==false,g=e?.staleTime??0,T=e?.keepPreviousData??false,p=useCallback(async()=>{if(!y)return;let m={where:e?.where,orderBy:e?.orderBy,limit:e?.limit,offset:e?.offset,select:e?.select,include:e?.include,distinct:e?.distinct},b=He(t,m),w=de.get(b);if(w&&Date.now()-w.timestamp<g){r(w.data),s("success"),f(false);return}i(true),T||s("loading"),u(null);try{let v=await n.from(t).list(m);r(v.data),s("success"),f(!1),c.current=Date.now(),de.set(b,{data:v.data,timestamp:Date.now()}),e?.onSuccess?.(v.data);}catch(v){let E=v instanceof Error?v:new Error("Query failed");u(E),s("error"),e?.onError?.(E);}finally{i(false);}},[n,t,e,y,g,T]);return useEffect(()=>{p();},[p]),useEffect(()=>{if(!e?.refetchOnWindowFocus||!y)return;let m=()=>{Date.now()-c.current>g&&(f(true),p());};return window.addEventListener("focus",m),()=>window.removeEventListener("focus",m)},[e?.refetchOnWindowFocus,y,g,p]),useEffect(()=>{if(!e?.refetchInterval||e.refetchInterval<=0||!y)return;let m=setInterval(()=>{f(true),p();},e.refetchInterval);return ()=>clearInterval(m)},[e?.refetchInterval,y,p]),{data:o,isLoading:d==="loading",isFetching:l,error:a,status:d,refetch:p,isStale:h,isEnabled:y}}function pe(t,e,n){let o=R(),[r,a]=useState(null),[u,d]=useState(null),[s,l]=useState(!!e&&n?.enabled!==false),[i,h]=useState(false),f=!!e&&n?.enabled!==false,c=useCallback(async()=>{if(!(!f||!e)){l(true),d(null),h(false);try{let y=await o.from(t).get(e);a(y.data);}catch(y){let g=y instanceof Error?y:new Error("Query failed");g.message.includes("not found")||g.message.includes("404")?h(true):d(g);}finally{l(false);}}},[o,t,e,f]);return useEffect(()=>{c();},[c]),{data:r,isLoading:s,error:u,isNotFound:i,refetch:c}}function K(t,e,n){let o=t.from(e);if(n?.where){let r=Array.isArray(n.where)?{AND:n.where}:n.where;o=o.where(r);}if(n?.orderBy){let r=Array.isArray(n.orderBy)?n.orderBy:[n.orderBy];for(let a of r)o=o.orderBy(a.field,a.direction);}if(n?.select&&(o=o.select(...n.select)),n?.include)for(let r of n.include)o=o.include(r);return o}function ge(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState(null),[d,s]=useState(e?.enabled!==false),[l,i]=useState(false),h=e?.enabled!==false,f=useCallback(async()=>{if(h){s(true),u(null),i(false);try{let y=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).first();y?r(y):i(!0);}catch(c){let y=c instanceof Error?c:new Error("Query failed");u(y);}finally{s(false);}}},[n,t,e,h]);return useEffect(()=>{f();},[f]),{data:o,isLoading:d,error:a,isNotFound:l,refetch:f}}function ye(t,e){let n=R(),[o,r]=useState([]),[a,u]=useState(e?.initialPage??1),[d,s]=useState(null),[l,i]=useState(true),[h,f]=useState(null),c=e?.pageSize??10,y=useCallback(async C=>{i(true),f(null);try{let x=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).paginate({page:C,pageSize:c});r(x.data),s(x.pageInfo),u(x.pageInfo.page),e?.onSuccess?.(x);}catch(q){let x=q instanceof Error?q:new Error("Query failed");f(x),e?.onError?.(x);}finally{i(false);}},[n,t,e,c]);useEffect(()=>{y(a);},[y,a]);let g=d?.total??0,T=d?.pageCount??0,p=d?.hasNextPage??false,m=d?.hasPrevPage??false,b=useCallback(()=>{p&&u(C=>C+1);},[p]),w=useCallback(()=>{m&&u(C=>C-1);},[m]),v=useCallback(C=>{let q=Math.max(1,Math.min(C,T||1));u(q);},[T]),E=useCallback(()=>y(a),[y,a]);return {data:o,page:a,pageSize:c,totalCount:g,totalPages:T,hasNextPage:p,hasPrevPage:m,isLoading:l,error:h,nextPage:b,prevPage:w,goToPage:v,refetch:E}}function he(t,e){let n=R(),[o,r]=useState([]),[a,u]=useState(null),[d,s]=useState(true),[l,i]=useState(true),[h,f]=useState(false),[c,y]=useState(null),g=e?.pageSize??20,T=useCallback(async()=>{if(!d)return;o.length===0?i(true):f(true),y(null);try{let E=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({cursor:a??void 0,limit:g});r(C=>[...C,E.data]),u(E.nextCursor??null),s(E.hasMore),e?.onSuccess?.(E.data,E.hasMore);}catch(v){let E=v instanceof Error?v:new Error("Query failed");y(E),e?.onError?.(E);}finally{i(false),f(false);}},[n,t,e,a,d,o.length,g]);useEffect(()=>{T();},[]);let p=useCallback(async()=>{r([]),u(null),s(true),i(true);try{let v=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({limit:g});r([v.data]),u(v.nextCursor??null),s(v.hasMore);}catch(w){y(w instanceof Error?w:new Error("Query failed"));}finally{i(false);}},[n,t,e,g]),m=useCallback(()=>{r([]),u(null),s(true),i(true),y(null);},[]);return {data:o.flat(),pages:o,hasNextPage:d,isLoading:l,isFetchingNextPage:h,error:c,fetchNextPage:T,refetch:p,reset:m}}function me(t,e){let n=R(),[o,r]=useState(0),[a,u]=useState(e?.enabled!==false),[d,s]=useState(null),l=e?.enabled!==false,i=useCallback(async()=>{if(l){u(true),s(null);try{let h=n.from(t);e?.where&&(h=h.where(e.where));let f=await h.count();r(f);}catch(h){s(h instanceof Error?h:new Error("Count failed"));}finally{u(false);}}},[n,t,e?.where,l]);return useEffect(()=>{i();},[i]),{count:o,isLoading:a,error:d,refetch:i}}function B(t,e){let[n,o]=useState("idle"),[r,a]=useState(void 0),[u,d]=useState(null),s=useRef(0),l=useCallback(()=>{o("idle"),a(void 0),d(null),s.current=0;},[]),i=useCallback(async f=>{o("loading"),d(null);try{await e?.onMutate?.(f);let c=await t(f);return a(c),o("success"),s.current=0,await e?.onSuccess?.(c,f),await e?.onSettled?.(c,null,f),c}catch(c){let y=c instanceof Error?c:new Error("Mutation failed"),g=e?.retry??0;if(s.current<g){s.current++;let T=e?.retryDelay??1e3;return await new Promise(p=>setTimeout(p,T)),i(f)}throw d(y),o("error"),await e?.onError?.(y,f),await e?.onSettled?.(void 0,y,f),y}},[t,e]);return {mutate:useCallback(f=>{i(f).catch(()=>{});},[i]),mutateAsync:i,data:r,error:u,isLoading:n==="loading",isSuccess:n==="success",isError:n==="error",isIdle:n==="idle",status:n,reset:l}}function Ue(t,e){let n=R();return B(async o=>(await n.from(t).create(o)).data,e)}function be(t,e){let n=R();return B(async({id:o,data:r})=>(await n.from(t).update(o,r)).data,e)}function we(t,e){let n=R();return B(async o=>{await n.from(t).delete(o);},e)}function Re(t,e){let n=R();return B(async({data:o,conflictFields:r,updateFields:a})=>{let u={conflictFields:r,updateFields:a};return (await n.from(t).upsert(o,u)).data},e)}function ve(t,e){let n=R();return B(async o=>{let r=await n.from(t).createMany(o);return {count:r.count,records:r.records}},e)}function Pe(t,e){let n=R();return B(async({data:o,where:r})=>{let a=await n.from(t).where(r).updateMany(o);return {count:a.count,records:a.records}},e)}function xe(t,e){let n=R();return B(async o=>({count:(await n.from(t).where(o).deleteMany()).count}),e)}function Ee(t,e,n){let[o,r]=useState(t),[a,u]=useState(false),[d,s]=useState(null),l=useRef(t),i=useCallback(()=>{r(l.current);},[]),h=useCallback(async c=>{u(true),s(null),l.current=o;let y=n.optimisticUpdate(o,c);r(y);try{let g=await e(c);return r(g),n.onSuccess?.(g,c),n.onSettled?.(g,null,c),g}catch(g){let T=g instanceof Error?g:new Error("Mutation failed");throw s(T),i(),n.onError?.(T,c),n.onSettled?.(void 0,T,c),T}finally{u(false);}},[o,e,n,i]);return {mutate:useCallback(c=>{h(c).catch(()=>{});},[h]),mutateAsync:h,optimisticData:o,rollback:i,isLoading:a,error:d}}function Oe(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState([]),[d,s]=useState(false),l=useRef(null),i=useRef(null),h=e?.enabled!==false;useEffect(()=>{if(!h)return;let c=n.realtime();l.current=c;let y=c.channel(`table:${t}`);return i.current=y,y.onDbChange({table:t,event:e?.operations||"*"},g=>{switch(g.new!==void 0&&r(g.new),u(T=>[...T,g]),g.operation){case "INSERT":g.new&&e?.onInsert?.(g.new);break;case "UPDATE":g.new&&e?.onUpdate?.(g.new,g.old??null);break;case "DELETE":g.old&&e?.onDelete?.(g.old);break}e?.onChange?.(g);}),y.subscribe(),s(true),()=>{y.unsubscribe(),c.disconnect(),s(false);}},[n,t,h,e]);let f=useCallback(()=>{u([]);},[]);return {data:o,changes:a,isSubscribed:d,clearChanges:f}}function Z(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState([]),[d,s]=useState(false),l=useRef(null),i=useRef(null),h=e?.enabled!==false;useEffect(()=>{if(!h)return;let y=n.realtime();l.current=y;let g=y.channel(t,{type:e?.type||"public"});return i.current=g,g.on("*",T=>{let p={event:"*",payload:T};r(p),u(m=>[...m,p]);}),g.subscribe(),s(true),()=>{g.unsubscribe(),y.disconnect(),s(false);}},[n,t,h,e?.type]);let f=useCallback((y,g)=>{i.current?.broadcast({event:y,payload:g});},[]),c=useCallback(()=>{i.current?.unsubscribe(),s(false);},[]);return {broadcast:f,lastMessage:o,messages:a,isJoined:d,leave:c}}function Fe(t,e,n){let o=R(),[r,a]=useState({}),[u,d]=useState(false),s=useRef(null),l=useRef(null),i=n?.enabled!==false;useEffect(()=>{if(!i)return;let g=o.realtime();s.current=g;let T=g.channel(t,{type:"presence"});return l.current=T,T.presence.onSync(p=>{a(p);}),T.subscribe(),e&&(T.presence.track({state:e}),d(true)),()=>{T.unsubscribe(),g.disconnect(),d(false);}},[o,t,i,e]);let h=useCallback(g=>{l.current?.presence.update(g);},[]),f=useCallback(()=>{l.current?.presence.untrack(),d(false);},[]),c=Object.keys(r).length,y=Object.keys(r);return {presence:r,count:c,onlineUsers:y,update:h,leave:f,isTracking:u}}function ke(){let t=R(),[e,n]=useState("disconnected"),[o,r]=useState(null),a=useRef(null);useEffect(()=>{let s=t.realtime();return a.current=s,n(s.connectionState),r(s.connectionId),s.on("connect",()=>{n("connected"),r(s.connectionId);}),s.on("disconnect",()=>{n("disconnected"),r(null);}),s.on("reconnect",()=>{n("connected"),r(s.connectionId);}),s.on("error",()=>{n("disconnected");}),()=>{s.disconnect();}},[t]);let u=useCallback(()=>{a.current?.connect();},[]),d=useCallback(()=>{a.current?.disconnect();},[]);return {state:e,isConnected:e==="connected",connectionId:o,reconnect:u,disconnect:d}}function Se(t,e){let n=Z(t,e);return {send:n.broadcast,messages:n.messages,lastMessage:n.lastMessage,isConnected:n.isJoined}}function ee(t){let e=R(),[n,o]=useState(0),[r,a]=useState(false),[u,d]=useState(null),[s,l]=useState(null),[i,h]=useState([]),f=useCallback(T=>{if(t?.maxSize&&T.size>t.maxSize)throw new Error(`File size (${Math.round(T.size/1024/1024)}MB) exceeds maximum allowed (${Math.round(t.maxSize/1024/1024)}MB)`);if(t?.allowedTypes&&t.allowedTypes.length>0&&!t.allowedTypes.includes(T.type))throw new Error(`File type "${T.type}" is not allowed. Allowed types: ${t.allowedTypes.join(", ")}`)},[t?.maxSize,t?.allowedTypes]),c=useCallback(async(T,p)=>{a(true),d(null),o(0);try{f(p),t?.onUploadStart?.(p);let m=await e.storage.upload(T,p,{contentType:p.type,metadata:t?.metadata,isPublic:t?.isPublic});return o(100),l(m),h(b=>[...b,m]),t?.onSuccess?.(m,p),m}catch(m){let b=m instanceof Error?m:new Error("Upload failed");throw d(b),t?.onError?.(b,p),b}finally{a(false);}},[e,t,f]),y=useCallback(async T=>{let p=[];for(let{key:m,file:b}of T){let w=await c(m,b);p.push(w);}return p},[c]),g=useCallback(()=>{o(0),a(false),d(null),l(null),h([]);},[]);return {upload:c,uploadMultiple:y,progress:n,isUploading:r,error:u,result:s,results:i,reset:g}}function Ie(t){let e=R(),[n,o]=useState(false),[r,a]=useState(null),u=useCallback(async(s,l)=>{o(true),a(null);try{let i=await e.storage.download(s);return t?.onSuccess?.(i,l||s.split("/").pop()||"download"),i}catch(i){let h=i instanceof Error?i:new Error("Download failed");throw a(h),t?.onError?.(h),h}finally{o(false);}},[e,t]),d=useCallback(async(s,l)=>{let i=await u(s,l),h=l||s.split("/").pop()||"download",f=URL.createObjectURL(i),c=document.createElement("a");c.href=f,c.download=h,document.body.appendChild(c),c.click(),document.body.removeChild(c),URL.revokeObjectURL(f);},[u]);return {download:u,downloadAndSave:d,isDownloading:n,error:r}}function Ce(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState(null),[d,s]=useState(!!t&&e?.enabled!==false),[l,i]=useState(null),h=!!t&&e?.enabled!==false,f=useCallback(async()=>{if(!(!h||!t)){s(true),i(null);try{let y=await n.storage.createSignedUrl(t,e?.expiresIn);r(y);let g=await n.storage.getMetadata(t);u(g);}catch(y){i(y instanceof Error?y:new Error("Failed to load file"));}finally{s(false);}}},[n,t,e?.expiresIn,h]),c=useCallback(async()=>{t&&(await n.storage.delete(t),r(null),u(null));},[n,t]);return {url:o,metadata:a,isLoading:d,error:l,refresh:f,deleteFile:c}}function Me(t){let e=R(),[n,o]=useState([]),[r,a]=useState(t?.enabled!==false),[u,d]=useState(null),s=t?.enabled!==false,l=useCallback(async()=>{if(s){a(true),d(null);try{let i=await e.storage.list({prefix:t?.prefix,limit:t?.limit});o(i.files);}catch(i){d(i instanceof Error?i:new Error("Failed to list files"));}finally{a(false);}}},[e,t,s]);return {files:n,isLoading:r,error:u,refresh:l}}function De(t){let e=ee(t),[n,o]=useState(false),[r,a]=useState([]),u=useRef(null),d=useCallback(p=>{p.preventDefault(),p.stopPropagation(),o(true);},[]),s=useCallback(p=>{p.preventDefault(),p.stopPropagation(),o(false);},[]),l=useCallback(p=>{let m=t?.basePath||"uploads",b=Date.now().toString(36)+Math.random().toString(36).substr(2,9),w=p.name.split(".").pop()||"";return t?.uniqueKey?`${m}/${b}.${w}`:`${m}/${p.name}`},[t?.basePath,t?.uniqueKey]),i=useCallback(async p=>{p.preventDefault(),p.stopPropagation(),o(false);let m=Array.from(p.dataTransfer.files);if(m.length===0)return;let b=t?.multiple?m:[m[0]];a(b),await e.uploadMultiple(b.map(w=>({key:l(w),file:w})));},[t?.multiple,e,l]),h=useCallback(async p=>{let m=Array.from(p.target.files||[]);m.length!==0&&(a(m),await e.uploadMultiple(m.map(b=>({key:l(b),file:b}))));},[e,l]),f=useCallback(()=>{u.current?.click();},[]),c=useCallback(()=>{a([]),e.reset();},[e]),y=useCallback(p=>{a(m=>m.filter((b,w)=>w!==p));},[]),g=useCallback(()=>({onDragOver:d,onDragLeave:s,onDrop:i,onClick:f}),[d,s,i,f]),T=useCallback(()=>({type:"file",onChange:h,multiple:t?.multiple??false,accept:t?.allowedTypes?.join(",")??"",style:{display:"none"},ref:p=>{u.current=p;}}),[h,t?.multiple,t?.allowedTypes]);return {...e,dropzone:{isDragOver:n,selectedFiles:r},getDropzoneProps:g,getInputProps:T,openFilePicker:f,clearFiles:c,removeFile:y}}function Ae(t){return R().storage.getPublicUrl(t)}var G=new Map;function Le(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(null),[l,i]=useState(false),[h,f]=useState(null),c=useRef(0),y=useCallback(async T=>{u(true),s(null),i(false);try{let p={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(p.retry={maxRetries:e.maxRetries??3});let m=await n.functions.invoke(t,{body:T},p);return r(m.data),f(m),i(!0),c.current=0,e?.onSuccess?.(m.data,T),m.data}catch(p){let m=p instanceof Error?p:new Error("Function invocation failed");throw s(m),e?.onError?.(m,T),m}finally{u(false);}},[n,t,e]),g=useCallback(()=>{r(null),u(false),s(null),i(false),f(null),c.current=0;},[]);return {invoke:y,data:o,isLoading:a,error:d,isSuccess:l,invocation:h,reset:g}}function Ve(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(null),[l,i]=useState(false),[h,f]=useState(null),c=e?.cache??false,y=e?.cacheTtl??6e4,g=useCallback(b=>`${t}:${JSON.stringify(b)}`,[t]),T=useCallback(async b=>{if(c){let w=g(b),v=G.get(w);if(v&&Date.now()-v.timestamp<y){let E=v.data;return r(E),i(true),e?.onSuccess?.(E,b),E}}u(true),s(null),i(false);try{let w={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(w.retry={maxRetries:e.maxRetries??3});let E=await n.functions.rpc(t,w)(b);if(r(E),i(!0),c){let C=g(b);G.set(C,{data:E,timestamp:Date.now()});}return e?.onSuccess?.(E,b),E}catch(w){let v=w instanceof Error?w:new Error("RPC call failed");throw s(v),e?.onError?.(v,b),v}finally{u(false);}},[n,t,e,c,y,g]),p=useCallback(()=>{let b=`${t}:`;for(let w of G.keys())w.startsWith(b)&&G.delete(w);},[t]),m=useCallback(()=>{r(null),u(false),s(null),i(false),f(null);},[]);return {invoke:T,data:o,isLoading:a,error:d,isSuccess:l,invocation:h,reset:m,clearCache:p}}function Qe(t){let e=R(),[n,o]=useState([]),[r,a]=useState(true),[u,d]=useState(null),s=useCallback(async()=>{a(true),d(null);try{let l=await e.functions.list({projectId:t.projectId,envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset});o(l);}catch(l){d(l instanceof Error?l:new Error("Failed to list functions"));}finally{a(false);}},[e,t.projectId,t.envId,t.enabled,t.limit,t.offset]);return useEffect(()=>{s();},[s]),{functions:n,isLoading:r,error:u,refresh:s}}function Be(t,e){let n=R(),[o,r]=useState([]),[a,u]=useState(false),[d,s]=useState(0),[l,i]=useState(null);return {invoke:useCallback(async f=>{u(true),i(null),s(0),r([]);let c=[],y=e?.concurrency??5,g=f.length,T=0;try{for(let p=0;p<f.length;p+=y){let m=f.slice(p,p+y),b=await Promise.all(m.map(async w=>(await n.functions.invoke(t,{body:w})).data));c.push(...b),T+=m.length,s(Math.round(T/g*100)),r([...c]),e?.onProgress?.(T,g);}return e?.onSuccess?.(c),c}catch(p){let m=p instanceof Error?p:new Error("Batch invocation failed");throw i(m),e?.onError?.(m),m}finally{u(false);}},[n,t,e]),results:o,isLoading:a,progress:d,error:l}}function ze(t){let e=R(),[n,o]=useState(false),[r,a]=useState(null),[u,d]=useState(null),[s,l]=useState(null),i=useCallback(async(f,c)=>{l(null);try{let g=(await e.functions.invoke(t,{body:f})).requestId??`scheduled-${Date.now()}`;return d(g),o(!0),a(new Date(Date.now()+c.delayMs)),g}catch(y){let g=y instanceof Error?y:new Error("Failed to schedule function");throw l(g),g}},[e,t]),h=useCallback(async()=>{o(false),a(null),d(null);},[]);return {schedule:i,cancel:h,isScheduled:n,scheduledAt:r,requestId:u,error:s}}export{ne as VaifProvider,re as useAuth,ve as useBatchCreate,xe as useBatchDelete,Be as useBatchInvoke,Pe as useBatchUpdate,Se as useBroadcast,Z as useChannel,me as useCount,Ue as useCreate,we as useDelete,Ie as useDownload,De as useDropzone,ie as useEmailVerification,Ce as useFile,Me as useFiles,Le as useFunction,Qe as useFunctionList,he as useInfiniteQuery,ce as useMFA,le as useMagicLink,B as useMutation,ue as useOAuth,Ee as useOptimisticMutation,ye as usePaginatedQuery,ae as usePasswordReset,Fe as usePresence,Ae as usePublicUrl,fe as useQuery,pe as useQueryById,ge as useQueryFirst,ke as useRealtimeConnection,Ve as useRpc,ze as useScheduledFunction,Oe as useSubscription,oe as useToken,be as useUpdate,ee as useUpload,Re as useUpsert,se as useUser,D as useVaif,R as useVaifClient};
|
|
1
|
+
import {createContext,useState,useRef,useCallback,useEffect,useContext}from'react';import {createVaifClient}from'@vaiftech/client';import {jsx}from'react/jsx-runtime';export{AuthProvider,VaifAuthClient,createAuthClient,useAuthClient,useIdentities,useIsAuthenticated,usePassword,useSession,useSessions,useAuth as useStandaloneAuth,useMFA as useStandaloneMFA,useUser as useStandaloneUser}from'@vaiftech/auth/react';var te=createContext(null);function ne({config:t,children:e,onAuthStateChange:n,autoRefreshSession:o=true,storageKey:r="vaif-auth"}){let[a]=useState(()=>createVaifClient(t)),[u,d]=useState(null),[s,l]=useState(null),[i,y]=useState(null),[f,c]=useState(null),[h,p]=useState(true),T=useRef(null),g=useCallback((w,C,P)=>{let b={token:w,refreshToken:C,expiresAt:P};localStorage.setItem(r,JSON.stringify(b));},[r]),m=useCallback(()=>{localStorage.removeItem(r),d(null),l(null),y(null),c(null);},[r]);useEffect(()=>((async()=>{try{let C=localStorage.getItem(r);if(!C){p(!1);return}let P=JSON.parse(C);if(P.expiresAt&&new Date(P.expiresAt)<=new Date)if(P.refreshToken)try{let b=await a.auth.refreshToken(P.refreshToken);l(b.token),y(b.refreshToken??null),c(b.expiresAt),g(b.token,b.refreshToken,b.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();else {l(P.token),y(P.refreshToken??null),c(P.expiresAt??null);try{let b=await a.auth.getUser();d(b);}catch{if(P.refreshToken)try{let b=await a.auth.refreshToken(P.refreshToken);l(b.token),y(b.refreshToken??null),c(b.expiresAt),g(b.token,b.refreshToken,b.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();}}}catch{m();}finally{p(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[a,r,g,m]),useEffect(()=>{if(!o||!f||!i)return;let w=new Date(f).getTime(),C=Date.now(),P=w-C-6e4;return P>0&&(T.current=setTimeout(async()=>{try{let b=await a.auth.refreshToken(i);l(b.token),y(b.refreshToken??null),c(b.expiresAt),g(b.token,b.refreshToken,b.expiresAt);}catch{m();}},P)),()=>{T.current&&clearTimeout(T.current);}},[o,a,f,i,g,m]),useEffect(()=>{h||n?.(u);},[u,h,n]);let U=useCallback(async(w,C)=>{let P=await a.auth.login(w,C);if("mfaRequired"in P)throw new Error("MFA required - use verifyMFA to complete login");let b=P;return d(b.user),l(b.token),y(b.refreshToken??null),c(b.expiresAt??null),g(b.token,b.refreshToken,b.expiresAt),b},[a,g]),M=useCallback(async(w,C,P)=>{let b=await a.auth.signUp(w,C,{metadata:P});return d(b.user),l(b.token),y(b.refreshToken??null),c(b.expiresAt??null),g(b.token,b.refreshToken,b.expiresAt),b},[a,g]),R=useCallback(async()=>{try{await a.auth.logout();}finally{m();}},[a,m]),x=useCallback(async()=>{if(!i)throw new Error("No refresh token available");let w=await a.auth.refreshToken(i);l(w.token),y(w.refreshToken??null),c(w.expiresAt),g(w.token,w.refreshToken,w.expiresAt);},[a,i,g]),k=useCallback(w=>{d(C=>C?{...C,...w}:null);},[]),q={client:a,user:u,token:s,isLoading:h,isAuthenticated:!!u,signIn:U,signUp:M,signOut:R,refreshSession:x,updateUser:k};return jsx(te.Provider,{value:q,children:e})}function D(){let t=useContext(te);if(!t)throw new Error("useVaif must be used within a VaifProvider");return t}function v(){let{client:t}=D();return t}function re(){let{user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}=D();return {user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}}function se(){let{user:t}=D();return t}function oe(){let{token:t}=D();return t}function ae(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(false),l=useCallback(async y=>{n(true),r(null);try{await t.auth.requestPasswordReset({email:y}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to request reset")),f}finally{n(false);}},[t]),i=useCallback(async(y,f)=>{n(true),r(null);try{await t.auth.confirmPasswordReset({token:y,password:f}),s(!0);}catch(c){throw r(c instanceof Error?c:new Error("Failed to reset password")),c}finally{n(false);}},[t]);return {requestReset:l,confirmReset:i,isLoading:e,error:o,isRequested:a,isConfirmed:d}}function ie(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(false),l=useCallback(async y=>{n(true),r(null);try{await t.auth.requestEmailVerification({email:y}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to send verification")),f}finally{n(false);}},[t]),i=useCallback(async y=>{n(true),r(null);try{await t.auth.confirmEmailVerification({token:y}),s(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to verify email")),f}finally{n(false);}},[t]);return {requestVerification:l,confirmVerification:i,isLoading:e,error:o,isSent:a,isVerified:d}}function le(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),[a,u]=useState(false),d=useCallback(async l=>{n(true),r(null);try{await t.auth.requestMagicLink({email:l}),u(!0);}catch(i){throw r(i instanceof Error?i:new Error("Failed to send magic link")),i}finally{n(false);}},[t]),s=useCallback(async l=>{n(true),r(null);try{return await t.auth.verifyMagicLink({token:l})}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify magic link")),i}finally{n(false);}},[t]);return {sendMagicLink:d,verifyMagicLink:s,isLoading:e,error:o,isSent:a}}function ue(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null);return {signInWithOAuth:useCallback(async(u,d)=>{n(true),r(null);try{let s=await t.auth.getOAuthSignInUrl({provider:u,redirectUrl:d});s.url&&(window.location.href=s.url);}catch(s){throw r(s instanceof Error?s:new Error("Failed to start OAuth flow")),s}finally{n(false);}},[t]),isLoading:e,error:o}}function ce(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),a=useCallback(async s=>{n(true),r(null);try{return await t.auth.setupMFA(s)}catch(l){throw r(l instanceof Error?l:new Error("Failed to setup MFA")),l}finally{n(false);}},[t]),u=useCallback(async(s,l)=>{n(true),r(null);try{return await t.auth.verifyMFA(s,l)}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify MFA")),i}finally{n(false);}},[t]),d=useCallback(async s=>{n(true),r(null);try{await t.auth.disableMFA(s);}catch(l){throw r(l instanceof Error?l:new Error("Failed to disable MFA")),l}finally{n(false);}},[t]);return {setup:a,verify:u,disable:d,isLoading:e,error:o}}var de=new Map;function Je(t,e){return `${t}:${JSON.stringify(e||{})}`}function fe(t,e){let n=v(),[o,r]=useState(e?.initialData||[]),[a,u]=useState(null),[d,s]=useState(e?.enabled===false?"idle":"loading"),[l,i]=useState(false),[y,f]=useState(true),c=useRef(0),h=e?.enabled!==false,p=e?.staleTime??0,T=e?.keepPreviousData??false,g=useCallback(async()=>{if(!h)return;let m={where:e?.where,orderBy:e?.orderBy,limit:e?.limit,offset:e?.offset,select:e?.select,include:e?.include,distinct:e?.distinct},U=Je(t,m),M=de.get(U);if(M&&Date.now()-M.timestamp<p){r(M.data),s("success"),f(false);return}i(true),T||s("loading"),u(null);try{let R=await n.from(t).list(m);r(R.data),s("success"),f(!1),c.current=Date.now(),de.set(U,{data:R.data,timestamp:Date.now()}),e?.onSuccess?.(R.data);}catch(R){let x=R instanceof Error?R:new Error("Query failed");u(x),s("error"),e?.onError?.(x);}finally{i(false);}},[n,t,e,h,p,T]);return useEffect(()=>{g();},[g]),useEffect(()=>{if(!e?.refetchOnWindowFocus||!h)return;let m=()=>{Date.now()-c.current>p&&(f(true),g());};return window.addEventListener("focus",m),()=>window.removeEventListener("focus",m)},[e?.refetchOnWindowFocus,h,p,g]),useEffect(()=>{if(!e?.refetchInterval||e.refetchInterval<=0||!h)return;let m=setInterval(()=>{f(true),g();},e.refetchInterval);return ()=>clearInterval(m)},[e?.refetchInterval,h,g]),{data:o,isLoading:d==="loading",isFetching:l,error:a,status:d,refetch:g,isStale:y,isEnabled:h}}function ge(t,e,n){let o=v(),[r,a]=useState(null),[u,d]=useState(null),[s,l]=useState(!!e&&n?.enabled!==false),[i,y]=useState(false),f=!!e&&n?.enabled!==false,c=useCallback(async()=>{if(!(!f||!e)){l(true),d(null),y(false);try{let h=await o.from(t).get(e);a(h.data);}catch(h){let p=h instanceof Error?h:new Error("Query failed");p.message.includes("not found")||p.message.includes("404")?y(true):d(p);}finally{l(false);}}},[o,t,e,f]);return useEffect(()=>{c();},[c]),{data:r,isLoading:s,error:u,isNotFound:i,refetch:c}}function _(t,e,n){let o=t.from(e);if(n?.where){let r=Array.isArray(n.where)?{AND:n.where}:n.where;o=o.where(r);}if(n?.orderBy){let r=Array.isArray(n.orderBy)?n.orderBy:[n.orderBy];for(let a of r)o=o.orderBy(a.field,a.direction);}if(n?.select&&(o=o.select(...n.select)),n?.include)for(let r of n.include)o=o.include(r);return o}function pe(t,e){let n=v(),[o,r]=useState(null),[a,u]=useState(null),[d,s]=useState(e?.enabled!==false),[l,i]=useState(false),y=e?.enabled!==false,f=useCallback(async()=>{if(y){s(true),u(null),i(false);try{let h=await _(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).first();h?r(h):i(!0);}catch(c){let h=c instanceof Error?c:new Error("Query failed");u(h);}finally{s(false);}}},[n,t,e,y]);return useEffect(()=>{f();},[f]),{data:o,isLoading:d,error:a,isNotFound:l,refetch:f}}function he(t,e){let n=v(),[o,r]=useState([]),[a,u]=useState(e?.initialPage??1),[d,s]=useState(null),[l,i]=useState(true),[y,f]=useState(null),c=e?.pageSize??10,h=useCallback(async k=>{i(true),f(null);try{let w=await _(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).paginate({page:k,pageSize:c});r(w.data),s(w.pageInfo),u(w.pageInfo.page),e?.onSuccess?.(w);}catch(q){let w=q instanceof Error?q:new Error("Query failed");f(w),e?.onError?.(w);}finally{i(false);}},[n,t,e,c]);useEffect(()=>{h(a);},[h,a]);let p=d?.total??0,T=d?.pageCount??0,g=d?.hasNextPage??false,m=d?.hasPrevPage??false,U=useCallback(()=>{g&&u(k=>k+1);},[g]),M=useCallback(()=>{m&&u(k=>k-1);},[m]),R=useCallback(k=>{let q=Math.max(1,Math.min(k,T||1));u(q);},[T]),x=useCallback(()=>h(a),[h,a]);return {data:o,page:a,pageSize:c,totalCount:p,totalPages:T,hasNextPage:g,hasPrevPage:m,isLoading:l,error:y,nextPage:U,prevPage:M,goToPage:R,refetch:x}}function ye(t,e){let n=v(),[o,r]=useState([]),[a,u]=useState(null),[d,s]=useState(true),[l,i]=useState(true),[y,f]=useState(false),[c,h]=useState(null),p=e?.pageSize??20,T=useCallback(async()=>{if(!d)return;o.length===0?i(true):f(true),h(null);try{let x=await _(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({cursor:a??void 0,limit:p});r(k=>[...k,x.data]),u(x.nextCursor??null),s(x.hasMore),e?.onSuccess?.(x.data,x.hasMore);}catch(R){let x=R instanceof Error?R:new Error("Query failed");h(x),e?.onError?.(x);}finally{i(false),f(false);}},[n,t,e,a,d,o.length,p]);useEffect(()=>{T();},[]);let g=useCallback(async()=>{r([]),u(null),s(true),i(true);try{let R=await _(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({limit:p});r([R.data]),u(R.nextCursor??null),s(R.hasMore);}catch(M){h(M instanceof Error?M:new Error("Query failed"));}finally{i(false);}},[n,t,e,p]),m=useCallback(()=>{r([]),u(null),s(true),i(true),h(null);},[]);return {data:o.flat(),pages:o,hasNextPage:d,isLoading:l,isFetchingNextPage:y,error:c,fetchNextPage:T,refetch:g,reset:m}}function me(t,e){let n=v(),[o,r]=useState(0),[a,u]=useState(e?.enabled!==false),[d,s]=useState(null),l=e?.enabled!==false,i=useCallback(async()=>{if(l){u(true),s(null);try{let y=n.from(t);e?.where&&(y=y.where(e.where));let f=await y.count();r(f);}catch(y){s(y instanceof Error?y:new Error("Count failed"));}finally{u(false);}}},[n,t,e?.where,l]);return useEffect(()=>{i();},[i]),{count:o,isLoading:a,error:d,refetch:i}}function B(t,e){let[n,o]=useState("idle"),[r,a]=useState(void 0),[u,d]=useState(null),s=useRef(0),l=useCallback(()=>{o("idle"),a(void 0),d(null),s.current=0;},[]),i=useCallback(async f=>{o("loading"),d(null);try{await e?.onMutate?.(f);let c=await t(f);return a(c),o("success"),s.current=0,await e?.onSuccess?.(c,f),await e?.onSettled?.(c,null,f),c}catch(c){let h=c instanceof Error?c:new Error("Mutation failed"),p=e?.retry??0;if(s.current<p){s.current++;let T=e?.retryDelay??1e3;return await new Promise(g=>setTimeout(g,T)),i(f)}throw d(h),o("error"),await e?.onError?.(h,f),await e?.onSettled?.(void 0,h,f),h}},[t,e]);return {mutate:useCallback(f=>{i(f).catch(()=>{});},[i]),mutateAsync:i,data:r,error:u,isLoading:n==="loading",isSuccess:n==="success",isError:n==="error",isIdle:n==="idle",status:n,reset:l}}function be(t,e){let n=v();return B(async o=>(await n.from(t).create(o)).data,e)}function Ue(t,e){let n=v();return B(async({id:o,data:r})=>(await n.from(t).update(o,r)).data,e)}function ve(t,e){let n=v();return B(async o=>{await n.from(t).delete(o);},e)}function Me(t,e){let n=v();return B(async({data:o,conflictFields:r,updateFields:a})=>{let u={conflictFields:r,updateFields:a};return (await n.from(t).upsert(o,u)).data},e)}function Re(t,e){let n=v();return B(async o=>{let r=await n.from(t).createMany(o);return {count:r.count,records:r.records}},e)}function Ee(t,e){let n=v();return B(async({data:o,where:r})=>{let a=await n.from(t).where(r).updateMany(o);return {count:a.count,records:a.records}},e)}function we(t,e){let n=v();return B(async o=>({count:(await n.from(t).where(o).deleteMany()).count}),e)}function xe(t,e,n){let[o,r]=useState(t),[a,u]=useState(false),[d,s]=useState(null),l=useRef(t),i=useCallback(()=>{r(l.current);},[]),y=useCallback(async c=>{u(true),s(null),l.current=o;let h=n.optimisticUpdate(o,c);r(h);try{let p=await e(c);return r(p),n.onSuccess?.(p,c),n.onSettled?.(p,null,c),p}catch(p){let T=p instanceof Error?p:new Error("Mutation failed");throw s(T),i(),n.onError?.(T,c),n.onSettled?.(void 0,T,c),T}finally{u(false);}},[o,e,n,i]);return {mutate:useCallback(c=>{y(c).catch(()=>{});},[y]),mutateAsync:y,optimisticData:o,rollback:i,isLoading:a,error:d}}function Oe(t,e){let n=v(),[o,r]=useState(null),[a,u]=useState([]),[d,s]=useState(false),l=useRef(null),i=useRef(null),y=e?.enabled!==false;useEffect(()=>{if(!y)return;let c=n.realtime();l.current=c;let h=c.channel(`table:${t}`);return i.current=h,h.onDbChange({table:t,event:e?.operations||"*"},p=>{switch(p.new!==void 0&&r(p.new),u(T=>[...T,p]),p.operation){case "INSERT":p.new&&e?.onInsert?.(p.new);break;case "UPDATE":p.new&&e?.onUpdate?.(p.new,p.old??null);break;case "DELETE":p.old&&e?.onDelete?.(p.old);break}e?.onChange?.(p);}),h.subscribe(),s(true),()=>{h.unsubscribe(),c.disconnect(),s(false);}},[n,t,y,e]);let f=useCallback(()=>{u([]);},[]);return {data:o,changes:a,isSubscribed:d,clearChanges:f}}function Z(t,e){let n=v(),[o,r]=useState(null),[a,u]=useState([]),[d,s]=useState(false),l=useRef(null),i=useRef(null),y=e?.enabled!==false;useEffect(()=>{if(!y)return;let h=n.realtime();l.current=h;let p=h.channel(t,{type:e?.type||"public"});return i.current=p,p.on("*",T=>{let g={event:"*",payload:T};r(g),u(m=>[...m,g]);}),p.subscribe(),s(true),()=>{p.unsubscribe(),h.disconnect(),s(false);}},[n,t,y,e?.type]);let f=useCallback((h,p)=>{i.current?.broadcast({event:h,payload:p});},[]),c=useCallback(()=>{i.current?.unsubscribe(),s(false);},[]);return {broadcast:f,lastMessage:o,messages:a,isJoined:d,leave:c}}function Pe(t,e,n){let o=v(),[r,a]=useState({}),[u,d]=useState(false),s=useRef(null),l=useRef(null),i=n?.enabled!==false;useEffect(()=>{if(!i)return;let p=o.realtime();s.current=p;let T=p.channel(t,{type:"presence"});return l.current=T,T.presence.onSync(g=>{a(g);}),T.subscribe(),e&&(T.presence.track({state:e}),d(true)),()=>{T.unsubscribe(),p.disconnect(),d(false);}},[o,t,i,e]);let y=useCallback(p=>{l.current?.presence.update(p);},[]),f=useCallback(()=>{l.current?.presence.untrack(),d(false);},[]),c=Object.keys(r).length,h=Object.keys(r);return {presence:r,count:c,onlineUsers:h,update:y,leave:f,isTracking:u}}function Ie(){let t=v(),[e,n]=useState("disconnected"),[o,r]=useState(null),a=useRef(null);useEffect(()=>{let s=t.realtime();return a.current=s,n(s.connectionState),r(s.connectionId),s.on("connect",()=>{n("connected"),r(s.connectionId);}),s.on("disconnect",()=>{n("disconnected"),r(null);}),s.on("reconnect",()=>{n("connected"),r(s.connectionId);}),s.on("error",()=>{n("disconnected");}),()=>{s.disconnect();}},[t]);let u=useCallback(()=>{a.current?.connect();},[]),d=useCallback(()=>{a.current?.disconnect();},[]);return {state:e,isConnected:e==="connected",connectionId:o,reconnect:u,disconnect:d}}function Se(t,e){let n=Z(t,e);return {send:n.broadcast,messages:n.messages,lastMessage:n.lastMessage,isConnected:n.isJoined}}function ee(t){let e=v(),[n,o]=useState(0),[r,a]=useState(false),[u,d]=useState(null),[s,l]=useState(null),[i,y]=useState([]),f=useCallback(T=>{if(t?.maxSize&&T.size>t.maxSize)throw new Error(`File size (${Math.round(T.size/1024/1024)}MB) exceeds maximum allowed (${Math.round(t.maxSize/1024/1024)}MB)`);if(t?.allowedTypes&&t.allowedTypes.length>0&&!t.allowedTypes.includes(T.type))throw new Error(`File type "${T.type}" is not allowed. Allowed types: ${t.allowedTypes.join(", ")}`)},[t?.maxSize,t?.allowedTypes]),c=useCallback(async(T,g)=>{a(true),d(null),o(0);try{f(g),t?.onUploadStart?.(g);let m=await e.storage.upload(T,g,{contentType:g.type,metadata:t?.metadata,isPublic:t?.isPublic});return o(100),l(m),y(U=>[...U,m]),t?.onSuccess?.(m,g),m}catch(m){let U=m instanceof Error?m:new Error("Upload failed");throw d(U),t?.onError?.(U,g),U}finally{a(false);}},[e,t,f]),h=useCallback(async T=>{let g=[];for(let{key:m,file:U}of T){let M=await c(m,U);g.push(M);}return g},[c]),p=useCallback(()=>{o(0),a(false),d(null),l(null),y([]);},[]);return {upload:c,uploadMultiple:h,progress:n,isUploading:r,error:u,result:s,results:i,reset:p}}function Fe(t){let e=v(),[n,o]=useState(false),[r,a]=useState(null),u=useCallback(async(s,l)=>{o(true),a(null);try{let i=await e.storage.download(s);return t?.onSuccess?.(i,l||s.split("/").pop()||"download"),i}catch(i){let y=i instanceof Error?i:new Error("Download failed");throw a(y),t?.onError?.(y),y}finally{o(false);}},[e,t]),d=useCallback(async(s,l)=>{let i=await u(s,l),y=l||s.split("/").pop()||"download",f=URL.createObjectURL(i),c=document.createElement("a");c.href=f,c.download=y,document.body.appendChild(c),c.click(),document.body.removeChild(c),URL.revokeObjectURL(f);},[u]);return {download:u,downloadAndSave:d,isDownloading:n,error:r}}function ke(t,e){let n=v(),[o,r]=useState(null),[a,u]=useState(null),[d,s]=useState(!!t&&e?.enabled!==false),[l,i]=useState(null),y=!!t&&e?.enabled!==false,f=useCallback(async()=>{if(!(!y||!t)){s(true),i(null);try{let h=await n.storage.createSignedUrl(t,e?.expiresIn);r(h);let p=await n.storage.getMetadata(t);u(p);}catch(h){i(h instanceof Error?h:new Error("Failed to load file"));}finally{s(false);}}},[n,t,e?.expiresIn,y]),c=useCallback(async()=>{t&&(await n.storage.delete(t),r(null),u(null));},[n,t]);return {url:o,metadata:a,isLoading:d,error:l,refresh:f,deleteFile:c}}function Ce(t){let e=v(),[n,o]=useState([]),[r,a]=useState(t?.enabled!==false),[u,d]=useState(null),s=t?.enabled!==false,l=useCallback(async()=>{if(s){a(true),d(null);try{let i=await e.storage.list({prefix:t?.prefix,limit:t?.limit});o(i.files);}catch(i){d(i instanceof Error?i:new Error("Failed to list files"));}finally{a(false);}}},[e,t,s]);return {files:n,isLoading:r,error:u,refresh:l}}function De(t){let e=ee(t),[n,o]=useState(false),[r,a]=useState([]),u=useRef(null),d=useCallback(g=>{g.preventDefault(),g.stopPropagation(),o(true);},[]),s=useCallback(g=>{g.preventDefault(),g.stopPropagation(),o(false);},[]),l=useCallback(g=>{let m=t?.basePath||"uploads",U=Date.now().toString(36)+Math.random().toString(36).substr(2,9),M=g.name.split(".").pop()||"";return t?.uniqueKey?`${m}/${U}.${M}`:`${m}/${g.name}`},[t?.basePath,t?.uniqueKey]),i=useCallback(async g=>{g.preventDefault(),g.stopPropagation(),o(false);let m=Array.from(g.dataTransfer.files);if(m.length===0)return;let U=t?.multiple?m:[m[0]];a(U),await e.uploadMultiple(U.map(M=>({key:l(M),file:M})));},[t?.multiple,e,l]),y=useCallback(async g=>{let m=Array.from(g.target.files||[]);m.length!==0&&(a(m),await e.uploadMultiple(m.map(U=>({key:l(U),file:U}))));},[e,l]),f=useCallback(()=>{u.current?.click();},[]),c=useCallback(()=>{a([]),e.reset();},[e]),h=useCallback(g=>{a(m=>m.filter((U,M)=>M!==g));},[]),p=useCallback(()=>({onDragOver:d,onDragLeave:s,onDrop:i,onClick:f}),[d,s,i,f]),T=useCallback(()=>({type:"file",onChange:y,multiple:t?.multiple??false,accept:t?.allowedTypes?.join(",")??"",style:{display:"none"},ref:g=>{u.current=g;}}),[y,t?.multiple,t?.allowedTypes]);return {...e,dropzone:{isDragOver:n,selectedFiles:r},getDropzoneProps:p,getInputProps:T,openFilePicker:f,clearFiles:c,removeFile:h}}function Le(t){return v().storage.getPublicUrl(t)}var G=new Map;function Ae(t,e){let n=v(),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(null),[l,i]=useState(false),[y,f]=useState(null),c=useRef(0),h=useCallback(async T=>{u(true),s(null),i(false);try{let g={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(g.retry={maxRetries:e.maxRetries??3});let m=await n.functions.invoke(t,{body:T},g);return r(m.data),f(m),i(!0),c.current=0,e?.onSuccess?.(m.data,T),m.data}catch(g){let m=g instanceof Error?g:new Error("Function invocation failed");throw s(m),e?.onError?.(m,T),m}finally{u(false);}},[n,t,e]),p=useCallback(()=>{r(null),u(false),s(null),i(false),f(null),c.current=0;},[]);return {invoke:h,data:o,isLoading:a,error:d,isSuccess:l,invocation:y,reset:p}}function Ve(t,e){let n=v(),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(null),[l,i]=useState(false),[y,f]=useState(null),c=e?.cache??false,h=e?.cacheTtl??6e4,p=useCallback(U=>`${t}:${JSON.stringify(U)}`,[t]),T=useCallback(async U=>{if(c){let M=p(U),R=G.get(M);if(R&&Date.now()-R.timestamp<h){let x=R.data;return r(x),i(true),e?.onSuccess?.(x,U),x}}u(true),s(null),i(false);try{let M={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(M.retry={maxRetries:e.maxRetries??3});let x=await n.functions.rpc(t,M)(U);if(r(x),i(!0),c){let k=p(U);G.set(k,{data:x,timestamp:Date.now()});}return e?.onSuccess?.(x,U),x}catch(M){let R=M instanceof Error?M:new Error("RPC call failed");throw s(R),e?.onError?.(R,U),R}finally{u(false);}},[n,t,e,c,h,p]),g=useCallback(()=>{let U=`${t}:`;for(let M of G.keys())M.startsWith(U)&&G.delete(M);},[t]),m=useCallback(()=>{r(null),u(false),s(null),i(false),f(null);},[]);return {invoke:T,data:o,isLoading:a,error:d,isSuccess:l,invocation:y,reset:m,clearCache:g}}function Qe(t){let e=v(),[n,o]=useState([]),[r,a]=useState(true),[u,d]=useState(null),s=useCallback(async()=>{a(true),d(null);try{let l=await e.functions.list({projectId:t.projectId,envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset});o(l);}catch(l){d(l instanceof Error?l:new Error("Failed to list functions"));}finally{a(false);}},[e,t.projectId,t.envId,t.enabled,t.limit,t.offset]);return useEffect(()=>{s();},[s]),{functions:n,isLoading:r,error:u,refresh:s}}function Be(t,e){let n=v(),[o,r]=useState([]),[a,u]=useState(false),[d,s]=useState(0),[l,i]=useState(null);return {invoke:useCallback(async f=>{u(true),i(null),s(0),r([]);let c=[],h=e?.concurrency??5,p=f.length,T=0;try{for(let g=0;g<f.length;g+=h){let m=f.slice(g,g+h),U=await Promise.all(m.map(async M=>(await n.functions.invoke(t,{body:M})).data));c.push(...U),T+=m.length,s(Math.round(T/p*100)),r([...c]),e?.onProgress?.(T,p);}return e?.onSuccess?.(c),c}catch(g){let m=g instanceof Error?g:new Error("Batch invocation failed");throw i(m),e?.onError?.(m),m}finally{u(false);}},[n,t,e]),results:o,isLoading:a,progress:d,error:l}}function ze(t){let e=v(),[n,o]=useState(false),[r,a]=useState(null),[u,d]=useState(null),[s,l]=useState(null),i=useCallback(async(f,c)=>{l(null);try{let p=(await e.functions.invoke(t,{body:f})).requestId??`scheduled-${Date.now()}`;return d(p),o(!0),a(new Date(Date.now()+c.delayMs)),p}catch(h){let p=h instanceof Error?h:new Error("Failed to schedule function");throw l(p),p}},[e,t]),y=useCallback(async()=>{o(false),a(null),d(null);},[]);return {schedule:i,cancel:y,isScheduled:n,scheduledAt:r,requestId:u,error:s}}export{ne as VaifProvider,re as useAuth,Re as useBatchCreate,we as useBatchDelete,Be as useBatchInvoke,Ee as useBatchUpdate,Se as useBroadcast,Z as useChannel,me as useCount,be as useCreate,ve as useDelete,Fe as useDownload,De as useDropzone,ie as useEmailVerification,ke as useFile,Ce as useFiles,Ae as useFunction,Qe as useFunctionList,ye as useInfiniteQuery,ce as useMFA,le as useMagicLink,B as useMutation,ue as useOAuth,xe as useOptimisticMutation,he as usePaginatedQuery,ae as usePasswordReset,Pe as usePresence,Le as usePublicUrl,fe as useQuery,ge as useQueryById,pe as useQueryFirst,Ie as useRealtimeConnection,Ve as useRpc,ze as useScheduledFunction,Oe as useSubscription,oe as useToken,Ue as useUpdate,ee as useUpload,Me as useUpsert,se as useUser,D as useVaif,v as useVaifClient};
|