@vaiftech/sdk-expo 1.0.10 → 1.2.0
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.d.mts +801 -2
- package/dist/index.d.ts +801 -2
- package/dist/index.js +2 -1
- package/dist/index.mjs +2 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
'use strict';var react$1=require('react'),client=require('@vaiftech/client'),jsxRuntime=require('react/jsx-runtime');require('react-native');var react=require('@vaiftech/auth/react');var K=react$1.createContext(null);function ee({config:e,children:a,storage:t,onAuthStateChange:i,autoRefreshSession:n=true,storageKey:o="vaif-auth"}){let[r]=react$1.useState(()=>client.createVaifClient(e)),[u,l]=react$1.useState(null),[f,d]=react$1.useState(null),[c,s]=react$1.useState(null),[g,h]=react$1.useState(null),[p,m]=react$1.useState(true),T=react$1.useRef(null),U=react$1.useCallback(async(E,S,M)=>{if(!t)return;let y={token:E,refreshToken:S,expiresAt:M};await t.setItem(o,JSON.stringify(y));},[t,o]),R=react$1.useCallback(async()=>{t&&await t.removeItem(o),l(null),d(null),s(null),h(null);},[t,o]);react$1.useEffect(()=>((async()=>{try{if(!t){m(!1);return}let S=await t.getItem(o);if(!S){m(!1);return}let M=JSON.parse(S);if(M.expiresAt&&new Date(M.expiresAt)<=new Date)if(M.refreshToken)try{let y=await r.auth.refreshToken(M.refreshToken);d(y.token),s(y.refreshToken??null),h(y.expiresAt),await U(y.token,y.refreshToken,y.expiresAt);let N=await r.auth.getUser();l(N);}catch{await R();}else await R();else {d(M.token),s(M.refreshToken??null),h(M.expiresAt??null);try{let y=await r.auth.getUser();l(y);}catch{if(M.refreshToken)try{let y=await r.auth.refreshToken(M.refreshToken);d(y.token),s(y.refreshToken??null),h(y.expiresAt),await U(y.token,y.refreshToken,y.expiresAt);let N=await r.auth.getUser();l(N);}catch{await R();}else await R();}}}catch{await R();}finally{m(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[r,t,o,U,R]),react$1.useEffect(()=>{if(!n||!g||!c)return;let E=new Date(g).getTime(),S=Date.now(),M=E-S-6e4;return M>0&&(T.current=setTimeout(async()=>{try{let y=await r.auth.refreshToken(c);d(y.token),s(y.refreshToken??null),h(y.expiresAt),await U(y.token,y.refreshToken,y.expiresAt);}catch{await R();}},M)),()=>{T.current&&clearTimeout(T.current);}},[n,r,g,c,U,R]),react$1.useEffect(()=>{p||i?.(u);},[u,p,i]);let Q=react$1.useCallback(async(E,S)=>{let M=await r.auth.login(E,S);if("mfaRequired"in M)throw new Error("MFA required - use verifyMFA to complete login");let y=M;return l(y.user),d(y.token),s(y.refreshToken??null),h(y.expiresAt??null),await U(y.token,y.refreshToken,y.expiresAt),y},[r,U]),D=react$1.useCallback(async(E,S,M)=>{let y=await r.auth.signUp(E,S,{metadata:M});return l(y.user),d(y.token),s(y.refreshToken??null),h(y.expiresAt??null),await U(y.token,y.refreshToken,y.expiresAt),y},[r,U]),V=react$1.useCallback(async()=>{try{await r.auth.logout();}finally{await R();}},[r,R]),G=react$1.useCallback(async()=>{if(!c)throw new Error("No refresh token available");let E=await r.auth.refreshToken(c);d(E.token),s(E.refreshToken??null),h(E.expiresAt),await U(E.token,E.refreshToken,E.expiresAt);},[r,c,U]),Z=react$1.useCallback(E=>{l(S=>S?{...S,...E}:null);},[]),C={client:r,user:u,token:f,isLoading:p,isAuthenticated:!!u,signIn:Q,signUp:D,signOut:V,refreshSession:G,updateUser:Z};return jsxRuntime.jsx(K.Provider,{value:C,children:a})}function J(){let e=react$1.useContext(K);if(!e)throw new Error("useVaif must be used within a VaifProvider");return e}function b(){let{client:e}=J();return e}function te(){let{client:e,user:a,isLoading:t,isAuthenticated:i,token:n,signIn:o,signUp:r,signOut:u,refreshSession:l,updateUser:f}=J(),d=react$1.useCallback(async s=>{let g=await e.auth.updateProfile(s);return f(g),g},[e,f]),c=react$1.useCallback(async(s,g)=>{await e.auth.changePassword({currentPassword:s,newPassword:g});},[e]);return {user:a,isLoading:t,isAuthenticated:i,token:n,signIn:o,signUp:r,signOut:u,refreshSession:l,updateProfile:d,changePassword:c}}function re(){let{user:e}=J();return e}function ne(){let{token:e}=J();return e}function se(){let e=b(),[a,t]=react$1.useState(false),[i,n]=react$1.useState(null),[o,r]=react$1.useState(false),[u,l]=react$1.useState(false),f=react$1.useCallback(async c=>{t(true),n(null);try{await e.auth.requestPasswordReset({email:c}),r(!0);}catch(s){throw n(s instanceof Error?s:new Error("Failed to request reset")),s}finally{t(false);}},[e]),d=react$1.useCallback(async(c,s)=>{t(true),n(null);try{await e.auth.confirmPasswordReset({token:c,password:s}),l(!0);}catch(g){throw n(g instanceof Error?g:new Error("Failed to reset password")),g}finally{t(false);}},[e]);return {requestReset:f,confirmReset:d,isLoading:a,error:i,isRequested:o,isConfirmed:u}}function oe(){let e=b(),[a,t]=react$1.useState(false),[i,n]=react$1.useState(null),[o,r]=react$1.useState(false),[u,l]=react$1.useState(false),f=react$1.useCallback(async c=>{t(true),n(null);try{await e.auth.requestEmailVerification({email:c}),r(!0);}catch(s){throw n(s instanceof Error?s:new Error("Failed to send verification")),s}finally{t(false);}},[e]),d=react$1.useCallback(async c=>{t(true),n(null);try{await e.auth.confirmEmailVerification({token:c}),l(!0);}catch(s){throw n(s instanceof Error?s:new Error("Failed to verify email")),s}finally{t(false);}},[e]);return {requestVerification:f,confirmVerification:d,isLoading:a,error:i,isSent:o,isVerified:u}}function ae(){let e=b(),[a,t]=react$1.useState(false),[i,n]=react$1.useState(null),[o,r]=react$1.useState(false),u=react$1.useCallback(async f=>{t(true),n(null);try{await e.auth.requestMagicLink({email:f}),r(!0);}catch(d){throw n(d instanceof Error?d:new Error("Failed to send magic link")),d}finally{t(false);}},[e]),l=react$1.useCallback(async f=>{t(true),n(null);try{return await e.auth.verifyMagicLink({token:f})}catch(d){throw n(d instanceof Error?d:new Error("Failed to verify magic link")),d}finally{t(false);}},[e]);return {sendMagicLink:u,verifyMagicLink:l,isLoading:a,error:i,isSent:o}}function ie(){let e=b(),[a,t]=react$1.useState(false),[i,n]=react$1.useState(null);return {signInWithOAuth:react$1.useCallback(async(r,u)=>{t(true),n(null);try{return {url:(await e.auth.getOAuthSignInUrl({provider:r,redirectUrl:u})).url}}catch(l){throw n(l instanceof Error?l:new Error("Failed to start OAuth flow")),l}finally{t(false);}},[e]),isLoading:a,error:i}}function le(){let e=b(),[a,t]=react$1.useState(false),[i,n]=react$1.useState(null),o=react$1.useCallback(async l=>{t(true),n(null);try{return await e.auth.setupMFA(l)}catch(f){throw n(f instanceof Error?f:new Error("Failed to setup MFA")),f}finally{t(false);}},[e]),r=react$1.useCallback(async(l,f)=>{t(true),n(null);try{return await e.auth.verifyMFA(l,f)}catch(d){throw n(d instanceof Error?d:new Error("Failed to verify MFA")),d}finally{t(false);}},[e]),u=react$1.useCallback(async l=>{t(true),n(null);try{await e.auth.disableMFA(l);}catch(f){throw n(f instanceof Error?f:new Error("Failed to disable MFA")),f}finally{t(false);}},[e]);return {setup:o,verify:r,disable:u,isLoading:a,error:i}}function ue(e,a={}){let t=b(),[i,n]=react$1.useState([]),[o,r]=react$1.useState("idle"),[u,l]=react$1.useState(null),f=react$1.useRef(a);f.current=a;let{enabled:d=true,refetchInterval:c,where:s,orderBy:g,...h}=a,p=react$1.useCallback(async()=>{if(d){r("loading"),l(null);try{let m={...h};s&&(Array.isArray(s)?m.where={AND:s}:m.where=s),g&&(m.orderBy=Array.isArray(g)?g:[g]);let T=await t.from(e).list(m);n(T.data??[]),r("success");}catch(m){l(m),r("error");}}},[t,e,d,JSON.stringify(s),JSON.stringify(g),JSON.stringify(h)]);return react$1.useEffect(()=>{p();},[p]),react$1.useEffect(()=>{if(!c||!d)return;let m=setInterval(p,c);return ()=>clearInterval(m)},[c,p,d]),{data:i,status:o,isLoading:o==="loading",isError:o==="error",isSuccess:o==="success",error:u,refetch:p}}function ce(e,a,t={}){let i=b(),[n,o]=react$1.useState(null),[r,u]=react$1.useState("idle"),[l,f]=react$1.useState(null),d=t.enabled!==false&&!!a,c=react$1.useCallback(async()=>{if(!(!d||!a)){u("loading"),f(null);try{let s=await i.from(e).get(a);o(s.data??null),u("success");}catch(s){f(s),u("error");}}},[i,e,a,d]);return react$1.useEffect(()=>{c();},[c]),{data:n,isLoading:r==="loading",isError:r==="error",error:l,refetch:c}}function de(e,a={}){let t=b(),[i,n]=react$1.useState([]),[o,r]=react$1.useState("idle"),[u,l]=react$1.useState(null),[f,d]=react$1.useState(a.initialPage??1),[c,s]=react$1.useState(0),g=a.pageSize??20,{enabled:h=true,where:p,orderBy:m}=a,T=react$1.useCallback(async()=>{if(h){r("loading"),l(null);try{let R=t.from(e);if(p){let D=Array.isArray(p)?p:[p];for(let V of D)R=R.where(V);}if(m){let D=Array.isArray(m)?m:[m];for(let V of D)R=R.orderBy(V.field,V.direction);}let Q=await R.paginate({page:f,pageSize:g});n(Q.data??[]),s(Q.pageInfo?.total??0),r("success");}catch(R){l(R),r("error");}}},[t,e,f,g,h,JSON.stringify(p),JSON.stringify(m)]);react$1.useEffect(()=>{T();},[T]);let U=Math.ceil(c/g);return {data:i,status:o,isLoading:o==="loading",isError:o==="error",isSuccess:o==="success",error:u,refetch:T,page:f,pageSize:g,totalPages:U,totalCount:c,hasNextPage:f<U,hasPreviousPage:f>1,nextPage:()=>d(R=>Math.min(R+1,U)),previousPage:()=>d(R=>Math.max(R-1,1)),goToPage:R=>d(Math.max(1,Math.min(R,U)))}}function fe(e,a={}){let t=b(),[i,n]=react$1.useState(null),[o,r]=react$1.useState(true),[u,l]=react$1.useState(null),[f,d]=react$1.useState(false),{enabled:c=true,where:s,orderBy:g,...h}=a,p=react$1.useCallback(async()=>{if(!c){r(false);return}r(true),l(null),d(false);try{let m={...h,limit:1};s&&(Array.isArray(s)?m.where={AND:s}:m.where=s),g&&(m.orderBy=Array.isArray(g)?g:[g]);let U=(await t.from(e).list(m)).data?.[0]??null;n(U),U||d(!0);}catch(m){l(m instanceof Error?m:new Error("Query failed"));}finally{r(false);}},[t,e,c,JSON.stringify(s),JSON.stringify(g),JSON.stringify(h)]);return react$1.useEffect(()=>{p();},[p]),{data:i,isLoading:o,error:u,isNotFound:f,refetch:p}}function ge(e,a={}){let t=b(),[i,n]=react$1.useState([]),[o,r]=react$1.useState(0),[u,l]=react$1.useState(true),[f,d]=react$1.useState(true),[c,s]=react$1.useState(false),[g,h]=react$1.useState(null),{enabled:p=true,pageSize:m=20,where:T,orderBy:U,onSuccess:R,onError:Q}=a,D=react$1.useCallback(async()=>{if(!u||!p)return;i.length===0?d(true):s(true),h(null);try{let E={limit:m,offset:o*m};T&&(Array.isArray(T)?E.where={AND:T}:E.where=T),U&&(E.orderBy=Array.isArray(U)?U:[U]);let M=(await t.from(e).list(E)).data??[],y=M.length===m;n(N=>[...N,M]),r(N=>N+1),l(y),R?.(M,y);}catch(E){let S=E instanceof Error?E:new Error("Query failed");h(S),Q?.(S);}finally{d(false),s(false);}},[t,e,p,m,o,u,i.length,JSON.stringify(T),JSON.stringify(U),R,Q]);react$1.useEffect(()=>{p&&i.length===0&&D();},[p]);let V=react$1.useCallback(async()=>{n([]),r(0),l(true),d(true),h(null);try{let C={limit:m,offset:0};T&&(Array.isArray(T)?C.where={AND:T}:C.where=T),U&&(C.orderBy=Array.isArray(U)?U:[U]);let S=(await t.from(e).list(C)).data??[],M=S.length===m;n([S]),r(1),l(M);}catch(C){h(C instanceof Error?C:new Error("Query failed"));}finally{d(false);}},[t,e,m,JSON.stringify(T),JSON.stringify(U)]),G=react$1.useCallback(()=>{n([]),r(0),l(true),d(true),h(null);},[]);return {data:i.flat(),pages:i,hasNextPage:u,isLoading:f,isFetchingNextPage:c,error:g,fetchNextPage:D,refetch:V,reset:G}}function pe(e,a={}){let t=b(),[i,n]=react$1.useState(0),[o,r]=react$1.useState(true),[u,l]=react$1.useState(null),{enabled:f=true,where:d}=a,c=react$1.useCallback(async()=>{if(!f){r(false);return}r(true),l(null);try{let s=t.from(e);d&&(s=s.where(d));let g=await s.count();n(g);}catch(s){l(s instanceof Error?s:new Error("Count failed"));}finally{r(false);}},[t,e,f,JSON.stringify(d)]);return react$1.useEffect(()=>{c();},[c]),{count:i,isLoading:o,error:u,refetch:c}}function me(e){let a=b(),[t,i]=react$1.useState(null),[n,o]=react$1.useState("idle"),[r,u]=react$1.useState(null),l=react$1.useCallback(async d=>{o("loading"),u(null);try{let s=(await a.from(e).create(d)).data??null;return i(s),o("success"),s}catch(c){return u(c),o("error"),null}},[a,e]),f=react$1.useCallback(()=>{i(null),o("idle"),u(null);},[]);return {create:l,mutate:l,data:t,status:n,isLoading:n==="loading",isError:n==="error",isSuccess:n==="success",error:r,reset:f}}function he(e){let a=b(),[t,i]=react$1.useState(null),[n,o]=react$1.useState("idle"),[r,u]=react$1.useState(null),l=react$1.useCallback(async(d,c)=>{o("loading"),u(null);try{let g=(await a.from(e).update(d,c)).data??null;return i(g),o("success"),g}catch(s){return u(s),o("error"),null}},[a,e]),f=react$1.useCallback(()=>{i(null),o("idle"),u(null);},[]);return {update:l,data:t,status:n,isLoading:n==="loading",isError:n==="error",error:r,reset:f}}function ye(e){let a=b(),[t,i]=react$1.useState("idle"),[n,o]=react$1.useState(null),r=react$1.useCallback(async l=>{i("loading"),o(null);try{return await a.from(e).delete(l),i("success"),!0}catch(f){return o(f),i("error"),false}},[a,e]),u=react$1.useCallback(()=>{i("idle"),o(null);},[]);return {remove:r,status:t,isLoading:t==="loading",isError:t==="error",error:n,reset:u}}function be(e){let a=b(),[t,i]=react$1.useState(null),[n,o]=react$1.useState("idle"),[r,u]=react$1.useState(null),l=react$1.useCallback(async(d,c)=>{o("loading"),u(null);try{let g=(await a.from(e).upsert(d,{conflictFields:c})).data??null;return i(g),o("success"),g}catch(s){return u(s),o("error"),null}},[a,e]),f=react$1.useCallback(()=>{i(null),o("idle"),u(null);},[]);return {upsert:l,data:t,status:n,isLoading:n==="loading",isError:n==="error",error:r,reset:f}}function Te(e){let a=b(),[t,i]=react$1.useState([]),[n,o]=react$1.useState("idle"),[r,u]=react$1.useState(null);return {createMany:react$1.useCallback(async f=>{o("loading"),u(null);try{let c=(await a.from(e).createMany(f)).records??[];return i(c),o("success"),c}catch(d){return u(d),o("error"),[]}},[a,e]),data:t,isLoading:n==="loading",isError:n==="error",error:r}}function Ue(e){let a=b(),[t,i]=react$1.useState(null),[n,o]=react$1.useState("idle"),[r,u]=react$1.useState(null),l=react$1.useCallback(async(d,c)=>{o("loading"),u(null);try{let s=await a.from(e).where(d).updateMany(c),g={count:s.count,records:s.records};return i(g),o("success"),g}catch(s){return u(s instanceof Error?s:new Error("Batch update failed")),o("error"),{count:0}}},[a,e]),f=react$1.useCallback(()=>{i(null),o("idle"),u(null);},[]);return {batchUpdate:l,data:t,isLoading:n==="loading",isError:n==="error",error:r,reset:f}}function Re(e){let a=b(),[t,i]=react$1.useState(null),[n,o]=react$1.useState("idle"),[r,u]=react$1.useState(null),l=react$1.useCallback(async d=>{o("loading"),u(null);try{let s={count:(await a.from(e).where(d).deleteMany()).count};return i(s),o("success"),s}catch(c){return u(c instanceof Error?c:new Error("Batch delete failed")),o("error"),{count:0}}},[a,e]),f=react$1.useCallback(()=>{i(null),o("idle"),u(null);},[]);return {batchDelete:l,data:t,isLoading:n==="loading",isError:n==="error",error:r,reset:f}}function Ee(e,a,t){let[i,n]=react$1.useState(e),[o,r]=react$1.useState(false),[u,l]=react$1.useState(null),f=react$1.useRef(e),d=react$1.useCallback(()=>{n(f.current);},[]),c=react$1.useCallback(async g=>{r(true),l(null),f.current=i;let h=t.optimisticUpdate(i,g);n(h);try{let p=await a(g);return n(p),t.onSuccess?.(p,g),t.onSettled?.(p,null,g),p}catch(p){let m=p instanceof Error?p:new Error("Mutation failed");throw l(m),d(),t.onError?.(m,g),t.onSettled?.(void 0,m,g),m}finally{r(false);}},[i,a,t,d]);return {mutate:react$1.useCallback(g=>{c(g).catch(()=>{});},[c]),mutateAsync:c,optimisticData:i,rollback:d,isLoading:o,error:u}}function Me(e,a={}){let t=b(),[i,n]=react$1.useState("connecting"),o=react$1.useRef(null),r=react$1.useRef(null),{enabled:u=true,event:l,filter:f,onInsert:d,onUpdate:c,onDelete:s,onChange:g}=a;react$1.useEffect(()=>{if(!u)return;let p=t.realtime();o.current=p,p.on("connect",()=>n("connected")),p.on("disconnect",()=>n("disconnected")),p.on("reconnect",()=>n("reconnecting")),p.connect().catch(()=>{n("disconnected");});let m=T=>{switch(g?.(T),T.operation){case "INSERT":T.new&&d?.(T.new);break;case "UPDATE":T.new&&c?.(T.new,T.old??null);break;case "DELETE":T.old&&s?.(T.old);break}};return r.current=p.subscribe({table:e,event:l??"*",filter:f},m),()=>{r.current?.(),p.disconnect();}},[t,e,u,JSON.stringify(l),JSON.stringify(f)]);let h=react$1.useCallback(()=>{r.current?.(),o.current?.disconnect();},[]);return {isConnected:i==="connected",connectionState:i,unsubscribe:h}}function ve(e,a={}){let t=b(),[i,n]=react$1.useState([]),[o,r]=react$1.useState(false),u=react$1.useRef(null),l=react$1.useRef(null);react$1.useEffect(()=>{let s=t.realtime();l.current=s,s.on("connect",()=>r(true)),s.on("disconnect",()=>r(false));let g=s.channel(e,{type:"presence"});return u.current=g,g.presence.onSync(h=>{let p=[];for(let m of Object.values(h))p.push(...m);n(p);}),g.subscribe().then(()=>{a.initialState&&g.presence.track({state:a.initialState});}),()=>{g.presence.untrack(),g.unsubscribe(),s.disconnect();}},[t,e]);let f=react$1.useCallback(s=>{u.current?.presence.track({state:s});},[]),d=react$1.useCallback(s=>{u.current?.presence.update(s);},[]),c=react$1.useCallback(()=>{u.current?.presence.untrack();},[]);return {presences:i,track:f,update:d,untrack:c,isConnected:o}}function we(e){let a=b(),[t,i]=react$1.useState(null),[n,o]=react$1.useState(false),r=react$1.useRef(null),u=react$1.useRef(null),l=react$1.useRef(new Map);react$1.useEffect(()=>{let c=a.realtime();u.current=c,c.on("connect",()=>o(true)),c.on("disconnect",()=>o(false));let s=c.channel(e);return r.current=s,s.subscribe(),()=>{s.unsubscribe(),c.disconnect();}},[a,e]);let f=react$1.useCallback((c,s)=>{r.current?.broadcast({event:c,payload:s});},[]),d=react$1.useCallback((c,s)=>(l.current.has(c)||(l.current.set(c,new Set),r.current?.on(c,g=>{i({event:c,payload:g}),l.current.get(c)?.forEach(h=>h(g));})),l.current.get(c).add(s),()=>{l.current.get(c)?.delete(s);}),[]);return {broadcast:f,lastMessage:t,subscribe:d,isConnected:n}}function Se(e,a={}){let t=b(),[i,n]=react$1.useState(null),[o,r]=react$1.useState([]),[u,l]=react$1.useState(false),f=react$1.useRef(null),d=react$1.useRef(null),{enabled:c=true,type:s="public"}=a;react$1.useEffect(()=>{if(!c)return;let p=t.realtime();d.current=p;let m=p.channel(e,{type:s});return f.current=m,m.on("*",T=>{let U={event:"*",payload:T};n(U),r(R=>[...R,U]);}),m.subscribe().then(()=>{l(true);}),()=>{m.unsubscribe(),p.disconnect(),l(false);}},[t,e,c,s]);let g=react$1.useCallback((p,m)=>{f.current?.broadcast({event:p,payload:m});},[]),h=react$1.useCallback(()=>{f.current?.unsubscribe(),l(false);},[]);return {broadcast:g,lastMessage:i,messages:o,isJoined:u,leave:h}}function xe(){let e=b(),[a,t]=react$1.useState("disconnected"),i=react$1.useRef(null);react$1.useEffect(()=>{let r=e.realtime();return i.current=r,t(r.connectionState),r.on("connect",()=>t("connected")),r.on("disconnect",()=>t("disconnected")),r.on("reconnect",()=>t("reconnecting")),()=>{r.disconnect();}},[e]);let n=react$1.useCallback(()=>{i.current?.connect();},[]),o=react$1.useCallback(()=>{i.current?.disconnect();},[]);return {connectionState:a,isConnected:a==="connected",reconnect:n,disconnect:o}}function Oe(e){let a=b(),[t,i]=react$1.useState(0),[n,o]=react$1.useState(false),[r,u]=react$1.useState(null),[l,f]=react$1.useState(null),d=react$1.useCallback(async(g,h,p={})=>{o(true),i(0),u(null),f(null);try{let m=await a.storage.upload(h,g,{bucket:p.bucket||e,contentType:p.contentType,metadata:p.metadata,isPublic:p.isPublic});return f(m),i(100),m}catch(m){return u(m),null}finally{o(false);}},[a,e]),c=react$1.useCallback(async(g,h,p={})=>{o(true),i(0),u(null),f(null);try{let T=await(await fetch(g)).blob(),U=p.contentType||T.type||ze(g),R=await a.storage.upload(h,T,{bucket:p.bucket||e,contentType:U,metadata:p.metadata,isPublic:p.isPublic});return f(R),i(100),R}catch(m){return u(m),null}finally{o(false);}},[a,e]),s=react$1.useCallback(()=>{i(0),u(null),f(null);},[]);return {upload:d,uploadUri:c,progress:t,isUploading:n,isError:!!r,error:r,result:l,reset:s}}function Ie(e){let a=b(),[t,i]=react$1.useState(false),[n,o]=react$1.useState(null),[r,u]=react$1.useState(0);return {download:react$1.useCallback(async f=>{i(true),u(0),o(null);try{let d=await a.storage.download(f,{bucket:e});return u(100),d}catch(d){return o(d),null}finally{i(false);}},[a,e]),isDownloading:t,isError:!!n,error:n,progress:r}}function ke(e,a){let t=b(),[i,n]=react$1.useState(null),[o,r]=react$1.useState(false),[u,l]=react$1.useState(null),f=react$1.useCallback(async()=>{if(e){r(true),l(null);try{let c=await t.storage.getMetadata(e,{bucket:a?.bucket});n(c);}catch(c){l(c);}finally{r(false);}}},[t,e,a?.bucket]),d=react$1.useCallback(async()=>{if(!e)return false;try{return await t.storage.delete(e,{bucket:a?.bucket}),n(null),!0}catch(c){return l(c),false}},[t,e,a?.bucket]);return react$1.useEffect(()=>{e&&f();},[e,f]),{file:i,isLoading:o,isError:!!u,error:u,refetch:f,remove:d}}function Ce(e={}){let a=b(),[t,i]=react$1.useState([]),[n,o]=react$1.useState(false),[r,u]=react$1.useState(null),l=react$1.useCallback(async()=>{o(true),u(null);try{let f=await a.storage.list({bucket:e.bucket,prefix:e.prefix,limit:e.limit});i(f.files??[]);}catch(f){u(f);}finally{o(false);}},[a,e.bucket,e.prefix,e.limit]);return react$1.useEffect(()=>{l();},[l]),{files:t,isLoading:n,isError:!!r,error:r,refetch:l}}function Ae(e,a){let t=b();if(!e)return null;try{return t.storage.getPublicUrl(e,{bucket:a?.bucket})}catch{return null}}function ze(e){let a=e.split(".").pop()?.toLowerCase();return {jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",mp4:"video/mp4",mov:"video/quicktime",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",json:"application/json",txt:"text/plain"}[a||""]||"application/octet-stream"}function $(e,a={}){let t=b(),[i,n]=react$1.useState(null),[o,r]=react$1.useState(false),[u,l]=react$1.useState(null),[f,d]=react$1.useState(false),[c,s]=react$1.useState(null),g=react$1.useCallback(async p=>{r(true),l(null),d(false);try{let m=await t.functions.invoke(e,{body:p},{retry:a.retry,timeout:a.timeout});return n(m.data),s({status:m.status,durationMs:m.durationMs,requestId:m.requestId,logs:m.logs}),d(!0),m.data}catch(m){return l(m),null}finally{r(false);}},[t,e,a.retry,a.timeout]),h=react$1.useCallback(()=>{n(null),l(null),d(false),s(null);},[]);return {invoke:g,data:i,isLoading:o,isError:!!u,isSuccess:f,error:u,reset:h,meta:c}}function Fe(e,a={}){let t=$(e,a);return {...t,call:t.invoke}}function Le(e,a,t={}){let i=$(e,t),{enabled:n=true,refetchInterval:o}=t,r=react$1.useCallback(async()=>{await i.invoke(a);},[i.invoke,a]);return react$1.useEffect(()=>{n&&i.invoke(a);},[n]),react$1.useEffect(()=>{if(!o||!n)return;let u=setInterval(()=>{i.invoke(a);},o);return ()=>clearInterval(u)},[o,n]),{...i,refetch:r}}function De(e,a={}){let t=b(),[i,n]=react$1.useState([]),[o,r]=react$1.useState(false),[u,l]=react$1.useState(null),{enabled:f=true,envId:d}=a,c=react$1.useCallback(async()=>{if(!(!f||!e)){r(true),l(null);try{let s=await t.functions.list({projectId:e,envId:d});n(s);}catch(s){l(s);}finally{r(false);}}},[t,e,d,f]);return react$1.useEffect(()=>{c();},[c]),{functions:i,isLoading:o,isError:!!u,error:u,refetch:c}}function Ve(){let e=b(),[a,t]=react$1.useState([]),[i,n]=react$1.useState(false),[o,r]=react$1.useState([]);return {invoke:react$1.useCallback(async(l,f=[])=>{n(true),r([]);let d=await Promise.all(l.map(async(g,h)=>{try{return {data:(await e.functions.invoke(g,{body:f[h]})).data,error:null}}catch(p){return {data:null,error:p}}})),c=d.map(g=>g.data),s=d.map(g=>g.error);return t(c),r(s),n(false),c},[e]),results:a,isLoading:i,errors:o}}function Be(e){let a=b(),[t,i]=react$1.useState(false),[n,o]=react$1.useState(null),[r,u]=react$1.useState(null),[l,f]=react$1.useState(null),d=react$1.useCallback(async(s,g)=>{f(null);try{let p=(await a.functions.invoke(e,{body:s})).requestId??`scheduled-${Date.now()}`;return u(p),i(!0),o(new Date(Date.now()+g.delayMs)),p}catch(h){let p=h instanceof Error?h:new Error("Failed to schedule function");throw f(p),p}},[a,e]),c=react$1.useCallback(async()=>{i(false),o(null),u(null);},[]);return {schedule:d,cancel:c,isScheduled:t,scheduledAt:n,requestId:r,error:l}}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}});exports.VaifProvider=ee;exports.useAuth=te;exports.useBatchCreate=Te;exports.useBatchDelete=Re;exports.useBatchInvoke=Ve;exports.useBatchUpdate=Ue;exports.useBroadcast=we;exports.useChannel=Se;exports.useCount=pe;exports.useCreate=me;exports.useDelete=ye;exports.useDownload=Ie;exports.useEmailVerification=oe;exports.useFile=ke;exports.useFiles=Ce;exports.useFunction=$;exports.useFunctionList=De;exports.useFunctionQuery=Le;exports.useInfiniteQuery=ge;exports.useMFA=le;exports.useMagicLink=ae;exports.useOAuth=ie;exports.useOptimisticMutation=Ee;exports.usePaginatedQuery=de;exports.usePasswordReset=se;exports.usePresence=ve;exports.usePublicUrl=Ae;exports.useQuery=ue;exports.useQueryById=ce;exports.useQueryFirst=fe;exports.useRealtimeConnection=xe;exports.useRpc=Fe;exports.useScheduledFunction=Be;exports.useSubscription=Me;exports.useToken=ne;exports.useUpdate=he;exports.useUpload=Oe;exports.useUpsert=be;exports.useUser=re;exports.useVaif=J;exports.useVaifClient=b;
|
|
1
|
+
'use strict';var react$1=require('react'),client=require('@vaiftech/client'),jsxRuntime=require('react/jsx-runtime'),reactNative=require('react-native'),react=require('@vaiftech/auth/react');var ie=react$1.createContext(null);function ue({config:t,children:e,storage:r,onAuthStateChange:c,autoRefreshSession:s=true,storageKey:d="vaif-auth"}){let[n]=react$1.useState(()=>client.createVaifClient(t)),[g,o]=react$1.useState(null),[l,i]=react$1.useState(null),[a,u]=react$1.useState(null),[p,h]=react$1.useState(null),[m,f]=react$1.useState(true),b=react$1.useRef(null),T=react$1.useCallback(async(w,A,x)=>{if(!r)return;let M={token:w,refreshToken:A,expiresAt:x};await r.setItem(d,JSON.stringify(M));},[r,d]),U=react$1.useCallback(async()=>{r&&await r.removeItem(d),o(null),i(null),u(null),h(null);},[r,d]);react$1.useEffect(()=>((async()=>{try{if(!r){f(!1);return}let A=await r.getItem(d);if(!A){f(!1);return}let x=JSON.parse(A);if(x.expiresAt&&new Date(x.expiresAt)<=new Date)if(x.refreshToken)try{let M=await n.auth.refreshToken(x.refreshToken);i(M.token),u(M.refreshToken??null),h(M.expiresAt),await T(M.token,M.refreshToken,M.expiresAt);let z=await n.auth.getUser();o(z);}catch{await U();}else await U();else {i(x.token),u(x.refreshToken??null),h(x.expiresAt??null);try{let M=await n.auth.getUser();o(M);}catch{if(x.refreshToken)try{let M=await n.auth.refreshToken(x.refreshToken);i(M.token),u(M.refreshToken??null),h(M.expiresAt),await T(M.token,M.refreshToken,M.expiresAt);let z=await n.auth.getUser();o(z);}catch{await U();}else await U();}}}catch{await U();}finally{f(false);}})(),()=>{b.current&&clearTimeout(b.current);}),[n,r,d,T,U]),react$1.useEffect(()=>{if(!s||!p||!a)return;let w=new Date(p).getTime(),A=Date.now(),x=w-A-6e4;return x>0&&(b.current=setTimeout(async()=>{try{let M=await n.auth.refreshToken(a);i(M.token),u(M.refreshToken??null),h(M.expiresAt),await T(M.token,M.refreshToken,M.expiresAt);}catch{await U();}},x)),()=>{b.current&&clearTimeout(b.current);}},[s,n,p,a,T,U]),react$1.useEffect(()=>{m||c?.(g);},[g,m,c]);let v=react$1.useCallback(async(w,A)=>{let x=await n.auth.login(w,A);if("mfaRequired"in x)throw new Error("MFA required - use verifyMFA to complete login");let M=x;return o(M.user),i(M.token),u(M.refreshToken??null),h(M.expiresAt??null),await T(M.token,M.refreshToken,M.expiresAt),M},[n,T]),E=react$1.useCallback(async(w,A,x)=>{let M=await n.auth.signUp(w,A,{metadata:x});return o(M.user),i(M.token),u(M.refreshToken??null),h(M.expiresAt??null),await T(M.token,M.refreshToken,M.expiresAt),M},[n,T]),P=react$1.useCallback(async()=>{try{await n.auth.logout();}finally{await U();}},[n,U]),D=react$1.useCallback(async()=>{if(!a)throw new Error("No refresh token available");let w=await n.auth.refreshToken(a);i(w.token),u(w.refreshToken??null),h(w.expiresAt),await T(w.token,w.refreshToken,w.expiresAt);},[n,a,T]),re=react$1.useCallback(w=>{o(A=>A?{...A,...w}:null);},[]),N={client:n,user:g,token:l,isLoading:m,isAuthenticated:!!g,signIn:v,signUp:E,signOut:P,refreshSession:D,updateUser:re};return jsxRuntime.jsx(ie.Provider,{value:N,children:e})}function G(){let t=react$1.useContext(ie);if(!t)throw new Error("useVaif must be used within a VaifProvider");return t}function y(){let{client:t}=G();return t}function le(){let{client:t,user:e,isLoading:r,isAuthenticated:c,token:s,signIn:d,signUp:n,signOut:g,refreshSession:o,updateUser:l}=G(),i=react$1.useCallback(async u=>{let p=await t.auth.updateProfile(u);return l(p),p},[t,l]),a=react$1.useCallback(async(u,p)=>{await t.auth.changePassword({currentPassword:u,newPassword:p});},[t]);return {user:e,isLoading:r,isAuthenticated:c,token:s,signIn:d,signUp:n,signOut:g,refreshSession:o,updateProfile:i,changePassword:a}}function ce(){let{user:t}=G();return t}function de(){let{token:t}=G();return t}function fe(){let t=y(),[e,r]=react$1.useState(false),[c,s]=react$1.useState(null),[d,n]=react$1.useState(false),[g,o]=react$1.useState(false),l=react$1.useCallback(async a=>{r(true),s(null);try{await t.auth.requestPasswordReset({email:a}),n(!0);}catch(u){throw s(u instanceof Error?u:new Error("Failed to request reset")),u}finally{r(false);}},[t]),i=react$1.useCallback(async(a,u)=>{r(true),s(null);try{await t.auth.confirmPasswordReset({token:a,password:u}),o(!0);}catch(p){throw s(p instanceof Error?p:new Error("Failed to reset password")),p}finally{r(false);}},[t]);return {requestReset:l,confirmReset:i,isLoading:e,error:c,isRequested:d,isConfirmed:g}}function ge(){let t=y(),[e,r]=react$1.useState(false),[c,s]=react$1.useState(null),[d,n]=react$1.useState(false),[g,o]=react$1.useState(false),l=react$1.useCallback(async a=>{r(true),s(null);try{await t.auth.requestEmailVerification({email:a}),n(!0);}catch(u){throw s(u instanceof Error?u:new Error("Failed to send verification")),u}finally{r(false);}},[t]),i=react$1.useCallback(async a=>{r(true),s(null);try{await t.auth.confirmEmailVerification({token:a}),o(!0);}catch(u){throw s(u instanceof Error?u:new Error("Failed to verify email")),u}finally{r(false);}},[t]);return {requestVerification:l,confirmVerification:i,isLoading:e,error:c,isSent:d,isVerified:g}}function pe(){let t=y(),[e,r]=react$1.useState(false),[c,s]=react$1.useState(null),[d,n]=react$1.useState(false),g=react$1.useCallback(async l=>{r(true),s(null);try{await t.auth.requestMagicLink({email:l}),n(!0);}catch(i){throw s(i instanceof Error?i:new Error("Failed to send magic link")),i}finally{r(false);}},[t]),o=react$1.useCallback(async l=>{r(true),s(null);try{return await t.auth.verifyMagicLink({token:l})}catch(i){throw s(i instanceof Error?i:new Error("Failed to verify magic link")),i}finally{r(false);}},[t]);return {sendMagicLink:g,verifyMagicLink:o,isLoading:e,error:c,isSent:d}}function me(){let t=y(),[e,r]=react$1.useState(false),[c,s]=react$1.useState(null);return {signInWithOAuth:react$1.useCallback(async(n,g)=>{r(true),s(null);try{return {url:(await t.auth.getOAuthSignInUrl({provider:n,redirectUrl:g})).url}}catch(o){throw s(o instanceof Error?o:new Error("Failed to start OAuth flow")),o}finally{r(false);}},[t]),isLoading:e,error:c}}function he(){let t=y(),[e,r]=react$1.useState(false),[c,s]=react$1.useState(null),d=react$1.useCallback(async o=>{r(true),s(null);try{return await t.auth.setupMFA(o)}catch(l){throw s(l instanceof Error?l:new Error("Failed to setup MFA")),l}finally{r(false);}},[t]),n=react$1.useCallback(async(o,l)=>{r(true),s(null);try{return await t.auth.verifyMFA(o,l)}catch(i){throw s(i instanceof Error?i:new Error("Failed to verify MFA")),i}finally{r(false);}},[t]),g=react$1.useCallback(async o=>{r(true),s(null);try{await t.auth.disableMFA(o);}catch(l){throw s(l instanceof Error?l:new Error("Failed to disable MFA")),l}finally{r(false);}},[t]);return {setup:d,verify:n,disable:g,isLoading:e,error:c}}function ye(t,e={}){let r=y(),[c,s]=react$1.useState([]),[d,n]=react$1.useState("idle"),[g,o]=react$1.useState(null),l=react$1.useRef(e);l.current=e;let{enabled:i=true,refetchInterval:a,where:u,orderBy:p,...h}=e,m=react$1.useCallback(async()=>{if(i){n("loading"),o(null);try{let f={...h};u&&(Array.isArray(u)?f.where={AND:u}:f.where=u),p&&(f.orderBy=Array.isArray(p)?p:[p]);let b=await r.from(t).list(f);s(b.data??[]),n("success");}catch(f){o(f),n("error");}}},[r,t,i,JSON.stringify(u),JSON.stringify(p),JSON.stringify(h)]);return react$1.useEffect(()=>{m();},[m]),react$1.useEffect(()=>{if(!a||!i)return;let f=setInterval(m,a);return ()=>clearInterval(f)},[a,m,i]),{data:c,status:d,isLoading:d==="loading",isError:d==="error",isSuccess:d==="success",error:g,refetch:m}}function be(t,e,r={}){let c=y(),[s,d]=react$1.useState(null),[n,g]=react$1.useState("idle"),[o,l]=react$1.useState(null),i=r.enabled!==false&&!!e,a=react$1.useCallback(async()=>{if(!(!i||!e)){g("loading"),l(null);try{let u=await c.from(t).get(e);d(u.data??null),g("success");}catch(u){l(u),g("error");}}},[c,t,e,i]);return react$1.useEffect(()=>{a();},[a]),{data:s,isLoading:n==="loading",isError:n==="error",error:o,refetch:a}}function Ue(t,e={}){let r=y(),[c,s]=react$1.useState([]),[d,n]=react$1.useState("idle"),[g,o]=react$1.useState(null),[l,i]=react$1.useState(e.initialPage??1),[a,u]=react$1.useState(0),p=e.pageSize??20,{enabled:h=true,where:m,orderBy:f}=e,b=react$1.useCallback(async()=>{if(h){n("loading"),o(null);try{let U=r.from(t);if(m){let E=Array.isArray(m)?m:[m];for(let P of E)U=U.where(P);}if(f){let E=Array.isArray(f)?f:[f];for(let P of E)U=U.orderBy(P.field,P.direction);}let v=await U.paginate({page:l,pageSize:p});s(v.data??[]),u(v.pageInfo?.total??0),n("success");}catch(U){o(U),n("error");}}},[r,t,l,p,h,JSON.stringify(m),JSON.stringify(f)]);react$1.useEffect(()=>{b();},[b]);let T=Math.ceil(a/p);return {data:c,status:d,isLoading:d==="loading",isError:d==="error",isSuccess:d==="success",error:g,refetch:b,page:l,pageSize:p,totalPages:T,totalCount:a,hasNextPage:l<T,hasPreviousPage:l>1,nextPage:()=>i(U=>Math.min(U+1,T)),previousPage:()=>i(U=>Math.max(U-1,1)),goToPage:U=>i(Math.max(1,Math.min(U,T)))}}function Te(t,e={}){let r=y(),[c,s]=react$1.useState(null),[d,n]=react$1.useState(true),[g,o]=react$1.useState(null),[l,i]=react$1.useState(false),{enabled:a=true,where:u,orderBy:p,...h}=e,m=react$1.useCallback(async()=>{if(!a){n(false);return}n(true),o(null),i(false);try{let f={...h,limit:1};u&&(Array.isArray(u)?f.where={AND:u}:f.where=u),p&&(f.orderBy=Array.isArray(p)?p:[p]);let T=(await r.from(t).list(f)).data?.[0]??null;s(T),T||i(!0);}catch(f){o(f instanceof Error?f:new Error("Query failed"));}finally{n(false);}},[r,t,a,JSON.stringify(u),JSON.stringify(p),JSON.stringify(h)]);return react$1.useEffect(()=>{m();},[m]),{data:c,isLoading:d,error:g,isNotFound:l,refetch:m}}function Re(t,e={}){let r=y(),[c,s]=react$1.useState([]),[d,n]=react$1.useState(0),[g,o]=react$1.useState(true),[l,i]=react$1.useState(true),[a,u]=react$1.useState(false),[p,h]=react$1.useState(null),{enabled:m=true,pageSize:f=20,where:b,orderBy:T,onSuccess:U,onError:v}=e,E=react$1.useCallback(async()=>{if(!g||!m)return;c.length===0?i(true):u(true),h(null);try{let w={limit:f,offset:d*f};b&&(Array.isArray(b)?w.where={AND:b}:w.where=b),T&&(w.orderBy=Array.isArray(T)?T:[T]);let x=(await r.from(t).list(w)).data??[],M=x.length===f;s(z=>[...z,x]),n(z=>z+1),o(M),U?.(x,M);}catch(w){let A=w instanceof Error?w:new Error("Query failed");h(A),v?.(A);}finally{i(false),u(false);}},[r,t,m,f,d,g,c.length,JSON.stringify(b),JSON.stringify(T),U,v]);react$1.useEffect(()=>{m&&c.length===0&&E();},[m]);let P=react$1.useCallback(async()=>{s([]),n(0),o(true),i(true),h(null);try{let N={limit:f,offset:0};b&&(Array.isArray(b)?N.where={AND:b}:N.where=b),T&&(N.orderBy=Array.isArray(T)?T:[T]);let A=(await r.from(t).list(N)).data??[],x=A.length===f;s([A]),n(1),o(x);}catch(N){h(N instanceof Error?N:new Error("Query failed"));}finally{i(false);}},[r,t,f,JSON.stringify(b),JSON.stringify(T)]),D=react$1.useCallback(()=>{s([]),n(0),o(true),i(true),h(null);},[]);return {data:c.flat(),pages:c,hasNextPage:g,isLoading:l,isFetchingNextPage:a,error:p,fetchNextPage:E,refetch:P,reset:D}}function Me(t,e={}){let r=y(),[c,s]=react$1.useState(0),[d,n]=react$1.useState(true),[g,o]=react$1.useState(null),{enabled:l=true,where:i}=e,a=react$1.useCallback(async()=>{if(!l){n(false);return}n(true),o(null);try{let u=r.from(t);i&&(u=u.where(i));let p=await u.count();s(p);}catch(u){o(u instanceof Error?u:new Error("Count failed"));}finally{n(false);}},[r,t,l,JSON.stringify(i)]);return react$1.useEffect(()=>{a();},[a]),{count:c,isLoading:d,error:g,refetch:a}}function Ee(t){let e=y(),[r,c]=react$1.useState(null),[s,d]=react$1.useState("idle"),[n,g]=react$1.useState(null),o=react$1.useCallback(async i=>{d("loading"),g(null);try{let u=(await e.from(t).create(i)).data??null;return c(u),d("success"),u}catch(a){return g(a),d("error"),null}},[e,t]),l=react$1.useCallback(()=>{c(null),d("idle"),g(null);},[]);return {create:o,mutate:o,data:r,status:s,isLoading:s==="loading",isError:s==="error",isSuccess:s==="success",error:n,reset:l}}function ve(t){let e=y(),[r,c]=react$1.useState(null),[s,d]=react$1.useState("idle"),[n,g]=react$1.useState(null),o=react$1.useCallback(async(i,a)=>{d("loading"),g(null);try{let p=(await e.from(t).update(i,a)).data??null;return c(p),d("success"),p}catch(u){return g(u),d("error"),null}},[e,t]),l=react$1.useCallback(()=>{c(null),d("idle"),g(null);},[]);return {update:o,data:r,status:s,isLoading:s==="loading",isError:s==="error",error:n,reset:l}}function we(t){let e=y(),[r,c]=react$1.useState("idle"),[s,d]=react$1.useState(null),n=react$1.useCallback(async o=>{c("loading"),d(null);try{return await e.from(t).delete(o),c("success"),!0}catch(l){return d(l),c("error"),false}},[e,t]),g=react$1.useCallback(()=>{c("idle"),d(null);},[]);return {remove:n,status:r,isLoading:r==="loading",isError:r==="error",error:s,reset:g}}function Se(t){let e=y(),[r,c]=react$1.useState(null),[s,d]=react$1.useState("idle"),[n,g]=react$1.useState(null),o=react$1.useCallback(async(i,a)=>{d("loading"),g(null);try{let p=(await e.from(t).upsert(i,{conflictFields:a})).data??null;return c(p),d("success"),p}catch(u){return g(u),d("error"),null}},[e,t]),l=react$1.useCallback(()=>{c(null),d("idle"),g(null);},[]);return {upsert:o,data:r,status:s,isLoading:s==="loading",isError:s==="error",error:n,reset:l}}function xe(t){let e=y(),[r,c]=react$1.useState([]),[s,d]=react$1.useState("idle"),[n,g]=react$1.useState(null);return {createMany:react$1.useCallback(async l=>{d("loading"),g(null);try{let a=(await e.from(t).createMany(l)).records??[];return c(a),d("success"),a}catch(i){return g(i),d("error"),[]}},[e,t]),data:r,isLoading:s==="loading",isError:s==="error",error:n}}function Oe(t){let e=y(),[r,c]=react$1.useState(null),[s,d]=react$1.useState("idle"),[n,g]=react$1.useState(null),o=react$1.useCallback(async(i,a)=>{d("loading"),g(null);try{let u=await e.from(t).where(i).updateMany(a),p={count:u.count,records:u.records};return c(p),d("success"),p}catch(u){return g(u instanceof Error?u:new Error("Batch update failed")),d("error"),{count:0}}},[e,t]),l=react$1.useCallback(()=>{c(null),d("idle"),g(null);},[]);return {batchUpdate:o,data:r,isLoading:s==="loading",isError:s==="error",error:n,reset:l}}function Pe(t){let e=y(),[r,c]=react$1.useState(null),[s,d]=react$1.useState("idle"),[n,g]=react$1.useState(null),o=react$1.useCallback(async i=>{d("loading"),g(null);try{let u={count:(await e.from(t).where(i).deleteMany()).count};return c(u),d("success"),u}catch(a){return g(a instanceof Error?a:new Error("Batch delete failed")),d("error"),{count:0}}},[e,t]),l=react$1.useCallback(()=>{c(null),d("idle"),g(null);},[]);return {batchDelete:o,data:r,isLoading:s==="loading",isError:s==="error",error:n,reset:l}}function ke(t,e,r){let[c,s]=react$1.useState(t),[d,n]=react$1.useState(false),[g,o]=react$1.useState(null),l=react$1.useRef(t),i=react$1.useCallback(()=>{s(l.current);},[]),a=react$1.useCallback(async p=>{n(true),o(null),l.current=c;let h=r.optimisticUpdate(c,p);s(h);try{let m=await e(p);return s(m),r.onSuccess?.(m,p),r.onSettled?.(m,null,p),m}catch(m){let f=m instanceof Error?m:new Error("Mutation failed");throw o(f),i(),r.onError?.(f,p),r.onSettled?.(void 0,f,p),f}finally{n(false);}},[c,e,r,i]);return {mutate:react$1.useCallback(p=>{a(p).catch(()=>{});},[a]),mutateAsync:a,optimisticData:c,rollback:i,isLoading:d,error:g}}function Ie(t,e={}){let r=y(),[c,s]=react$1.useState("connecting"),d=react$1.useRef(null),n=react$1.useRef(null),{enabled:g=true,event:o,filter:l,onInsert:i,onUpdate:a,onDelete:u,onChange:p}=e;react$1.useEffect(()=>{if(!g)return;let m=r.realtime();d.current=m,m.on("connect",()=>s("connected")),m.on("disconnect",()=>s("disconnected")),m.on("reconnect",()=>s("reconnecting")),m.connect().catch(()=>{s("disconnected");});let f=b=>{switch(p?.(b),b.operation){case "INSERT":b.new&&i?.(b.new);break;case "UPDATE":b.new&&a?.(b.new,b.old??null);break;case "DELETE":b.old&&u?.(b.old);break}};return n.current=m.subscribe({table:t,event:o??"*",filter:l},f),()=>{n.current?.(),m.disconnect();}},[r,t,g,JSON.stringify(o),JSON.stringify(l)]);let h=react$1.useCallback(()=>{n.current?.(),d.current?.disconnect();},[]);return {isConnected:c==="connected",connectionState:c,unsubscribe:h}}function Ae(t,e={}){let r=y(),[c,s]=react$1.useState([]),[d,n]=react$1.useState(false),g=react$1.useRef(null),o=react$1.useRef(null);react$1.useEffect(()=>{let u=r.realtime();o.current=u,u.on("connect",()=>n(true)),u.on("disconnect",()=>n(false));let p=u.channel(t,{type:"presence"});return g.current=p,p.presence.onSync(h=>{let m=[];for(let f of Object.values(h))m.push(...f);s(m);}),p.subscribe().then(()=>{e.initialState&&p.presence.track({state:e.initialState});}),()=>{p.presence.untrack(),p.unsubscribe(),u.disconnect();}},[r,t]);let l=react$1.useCallback(u=>{g.current?.presence.track({state:u});},[]),i=react$1.useCallback(u=>{g.current?.presence.update(u);},[]),a=react$1.useCallback(()=>{g.current?.presence.untrack();},[]);return {presences:c,track:l,update:i,untrack:a,isConnected:d}}function Ce(t){let e=y(),[r,c]=react$1.useState(null),[s,d]=react$1.useState(false),n=react$1.useRef(null),g=react$1.useRef(null),o=react$1.useRef(new Map);react$1.useEffect(()=>{let a=e.realtime();g.current=a,a.on("connect",()=>d(true)),a.on("disconnect",()=>d(false));let u=a.channel(t);return n.current=u,u.subscribe(),()=>{u.unsubscribe(),a.disconnect();}},[e,t]);let l=react$1.useCallback((a,u)=>{n.current?.broadcast({event:a,payload:u});},[]),i=react$1.useCallback((a,u)=>(o.current.has(a)||(o.current.set(a,new Set),n.current?.on(a,p=>{c({event:a,payload:p}),o.current.get(a)?.forEach(h=>h(p));})),o.current.get(a).add(u),()=>{o.current.get(a)?.delete(u);}),[]);return {broadcast:l,lastMessage:r,subscribe:i,isConnected:s}}function Fe(t,e={}){let r=y(),[c,s]=react$1.useState(null),[d,n]=react$1.useState([]),[g,o]=react$1.useState(false),l=react$1.useRef(null),i=react$1.useRef(null),{enabled:a=true,type:u="public"}=e;react$1.useEffect(()=>{if(!a)return;let m=r.realtime();i.current=m;let f=m.channel(t,{type:u});return l.current=f,f.on("*",b=>{let T={event:"*",payload:b};s(T),n(U=>[...U,T]);}),f.subscribe().then(()=>{o(true);}),()=>{f.unsubscribe(),m.disconnect(),o(false);}},[r,t,a,u]);let p=react$1.useCallback((m,f)=>{l.current?.broadcast({event:m,payload:f});},[]),h=react$1.useCallback(()=>{l.current?.unsubscribe(),o(false);},[]);return {broadcast:p,lastMessage:c,messages:d,isJoined:g,leave:h}}function Le(){let t=y(),[e,r]=react$1.useState("disconnected"),c=react$1.useRef(null);react$1.useEffect(()=>{let n=t.realtime();return c.current=n,r(n.connectionState),n.on("connect",()=>r("connected")),n.on("disconnect",()=>r("disconnected")),n.on("reconnect",()=>r("reconnecting")),()=>{n.disconnect();}},[t]);let s=react$1.useCallback(()=>{c.current?.connect();},[]),d=react$1.useCallback(()=>{c.current?.disconnect();},[]);return {connectionState:e,isConnected:e==="connected",reconnect:s,disconnect:d}}function Ve(t){let e=y(),[r,c]=react$1.useState(0),[s,d]=react$1.useState(false),[n,g]=react$1.useState(null),[o,l]=react$1.useState(null),i=react$1.useCallback(async(p,h,m={})=>{d(true),c(0),g(null),l(null);try{let f=await e.storage.upload(h,p,{bucket:m.bucket||t,contentType:m.contentType,metadata:m.metadata,isPublic:m.isPublic});return l(f),c(100),f}catch(f){return g(f),null}finally{d(false);}},[e,t]),a=react$1.useCallback(async(p,h,m={})=>{d(true),c(0),g(null),l(null);try{let b=await(await fetch(p)).blob(),T=m.contentType||b.type||Pt(p),U=await e.storage.upload(h,b,{bucket:m.bucket||t,contentType:T,metadata:m.metadata,isPublic:m.isPublic});return l(U),c(100),U}catch(f){return g(f),null}finally{d(false);}},[e,t]),u=react$1.useCallback(()=>{c(0),g(null),l(null);},[]);return {upload:i,uploadUri:a,progress:r,isUploading:s,isError:!!n,error:n,result:o,reset:u}}function Be(t){let e=y(),[r,c]=react$1.useState(false),[s,d]=react$1.useState(null),[n,g]=react$1.useState(0);return {download:react$1.useCallback(async l=>{c(true),g(0),d(null);try{let i=await e.storage.download(l,{bucket:t});return g(100),i}catch(i){return d(i),null}finally{c(false);}},[e,t]),isDownloading:r,isError:!!s,error:s,progress:n}}function Qe(t,e){let r=y(),[c,s]=react$1.useState(null),[d,n]=react$1.useState(false),[g,o]=react$1.useState(null),l=react$1.useCallback(async()=>{if(t){n(true),o(null);try{let a=await r.storage.getMetadata(t,{bucket:e?.bucket});s(a);}catch(a){o(a);}finally{n(false);}}},[r,t,e?.bucket]),i=react$1.useCallback(async()=>{if(!t)return false;try{return await r.storage.delete(t,{bucket:e?.bucket}),s(null),!0}catch(a){return o(a),false}},[r,t,e?.bucket]);return react$1.useEffect(()=>{t&&l();},[t,l]),{file:c,isLoading:d,isError:!!g,error:g,refetch:l,remove:i}}function Ne(t={}){let e=y(),[r,c]=react$1.useState([]),[s,d]=react$1.useState(false),[n,g]=react$1.useState(null),o=react$1.useCallback(async()=>{d(true),g(null);try{let l=await e.storage.list({bucket:t.bucket,prefix:t.prefix,limit:t.limit});c(l.files??[]);}catch(l){g(l);}finally{d(false);}},[e,t.bucket,t.prefix,t.limit]);return react$1.useEffect(()=>{o();},[o]),{files:r,isLoading:s,isError:!!n,error:n,refetch:o}}function qe(t,e){let r=y();if(!t)return null;try{return r.storage.getPublicUrl(t,{bucket:e?.bucket})}catch{return null}}function Pt(t){let e=t.split(".").pop()?.toLowerCase();return {jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",mp4:"video/mp4",mov:"video/quicktime",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",json:"application/json",txt:"text/plain"}[e||""]||"application/octet-stream"}function ne(t,e={}){let r=y(),[c,s]=react$1.useState(null),[d,n]=react$1.useState(false),[g,o]=react$1.useState(null),[l,i]=react$1.useState(false),[a,u]=react$1.useState(null),p=react$1.useCallback(async m=>{n(true),o(null),i(false);try{let f=await r.functions.invoke(t,{body:m},{retry:e.retry,timeout:e.timeout});return s(f.data),u({status:f.status,durationMs:f.durationMs,requestId:f.requestId,logs:f.logs}),i(!0),f.data}catch(f){return o(f),null}finally{n(false);}},[r,t,e.retry,e.timeout]),h=react$1.useCallback(()=>{s(null),o(null),i(false),u(null);},[]);return {invoke:p,data:c,isLoading:d,isError:!!g,isSuccess:l,error:g,reset:h,meta:a}}function He(t,e={}){let r=ne(t,e);return {...r,call:r.invoke}}function Je(t,e,r={}){let c=ne(t,r),{enabled:s=true,refetchInterval:d}=r,n=react$1.useCallback(async()=>{await c.invoke(e);},[c.invoke,e]);return react$1.useEffect(()=>{s&&c.invoke(e);},[s]),react$1.useEffect(()=>{if(!d||!s)return;let g=setInterval(()=>{c.invoke(e);},d);return ()=>clearInterval(g)},[d,s]),{...c,refetch:n}}function je(t,e={}){let r=y(),[c,s]=react$1.useState([]),[d,n]=react$1.useState(false),[g,o]=react$1.useState(null),{enabled:l=true,envId:i}=e,a=react$1.useCallback(async()=>{if(!(!l||!t)){n(true),o(null);try{let u=await r.functions.list({projectId:t,envId:i});s(u);}catch(u){o(u);}finally{n(false);}}},[r,t,i,l]);return react$1.useEffect(()=>{a();},[a]),{functions:c,isLoading:d,isError:!!g,error:g,refetch:a}}function _e(){let t=y(),[e,r]=react$1.useState([]),[c,s]=react$1.useState(false),[d,n]=react$1.useState([]);return {invoke:react$1.useCallback(async(o,l=[])=>{s(true),n([]);let i=await Promise.all(o.map(async(p,h)=>{try{return {data:(await t.functions.invoke(p,{body:l[h]})).data,error:null}}catch(m){return {data:null,error:m}}})),a=i.map(p=>p.data),u=i.map(p=>p.error);return r(a),n(u),s(false),a},[t]),results:e,isLoading:c,errors:d}}function We(t){let e=y(),[r,c]=react$1.useState(false),[s,d]=react$1.useState(null),[n,g]=react$1.useState(null),[o,l]=react$1.useState(null),i=react$1.useCallback(async(u,p)=>{l(null);try{let m=(await e.functions.invoke(t,{body:u})).requestId??`scheduled-${Date.now()}`;return g(m),c(!0),d(new Date(Date.now()+p.delayMs)),m}catch(h){let m=h instanceof Error?h:new Error("Failed to schedule function");throw l(m),m}},[e,t]),a=react$1.useCallback(async()=>{c(false),d(null),g(null);},[]);return {schedule:i,cancel:a,isScheduled:r,scheduledAt:s,requestId:n,error:o}}function Ge(t,e={}){let r=y(),[c,s]=react$1.useState(null),[d,n]=react$1.useState(e.enabled!==false),[g,o]=react$1.useState(null),l=e.enabled!==false&&!!t,i=react$1.useCallback(async()=>{if(l){n(true),o(null);try{let a=await r.admin.getProject(t);s(a.metrics),e.onSuccess?.(a.metrics);}catch(a){let u=a instanceof Error?a:new Error("Failed to fetch metrics");o(u),e.onError?.(u);}finally{n(false);}}},[r,t,l,e]);return react$1.useEffect(()=>{i();},[i]),react$1.useEffect(()=>{if(!e.refetchInterval||e.refetchInterval<=0||!l)return;let a=setInterval(i,e.refetchInterval);return ()=>clearInterval(a)},[e.refetchInterval,l,i]),{metrics:c,isLoading:d,error:g,refetch:i}}function Xe(t,e={}){let r=y(),[c,s]=react$1.useState([]),[d,n]=react$1.useState(0),[g,o]=react$1.useState(e.enabled!==false),[l,i]=react$1.useState(null),[a,u]=react$1.useState(e.offset??0),p=e.limit??50,h=e.enabled!==false&&!!t,m=react$1.useCallback(async(b=false)=>{if(!h)return;o(true),i(null);let T=b?0:a;b&&u(0);try{let U=await r.security.getAuditLogs(t,{limit:p,offset:T});s(b?U.logs:v=>[...v,...U.logs]),n(U.total),e.onSuccess?.(U.logs,U.total);}catch(U){let v=U instanceof Error?U:new Error("Failed to fetch audit logs");i(v),e.onError?.(v);}finally{o(false);}},[r,t,h,p,a,e]);react$1.useEffect(()=>{m(true);},[t,p,h]),react$1.useEffect(()=>{if(!e.refetchInterval||e.refetchInterval<=0||!h)return;let b=setInterval(()=>m(true),e.refetchInterval);return ()=>clearInterval(b)},[e.refetchInterval,h,m]);let f=react$1.useCallback(()=>{c.length<d&&!g&&(u(c.length),m(false));},[c.length,d,g,m]);return {logs:c,total:d,isLoading:g,error:l,refetch:()=>m(true),loadMore:f,hasMore:c.length<d}}function Ye(t={}){let e=y(),[r,c]=react$1.useState([]),[s,d]=react$1.useState(t.enabled!==false),[n,g]=react$1.useState(null),o=t.enabled!==false,l=t.status??"open",i=react$1.useCallback(async()=>{if(o){d(true),g(null);try{let h=await e.admin.listIncidents(l);c(h),t.onSuccess?.(h);}catch(h){let m=h instanceof Error?h:new Error("Failed to fetch incidents");g(m),t.onError?.(m);}finally{d(false);}}},[e,o,l,t]);react$1.useEffect(()=>{i();},[i]),react$1.useEffect(()=>{if(!t.refetchInterval||t.refetchInterval<=0||!o)return;let h=setInterval(i,t.refetchInterval);return ()=>clearInterval(h)},[t.refetchInterval,o,i]);let a=react$1.useCallback(async h=>{await e.admin.acknowledgeIncident(h),c(m=>m.map(f=>f.id===h?{...f,status:"acknowledged"}:f));},[e]),u=react$1.useCallback(async h=>{await e.admin.resolveIncident(h),c(l==="open"?m=>m.filter(f=>f.id!==h):m=>m.map(f=>f.id===h?{...f,status:"resolved"}:f));},[e,l]),p=r.reduce((h,m)=>{let f=m.severity||"unknown";return h[f]=(h[f]||0)+1,h},{});return {incidents:r,isLoading:s,error:n,refetch:i,acknowledge:a,resolve:u,countBySeverity:p}}function Ze(t={}){let e=y(),[r,c]=react$1.useState([]),[s,d]=react$1.useState(t.enabled!==false),[n,g]=react$1.useState(null),o=react$1.useRef([]),l=t.enabled!==false,i=react$1.useCallback(async()=>{if(l){d(true),g(null);try{let p=await e.admin.getHealthComponents();c(p.components),o.current.length>0&&p.components.some(m=>{let f=o.current.find(b=>b.id===m.id);return f&&f.status!==m.status})&&t.onStatusChange?.(p.components),o.current=p.components;}catch(p){let h=p instanceof Error?p:new Error("Failed to fetch health status");g(h),t.onError?.(h);}finally{d(false);}}},[e,l,t]);react$1.useEffect(()=>{i();},[i]),react$1.useEffect(()=>{if(!t.refetchInterval||t.refetchInterval<=0||!l)return;let p=setInterval(i,t.refetchInterval);return ()=>clearInterval(p)},[t.refetchInterval,l,i]);let a=r.reduce((p,h)=>{let m=["operational","degraded","partial_outage","major_outage"],f=m.indexOf(h.status),b=m.indexOf(p);return f>b?h.status:p},"operational"),u=react$1.useCallback(p=>r.find(m=>m.name===p)?.status==="operational",[r]);return {components:r,overallStatus:a,isLoading:s,error:n,refetch:i,isHealthy:u}}function Ke(t,e={}){let r=y(),[c,s]=react$1.useState(null),[d,n]=react$1.useState([]),[g,o]=react$1.useState(e.enabled!==false),[l,i]=react$1.useState(null),a=e.enabled!==false&&!!t,u=e.includeEvents??false,p=e.eventsLimit??50,h=react$1.useCallback(async()=>{if(a){o(true),i(null);try{let m=await r.realtimeMonitoring.getStats(t);s(m);let f=[];u&&(f=await r.realtimeMonitoring.getEvents(t,{limit:p}),n(f)),e.onSuccess?.(m,f);}catch(m){let f=m instanceof Error?m:new Error("Failed to fetch realtime stats");i(f),e.onError?.(f);}finally{o(false);}}},[r,t,a,u,p,e]);return react$1.useEffect(()=>{h();},[h]),react$1.useEffect(()=>{if(!e.refetchInterval||e.refetchInterval<=0||!a)return;let m=setInterval(h,e.refetchInterval);return ()=>clearInterval(m)},[e.refetchInterval,a,h]),{stats:c,events:d,isLoading:g,error:l,refetch:h}}function et(t,e={}){let r=y(),[c,s]=react$1.useState(0),[d,n]=react$1.useState(0),[g,o]=react$1.useState(0),[l,i]=react$1.useState(e.enabled!==false),[a,u]=react$1.useState(null),p=react$1.useRef(reactNative.AppState.currentState),h=e.enabled!==false&&!!t,m=e.errorRateThreshold??.05,f=e.refetchOnForeground??false,b=react$1.useCallback(async()=>{if(h){i(true),u(null);try{let E=(await r.admin.getProject(t)).metrics;s(E.requestsLast24h),n(E.errorsLast24h),o(E.avgLatencyMs);let P=E.requestsLast24h>0?E.errorsLast24h/E.requestsLast24h:0;P>m&&e.onHighErrorRate?.(P);}catch(v){let E=v instanceof Error?v:new Error("Failed to fetch error stats");u(E);}finally{i(false);}}},[r,t,h,m,e]);react$1.useEffect(()=>{b();},[b]),react$1.useEffect(()=>{if(!e.refetchInterval||e.refetchInterval<=0||!h)return;let v=setInterval(b,e.refetchInterval);return ()=>clearInterval(v)},[e.refetchInterval,h,b]),react$1.useEffect(()=>{if(!f||!h)return;let v=P=>{p.current.match(/inactive|background/)&&P==="active"&&b(),p.current=P;},E=reactNative.AppState.addEventListener("change",v);return ()=>E?.remove()},[f,h,b]);let T=c>0?d/c:0,U=T>m;return {requestCount:c,errorCount:d,errorRate:T,avgLatencyMs:g,isHighErrorRate:U,isLoading:l,error:a,refetch:b}}var rt=new Map;function It(t,e,r){return `mongo:${t}:${e}:${JSON.stringify(r||{})}`}function nt(t){let e=y();return react$1.useMemo(()=>e.mongodb.collection(t),[e,t])}function st(t,e){let r=y(),[c,s]=react$1.useState([]),[d,n]=react$1.useState(null),[g,o]=react$1.useState(e?.enabled===false?"idle":"loading"),[l,i]=react$1.useState(false),[a,u]=react$1.useState(true),p=react$1.useRef(0),h=react$1.useRef(reactNative.AppState.currentState),m=e?.enabled!==false,f=e?.staleTime??0,b=e?.keepPreviousData??false,T=react$1.useCallback(async()=>{if(!m)return;let U={sort:e?.sort,projection:e?.projection,skip:e?.skip,limit:e?.limit},v=It(t,"find",{filter:e?.filter,options:U}),E=rt.get(v);if(E&&Date.now()-E.timestamp<f){s(E.data),o("success"),u(false);return}i(true),b||o("loading"),n(null);try{let D=await r.mongodb.collection(t).find(e?.filter,U);s(D),o("success"),u(!1),p.current=Date.now(),rt.set(v,{data:D,timestamp:Date.now()}),e?.onSuccess?.(D);}catch(P){let D=P instanceof Error?P:new Error("MongoDB find failed");n(D),o("error"),e?.onError?.(D);}finally{i(false);}},[r,t,e,m,f,b]);return react$1.useEffect(()=>{T();},[T]),react$1.useEffect(()=>{if(!e?.refetchOnForeground||!m)return;let U=E=>{h.current.match(/inactive|background/)&&E==="active"&&Date.now()-p.current>f&&(u(true),T()),h.current=E;},v=reactNative.AppState.addEventListener("change",U);return ()=>v.remove()},[e?.refetchOnForeground,m,f,T]),react$1.useEffect(()=>{if(!e?.refetchInterval||e.refetchInterval<=0||!m)return;let U=setInterval(()=>{u(true),T();},e.refetchInterval);return ()=>clearInterval(U)},[e?.refetchInterval,m,T]),{data:c,isLoading:g==="loading",isFetching:l,error:d,status:g,refetch:T,isStale:a,isEnabled:m}}function ot(t,e){let r=y(),[c,s]=react$1.useState(null),[d,n]=react$1.useState(null),[g,o]=react$1.useState(e?.enabled!==false),[l,i]=react$1.useState(false),a=e?.enabled!==false,u=react$1.useCallback(async()=>{if(a){o(true),n(null),i(false);try{let h=await r.mongodb.collection(t).findOne(e?.filter);h===null?(i(!0),s(null)):s(h),e?.onSuccess?.(h);}catch(p){let h=p instanceof Error?p:new Error("MongoDB findOne failed");n(h),e?.onError?.(h);}finally{o(false);}}},[r,t,e,a]);return react$1.useEffect(()=>{u();},[u]),{data:c,isLoading:g,error:d,isNotFound:l,refetch:u}}function at(t,e,r){let c=y(),[s,d]=react$1.useState([]),[n,g]=react$1.useState(null),[o,l]=react$1.useState(r?.enabled!==false),i=r?.enabled!==false,a=react$1.useCallback(async()=>{if(i){l(true),g(null);try{let u=c.mongodb.collection(t),p={allowDiskUse:r?.allowDiskUse,maxTimeMS:r?.maxTimeMS},h=await u.aggregate(e,p);d(h),r?.onSuccess?.(h);}catch(u){let p=u instanceof Error?u:new Error("MongoDB aggregate failed");g(p),r?.onError?.(p);}finally{l(false);}}},[c,t,e,r,i]);return react$1.useEffect(()=>{a();},[a]),{data:s,isLoading:o,error:n,refetch:a}}function it(t,e){let r=y(),[c,s]=react$1.useState(false),[d,n]=react$1.useState(null),[g,o]=react$1.useState(false),[l,i]=react$1.useState(null),a=react$1.useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).insertOne(h.document);return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB insertOne failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=react$1.useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=react$1.useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function ut(t,e){let r=y(),[c,s]=react$1.useState(false),[d,n]=react$1.useState(null),[g,o]=react$1.useState(false),[l,i]=react$1.useState(null),a=react$1.useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).insertMany(h.documents);return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB insertMany failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=react$1.useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=react$1.useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function lt(t,e){let r=y(),[c,s]=react$1.useState(false),[d,n]=react$1.useState(null),[g,o]=react$1.useState(false),[l,i]=react$1.useState(null),a=react$1.useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).updateOne(h.filter,h.update,{upsert:h.upsert});return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB updateOne failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=react$1.useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=react$1.useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function ct(t,e){let r=y(),[c,s]=react$1.useState(false),[d,n]=react$1.useState(null),[g,o]=react$1.useState(false),[l,i]=react$1.useState(null),a=react$1.useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).updateMany(h.filter,h.update,{upsert:h.upsert});return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB updateMany failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=react$1.useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=react$1.useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function dt(t,e){let r=y(),[c,s]=react$1.useState(false),[d,n]=react$1.useState(null),[g,o]=react$1.useState(false),[l,i]=react$1.useState(null),a=react$1.useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).deleteOne(h.filter);return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB deleteOne failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=react$1.useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=react$1.useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function ft(t,e){let r=y(),[c,s]=react$1.useState(false),[d,n]=react$1.useState(null),[g,o]=react$1.useState(false),[l,i]=react$1.useState(null),a=react$1.useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).deleteMany(h.filter);return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB deleteMany failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=react$1.useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=react$1.useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function gt(t,e){let r=y(),[c,s]=react$1.useState([]),[d,n]=react$1.useState(true),[g,o]=react$1.useState(true),[l,i]=react$1.useState(false),[a,u]=react$1.useState(null),p=react$1.useRef(0),h=e?.pageSize??20,m=react$1.useCallback(async()=>{if(!d)return;c.length===0?o(true):i(true),u(null);try{let v=r.mongodb.collection(t),E={sort:e?.sort,projection:e?.projection,skip:p.current,limit:h},P=await v.find(e?.filter,E);s(re=>[...re,P]),p.current+=P.length;let D=P.length===h;n(D),e?.onSuccess?.(P,D);}catch(v){let E=v instanceof Error?v:new Error("MongoDB find failed");u(E),e?.onError?.(E);}finally{o(false),i(false);}},[r,t,e,d,c.length,h]);react$1.useEffect(()=>{m();},[]);let f=react$1.useCallback(async()=>{s([]),p.current=0,n(true),o(true);try{let U=r.mongodb.collection(t),v={sort:e?.sort,projection:e?.projection,skip:0,limit:h},E=await U.find(e?.filter,v);s([E]),p.current=E.length,n(E.length===h);}catch(U){u(U instanceof Error?U:new Error("MongoDB find failed"));}finally{o(false);}},[r,t,e,h]),b=react$1.useCallback(()=>{s([]),p.current=0,n(true),o(true),u(null);},[]);return {data:c.flat(),pages:c,hasMore:d,isLoading:g,isFetchingNextPage:l,error:a,fetchNextPage:m,refetch:f,reset:b}}function pt(t,e){let r=y(),[c,s]=react$1.useState(0),[d,n]=react$1.useState(e?.enabled!==false),[g,o]=react$1.useState(null),l=e?.enabled!==false,i=react$1.useCallback(async()=>{if(l){n(true),o(null);try{let u=await r.mongodb.collection(t).countDocuments(e?.filter);s(u);}catch(a){o(a instanceof Error?a:new Error("MongoDB count failed"));}finally{n(false);}}},[r,t,e?.filter,l]);return react$1.useEffect(()=>{i();},[i]),{count:c,isLoading:d,error:g,refetch:i}}function mt(t,e,r){let c=y(),[s,d]=react$1.useState([]),[n,g]=react$1.useState(r?.enabled!==false),[o,l]=react$1.useState(null),i=r?.enabled!==false,a=react$1.useCallback(async()=>{if(i){g(true),l(null);try{let p=await c.mongodb.collection(t).distinct(e,{filter:r?.filter});d(p);}catch(u){l(u instanceof Error?u:new Error("MongoDB distinct failed"));}finally{g(false);}}},[c,t,e,r?.filter,i]);return react$1.useEffect(()=>{a();},[a]),{values:s,isLoading:n,error:o,refetch:a}}function Ut(t){let e=y(),[r,c]=react$1.useState(reactNative.AppState.currentState),[s,d]=react$1.useState(null),n=react$1.useRef(null),g=t?.reconnectOnForeground!==false,o=t?.refreshSessionOnForeground!==false;return react$1.useEffect(()=>{let l=reactNative.AppState.addEventListener("change",i=>{let a=r;if((i==="background"||i==="inactive")&&a==="active"&&(n.current=Date.now(),t?.onBackground?.()),i==="active"&&(a==="background"||a==="inactive")){let u=n.current?Date.now()-n.current:null;if(d(u),n.current=null,t?.onForeground?.(),g)try{let p=e.realtime();p.connectionState!=="connected"&&p.connect();}catch{}o&&e.auth.getUser().catch(()=>{});}c(i);});return ()=>{l.remove();}},[e,r,g,o,t]),{appState:r,isActive:r==="active",isBackground:r==="background",backgroundDuration:s}}function Tt(){let[t,e]=react$1.useState(true),r=react$1.useCallback(async()=>{try{let c=new AbortController,s=setTimeout(()=>c.abort(),5e3);return await fetch("https://clients3.google.com/generate_204",{method:"HEAD",signal:c.signal}),clearTimeout(s),e(!0),!0}catch{return e(false),false}},[]);return react$1.useEffect(()=>{r();},[r]),{isConnected:t,checkConnection:r}}function Rt(){let t=y(),[e,r]=react$1.useState(false),[c,s]=react$1.useState(null);return {handleDeepLink:react$1.useCallback(async n=>{let g=new URL(n),o=new URLSearchParams(g.search),l=new URLSearchParams(g.hash.replace("#","")),i=o.get("access_token")||l.get("access_token"),a=o.get("refresh_token")||l.get("refresh_token"),u=o.get("error")||l.get("error"),p=o.get("error_description")||l.get("error_description");if(u){s(new Error(p||u));return}if(i){r(true),s(null);try{await t.auth.setSession(i,a||void 0);}catch(h){s(h instanceof Error?h:new Error("Failed to process OAuth callback"));}finally{r(false);}}},[t]),isProcessing:e,error:c}}
|
|
2
|
+
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}});exports.VaifProvider=ue;exports.useAppState=Ut;exports.useAuditLogs=Xe;exports.useAuth=le;exports.useBatchCreate=xe;exports.useBatchDelete=Pe;exports.useBatchInvoke=_e;exports.useBatchUpdate=Oe;exports.useBroadcast=Ce;exports.useChannel=Fe;exports.useCount=Me;exports.useCreate=Ee;exports.useDeepLinkAuth=Rt;exports.useDelete=we;exports.useDownload=Be;exports.useEmailVerification=ge;exports.useErrorTracking=et;exports.useFile=Qe;exports.useFiles=Ne;exports.useFunction=ne;exports.useFunctionList=je;exports.useFunctionQuery=Je;exports.useIncidents=Ye;exports.useInfiniteQuery=Re;exports.useMFA=he;exports.useMagicLink=pe;exports.useMetrics=Ge;exports.useMongoAggregate=at;exports.useMongoCollection=nt;exports.useMongoCount=pt;exports.useMongoDeleteMany=ft;exports.useMongoDeleteOne=dt;exports.useMongoDistinct=mt;exports.useMongoFind=st;exports.useMongoFindOne=ot;exports.useMongoInfiniteFind=gt;exports.useMongoInsertMany=ut;exports.useMongoInsertOne=it;exports.useMongoUpdateMany=ct;exports.useMongoUpdateOne=lt;exports.useNetworkState=Tt;exports.useOAuth=me;exports.useOptimisticMutation=ke;exports.usePaginatedQuery=Ue;exports.usePasswordReset=fe;exports.usePresence=Ae;exports.usePublicUrl=qe;exports.useQuery=ye;exports.useQueryById=be;exports.useQueryFirst=Te;exports.useRealtimeConnection=Le;exports.useRealtimeStats=Ke;exports.useRpc=He;exports.useScheduledFunction=We;exports.useSubscription=Ie;exports.useSystemHealth=Ze;exports.useToken=de;exports.useUpdate=ve;exports.useUpload=Ve;exports.useUpsert=Se;exports.useUser=ce;exports.useVaif=G;exports.useVaifClient=y;
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import {createContext,useState,useRef,useCallback,useEffect,useContext}from'react';import {createVaifClient}from'@vaiftech/client';import {jsx}from'react/jsx-runtime';import'react-native';export{AuthProvider,VaifAuthClient,createAuthClient,useAuthClient,useIdentities,useIsAuthenticated,usePassword,useSession,useSessions,useAuth as useStandaloneAuth,useMFA as useStandaloneMFA}from'@vaiftech/auth/react';var K=createContext(null);function ee({config:e,children:a,storage:t,onAuthStateChange:i,autoRefreshSession:n=true,storageKey:o="vaif-auth"}){let[r]=useState(()=>createVaifClient(e)),[u,l]=useState(null),[f,d]=useState(null),[c,s]=useState(null),[g,h]=useState(null),[p,m]=useState(true),T=useRef(null),U=useCallback(async(E,S,M)=>{if(!t)return;let y={token:E,refreshToken:S,expiresAt:M};await t.setItem(o,JSON.stringify(y));},[t,o]),R=useCallback(async()=>{t&&await t.removeItem(o),l(null),d(null),s(null),h(null);},[t,o]);useEffect(()=>((async()=>{try{if(!t){m(!1);return}let S=await t.getItem(o);if(!S){m(!1);return}let M=JSON.parse(S);if(M.expiresAt&&new Date(M.expiresAt)<=new Date)if(M.refreshToken)try{let y=await r.auth.refreshToken(M.refreshToken);d(y.token),s(y.refreshToken??null),h(y.expiresAt),await U(y.token,y.refreshToken,y.expiresAt);let N=await r.auth.getUser();l(N);}catch{await R();}else await R();else {d(M.token),s(M.refreshToken??null),h(M.expiresAt??null);try{let y=await r.auth.getUser();l(y);}catch{if(M.refreshToken)try{let y=await r.auth.refreshToken(M.refreshToken);d(y.token),s(y.refreshToken??null),h(y.expiresAt),await U(y.token,y.refreshToken,y.expiresAt);let N=await r.auth.getUser();l(N);}catch{await R();}else await R();}}}catch{await R();}finally{m(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[r,t,o,U,R]),useEffect(()=>{if(!n||!g||!c)return;let E=new Date(g).getTime(),S=Date.now(),M=E-S-6e4;return M>0&&(T.current=setTimeout(async()=>{try{let y=await r.auth.refreshToken(c);d(y.token),s(y.refreshToken??null),h(y.expiresAt),await U(y.token,y.refreshToken,y.expiresAt);}catch{await R();}},M)),()=>{T.current&&clearTimeout(T.current);}},[n,r,g,c,U,R]),useEffect(()=>{p||i?.(u);},[u,p,i]);let Q=useCallback(async(E,S)=>{let M=await r.auth.login(E,S);if("mfaRequired"in M)throw new Error("MFA required - use verifyMFA to complete login");let y=M;return l(y.user),d(y.token),s(y.refreshToken??null),h(y.expiresAt??null),await U(y.token,y.refreshToken,y.expiresAt),y},[r,U]),D=useCallback(async(E,S,M)=>{let y=await r.auth.signUp(E,S,{metadata:M});return l(y.user),d(y.token),s(y.refreshToken??null),h(y.expiresAt??null),await U(y.token,y.refreshToken,y.expiresAt),y},[r,U]),V=useCallback(async()=>{try{await r.auth.logout();}finally{await R();}},[r,R]),G=useCallback(async()=>{if(!c)throw new Error("No refresh token available");let E=await r.auth.refreshToken(c);d(E.token),s(E.refreshToken??null),h(E.expiresAt),await U(E.token,E.refreshToken,E.expiresAt);},[r,c,U]),Z=useCallback(E=>{l(S=>S?{...S,...E}:null);},[]),C={client:r,user:u,token:f,isLoading:p,isAuthenticated:!!u,signIn:Q,signUp:D,signOut:V,refreshSession:G,updateUser:Z};return jsx(K.Provider,{value:C,children:a})}function J(){let e=useContext(K);if(!e)throw new Error("useVaif must be used within a VaifProvider");return e}function b(){let{client:e}=J();return e}function te(){let{client:e,user:a,isLoading:t,isAuthenticated:i,token:n,signIn:o,signUp:r,signOut:u,refreshSession:l,updateUser:f}=J(),d=useCallback(async s=>{let g=await e.auth.updateProfile(s);return f(g),g},[e,f]),c=useCallback(async(s,g)=>{await e.auth.changePassword({currentPassword:s,newPassword:g});},[e]);return {user:a,isLoading:t,isAuthenticated:i,token:n,signIn:o,signUp:r,signOut:u,refreshSession:l,updateProfile:d,changePassword:c}}function re(){let{user:e}=J();return e}function ne(){let{token:e}=J();return e}function se(){let e=b(),[a,t]=useState(false),[i,n]=useState(null),[o,r]=useState(false),[u,l]=useState(false),f=useCallback(async c=>{t(true),n(null);try{await e.auth.requestPasswordReset({email:c}),r(!0);}catch(s){throw n(s instanceof Error?s:new Error("Failed to request reset")),s}finally{t(false);}},[e]),d=useCallback(async(c,s)=>{t(true),n(null);try{await e.auth.confirmPasswordReset({token:c,password:s}),l(!0);}catch(g){throw n(g instanceof Error?g:new Error("Failed to reset password")),g}finally{t(false);}},[e]);return {requestReset:f,confirmReset:d,isLoading:a,error:i,isRequested:o,isConfirmed:u}}function oe(){let e=b(),[a,t]=useState(false),[i,n]=useState(null),[o,r]=useState(false),[u,l]=useState(false),f=useCallback(async c=>{t(true),n(null);try{await e.auth.requestEmailVerification({email:c}),r(!0);}catch(s){throw n(s instanceof Error?s:new Error("Failed to send verification")),s}finally{t(false);}},[e]),d=useCallback(async c=>{t(true),n(null);try{await e.auth.confirmEmailVerification({token:c}),l(!0);}catch(s){throw n(s instanceof Error?s:new Error("Failed to verify email")),s}finally{t(false);}},[e]);return {requestVerification:f,confirmVerification:d,isLoading:a,error:i,isSent:o,isVerified:u}}function ae(){let e=b(),[a,t]=useState(false),[i,n]=useState(null),[o,r]=useState(false),u=useCallback(async f=>{t(true),n(null);try{await e.auth.requestMagicLink({email:f}),r(!0);}catch(d){throw n(d instanceof Error?d:new Error("Failed to send magic link")),d}finally{t(false);}},[e]),l=useCallback(async f=>{t(true),n(null);try{return await e.auth.verifyMagicLink({token:f})}catch(d){throw n(d instanceof Error?d:new Error("Failed to verify magic link")),d}finally{t(false);}},[e]);return {sendMagicLink:u,verifyMagicLink:l,isLoading:a,error:i,isSent:o}}function ie(){let e=b(),[a,t]=useState(false),[i,n]=useState(null);return {signInWithOAuth:useCallback(async(r,u)=>{t(true),n(null);try{return {url:(await e.auth.getOAuthSignInUrl({provider:r,redirectUrl:u})).url}}catch(l){throw n(l instanceof Error?l:new Error("Failed to start OAuth flow")),l}finally{t(false);}},[e]),isLoading:a,error:i}}function le(){let e=b(),[a,t]=useState(false),[i,n]=useState(null),o=useCallback(async l=>{t(true),n(null);try{return await e.auth.setupMFA(l)}catch(f){throw n(f instanceof Error?f:new Error("Failed to setup MFA")),f}finally{t(false);}},[e]),r=useCallback(async(l,f)=>{t(true),n(null);try{return await e.auth.verifyMFA(l,f)}catch(d){throw n(d instanceof Error?d:new Error("Failed to verify MFA")),d}finally{t(false);}},[e]),u=useCallback(async l=>{t(true),n(null);try{await e.auth.disableMFA(l);}catch(f){throw n(f instanceof Error?f:new Error("Failed to disable MFA")),f}finally{t(false);}},[e]);return {setup:o,verify:r,disable:u,isLoading:a,error:i}}function ue(e,a={}){let t=b(),[i,n]=useState([]),[o,r]=useState("idle"),[u,l]=useState(null),f=useRef(a);f.current=a;let{enabled:d=true,refetchInterval:c,where:s,orderBy:g,...h}=a,p=useCallback(async()=>{if(d){r("loading"),l(null);try{let m={...h};s&&(Array.isArray(s)?m.where={AND:s}:m.where=s),g&&(m.orderBy=Array.isArray(g)?g:[g]);let T=await t.from(e).list(m);n(T.data??[]),r("success");}catch(m){l(m),r("error");}}},[t,e,d,JSON.stringify(s),JSON.stringify(g),JSON.stringify(h)]);return useEffect(()=>{p();},[p]),useEffect(()=>{if(!c||!d)return;let m=setInterval(p,c);return ()=>clearInterval(m)},[c,p,d]),{data:i,status:o,isLoading:o==="loading",isError:o==="error",isSuccess:o==="success",error:u,refetch:p}}function ce(e,a,t={}){let i=b(),[n,o]=useState(null),[r,u]=useState("idle"),[l,f]=useState(null),d=t.enabled!==false&&!!a,c=useCallback(async()=>{if(!(!d||!a)){u("loading"),f(null);try{let s=await i.from(e).get(a);o(s.data??null),u("success");}catch(s){f(s),u("error");}}},[i,e,a,d]);return useEffect(()=>{c();},[c]),{data:n,isLoading:r==="loading",isError:r==="error",error:l,refetch:c}}function de(e,a={}){let t=b(),[i,n]=useState([]),[o,r]=useState("idle"),[u,l]=useState(null),[f,d]=useState(a.initialPage??1),[c,s]=useState(0),g=a.pageSize??20,{enabled:h=true,where:p,orderBy:m}=a,T=useCallback(async()=>{if(h){r("loading"),l(null);try{let R=t.from(e);if(p){let D=Array.isArray(p)?p:[p];for(let V of D)R=R.where(V);}if(m){let D=Array.isArray(m)?m:[m];for(let V of D)R=R.orderBy(V.field,V.direction);}let Q=await R.paginate({page:f,pageSize:g});n(Q.data??[]),s(Q.pageInfo?.total??0),r("success");}catch(R){l(R),r("error");}}},[t,e,f,g,h,JSON.stringify(p),JSON.stringify(m)]);useEffect(()=>{T();},[T]);let U=Math.ceil(c/g);return {data:i,status:o,isLoading:o==="loading",isError:o==="error",isSuccess:o==="success",error:u,refetch:T,page:f,pageSize:g,totalPages:U,totalCount:c,hasNextPage:f<U,hasPreviousPage:f>1,nextPage:()=>d(R=>Math.min(R+1,U)),previousPage:()=>d(R=>Math.max(R-1,1)),goToPage:R=>d(Math.max(1,Math.min(R,U)))}}function fe(e,a={}){let t=b(),[i,n]=useState(null),[o,r]=useState(true),[u,l]=useState(null),[f,d]=useState(false),{enabled:c=true,where:s,orderBy:g,...h}=a,p=useCallback(async()=>{if(!c){r(false);return}r(true),l(null),d(false);try{let m={...h,limit:1};s&&(Array.isArray(s)?m.where={AND:s}:m.where=s),g&&(m.orderBy=Array.isArray(g)?g:[g]);let U=(await t.from(e).list(m)).data?.[0]??null;n(U),U||d(!0);}catch(m){l(m instanceof Error?m:new Error("Query failed"));}finally{r(false);}},[t,e,c,JSON.stringify(s),JSON.stringify(g),JSON.stringify(h)]);return useEffect(()=>{p();},[p]),{data:i,isLoading:o,error:u,isNotFound:f,refetch:p}}function ge(e,a={}){let t=b(),[i,n]=useState([]),[o,r]=useState(0),[u,l]=useState(true),[f,d]=useState(true),[c,s]=useState(false),[g,h]=useState(null),{enabled:p=true,pageSize:m=20,where:T,orderBy:U,onSuccess:R,onError:Q}=a,D=useCallback(async()=>{if(!u||!p)return;i.length===0?d(true):s(true),h(null);try{let E={limit:m,offset:o*m};T&&(Array.isArray(T)?E.where={AND:T}:E.where=T),U&&(E.orderBy=Array.isArray(U)?U:[U]);let M=(await t.from(e).list(E)).data??[],y=M.length===m;n(N=>[...N,M]),r(N=>N+1),l(y),R?.(M,y);}catch(E){let S=E instanceof Error?E:new Error("Query failed");h(S),Q?.(S);}finally{d(false),s(false);}},[t,e,p,m,o,u,i.length,JSON.stringify(T),JSON.stringify(U),R,Q]);useEffect(()=>{p&&i.length===0&&D();},[p]);let V=useCallback(async()=>{n([]),r(0),l(true),d(true),h(null);try{let C={limit:m,offset:0};T&&(Array.isArray(T)?C.where={AND:T}:C.where=T),U&&(C.orderBy=Array.isArray(U)?U:[U]);let S=(await t.from(e).list(C)).data??[],M=S.length===m;n([S]),r(1),l(M);}catch(C){h(C instanceof Error?C:new Error("Query failed"));}finally{d(false);}},[t,e,m,JSON.stringify(T),JSON.stringify(U)]),G=useCallback(()=>{n([]),r(0),l(true),d(true),h(null);},[]);return {data:i.flat(),pages:i,hasNextPage:u,isLoading:f,isFetchingNextPage:c,error:g,fetchNextPage:D,refetch:V,reset:G}}function pe(e,a={}){let t=b(),[i,n]=useState(0),[o,r]=useState(true),[u,l]=useState(null),{enabled:f=true,where:d}=a,c=useCallback(async()=>{if(!f){r(false);return}r(true),l(null);try{let s=t.from(e);d&&(s=s.where(d));let g=await s.count();n(g);}catch(s){l(s instanceof Error?s:new Error("Count failed"));}finally{r(false);}},[t,e,f,JSON.stringify(d)]);return useEffect(()=>{c();},[c]),{count:i,isLoading:o,error:u,refetch:c}}function me(e){let a=b(),[t,i]=useState(null),[n,o]=useState("idle"),[r,u]=useState(null),l=useCallback(async d=>{o("loading"),u(null);try{let s=(await a.from(e).create(d)).data??null;return i(s),o("success"),s}catch(c){return u(c),o("error"),null}},[a,e]),f=useCallback(()=>{i(null),o("idle"),u(null);},[]);return {create:l,mutate:l,data:t,status:n,isLoading:n==="loading",isError:n==="error",isSuccess:n==="success",error:r,reset:f}}function he(e){let a=b(),[t,i]=useState(null),[n,o]=useState("idle"),[r,u]=useState(null),l=useCallback(async(d,c)=>{o("loading"),u(null);try{let g=(await a.from(e).update(d,c)).data??null;return i(g),o("success"),g}catch(s){return u(s),o("error"),null}},[a,e]),f=useCallback(()=>{i(null),o("idle"),u(null);},[]);return {update:l,data:t,status:n,isLoading:n==="loading",isError:n==="error",error:r,reset:f}}function ye(e){let a=b(),[t,i]=useState("idle"),[n,o]=useState(null),r=useCallback(async l=>{i("loading"),o(null);try{return await a.from(e).delete(l),i("success"),!0}catch(f){return o(f),i("error"),false}},[a,e]),u=useCallback(()=>{i("idle"),o(null);},[]);return {remove:r,status:t,isLoading:t==="loading",isError:t==="error",error:n,reset:u}}function be(e){let a=b(),[t,i]=useState(null),[n,o]=useState("idle"),[r,u]=useState(null),l=useCallback(async(d,c)=>{o("loading"),u(null);try{let g=(await a.from(e).upsert(d,{conflictFields:c})).data??null;return i(g),o("success"),g}catch(s){return u(s),o("error"),null}},[a,e]),f=useCallback(()=>{i(null),o("idle"),u(null);},[]);return {upsert:l,data:t,status:n,isLoading:n==="loading",isError:n==="error",error:r,reset:f}}function Te(e){let a=b(),[t,i]=useState([]),[n,o]=useState("idle"),[r,u]=useState(null);return {createMany:useCallback(async f=>{o("loading"),u(null);try{let c=(await a.from(e).createMany(f)).records??[];return i(c),o("success"),c}catch(d){return u(d),o("error"),[]}},[a,e]),data:t,isLoading:n==="loading",isError:n==="error",error:r}}function Ue(e){let a=b(),[t,i]=useState(null),[n,o]=useState("idle"),[r,u]=useState(null),l=useCallback(async(d,c)=>{o("loading"),u(null);try{let s=await a.from(e).where(d).updateMany(c),g={count:s.count,records:s.records};return i(g),o("success"),g}catch(s){return u(s instanceof Error?s:new Error("Batch update failed")),o("error"),{count:0}}},[a,e]),f=useCallback(()=>{i(null),o("idle"),u(null);},[]);return {batchUpdate:l,data:t,isLoading:n==="loading",isError:n==="error",error:r,reset:f}}function Re(e){let a=b(),[t,i]=useState(null),[n,o]=useState("idle"),[r,u]=useState(null),l=useCallback(async d=>{o("loading"),u(null);try{let s={count:(await a.from(e).where(d).deleteMany()).count};return i(s),o("success"),s}catch(c){return u(c instanceof Error?c:new Error("Batch delete failed")),o("error"),{count:0}}},[a,e]),f=useCallback(()=>{i(null),o("idle"),u(null);},[]);return {batchDelete:l,data:t,isLoading:n==="loading",isError:n==="error",error:r,reset:f}}function Ee(e,a,t){let[i,n]=useState(e),[o,r]=useState(false),[u,l]=useState(null),f=useRef(e),d=useCallback(()=>{n(f.current);},[]),c=useCallback(async g=>{r(true),l(null),f.current=i;let h=t.optimisticUpdate(i,g);n(h);try{let p=await a(g);return n(p),t.onSuccess?.(p,g),t.onSettled?.(p,null,g),p}catch(p){let m=p instanceof Error?p:new Error("Mutation failed");throw l(m),d(),t.onError?.(m,g),t.onSettled?.(void 0,m,g),m}finally{r(false);}},[i,a,t,d]);return {mutate:useCallback(g=>{c(g).catch(()=>{});},[c]),mutateAsync:c,optimisticData:i,rollback:d,isLoading:o,error:u}}function Me(e,a={}){let t=b(),[i,n]=useState("connecting"),o=useRef(null),r=useRef(null),{enabled:u=true,event:l,filter:f,onInsert:d,onUpdate:c,onDelete:s,onChange:g}=a;useEffect(()=>{if(!u)return;let p=t.realtime();o.current=p,p.on("connect",()=>n("connected")),p.on("disconnect",()=>n("disconnected")),p.on("reconnect",()=>n("reconnecting")),p.connect().catch(()=>{n("disconnected");});let m=T=>{switch(g?.(T),T.operation){case "INSERT":T.new&&d?.(T.new);break;case "UPDATE":T.new&&c?.(T.new,T.old??null);break;case "DELETE":T.old&&s?.(T.old);break}};return r.current=p.subscribe({table:e,event:l??"*",filter:f},m),()=>{r.current?.(),p.disconnect();}},[t,e,u,JSON.stringify(l),JSON.stringify(f)]);let h=useCallback(()=>{r.current?.(),o.current?.disconnect();},[]);return {isConnected:i==="connected",connectionState:i,unsubscribe:h}}function ve(e,a={}){let t=b(),[i,n]=useState([]),[o,r]=useState(false),u=useRef(null),l=useRef(null);useEffect(()=>{let s=t.realtime();l.current=s,s.on("connect",()=>r(true)),s.on("disconnect",()=>r(false));let g=s.channel(e,{type:"presence"});return u.current=g,g.presence.onSync(h=>{let p=[];for(let m of Object.values(h))p.push(...m);n(p);}),g.subscribe().then(()=>{a.initialState&&g.presence.track({state:a.initialState});}),()=>{g.presence.untrack(),g.unsubscribe(),s.disconnect();}},[t,e]);let f=useCallback(s=>{u.current?.presence.track({state:s});},[]),d=useCallback(s=>{u.current?.presence.update(s);},[]),c=useCallback(()=>{u.current?.presence.untrack();},[]);return {presences:i,track:f,update:d,untrack:c,isConnected:o}}function we(e){let a=b(),[t,i]=useState(null),[n,o]=useState(false),r=useRef(null),u=useRef(null),l=useRef(new Map);useEffect(()=>{let c=a.realtime();u.current=c,c.on("connect",()=>o(true)),c.on("disconnect",()=>o(false));let s=c.channel(e);return r.current=s,s.subscribe(),()=>{s.unsubscribe(),c.disconnect();}},[a,e]);let f=useCallback((c,s)=>{r.current?.broadcast({event:c,payload:s});},[]),d=useCallback((c,s)=>(l.current.has(c)||(l.current.set(c,new Set),r.current?.on(c,g=>{i({event:c,payload:g}),l.current.get(c)?.forEach(h=>h(g));})),l.current.get(c).add(s),()=>{l.current.get(c)?.delete(s);}),[]);return {broadcast:f,lastMessage:t,subscribe:d,isConnected:n}}function Se(e,a={}){let t=b(),[i,n]=useState(null),[o,r]=useState([]),[u,l]=useState(false),f=useRef(null),d=useRef(null),{enabled:c=true,type:s="public"}=a;useEffect(()=>{if(!c)return;let p=t.realtime();d.current=p;let m=p.channel(e,{type:s});return f.current=m,m.on("*",T=>{let U={event:"*",payload:T};n(U),r(R=>[...R,U]);}),m.subscribe().then(()=>{l(true);}),()=>{m.unsubscribe(),p.disconnect(),l(false);}},[t,e,c,s]);let g=useCallback((p,m)=>{f.current?.broadcast({event:p,payload:m});},[]),h=useCallback(()=>{f.current?.unsubscribe(),l(false);},[]);return {broadcast:g,lastMessage:i,messages:o,isJoined:u,leave:h}}function xe(){let e=b(),[a,t]=useState("disconnected"),i=useRef(null);useEffect(()=>{let r=e.realtime();return i.current=r,t(r.connectionState),r.on("connect",()=>t("connected")),r.on("disconnect",()=>t("disconnected")),r.on("reconnect",()=>t("reconnecting")),()=>{r.disconnect();}},[e]);let n=useCallback(()=>{i.current?.connect();},[]),o=useCallback(()=>{i.current?.disconnect();},[]);return {connectionState:a,isConnected:a==="connected",reconnect:n,disconnect:o}}function Oe(e){let a=b(),[t,i]=useState(0),[n,o]=useState(false),[r,u]=useState(null),[l,f]=useState(null),d=useCallback(async(g,h,p={})=>{o(true),i(0),u(null),f(null);try{let m=await a.storage.upload(h,g,{bucket:p.bucket||e,contentType:p.contentType,metadata:p.metadata,isPublic:p.isPublic});return f(m),i(100),m}catch(m){return u(m),null}finally{o(false);}},[a,e]),c=useCallback(async(g,h,p={})=>{o(true),i(0),u(null),f(null);try{let T=await(await fetch(g)).blob(),U=p.contentType||T.type||ze(g),R=await a.storage.upload(h,T,{bucket:p.bucket||e,contentType:U,metadata:p.metadata,isPublic:p.isPublic});return f(R),i(100),R}catch(m){return u(m),null}finally{o(false);}},[a,e]),s=useCallback(()=>{i(0),u(null),f(null);},[]);return {upload:d,uploadUri:c,progress:t,isUploading:n,isError:!!r,error:r,result:l,reset:s}}function Ie(e){let a=b(),[t,i]=useState(false),[n,o]=useState(null),[r,u]=useState(0);return {download:useCallback(async f=>{i(true),u(0),o(null);try{let d=await a.storage.download(f,{bucket:e});return u(100),d}catch(d){return o(d),null}finally{i(false);}},[a,e]),isDownloading:t,isError:!!n,error:n,progress:r}}function ke(e,a){let t=b(),[i,n]=useState(null),[o,r]=useState(false),[u,l]=useState(null),f=useCallback(async()=>{if(e){r(true),l(null);try{let c=await t.storage.getMetadata(e,{bucket:a?.bucket});n(c);}catch(c){l(c);}finally{r(false);}}},[t,e,a?.bucket]),d=useCallback(async()=>{if(!e)return false;try{return await t.storage.delete(e,{bucket:a?.bucket}),n(null),!0}catch(c){return l(c),false}},[t,e,a?.bucket]);return useEffect(()=>{e&&f();},[e,f]),{file:i,isLoading:o,isError:!!u,error:u,refetch:f,remove:d}}function Ce(e={}){let a=b(),[t,i]=useState([]),[n,o]=useState(false),[r,u]=useState(null),l=useCallback(async()=>{o(true),u(null);try{let f=await a.storage.list({bucket:e.bucket,prefix:e.prefix,limit:e.limit});i(f.files??[]);}catch(f){u(f);}finally{o(false);}},[a,e.bucket,e.prefix,e.limit]);return useEffect(()=>{l();},[l]),{files:t,isLoading:n,isError:!!r,error:r,refetch:l}}function Ae(e,a){let t=b();if(!e)return null;try{return t.storage.getPublicUrl(e,{bucket:a?.bucket})}catch{return null}}function ze(e){let a=e.split(".").pop()?.toLowerCase();return {jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",mp4:"video/mp4",mov:"video/quicktime",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",json:"application/json",txt:"text/plain"}[a||""]||"application/octet-stream"}function $(e,a={}){let t=b(),[i,n]=useState(null),[o,r]=useState(false),[u,l]=useState(null),[f,d]=useState(false),[c,s]=useState(null),g=useCallback(async p=>{r(true),l(null),d(false);try{let m=await t.functions.invoke(e,{body:p},{retry:a.retry,timeout:a.timeout});return n(m.data),s({status:m.status,durationMs:m.durationMs,requestId:m.requestId,logs:m.logs}),d(!0),m.data}catch(m){return l(m),null}finally{r(false);}},[t,e,a.retry,a.timeout]),h=useCallback(()=>{n(null),l(null),d(false),s(null);},[]);return {invoke:g,data:i,isLoading:o,isError:!!u,isSuccess:f,error:u,reset:h,meta:c}}function Fe(e,a={}){let t=$(e,a);return {...t,call:t.invoke}}function Le(e,a,t={}){let i=$(e,t),{enabled:n=true,refetchInterval:o}=t,r=useCallback(async()=>{await i.invoke(a);},[i.invoke,a]);return useEffect(()=>{n&&i.invoke(a);},[n]),useEffect(()=>{if(!o||!n)return;let u=setInterval(()=>{i.invoke(a);},o);return ()=>clearInterval(u)},[o,n]),{...i,refetch:r}}function De(e,a={}){let t=b(),[i,n]=useState([]),[o,r]=useState(false),[u,l]=useState(null),{enabled:f=true,envId:d}=a,c=useCallback(async()=>{if(!(!f||!e)){r(true),l(null);try{let s=await t.functions.list({projectId:e,envId:d});n(s);}catch(s){l(s);}finally{r(false);}}},[t,e,d,f]);return useEffect(()=>{c();},[c]),{functions:i,isLoading:o,isError:!!u,error:u,refetch:c}}function Ve(){let e=b(),[a,t]=useState([]),[i,n]=useState(false),[o,r]=useState([]);return {invoke:useCallback(async(l,f=[])=>{n(true),r([]);let d=await Promise.all(l.map(async(g,h)=>{try{return {data:(await e.functions.invoke(g,{body:f[h]})).data,error:null}}catch(p){return {data:null,error:p}}})),c=d.map(g=>g.data),s=d.map(g=>g.error);return t(c),r(s),n(false),c},[e]),results:a,isLoading:i,errors:o}}function Be(e){let a=b(),[t,i]=useState(false),[n,o]=useState(null),[r,u]=useState(null),[l,f]=useState(null),d=useCallback(async(s,g)=>{f(null);try{let p=(await a.functions.invoke(e,{body:s})).requestId??`scheduled-${Date.now()}`;return u(p),i(!0),o(new Date(Date.now()+g.delayMs)),p}catch(h){let p=h instanceof Error?h:new Error("Failed to schedule function");throw f(p),p}},[a,e]),c=useCallback(async()=>{i(false),o(null),u(null);},[]);return {schedule:d,cancel:c,isScheduled:t,scheduledAt:n,requestId:r,error:l}}export{ee as VaifProvider,te as useAuth,Te as useBatchCreate,Re as useBatchDelete,Ve as useBatchInvoke,Ue as useBatchUpdate,we as useBroadcast,Se as useChannel,pe as useCount,me as useCreate,ye as useDelete,Ie as useDownload,oe as useEmailVerification,ke as useFile,Ce as useFiles,$ as useFunction,De as useFunctionList,Le as useFunctionQuery,ge as useInfiniteQuery,le as useMFA,ae as useMagicLink,ie as useOAuth,Ee as useOptimisticMutation,de as usePaginatedQuery,se as usePasswordReset,ve as usePresence,Ae as usePublicUrl,ue as useQuery,ce as useQueryById,fe as useQueryFirst,xe as useRealtimeConnection,Fe as useRpc,Be as useScheduledFunction,Me as useSubscription,ne as useToken,he as useUpdate,Oe as useUpload,be as useUpsert,re as useUser,J as useVaif,b as useVaifClient};
|
|
1
|
+
import {createContext,useState,useRef,useCallback,useEffect,useContext,useMemo}from'react';import {createVaifClient}from'@vaiftech/client';import {jsx}from'react/jsx-runtime';import {AppState}from'react-native';export{AuthProvider,VaifAuthClient,createAuthClient,useAuthClient,useIdentities,useIsAuthenticated,usePassword,useSession,useSessions,useAuth as useStandaloneAuth,useMFA as useStandaloneMFA}from'@vaiftech/auth/react';var ie=createContext(null);function ue({config:t,children:e,storage:r,onAuthStateChange:c,autoRefreshSession:s=true,storageKey:d="vaif-auth"}){let[n]=useState(()=>createVaifClient(t)),[g,o]=useState(null),[l,i]=useState(null),[a,u]=useState(null),[p,h]=useState(null),[m,f]=useState(true),b=useRef(null),T=useCallback(async(w,A,x)=>{if(!r)return;let M={token:w,refreshToken:A,expiresAt:x};await r.setItem(d,JSON.stringify(M));},[r,d]),U=useCallback(async()=>{r&&await r.removeItem(d),o(null),i(null),u(null),h(null);},[r,d]);useEffect(()=>((async()=>{try{if(!r){f(!1);return}let A=await r.getItem(d);if(!A){f(!1);return}let x=JSON.parse(A);if(x.expiresAt&&new Date(x.expiresAt)<=new Date)if(x.refreshToken)try{let M=await n.auth.refreshToken(x.refreshToken);i(M.token),u(M.refreshToken??null),h(M.expiresAt),await T(M.token,M.refreshToken,M.expiresAt);let z=await n.auth.getUser();o(z);}catch{await U();}else await U();else {i(x.token),u(x.refreshToken??null),h(x.expiresAt??null);try{let M=await n.auth.getUser();o(M);}catch{if(x.refreshToken)try{let M=await n.auth.refreshToken(x.refreshToken);i(M.token),u(M.refreshToken??null),h(M.expiresAt),await T(M.token,M.refreshToken,M.expiresAt);let z=await n.auth.getUser();o(z);}catch{await U();}else await U();}}}catch{await U();}finally{f(false);}})(),()=>{b.current&&clearTimeout(b.current);}),[n,r,d,T,U]),useEffect(()=>{if(!s||!p||!a)return;let w=new Date(p).getTime(),A=Date.now(),x=w-A-6e4;return x>0&&(b.current=setTimeout(async()=>{try{let M=await n.auth.refreshToken(a);i(M.token),u(M.refreshToken??null),h(M.expiresAt),await T(M.token,M.refreshToken,M.expiresAt);}catch{await U();}},x)),()=>{b.current&&clearTimeout(b.current);}},[s,n,p,a,T,U]),useEffect(()=>{m||c?.(g);},[g,m,c]);let v=useCallback(async(w,A)=>{let x=await n.auth.login(w,A);if("mfaRequired"in x)throw new Error("MFA required - use verifyMFA to complete login");let M=x;return o(M.user),i(M.token),u(M.refreshToken??null),h(M.expiresAt??null),await T(M.token,M.refreshToken,M.expiresAt),M},[n,T]),E=useCallback(async(w,A,x)=>{let M=await n.auth.signUp(w,A,{metadata:x});return o(M.user),i(M.token),u(M.refreshToken??null),h(M.expiresAt??null),await T(M.token,M.refreshToken,M.expiresAt),M},[n,T]),P=useCallback(async()=>{try{await n.auth.logout();}finally{await U();}},[n,U]),D=useCallback(async()=>{if(!a)throw new Error("No refresh token available");let w=await n.auth.refreshToken(a);i(w.token),u(w.refreshToken??null),h(w.expiresAt),await T(w.token,w.refreshToken,w.expiresAt);},[n,a,T]),re=useCallback(w=>{o(A=>A?{...A,...w}:null);},[]),N={client:n,user:g,token:l,isLoading:m,isAuthenticated:!!g,signIn:v,signUp:E,signOut:P,refreshSession:D,updateUser:re};return jsx(ie.Provider,{value:N,children:e})}function G(){let t=useContext(ie);if(!t)throw new Error("useVaif must be used within a VaifProvider");return t}function y(){let{client:t}=G();return t}function le(){let{client:t,user:e,isLoading:r,isAuthenticated:c,token:s,signIn:d,signUp:n,signOut:g,refreshSession:o,updateUser:l}=G(),i=useCallback(async u=>{let p=await t.auth.updateProfile(u);return l(p),p},[t,l]),a=useCallback(async(u,p)=>{await t.auth.changePassword({currentPassword:u,newPassword:p});},[t]);return {user:e,isLoading:r,isAuthenticated:c,token:s,signIn:d,signUp:n,signOut:g,refreshSession:o,updateProfile:i,changePassword:a}}function ce(){let{user:t}=G();return t}function de(){let{token:t}=G();return t}function fe(){let t=y(),[e,r]=useState(false),[c,s]=useState(null),[d,n]=useState(false),[g,o]=useState(false),l=useCallback(async a=>{r(true),s(null);try{await t.auth.requestPasswordReset({email:a}),n(!0);}catch(u){throw s(u instanceof Error?u:new Error("Failed to request reset")),u}finally{r(false);}},[t]),i=useCallback(async(a,u)=>{r(true),s(null);try{await t.auth.confirmPasswordReset({token:a,password:u}),o(!0);}catch(p){throw s(p instanceof Error?p:new Error("Failed to reset password")),p}finally{r(false);}},[t]);return {requestReset:l,confirmReset:i,isLoading:e,error:c,isRequested:d,isConfirmed:g}}function ge(){let t=y(),[e,r]=useState(false),[c,s]=useState(null),[d,n]=useState(false),[g,o]=useState(false),l=useCallback(async a=>{r(true),s(null);try{await t.auth.requestEmailVerification({email:a}),n(!0);}catch(u){throw s(u instanceof Error?u:new Error("Failed to send verification")),u}finally{r(false);}},[t]),i=useCallback(async a=>{r(true),s(null);try{await t.auth.confirmEmailVerification({token:a}),o(!0);}catch(u){throw s(u instanceof Error?u:new Error("Failed to verify email")),u}finally{r(false);}},[t]);return {requestVerification:l,confirmVerification:i,isLoading:e,error:c,isSent:d,isVerified:g}}function pe(){let t=y(),[e,r]=useState(false),[c,s]=useState(null),[d,n]=useState(false),g=useCallback(async l=>{r(true),s(null);try{await t.auth.requestMagicLink({email:l}),n(!0);}catch(i){throw s(i instanceof Error?i:new Error("Failed to send magic link")),i}finally{r(false);}},[t]),o=useCallback(async l=>{r(true),s(null);try{return await t.auth.verifyMagicLink({token:l})}catch(i){throw s(i instanceof Error?i:new Error("Failed to verify magic link")),i}finally{r(false);}},[t]);return {sendMagicLink:g,verifyMagicLink:o,isLoading:e,error:c,isSent:d}}function me(){let t=y(),[e,r]=useState(false),[c,s]=useState(null);return {signInWithOAuth:useCallback(async(n,g)=>{r(true),s(null);try{return {url:(await t.auth.getOAuthSignInUrl({provider:n,redirectUrl:g})).url}}catch(o){throw s(o instanceof Error?o:new Error("Failed to start OAuth flow")),o}finally{r(false);}},[t]),isLoading:e,error:c}}function he(){let t=y(),[e,r]=useState(false),[c,s]=useState(null),d=useCallback(async o=>{r(true),s(null);try{return await t.auth.setupMFA(o)}catch(l){throw s(l instanceof Error?l:new Error("Failed to setup MFA")),l}finally{r(false);}},[t]),n=useCallback(async(o,l)=>{r(true),s(null);try{return await t.auth.verifyMFA(o,l)}catch(i){throw s(i instanceof Error?i:new Error("Failed to verify MFA")),i}finally{r(false);}},[t]),g=useCallback(async o=>{r(true),s(null);try{await t.auth.disableMFA(o);}catch(l){throw s(l instanceof Error?l:new Error("Failed to disable MFA")),l}finally{r(false);}},[t]);return {setup:d,verify:n,disable:g,isLoading:e,error:c}}function ye(t,e={}){let r=y(),[c,s]=useState([]),[d,n]=useState("idle"),[g,o]=useState(null),l=useRef(e);l.current=e;let{enabled:i=true,refetchInterval:a,where:u,orderBy:p,...h}=e,m=useCallback(async()=>{if(i){n("loading"),o(null);try{let f={...h};u&&(Array.isArray(u)?f.where={AND:u}:f.where=u),p&&(f.orderBy=Array.isArray(p)?p:[p]);let b=await r.from(t).list(f);s(b.data??[]),n("success");}catch(f){o(f),n("error");}}},[r,t,i,JSON.stringify(u),JSON.stringify(p),JSON.stringify(h)]);return useEffect(()=>{m();},[m]),useEffect(()=>{if(!a||!i)return;let f=setInterval(m,a);return ()=>clearInterval(f)},[a,m,i]),{data:c,status:d,isLoading:d==="loading",isError:d==="error",isSuccess:d==="success",error:g,refetch:m}}function be(t,e,r={}){let c=y(),[s,d]=useState(null),[n,g]=useState("idle"),[o,l]=useState(null),i=r.enabled!==false&&!!e,a=useCallback(async()=>{if(!(!i||!e)){g("loading"),l(null);try{let u=await c.from(t).get(e);d(u.data??null),g("success");}catch(u){l(u),g("error");}}},[c,t,e,i]);return useEffect(()=>{a();},[a]),{data:s,isLoading:n==="loading",isError:n==="error",error:o,refetch:a}}function Ue(t,e={}){let r=y(),[c,s]=useState([]),[d,n]=useState("idle"),[g,o]=useState(null),[l,i]=useState(e.initialPage??1),[a,u]=useState(0),p=e.pageSize??20,{enabled:h=true,where:m,orderBy:f}=e,b=useCallback(async()=>{if(h){n("loading"),o(null);try{let U=r.from(t);if(m){let E=Array.isArray(m)?m:[m];for(let P of E)U=U.where(P);}if(f){let E=Array.isArray(f)?f:[f];for(let P of E)U=U.orderBy(P.field,P.direction);}let v=await U.paginate({page:l,pageSize:p});s(v.data??[]),u(v.pageInfo?.total??0),n("success");}catch(U){o(U),n("error");}}},[r,t,l,p,h,JSON.stringify(m),JSON.stringify(f)]);useEffect(()=>{b();},[b]);let T=Math.ceil(a/p);return {data:c,status:d,isLoading:d==="loading",isError:d==="error",isSuccess:d==="success",error:g,refetch:b,page:l,pageSize:p,totalPages:T,totalCount:a,hasNextPage:l<T,hasPreviousPage:l>1,nextPage:()=>i(U=>Math.min(U+1,T)),previousPage:()=>i(U=>Math.max(U-1,1)),goToPage:U=>i(Math.max(1,Math.min(U,T)))}}function Te(t,e={}){let r=y(),[c,s]=useState(null),[d,n]=useState(true),[g,o]=useState(null),[l,i]=useState(false),{enabled:a=true,where:u,orderBy:p,...h}=e,m=useCallback(async()=>{if(!a){n(false);return}n(true),o(null),i(false);try{let f={...h,limit:1};u&&(Array.isArray(u)?f.where={AND:u}:f.where=u),p&&(f.orderBy=Array.isArray(p)?p:[p]);let T=(await r.from(t).list(f)).data?.[0]??null;s(T),T||i(!0);}catch(f){o(f instanceof Error?f:new Error("Query failed"));}finally{n(false);}},[r,t,a,JSON.stringify(u),JSON.stringify(p),JSON.stringify(h)]);return useEffect(()=>{m();},[m]),{data:c,isLoading:d,error:g,isNotFound:l,refetch:m}}function Re(t,e={}){let r=y(),[c,s]=useState([]),[d,n]=useState(0),[g,o]=useState(true),[l,i]=useState(true),[a,u]=useState(false),[p,h]=useState(null),{enabled:m=true,pageSize:f=20,where:b,orderBy:T,onSuccess:U,onError:v}=e,E=useCallback(async()=>{if(!g||!m)return;c.length===0?i(true):u(true),h(null);try{let w={limit:f,offset:d*f};b&&(Array.isArray(b)?w.where={AND:b}:w.where=b),T&&(w.orderBy=Array.isArray(T)?T:[T]);let x=(await r.from(t).list(w)).data??[],M=x.length===f;s(z=>[...z,x]),n(z=>z+1),o(M),U?.(x,M);}catch(w){let A=w instanceof Error?w:new Error("Query failed");h(A),v?.(A);}finally{i(false),u(false);}},[r,t,m,f,d,g,c.length,JSON.stringify(b),JSON.stringify(T),U,v]);useEffect(()=>{m&&c.length===0&&E();},[m]);let P=useCallback(async()=>{s([]),n(0),o(true),i(true),h(null);try{let N={limit:f,offset:0};b&&(Array.isArray(b)?N.where={AND:b}:N.where=b),T&&(N.orderBy=Array.isArray(T)?T:[T]);let A=(await r.from(t).list(N)).data??[],x=A.length===f;s([A]),n(1),o(x);}catch(N){h(N instanceof Error?N:new Error("Query failed"));}finally{i(false);}},[r,t,f,JSON.stringify(b),JSON.stringify(T)]),D=useCallback(()=>{s([]),n(0),o(true),i(true),h(null);},[]);return {data:c.flat(),pages:c,hasNextPage:g,isLoading:l,isFetchingNextPage:a,error:p,fetchNextPage:E,refetch:P,reset:D}}function Me(t,e={}){let r=y(),[c,s]=useState(0),[d,n]=useState(true),[g,o]=useState(null),{enabled:l=true,where:i}=e,a=useCallback(async()=>{if(!l){n(false);return}n(true),o(null);try{let u=r.from(t);i&&(u=u.where(i));let p=await u.count();s(p);}catch(u){o(u instanceof Error?u:new Error("Count failed"));}finally{n(false);}},[r,t,l,JSON.stringify(i)]);return useEffect(()=>{a();},[a]),{count:c,isLoading:d,error:g,refetch:a}}function Ee(t){let e=y(),[r,c]=useState(null),[s,d]=useState("idle"),[n,g]=useState(null),o=useCallback(async i=>{d("loading"),g(null);try{let u=(await e.from(t).create(i)).data??null;return c(u),d("success"),u}catch(a){return g(a),d("error"),null}},[e,t]),l=useCallback(()=>{c(null),d("idle"),g(null);},[]);return {create:o,mutate:o,data:r,status:s,isLoading:s==="loading",isError:s==="error",isSuccess:s==="success",error:n,reset:l}}function ve(t){let e=y(),[r,c]=useState(null),[s,d]=useState("idle"),[n,g]=useState(null),o=useCallback(async(i,a)=>{d("loading"),g(null);try{let p=(await e.from(t).update(i,a)).data??null;return c(p),d("success"),p}catch(u){return g(u),d("error"),null}},[e,t]),l=useCallback(()=>{c(null),d("idle"),g(null);},[]);return {update:o,data:r,status:s,isLoading:s==="loading",isError:s==="error",error:n,reset:l}}function we(t){let e=y(),[r,c]=useState("idle"),[s,d]=useState(null),n=useCallback(async o=>{c("loading"),d(null);try{return await e.from(t).delete(o),c("success"),!0}catch(l){return d(l),c("error"),false}},[e,t]),g=useCallback(()=>{c("idle"),d(null);},[]);return {remove:n,status:r,isLoading:r==="loading",isError:r==="error",error:s,reset:g}}function Se(t){let e=y(),[r,c]=useState(null),[s,d]=useState("idle"),[n,g]=useState(null),o=useCallback(async(i,a)=>{d("loading"),g(null);try{let p=(await e.from(t).upsert(i,{conflictFields:a})).data??null;return c(p),d("success"),p}catch(u){return g(u),d("error"),null}},[e,t]),l=useCallback(()=>{c(null),d("idle"),g(null);},[]);return {upsert:o,data:r,status:s,isLoading:s==="loading",isError:s==="error",error:n,reset:l}}function xe(t){let e=y(),[r,c]=useState([]),[s,d]=useState("idle"),[n,g]=useState(null);return {createMany:useCallback(async l=>{d("loading"),g(null);try{let a=(await e.from(t).createMany(l)).records??[];return c(a),d("success"),a}catch(i){return g(i),d("error"),[]}},[e,t]),data:r,isLoading:s==="loading",isError:s==="error",error:n}}function Oe(t){let e=y(),[r,c]=useState(null),[s,d]=useState("idle"),[n,g]=useState(null),o=useCallback(async(i,a)=>{d("loading"),g(null);try{let u=await e.from(t).where(i).updateMany(a),p={count:u.count,records:u.records};return c(p),d("success"),p}catch(u){return g(u instanceof Error?u:new Error("Batch update failed")),d("error"),{count:0}}},[e,t]),l=useCallback(()=>{c(null),d("idle"),g(null);},[]);return {batchUpdate:o,data:r,isLoading:s==="loading",isError:s==="error",error:n,reset:l}}function Pe(t){let e=y(),[r,c]=useState(null),[s,d]=useState("idle"),[n,g]=useState(null),o=useCallback(async i=>{d("loading"),g(null);try{let u={count:(await e.from(t).where(i).deleteMany()).count};return c(u),d("success"),u}catch(a){return g(a instanceof Error?a:new Error("Batch delete failed")),d("error"),{count:0}}},[e,t]),l=useCallback(()=>{c(null),d("idle"),g(null);},[]);return {batchDelete:o,data:r,isLoading:s==="loading",isError:s==="error",error:n,reset:l}}function ke(t,e,r){let[c,s]=useState(t),[d,n]=useState(false),[g,o]=useState(null),l=useRef(t),i=useCallback(()=>{s(l.current);},[]),a=useCallback(async p=>{n(true),o(null),l.current=c;let h=r.optimisticUpdate(c,p);s(h);try{let m=await e(p);return s(m),r.onSuccess?.(m,p),r.onSettled?.(m,null,p),m}catch(m){let f=m instanceof Error?m:new Error("Mutation failed");throw o(f),i(),r.onError?.(f,p),r.onSettled?.(void 0,f,p),f}finally{n(false);}},[c,e,r,i]);return {mutate:useCallback(p=>{a(p).catch(()=>{});},[a]),mutateAsync:a,optimisticData:c,rollback:i,isLoading:d,error:g}}function Ie(t,e={}){let r=y(),[c,s]=useState("connecting"),d=useRef(null),n=useRef(null),{enabled:g=true,event:o,filter:l,onInsert:i,onUpdate:a,onDelete:u,onChange:p}=e;useEffect(()=>{if(!g)return;let m=r.realtime();d.current=m,m.on("connect",()=>s("connected")),m.on("disconnect",()=>s("disconnected")),m.on("reconnect",()=>s("reconnecting")),m.connect().catch(()=>{s("disconnected");});let f=b=>{switch(p?.(b),b.operation){case "INSERT":b.new&&i?.(b.new);break;case "UPDATE":b.new&&a?.(b.new,b.old??null);break;case "DELETE":b.old&&u?.(b.old);break}};return n.current=m.subscribe({table:t,event:o??"*",filter:l},f),()=>{n.current?.(),m.disconnect();}},[r,t,g,JSON.stringify(o),JSON.stringify(l)]);let h=useCallback(()=>{n.current?.(),d.current?.disconnect();},[]);return {isConnected:c==="connected",connectionState:c,unsubscribe:h}}function Ae(t,e={}){let r=y(),[c,s]=useState([]),[d,n]=useState(false),g=useRef(null),o=useRef(null);useEffect(()=>{let u=r.realtime();o.current=u,u.on("connect",()=>n(true)),u.on("disconnect",()=>n(false));let p=u.channel(t,{type:"presence"});return g.current=p,p.presence.onSync(h=>{let m=[];for(let f of Object.values(h))m.push(...f);s(m);}),p.subscribe().then(()=>{e.initialState&&p.presence.track({state:e.initialState});}),()=>{p.presence.untrack(),p.unsubscribe(),u.disconnect();}},[r,t]);let l=useCallback(u=>{g.current?.presence.track({state:u});},[]),i=useCallback(u=>{g.current?.presence.update(u);},[]),a=useCallback(()=>{g.current?.presence.untrack();},[]);return {presences:c,track:l,update:i,untrack:a,isConnected:d}}function Ce(t){let e=y(),[r,c]=useState(null),[s,d]=useState(false),n=useRef(null),g=useRef(null),o=useRef(new Map);useEffect(()=>{let a=e.realtime();g.current=a,a.on("connect",()=>d(true)),a.on("disconnect",()=>d(false));let u=a.channel(t);return n.current=u,u.subscribe(),()=>{u.unsubscribe(),a.disconnect();}},[e,t]);let l=useCallback((a,u)=>{n.current?.broadcast({event:a,payload:u});},[]),i=useCallback((a,u)=>(o.current.has(a)||(o.current.set(a,new Set),n.current?.on(a,p=>{c({event:a,payload:p}),o.current.get(a)?.forEach(h=>h(p));})),o.current.get(a).add(u),()=>{o.current.get(a)?.delete(u);}),[]);return {broadcast:l,lastMessage:r,subscribe:i,isConnected:s}}function Fe(t,e={}){let r=y(),[c,s]=useState(null),[d,n]=useState([]),[g,o]=useState(false),l=useRef(null),i=useRef(null),{enabled:a=true,type:u="public"}=e;useEffect(()=>{if(!a)return;let m=r.realtime();i.current=m;let f=m.channel(t,{type:u});return l.current=f,f.on("*",b=>{let T={event:"*",payload:b};s(T),n(U=>[...U,T]);}),f.subscribe().then(()=>{o(true);}),()=>{f.unsubscribe(),m.disconnect(),o(false);}},[r,t,a,u]);let p=useCallback((m,f)=>{l.current?.broadcast({event:m,payload:f});},[]),h=useCallback(()=>{l.current?.unsubscribe(),o(false);},[]);return {broadcast:p,lastMessage:c,messages:d,isJoined:g,leave:h}}function Le(){let t=y(),[e,r]=useState("disconnected"),c=useRef(null);useEffect(()=>{let n=t.realtime();return c.current=n,r(n.connectionState),n.on("connect",()=>r("connected")),n.on("disconnect",()=>r("disconnected")),n.on("reconnect",()=>r("reconnecting")),()=>{n.disconnect();}},[t]);let s=useCallback(()=>{c.current?.connect();},[]),d=useCallback(()=>{c.current?.disconnect();},[]);return {connectionState:e,isConnected:e==="connected",reconnect:s,disconnect:d}}function Ve(t){let e=y(),[r,c]=useState(0),[s,d]=useState(false),[n,g]=useState(null),[o,l]=useState(null),i=useCallback(async(p,h,m={})=>{d(true),c(0),g(null),l(null);try{let f=await e.storage.upload(h,p,{bucket:m.bucket||t,contentType:m.contentType,metadata:m.metadata,isPublic:m.isPublic});return l(f),c(100),f}catch(f){return g(f),null}finally{d(false);}},[e,t]),a=useCallback(async(p,h,m={})=>{d(true),c(0),g(null),l(null);try{let b=await(await fetch(p)).blob(),T=m.contentType||b.type||Pt(p),U=await e.storage.upload(h,b,{bucket:m.bucket||t,contentType:T,metadata:m.metadata,isPublic:m.isPublic});return l(U),c(100),U}catch(f){return g(f),null}finally{d(false);}},[e,t]),u=useCallback(()=>{c(0),g(null),l(null);},[]);return {upload:i,uploadUri:a,progress:r,isUploading:s,isError:!!n,error:n,result:o,reset:u}}function Be(t){let e=y(),[r,c]=useState(false),[s,d]=useState(null),[n,g]=useState(0);return {download:useCallback(async l=>{c(true),g(0),d(null);try{let i=await e.storage.download(l,{bucket:t});return g(100),i}catch(i){return d(i),null}finally{c(false);}},[e,t]),isDownloading:r,isError:!!s,error:s,progress:n}}function Qe(t,e){let r=y(),[c,s]=useState(null),[d,n]=useState(false),[g,o]=useState(null),l=useCallback(async()=>{if(t){n(true),o(null);try{let a=await r.storage.getMetadata(t,{bucket:e?.bucket});s(a);}catch(a){o(a);}finally{n(false);}}},[r,t,e?.bucket]),i=useCallback(async()=>{if(!t)return false;try{return await r.storage.delete(t,{bucket:e?.bucket}),s(null),!0}catch(a){return o(a),false}},[r,t,e?.bucket]);return useEffect(()=>{t&&l();},[t,l]),{file:c,isLoading:d,isError:!!g,error:g,refetch:l,remove:i}}function Ne(t={}){let e=y(),[r,c]=useState([]),[s,d]=useState(false),[n,g]=useState(null),o=useCallback(async()=>{d(true),g(null);try{let l=await e.storage.list({bucket:t.bucket,prefix:t.prefix,limit:t.limit});c(l.files??[]);}catch(l){g(l);}finally{d(false);}},[e,t.bucket,t.prefix,t.limit]);return useEffect(()=>{o();},[o]),{files:r,isLoading:s,isError:!!n,error:n,refetch:o}}function qe(t,e){let r=y();if(!t)return null;try{return r.storage.getPublicUrl(t,{bucket:e?.bucket})}catch{return null}}function Pt(t){let e=t.split(".").pop()?.toLowerCase();return {jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",mp4:"video/mp4",mov:"video/quicktime",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",json:"application/json",txt:"text/plain"}[e||""]||"application/octet-stream"}function ne(t,e={}){let r=y(),[c,s]=useState(null),[d,n]=useState(false),[g,o]=useState(null),[l,i]=useState(false),[a,u]=useState(null),p=useCallback(async m=>{n(true),o(null),i(false);try{let f=await r.functions.invoke(t,{body:m},{retry:e.retry,timeout:e.timeout});return s(f.data),u({status:f.status,durationMs:f.durationMs,requestId:f.requestId,logs:f.logs}),i(!0),f.data}catch(f){return o(f),null}finally{n(false);}},[r,t,e.retry,e.timeout]),h=useCallback(()=>{s(null),o(null),i(false),u(null);},[]);return {invoke:p,data:c,isLoading:d,isError:!!g,isSuccess:l,error:g,reset:h,meta:a}}function He(t,e={}){let r=ne(t,e);return {...r,call:r.invoke}}function Je(t,e,r={}){let c=ne(t,r),{enabled:s=true,refetchInterval:d}=r,n=useCallback(async()=>{await c.invoke(e);},[c.invoke,e]);return useEffect(()=>{s&&c.invoke(e);},[s]),useEffect(()=>{if(!d||!s)return;let g=setInterval(()=>{c.invoke(e);},d);return ()=>clearInterval(g)},[d,s]),{...c,refetch:n}}function je(t,e={}){let r=y(),[c,s]=useState([]),[d,n]=useState(false),[g,o]=useState(null),{enabled:l=true,envId:i}=e,a=useCallback(async()=>{if(!(!l||!t)){n(true),o(null);try{let u=await r.functions.list({projectId:t,envId:i});s(u);}catch(u){o(u);}finally{n(false);}}},[r,t,i,l]);return useEffect(()=>{a();},[a]),{functions:c,isLoading:d,isError:!!g,error:g,refetch:a}}function _e(){let t=y(),[e,r]=useState([]),[c,s]=useState(false),[d,n]=useState([]);return {invoke:useCallback(async(o,l=[])=>{s(true),n([]);let i=await Promise.all(o.map(async(p,h)=>{try{return {data:(await t.functions.invoke(p,{body:l[h]})).data,error:null}}catch(m){return {data:null,error:m}}})),a=i.map(p=>p.data),u=i.map(p=>p.error);return r(a),n(u),s(false),a},[t]),results:e,isLoading:c,errors:d}}function We(t){let e=y(),[r,c]=useState(false),[s,d]=useState(null),[n,g]=useState(null),[o,l]=useState(null),i=useCallback(async(u,p)=>{l(null);try{let m=(await e.functions.invoke(t,{body:u})).requestId??`scheduled-${Date.now()}`;return g(m),c(!0),d(new Date(Date.now()+p.delayMs)),m}catch(h){let m=h instanceof Error?h:new Error("Failed to schedule function");throw l(m),m}},[e,t]),a=useCallback(async()=>{c(false),d(null),g(null);},[]);return {schedule:i,cancel:a,isScheduled:r,scheduledAt:s,requestId:n,error:o}}function Ge(t,e={}){let r=y(),[c,s]=useState(null),[d,n]=useState(e.enabled!==false),[g,o]=useState(null),l=e.enabled!==false&&!!t,i=useCallback(async()=>{if(l){n(true),o(null);try{let a=await r.admin.getProject(t);s(a.metrics),e.onSuccess?.(a.metrics);}catch(a){let u=a instanceof Error?a:new Error("Failed to fetch metrics");o(u),e.onError?.(u);}finally{n(false);}}},[r,t,l,e]);return useEffect(()=>{i();},[i]),useEffect(()=>{if(!e.refetchInterval||e.refetchInterval<=0||!l)return;let a=setInterval(i,e.refetchInterval);return ()=>clearInterval(a)},[e.refetchInterval,l,i]),{metrics:c,isLoading:d,error:g,refetch:i}}function Xe(t,e={}){let r=y(),[c,s]=useState([]),[d,n]=useState(0),[g,o]=useState(e.enabled!==false),[l,i]=useState(null),[a,u]=useState(e.offset??0),p=e.limit??50,h=e.enabled!==false&&!!t,m=useCallback(async(b=false)=>{if(!h)return;o(true),i(null);let T=b?0:a;b&&u(0);try{let U=await r.security.getAuditLogs(t,{limit:p,offset:T});s(b?U.logs:v=>[...v,...U.logs]),n(U.total),e.onSuccess?.(U.logs,U.total);}catch(U){let v=U instanceof Error?U:new Error("Failed to fetch audit logs");i(v),e.onError?.(v);}finally{o(false);}},[r,t,h,p,a,e]);useEffect(()=>{m(true);},[t,p,h]),useEffect(()=>{if(!e.refetchInterval||e.refetchInterval<=0||!h)return;let b=setInterval(()=>m(true),e.refetchInterval);return ()=>clearInterval(b)},[e.refetchInterval,h,m]);let f=useCallback(()=>{c.length<d&&!g&&(u(c.length),m(false));},[c.length,d,g,m]);return {logs:c,total:d,isLoading:g,error:l,refetch:()=>m(true),loadMore:f,hasMore:c.length<d}}function Ye(t={}){let e=y(),[r,c]=useState([]),[s,d]=useState(t.enabled!==false),[n,g]=useState(null),o=t.enabled!==false,l=t.status??"open",i=useCallback(async()=>{if(o){d(true),g(null);try{let h=await e.admin.listIncidents(l);c(h),t.onSuccess?.(h);}catch(h){let m=h instanceof Error?h:new Error("Failed to fetch incidents");g(m),t.onError?.(m);}finally{d(false);}}},[e,o,l,t]);useEffect(()=>{i();},[i]),useEffect(()=>{if(!t.refetchInterval||t.refetchInterval<=0||!o)return;let h=setInterval(i,t.refetchInterval);return ()=>clearInterval(h)},[t.refetchInterval,o,i]);let a=useCallback(async h=>{await e.admin.acknowledgeIncident(h),c(m=>m.map(f=>f.id===h?{...f,status:"acknowledged"}:f));},[e]),u=useCallback(async h=>{await e.admin.resolveIncident(h),c(l==="open"?m=>m.filter(f=>f.id!==h):m=>m.map(f=>f.id===h?{...f,status:"resolved"}:f));},[e,l]),p=r.reduce((h,m)=>{let f=m.severity||"unknown";return h[f]=(h[f]||0)+1,h},{});return {incidents:r,isLoading:s,error:n,refetch:i,acknowledge:a,resolve:u,countBySeverity:p}}function Ze(t={}){let e=y(),[r,c]=useState([]),[s,d]=useState(t.enabled!==false),[n,g]=useState(null),o=useRef([]),l=t.enabled!==false,i=useCallback(async()=>{if(l){d(true),g(null);try{let p=await e.admin.getHealthComponents();c(p.components),o.current.length>0&&p.components.some(m=>{let f=o.current.find(b=>b.id===m.id);return f&&f.status!==m.status})&&t.onStatusChange?.(p.components),o.current=p.components;}catch(p){let h=p instanceof Error?p:new Error("Failed to fetch health status");g(h),t.onError?.(h);}finally{d(false);}}},[e,l,t]);useEffect(()=>{i();},[i]),useEffect(()=>{if(!t.refetchInterval||t.refetchInterval<=0||!l)return;let p=setInterval(i,t.refetchInterval);return ()=>clearInterval(p)},[t.refetchInterval,l,i]);let a=r.reduce((p,h)=>{let m=["operational","degraded","partial_outage","major_outage"],f=m.indexOf(h.status),b=m.indexOf(p);return f>b?h.status:p},"operational"),u=useCallback(p=>r.find(m=>m.name===p)?.status==="operational",[r]);return {components:r,overallStatus:a,isLoading:s,error:n,refetch:i,isHealthy:u}}function Ke(t,e={}){let r=y(),[c,s]=useState(null),[d,n]=useState([]),[g,o]=useState(e.enabled!==false),[l,i]=useState(null),a=e.enabled!==false&&!!t,u=e.includeEvents??false,p=e.eventsLimit??50,h=useCallback(async()=>{if(a){o(true),i(null);try{let m=await r.realtimeMonitoring.getStats(t);s(m);let f=[];u&&(f=await r.realtimeMonitoring.getEvents(t,{limit:p}),n(f)),e.onSuccess?.(m,f);}catch(m){let f=m instanceof Error?m:new Error("Failed to fetch realtime stats");i(f),e.onError?.(f);}finally{o(false);}}},[r,t,a,u,p,e]);return useEffect(()=>{h();},[h]),useEffect(()=>{if(!e.refetchInterval||e.refetchInterval<=0||!a)return;let m=setInterval(h,e.refetchInterval);return ()=>clearInterval(m)},[e.refetchInterval,a,h]),{stats:c,events:d,isLoading:g,error:l,refetch:h}}function et(t,e={}){let r=y(),[c,s]=useState(0),[d,n]=useState(0),[g,o]=useState(0),[l,i]=useState(e.enabled!==false),[a,u]=useState(null),p=useRef(AppState.currentState),h=e.enabled!==false&&!!t,m=e.errorRateThreshold??.05,f=e.refetchOnForeground??false,b=useCallback(async()=>{if(h){i(true),u(null);try{let E=(await r.admin.getProject(t)).metrics;s(E.requestsLast24h),n(E.errorsLast24h),o(E.avgLatencyMs);let P=E.requestsLast24h>0?E.errorsLast24h/E.requestsLast24h:0;P>m&&e.onHighErrorRate?.(P);}catch(v){let E=v instanceof Error?v:new Error("Failed to fetch error stats");u(E);}finally{i(false);}}},[r,t,h,m,e]);useEffect(()=>{b();},[b]),useEffect(()=>{if(!e.refetchInterval||e.refetchInterval<=0||!h)return;let v=setInterval(b,e.refetchInterval);return ()=>clearInterval(v)},[e.refetchInterval,h,b]),useEffect(()=>{if(!f||!h)return;let v=P=>{p.current.match(/inactive|background/)&&P==="active"&&b(),p.current=P;},E=AppState.addEventListener("change",v);return ()=>E?.remove()},[f,h,b]);let T=c>0?d/c:0,U=T>m;return {requestCount:c,errorCount:d,errorRate:T,avgLatencyMs:g,isHighErrorRate:U,isLoading:l,error:a,refetch:b}}var rt=new Map;function It(t,e,r){return `mongo:${t}:${e}:${JSON.stringify(r||{})}`}function nt(t){let e=y();return useMemo(()=>e.mongodb.collection(t),[e,t])}function st(t,e){let r=y(),[c,s]=useState([]),[d,n]=useState(null),[g,o]=useState(e?.enabled===false?"idle":"loading"),[l,i]=useState(false),[a,u]=useState(true),p=useRef(0),h=useRef(AppState.currentState),m=e?.enabled!==false,f=e?.staleTime??0,b=e?.keepPreviousData??false,T=useCallback(async()=>{if(!m)return;let U={sort:e?.sort,projection:e?.projection,skip:e?.skip,limit:e?.limit},v=It(t,"find",{filter:e?.filter,options:U}),E=rt.get(v);if(E&&Date.now()-E.timestamp<f){s(E.data),o("success"),u(false);return}i(true),b||o("loading"),n(null);try{let D=await r.mongodb.collection(t).find(e?.filter,U);s(D),o("success"),u(!1),p.current=Date.now(),rt.set(v,{data:D,timestamp:Date.now()}),e?.onSuccess?.(D);}catch(P){let D=P instanceof Error?P:new Error("MongoDB find failed");n(D),o("error"),e?.onError?.(D);}finally{i(false);}},[r,t,e,m,f,b]);return useEffect(()=>{T();},[T]),useEffect(()=>{if(!e?.refetchOnForeground||!m)return;let U=E=>{h.current.match(/inactive|background/)&&E==="active"&&Date.now()-p.current>f&&(u(true),T()),h.current=E;},v=AppState.addEventListener("change",U);return ()=>v.remove()},[e?.refetchOnForeground,m,f,T]),useEffect(()=>{if(!e?.refetchInterval||e.refetchInterval<=0||!m)return;let U=setInterval(()=>{u(true),T();},e.refetchInterval);return ()=>clearInterval(U)},[e?.refetchInterval,m,T]),{data:c,isLoading:g==="loading",isFetching:l,error:d,status:g,refetch:T,isStale:a,isEnabled:m}}function ot(t,e){let r=y(),[c,s]=useState(null),[d,n]=useState(null),[g,o]=useState(e?.enabled!==false),[l,i]=useState(false),a=e?.enabled!==false,u=useCallback(async()=>{if(a){o(true),n(null),i(false);try{let h=await r.mongodb.collection(t).findOne(e?.filter);h===null?(i(!0),s(null)):s(h),e?.onSuccess?.(h);}catch(p){let h=p instanceof Error?p:new Error("MongoDB findOne failed");n(h),e?.onError?.(h);}finally{o(false);}}},[r,t,e,a]);return useEffect(()=>{u();},[u]),{data:c,isLoading:g,error:d,isNotFound:l,refetch:u}}function at(t,e,r){let c=y(),[s,d]=useState([]),[n,g]=useState(null),[o,l]=useState(r?.enabled!==false),i=r?.enabled!==false,a=useCallback(async()=>{if(i){l(true),g(null);try{let u=c.mongodb.collection(t),p={allowDiskUse:r?.allowDiskUse,maxTimeMS:r?.maxTimeMS},h=await u.aggregate(e,p);d(h),r?.onSuccess?.(h);}catch(u){let p=u instanceof Error?u:new Error("MongoDB aggregate failed");g(p),r?.onError?.(p);}finally{l(false);}}},[c,t,e,r,i]);return useEffect(()=>{a();},[a]),{data:s,isLoading:o,error:n,refetch:a}}function it(t,e){let r=y(),[c,s]=useState(false),[d,n]=useState(null),[g,o]=useState(false),[l,i]=useState(null),a=useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).insertOne(h.document);return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB insertOne failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function ut(t,e){let r=y(),[c,s]=useState(false),[d,n]=useState(null),[g,o]=useState(false),[l,i]=useState(null),a=useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).insertMany(h.documents);return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB insertMany failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function lt(t,e){let r=y(),[c,s]=useState(false),[d,n]=useState(null),[g,o]=useState(false),[l,i]=useState(null),a=useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).updateOne(h.filter,h.update,{upsert:h.upsert});return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB updateOne failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function ct(t,e){let r=y(),[c,s]=useState(false),[d,n]=useState(null),[g,o]=useState(false),[l,i]=useState(null),a=useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).updateMany(h.filter,h.update,{upsert:h.upsert});return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB updateMany failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function dt(t,e){let r=y(),[c,s]=useState(false),[d,n]=useState(null),[g,o]=useState(false),[l,i]=useState(null),a=useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).deleteOne(h.filter);return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB deleteOne failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function ft(t,e){let r=y(),[c,s]=useState(false),[d,n]=useState(null),[g,o]=useState(false),[l,i]=useState(null),a=useCallback(async h=>{s(true),n(null),o(false);try{let f=await r.mongodb.collection(t).deleteMany(h.filter);return i(f),o(!0),e?.onSuccess?.(f),f}catch(m){let f=m instanceof Error?m:new Error("MongoDB deleteMany failed");throw n(f),e?.onError?.(f),f}finally{s(false);}},[r,t,e]),u=useCallback(h=>(a(h).catch(()=>{}),Promise.resolve(l)),[a,l]),p=useCallback(()=>{s(false),n(null),o(false),i(null);},[]);return {mutate:u,mutateAsync:a,isLoading:c,error:d,isSuccess:g,data:l,reset:p}}function gt(t,e){let r=y(),[c,s]=useState([]),[d,n]=useState(true),[g,o]=useState(true),[l,i]=useState(false),[a,u]=useState(null),p=useRef(0),h=e?.pageSize??20,m=useCallback(async()=>{if(!d)return;c.length===0?o(true):i(true),u(null);try{let v=r.mongodb.collection(t),E={sort:e?.sort,projection:e?.projection,skip:p.current,limit:h},P=await v.find(e?.filter,E);s(re=>[...re,P]),p.current+=P.length;let D=P.length===h;n(D),e?.onSuccess?.(P,D);}catch(v){let E=v instanceof Error?v:new Error("MongoDB find failed");u(E),e?.onError?.(E);}finally{o(false),i(false);}},[r,t,e,d,c.length,h]);useEffect(()=>{m();},[]);let f=useCallback(async()=>{s([]),p.current=0,n(true),o(true);try{let U=r.mongodb.collection(t),v={sort:e?.sort,projection:e?.projection,skip:0,limit:h},E=await U.find(e?.filter,v);s([E]),p.current=E.length,n(E.length===h);}catch(U){u(U instanceof Error?U:new Error("MongoDB find failed"));}finally{o(false);}},[r,t,e,h]),b=useCallback(()=>{s([]),p.current=0,n(true),o(true),u(null);},[]);return {data:c.flat(),pages:c,hasMore:d,isLoading:g,isFetchingNextPage:l,error:a,fetchNextPage:m,refetch:f,reset:b}}function pt(t,e){let r=y(),[c,s]=useState(0),[d,n]=useState(e?.enabled!==false),[g,o]=useState(null),l=e?.enabled!==false,i=useCallback(async()=>{if(l){n(true),o(null);try{let u=await r.mongodb.collection(t).countDocuments(e?.filter);s(u);}catch(a){o(a instanceof Error?a:new Error("MongoDB count failed"));}finally{n(false);}}},[r,t,e?.filter,l]);return useEffect(()=>{i();},[i]),{count:c,isLoading:d,error:g,refetch:i}}function mt(t,e,r){let c=y(),[s,d]=useState([]),[n,g]=useState(r?.enabled!==false),[o,l]=useState(null),i=r?.enabled!==false,a=useCallback(async()=>{if(i){g(true),l(null);try{let p=await c.mongodb.collection(t).distinct(e,{filter:r?.filter});d(p);}catch(u){l(u instanceof Error?u:new Error("MongoDB distinct failed"));}finally{g(false);}}},[c,t,e,r?.filter,i]);return useEffect(()=>{a();},[a]),{values:s,isLoading:n,error:o,refetch:a}}function Ut(t){let e=y(),[r,c]=useState(AppState.currentState),[s,d]=useState(null),n=useRef(null),g=t?.reconnectOnForeground!==false,o=t?.refreshSessionOnForeground!==false;return useEffect(()=>{let l=AppState.addEventListener("change",i=>{let a=r;if((i==="background"||i==="inactive")&&a==="active"&&(n.current=Date.now(),t?.onBackground?.()),i==="active"&&(a==="background"||a==="inactive")){let u=n.current?Date.now()-n.current:null;if(d(u),n.current=null,t?.onForeground?.(),g)try{let p=e.realtime();p.connectionState!=="connected"&&p.connect();}catch{}o&&e.auth.getUser().catch(()=>{});}c(i);});return ()=>{l.remove();}},[e,r,g,o,t]),{appState:r,isActive:r==="active",isBackground:r==="background",backgroundDuration:s}}function Tt(){let[t,e]=useState(true),r=useCallback(async()=>{try{let c=new AbortController,s=setTimeout(()=>c.abort(),5e3);return await fetch("https://clients3.google.com/generate_204",{method:"HEAD",signal:c.signal}),clearTimeout(s),e(!0),!0}catch{return e(false),false}},[]);return useEffect(()=>{r();},[r]),{isConnected:t,checkConnection:r}}function Rt(){let t=y(),[e,r]=useState(false),[c,s]=useState(null);return {handleDeepLink:useCallback(async n=>{let g=new URL(n),o=new URLSearchParams(g.search),l=new URLSearchParams(g.hash.replace("#","")),i=o.get("access_token")||l.get("access_token"),a=o.get("refresh_token")||l.get("refresh_token"),u=o.get("error")||l.get("error"),p=o.get("error_description")||l.get("error_description");if(u){s(new Error(p||u));return}if(i){r(true),s(null);try{await t.auth.setSession(i,a||void 0);}catch(h){s(h instanceof Error?h:new Error("Failed to process OAuth callback"));}finally{r(false);}}},[t]),isProcessing:e,error:c}}
|
|
2
|
+
export{ue as VaifProvider,Ut as useAppState,Xe as useAuditLogs,le as useAuth,xe as useBatchCreate,Pe as useBatchDelete,_e as useBatchInvoke,Oe as useBatchUpdate,Ce as useBroadcast,Fe as useChannel,Me as useCount,Ee as useCreate,Rt as useDeepLinkAuth,we as useDelete,Be as useDownload,ge as useEmailVerification,et as useErrorTracking,Qe as useFile,Ne as useFiles,ne as useFunction,je as useFunctionList,Je as useFunctionQuery,Ye as useIncidents,Re as useInfiniteQuery,he as useMFA,pe as useMagicLink,Ge as useMetrics,at as useMongoAggregate,nt as useMongoCollection,pt as useMongoCount,ft as useMongoDeleteMany,dt as useMongoDeleteOne,mt as useMongoDistinct,st as useMongoFind,ot as useMongoFindOne,gt as useMongoInfiniteFind,ut as useMongoInsertMany,it as useMongoInsertOne,ct as useMongoUpdateMany,lt as useMongoUpdateOne,Tt as useNetworkState,me as useOAuth,ke as useOptimisticMutation,Ue as usePaginatedQuery,fe as usePasswordReset,Ae as usePresence,qe as usePublicUrl,ye as useQuery,be as useQueryById,Te as useQueryFirst,Le as useRealtimeConnection,Ke as useRealtimeStats,He as useRpc,We as useScheduledFunction,Ie as useSubscription,Ze as useSystemHealth,de as useToken,ve as useUpdate,Ve as useUpload,Se as useUpsert,ce as useUser,G as useVaif,y as useVaifClient};
|