@vaiftech/react 1.0.0 → 1.0.1
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/README.md +14 -14
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @vaiftech/react
|
|
2
2
|
|
|
3
3
|
React hooks for VAIF Studio - a Backend-as-a-Service platform.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install @
|
|
8
|
+
npm install @vaiftech/react @vaiftech/client
|
|
9
9
|
# or
|
|
10
|
-
pnpm add @
|
|
10
|
+
pnpm add @vaiftech/react @vaiftech/client
|
|
11
11
|
# or
|
|
12
|
-
yarn add @
|
|
12
|
+
yarn add @vaiftech/react @vaiftech/client
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## Quick Start
|
|
16
16
|
|
|
17
17
|
```tsx
|
|
18
|
-
import { VaifProvider } from '@
|
|
19
|
-
import { createVaifClient } from '@
|
|
18
|
+
import { VaifProvider } from '@vaiftech/react';
|
|
19
|
+
import { createVaifClient } from '@vaiftech/client';
|
|
20
20
|
|
|
21
21
|
const client = createVaifClient({
|
|
22
22
|
baseUrl: 'https://api.myproject.vaif.io',
|
|
@@ -37,7 +37,7 @@ function App() {
|
|
|
37
37
|
### Authentication
|
|
38
38
|
|
|
39
39
|
```tsx
|
|
40
|
-
import { useAuth, useUser, useSession } from '@
|
|
40
|
+
import { useAuth, useUser, useSession } from '@vaiftech/react';
|
|
41
41
|
|
|
42
42
|
function AuthComponent() {
|
|
43
43
|
const { user, isLoading, signIn, signUp, signOut } = useAuth();
|
|
@@ -76,7 +76,7 @@ function SessionInfo() {
|
|
|
76
76
|
### Data Fetching
|
|
77
77
|
|
|
78
78
|
```tsx
|
|
79
|
-
import { useQuery, useMutation } from '@
|
|
79
|
+
import { useQuery, useMutation } from '@vaiftech/react';
|
|
80
80
|
|
|
81
81
|
interface Post {
|
|
82
82
|
id: string;
|
|
@@ -122,7 +122,7 @@ function CreatePost() {
|
|
|
122
122
|
### Realtime
|
|
123
123
|
|
|
124
124
|
```tsx
|
|
125
|
-
import { useRealtime, useRealtimeQuery } from '@
|
|
125
|
+
import { useRealtime, useRealtimeQuery } from '@vaiftech/react';
|
|
126
126
|
|
|
127
127
|
// Subscribe to changes
|
|
128
128
|
function MessageListener() {
|
|
@@ -156,7 +156,7 @@ function LiveMessages() {
|
|
|
156
156
|
### Storage
|
|
157
157
|
|
|
158
158
|
```tsx
|
|
159
|
-
import { useUpload, useDownload, useFile, usePublicUrl } from '@
|
|
159
|
+
import { useUpload, useDownload, useFile, usePublicUrl } from '@vaiftech/react';
|
|
160
160
|
|
|
161
161
|
function FileUpload() {
|
|
162
162
|
const { upload, progress, isUploading, error } = useUpload();
|
|
@@ -184,7 +184,7 @@ function FileDisplay({ path }: { path: string }) {
|
|
|
184
184
|
### Edge Functions
|
|
185
185
|
|
|
186
186
|
```tsx
|
|
187
|
-
import { useFunction } from '@
|
|
187
|
+
import { useFunction } from '@vaiftech/react';
|
|
188
188
|
|
|
189
189
|
function SendEmail() {
|
|
190
190
|
const { invoke, isInvoking, error, result } = useFunction('send-email');
|
|
@@ -221,9 +221,9 @@ const { data } = useQuery<User>('users');
|
|
|
221
221
|
|
|
222
222
|
## Related Packages
|
|
223
223
|
|
|
224
|
-
- [@
|
|
225
|
-
- [@
|
|
226
|
-
- [@
|
|
224
|
+
- [@vaiftech/client](https://www.npmjs.com/package/@vaiftech/client) - Core client SDK
|
|
225
|
+
- [@vaiftech/sdk-expo](https://www.npmjs.com/package/@vaiftech/sdk-expo) - React Native/Expo SDK
|
|
226
|
+
- [@vaiftech/cli](https://www.npmjs.com/package/@vaiftech/cli) - CLI tools
|
|
227
227
|
|
|
228
228
|
## License
|
|
229
229
|
|
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
-
import { VaifClientConfig, User, VaifClient, AuthResponse, OAuthProviderType, MFAMethod, MFASetupResponse, QueryOptions, PaginatedResult, WhereFilter, DbOperation, DbChangeEvent, PresenceState, PresenceEntry, ConnectionState, UploadOptions, UploadResult, FileMetadata, InvokeResult, VaifFunction } from '@
|
|
4
|
-
export { AuthResponse, ConnectionState, DbChangeEvent, DbOperation, FileMetadata, InvokeResult, OrderByClause, PresenceState, QueryOptions, UploadResult, User, VaifClient, VaifClientConfig, VaifFunction, WhereFilter } from '@
|
|
3
|
+
import { VaifClientConfig, User, VaifClient, AuthResponse, OAuthProviderType, MFAMethod, MFASetupResponse, QueryOptions, PaginatedResult, WhereFilter, DbOperation, DbChangeEvent, PresenceState, PresenceEntry, ConnectionState, UploadOptions, UploadResult, FileMetadata, InvokeResult, VaifFunction } from '@vaiftech/client';
|
|
4
|
+
export { AuthResponse, ConnectionState, DbChangeEvent, DbOperation, FileMetadata, InvokeResult, OrderByClause, PresenceState, QueryOptions, UploadResult, User, VaifClient, VaifClientConfig, VaifFunction, WhereFilter } from '@vaiftech/client';
|
|
5
|
+
export { AuthChangeEvent, AuthClientConfig, AuthEventType, AuthProvider, AuthProviderProps, Session as AuthSession, AuthSubscription, MFAFactor, VaifAuthClient, createAuthClient, useAuthClient, useIdentities, useIsAuthenticated, usePassword, useSession, useSessions, useAuth as useStandaloneAuth, useMFA as useStandaloneMFA, useUser as useStandaloneUser } from '@vaiftech/auth/react';
|
|
5
6
|
|
|
6
7
|
interface VaifContextValue {
|
|
7
8
|
/** The VAIF client instance */
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
-
import { VaifClientConfig, User, VaifClient, AuthResponse, OAuthProviderType, MFAMethod, MFASetupResponse, QueryOptions, PaginatedResult, WhereFilter, DbOperation, DbChangeEvent, PresenceState, PresenceEntry, ConnectionState, UploadOptions, UploadResult, FileMetadata, InvokeResult, VaifFunction } from '@
|
|
4
|
-
export { AuthResponse, ConnectionState, DbChangeEvent, DbOperation, FileMetadata, InvokeResult, OrderByClause, PresenceState, QueryOptions, UploadResult, User, VaifClient, VaifClientConfig, VaifFunction, WhereFilter } from '@
|
|
3
|
+
import { VaifClientConfig, User, VaifClient, AuthResponse, OAuthProviderType, MFAMethod, MFASetupResponse, QueryOptions, PaginatedResult, WhereFilter, DbOperation, DbChangeEvent, PresenceState, PresenceEntry, ConnectionState, UploadOptions, UploadResult, FileMetadata, InvokeResult, VaifFunction } from '@vaiftech/client';
|
|
4
|
+
export { AuthResponse, ConnectionState, DbChangeEvent, DbOperation, FileMetadata, InvokeResult, OrderByClause, PresenceState, QueryOptions, UploadResult, User, VaifClient, VaifClientConfig, VaifFunction, WhereFilter } from '@vaiftech/client';
|
|
5
|
+
export { AuthChangeEvent, AuthClientConfig, AuthEventType, AuthProvider, AuthProviderProps, Session as AuthSession, AuthSubscription, MFAFactor, VaifAuthClient, createAuthClient, useAuthClient, useIdentities, useIsAuthenticated, usePassword, useSession, useSessions, useAuth as useStandaloneAuth, useMFA as useStandaloneMFA, useUser as useStandaloneUser } from '@vaiftech/auth/react';
|
|
5
6
|
|
|
6
7
|
interface VaifContextValue {
|
|
7
8
|
/** The VAIF client instance */
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime');var z=class de extends Error{constructor(t,e){super(t),this.name="VaifError",this.code=e.code,this.statusCode=e.statusCode,this.requestId=e.requestId,this.details=e.details;let n=Error;n.captureStackTrace&&n.captureStackTrace(this,de);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,requestId:this.requestId,details:this.details}}},ae=class extends z{constructor(s,t){super(s,{code:t?.code??"AUTH_ERROR",statusCode:t?.statusCode??401,requestId:t?.requestId}),this.name="VaifAuthError";}},tt=class extends z{constructor(s,t){super(s,{code:"VALIDATION_ERROR",statusCode:400,requestId:t?.requestId,details:t?.details??t?.fieldErrors}),this.name="VaifValidationError",this.fieldErrors=t?.fieldErrors;}},ee=class extends z{constructor(s,t){super(s,{code:"NETWORK_ERROR"}),this.name="VaifNetworkError",this.cause=t;}},nt=class extends z{constructor(s,t){super(s,{code:"RATE_LIMITED",statusCode:429}),this.name="VaifRateLimitError",this.retryAfter=t;}},rt=class extends z{constructor(s,t){super(s,{code:"NOT_FOUND",statusCode:404,requestId:t}),this.name="VaifNotFoundError";}};async function st(s){let t;try{t=await s.json();}catch{}let e=t?.message??t?.error??s.statusText??"Request failed",n=t?.requestId;switch(s.status){case 400:return new tt(e,{details:t?.details,requestId:n});case 401:return new ae(e,{code:"UNAUTHORIZED",statusCode:401,requestId:n});case 403:return new ae(e,{code:"FORBIDDEN",statusCode:403,requestId:n});case 404:return new rt(e,n);case 429:{let r=s.headers.get("Retry-After"),a=r?parseInt(r,10):void 0;return new nt(e,a)}default:return new z(e,{code:t?.error??"HTTP_ERROR",statusCode:s.status,requestId:n,details:t?.details})}}async function at(s,t){let{timeout:e=3e4,fetchFn:n,...r}=t,a=new AbortController,i=setTimeout(()=>a.abort(),e);try{let l=await n(s,{...r,signal:a.signal});if(clearTimeout(i),!l.ok)throw await st(l);if(l.status===204)return;let o=await l.text();return o?JSON.parse(o):void 0}catch(l){throw clearTimeout(i),l instanceof z?l:l instanceof Error&&l.name==="AbortError"?new ee("Request timed out"):l instanceof Error?new ee(l.message,l):new ee("Network request failed")}}function $(s){let{baseUrl:t,apiKey:e,apiKeyHeader:n,accessToken:r,fetch:a,timeout:i}=s;return async function(l,o={}){let c=`${t}${l}`,u={"Content-Type":"application/json",...o.headers??{}};if(e&&(u[n]=e),r){let f=typeof r=="function"?await r():r;u.Authorization=`Bearer ${f}`;}return at(c,{...o,headers:u,timeout:i,fetchFn:a})}}function D(s){let t=new URLSearchParams;for(let[n,r]of Object.entries(s))r!==void 0&&t.set(n,String(r));let e=t.toString();return e?`?${e}`:""}function ot(s){return JSON.stringify(s)}function oe(s,t,e={}){let n={...e},r=()=>{let o={};if(n.limit!==void 0&&(o.limit=n.limit),n.offset!==void 0&&(o.offset=n.offset),n.where&&(o.where=ot(n.where)),n.orderBy){let c=Array.isArray(n.orderBy)?n.orderBy:[n.orderBy];o.orderBy=JSON.stringify(c);}return n.select&&n.select.length>0&&(o.select=n.select.join(",")),n.include&&n.include.length>0&&(o.include=JSON.stringify(n.include)),n.distinct&&n.distinct.length>0&&(o.distinct=n.distinct.join(",")),o},a=()=>D(r()),i=o=>oe(s,t,{...n,...o}),l={async list(o){o&&(n={...n,...o});let c=a();return t(`/generated/${s}${c}`)},async get(o){let c={};n.select&&n.select.length>0&&(c.select=n.select.join(",")),n.include&&n.include.length>0&&(c.include=JSON.stringify(n.include));let u=D(c);return t(`/generated/${s}/${encodeURIComponent(o)}${u}`)},async first(){let o=await l.limit(1).list();return o.data.length>0?o.data[0]:null},async firstOrFail(){let o=await l.first();if(!o)throw new Error(`No record found in table '${s}' matching the query`);return o},async create(o){return t(`/generated/${s}`,{method:"POST",body:JSON.stringify(o)})},async update(o,c){return t(`/generated/${s}/${encodeURIComponent(o)}`,{method:"PATCH",body:JSON.stringify(c)})},async delete(o){return t(`/generated/${s}/${encodeURIComponent(o)}`,{method:"DELETE"})},async createMany(o,c){return t(`/generated/${s}/batch`,{method:"POST",body:JSON.stringify({records:o,skipOnConflict:c?.skipOnConflict,returnRecords:c?.returnRecords})})},async updateMany(o,c){return r(),t(`/generated/${s}/batch`,{method:"PATCH",body:JSON.stringify({data:o,where:n.where,returnRecords:c?.returnRecords})})},async deleteMany(){return t(`/generated/${s}/batch`,{method:"DELETE",body:JSON.stringify({where:n.where})})},async upsert(o,c){return t(`/generated/${s}/upsert`,{method:"POST",body:JSON.stringify({data:o,conflictFields:c.conflictFields,updateFields:c.updateFields})})},async count(){let o=r(),c=D(o);return (await t(`/generated/${s}/count${c}`)).count},async sum(o){let c=r(),u=D({...c,field:o});return (await t(`/generated/${s}/sum${u}`)).sum},async avg(o){let c=r(),u=D({...c,field:o});return (await t(`/generated/${s}/avg${u}`)).avg},async min(o){let c=r(),u=D({...c,field:o});return (await t(`/generated/${s}/min${u}`)).min},async max(o){let c=r(),u=D({...c,field:o});return (await t(`/generated/${s}/max${u}`)).max},async aggregate(o,c){return t(`/generated/${s}/aggregate`,{method:"POST",body:JSON.stringify({aggregates:o,where:c?.where||n.where,groupBy:c?.groupBy,having:c?.having})})},async paginate(o){let c=o.page||1,u=o.pageSize||20,f=(c-1)*u,p=r();p.limit=u,p.offset=f,p.includeCount=true;let d=D(p),g=await t(`/generated/${s}${d}`),m=g.total||g.data.length,T=Math.ceil(m/u);return {data:g.data,pageInfo:{total:m,page:c,pageSize:u,pageCount:T,hasNextPage:c<T,hasPrevPage:c>1}}},async cursorPaginate(o){let c=r();c.limit=o.limit||20,o.cursor&&(c.cursor=o.cursor);let u=D(c),f=await t(`/generated/${s}/cursor${u}`);return {data:f.data,nextCursor:f.nextCursor,prevCursor:f.prevCursor,hasMore:f.hasMore}},where(o){if(n.where){let c=n.where;return i({where:{AND:[...Array.isArray(c)?c:[c],o]}})}return i({where:o})},orderBy(o,c="asc"){let u={field:o,direction:c};if(n.orderBy){let f=Array.isArray(n.orderBy)?n.orderBy:[n.orderBy];return i({orderBy:[...f,u]})}return i({orderBy:u})},select(...o){return i({select:o})},limit(o){return i({limit:o})},offset(o){return i({offset:o})},include(o){let c=n.include||[];return i({include:[...c,o]})},distinct(...o){return i({distinct:o})}};return l}function it(s){let t=$(s);return {from(e){return oe(e,t)},async raw(e,n){return t("/generated/raw",{method:"POST",body:JSON.stringify({query:e,params:n})})},async transaction(e,n){return t("/generated/transaction",{method:"POST",body:JSON.stringify({operations:e,isolationLevel:n?.isolationLevel,timeout:n?.timeout})})},async withTransaction(e,n){let r=(await t("/generated/transaction/start",{method:"POST",body:JSON.stringify({isolationLevel:n?.isolationLevel,timeout:n?.timeout})})).transactionId,a=(l,o)=>{let c=new Headers(o?.headers);return c.set("X-Transaction-Id",r),t(l,{...o,headers:c})},i={from(l){return oe(l,a)},async raw(l,o){return a("/generated/raw",{method:"POST",body:JSON.stringify({query:l,params:o})})},async transaction(){throw new Error("Nested transactions are not supported")},async withTransaction(){throw new Error("Nested transactions are not supported")}};try{let l=await e(i);return await t("/generated/transaction/commit",{method:"POST",body:JSON.stringify({transactionId:r})}),l}catch(l){throw await t("/generated/transaction/rollback",{method:"POST",body:JSON.stringify({transactionId:r})}).catch(()=>{}),l}}}}function ct(s){let t=$(s);return {async signUp(e,n,r){return t("/auth/signup",{method:"POST",body:JSON.stringify({email:e,password:n,name:r?.name,phone:r?.phone,metadata:r?.metadata,redirectUrl:r?.redirectUrl})})},async login(e,n,r){return t("/auth/login",{method:"POST",body:JSON.stringify({email:e,password:n,mfaCode:r?.mfaCode,rememberMe:r?.rememberMe})})},async logout(){await t("/auth/logout",{method:"POST"});},async logoutAll(){await t("/auth/logout-all",{method:"POST"});},async getUser(){return (await t("/auth/me")).user},async updateProfile(e){return (await t("/users/me",{method:"PATCH",body:JSON.stringify(e)})).user},async changePassword(e){return t("/users/me/change-password",{method:"POST",body:JSON.stringify(e)})},async requestPasswordReset(e){return t("/auth/forgot-password",{method:"POST",body:JSON.stringify(e)})},async confirmPasswordReset(e){return t("/auth/reset-password",{method:"POST",body:JSON.stringify(e)})},async requestEmailVerification(e){return t("/auth/verify-email/send",{method:"POST",body:JSON.stringify(e||{})})},async confirmEmailVerification(e){return t("/auth/verify-email/confirm",{method:"POST",body:JSON.stringify(e)})},async getOAuthSignInUrl(e){return t("/auth/oauth/authorize",{method:"POST",body:JSON.stringify(e)})},async handleOAuthCallback(e){return t("/auth/oauth/callback",{method:"POST",body:JSON.stringify(e)})},async linkOAuthProvider(e){return t("/auth/oauth/link",{method:"POST",body:JSON.stringify(e)})},async unlinkOAuthProvider(e){return t(`/auth/oauth/unlink/${e}`,{method:"POST"})},async listLinkedProviders(){return t("/auth/oauth/providers")},async requestMagicLink(e){return t("/auth/magic-link/send",{method:"POST",body:JSON.stringify(e)})},async verifyMagicLink(e){return t("/auth/magic-link/verify",{method:"POST",body:JSON.stringify(e)})},async requestPhoneVerification(e){return t("/auth/phone/send",{method:"POST",body:JSON.stringify(e)})},async confirmPhoneVerification(e){return t("/auth/phone/verify",{method:"POST",body:JSON.stringify(e)})},async setupMFA(e){return t("/auth/mfa/setup",{method:"POST",body:JSON.stringify({method:e})})},async enableMFA(e){return t("/auth/mfa/enable",{method:"POST",body:JSON.stringify({code:e})})},async disableMFA(e){return t("/auth/mfa/disable",{method:"POST",body:JSON.stringify({code:e})})},async verifyMFA(e,n){return t("/auth/mfa/verify",{method:"POST",body:JSON.stringify({mfaToken:e,code:n})})},async regenerateBackupCodes(){return t("/auth/mfa/backup-codes",{method:"POST"})},async refreshToken(e){return t("/auth/refresh",{method:"POST",body:JSON.stringify({refreshToken:e})})},async listSessions(){return t("/auth/sessions")},async revokeSession(e){return t(`/auth/sessions/${e}`,{method:"DELETE"})},async revokeOtherSessions(){return t("/auth/sessions/revoke-others",{method:"POST"})}}}function ue(s){return new Promise(t=>setTimeout(t,s))}function lt(s){let t=$(s);async function e(n,r,a){let i=a?.retry||{},l=i.maxRetries??0,o=i.initialDelay??1e3,c=i.maxDelay??3e4,u=i.backoffMultiplier??2,f=i.retryOnStatus??[429,500,502,503,504],p=i.retryOnNetworkError??true,d=null,g=o;for(let m=0;m<=l;m++)try{let T={};a?.version!==void 0&&(T.version=a.version),a?.includeLogs&&(T.includeLogs=!0);let h=D(T),b=await t(`/functions/${n}/invoke${h}`,{method:"POST",body:JSON.stringify(r??{}),headers:a?.headers});if(f.includes(b.status)&&m<l){d=new Error(`Function returned status ${b.status}`),await ue(g),g=Math.min(g*u,c);continue}return b}catch(T){d=T;let h=T instanceof TypeError||T.message?.includes("network")||T.message?.includes("fetch");if(p&&h&&m<l){await ue(g),g=Math.min(g*u,c);continue}throw T}throw d||new Error("Function invocation failed after retries")}return {invoke:e,async invokeByName(n,r,a){let i={};a?.version!==void 0&&(i.version=a.version),a?.includeLogs&&(i.includeLogs=true);let l=D(i);return t(`/functions/name/${encodeURIComponent(n)}/invoke${l}`,{method:"POST",body:JSON.stringify(r??{}),headers:a?.headers})},async batchInvoke(n,r){let a=(await Promise.allSettled(n.map(i=>this.invoke(i.functionId,i.input,r)))).map((i,l)=>i.status==="fulfilled"?{functionId:n[l].functionId,success:true,result:i.value}:{functionId:n[l].functionId,success:false,error:i.reason?.message||"Unknown error"});return {results:a,successCount:a.filter(i=>i.success).length,errorCount:a.filter(i=>!i.success).length}},rpc(n,r){let a=this,i=async(l,o)=>{let c={...r,...o};return (await e(n,{body:l},c)).data};return Object.defineProperty(i,"id",{value:n,writable:false}),i.getInfo=()=>a.get(n),i.getInvocations=l=>a.getInvocations({...l,functionId:n}),i},async list(n){let r={envId:n.envId,enabled:n.enabled,limit:n.limit,offset:n.offset},a=D(r);return t(`/functions/project/${n.projectId}${a}`)},async get(n){return t(`/functions/${n}`)},async getByName(n,r){return t(`/functions/project/${r}/name/${encodeURIComponent(n)}`)},async create(n){return t("/functions",{method:"POST",body:JSON.stringify(n)})},async update(n,r){return t(`/functions/${n}`,{method:"PATCH",body:JSON.stringify(r)})},async delete(n){return t(`/functions/${n}`,{method:"DELETE"})},async enable(n){return this.update(n,{enabled:true})},async disable(n){return this.update(n,{enabled:false})},async deploy(n,r,a){return t(`/functions/${n}/deploy`,{method:"POST",body:JSON.stringify({sourceCode:r,createVersion:a?.createVersion,versionDescription:a?.versionDescription,envVars:a?.envVars,secrets:a?.secrets})})},async getSource(n,r){let a=r!==void 0?`?version=${r}`:"";return t(`/functions/${n}/source${a}`)},async listVersions(n){return (await t(`/functions/${n}/versions`)).versions},async rollback(n,r){return t(`/functions/${n}/rollback`,{method:"POST",body:JSON.stringify({version:r})})},async getEnvVars(n){return (await t(`/functions/${n}/env`)).envVars},async setEnvVars(n,r){return t(`/functions/${n}/env`,{method:"PUT",body:JSON.stringify({envVars:r})})},async deleteEnvVar(n,r){return t(`/functions/${n}/env/${encodeURIComponent(r)}`,{method:"DELETE"})},async bindSecrets(n,r){return t(`/functions/${n}/secrets`,{method:"PUT",body:JSON.stringify({secrets:r})})},async setSchedule(n,r){return t(`/functions/${n}/schedule`,{method:"PUT",body:JSON.stringify(r)})},async removeSchedule(n){return t(`/functions/${n}/schedule`,{method:"DELETE"})},async getInvocations(n){let r={functionId:n.functionId,projectId:n.projectId,status:n.status,since:n.since,until:n.until,limit:n.limit,offset:n.offset},a=D(r);return (await t(`/functions/invocations${a}`)).invocations},async getInvocation(n){return t(`/functions/invocations/${n}`)},async getLogs(n,r){let a={since:r?.since,until:r?.until,level:r?.level,limit:r?.limit},i=D(a);return (await t(`/functions/${n}/logs${i}`)).logs}}}function ut(s){let t=$(s),e="default";return {async getUploadUrl(n,r){return t("/storage/upload-url",{method:"POST",body:JSON.stringify({key:n,bucket:r?.bucket||e,contentType:r?.contentType,sizeBytes:r?.sizeBytes,metadata:r?.metadata,isPublic:r?.isPublic,cacheControl:r?.cacheControl,contentDisposition:r?.contentDisposition,upsert:r?.upsert})})},async getDownloadUrl(n,r){return t("/storage/download-url",{method:"POST",body:JSON.stringify({key:n,bucket:r?.bucket||e,expiresIn:r?.expiresIn,download:r?.download,transform:r?.transform})})},async createSignedUrl(n,r=3600,a){return (await this.getDownloadUrl(n,{...a,expiresIn:r})).url},async createSignedUrls(n,r=3600,a){return await Promise.all(n.map(async i=>({key:i,url:await this.createSignedUrl(i,r,a)})))},async upload(n,r,a){let i=r instanceof Blob?r:new Blob([r]),l=i.size,o=a?.contentType||(r instanceof File?r.type:void 0)||"application/octet-stream",c=await this.getUploadUrl(n,{...a,contentType:o,sizeBytes:l}),u=await s.fetch(c.url,{method:"PUT",body:i,headers:{"Content-Type":o,...a?.cacheControl&&{"Cache-Control":a.cacheControl},...a?.contentDisposition&&{"Content-Disposition":a.contentDisposition}}});if(!u.ok)throw new Error(`Upload failed: ${u.statusText}`);let f=a?.bucket||e,p=c.url.split("?")[0];return {ok:true,key:n,bucket:f,url:p,publicUrl:a?.isPublic?this.getPublicUrl(n,{bucket:f}):void 0,size:l,contentType:o}},async uploadFromUrl(n,r,a){return t("/storage/upload-from-url",{method:"POST",body:JSON.stringify({key:n,url:r,bucket:a?.bucket||e,contentType:a?.contentType,metadata:a?.metadata,isPublic:a?.isPublic,timeout:a?.timeout})})},async download(n,r){let a=await this.getDownloadUrl(n,r),i=await s.fetch(a.url);if(!i.ok)throw new Error(`Download failed: ${i.statusText}`);return i.blob()},async list(n){let r={bucket:n?.bucket||e,prefix:n?.prefix,delimiter:n?.delimiter,limit:n?.limit,cursor:n?.cursor,includeUrls:n?.includeUrls},a=D(r);return t(`/storage/files${a}`)},async getMetadata(n,r){let a=r?.bucket||e;return t(`/storage/files/${encodeURIComponent(a)}/${encodeURIComponent(n)}/metadata`)},async updateMetadata(n,r,a){let i=a?.bucket||e;return t(`/storage/files/${encodeURIComponent(i)}/${encodeURIComponent(n)}/metadata`,{method:"PATCH",body:JSON.stringify(r)})},async exists(n,r){try{return await this.getMetadata(n,r),!0}catch{return false}},async copy(n,r,a){return t("/storage/files/copy",{method:"POST",body:JSON.stringify({sourceKey:n,sourceBucket:a?.sourceBucket||e,destinationKey:r,destinationBucket:a?.destinationBucket||a?.sourceBucket||e,metadata:a?.metadata})})},async move(n,r,a){return t("/storage/files/move",{method:"POST",body:JSON.stringify({sourceKey:n,sourceBucket:a?.sourceBucket||e,destinationKey:r,destinationBucket:a?.destinationBucket||a?.sourceBucket||e,metadata:a?.metadata})})},async delete(n,r){let a=r?.bucket||e;await t(`/storage/files/${encodeURIComponent(a)}/${encodeURIComponent(n)}`,{method:"DELETE"});},async deleteMany(n,r){return t("/storage/files/delete-batch",{method:"POST",body:JSON.stringify({keys:n,bucket:r?.bucket||e})})},getPublicUrl(n,r){let a=r?.bucket||e;return `${s.baseUrl.replace("/api","")}/storage/${encodeURIComponent(a)}/${encodeURIComponent(n)}`},async createBucket(n,r){return t("/storage/buckets",{method:"POST",body:JSON.stringify({name:n,isPublic:r?.isPublic,allowedMimeTypes:r?.allowedMimeTypes,maxFileSize:r?.maxFileSize,fileSizeLimit:r?.fileSizeLimit})})},async getBucket(n){return t(`/storage/buckets/${encodeURIComponent(n)}`)},async updateBucket(n,r){return t(`/storage/buckets/${encodeURIComponent(n)}`,{method:"PATCH",body:JSON.stringify(r)})},async listBuckets(){return (await t("/storage/buckets")).buckets},async deleteBucket(n){await t(`/storage/buckets/${encodeURIComponent(n)}`,{method:"DELETE"});},async emptyBucket(n){return t(`/storage/buckets/${encodeURIComponent(n)}/empty`,{method:"POST"})},async createMultipartUpload(n,r){return t("/storage/multipart/create",{method:"POST",body:JSON.stringify({key:n,bucket:r?.bucket||e,contentType:r?.contentType,metadata:r?.metadata,partSize:r?.partSize})})},async uploadPart(n,r,a){let i=a instanceof Blob?a:new Blob([a]),{url:l}=await t(`/storage/multipart/${n}/part-url`,{method:"POST",body:JSON.stringify({partNumber:r})}),o=await s.fetch(l,{method:"PUT",body:i});if(!o.ok)throw new Error(`Part upload failed: ${o.statusText}`);let c=o.headers.get("etag")||"";return {partNumber:r,etag:c}},async completeMultipartUpload(n,r){return t(`/storage/multipart/${n}/complete`,{method:"POST",body:JSON.stringify({parts:r})})},async abortMultipartUpload(n){await t(`/storage/multipart/${n}/abort`,{method:"POST"});}}}function dt(s){let t=$(s);return {async list(){return t("/projects")},async get(e){return t(`/projects/${e}`)},async create(e){return t("/projects",{method:"POST",body:JSON.stringify(e)})},async getApiKeys(e){return t(`/projects/${e}/api-keys`)},async createApiKey(e,n){return t(`/projects/${e}/api-keys`,{method:"POST",body:JSON.stringify(n??{})})},async revokeApiKey(e,n){return t(`/projects/${e}/api-keys/${n}/revoke`,{method:"POST"})},async rotateApiKey(e,n){return t(`/projects/${e}/api-keys/${n}/rotate`,{method:"POST"})}}}function yt(s){let t=$(s);return {async list(){return t("/orgs")},async create(e){return t("/orgs",{method:"POST",body:JSON.stringify(e)})},async getProfile(e){return (await t(`/orgs/${e}/profile`)).profile||{}},async updateProfile(e,n){return (await t(`/orgs/${e}/profile`,{method:"PATCH",body:JSON.stringify(n)})).profile},async listBillingContacts(e){return (await t(`/orgs/${e}/billing-contacts`)).contacts},async addBillingContact(e,n){return t(`/orgs/${e}/billing-contacts`,{method:"POST",body:JSON.stringify(n)})},async removeBillingContact(e,n){return t(`/orgs/${e}/billing-contacts/${n}`,{method:"DELETE"})},async listMembers(e){return (await t(`/orgs/${e}/members`)).members},async inviteMember(e,n){return t(`/orgs/${e}/members/invite`,{method:"POST",body:JSON.stringify(n)})},async listInvites(e){return (await t(`/orgs/${e}/invites`)).invites},async cancelInvite(e,n){return t(`/orgs/${e}/invites/${n}`,{method:"DELETE"})},async removeMember(e,n){return t(`/orgs/${e}/members/${n}`,{method:"DELETE"})},async updateMemberRole(e,n,r){return t(`/orgs/${e}/members/${n}/role`,{method:"PATCH",body:JSON.stringify({role:r})})}}}function pt(s){let t=$(s);return {async preview(e){return t("/schema-engine/preview",{method:"POST",body:JSON.stringify(e)})},async apply(e){return t("/schema-engine/apply",{method:"POST",body:JSON.stringify(e)})},async getMigrations(e,n){let r=n?`/schema-engine/migrations/project/${e}?limit=${n}`:`/schema-engine/migrations/project/${e}`;return t(r)},async saveSchema(e){return t("/schemas/",{method:"POST",body:JSON.stringify(e)})},async getSchemas(e){return t(`/schemas/project/${e}`)}}}function ft(s){let t=$(s);return {async create(e){return t("/functions/secrets",{method:"POST",body:JSON.stringify(e)})},async list(e,n){let r=new URLSearchParams;n&&r.set("envId",n);let a=r.toString(),i=`/functions/secrets/project/${e}${a?`?${a}`:""}`;return t(i)},async reveal(e){return t(`/functions/secrets/${e}/value`)},async update(e,n){return t(`/functions/secrets/${e}`,{method:"PUT",body:JSON.stringify({value:n})})},async delete(e){return t(`/functions/secrets/${e}`,{method:"DELETE"})}}}function gt(s){let t=$(s);return {async list(e,n){let r=new URLSearchParams;n&&r.set("env",n);let a=r.toString(),i=`/deployments/project/${e}${a?`?${a}`:""}`;return (await t(i)).deployments},async get(e){let n=await t(`/deployments/${e}`);return {...n.deployment,steps:n.steps}},async getSteps(e){return (await t(`/deployments/${e}/steps`)).steps},async promote(e){let n={projectId:e.projectId,fromEnv:e.sourceEnv,toEnv:e.targetEnv},r=await t("/deployments/promote",{method:"POST",body:JSON.stringify(n)}),a=await t(`/deployments/${r.deploymentId}`);return {deployment:{...a.deployment,steps:a.steps}}},async rollback(e){return t(`/deployments/${e}/rollback`,{method:"POST"})},async listTokens(e,n){let r=new URLSearchParams;n&&r.set("envId",n);let a=r.toString(),i=`/deployments/tokens/project/${encodeURIComponent(e)}${a?`?${a}`:""}`;return (await t(i)).tokens},async createToken(e){return t("/deployments/tokens",{method:"POST",body:JSON.stringify(e)})},async revokeToken(e){return t(`/deployments/tokens/${encodeURIComponent(e)}/revoke`,{method:"POST"})}}}function mt(s){let t=$(s);return {async getStats(e){return t(`/realtime/stats/project/${e}`)},async getConnections(e){return (await t(`/realtime/connections/project/${e}`)).connections},async getSubscriptions(e){return (await t(`/realtime/subscriptions/project/${e}`)).subscriptions},async getEvents(e,n){let r=new URLSearchParams;n&&r.set("limit",String(n));let a=r.toString(),i=`/realtime/events/project/${e}${a?`?${a}`:""}`;return (await t(i)).events},async getStatus(e){return t(`/realtime/status/project/${e}`)},async install(e){return t("/realtime/install",{method:"POST",body:JSON.stringify(e)})},async enableAll(e){return t("/realtime/enable-all",{method:"POST",body:JSON.stringify(e)})}}}function ht(s){let t=$(s);return {async listBuckets(e,n){let r=new URLSearchParams;n&&r.set("envId",n);let a=r.toString(),i=`/buckets/project/${e}${a?`?${a}`:""}`;return (await t(i)).buckets},async getBucket(e){return (await t(`/buckets/${e}`)).bucket},async createBucket(e){return (await t("/buckets",{method:"POST",body:JSON.stringify(e)})).bucket},async updateBucket(e,n){return (await t(`/buckets/${e}`,{method:"PUT",body:JSON.stringify(n)})).bucket},async deleteBucket(e){return t(`/buckets/${e}`,{method:"DELETE"})},async listFiles(e,n){let r=new URLSearchParams;n?.prefix&&r.set("prefix",n.prefix),n?.maxKeys&&r.set("maxKeys",String(n.maxKeys)),n?.continuationToken&&r.set("continuationToken",n.continuationToken);let a=r.toString(),i=`/buckets/${e}/files${a?`?${a}`:""}`;return t(i)},async deleteFile(e,n){return t(`/buckets/${e}/files?key=${encodeURIComponent(n)}`,{method:"DELETE"})},async getSignedUrl(e,n,r){return t(`/buckets/${e}/signed-url`,{method:"POST",body:JSON.stringify({key:n,expiresIn:r})})},async getUploadUrl(e,n,r){return t(`/buckets/${e}/upload-url`,{method:"POST",body:JSON.stringify({key:n,...r})})},async uploadFile(e,n,r,a){let i=a?.prefix?`${a.prefix}${n}`:n,l=a?.contentType??(r instanceof Blob?r.type:"application/octet-stream"),o=new URLSearchParams;return o.set("key",i),l&&o.set("contentType",l),t(`/buckets/${e}/upload?${o.toString()}`,{method:"POST",body:r,headers:{"Content-Type":l||"application/octet-stream"}})}}}function bt(s){let t=$(s);return {async list(e,n){let r={type:n?.type,enabled:n?.enabled},a=D(r);return (await t(`/integrations/subscriptions/project/${e}${a}`)).subscriptions},async get(e){return t(`/integrations/subscriptions/${e}`)},async create(e){return (await t("/integrations/subscriptions",{method:"POST",body:JSON.stringify(e)})).subscription},async update(e,n){return (await t(`/integrations/subscriptions/${e}`,{method:"PATCH",body:JSON.stringify(n)})).subscription},async delete(e){return t(`/integrations/subscriptions/${e}`,{method:"DELETE"})},async enable(e){return this.update(e,{enabled:true})},async disable(e){return this.update(e,{enabled:false})},async test(e){return t(`/integrations/subscriptions/${e}/test`,{method:"POST"})},async publish(e){return t("/integrations/events/publish",{method:"POST",body:JSON.stringify(e)})},async publishBatch(e){return (await t("/integrations/events/publish-batch",{method:"POST",body:JSON.stringify({events:e})})).results},async listEvents(e){let n={envId:e.envId,source:e.source,name:e.name,since:e.since,until:e.until,limit:e.limit,offset:e.offset},r=D(n);return (await t(`/integrations/events/project/${e.projectId}${r}`)).events},async getEvent(e){return t(`/integrations/events/${e}`)},async getDeliveries(e){let n={subscriptionId:e.subscriptionId,eventId:e.eventId,status:e.status,since:e.since,until:e.until,limit:e.limit,offset:e.offset},r=D(n);return (await t(`/integrations/deliveries${r}`)).deliveries},async getDelivery(e){return t(`/integrations/deliveries/${e}`)},async retryDelivery(e){return t(`/integrations/deliveries/${e}/retry`,{method:"POST"})},async retryAllFailed(e){return t(`/integrations/subscriptions/${e}/retry-failed`,{method:"POST"})},async getDlq(e,n){let r={limit:n?.limit,offset:n?.offset},a=D(r);return (await t(`/integrations/dlq/project/${e}${a}`)).deliveries},async purgeDlq(e,n){return t(`/integrations/dlq/project/${e}/purge`,{method:"POST",body:JSON.stringify({olderThan:n.olderThan})})},async replayDlq(e,n){return t(`/integrations/dlq/project/${e}/replay`,{method:"POST",body:JSON.stringify(n)})},verifySignature(e){let n=e.tolerance??300;try{let r=e.signature.split(","),a=r.find(T=>T.startsWith("t=")),i=r.find(T=>T.startsWith("v1="));if(!a||!i)return !1;let l=parseInt(a.slice(2),10),o=i.slice(3),c=Math.floor(Date.now()/1e3);if(Math.abs(c-l)>n)return !1;let u=`${l}.${e.payload}`,f=new TextEncoder,p=f.encode(e.secret),d=f.encode(u),g=Array.from(p).concat(Array.from(d)).reduce((T,h)=>T+h,0).toString(16);if(o.length!==g.length)return !1;let m=0;for(let T=0;T<o.length;T++)m|=o.charCodeAt(T)^g.charCodeAt(T);return m===0}catch{return false}},generateSecret(){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",n="whsec_";for(let r=0;r<32;r++)n+=e.charAt(Math.floor(Math.random()*e.length));return n}}}function Tt(s){let t=$(s);return {async getSummary(e){return t(`/billing/org/${e}/summary`)},async getEntitlements(e){return t(`/entitlements/org/${e}`)},async checkEntitlement(e,n){return t(`/entitlements/org/${e}/check`,{method:"POST",body:JSON.stringify(n)})},async getPlans(){return (await t("/pricing/plans")).plans},async createCheckout(e){return t("/billing/checkout",{method:"POST",body:JSON.stringify(e)})},async openPortal(e){return t(`/billing/org/${e.orgId}/portal`,{method:"POST",body:JSON.stringify({returnUrl:e.returnUrl})})}}}function St(s){let t=$(s);return {async getOverview(){return t("/admin/overview")},async listUsers(e){let n=new URLSearchParams;e?.search&&n.set("search",e.search),e?.limit&&n.set("limit",String(e.limit)),e?.offset&&n.set("offset",String(e.offset));let r=n.toString();return t(`/admin/users${r?`?${r}`:""}`)},async getUser(e){return t(`/admin/users/${e}`)},async updateUserStatus(e,n){return t(`/admin/users/${e}/status`,{method:"PATCH",body:JSON.stringify({status:n})})},async updateUserAdmin(e,n){return t(`/admin/users/${e}/admin`,{method:"PATCH",body:JSON.stringify({isAdmin:n})})},async listOrganizations(e){let n=new URLSearchParams;e?.search&&n.set("search",e.search),e?.plan&&n.set("plan",e.plan),e?.limit&&n.set("limit",String(e.limit)),e?.offset&&n.set("offset",String(e.offset));let r=n.toString();return t(`/admin/organizations${r?`?${r}`:""}`)},async getOrganization(e){return t(`/admin/organizations/${e}`)},async updateOrganization(e,n){return t(`/admin/organizations/${e}`,{method:"PATCH",body:JSON.stringify(n)})},async listProjects(e){let n=new URLSearchParams;e?.search&&n.set("search",e.search),e?.orgId&&n.set("orgId",e.orgId),e?.region&&n.set("region",e.region),e?.tenancy&&n.set("tenancy",e.tenancy),e?.limit&&n.set("limit",String(e.limit)),e?.offset&&n.set("offset",String(e.offset));let r=n.toString();return t(`/admin/projects${r?`?${r}`:""}`)},async getProject(e){return t(`/admin/projects/${e}`)},async updateProject(e,n){return t(`/admin/projects/${e}`,{method:"PATCH",body:JSON.stringify(n)})},async getProjectResources(e){return t(`/admin/resources/project/${e}`)},async setDedicatedDb(e){return t(`/admin/resources/project/${e.projectId}/db`,{method:"POST",body:JSON.stringify({connectionString:e.connectionString})})},async listIncidents(e="open"){return (await t(`/admin/incidents?status=${e}`)).incidents},async createIncident(e){return t("/admin/incidents",{method:"POST",body:JSON.stringify(e)})},async acknowledgeIncident(e){return t(`/admin/incidents/${e}/ack`,{method:"POST"})},async resolveIncident(e){return t(`/admin/incidents/${e}/resolve`,{method:"POST"})},async listRegions(){return t("/admin/regions")},async updateRegion(e,n){return t(`/admin/regions/${e}`,{method:"PATCH",body:JSON.stringify(n)})},async getHealthComponents(){return t("/admin/health/components")},async updateHealthComponent(e,n){return t(`/admin/health/components/${e}`,{method:"PATCH",body:JSON.stringify(n)})},async listQueues(){return t("/admin/queues")},async listDlqMessages(e){let n=new URLSearchParams;e?.queue&&n.set("queue",e.queue),e?.search&&n.set("search",e.search),e?.limit&&n.set("limit",String(e.limit)),e?.offset&&n.set("offset",String(e.offset));let r=n.toString();return t(`/admin/dlq${r?`?${r}`:""}`)},async retryDlqMessage(e){return t(`/admin/dlq/${e}/retry`,{method:"POST"})},async archiveDlqMessage(e){return t(`/admin/dlq/${e}`,{method:"DELETE"})}}}function wt(s){let t=$(s);return {async list(){return (await t("/flags")).flags},async create(e){return t("/flags",{method:"POST",body:JSON.stringify(e)})},async update(e,n){return t(`/flags/${encodeURIComponent(e)}`,{method:"PUT",body:JSON.stringify(n)})},async delete(e){return t(`/flags/${encodeURIComponent(e)}`,{method:"DELETE"})}}}function Ot(s){let t=$(s);return {async getOverview(e){return (await t(`/security/overview/${encodeURIComponent(e)}`)).overview},async getAuditLogs(e,n){let r=new URLSearchParams;n?.limit&&r.set("limit",String(n.limit)),n?.offset&&r.set("offset",String(n.offset));let a=r.toString(),i=`/security/audit/${encodeURIComponent(e)}${a?`?${a}`:""}`;return t(i)},async listEnvVars(e,n){let r=new URLSearchParams;n&&r.set("envId",n);let a=r.toString(),i=`/projects/${encodeURIComponent(e)}/env-vars${a?`?${a}`:""}`;return (await t(i)).envVars},async createEnvVar(e,n){return (await t(`/projects/${encodeURIComponent(e)}/env-vars`,{method:"POST",body:JSON.stringify(n)})).envVar},async updateEnvVar(e,n,r){return (await t(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(n)}`,{method:"PATCH",body:JSON.stringify(r)})).envVar},async deleteEnvVar(e,n){return t(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(n)}`,{method:"DELETE"})},async getEnvVarValue(e,n){return t(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(n)}/value`)}}}function Pt(s){let t=$(s);return {async generatePlan(e){return t("/ai/plan",{method:"POST",body:JSON.stringify({projectId:e.projectId,prompt:e.prompt,context:e.context,taskType:e.taskType,mode:e.mode})})},async explainPlan(e){return t("/ai/explain",{method:"POST",body:JSON.stringify({plan:e.plan,projectId:e.projectId,taskType:e.taskType,mode:e.mode})})},async getOrgSettings(e){return t(`/ai/settings/org/${encodeURIComponent(e)}`)},async updateOrgSettings(e,n){return t(`/ai/settings/org/${encodeURIComponent(e)}`,{method:"POST",body:JSON.stringify(n)})},async getProjectOverrides(e){return t(`/ai/settings/project/${encodeURIComponent(e)}`)},async updateProjectOverrides(e,n){return t(`/ai/settings/project/${encodeURIComponent(e)}`,{method:"POST",body:JSON.stringify(n)})},async getUsage(e,n){let r=new URLSearchParams;n&&r.set("month",n);let a=r.toString(),i=`/ai/usage/org/${encodeURIComponent(e)}${a?`?${a}`:""}`;return t(i)},async getBudgetStatus(e){let[n,r]=await Promise.all([this.getOrgSettings(e),this.getUsage(e)]),a=n?.monthlyBudgetCents??1e4,i=r.costCents,l=Math.max(0,a-i),o=a>0?Math.round(i/a*100):0;return {spent:i,budget:a,remaining:l,hardStop:n?.hardStopEnabled??false,percentUsed:o}},async generateFunction(e){return t("/ai/generate-function",{method:"POST",body:JSON.stringify({projectId:e.projectId,description:e.description,inputSchema:e.inputSchema,outputSchema:e.outputSchema,language:e.language??"typescript",mode:e.mode})})},async generateEndpoint(e){return t("/ai/generate-endpoint",{method:"POST",body:JSON.stringify({projectId:e.projectId,description:e.description,method:e.method??"GET",authRequired:e.authRequired??true,mode:e.mode})})},async exportCode(e){return t("/ai/export-code",{method:"POST",body:JSON.stringify({projectId:e.projectId,targetLanguage:e.targetLanguage,includeSchema:e.includeSchema??true,includeFunctions:e.includeFunctions??true,includeEndpoints:e.includeEndpoints??true})})},async createConversation(e,n){return t("/ai/conversations",{method:"POST",body:JSON.stringify({projectId:e,title:n?.title,context:n?.context})})},async sendMessage(e,n){return t(`/ai/conversations/${encodeURIComponent(e)}/messages`,{method:"POST",body:JSON.stringify({content:n.content,taskType:n.taskType})})},async getConversation(e){return t(`/ai/conversations/${encodeURIComponent(e)}`)},async listConversations(e){return (await t(`/ai/conversations/project/${encodeURIComponent(e)}`)).conversations},async deleteConversation(e){return t(`/ai/conversations/${encodeURIComponent(e)}`,{method:"DELETE"})}}}function vt(s){let t=$(s);return {async load(){return t("/bootstrap")}}}function Ut(s){let t=$(s);return {async list(e){let n=new URLSearchParams;e?.visibility&&n.set("visibility",e.visibility),e?.category&&n.set("category",e.category),e?.orgId&&n.set("orgId",e.orgId);let r=n.toString(),a=`/templates${r?`?${r}`:""}`;return (await t(a)).templates},async get(e){return t(`/templates/${e}`)},async previewInstall(e){return t("/templates/install/preview",{method:"POST",body:JSON.stringify(e)})},async applyInstall(e){return t("/templates/install/apply",{method:"POST",body:JSON.stringify(e)})},async rollback(e){return t(`/templates/install/${e}/rollback`,{method:"POST"})},async createProject(e){return t("/templates/create-project",{method:"POST",body:JSON.stringify(e)})}}}function Et(s){let t=$(s);return {async list(e){return (await t(`/oauth/org/${e}`)).connections},async configure(e,n){return t(`/oauth/org/${e}/configure`,{method:"POST",body:JSON.stringify(n)})},async enable(e){return t(`/oauth/connections/${e}/enable`,{method:"POST"})},async disable(e){return t(`/oauth/connections/${e}/disable`,{method:"POST"})},async delete(e){return t(`/oauth/connections/${e}`,{method:"DELETE"})}}}function Rt(s){let t=$(s);return {async listPages(e){let n=e?`?category=${encodeURIComponent(e)}`:"";return (await t(`/docs/pages${n}`)).pages},async getPage(e){return (await t(`/docs/pages/${encodeURIComponent(e)}`)).page},async createPage(e){return (await t("/docs/pages",{method:"POST",body:JSON.stringify(e)})).page},async updatePage(e,n){return (await t(`/docs/pages/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})).page},async deletePage(e){return t(`/docs/pages/${encodeURIComponent(e)}`,{method:"DELETE"})},async listSdks(){return (await t("/docs/sdks")).sdks},async getSdk(e){return (await t(`/docs/sdks/${encodeURIComponent(e)}`)).sdk},async createSdk(e){return (await t("/docs/sdks",{method:"POST",body:JSON.stringify(e)})).sdk},async updateSdk(e,n){return (await t(`/docs/sdks/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})).sdk},async deleteSdk(e){return t(`/docs/sdks/${encodeURIComponent(e)}`,{method:"DELETE"})},async listSdkExamples(e,n){let r=n?`?topic=${encodeURIComponent(n)}`:"";return (await t(`/docs/sdks/${encodeURIComponent(e)}/examples${r}`)).examples},async createSdkExample(e){return (await t("/docs/sdk-examples",{method:"POST",body:JSON.stringify(e)})).example},async deleteSdkExample(e){return t(`/docs/sdk-examples/${encodeURIComponent(e)}`,{method:"DELETE"})},async listEndpoints(e){let n=e?`?category=${encodeURIComponent(e)}`:"";return (await t(`/docs/api-endpoints${n}`)).endpoints},async getEndpoint(e){return (await t(`/docs/api-endpoints/${encodeURIComponent(e)}`)).endpoint},async createEndpoint(e){return (await t("/docs/api-endpoints",{method:"POST",body:JSON.stringify(e)})).endpoint},async updateEndpoint(e,n){return (await t(`/docs/api-endpoints/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})).endpoint},async deleteEndpoint(e){return t(`/docs/api-endpoints/${encodeURIComponent(e)}`,{method:"DELETE"})},async listExamples(e){let n=e!==void 0?`?featured=${e}`:"";return (await t(`/docs/examples${n}`)).examples},async getExample(e){return (await t(`/docs/examples/${encodeURIComponent(e)}`)).example},async createExample(e){return (await t("/docs/examples",{method:"POST",body:JSON.stringify(e)})).example},async updateExample(e,n){return (await t(`/docs/examples/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})).example},async deleteExample(e){return t(`/docs/examples/${encodeURIComponent(e)}`,{method:"DELETE"})},async listChangelog(){return (await t("/docs/changelog")).entries},async getChangelogEntry(e){return (await t(`/docs/changelog/${encodeURIComponent(e)}`)).entry},async createChangelogEntry(e){return (await t("/docs/changelog",{method:"POST",body:JSON.stringify(e)})).entry},async updateChangelogEntry(e,n){return (await t(`/docs/changelog/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})).entry},async deleteChangelogEntry(e){return t(`/docs/changelog/${encodeURIComponent(e)}`,{method:"DELETE"})},async search(e){return (await t(`/docs/search?q=${encodeURIComponent(e)}`)).results}}}function kt(s,t,e,n){let r=t.type||"public",a="unsubscribed",i=new Map,l=[],o={},c=null,u=null,f=new Set,p=new Set,d=new Set,g=y=>{if(y.event){let w=i.get(y.event);w&&w.forEach(v=>v(y.payload));}},m=y=>{o=y.state||{},f.forEach(w=>w(o));},T=y=>{let w=y.key||"",v=y.currentPresences||[],R=y.joinedPresences||[],S=y.leftPresences||[];R.length>0&&(o[w]=v,p.forEach(U=>U(w,v,R))),S.length>0&&(v.length===0?delete o[w]:o[w]=v,d.forEach(U=>U(w,v,S))),f.forEach(U=>U(o));},h=y=>{let w={type:"db_change",projectId:y.projectId||"",schema:y.schema||"",table:y.table||"",operation:y.op,new:y.record,old:y.old_record,timestamp:y.ts||new Date().toISOString(),partial:y.partial};l.forEach(({options:v,handler:R})=>{if(v.table===w.table){let S=v.event||"*";(S==="*"||(Array.isArray(S)?S.includes(w.operation):S===w.operation))&&R(w);}});},b={get name(){return s},get type(){return r},get status(){return a},_handleMessage:y=>{switch(y.type){case "broadcast":g(y);break;case "presence_state":m(y);break;case "presence":T(y);break;case "db_change":h(y);break;case "subscribed":a="subscribed";break;case "error":a="error";break}},onDbChange(y,w){return l.push({options:y,handler:w}),a==="subscribed"&&e({type:"subscribe",channel:s,options:{table:y.table,filter:y.filter,event:y.event,columns:y.columns}}),b},on(y,w){return i.has(y)||i.set(y,new Set),i.get(y).add(w),b},off(y,w){return w?i.get(y)?.delete(w):i.delete(y),b},async broadcast(y){if(a!=="subscribed")throw new Error("Channel must be subscribed before broadcasting");e({type:"broadcast",channel:s,event:y.event,payload:y.payload,includeSelf:y.includeSelf});},presence:{async track(y){if(r!=="presence")throw new Error("Presence tracking is only available on presence channels");c=y.key||n()||"anonymous",u=y.state,e({type:"presence_track",channel:s,key:c,state:u});},async update(y){if(!u)throw new Error("Must call track() before update()");u={...u,...y},e({type:"presence_update",channel:s,key:c,state:u});},async untrack(){c&&(e({type:"presence_untrack",channel:s,key:c}),c=null,u=null);},state(){return {...o}},onSync(y){return f.add(y),b},onJoin(y){return p.add(y),b},onLeave(y){return d.add(y),b}},async subscribe(){return a==="subscribed"||(a="subscribing",e({type:"subscribe",channel:s}),l.forEach(({options:y})=>{e({type:"subscribe",channel:s,options:{table:y.table,filter:y.filter,event:y.event,columns:y.columns}});}),t.presenceState&&r==="presence"&&await b.presence.track({state:t.presenceState})),b},async unsubscribe(){a!=="unsubscribed"&&(c&&await b.presence.untrack(),e({type:"unsubscribe",channel:s}),a="unsubscribed",o={},i.clear(),l.length=0);}};return b}function It(s,t){let{wsUrl:e=s.baseUrl.replace(/^http/,"ws")+"/realtime/ws",autoReconnect:n=true,reconnectDelay:r=1e3,maxReconnectAttempts:a=10}=t??{},i=null,l="disconnected",o=null,c=null,u=0,f=null,p=null,d=new Map,g=new Map,m=new Set,T={connect:new Set,disconnect:new Set,error:new Set,reconnect:new Set},h=S=>{T[S].forEach(U=>U());},b=S=>{let U=`table:${S.table}`;if(S.filter){let O=(Array.isArray(S.filter)?S.filter:[S.filter]).map(k=>`${k.field}${k.operator||"eq"}${k.value}`).join("&");U+=`?${O}`;}return U},y=S=>{i?.readyState===WebSocket.OPEN&&i.send(JSON.stringify(S));},w=S=>{if(S.channel){let U=d.get(S.channel);if(U){U._handleMessage(S);return}}switch(S.type){case "db_change":{let U={type:"db_change",projectId:S.projectId??"",schema:S.schema??"",table:S.table??"",operation:S.op,new:S.record,old:S.old_record,timestamp:S.ts??new Date().toISOString(),partial:S.partial},O=`table:${S.table}`;g.forEach((k,C)=>{(C===O||C.startsWith(O+"?"))&&k.forEach(P=>P(U));});break}case "presence":{let U={type:"presence",event:S.event,key:S.key||S.connectionId||"",connectionId:S.connectionId??"",projectId:S.projectId??"",currentPresences:S.currentPresences||[],leftPresences:S.leftPresences||[],joinedPresences:S.joinedPresences||[]};m.forEach(O=>O(U));break}case "welcome":o=S.connectionId||null;break;case "error":{console.error("[vaif/realtime] Server error:",S.message),h("error");break}}},v=()=>new Promise((S,U)=>{let O=new URLSearchParams;s.apiKey&&O.set(s.apiKeyHeader,s.apiKey),c&&O.set("token",c);let k=O.toString(),C=k?`${e}?${k}`:e;try{i=new WebSocket(C);}catch{U(new ee("Failed to create WebSocket connection"));return}let P=()=>{l="connected",u=0,h("connect"),d.forEach(q=>{(q.status==="subscribed"||q.status==="subscribing")&&q.subscribe();}),g.forEach((q,se)=>{y({type:"subscribe",channel:se});}),p=setInterval(()=>{y({type:"ping"});},3e4),S();},Z=q=>{try{let se=JSON.parse(q.data);w(se);}catch{}},Ye=()=>{if(l="disconnected",o=null,i=null,p&&(clearInterval(p),p=null),h("disconnect"),n&&u<a){l="reconnecting";let q=r*Math.pow(2,u);f=setTimeout(()=>{u++,h("reconnect"),v().catch(()=>{});},Math.min(q,3e4));}},et=()=>{h("error"),U(new ee("WebSocket connection error"));};i.addEventListener("open",P),i.addEventListener("message",Z),i.addEventListener("close",Ye),i.addEventListener("error",et);}),R=()=>{f&&(clearTimeout(f),f=null),p&&(clearInterval(p),p=null),u=a;};return {channel(S,U={}){let O=d.get(S);if(O)return O;let k=kt(S,U,y,()=>o);return d.set(S,k),k},async removeChannel(S){let U=d.get(S.name);U&&(await U.unsubscribe(),d.delete(S.name));},getChannels(){return Array.from(d.values())},subscribe(S,U){let O=b(S);return g.has(O)||g.set(O,new Set),g.get(O).add(U),i?.readyState===WebSocket.OPEN&&y({type:"subscribe",channel:O}),()=>{let k=g.get(O);k&&(k.delete(U),k.size===0&&(g.delete(O),i?.readyState===WebSocket.OPEN&&y({type:"unsubscribe",channel:O})));}},subscribeToPresence(S){return m.add(S),()=>{m.delete(S);}},async connect(){if(l!=="connected"){if(!s.apiKey)throw new ae("API key is required for realtime connections");l="connecting",await v();}},disconnect(){R(),d.forEach(S=>{S.unsubscribe();}),d.clear(),i&&(i.close(),i=null),l="disconnected",o=null;},get isConnected(){return l==="connected"},get connectionState(){return l},get connectionId(){return o},on(S,U){T[S].add(U);},off(S,U){T[S].delete(U);},setAuth(S){c=S;}}}var Y={apiKeyHeader:"x-vaif-key",timeout:3e4,retry:{maxRetries:3,retryDelay:1e3,retryOn:[429,500,502,503,504]}};function Ct(s){return {baseUrl:s.baseUrl.replace(/\/$/,""),apiKey:s.apiKey,apiKeyHeader:s.apiKeyHeader??Y.apiKeyHeader,accessToken:s.accessToken,fetch:s.fetch??globalThis.fetch.bind(globalThis),timeout:s.timeout??Y.timeout,retry:{maxRetries:s.retry?.maxRetries??Y.retry.maxRetries,retryDelay:s.retry?.retryDelay??Y.retry.retryDelay,retryOn:s.retry?.retryOn??[...Y.retry.retryOn]}}}function ye(s){let t=Ct(s),e=it(t),n=ct(t),r=lt(t),a=ut(t),i=dt(t),l=yt(t),o=pt(t),c=ft(t),u=gt(t),f=mt(t),p=ht(t),d=bt(t),g=Tt(t),m=St(t),T=wt(t),h=Ot(t),b=Pt(t),y=vt(t),w=Ut(t),v=Et(t),R=Rt(t);return {from:e.from,auth:n,functions:r,storage:a,projects:i,orgs:l,schema:o,secrets:c,deployments:u,realtimeMonitoring:f,storageDashboard:p,integrations:d,billing:g,admin:m,flags:T,security:h,ai:b,bootstrap:y,templates:w,oauth:v,docs:R,realtime:S=>It(t,S)}}var pe=react.createContext(null);function fe({config:s,children:t,onAuthStateChange:e,autoRefreshSession:n=true,storageKey:r="vaif-auth"}){let[a]=react.useState(()=>ye(s)),[i,l]=react.useState(null),[o,c]=react.useState(null),[u,f]=react.useState(null),[p,d]=react.useState(null),[g,m]=react.useState(true),T=react.useRef(null),h=react.useCallback((O,k,C)=>{let P={token:O,refreshToken:k,expiresAt:C};localStorage.setItem(r,JSON.stringify(P));},[r]),b=react.useCallback(()=>{localStorage.removeItem(r),l(null),c(null),f(null),d(null);},[r]);react.useEffect(()=>((async()=>{try{let k=localStorage.getItem(r);if(!k){m(!1);return}let C=JSON.parse(k);if(C.expiresAt&&new Date(C.expiresAt)<=new Date)if(C.refreshToken)try{let P=await a.auth.refreshToken(C.refreshToken);c(P.token),f(P.refreshToken??null),d(P.expiresAt),h(P.token,P.refreshToken,P.expiresAt);let Z=await a.auth.getUser();l(Z);}catch{b();}else b();else {c(C.token),f(C.refreshToken??null),d(C.expiresAt??null);try{let P=await a.auth.getUser();l(P);}catch{if(C.refreshToken)try{let P=await a.auth.refreshToken(C.refreshToken);c(P.token),f(P.refreshToken??null),d(P.expiresAt),h(P.token,P.refreshToken,P.expiresAt);let Z=await a.auth.getUser();l(Z);}catch{b();}else b();}}}catch{b();}finally{m(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[a,r,h,b]),react.useEffect(()=>{if(!n||!p||!u)return;let O=new Date(p).getTime(),k=Date.now(),C=O-k-6e4;return C>0&&(T.current=setTimeout(async()=>{try{let P=await a.auth.refreshToken(u);c(P.token),f(P.refreshToken??null),d(P.expiresAt),h(P.token,P.refreshToken,P.expiresAt);}catch{b();}},C)),()=>{T.current&&clearTimeout(T.current);}},[n,a,p,u,h,b]),react.useEffect(()=>{g||e?.(i);},[i,g,e]);let y=react.useCallback(async(O,k)=>{let C=await a.auth.login(O,k);if("mfaRequired"in C)throw new Error("MFA required - use verifyMFA to complete login");let P=C;return l(P.user),c(P.token),f(P.refreshToken??null),d(P.expiresAt??null),h(P.token,P.refreshToken,P.expiresAt),P},[a,h]),w=react.useCallback(async(O,k,C)=>{let P=await a.auth.signUp(O,k,{metadata:C});return l(P.user),c(P.token),f(P.refreshToken??null),d(P.expiresAt??null),h(P.token,P.refreshToken,P.expiresAt),P},[a,h]),v=react.useCallback(async()=>{try{await a.auth.logout();}finally{b();}},[a,b]),R=react.useCallback(async()=>{if(!u)throw new Error("No refresh token available");let O=await a.auth.refreshToken(u);c(O.token),f(O.refreshToken??null),d(O.expiresAt),h(O.token,O.refreshToken,O.expiresAt);},[a,u,h]),S=react.useCallback(O=>{l(k=>k?{...k,...O}:null);},[]),U={client:a,user:i,token:o,isLoading:g,isAuthenticated:!!i,signIn:y,signUp:w,signOut:v,refreshSession:R,updateUser:S};return jsxRuntime.jsx(pe.Provider,{value:U,children:t})}function L(){let s=react.useContext(pe);if(!s)throw new Error("useVaif must be used within a VaifProvider");return s}function E(){let{client:s}=L();return s}function ge(){let{user:s,token:t,isLoading:e,isAuthenticated:n,signIn:r,signUp:a,signOut:i,refreshSession:l}=L();return {user:s,token:t,isLoading:e,isAuthenticated:n,signIn:r,signUp:a,signOut:i,refreshSession:l}}function me(){let{user:s}=L();return s}function he(){let{token:s}=L();return s}function be(){let{client:s}=L(),[t,e]=react.useState(false),[n,r]=react.useState(null),[a,i]=react.useState(false),[l,o]=react.useState(false),c=react.useCallback(async f=>{e(true),r(null);try{await s.auth.requestPasswordReset({email:f}),i(!0);}catch(p){throw r(p instanceof Error?p:new Error("Failed to request reset")),p}finally{e(false);}},[s]),u=react.useCallback(async(f,p)=>{e(true),r(null);try{await s.auth.confirmPasswordReset({token:f,password:p}),o(!0);}catch(d){throw r(d instanceof Error?d:new Error("Failed to reset password")),d}finally{e(false);}},[s]);return {requestReset:c,confirmReset:u,isLoading:t,error:n,isRequested:a,isConfirmed:l}}function Te(){let{client:s}=L(),[t,e]=react.useState(false),[n,r]=react.useState(null),[a,i]=react.useState(false),[l,o]=react.useState(false),c=react.useCallback(async f=>{e(true),r(null);try{await s.auth.requestEmailVerification({email:f}),i(!0);}catch(p){throw r(p instanceof Error?p:new Error("Failed to send verification")),p}finally{e(false);}},[s]),u=react.useCallback(async f=>{e(true),r(null);try{await s.auth.confirmEmailVerification({token:f}),o(!0);}catch(p){throw r(p instanceof Error?p:new Error("Failed to verify email")),p}finally{e(false);}},[s]);return {requestVerification:c,confirmVerification:u,isLoading:t,error:n,isSent:a,isVerified:l}}function Se(){let{client:s}=L(),[t,e]=react.useState(false),[n,r]=react.useState(null),[a,i]=react.useState(false),l=react.useCallback(async c=>{e(true),r(null);try{await s.auth.requestMagicLink({email:c}),i(!0);}catch(u){throw r(u instanceof Error?u:new Error("Failed to send magic link")),u}finally{e(false);}},[s]),o=react.useCallback(async c=>{e(true),r(null);try{return await s.auth.verifyMagicLink({token:c})}catch(u){throw r(u instanceof Error?u:new Error("Failed to verify magic link")),u}finally{e(false);}},[s]);return {sendMagicLink:l,verifyMagicLink:o,isLoading:t,error:n,isSent:a}}function we(){let{client:s}=L(),[t,e]=react.useState(false),[n,r]=react.useState(null);return {signInWithOAuth:react.useCallback(async(i,l)=>{e(true),r(null);try{let o=await s.auth.getOAuthSignInUrl({provider:i,redirectUrl:l});o.url&&(window.location.href=o.url);}catch(o){throw r(o instanceof Error?o:new Error("Failed to start OAuth flow")),o}finally{e(false);}},[s]),isLoading:t,error:n}}function Oe(){let{client:s}=L(),[t,e]=react.useState(false),[n,r]=react.useState(null),a=react.useCallback(async o=>{e(true),r(null);try{return await s.auth.setupMFA(o)}catch(c){throw r(c instanceof Error?c:new Error("Failed to setup MFA")),c}finally{e(false);}},[s]),i=react.useCallback(async(o,c)=>{e(true),r(null);try{return await s.auth.verifyMFA(o,c)}catch(u){throw r(u instanceof Error?u:new Error("Failed to verify MFA")),u}finally{e(false);}},[s]),l=react.useCallback(async o=>{e(true),r(null);try{await s.auth.disableMFA(o);}catch(c){throw r(c instanceof Error?c:new Error("Failed to disable MFA")),c}finally{e(false);}},[s]);return {setup:a,verify:i,disable:l,isLoading:t,error:n}}var Pe=new Map;function At(s,t){return `${s}:${JSON.stringify(t||{})}`}function ve(s,t){let e=E(),[n,r]=react.useState(t?.initialData||[]),[a,i]=react.useState(null),[l,o]=react.useState(t?.enabled===false?"idle":"loading"),[c,u]=react.useState(false),[f,p]=react.useState(true),d=react.useRef(0),g=t?.enabled!==false,m=t?.staleTime??0,T=t?.keepPreviousData??false,h=react.useCallback(async()=>{if(!g)return;let b={where:t?.where,orderBy:t?.orderBy,limit:t?.limit,offset:t?.offset,select:t?.select,include:t?.include,distinct:t?.distinct},y=At(s,b),w=Pe.get(y);if(w&&Date.now()-w.timestamp<m){r(w.data),o("success"),p(false);return}u(true),T||o("loading"),i(null);try{let v=await e.from(s).list(b);r(v.data),o("success"),p(!1),d.current=Date.now(),Pe.set(y,{data:v.data,timestamp:Date.now()}),t?.onSuccess?.(v.data);}catch(v){let R=v instanceof Error?v:new Error("Query failed");i(R),o("error"),t?.onError?.(R);}finally{u(false);}},[e,s,t,g,m,T]);return react.useEffect(()=>{h();},[h]),react.useEffect(()=>{if(!t?.refetchOnWindowFocus||!g)return;let b=()=>{Date.now()-d.current>m&&(p(true),h());};return window.addEventListener("focus",b),()=>window.removeEventListener("focus",b)},[t?.refetchOnWindowFocus,g,m,h]),react.useEffect(()=>{if(!t?.refetchInterval||t.refetchInterval<=0||!g)return;let b=setInterval(()=>{p(true),h();},t.refetchInterval);return ()=>clearInterval(b)},[t?.refetchInterval,g,h]),{data:n,isLoading:l==="loading",isFetching:c,error:a,status:l,refetch:h,isStale:f,isEnabled:g}}function Ue(s,t,e){let n=E(),[r,a]=react.useState(null),[i,l]=react.useState(null),[o,c]=react.useState(!!t&&e?.enabled!==false),[u,f]=react.useState(false),p=!!t&&e?.enabled!==false,d=react.useCallback(async()=>{if(!(!p||!t)){c(true),l(null),f(false);try{let g=await n.from(s).get(t);a(g.data);}catch(g){let m=g instanceof Error?g:new Error("Query failed");m.message.includes("not found")||m.message.includes("404")?f(true):l(m);}finally{c(false);}}},[n,s,t,p]);return react.useEffect(()=>{d();},[d]),{data:r,isLoading:o,error:i,isNotFound:u,refetch:d}}function te(s,t,e){let n=s.from(t);if(e?.where){let r=Array.isArray(e.where)?{AND:e.where}:e.where;n=n.where(r);}if(e?.orderBy){let r=Array.isArray(e.orderBy)?e.orderBy:[e.orderBy];for(let a of r)n=n.orderBy(a.field,a.direction);}if(e?.select&&(n=n.select(...e.select)),e?.include)for(let r of e.include)n=n.include(r);return n}function Ee(s,t){let e=E(),[n,r]=react.useState(null),[a,i]=react.useState(null),[l,o]=react.useState(t?.enabled!==false),[c,u]=react.useState(false),f=t?.enabled!==false,p=react.useCallback(async()=>{if(f){o(true),i(null),u(false);try{let g=await te(e,s,{where:t?.where,orderBy:t?.orderBy,select:t?.select,include:t?.include}).first();g?r(g):u(!0);}catch(d){let g=d instanceof Error?d:new Error("Query failed");i(g);}finally{o(false);}}},[e,s,t,f]);return react.useEffect(()=>{p();},[p]),{data:n,isLoading:l,error:a,isNotFound:c,refetch:p}}function Re(s,t){let e=E(),[n,r]=react.useState([]),[a,i]=react.useState(t?.initialPage??1),[l,o]=react.useState(null),[c,u]=react.useState(true),[f,p]=react.useState(null),d=t?.pageSize??10,g=react.useCallback(async S=>{u(true),p(null);try{let O=await te(e,s,{where:t?.where,orderBy:t?.orderBy,select:t?.select,include:t?.include}).paginate({page:S,pageSize:d});r(O.data),o(O.pageInfo),i(O.pageInfo.page),t?.onSuccess?.(O);}catch(U){let O=U instanceof Error?U:new Error("Query failed");p(O),t?.onError?.(O);}finally{u(false);}},[e,s,t,d]);react.useEffect(()=>{g(a);},[g,a]);let m=l?.total??0,T=l?.pageCount??0,h=l?.hasNextPage??false,b=l?.hasPrevPage??false,y=react.useCallback(()=>{h&&i(S=>S+1);},[h]),w=react.useCallback(()=>{b&&i(S=>S-1);},[b]),v=react.useCallback(S=>{let U=Math.max(1,Math.min(S,T||1));i(U);},[T]),R=react.useCallback(()=>g(a),[g,a]);return {data:n,page:a,pageSize:d,totalCount:m,totalPages:T,hasNextPage:h,hasPrevPage:b,isLoading:c,error:f,nextPage:y,prevPage:w,goToPage:v,refetch:R}}function ke(s,t){let e=E(),[n,r]=react.useState([]),[a,i]=react.useState(null),[l,o]=react.useState(true),[c,u]=react.useState(true),[f,p]=react.useState(false),[d,g]=react.useState(null),m=t?.pageSize??20,T=react.useCallback(async()=>{if(!l)return;n.length===0?u(true):p(true),g(null);try{let R=await te(e,s,{where:t?.where,orderBy:t?.orderBy,select:t?.select,include:t?.include}).cursorPaginate({cursor:a??void 0,limit:m});r(S=>[...S,R.data]),i(R.nextCursor??null),o(R.hasMore),t?.onSuccess?.(R.data,R.hasMore);}catch(v){let R=v instanceof Error?v:new Error("Query failed");g(R),t?.onError?.(R);}finally{u(false),p(false);}},[e,s,t,a,l,n.length,m]);react.useEffect(()=>{T();},[]);let h=react.useCallback(async()=>{r([]),i(null),o(true),u(true);try{let v=await te(e,s,{where:t?.where,orderBy:t?.orderBy,select:t?.select,include:t?.include}).cursorPaginate({limit:m});r([v.data]),i(v.nextCursor??null),o(v.hasMore);}catch(w){g(w instanceof Error?w:new Error("Query failed"));}finally{u(false);}},[e,s,t,m]),b=react.useCallback(()=>{r([]),i(null),o(true),u(true),g(null);},[]);return {data:n.flat(),pages:n,hasNextPage:l,isLoading:c,isFetchingNextPage:f,error:d,fetchNextPage:T,refetch:h,reset:b}}function Ie(s,t){let e=E(),[n,r]=react.useState(0),[a,i]=react.useState(t?.enabled!==false),[l,o]=react.useState(null),c=t?.enabled!==false,u=react.useCallback(async()=>{if(c){i(true),o(null);try{let f=e.from(s);t?.where&&(f=f.where(t.where));let p=await f.count();r(p);}catch(f){o(f instanceof Error?f:new Error("Count failed"));}finally{i(false);}}},[e,s,t?.where,c]);return react.useEffect(()=>{u();},[u]),{count:n,isLoading:a,error:l,refetch:u}}function j(s,t){let[e,n]=react.useState("idle"),[r,a]=react.useState(void 0),[i,l]=react.useState(null),o=react.useRef(0),c=react.useCallback(()=>{n("idle"),a(void 0),l(null),o.current=0;},[]),u=react.useCallback(async p=>{n("loading"),l(null);try{await t?.onMutate?.(p);let d=await s(p);return a(d),n("success"),o.current=0,await t?.onSuccess?.(d,p),await t?.onSettled?.(d,null,p),d}catch(d){let g=d instanceof Error?d:new Error("Mutation failed"),m=t?.retry??0;if(o.current<m){o.current++;let T=t?.retryDelay??1e3;return await new Promise(h=>setTimeout(h,T)),u(p)}throw l(g),n("error"),await t?.onError?.(g,p),await t?.onSettled?.(void 0,g,p),g}},[s,t]);return {mutate:react.useCallback(p=>{u(p).catch(()=>{});},[u]),mutateAsync:u,data:r,error:i,isLoading:e==="loading",isSuccess:e==="success",isError:e==="error",isIdle:e==="idle",status:e,reset:c}}function $e(s,t){let e=E();return j(async n=>(await e.from(s).create(n)).data,t)}function xe(s,t){let e=E();return j(async({id:n,data:r})=>(await e.from(s).update(n,r)).data,t)}function De(s,t){let e=E();return j(async n=>{await e.from(s).delete(n);},t)}function Fe(s,t){let e=E();return j(async({data:n,conflictFields:r,updateFields:a})=>{let i={conflictFields:r,updateFields:a};return (await e.from(s).upsert(n,i)).data},t)}function Me(s,t){let e=E();return j(async n=>{let r=await e.from(s).createMany(n);return {count:r.count,records:r.records}},t)}function Ae(s,t){let e=E();return j(async({data:n,where:r})=>{let a=await e.from(s).where(r).updateMany(n);return {count:a.count,records:a.records}},t)}function Le(s,t){let e=E();return j(async n=>({count:(await e.from(s).where(n).deleteMany()).count}),t)}function Ne(s,t,e){let[n,r]=react.useState(s),[a,i]=react.useState(false),[l,o]=react.useState(null),c=react.useRef(s),u=react.useCallback(()=>{r(c.current);},[]),f=react.useCallback(async d=>{i(true),o(null),c.current=n;let g=e.optimisticUpdate(n,d);r(g);try{let m=await t(d);return r(m),e.onSuccess?.(m,d),e.onSettled?.(m,null,d),m}catch(m){let T=m instanceof Error?m:new Error("Mutation failed");throw o(T),u(),e.onError?.(T,d),e.onSettled?.(void 0,T,d),T}finally{i(false);}},[n,t,e,u]);return {mutate:react.useCallback(d=>{f(d).catch(()=>{});},[f]),mutateAsync:f,optimisticData:n,rollback:u,isLoading:a,error:l}}function Je(s,t){let e=E(),[n,r]=react.useState(null),[a,i]=react.useState([]),[l,o]=react.useState(false),c=react.useRef(null),u=react.useRef(null),f=t?.enabled!==false;react.useEffect(()=>{if(!f)return;let d=e.realtime();c.current=d;let g=d.channel(`table:${s}`);return u.current=g,g.onDbChange({table:s,event:t?.operations||"*"},m=>{switch(m.new!==void 0&&r(m.new),i(T=>[...T,m]),m.operation){case "INSERT":m.new&&t?.onInsert?.(m.new);break;case "UPDATE":m.new&&t?.onUpdate?.(m.new,m.old??null);break;case "DELETE":m.old&&t?.onDelete?.(m.old);break}t?.onChange?.(m);}),g.subscribe(),o(true),()=>{g.unsubscribe(),d.disconnect(),o(false);}},[e,s,f,t]);let p=react.useCallback(()=>{i([]);},[]);return {data:n,changes:a,isSubscribed:l,clearChanges:p}}function ce(s,t){let e=E(),[n,r]=react.useState(null),[a,i]=react.useState([]),[l,o]=react.useState(false),c=react.useRef(null),u=react.useRef(null),f=t?.enabled!==false;react.useEffect(()=>{if(!f)return;let g=e.realtime();c.current=g;let m=g.channel(s,{type:t?.type||"public"});return u.current=m,m.on("*",T=>{let h={event:"*",payload:T};r(h),i(b=>[...b,h]);}),m.subscribe(),o(true),()=>{m.unsubscribe(),g.disconnect(),o(false);}},[e,s,f,t?.type]);let p=react.useCallback((g,m)=>{u.current?.broadcast({event:g,payload:m});},[]),d=react.useCallback(()=>{u.current?.unsubscribe(),o(false);},[]);return {broadcast:p,lastMessage:n,messages:a,isJoined:l,leave:d}}function Ve(s,t,e){let n=E(),[r,a]=react.useState({}),[i,l]=react.useState(false),o=react.useRef(null),c=react.useRef(null),u=e?.enabled!==false;react.useEffect(()=>{if(!u)return;let m=n.realtime();o.current=m;let T=m.channel(s,{type:"presence"});return c.current=T,T.presence.onSync(h=>{a(h);}),T.subscribe(),t&&(T.presence.track({state:t}),l(true)),()=>{T.unsubscribe(),m.disconnect(),l(false);}},[n,s,u,t]);let f=react.useCallback(m=>{c.current?.presence.update(m);},[]),p=react.useCallback(()=>{c.current?.presence.untrack(),l(false);},[]),d=Object.keys(r).length,g=Object.keys(r);return {presence:r,count:d,onlineUsers:g,update:f,leave:p,isTracking:i}}function Be(){let s=E(),[t,e]=react.useState("disconnected"),[n,r]=react.useState(null),a=react.useRef(null);react.useEffect(()=>{let o=s.realtime();return a.current=o,e(o.connectionState),r(o.connectionId),o.on("connect",()=>{e("connected"),r(o.connectionId);}),o.on("disconnect",()=>{e("disconnected"),r(null);}),o.on("reconnect",()=>{e("connected"),r(o.connectionId);}),o.on("error",()=>{e("disconnected");}),()=>{o.disconnect();}},[s]);let i=react.useCallback(()=>{a.current?.connect();},[]),l=react.useCallback(()=>{a.current?.disconnect();},[]);return {state:t,isConnected:t==="connected",connectionId:n,reconnect:i,disconnect:l}}function je(s,t){let e=ce(s,t);return {send:e.broadcast,messages:e.messages,lastMessage:e.lastMessage,isConnected:e.isJoined}}function le(s){let t=E(),[e,n]=react.useState(0),[r,a]=react.useState(false),[i,l]=react.useState(null),[o,c]=react.useState(null),[u,f]=react.useState([]),p=react.useCallback(T=>{if(s?.maxSize&&T.size>s.maxSize)throw new Error(`File size (${Math.round(T.size/1024/1024)}MB) exceeds maximum allowed (${Math.round(s.maxSize/1024/1024)}MB)`);if(s?.allowedTypes&&s.allowedTypes.length>0&&!s.allowedTypes.includes(T.type))throw new Error(`File type "${T.type}" is not allowed. Allowed types: ${s.allowedTypes.join(", ")}`)},[s?.maxSize,s?.allowedTypes]),d=react.useCallback(async(T,h)=>{a(true),l(null),n(0);try{p(h),s?.onUploadStart?.(h);let b=await t.storage.upload(T,h,{contentType:h.type,metadata:s?.metadata,isPublic:s?.isPublic});return n(100),c(b),f(y=>[...y,b]),s?.onSuccess?.(b,h),b}catch(b){let y=b instanceof Error?b:new Error("Upload failed");throw l(y),s?.onError?.(y,h),y}finally{a(false);}},[t,s,p]),g=react.useCallback(async T=>{let h=[];for(let{key:b,file:y}of T){let w=await d(b,y);h.push(w);}return h},[d]),m=react.useCallback(()=>{n(0),a(false),l(null),c(null),f([]);},[]);return {upload:d,uploadMultiple:g,progress:e,isUploading:r,error:i,result:o,results:u,reset:m}}function qe(s){let t=E(),[e,n]=react.useState(false),[r,a]=react.useState(null),i=react.useCallback(async(o,c)=>{n(true),a(null);try{let u=await t.storage.download(o);return s?.onSuccess?.(u,c||o.split("/").pop()||"download"),u}catch(u){let f=u instanceof Error?u:new Error("Download failed");throw a(f),s?.onError?.(f),f}finally{n(false);}},[t,s]),l=react.useCallback(async(o,c)=>{let u=await i(o,c),f=c||o.split("/").pop()||"download",p=URL.createObjectURL(u),d=document.createElement("a");d.href=p,d.download=f,document.body.appendChild(d),d.click(),document.body.removeChild(d),URL.revokeObjectURL(p);},[i]);return {download:i,downloadAndSave:l,isDownloading:e,error:r}}function Qe(s,t){let e=E(),[n,r]=react.useState(null),[a,i]=react.useState(null),[l,o]=react.useState(!!s&&t?.enabled!==false),[c,u]=react.useState(null),f=!!s&&t?.enabled!==false,p=react.useCallback(async()=>{if(!(!f||!s)){o(true),u(null);try{let g=await e.storage.createSignedUrl(s,t?.expiresIn);r(g);let m=await e.storage.getMetadata(s);i(m);}catch(g){u(g instanceof Error?g:new Error("Failed to load file"));}finally{o(false);}}},[e,s,t?.expiresIn,f]),d=react.useCallback(async()=>{s&&(await e.storage.delete(s),r(null),i(null));},[e,s]);return {url:n,metadata:a,isLoading:l,error:c,refresh:p,deleteFile:d}}function ze(s){let t=E(),[e,n]=react.useState([]),[r,a]=react.useState(s?.enabled!==false),[i,l]=react.useState(null),o=s?.enabled!==false,c=react.useCallback(async()=>{if(o){a(true),l(null);try{let u=await t.storage.list({prefix:s?.prefix,limit:s?.limit});n(u.files);}catch(u){l(u instanceof Error?u:new Error("Failed to list files"));}finally{a(false);}}},[t,s,o]);return {files:e,isLoading:r,error:i,refresh:c}}function He(s){let t=le(s),[e,n]=react.useState(false),[r,a]=react.useState([]),i=react.useRef(null),l=react.useCallback(h=>{h.preventDefault(),h.stopPropagation(),n(true);},[]),o=react.useCallback(h=>{h.preventDefault(),h.stopPropagation(),n(false);},[]),c=react.useCallback(h=>{let b=s?.basePath||"uploads",y=Date.now().toString(36)+Math.random().toString(36).substr(2,9),w=h.name.split(".").pop()||"";return s?.uniqueKey?`${b}/${y}.${w}`:`${b}/${h.name}`},[s?.basePath,s?.uniqueKey]),u=react.useCallback(async h=>{h.preventDefault(),h.stopPropagation(),n(false);let b=Array.from(h.dataTransfer.files);if(b.length===0)return;let y=s?.multiple?b:[b[0]];a(y),await t.uploadMultiple(y.map(w=>({key:c(w),file:w})));},[s?.multiple,t,c]),f=react.useCallback(async h=>{let b=Array.from(h.target.files||[]);b.length!==0&&(a(b),await t.uploadMultiple(b.map(y=>({key:c(y),file:y}))));},[t,c]),p=react.useCallback(()=>{i.current?.click();},[]),d=react.useCallback(()=>{a([]),t.reset();},[t]),g=react.useCallback(h=>{a(b=>b.filter((y,w)=>w!==h));},[]),m=react.useCallback(()=>({onDragOver:l,onDragLeave:o,onDrop:u,onClick:p}),[l,o,u,p]),T=react.useCallback(()=>({type:"file",onChange:f,multiple:s?.multiple??false,accept:s?.allowedTypes?.join(",")??"",style:{display:"none"},ref:h=>{i.current=h;}}),[f,s?.multiple,s?.allowedTypes]);return {...t,dropzone:{isDragOver:e,selectedFiles:r},getDropzoneProps:m,getInputProps:T,openFilePicker:p,clearFiles:d,removeFile:g}}function We(s){return E().storage.getPublicUrl(s)}var re=new Map;function Ke(s,t){let e=E(),[n,r]=react.useState(null),[a,i]=react.useState(false),[l,o]=react.useState(null),[c,u]=react.useState(false),[f,p]=react.useState(null),d=react.useRef(0),g=react.useCallback(async T=>{i(true),o(null),u(false);try{let h={timeout:t?.timeout,includeLogs:t?.includeLogs,version:t?.version};t?.retry&&(h.retry={maxRetries:t.maxRetries??3});let b=await e.functions.invoke(s,{body:T},h);return r(b.data),p(b),u(!0),d.current=0,t?.onSuccess?.(b.data,T),b.data}catch(h){let b=h instanceof Error?h:new Error("Function invocation failed");throw o(b),t?.onError?.(b,T),b}finally{i(false);}},[e,s,t]),m=react.useCallback(()=>{r(null),i(false),o(null),u(false),p(null),d.current=0;},[]);return {invoke:g,data:n,isLoading:a,error:l,isSuccess:c,invocation:f,reset:m}}function _e(s,t){let e=E(),[n,r]=react.useState(null),[a,i]=react.useState(false),[l,o]=react.useState(null),[c,u]=react.useState(false),[f,p]=react.useState(null),d=t?.cache??false,g=t?.cacheTtl??6e4,m=react.useCallback(y=>`${s}:${JSON.stringify(y)}`,[s]),T=react.useCallback(async y=>{if(d){let w=m(y),v=re.get(w);if(v&&Date.now()-v.timestamp<g){let R=v.data;return r(R),u(true),t?.onSuccess?.(R,y),R}}i(true),o(null),u(false);try{let w={timeout:t?.timeout,includeLogs:t?.includeLogs,version:t?.version};t?.retry&&(w.retry={maxRetries:t.maxRetries??3});let R=await e.functions.rpc(s,w)(y);if(r(R),u(!0),d){let S=m(y);re.set(S,{data:R,timestamp:Date.now()});}return t?.onSuccess?.(R,y),R}catch(w){let v=w instanceof Error?w:new Error("RPC call failed");throw o(v),t?.onError?.(v,y),v}finally{i(false);}},[e,s,t,d,g,m]),h=react.useCallback(()=>{let y=`${s}:`;for(let w of re.keys())w.startsWith(y)&&re.delete(w);},[s]),b=react.useCallback(()=>{r(null),i(false),o(null),u(false),p(null);},[]);return {invoke:T,data:n,isLoading:a,error:l,isSuccess:c,invocation:f,reset:b,clearCache:h}}function Ge(s){let t=E(),[e,n]=react.useState([]),[r,a]=react.useState(true),[i,l]=react.useState(null),o=react.useCallback(async()=>{a(true),l(null);try{let c=await t.functions.list({projectId:s.projectId,envId:s.envId,enabled:s.enabled,limit:s.limit,offset:s.offset});n(c);}catch(c){l(c instanceof Error?c:new Error("Failed to list functions"));}finally{a(false);}},[t,s.projectId,s.envId,s.enabled,s.limit,s.offset]);return react.useEffect(()=>{o();},[o]),{functions:e,isLoading:r,error:i,refresh:o}}function Xe(s,t){let e=E(),[n,r]=react.useState([]),[a,i]=react.useState(false),[l,o]=react.useState(0),[c,u]=react.useState(null);return {invoke:react.useCallback(async p=>{i(true),u(null),o(0),r([]);let d=[],g=t?.concurrency??5,m=p.length,T=0;try{for(let h=0;h<p.length;h+=g){let b=p.slice(h,h+g),y=await Promise.all(b.map(async w=>(await e.functions.invoke(s,{body:w})).data));d.push(...y),T+=b.length,o(Math.round(T/m*100)),r([...d]),t?.onProgress?.(T,m);}return t?.onSuccess?.(d),d}catch(h){let b=h instanceof Error?h:new Error("Batch invocation failed");throw u(b),t?.onError?.(b),b}finally{i(false);}},[e,s,t]),results:n,isLoading:a,progress:l,error:c}}function Ze(s){let t=E(),[e,n]=react.useState(false),[r,a]=react.useState(null),[i,l]=react.useState(null),[o,c]=react.useState(null),u=react.useCallback(async(p,d)=>{c(null);try{let m=(await t.functions.invoke(s,{body:p})).requestId??`scheduled-${Date.now()}`;return l(m),n(!0),a(new Date(Date.now()+d.delayMs)),m}catch(g){let m=g instanceof Error?g:new Error("Failed to schedule function");throw c(m),m}},[t,s]),f=react.useCallback(async()=>{n(false),a(null),l(null);},[]);return {schedule:u,cancel:f,isScheduled:e,scheduledAt:r,requestId:i,error:o}}exports.VaifProvider=fe;exports.useAuth=ge;exports.useBatchCreate=Me;exports.useBatchDelete=Le;exports.useBatchInvoke=Xe;exports.useBatchUpdate=Ae;exports.useBroadcast=je;exports.useChannel=ce;exports.useCount=Ie;exports.useCreate=$e;exports.useDelete=De;exports.useDownload=qe;exports.useDropzone=He;exports.useEmailVerification=Te;exports.useFile=Qe;exports.useFiles=ze;exports.useFunction=Ke;exports.useFunctionList=Ge;exports.useInfiniteQuery=ke;exports.useMFA=Oe;exports.useMagicLink=Se;exports.useMutation=j;exports.useOAuth=we;exports.useOptimisticMutation=Ne;exports.usePaginatedQuery=Re;exports.usePasswordReset=be;exports.usePresence=Ve;exports.usePublicUrl=We;exports.useQuery=ve;exports.useQueryById=Ue;exports.useQueryFirst=Ee;exports.useRealtimeConnection=Be;exports.useRpc=_e;exports.useScheduledFunction=Ze;exports.useSubscription=Je;exports.useToken=he;exports.useUpdate=xe;exports.useUpload=le;exports.useUpsert=Fe;exports.useUser=me;exports.useVaif=L;exports.useVaifClient=E;
|
|
1
|
+
'use strict';var react$1=require('react'),client=require('@vaiftech/client'),jsxRuntime=require('react/jsx-runtime'),react=require('@vaiftech/auth/react');var te=react$1.createContext(null);function ne({config:t,children:e,onAuthStateChange:n,autoRefreshSession:o=true,storageKey:r="vaif-auth"}){let[a]=react$1.useState(()=>client.createVaifClient(t)),[u,d]=react$1.useState(null),[s,l]=react$1.useState(null),[i,h]=react$1.useState(null),[f,c]=react$1.useState(null),[y,g]=react$1.useState(true),T=react$1.useRef(null),p=react$1.useCallback((x,M,F)=>{let U={token:x,refreshToken:M,expiresAt:F};localStorage.setItem(r,JSON.stringify(U));},[r]),m=react$1.useCallback(()=>{localStorage.removeItem(r),d(null),l(null),h(null),c(null);},[r]);react$1.useEffect(()=>((async()=>{try{let M=localStorage.getItem(r);if(!M){g(!1);return}let F=JSON.parse(M);if(F.expiresAt&&new Date(F.expiresAt)<=new Date)if(F.refreshToken)try{let U=await a.auth.refreshToken(F.refreshToken);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();else {l(F.token),h(F.refreshToken??null),c(F.expiresAt??null);try{let U=await a.auth.getUser();d(U);}catch{if(F.refreshToken)try{let U=await a.auth.refreshToken(F.refreshToken);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();}}}catch{m();}finally{g(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[a,r,p,m]),react$1.useEffect(()=>{if(!o||!f||!i)return;let x=new Date(f).getTime(),M=Date.now(),F=x-M-6e4;return F>0&&(T.current=setTimeout(async()=>{try{let U=await a.auth.refreshToken(i);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);}catch{m();}},F)),()=>{T.current&&clearTimeout(T.current);}},[o,a,f,i,p,m]),react$1.useEffect(()=>{y||n?.(u);},[u,y,n]);let b=react$1.useCallback(async(x,M)=>{let F=await a.auth.login(x,M);if("mfaRequired"in F)throw new Error("MFA required - use verifyMFA to complete login");let U=F;return d(U.user),l(U.token),h(U.refreshToken??null),c(U.expiresAt??null),p(U.token,U.refreshToken,U.expiresAt),U},[a,p]),w=react$1.useCallback(async(x,M,F)=>{let U=await a.auth.signUp(x,M,{metadata:F});return d(U.user),l(U.token),h(U.refreshToken??null),c(U.expiresAt??null),p(U.token,U.refreshToken,U.expiresAt),U},[a,p]),v=react$1.useCallback(async()=>{try{await a.auth.logout();}finally{m();}},[a,m]),E=react$1.useCallback(async()=>{if(!i)throw new Error("No refresh token available");let x=await a.auth.refreshToken(i);l(x.token),h(x.refreshToken??null),c(x.expiresAt),p(x.token,x.refreshToken,x.expiresAt);},[a,i,p]),C=react$1.useCallback(x=>{d(M=>M?{...M,...x}:null);},[]),q={client:a,user:u,token:s,isLoading:y,isAuthenticated:!!u,signIn:b,signUp:w,signOut:v,refreshSession:E,updateUser:C};return jsxRuntime.jsx(te.Provider,{value:q,children:e})}function D(){let t=react$1.useContext(te);if(!t)throw new Error("useVaif must be used within a VaifProvider");return t}function R(){let{client:t}=D();return t}function re(){let{user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}=D();return {user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}}function se(){let{user:t}=D();return t}function oe(){let{token:t}=D();return t}function ae(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(false),l=react$1.useCallback(async h=>{n(true),r(null);try{await t.auth.requestPasswordReset({email:h}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to request reset")),f}finally{n(false);}},[t]),i=react$1.useCallback(async(h,f)=>{n(true),r(null);try{await t.auth.confirmPasswordReset({token:h,password:f}),s(!0);}catch(c){throw r(c instanceof Error?c:new Error("Failed to reset password")),c}finally{n(false);}},[t]);return {requestReset:l,confirmReset:i,isLoading:e,error:o,isRequested:a,isConfirmed:d}}function ie(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(false),l=react$1.useCallback(async h=>{n(true),r(null);try{await t.auth.requestEmailVerification({email:h}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to send verification")),f}finally{n(false);}},[t]),i=react$1.useCallback(async h=>{n(true),r(null);try{await t.auth.confirmEmailVerification({token:h}),s(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to verify email")),f}finally{n(false);}},[t]);return {requestVerification:l,confirmVerification:i,isLoading:e,error:o,isSent:a,isVerified:d}}function le(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),d=react$1.useCallback(async l=>{n(true),r(null);try{await t.auth.requestMagicLink({email:l}),u(!0);}catch(i){throw r(i instanceof Error?i:new Error("Failed to send magic link")),i}finally{n(false);}},[t]),s=react$1.useCallback(async l=>{n(true),r(null);try{return await t.auth.verifyMagicLink({token:l})}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify magic link")),i}finally{n(false);}},[t]);return {sendMagicLink:d,verifyMagicLink:s,isLoading:e,error:o,isSent:a}}function ue(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null);return {signInWithOAuth:react$1.useCallback(async(u,d)=>{n(true),r(null);try{let s=await t.auth.getOAuthSignInUrl({provider:u,redirectUrl:d});s.url&&(window.location.href=s.url);}catch(s){throw r(s instanceof Error?s:new Error("Failed to start OAuth flow")),s}finally{n(false);}},[t]),isLoading:e,error:o}}function ce(){let{client:t}=D(),[e,n]=react$1.useState(false),[o,r]=react$1.useState(null),a=react$1.useCallback(async s=>{n(true),r(null);try{return await t.auth.setupMFA(s)}catch(l){throw r(l instanceof Error?l:new Error("Failed to setup MFA")),l}finally{n(false);}},[t]),u=react$1.useCallback(async(s,l)=>{n(true),r(null);try{return await t.auth.verifyMFA(s,l)}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify MFA")),i}finally{n(false);}},[t]),d=react$1.useCallback(async s=>{n(true),r(null);try{await t.auth.disableMFA(s);}catch(l){throw r(l instanceof Error?l:new Error("Failed to disable MFA")),l}finally{n(false);}},[t]);return {setup:a,verify:u,disable:d,isLoading:e,error:o}}var de=new Map;function He(t,e){return `${t}:${JSON.stringify(e||{})}`}function fe(t,e){let n=R(),[o,r]=react$1.useState(e?.initialData||[]),[a,u]=react$1.useState(null),[d,s]=react$1.useState(e?.enabled===false?"idle":"loading"),[l,i]=react$1.useState(false),[h,f]=react$1.useState(true),c=react$1.useRef(0),y=e?.enabled!==false,g=e?.staleTime??0,T=e?.keepPreviousData??false,p=react$1.useCallback(async()=>{if(!y)return;let m={where:e?.where,orderBy:e?.orderBy,limit:e?.limit,offset:e?.offset,select:e?.select,include:e?.include,distinct:e?.distinct},b=He(t,m),w=de.get(b);if(w&&Date.now()-w.timestamp<g){r(w.data),s("success"),f(false);return}i(true),T||s("loading"),u(null);try{let v=await n.from(t).list(m);r(v.data),s("success"),f(!1),c.current=Date.now(),de.set(b,{data:v.data,timestamp:Date.now()}),e?.onSuccess?.(v.data);}catch(v){let E=v instanceof Error?v:new Error("Query failed");u(E),s("error"),e?.onError?.(E);}finally{i(false);}},[n,t,e,y,g,T]);return react$1.useEffect(()=>{p();},[p]),react$1.useEffect(()=>{if(!e?.refetchOnWindowFocus||!y)return;let m=()=>{Date.now()-c.current>g&&(f(true),p());};return window.addEventListener("focus",m),()=>window.removeEventListener("focus",m)},[e?.refetchOnWindowFocus,y,g,p]),react$1.useEffect(()=>{if(!e?.refetchInterval||e.refetchInterval<=0||!y)return;let m=setInterval(()=>{f(true),p();},e.refetchInterval);return ()=>clearInterval(m)},[e?.refetchInterval,y,p]),{data:o,isLoading:d==="loading",isFetching:l,error:a,status:d,refetch:p,isStale:h,isEnabled:y}}function pe(t,e,n){let o=R(),[r,a]=react$1.useState(null),[u,d]=react$1.useState(null),[s,l]=react$1.useState(!!e&&n?.enabled!==false),[i,h]=react$1.useState(false),f=!!e&&n?.enabled!==false,c=react$1.useCallback(async()=>{if(!(!f||!e)){l(true),d(null),h(false);try{let y=await o.from(t).get(e);a(y.data);}catch(y){let g=y instanceof Error?y:new Error("Query failed");g.message.includes("not found")||g.message.includes("404")?h(true):d(g);}finally{l(false);}}},[o,t,e,f]);return react$1.useEffect(()=>{c();},[c]),{data:r,isLoading:s,error:u,isNotFound:i,refetch:c}}function K(t,e,n){let o=t.from(e);if(n?.where){let r=Array.isArray(n.where)?{AND:n.where}:n.where;o=o.where(r);}if(n?.orderBy){let r=Array.isArray(n.orderBy)?n.orderBy:[n.orderBy];for(let a of r)o=o.orderBy(a.field,a.direction);}if(n?.select&&(o=o.select(...n.select)),n?.include)for(let r of n.include)o=o.include(r);return o}function ge(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(null),[d,s]=react$1.useState(e?.enabled!==false),[l,i]=react$1.useState(false),h=e?.enabled!==false,f=react$1.useCallback(async()=>{if(h){s(true),u(null),i(false);try{let y=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).first();y?r(y):i(!0);}catch(c){let y=c instanceof Error?c:new Error("Query failed");u(y);}finally{s(false);}}},[n,t,e,h]);return react$1.useEffect(()=>{f();},[f]),{data:o,isLoading:d,error:a,isNotFound:l,refetch:f}}function ye(t,e){let n=R(),[o,r]=react$1.useState([]),[a,u]=react$1.useState(e?.initialPage??1),[d,s]=react$1.useState(null),[l,i]=react$1.useState(true),[h,f]=react$1.useState(null),c=e?.pageSize??10,y=react$1.useCallback(async C=>{i(true),f(null);try{let x=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).paginate({page:C,pageSize:c});r(x.data),s(x.pageInfo),u(x.pageInfo.page),e?.onSuccess?.(x);}catch(q){let x=q instanceof Error?q:new Error("Query failed");f(x),e?.onError?.(x);}finally{i(false);}},[n,t,e,c]);react$1.useEffect(()=>{y(a);},[y,a]);let g=d?.total??0,T=d?.pageCount??0,p=d?.hasNextPage??false,m=d?.hasPrevPage??false,b=react$1.useCallback(()=>{p&&u(C=>C+1);},[p]),w=react$1.useCallback(()=>{m&&u(C=>C-1);},[m]),v=react$1.useCallback(C=>{let q=Math.max(1,Math.min(C,T||1));u(q);},[T]),E=react$1.useCallback(()=>y(a),[y,a]);return {data:o,page:a,pageSize:c,totalCount:g,totalPages:T,hasNextPage:p,hasPrevPage:m,isLoading:l,error:h,nextPage:b,prevPage:w,goToPage:v,refetch:E}}function he(t,e){let n=R(),[o,r]=react$1.useState([]),[a,u]=react$1.useState(null),[d,s]=react$1.useState(true),[l,i]=react$1.useState(true),[h,f]=react$1.useState(false),[c,y]=react$1.useState(null),g=e?.pageSize??20,T=react$1.useCallback(async()=>{if(!d)return;o.length===0?i(true):f(true),y(null);try{let E=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({cursor:a??void 0,limit:g});r(C=>[...C,E.data]),u(E.nextCursor??null),s(E.hasMore),e?.onSuccess?.(E.data,E.hasMore);}catch(v){let E=v instanceof Error?v:new Error("Query failed");y(E),e?.onError?.(E);}finally{i(false),f(false);}},[n,t,e,a,d,o.length,g]);react$1.useEffect(()=>{T();},[]);let p=react$1.useCallback(async()=>{r([]),u(null),s(true),i(true);try{let v=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({limit:g});r([v.data]),u(v.nextCursor??null),s(v.hasMore);}catch(w){y(w instanceof Error?w:new Error("Query failed"));}finally{i(false);}},[n,t,e,g]),m=react$1.useCallback(()=>{r([]),u(null),s(true),i(true),y(null);},[]);return {data:o.flat(),pages:o,hasNextPage:d,isLoading:l,isFetchingNextPage:h,error:c,fetchNextPage:T,refetch:p,reset:m}}function me(t,e){let n=R(),[o,r]=react$1.useState(0),[a,u]=react$1.useState(e?.enabled!==false),[d,s]=react$1.useState(null),l=e?.enabled!==false,i=react$1.useCallback(async()=>{if(l){u(true),s(null);try{let h=n.from(t);e?.where&&(h=h.where(e.where));let f=await h.count();r(f);}catch(h){s(h instanceof Error?h:new Error("Count failed"));}finally{u(false);}}},[n,t,e?.where,l]);return react$1.useEffect(()=>{i();},[i]),{count:o,isLoading:a,error:d,refetch:i}}function B(t,e){let[n,o]=react$1.useState("idle"),[r,a]=react$1.useState(void 0),[u,d]=react$1.useState(null),s=react$1.useRef(0),l=react$1.useCallback(()=>{o("idle"),a(void 0),d(null),s.current=0;},[]),i=react$1.useCallback(async f=>{o("loading"),d(null);try{await e?.onMutate?.(f);let c=await t(f);return a(c),o("success"),s.current=0,await e?.onSuccess?.(c,f),await e?.onSettled?.(c,null,f),c}catch(c){let y=c instanceof Error?c:new Error("Mutation failed"),g=e?.retry??0;if(s.current<g){s.current++;let T=e?.retryDelay??1e3;return await new Promise(p=>setTimeout(p,T)),i(f)}throw d(y),o("error"),await e?.onError?.(y,f),await e?.onSettled?.(void 0,y,f),y}},[t,e]);return {mutate:react$1.useCallback(f=>{i(f).catch(()=>{});},[i]),mutateAsync:i,data:r,error:u,isLoading:n==="loading",isSuccess:n==="success",isError:n==="error",isIdle:n==="idle",status:n,reset:l}}function Ue(t,e){let n=R();return B(async o=>(await n.from(t).create(o)).data,e)}function be(t,e){let n=R();return B(async({id:o,data:r})=>(await n.from(t).update(o,r)).data,e)}function we(t,e){let n=R();return B(async o=>{await n.from(t).delete(o);},e)}function Re(t,e){let n=R();return B(async({data:o,conflictFields:r,updateFields:a})=>{let u={conflictFields:r,updateFields:a};return (await n.from(t).upsert(o,u)).data},e)}function ve(t,e){let n=R();return B(async o=>{let r=await n.from(t).createMany(o);return {count:r.count,records:r.records}},e)}function Pe(t,e){let n=R();return B(async({data:o,where:r})=>{let a=await n.from(t).where(r).updateMany(o);return {count:a.count,records:a.records}},e)}function xe(t,e){let n=R();return B(async o=>({count:(await n.from(t).where(o).deleteMany()).count}),e)}function Ee(t,e,n){let[o,r]=react$1.useState(t),[a,u]=react$1.useState(false),[d,s]=react$1.useState(null),l=react$1.useRef(t),i=react$1.useCallback(()=>{r(l.current);},[]),h=react$1.useCallback(async c=>{u(true),s(null),l.current=o;let y=n.optimisticUpdate(o,c);r(y);try{let g=await e(c);return r(g),n.onSuccess?.(g,c),n.onSettled?.(g,null,c),g}catch(g){let T=g instanceof Error?g:new Error("Mutation failed");throw s(T),i(),n.onError?.(T,c),n.onSettled?.(void 0,T,c),T}finally{u(false);}},[o,e,n,i]);return {mutate:react$1.useCallback(c=>{h(c).catch(()=>{});},[h]),mutateAsync:h,optimisticData:o,rollback:i,isLoading:a,error:d}}function Oe(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState([]),[d,s]=react$1.useState(false),l=react$1.useRef(null),i=react$1.useRef(null),h=e?.enabled!==false;react$1.useEffect(()=>{if(!h)return;let c=n.realtime();l.current=c;let y=c.channel(`table:${t}`);return i.current=y,y.onDbChange({table:t,event:e?.operations||"*"},g=>{switch(g.new!==void 0&&r(g.new),u(T=>[...T,g]),g.operation){case "INSERT":g.new&&e?.onInsert?.(g.new);break;case "UPDATE":g.new&&e?.onUpdate?.(g.new,g.old??null);break;case "DELETE":g.old&&e?.onDelete?.(g.old);break}e?.onChange?.(g);}),y.subscribe(),s(true),()=>{y.unsubscribe(),c.disconnect(),s(false);}},[n,t,h,e]);let f=react$1.useCallback(()=>{u([]);},[]);return {data:o,changes:a,isSubscribed:d,clearChanges:f}}function Z(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState([]),[d,s]=react$1.useState(false),l=react$1.useRef(null),i=react$1.useRef(null),h=e?.enabled!==false;react$1.useEffect(()=>{if(!h)return;let y=n.realtime();l.current=y;let g=y.channel(t,{type:e?.type||"public"});return i.current=g,g.on("*",T=>{let p={event:"*",payload:T};r(p),u(m=>[...m,p]);}),g.subscribe(),s(true),()=>{g.unsubscribe(),y.disconnect(),s(false);}},[n,t,h,e?.type]);let f=react$1.useCallback((y,g)=>{i.current?.broadcast({event:y,payload:g});},[]),c=react$1.useCallback(()=>{i.current?.unsubscribe(),s(false);},[]);return {broadcast:f,lastMessage:o,messages:a,isJoined:d,leave:c}}function Fe(t,e,n){let o=R(),[r,a]=react$1.useState({}),[u,d]=react$1.useState(false),s=react$1.useRef(null),l=react$1.useRef(null),i=n?.enabled!==false;react$1.useEffect(()=>{if(!i)return;let g=o.realtime();s.current=g;let T=g.channel(t,{type:"presence"});return l.current=T,T.presence.onSync(p=>{a(p);}),T.subscribe(),e&&(T.presence.track({state:e}),d(true)),()=>{T.unsubscribe(),g.disconnect(),d(false);}},[o,t,i,e]);let h=react$1.useCallback(g=>{l.current?.presence.update(g);},[]),f=react$1.useCallback(()=>{l.current?.presence.untrack(),d(false);},[]),c=Object.keys(r).length,y=Object.keys(r);return {presence:r,count:c,onlineUsers:y,update:h,leave:f,isTracking:u}}function ke(){let t=R(),[e,n]=react$1.useState("disconnected"),[o,r]=react$1.useState(null),a=react$1.useRef(null);react$1.useEffect(()=>{let s=t.realtime();return a.current=s,n(s.connectionState),r(s.connectionId),s.on("connect",()=>{n("connected"),r(s.connectionId);}),s.on("disconnect",()=>{n("disconnected"),r(null);}),s.on("reconnect",()=>{n("connected"),r(s.connectionId);}),s.on("error",()=>{n("disconnected");}),()=>{s.disconnect();}},[t]);let u=react$1.useCallback(()=>{a.current?.connect();},[]),d=react$1.useCallback(()=>{a.current?.disconnect();},[]);return {state:e,isConnected:e==="connected",connectionId:o,reconnect:u,disconnect:d}}function Se(t,e){let n=Z(t,e);return {send:n.broadcast,messages:n.messages,lastMessage:n.lastMessage,isConnected:n.isJoined}}function ee(t){let e=R(),[n,o]=react$1.useState(0),[r,a]=react$1.useState(false),[u,d]=react$1.useState(null),[s,l]=react$1.useState(null),[i,h]=react$1.useState([]),f=react$1.useCallback(T=>{if(t?.maxSize&&T.size>t.maxSize)throw new Error(`File size (${Math.round(T.size/1024/1024)}MB) exceeds maximum allowed (${Math.round(t.maxSize/1024/1024)}MB)`);if(t?.allowedTypes&&t.allowedTypes.length>0&&!t.allowedTypes.includes(T.type))throw new Error(`File type "${T.type}" is not allowed. Allowed types: ${t.allowedTypes.join(", ")}`)},[t?.maxSize,t?.allowedTypes]),c=react$1.useCallback(async(T,p)=>{a(true),d(null),o(0);try{f(p),t?.onUploadStart?.(p);let m=await e.storage.upload(T,p,{contentType:p.type,metadata:t?.metadata,isPublic:t?.isPublic});return o(100),l(m),h(b=>[...b,m]),t?.onSuccess?.(m,p),m}catch(m){let b=m instanceof Error?m:new Error("Upload failed");throw d(b),t?.onError?.(b,p),b}finally{a(false);}},[e,t,f]),y=react$1.useCallback(async T=>{let p=[];for(let{key:m,file:b}of T){let w=await c(m,b);p.push(w);}return p},[c]),g=react$1.useCallback(()=>{o(0),a(false),d(null),l(null),h([]);},[]);return {upload:c,uploadMultiple:y,progress:n,isUploading:r,error:u,result:s,results:i,reset:g}}function Ie(t){let e=R(),[n,o]=react$1.useState(false),[r,a]=react$1.useState(null),u=react$1.useCallback(async(s,l)=>{o(true),a(null);try{let i=await e.storage.download(s);return t?.onSuccess?.(i,l||s.split("/").pop()||"download"),i}catch(i){let h=i instanceof Error?i:new Error("Download failed");throw a(h),t?.onError?.(h),h}finally{o(false);}},[e,t]),d=react$1.useCallback(async(s,l)=>{let i=await u(s,l),h=l||s.split("/").pop()||"download",f=URL.createObjectURL(i),c=document.createElement("a");c.href=f,c.download=h,document.body.appendChild(c),c.click(),document.body.removeChild(c),URL.revokeObjectURL(f);},[u]);return {download:u,downloadAndSave:d,isDownloading:n,error:r}}function Ce(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(null),[d,s]=react$1.useState(!!t&&e?.enabled!==false),[l,i]=react$1.useState(null),h=!!t&&e?.enabled!==false,f=react$1.useCallback(async()=>{if(!(!h||!t)){s(true),i(null);try{let y=await n.storage.createSignedUrl(t,e?.expiresIn);r(y);let g=await n.storage.getMetadata(t);u(g);}catch(y){i(y instanceof Error?y:new Error("Failed to load file"));}finally{s(false);}}},[n,t,e?.expiresIn,h]),c=react$1.useCallback(async()=>{t&&(await n.storage.delete(t),r(null),u(null));},[n,t]);return {url:o,metadata:a,isLoading:d,error:l,refresh:f,deleteFile:c}}function Me(t){let e=R(),[n,o]=react$1.useState([]),[r,a]=react$1.useState(t?.enabled!==false),[u,d]=react$1.useState(null),s=t?.enabled!==false,l=react$1.useCallback(async()=>{if(s){a(true),d(null);try{let i=await e.storage.list({prefix:t?.prefix,limit:t?.limit});o(i.files);}catch(i){d(i instanceof Error?i:new Error("Failed to list files"));}finally{a(false);}}},[e,t,s]);return {files:n,isLoading:r,error:u,refresh:l}}function De(t){let e=ee(t),[n,o]=react$1.useState(false),[r,a]=react$1.useState([]),u=react$1.useRef(null),d=react$1.useCallback(p=>{p.preventDefault(),p.stopPropagation(),o(true);},[]),s=react$1.useCallback(p=>{p.preventDefault(),p.stopPropagation(),o(false);},[]),l=react$1.useCallback(p=>{let m=t?.basePath||"uploads",b=Date.now().toString(36)+Math.random().toString(36).substr(2,9),w=p.name.split(".").pop()||"";return t?.uniqueKey?`${m}/${b}.${w}`:`${m}/${p.name}`},[t?.basePath,t?.uniqueKey]),i=react$1.useCallback(async p=>{p.preventDefault(),p.stopPropagation(),o(false);let m=Array.from(p.dataTransfer.files);if(m.length===0)return;let b=t?.multiple?m:[m[0]];a(b),await e.uploadMultiple(b.map(w=>({key:l(w),file:w})));},[t?.multiple,e,l]),h=react$1.useCallback(async p=>{let m=Array.from(p.target.files||[]);m.length!==0&&(a(m),await e.uploadMultiple(m.map(b=>({key:l(b),file:b}))));},[e,l]),f=react$1.useCallback(()=>{u.current?.click();},[]),c=react$1.useCallback(()=>{a([]),e.reset();},[e]),y=react$1.useCallback(p=>{a(m=>m.filter((b,w)=>w!==p));},[]),g=react$1.useCallback(()=>({onDragOver:d,onDragLeave:s,onDrop:i,onClick:f}),[d,s,i,f]),T=react$1.useCallback(()=>({type:"file",onChange:h,multiple:t?.multiple??false,accept:t?.allowedTypes?.join(",")??"",style:{display:"none"},ref:p=>{u.current=p;}}),[h,t?.multiple,t?.allowedTypes]);return {...e,dropzone:{isDragOver:n,selectedFiles:r},getDropzoneProps:g,getInputProps:T,openFilePicker:f,clearFiles:c,removeFile:y}}function Ae(t){return R().storage.getPublicUrl(t)}var G=new Map;function Le(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(null),[l,i]=react$1.useState(false),[h,f]=react$1.useState(null),c=react$1.useRef(0),y=react$1.useCallback(async T=>{u(true),s(null),i(false);try{let p={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(p.retry={maxRetries:e.maxRetries??3});let m=await n.functions.invoke(t,{body:T},p);return r(m.data),f(m),i(!0),c.current=0,e?.onSuccess?.(m.data,T),m.data}catch(p){let m=p instanceof Error?p:new Error("Function invocation failed");throw s(m),e?.onError?.(m,T),m}finally{u(false);}},[n,t,e]),g=react$1.useCallback(()=>{r(null),u(false),s(null),i(false),f(null),c.current=0;},[]);return {invoke:y,data:o,isLoading:a,error:d,isSuccess:l,invocation:h,reset:g}}function Ve(t,e){let n=R(),[o,r]=react$1.useState(null),[a,u]=react$1.useState(false),[d,s]=react$1.useState(null),[l,i]=react$1.useState(false),[h,f]=react$1.useState(null),c=e?.cache??false,y=e?.cacheTtl??6e4,g=react$1.useCallback(b=>`${t}:${JSON.stringify(b)}`,[t]),T=react$1.useCallback(async b=>{if(c){let w=g(b),v=G.get(w);if(v&&Date.now()-v.timestamp<y){let E=v.data;return r(E),i(true),e?.onSuccess?.(E,b),E}}u(true),s(null),i(false);try{let w={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(w.retry={maxRetries:e.maxRetries??3});let E=await n.functions.rpc(t,w)(b);if(r(E),i(!0),c){let C=g(b);G.set(C,{data:E,timestamp:Date.now()});}return e?.onSuccess?.(E,b),E}catch(w){let v=w instanceof Error?w:new Error("RPC call failed");throw s(v),e?.onError?.(v,b),v}finally{u(false);}},[n,t,e,c,y,g]),p=react$1.useCallback(()=>{let b=`${t}:`;for(let w of G.keys())w.startsWith(b)&&G.delete(w);},[t]),m=react$1.useCallback(()=>{r(null),u(false),s(null),i(false),f(null);},[]);return {invoke:T,data:o,isLoading:a,error:d,isSuccess:l,invocation:h,reset:m,clearCache:p}}function Qe(t){let e=R(),[n,o]=react$1.useState([]),[r,a]=react$1.useState(true),[u,d]=react$1.useState(null),s=react$1.useCallback(async()=>{a(true),d(null);try{let l=await e.functions.list({projectId:t.projectId,envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset});o(l);}catch(l){d(l instanceof Error?l:new Error("Failed to list functions"));}finally{a(false);}},[e,t.projectId,t.envId,t.enabled,t.limit,t.offset]);return react$1.useEffect(()=>{s();},[s]),{functions:n,isLoading:r,error:u,refresh:s}}function Be(t,e){let n=R(),[o,r]=react$1.useState([]),[a,u]=react$1.useState(false),[d,s]=react$1.useState(0),[l,i]=react$1.useState(null);return {invoke:react$1.useCallback(async f=>{u(true),i(null),s(0),r([]);let c=[],y=e?.concurrency??5,g=f.length,T=0;try{for(let p=0;p<f.length;p+=y){let m=f.slice(p,p+y),b=await Promise.all(m.map(async w=>(await n.functions.invoke(t,{body:w})).data));c.push(...b),T+=m.length,s(Math.round(T/g*100)),r([...c]),e?.onProgress?.(T,g);}return e?.onSuccess?.(c),c}catch(p){let m=p instanceof Error?p:new Error("Batch invocation failed");throw i(m),e?.onError?.(m),m}finally{u(false);}},[n,t,e]),results:o,isLoading:a,progress:d,error:l}}function ze(t){let e=R(),[n,o]=react$1.useState(false),[r,a]=react$1.useState(null),[u,d]=react$1.useState(null),[s,l]=react$1.useState(null),i=react$1.useCallback(async(f,c)=>{l(null);try{let g=(await e.functions.invoke(t,{body:f})).requestId??`scheduled-${Date.now()}`;return d(g),o(!0),a(new Date(Date.now()+c.delayMs)),g}catch(y){let g=y instanceof Error?y:new Error("Failed to schedule function");throw l(g),g}},[e,t]),h=react$1.useCallback(async()=>{o(false),a(null),d(null);},[]);return {schedule:i,cancel:h,isScheduled:n,scheduledAt:r,requestId:u,error:s}}Object.defineProperty(exports,"AuthProvider",{enumerable:true,get:function(){return react.AuthProvider}});Object.defineProperty(exports,"VaifAuthClient",{enumerable:true,get:function(){return react.VaifAuthClient}});Object.defineProperty(exports,"createAuthClient",{enumerable:true,get:function(){return react.createAuthClient}});Object.defineProperty(exports,"useAuthClient",{enumerable:true,get:function(){return react.useAuthClient}});Object.defineProperty(exports,"useIdentities",{enumerable:true,get:function(){return react.useIdentities}});Object.defineProperty(exports,"useIsAuthenticated",{enumerable:true,get:function(){return react.useIsAuthenticated}});Object.defineProperty(exports,"usePassword",{enumerable:true,get:function(){return react.usePassword}});Object.defineProperty(exports,"useSession",{enumerable:true,get:function(){return react.useSession}});Object.defineProperty(exports,"useSessions",{enumerable:true,get:function(){return react.useSessions}});Object.defineProperty(exports,"useStandaloneAuth",{enumerable:true,get:function(){return react.useAuth}});Object.defineProperty(exports,"useStandaloneMFA",{enumerable:true,get:function(){return react.useMFA}});Object.defineProperty(exports,"useStandaloneUser",{enumerable:true,get:function(){return react.useUser}});exports.VaifProvider=ne;exports.useAuth=re;exports.useBatchCreate=ve;exports.useBatchDelete=xe;exports.useBatchInvoke=Be;exports.useBatchUpdate=Pe;exports.useBroadcast=Se;exports.useChannel=Z;exports.useCount=me;exports.useCreate=Ue;exports.useDelete=we;exports.useDownload=Ie;exports.useDropzone=De;exports.useEmailVerification=ie;exports.useFile=Ce;exports.useFiles=Me;exports.useFunction=Le;exports.useFunctionList=Qe;exports.useInfiniteQuery=he;exports.useMFA=ce;exports.useMagicLink=le;exports.useMutation=B;exports.useOAuth=ue;exports.useOptimisticMutation=Ee;exports.usePaginatedQuery=ye;exports.usePasswordReset=ae;exports.usePresence=Fe;exports.usePublicUrl=Ae;exports.useQuery=fe;exports.useQueryById=pe;exports.useQueryFirst=ge;exports.useRealtimeConnection=ke;exports.useRpc=Ve;exports.useScheduledFunction=ze;exports.useSubscription=Oe;exports.useToken=oe;exports.useUpdate=be;exports.useUpload=ee;exports.useUpsert=Re;exports.useUser=se;exports.useVaif=D;exports.useVaifClient=R;
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {createContext,useState,useRef,useCallback,useEffect,useContext}from'react';import {jsx}from'react/jsx-runtime';var z=class de extends Error{constructor(t,e){super(t),this.name="VaifError",this.code=e.code,this.statusCode=e.statusCode,this.requestId=e.requestId,this.details=e.details;let n=Error;n.captureStackTrace&&n.captureStackTrace(this,de);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,requestId:this.requestId,details:this.details}}},ae=class extends z{constructor(s,t){super(s,{code:t?.code??"AUTH_ERROR",statusCode:t?.statusCode??401,requestId:t?.requestId}),this.name="VaifAuthError";}},tt=class extends z{constructor(s,t){super(s,{code:"VALIDATION_ERROR",statusCode:400,requestId:t?.requestId,details:t?.details??t?.fieldErrors}),this.name="VaifValidationError",this.fieldErrors=t?.fieldErrors;}},ee=class extends z{constructor(s,t){super(s,{code:"NETWORK_ERROR"}),this.name="VaifNetworkError",this.cause=t;}},nt=class extends z{constructor(s,t){super(s,{code:"RATE_LIMITED",statusCode:429}),this.name="VaifRateLimitError",this.retryAfter=t;}},rt=class extends z{constructor(s,t){super(s,{code:"NOT_FOUND",statusCode:404,requestId:t}),this.name="VaifNotFoundError";}};async function st(s){let t;try{t=await s.json();}catch{}let e=t?.message??t?.error??s.statusText??"Request failed",n=t?.requestId;switch(s.status){case 400:return new tt(e,{details:t?.details,requestId:n});case 401:return new ae(e,{code:"UNAUTHORIZED",statusCode:401,requestId:n});case 403:return new ae(e,{code:"FORBIDDEN",statusCode:403,requestId:n});case 404:return new rt(e,n);case 429:{let r=s.headers.get("Retry-After"),a=r?parseInt(r,10):void 0;return new nt(e,a)}default:return new z(e,{code:t?.error??"HTTP_ERROR",statusCode:s.status,requestId:n,details:t?.details})}}async function at(s,t){let{timeout:e=3e4,fetchFn:n,...r}=t,a=new AbortController,i=setTimeout(()=>a.abort(),e);try{let l=await n(s,{...r,signal:a.signal});if(clearTimeout(i),!l.ok)throw await st(l);if(l.status===204)return;let o=await l.text();return o?JSON.parse(o):void 0}catch(l){throw clearTimeout(i),l instanceof z?l:l instanceof Error&&l.name==="AbortError"?new ee("Request timed out"):l instanceof Error?new ee(l.message,l):new ee("Network request failed")}}function $(s){let{baseUrl:t,apiKey:e,apiKeyHeader:n,accessToken:r,fetch:a,timeout:i}=s;return async function(l,o={}){let c=`${t}${l}`,u={"Content-Type":"application/json",...o.headers??{}};if(e&&(u[n]=e),r){let f=typeof r=="function"?await r():r;u.Authorization=`Bearer ${f}`;}return at(c,{...o,headers:u,timeout:i,fetchFn:a})}}function D(s){let t=new URLSearchParams;for(let[n,r]of Object.entries(s))r!==void 0&&t.set(n,String(r));let e=t.toString();return e?`?${e}`:""}function ot(s){return JSON.stringify(s)}function oe(s,t,e={}){let n={...e},r=()=>{let o={};if(n.limit!==void 0&&(o.limit=n.limit),n.offset!==void 0&&(o.offset=n.offset),n.where&&(o.where=ot(n.where)),n.orderBy){let c=Array.isArray(n.orderBy)?n.orderBy:[n.orderBy];o.orderBy=JSON.stringify(c);}return n.select&&n.select.length>0&&(o.select=n.select.join(",")),n.include&&n.include.length>0&&(o.include=JSON.stringify(n.include)),n.distinct&&n.distinct.length>0&&(o.distinct=n.distinct.join(",")),o},a=()=>D(r()),i=o=>oe(s,t,{...n,...o}),l={async list(o){o&&(n={...n,...o});let c=a();return t(`/generated/${s}${c}`)},async get(o){let c={};n.select&&n.select.length>0&&(c.select=n.select.join(",")),n.include&&n.include.length>0&&(c.include=JSON.stringify(n.include));let u=D(c);return t(`/generated/${s}/${encodeURIComponent(o)}${u}`)},async first(){let o=await l.limit(1).list();return o.data.length>0?o.data[0]:null},async firstOrFail(){let o=await l.first();if(!o)throw new Error(`No record found in table '${s}' matching the query`);return o},async create(o){return t(`/generated/${s}`,{method:"POST",body:JSON.stringify(o)})},async update(o,c){return t(`/generated/${s}/${encodeURIComponent(o)}`,{method:"PATCH",body:JSON.stringify(c)})},async delete(o){return t(`/generated/${s}/${encodeURIComponent(o)}`,{method:"DELETE"})},async createMany(o,c){return t(`/generated/${s}/batch`,{method:"POST",body:JSON.stringify({records:o,skipOnConflict:c?.skipOnConflict,returnRecords:c?.returnRecords})})},async updateMany(o,c){return r(),t(`/generated/${s}/batch`,{method:"PATCH",body:JSON.stringify({data:o,where:n.where,returnRecords:c?.returnRecords})})},async deleteMany(){return t(`/generated/${s}/batch`,{method:"DELETE",body:JSON.stringify({where:n.where})})},async upsert(o,c){return t(`/generated/${s}/upsert`,{method:"POST",body:JSON.stringify({data:o,conflictFields:c.conflictFields,updateFields:c.updateFields})})},async count(){let o=r(),c=D(o);return (await t(`/generated/${s}/count${c}`)).count},async sum(o){let c=r(),u=D({...c,field:o});return (await t(`/generated/${s}/sum${u}`)).sum},async avg(o){let c=r(),u=D({...c,field:o});return (await t(`/generated/${s}/avg${u}`)).avg},async min(o){let c=r(),u=D({...c,field:o});return (await t(`/generated/${s}/min${u}`)).min},async max(o){let c=r(),u=D({...c,field:o});return (await t(`/generated/${s}/max${u}`)).max},async aggregate(o,c){return t(`/generated/${s}/aggregate`,{method:"POST",body:JSON.stringify({aggregates:o,where:c?.where||n.where,groupBy:c?.groupBy,having:c?.having})})},async paginate(o){let c=o.page||1,u=o.pageSize||20,f=(c-1)*u,p=r();p.limit=u,p.offset=f,p.includeCount=true;let d=D(p),g=await t(`/generated/${s}${d}`),m=g.total||g.data.length,T=Math.ceil(m/u);return {data:g.data,pageInfo:{total:m,page:c,pageSize:u,pageCount:T,hasNextPage:c<T,hasPrevPage:c>1}}},async cursorPaginate(o){let c=r();c.limit=o.limit||20,o.cursor&&(c.cursor=o.cursor);let u=D(c),f=await t(`/generated/${s}/cursor${u}`);return {data:f.data,nextCursor:f.nextCursor,prevCursor:f.prevCursor,hasMore:f.hasMore}},where(o){if(n.where){let c=n.where;return i({where:{AND:[...Array.isArray(c)?c:[c],o]}})}return i({where:o})},orderBy(o,c="asc"){let u={field:o,direction:c};if(n.orderBy){let f=Array.isArray(n.orderBy)?n.orderBy:[n.orderBy];return i({orderBy:[...f,u]})}return i({orderBy:u})},select(...o){return i({select:o})},limit(o){return i({limit:o})},offset(o){return i({offset:o})},include(o){let c=n.include||[];return i({include:[...c,o]})},distinct(...o){return i({distinct:o})}};return l}function it(s){let t=$(s);return {from(e){return oe(e,t)},async raw(e,n){return t("/generated/raw",{method:"POST",body:JSON.stringify({query:e,params:n})})},async transaction(e,n){return t("/generated/transaction",{method:"POST",body:JSON.stringify({operations:e,isolationLevel:n?.isolationLevel,timeout:n?.timeout})})},async withTransaction(e,n){let r=(await t("/generated/transaction/start",{method:"POST",body:JSON.stringify({isolationLevel:n?.isolationLevel,timeout:n?.timeout})})).transactionId,a=(l,o)=>{let c=new Headers(o?.headers);return c.set("X-Transaction-Id",r),t(l,{...o,headers:c})},i={from(l){return oe(l,a)},async raw(l,o){return a("/generated/raw",{method:"POST",body:JSON.stringify({query:l,params:o})})},async transaction(){throw new Error("Nested transactions are not supported")},async withTransaction(){throw new Error("Nested transactions are not supported")}};try{let l=await e(i);return await t("/generated/transaction/commit",{method:"POST",body:JSON.stringify({transactionId:r})}),l}catch(l){throw await t("/generated/transaction/rollback",{method:"POST",body:JSON.stringify({transactionId:r})}).catch(()=>{}),l}}}}function ct(s){let t=$(s);return {async signUp(e,n,r){return t("/auth/signup",{method:"POST",body:JSON.stringify({email:e,password:n,name:r?.name,phone:r?.phone,metadata:r?.metadata,redirectUrl:r?.redirectUrl})})},async login(e,n,r){return t("/auth/login",{method:"POST",body:JSON.stringify({email:e,password:n,mfaCode:r?.mfaCode,rememberMe:r?.rememberMe})})},async logout(){await t("/auth/logout",{method:"POST"});},async logoutAll(){await t("/auth/logout-all",{method:"POST"});},async getUser(){return (await t("/auth/me")).user},async updateProfile(e){return (await t("/users/me",{method:"PATCH",body:JSON.stringify(e)})).user},async changePassword(e){return t("/users/me/change-password",{method:"POST",body:JSON.stringify(e)})},async requestPasswordReset(e){return t("/auth/forgot-password",{method:"POST",body:JSON.stringify(e)})},async confirmPasswordReset(e){return t("/auth/reset-password",{method:"POST",body:JSON.stringify(e)})},async requestEmailVerification(e){return t("/auth/verify-email/send",{method:"POST",body:JSON.stringify(e||{})})},async confirmEmailVerification(e){return t("/auth/verify-email/confirm",{method:"POST",body:JSON.stringify(e)})},async getOAuthSignInUrl(e){return t("/auth/oauth/authorize",{method:"POST",body:JSON.stringify(e)})},async handleOAuthCallback(e){return t("/auth/oauth/callback",{method:"POST",body:JSON.stringify(e)})},async linkOAuthProvider(e){return t("/auth/oauth/link",{method:"POST",body:JSON.stringify(e)})},async unlinkOAuthProvider(e){return t(`/auth/oauth/unlink/${e}`,{method:"POST"})},async listLinkedProviders(){return t("/auth/oauth/providers")},async requestMagicLink(e){return t("/auth/magic-link/send",{method:"POST",body:JSON.stringify(e)})},async verifyMagicLink(e){return t("/auth/magic-link/verify",{method:"POST",body:JSON.stringify(e)})},async requestPhoneVerification(e){return t("/auth/phone/send",{method:"POST",body:JSON.stringify(e)})},async confirmPhoneVerification(e){return t("/auth/phone/verify",{method:"POST",body:JSON.stringify(e)})},async setupMFA(e){return t("/auth/mfa/setup",{method:"POST",body:JSON.stringify({method:e})})},async enableMFA(e){return t("/auth/mfa/enable",{method:"POST",body:JSON.stringify({code:e})})},async disableMFA(e){return t("/auth/mfa/disable",{method:"POST",body:JSON.stringify({code:e})})},async verifyMFA(e,n){return t("/auth/mfa/verify",{method:"POST",body:JSON.stringify({mfaToken:e,code:n})})},async regenerateBackupCodes(){return t("/auth/mfa/backup-codes",{method:"POST"})},async refreshToken(e){return t("/auth/refresh",{method:"POST",body:JSON.stringify({refreshToken:e})})},async listSessions(){return t("/auth/sessions")},async revokeSession(e){return t(`/auth/sessions/${e}`,{method:"DELETE"})},async revokeOtherSessions(){return t("/auth/sessions/revoke-others",{method:"POST"})}}}function ue(s){return new Promise(t=>setTimeout(t,s))}function lt(s){let t=$(s);async function e(n,r,a){let i=a?.retry||{},l=i.maxRetries??0,o=i.initialDelay??1e3,c=i.maxDelay??3e4,u=i.backoffMultiplier??2,f=i.retryOnStatus??[429,500,502,503,504],p=i.retryOnNetworkError??true,d=null,g=o;for(let m=0;m<=l;m++)try{let T={};a?.version!==void 0&&(T.version=a.version),a?.includeLogs&&(T.includeLogs=!0);let h=D(T),b=await t(`/functions/${n}/invoke${h}`,{method:"POST",body:JSON.stringify(r??{}),headers:a?.headers});if(f.includes(b.status)&&m<l){d=new Error(`Function returned status ${b.status}`),await ue(g),g=Math.min(g*u,c);continue}return b}catch(T){d=T;let h=T instanceof TypeError||T.message?.includes("network")||T.message?.includes("fetch");if(p&&h&&m<l){await ue(g),g=Math.min(g*u,c);continue}throw T}throw d||new Error("Function invocation failed after retries")}return {invoke:e,async invokeByName(n,r,a){let i={};a?.version!==void 0&&(i.version=a.version),a?.includeLogs&&(i.includeLogs=true);let l=D(i);return t(`/functions/name/${encodeURIComponent(n)}/invoke${l}`,{method:"POST",body:JSON.stringify(r??{}),headers:a?.headers})},async batchInvoke(n,r){let a=(await Promise.allSettled(n.map(i=>this.invoke(i.functionId,i.input,r)))).map((i,l)=>i.status==="fulfilled"?{functionId:n[l].functionId,success:true,result:i.value}:{functionId:n[l].functionId,success:false,error:i.reason?.message||"Unknown error"});return {results:a,successCount:a.filter(i=>i.success).length,errorCount:a.filter(i=>!i.success).length}},rpc(n,r){let a=this,i=async(l,o)=>{let c={...r,...o};return (await e(n,{body:l},c)).data};return Object.defineProperty(i,"id",{value:n,writable:false}),i.getInfo=()=>a.get(n),i.getInvocations=l=>a.getInvocations({...l,functionId:n}),i},async list(n){let r={envId:n.envId,enabled:n.enabled,limit:n.limit,offset:n.offset},a=D(r);return t(`/functions/project/${n.projectId}${a}`)},async get(n){return t(`/functions/${n}`)},async getByName(n,r){return t(`/functions/project/${r}/name/${encodeURIComponent(n)}`)},async create(n){return t("/functions",{method:"POST",body:JSON.stringify(n)})},async update(n,r){return t(`/functions/${n}`,{method:"PATCH",body:JSON.stringify(r)})},async delete(n){return t(`/functions/${n}`,{method:"DELETE"})},async enable(n){return this.update(n,{enabled:true})},async disable(n){return this.update(n,{enabled:false})},async deploy(n,r,a){return t(`/functions/${n}/deploy`,{method:"POST",body:JSON.stringify({sourceCode:r,createVersion:a?.createVersion,versionDescription:a?.versionDescription,envVars:a?.envVars,secrets:a?.secrets})})},async getSource(n,r){let a=r!==void 0?`?version=${r}`:"";return t(`/functions/${n}/source${a}`)},async listVersions(n){return (await t(`/functions/${n}/versions`)).versions},async rollback(n,r){return t(`/functions/${n}/rollback`,{method:"POST",body:JSON.stringify({version:r})})},async getEnvVars(n){return (await t(`/functions/${n}/env`)).envVars},async setEnvVars(n,r){return t(`/functions/${n}/env`,{method:"PUT",body:JSON.stringify({envVars:r})})},async deleteEnvVar(n,r){return t(`/functions/${n}/env/${encodeURIComponent(r)}`,{method:"DELETE"})},async bindSecrets(n,r){return t(`/functions/${n}/secrets`,{method:"PUT",body:JSON.stringify({secrets:r})})},async setSchedule(n,r){return t(`/functions/${n}/schedule`,{method:"PUT",body:JSON.stringify(r)})},async removeSchedule(n){return t(`/functions/${n}/schedule`,{method:"DELETE"})},async getInvocations(n){let r={functionId:n.functionId,projectId:n.projectId,status:n.status,since:n.since,until:n.until,limit:n.limit,offset:n.offset},a=D(r);return (await t(`/functions/invocations${a}`)).invocations},async getInvocation(n){return t(`/functions/invocations/${n}`)},async getLogs(n,r){let a={since:r?.since,until:r?.until,level:r?.level,limit:r?.limit},i=D(a);return (await t(`/functions/${n}/logs${i}`)).logs}}}function ut(s){let t=$(s),e="default";return {async getUploadUrl(n,r){return t("/storage/upload-url",{method:"POST",body:JSON.stringify({key:n,bucket:r?.bucket||e,contentType:r?.contentType,sizeBytes:r?.sizeBytes,metadata:r?.metadata,isPublic:r?.isPublic,cacheControl:r?.cacheControl,contentDisposition:r?.contentDisposition,upsert:r?.upsert})})},async getDownloadUrl(n,r){return t("/storage/download-url",{method:"POST",body:JSON.stringify({key:n,bucket:r?.bucket||e,expiresIn:r?.expiresIn,download:r?.download,transform:r?.transform})})},async createSignedUrl(n,r=3600,a){return (await this.getDownloadUrl(n,{...a,expiresIn:r})).url},async createSignedUrls(n,r=3600,a){return await Promise.all(n.map(async i=>({key:i,url:await this.createSignedUrl(i,r,a)})))},async upload(n,r,a){let i=r instanceof Blob?r:new Blob([r]),l=i.size,o=a?.contentType||(r instanceof File?r.type:void 0)||"application/octet-stream",c=await this.getUploadUrl(n,{...a,contentType:o,sizeBytes:l}),u=await s.fetch(c.url,{method:"PUT",body:i,headers:{"Content-Type":o,...a?.cacheControl&&{"Cache-Control":a.cacheControl},...a?.contentDisposition&&{"Content-Disposition":a.contentDisposition}}});if(!u.ok)throw new Error(`Upload failed: ${u.statusText}`);let f=a?.bucket||e,p=c.url.split("?")[0];return {ok:true,key:n,bucket:f,url:p,publicUrl:a?.isPublic?this.getPublicUrl(n,{bucket:f}):void 0,size:l,contentType:o}},async uploadFromUrl(n,r,a){return t("/storage/upload-from-url",{method:"POST",body:JSON.stringify({key:n,url:r,bucket:a?.bucket||e,contentType:a?.contentType,metadata:a?.metadata,isPublic:a?.isPublic,timeout:a?.timeout})})},async download(n,r){let a=await this.getDownloadUrl(n,r),i=await s.fetch(a.url);if(!i.ok)throw new Error(`Download failed: ${i.statusText}`);return i.blob()},async list(n){let r={bucket:n?.bucket||e,prefix:n?.prefix,delimiter:n?.delimiter,limit:n?.limit,cursor:n?.cursor,includeUrls:n?.includeUrls},a=D(r);return t(`/storage/files${a}`)},async getMetadata(n,r){let a=r?.bucket||e;return t(`/storage/files/${encodeURIComponent(a)}/${encodeURIComponent(n)}/metadata`)},async updateMetadata(n,r,a){let i=a?.bucket||e;return t(`/storage/files/${encodeURIComponent(i)}/${encodeURIComponent(n)}/metadata`,{method:"PATCH",body:JSON.stringify(r)})},async exists(n,r){try{return await this.getMetadata(n,r),!0}catch{return false}},async copy(n,r,a){return t("/storage/files/copy",{method:"POST",body:JSON.stringify({sourceKey:n,sourceBucket:a?.sourceBucket||e,destinationKey:r,destinationBucket:a?.destinationBucket||a?.sourceBucket||e,metadata:a?.metadata})})},async move(n,r,a){return t("/storage/files/move",{method:"POST",body:JSON.stringify({sourceKey:n,sourceBucket:a?.sourceBucket||e,destinationKey:r,destinationBucket:a?.destinationBucket||a?.sourceBucket||e,metadata:a?.metadata})})},async delete(n,r){let a=r?.bucket||e;await t(`/storage/files/${encodeURIComponent(a)}/${encodeURIComponent(n)}`,{method:"DELETE"});},async deleteMany(n,r){return t("/storage/files/delete-batch",{method:"POST",body:JSON.stringify({keys:n,bucket:r?.bucket||e})})},getPublicUrl(n,r){let a=r?.bucket||e;return `${s.baseUrl.replace("/api","")}/storage/${encodeURIComponent(a)}/${encodeURIComponent(n)}`},async createBucket(n,r){return t("/storage/buckets",{method:"POST",body:JSON.stringify({name:n,isPublic:r?.isPublic,allowedMimeTypes:r?.allowedMimeTypes,maxFileSize:r?.maxFileSize,fileSizeLimit:r?.fileSizeLimit})})},async getBucket(n){return t(`/storage/buckets/${encodeURIComponent(n)}`)},async updateBucket(n,r){return t(`/storage/buckets/${encodeURIComponent(n)}`,{method:"PATCH",body:JSON.stringify(r)})},async listBuckets(){return (await t("/storage/buckets")).buckets},async deleteBucket(n){await t(`/storage/buckets/${encodeURIComponent(n)}`,{method:"DELETE"});},async emptyBucket(n){return t(`/storage/buckets/${encodeURIComponent(n)}/empty`,{method:"POST"})},async createMultipartUpload(n,r){return t("/storage/multipart/create",{method:"POST",body:JSON.stringify({key:n,bucket:r?.bucket||e,contentType:r?.contentType,metadata:r?.metadata,partSize:r?.partSize})})},async uploadPart(n,r,a){let i=a instanceof Blob?a:new Blob([a]),{url:l}=await t(`/storage/multipart/${n}/part-url`,{method:"POST",body:JSON.stringify({partNumber:r})}),o=await s.fetch(l,{method:"PUT",body:i});if(!o.ok)throw new Error(`Part upload failed: ${o.statusText}`);let c=o.headers.get("etag")||"";return {partNumber:r,etag:c}},async completeMultipartUpload(n,r){return t(`/storage/multipart/${n}/complete`,{method:"POST",body:JSON.stringify({parts:r})})},async abortMultipartUpload(n){await t(`/storage/multipart/${n}/abort`,{method:"POST"});}}}function dt(s){let t=$(s);return {async list(){return t("/projects")},async get(e){return t(`/projects/${e}`)},async create(e){return t("/projects",{method:"POST",body:JSON.stringify(e)})},async getApiKeys(e){return t(`/projects/${e}/api-keys`)},async createApiKey(e,n){return t(`/projects/${e}/api-keys`,{method:"POST",body:JSON.stringify(n??{})})},async revokeApiKey(e,n){return t(`/projects/${e}/api-keys/${n}/revoke`,{method:"POST"})},async rotateApiKey(e,n){return t(`/projects/${e}/api-keys/${n}/rotate`,{method:"POST"})}}}function yt(s){let t=$(s);return {async list(){return t("/orgs")},async create(e){return t("/orgs",{method:"POST",body:JSON.stringify(e)})},async getProfile(e){return (await t(`/orgs/${e}/profile`)).profile||{}},async updateProfile(e,n){return (await t(`/orgs/${e}/profile`,{method:"PATCH",body:JSON.stringify(n)})).profile},async listBillingContacts(e){return (await t(`/orgs/${e}/billing-contacts`)).contacts},async addBillingContact(e,n){return t(`/orgs/${e}/billing-contacts`,{method:"POST",body:JSON.stringify(n)})},async removeBillingContact(e,n){return t(`/orgs/${e}/billing-contacts/${n}`,{method:"DELETE"})},async listMembers(e){return (await t(`/orgs/${e}/members`)).members},async inviteMember(e,n){return t(`/orgs/${e}/members/invite`,{method:"POST",body:JSON.stringify(n)})},async listInvites(e){return (await t(`/orgs/${e}/invites`)).invites},async cancelInvite(e,n){return t(`/orgs/${e}/invites/${n}`,{method:"DELETE"})},async removeMember(e,n){return t(`/orgs/${e}/members/${n}`,{method:"DELETE"})},async updateMemberRole(e,n,r){return t(`/orgs/${e}/members/${n}/role`,{method:"PATCH",body:JSON.stringify({role:r})})}}}function pt(s){let t=$(s);return {async preview(e){return t("/schema-engine/preview",{method:"POST",body:JSON.stringify(e)})},async apply(e){return t("/schema-engine/apply",{method:"POST",body:JSON.stringify(e)})},async getMigrations(e,n){let r=n?`/schema-engine/migrations/project/${e}?limit=${n}`:`/schema-engine/migrations/project/${e}`;return t(r)},async saveSchema(e){return t("/schemas/",{method:"POST",body:JSON.stringify(e)})},async getSchemas(e){return t(`/schemas/project/${e}`)}}}function ft(s){let t=$(s);return {async create(e){return t("/functions/secrets",{method:"POST",body:JSON.stringify(e)})},async list(e,n){let r=new URLSearchParams;n&&r.set("envId",n);let a=r.toString(),i=`/functions/secrets/project/${e}${a?`?${a}`:""}`;return t(i)},async reveal(e){return t(`/functions/secrets/${e}/value`)},async update(e,n){return t(`/functions/secrets/${e}`,{method:"PUT",body:JSON.stringify({value:n})})},async delete(e){return t(`/functions/secrets/${e}`,{method:"DELETE"})}}}function gt(s){let t=$(s);return {async list(e,n){let r=new URLSearchParams;n&&r.set("env",n);let a=r.toString(),i=`/deployments/project/${e}${a?`?${a}`:""}`;return (await t(i)).deployments},async get(e){let n=await t(`/deployments/${e}`);return {...n.deployment,steps:n.steps}},async getSteps(e){return (await t(`/deployments/${e}/steps`)).steps},async promote(e){let n={projectId:e.projectId,fromEnv:e.sourceEnv,toEnv:e.targetEnv},r=await t("/deployments/promote",{method:"POST",body:JSON.stringify(n)}),a=await t(`/deployments/${r.deploymentId}`);return {deployment:{...a.deployment,steps:a.steps}}},async rollback(e){return t(`/deployments/${e}/rollback`,{method:"POST"})},async listTokens(e,n){let r=new URLSearchParams;n&&r.set("envId",n);let a=r.toString(),i=`/deployments/tokens/project/${encodeURIComponent(e)}${a?`?${a}`:""}`;return (await t(i)).tokens},async createToken(e){return t("/deployments/tokens",{method:"POST",body:JSON.stringify(e)})},async revokeToken(e){return t(`/deployments/tokens/${encodeURIComponent(e)}/revoke`,{method:"POST"})}}}function mt(s){let t=$(s);return {async getStats(e){return t(`/realtime/stats/project/${e}`)},async getConnections(e){return (await t(`/realtime/connections/project/${e}`)).connections},async getSubscriptions(e){return (await t(`/realtime/subscriptions/project/${e}`)).subscriptions},async getEvents(e,n){let r=new URLSearchParams;n&&r.set("limit",String(n));let a=r.toString(),i=`/realtime/events/project/${e}${a?`?${a}`:""}`;return (await t(i)).events},async getStatus(e){return t(`/realtime/status/project/${e}`)},async install(e){return t("/realtime/install",{method:"POST",body:JSON.stringify(e)})},async enableAll(e){return t("/realtime/enable-all",{method:"POST",body:JSON.stringify(e)})}}}function ht(s){let t=$(s);return {async listBuckets(e,n){let r=new URLSearchParams;n&&r.set("envId",n);let a=r.toString(),i=`/buckets/project/${e}${a?`?${a}`:""}`;return (await t(i)).buckets},async getBucket(e){return (await t(`/buckets/${e}`)).bucket},async createBucket(e){return (await t("/buckets",{method:"POST",body:JSON.stringify(e)})).bucket},async updateBucket(e,n){return (await t(`/buckets/${e}`,{method:"PUT",body:JSON.stringify(n)})).bucket},async deleteBucket(e){return t(`/buckets/${e}`,{method:"DELETE"})},async listFiles(e,n){let r=new URLSearchParams;n?.prefix&&r.set("prefix",n.prefix),n?.maxKeys&&r.set("maxKeys",String(n.maxKeys)),n?.continuationToken&&r.set("continuationToken",n.continuationToken);let a=r.toString(),i=`/buckets/${e}/files${a?`?${a}`:""}`;return t(i)},async deleteFile(e,n){return t(`/buckets/${e}/files?key=${encodeURIComponent(n)}`,{method:"DELETE"})},async getSignedUrl(e,n,r){return t(`/buckets/${e}/signed-url`,{method:"POST",body:JSON.stringify({key:n,expiresIn:r})})},async getUploadUrl(e,n,r){return t(`/buckets/${e}/upload-url`,{method:"POST",body:JSON.stringify({key:n,...r})})},async uploadFile(e,n,r,a){let i=a?.prefix?`${a.prefix}${n}`:n,l=a?.contentType??(r instanceof Blob?r.type:"application/octet-stream"),o=new URLSearchParams;return o.set("key",i),l&&o.set("contentType",l),t(`/buckets/${e}/upload?${o.toString()}`,{method:"POST",body:r,headers:{"Content-Type":l||"application/octet-stream"}})}}}function bt(s){let t=$(s);return {async list(e,n){let r={type:n?.type,enabled:n?.enabled},a=D(r);return (await t(`/integrations/subscriptions/project/${e}${a}`)).subscriptions},async get(e){return t(`/integrations/subscriptions/${e}`)},async create(e){return (await t("/integrations/subscriptions",{method:"POST",body:JSON.stringify(e)})).subscription},async update(e,n){return (await t(`/integrations/subscriptions/${e}`,{method:"PATCH",body:JSON.stringify(n)})).subscription},async delete(e){return t(`/integrations/subscriptions/${e}`,{method:"DELETE"})},async enable(e){return this.update(e,{enabled:true})},async disable(e){return this.update(e,{enabled:false})},async test(e){return t(`/integrations/subscriptions/${e}/test`,{method:"POST"})},async publish(e){return t("/integrations/events/publish",{method:"POST",body:JSON.stringify(e)})},async publishBatch(e){return (await t("/integrations/events/publish-batch",{method:"POST",body:JSON.stringify({events:e})})).results},async listEvents(e){let n={envId:e.envId,source:e.source,name:e.name,since:e.since,until:e.until,limit:e.limit,offset:e.offset},r=D(n);return (await t(`/integrations/events/project/${e.projectId}${r}`)).events},async getEvent(e){return t(`/integrations/events/${e}`)},async getDeliveries(e){let n={subscriptionId:e.subscriptionId,eventId:e.eventId,status:e.status,since:e.since,until:e.until,limit:e.limit,offset:e.offset},r=D(n);return (await t(`/integrations/deliveries${r}`)).deliveries},async getDelivery(e){return t(`/integrations/deliveries/${e}`)},async retryDelivery(e){return t(`/integrations/deliveries/${e}/retry`,{method:"POST"})},async retryAllFailed(e){return t(`/integrations/subscriptions/${e}/retry-failed`,{method:"POST"})},async getDlq(e,n){let r={limit:n?.limit,offset:n?.offset},a=D(r);return (await t(`/integrations/dlq/project/${e}${a}`)).deliveries},async purgeDlq(e,n){return t(`/integrations/dlq/project/${e}/purge`,{method:"POST",body:JSON.stringify({olderThan:n.olderThan})})},async replayDlq(e,n){return t(`/integrations/dlq/project/${e}/replay`,{method:"POST",body:JSON.stringify(n)})},verifySignature(e){let n=e.tolerance??300;try{let r=e.signature.split(","),a=r.find(T=>T.startsWith("t=")),i=r.find(T=>T.startsWith("v1="));if(!a||!i)return !1;let l=parseInt(a.slice(2),10),o=i.slice(3),c=Math.floor(Date.now()/1e3);if(Math.abs(c-l)>n)return !1;let u=`${l}.${e.payload}`,f=new TextEncoder,p=f.encode(e.secret),d=f.encode(u),g=Array.from(p).concat(Array.from(d)).reduce((T,h)=>T+h,0).toString(16);if(o.length!==g.length)return !1;let m=0;for(let T=0;T<o.length;T++)m|=o.charCodeAt(T)^g.charCodeAt(T);return m===0}catch{return false}},generateSecret(){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",n="whsec_";for(let r=0;r<32;r++)n+=e.charAt(Math.floor(Math.random()*e.length));return n}}}function Tt(s){let t=$(s);return {async getSummary(e){return t(`/billing/org/${e}/summary`)},async getEntitlements(e){return t(`/entitlements/org/${e}`)},async checkEntitlement(e,n){return t(`/entitlements/org/${e}/check`,{method:"POST",body:JSON.stringify(n)})},async getPlans(){return (await t("/pricing/plans")).plans},async createCheckout(e){return t("/billing/checkout",{method:"POST",body:JSON.stringify(e)})},async openPortal(e){return t(`/billing/org/${e.orgId}/portal`,{method:"POST",body:JSON.stringify({returnUrl:e.returnUrl})})}}}function St(s){let t=$(s);return {async getOverview(){return t("/admin/overview")},async listUsers(e){let n=new URLSearchParams;e?.search&&n.set("search",e.search),e?.limit&&n.set("limit",String(e.limit)),e?.offset&&n.set("offset",String(e.offset));let r=n.toString();return t(`/admin/users${r?`?${r}`:""}`)},async getUser(e){return t(`/admin/users/${e}`)},async updateUserStatus(e,n){return t(`/admin/users/${e}/status`,{method:"PATCH",body:JSON.stringify({status:n})})},async updateUserAdmin(e,n){return t(`/admin/users/${e}/admin`,{method:"PATCH",body:JSON.stringify({isAdmin:n})})},async listOrganizations(e){let n=new URLSearchParams;e?.search&&n.set("search",e.search),e?.plan&&n.set("plan",e.plan),e?.limit&&n.set("limit",String(e.limit)),e?.offset&&n.set("offset",String(e.offset));let r=n.toString();return t(`/admin/organizations${r?`?${r}`:""}`)},async getOrganization(e){return t(`/admin/organizations/${e}`)},async updateOrganization(e,n){return t(`/admin/organizations/${e}`,{method:"PATCH",body:JSON.stringify(n)})},async listProjects(e){let n=new URLSearchParams;e?.search&&n.set("search",e.search),e?.orgId&&n.set("orgId",e.orgId),e?.region&&n.set("region",e.region),e?.tenancy&&n.set("tenancy",e.tenancy),e?.limit&&n.set("limit",String(e.limit)),e?.offset&&n.set("offset",String(e.offset));let r=n.toString();return t(`/admin/projects${r?`?${r}`:""}`)},async getProject(e){return t(`/admin/projects/${e}`)},async updateProject(e,n){return t(`/admin/projects/${e}`,{method:"PATCH",body:JSON.stringify(n)})},async getProjectResources(e){return t(`/admin/resources/project/${e}`)},async setDedicatedDb(e){return t(`/admin/resources/project/${e.projectId}/db`,{method:"POST",body:JSON.stringify({connectionString:e.connectionString})})},async listIncidents(e="open"){return (await t(`/admin/incidents?status=${e}`)).incidents},async createIncident(e){return t("/admin/incidents",{method:"POST",body:JSON.stringify(e)})},async acknowledgeIncident(e){return t(`/admin/incidents/${e}/ack`,{method:"POST"})},async resolveIncident(e){return t(`/admin/incidents/${e}/resolve`,{method:"POST"})},async listRegions(){return t("/admin/regions")},async updateRegion(e,n){return t(`/admin/regions/${e}`,{method:"PATCH",body:JSON.stringify(n)})},async getHealthComponents(){return t("/admin/health/components")},async updateHealthComponent(e,n){return t(`/admin/health/components/${e}`,{method:"PATCH",body:JSON.stringify(n)})},async listQueues(){return t("/admin/queues")},async listDlqMessages(e){let n=new URLSearchParams;e?.queue&&n.set("queue",e.queue),e?.search&&n.set("search",e.search),e?.limit&&n.set("limit",String(e.limit)),e?.offset&&n.set("offset",String(e.offset));let r=n.toString();return t(`/admin/dlq${r?`?${r}`:""}`)},async retryDlqMessage(e){return t(`/admin/dlq/${e}/retry`,{method:"POST"})},async archiveDlqMessage(e){return t(`/admin/dlq/${e}`,{method:"DELETE"})}}}function wt(s){let t=$(s);return {async list(){return (await t("/flags")).flags},async create(e){return t("/flags",{method:"POST",body:JSON.stringify(e)})},async update(e,n){return t(`/flags/${encodeURIComponent(e)}`,{method:"PUT",body:JSON.stringify(n)})},async delete(e){return t(`/flags/${encodeURIComponent(e)}`,{method:"DELETE"})}}}function Ot(s){let t=$(s);return {async getOverview(e){return (await t(`/security/overview/${encodeURIComponent(e)}`)).overview},async getAuditLogs(e,n){let r=new URLSearchParams;n?.limit&&r.set("limit",String(n.limit)),n?.offset&&r.set("offset",String(n.offset));let a=r.toString(),i=`/security/audit/${encodeURIComponent(e)}${a?`?${a}`:""}`;return t(i)},async listEnvVars(e,n){let r=new URLSearchParams;n&&r.set("envId",n);let a=r.toString(),i=`/projects/${encodeURIComponent(e)}/env-vars${a?`?${a}`:""}`;return (await t(i)).envVars},async createEnvVar(e,n){return (await t(`/projects/${encodeURIComponent(e)}/env-vars`,{method:"POST",body:JSON.stringify(n)})).envVar},async updateEnvVar(e,n,r){return (await t(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(n)}`,{method:"PATCH",body:JSON.stringify(r)})).envVar},async deleteEnvVar(e,n){return t(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(n)}`,{method:"DELETE"})},async getEnvVarValue(e,n){return t(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(n)}/value`)}}}function Pt(s){let t=$(s);return {async generatePlan(e){return t("/ai/plan",{method:"POST",body:JSON.stringify({projectId:e.projectId,prompt:e.prompt,context:e.context,taskType:e.taskType,mode:e.mode})})},async explainPlan(e){return t("/ai/explain",{method:"POST",body:JSON.stringify({plan:e.plan,projectId:e.projectId,taskType:e.taskType,mode:e.mode})})},async getOrgSettings(e){return t(`/ai/settings/org/${encodeURIComponent(e)}`)},async updateOrgSettings(e,n){return t(`/ai/settings/org/${encodeURIComponent(e)}`,{method:"POST",body:JSON.stringify(n)})},async getProjectOverrides(e){return t(`/ai/settings/project/${encodeURIComponent(e)}`)},async updateProjectOverrides(e,n){return t(`/ai/settings/project/${encodeURIComponent(e)}`,{method:"POST",body:JSON.stringify(n)})},async getUsage(e,n){let r=new URLSearchParams;n&&r.set("month",n);let a=r.toString(),i=`/ai/usage/org/${encodeURIComponent(e)}${a?`?${a}`:""}`;return t(i)},async getBudgetStatus(e){let[n,r]=await Promise.all([this.getOrgSettings(e),this.getUsage(e)]),a=n?.monthlyBudgetCents??1e4,i=r.costCents,l=Math.max(0,a-i),o=a>0?Math.round(i/a*100):0;return {spent:i,budget:a,remaining:l,hardStop:n?.hardStopEnabled??false,percentUsed:o}},async generateFunction(e){return t("/ai/generate-function",{method:"POST",body:JSON.stringify({projectId:e.projectId,description:e.description,inputSchema:e.inputSchema,outputSchema:e.outputSchema,language:e.language??"typescript",mode:e.mode})})},async generateEndpoint(e){return t("/ai/generate-endpoint",{method:"POST",body:JSON.stringify({projectId:e.projectId,description:e.description,method:e.method??"GET",authRequired:e.authRequired??true,mode:e.mode})})},async exportCode(e){return t("/ai/export-code",{method:"POST",body:JSON.stringify({projectId:e.projectId,targetLanguage:e.targetLanguage,includeSchema:e.includeSchema??true,includeFunctions:e.includeFunctions??true,includeEndpoints:e.includeEndpoints??true})})},async createConversation(e,n){return t("/ai/conversations",{method:"POST",body:JSON.stringify({projectId:e,title:n?.title,context:n?.context})})},async sendMessage(e,n){return t(`/ai/conversations/${encodeURIComponent(e)}/messages`,{method:"POST",body:JSON.stringify({content:n.content,taskType:n.taskType})})},async getConversation(e){return t(`/ai/conversations/${encodeURIComponent(e)}`)},async listConversations(e){return (await t(`/ai/conversations/project/${encodeURIComponent(e)}`)).conversations},async deleteConversation(e){return t(`/ai/conversations/${encodeURIComponent(e)}`,{method:"DELETE"})}}}function vt(s){let t=$(s);return {async load(){return t("/bootstrap")}}}function Ut(s){let t=$(s);return {async list(e){let n=new URLSearchParams;e?.visibility&&n.set("visibility",e.visibility),e?.category&&n.set("category",e.category),e?.orgId&&n.set("orgId",e.orgId);let r=n.toString(),a=`/templates${r?`?${r}`:""}`;return (await t(a)).templates},async get(e){return t(`/templates/${e}`)},async previewInstall(e){return t("/templates/install/preview",{method:"POST",body:JSON.stringify(e)})},async applyInstall(e){return t("/templates/install/apply",{method:"POST",body:JSON.stringify(e)})},async rollback(e){return t(`/templates/install/${e}/rollback`,{method:"POST"})},async createProject(e){return t("/templates/create-project",{method:"POST",body:JSON.stringify(e)})}}}function Et(s){let t=$(s);return {async list(e){return (await t(`/oauth/org/${e}`)).connections},async configure(e,n){return t(`/oauth/org/${e}/configure`,{method:"POST",body:JSON.stringify(n)})},async enable(e){return t(`/oauth/connections/${e}/enable`,{method:"POST"})},async disable(e){return t(`/oauth/connections/${e}/disable`,{method:"POST"})},async delete(e){return t(`/oauth/connections/${e}`,{method:"DELETE"})}}}function Rt(s){let t=$(s);return {async listPages(e){let n=e?`?category=${encodeURIComponent(e)}`:"";return (await t(`/docs/pages${n}`)).pages},async getPage(e){return (await t(`/docs/pages/${encodeURIComponent(e)}`)).page},async createPage(e){return (await t("/docs/pages",{method:"POST",body:JSON.stringify(e)})).page},async updatePage(e,n){return (await t(`/docs/pages/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})).page},async deletePage(e){return t(`/docs/pages/${encodeURIComponent(e)}`,{method:"DELETE"})},async listSdks(){return (await t("/docs/sdks")).sdks},async getSdk(e){return (await t(`/docs/sdks/${encodeURIComponent(e)}`)).sdk},async createSdk(e){return (await t("/docs/sdks",{method:"POST",body:JSON.stringify(e)})).sdk},async updateSdk(e,n){return (await t(`/docs/sdks/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})).sdk},async deleteSdk(e){return t(`/docs/sdks/${encodeURIComponent(e)}`,{method:"DELETE"})},async listSdkExamples(e,n){let r=n?`?topic=${encodeURIComponent(n)}`:"";return (await t(`/docs/sdks/${encodeURIComponent(e)}/examples${r}`)).examples},async createSdkExample(e){return (await t("/docs/sdk-examples",{method:"POST",body:JSON.stringify(e)})).example},async deleteSdkExample(e){return t(`/docs/sdk-examples/${encodeURIComponent(e)}`,{method:"DELETE"})},async listEndpoints(e){let n=e?`?category=${encodeURIComponent(e)}`:"";return (await t(`/docs/api-endpoints${n}`)).endpoints},async getEndpoint(e){return (await t(`/docs/api-endpoints/${encodeURIComponent(e)}`)).endpoint},async createEndpoint(e){return (await t("/docs/api-endpoints",{method:"POST",body:JSON.stringify(e)})).endpoint},async updateEndpoint(e,n){return (await t(`/docs/api-endpoints/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})).endpoint},async deleteEndpoint(e){return t(`/docs/api-endpoints/${encodeURIComponent(e)}`,{method:"DELETE"})},async listExamples(e){let n=e!==void 0?`?featured=${e}`:"";return (await t(`/docs/examples${n}`)).examples},async getExample(e){return (await t(`/docs/examples/${encodeURIComponent(e)}`)).example},async createExample(e){return (await t("/docs/examples",{method:"POST",body:JSON.stringify(e)})).example},async updateExample(e,n){return (await t(`/docs/examples/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})).example},async deleteExample(e){return t(`/docs/examples/${encodeURIComponent(e)}`,{method:"DELETE"})},async listChangelog(){return (await t("/docs/changelog")).entries},async getChangelogEntry(e){return (await t(`/docs/changelog/${encodeURIComponent(e)}`)).entry},async createChangelogEntry(e){return (await t("/docs/changelog",{method:"POST",body:JSON.stringify(e)})).entry},async updateChangelogEntry(e,n){return (await t(`/docs/changelog/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})).entry},async deleteChangelogEntry(e){return t(`/docs/changelog/${encodeURIComponent(e)}`,{method:"DELETE"})},async search(e){return (await t(`/docs/search?q=${encodeURIComponent(e)}`)).results}}}function kt(s,t,e,n){let r=t.type||"public",a="unsubscribed",i=new Map,l=[],o={},c=null,u=null,f=new Set,p=new Set,d=new Set,g=y=>{if(y.event){let w=i.get(y.event);w&&w.forEach(v=>v(y.payload));}},m=y=>{o=y.state||{},f.forEach(w=>w(o));},T=y=>{let w=y.key||"",v=y.currentPresences||[],R=y.joinedPresences||[],S=y.leftPresences||[];R.length>0&&(o[w]=v,p.forEach(U=>U(w,v,R))),S.length>0&&(v.length===0?delete o[w]:o[w]=v,d.forEach(U=>U(w,v,S))),f.forEach(U=>U(o));},h=y=>{let w={type:"db_change",projectId:y.projectId||"",schema:y.schema||"",table:y.table||"",operation:y.op,new:y.record,old:y.old_record,timestamp:y.ts||new Date().toISOString(),partial:y.partial};l.forEach(({options:v,handler:R})=>{if(v.table===w.table){let S=v.event||"*";(S==="*"||(Array.isArray(S)?S.includes(w.operation):S===w.operation))&&R(w);}});},b={get name(){return s},get type(){return r},get status(){return a},_handleMessage:y=>{switch(y.type){case "broadcast":g(y);break;case "presence_state":m(y);break;case "presence":T(y);break;case "db_change":h(y);break;case "subscribed":a="subscribed";break;case "error":a="error";break}},onDbChange(y,w){return l.push({options:y,handler:w}),a==="subscribed"&&e({type:"subscribe",channel:s,options:{table:y.table,filter:y.filter,event:y.event,columns:y.columns}}),b},on(y,w){return i.has(y)||i.set(y,new Set),i.get(y).add(w),b},off(y,w){return w?i.get(y)?.delete(w):i.delete(y),b},async broadcast(y){if(a!=="subscribed")throw new Error("Channel must be subscribed before broadcasting");e({type:"broadcast",channel:s,event:y.event,payload:y.payload,includeSelf:y.includeSelf});},presence:{async track(y){if(r!=="presence")throw new Error("Presence tracking is only available on presence channels");c=y.key||n()||"anonymous",u=y.state,e({type:"presence_track",channel:s,key:c,state:u});},async update(y){if(!u)throw new Error("Must call track() before update()");u={...u,...y},e({type:"presence_update",channel:s,key:c,state:u});},async untrack(){c&&(e({type:"presence_untrack",channel:s,key:c}),c=null,u=null);},state(){return {...o}},onSync(y){return f.add(y),b},onJoin(y){return p.add(y),b},onLeave(y){return d.add(y),b}},async subscribe(){return a==="subscribed"||(a="subscribing",e({type:"subscribe",channel:s}),l.forEach(({options:y})=>{e({type:"subscribe",channel:s,options:{table:y.table,filter:y.filter,event:y.event,columns:y.columns}});}),t.presenceState&&r==="presence"&&await b.presence.track({state:t.presenceState})),b},async unsubscribe(){a!=="unsubscribed"&&(c&&await b.presence.untrack(),e({type:"unsubscribe",channel:s}),a="unsubscribed",o={},i.clear(),l.length=0);}};return b}function It(s,t){let{wsUrl:e=s.baseUrl.replace(/^http/,"ws")+"/realtime/ws",autoReconnect:n=true,reconnectDelay:r=1e3,maxReconnectAttempts:a=10}=t??{},i=null,l="disconnected",o=null,c=null,u=0,f=null,p=null,d=new Map,g=new Map,m=new Set,T={connect:new Set,disconnect:new Set,error:new Set,reconnect:new Set},h=S=>{T[S].forEach(U=>U());},b=S=>{let U=`table:${S.table}`;if(S.filter){let O=(Array.isArray(S.filter)?S.filter:[S.filter]).map(k=>`${k.field}${k.operator||"eq"}${k.value}`).join("&");U+=`?${O}`;}return U},y=S=>{i?.readyState===WebSocket.OPEN&&i.send(JSON.stringify(S));},w=S=>{if(S.channel){let U=d.get(S.channel);if(U){U._handleMessage(S);return}}switch(S.type){case "db_change":{let U={type:"db_change",projectId:S.projectId??"",schema:S.schema??"",table:S.table??"",operation:S.op,new:S.record,old:S.old_record,timestamp:S.ts??new Date().toISOString(),partial:S.partial},O=`table:${S.table}`;g.forEach((k,C)=>{(C===O||C.startsWith(O+"?"))&&k.forEach(P=>P(U));});break}case "presence":{let U={type:"presence",event:S.event,key:S.key||S.connectionId||"",connectionId:S.connectionId??"",projectId:S.projectId??"",currentPresences:S.currentPresences||[],leftPresences:S.leftPresences||[],joinedPresences:S.joinedPresences||[]};m.forEach(O=>O(U));break}case "welcome":o=S.connectionId||null;break;case "error":{console.error("[vaif/realtime] Server error:",S.message),h("error");break}}},v=()=>new Promise((S,U)=>{let O=new URLSearchParams;s.apiKey&&O.set(s.apiKeyHeader,s.apiKey),c&&O.set("token",c);let k=O.toString(),C=k?`${e}?${k}`:e;try{i=new WebSocket(C);}catch{U(new ee("Failed to create WebSocket connection"));return}let P=()=>{l="connected",u=0,h("connect"),d.forEach(q=>{(q.status==="subscribed"||q.status==="subscribing")&&q.subscribe();}),g.forEach((q,se)=>{y({type:"subscribe",channel:se});}),p=setInterval(()=>{y({type:"ping"});},3e4),S();},Z=q=>{try{let se=JSON.parse(q.data);w(se);}catch{}},Ye=()=>{if(l="disconnected",o=null,i=null,p&&(clearInterval(p),p=null),h("disconnect"),n&&u<a){l="reconnecting";let q=r*Math.pow(2,u);f=setTimeout(()=>{u++,h("reconnect"),v().catch(()=>{});},Math.min(q,3e4));}},et=()=>{h("error"),U(new ee("WebSocket connection error"));};i.addEventListener("open",P),i.addEventListener("message",Z),i.addEventListener("close",Ye),i.addEventListener("error",et);}),R=()=>{f&&(clearTimeout(f),f=null),p&&(clearInterval(p),p=null),u=a;};return {channel(S,U={}){let O=d.get(S);if(O)return O;let k=kt(S,U,y,()=>o);return d.set(S,k),k},async removeChannel(S){let U=d.get(S.name);U&&(await U.unsubscribe(),d.delete(S.name));},getChannels(){return Array.from(d.values())},subscribe(S,U){let O=b(S);return g.has(O)||g.set(O,new Set),g.get(O).add(U),i?.readyState===WebSocket.OPEN&&y({type:"subscribe",channel:O}),()=>{let k=g.get(O);k&&(k.delete(U),k.size===0&&(g.delete(O),i?.readyState===WebSocket.OPEN&&y({type:"unsubscribe",channel:O})));}},subscribeToPresence(S){return m.add(S),()=>{m.delete(S);}},async connect(){if(l!=="connected"){if(!s.apiKey)throw new ae("API key is required for realtime connections");l="connecting",await v();}},disconnect(){R(),d.forEach(S=>{S.unsubscribe();}),d.clear(),i&&(i.close(),i=null),l="disconnected",o=null;},get isConnected(){return l==="connected"},get connectionState(){return l},get connectionId(){return o},on(S,U){T[S].add(U);},off(S,U){T[S].delete(U);},setAuth(S){c=S;}}}var Y={apiKeyHeader:"x-vaif-key",timeout:3e4,retry:{maxRetries:3,retryDelay:1e3,retryOn:[429,500,502,503,504]}};function Ct(s){return {baseUrl:s.baseUrl.replace(/\/$/,""),apiKey:s.apiKey,apiKeyHeader:s.apiKeyHeader??Y.apiKeyHeader,accessToken:s.accessToken,fetch:s.fetch??globalThis.fetch.bind(globalThis),timeout:s.timeout??Y.timeout,retry:{maxRetries:s.retry?.maxRetries??Y.retry.maxRetries,retryDelay:s.retry?.retryDelay??Y.retry.retryDelay,retryOn:s.retry?.retryOn??[...Y.retry.retryOn]}}}function ye(s){let t=Ct(s),e=it(t),n=ct(t),r=lt(t),a=ut(t),i=dt(t),l=yt(t),o=pt(t),c=ft(t),u=gt(t),f=mt(t),p=ht(t),d=bt(t),g=Tt(t),m=St(t),T=wt(t),h=Ot(t),b=Pt(t),y=vt(t),w=Ut(t),v=Et(t),R=Rt(t);return {from:e.from,auth:n,functions:r,storage:a,projects:i,orgs:l,schema:o,secrets:c,deployments:u,realtimeMonitoring:f,storageDashboard:p,integrations:d,billing:g,admin:m,flags:T,security:h,ai:b,bootstrap:y,templates:w,oauth:v,docs:R,realtime:S=>It(t,S)}}var pe=createContext(null);function fe({config:s,children:t,onAuthStateChange:e,autoRefreshSession:n=true,storageKey:r="vaif-auth"}){let[a]=useState(()=>ye(s)),[i,l]=useState(null),[o,c]=useState(null),[u,f]=useState(null),[p,d]=useState(null),[g,m]=useState(true),T=useRef(null),h=useCallback((O,k,C)=>{let P={token:O,refreshToken:k,expiresAt:C};localStorage.setItem(r,JSON.stringify(P));},[r]),b=useCallback(()=>{localStorage.removeItem(r),l(null),c(null),f(null),d(null);},[r]);useEffect(()=>((async()=>{try{let k=localStorage.getItem(r);if(!k){m(!1);return}let C=JSON.parse(k);if(C.expiresAt&&new Date(C.expiresAt)<=new Date)if(C.refreshToken)try{let P=await a.auth.refreshToken(C.refreshToken);c(P.token),f(P.refreshToken??null),d(P.expiresAt),h(P.token,P.refreshToken,P.expiresAt);let Z=await a.auth.getUser();l(Z);}catch{b();}else b();else {c(C.token),f(C.refreshToken??null),d(C.expiresAt??null);try{let P=await a.auth.getUser();l(P);}catch{if(C.refreshToken)try{let P=await a.auth.refreshToken(C.refreshToken);c(P.token),f(P.refreshToken??null),d(P.expiresAt),h(P.token,P.refreshToken,P.expiresAt);let Z=await a.auth.getUser();l(Z);}catch{b();}else b();}}}catch{b();}finally{m(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[a,r,h,b]),useEffect(()=>{if(!n||!p||!u)return;let O=new Date(p).getTime(),k=Date.now(),C=O-k-6e4;return C>0&&(T.current=setTimeout(async()=>{try{let P=await a.auth.refreshToken(u);c(P.token),f(P.refreshToken??null),d(P.expiresAt),h(P.token,P.refreshToken,P.expiresAt);}catch{b();}},C)),()=>{T.current&&clearTimeout(T.current);}},[n,a,p,u,h,b]),useEffect(()=>{g||e?.(i);},[i,g,e]);let y=useCallback(async(O,k)=>{let C=await a.auth.login(O,k);if("mfaRequired"in C)throw new Error("MFA required - use verifyMFA to complete login");let P=C;return l(P.user),c(P.token),f(P.refreshToken??null),d(P.expiresAt??null),h(P.token,P.refreshToken,P.expiresAt),P},[a,h]),w=useCallback(async(O,k,C)=>{let P=await a.auth.signUp(O,k,{metadata:C});return l(P.user),c(P.token),f(P.refreshToken??null),d(P.expiresAt??null),h(P.token,P.refreshToken,P.expiresAt),P},[a,h]),v=useCallback(async()=>{try{await a.auth.logout();}finally{b();}},[a,b]),R=useCallback(async()=>{if(!u)throw new Error("No refresh token available");let O=await a.auth.refreshToken(u);c(O.token),f(O.refreshToken??null),d(O.expiresAt),h(O.token,O.refreshToken,O.expiresAt);},[a,u,h]),S=useCallback(O=>{l(k=>k?{...k,...O}:null);},[]),U={client:a,user:i,token:o,isLoading:g,isAuthenticated:!!i,signIn:y,signUp:w,signOut:v,refreshSession:R,updateUser:S};return jsx(pe.Provider,{value:U,children:t})}function L(){let s=useContext(pe);if(!s)throw new Error("useVaif must be used within a VaifProvider");return s}function E(){let{client:s}=L();return s}function ge(){let{user:s,token:t,isLoading:e,isAuthenticated:n,signIn:r,signUp:a,signOut:i,refreshSession:l}=L();return {user:s,token:t,isLoading:e,isAuthenticated:n,signIn:r,signUp:a,signOut:i,refreshSession:l}}function me(){let{user:s}=L();return s}function he(){let{token:s}=L();return s}function be(){let{client:s}=L(),[t,e]=useState(false),[n,r]=useState(null),[a,i]=useState(false),[l,o]=useState(false),c=useCallback(async f=>{e(true),r(null);try{await s.auth.requestPasswordReset({email:f}),i(!0);}catch(p){throw r(p instanceof Error?p:new Error("Failed to request reset")),p}finally{e(false);}},[s]),u=useCallback(async(f,p)=>{e(true),r(null);try{await s.auth.confirmPasswordReset({token:f,password:p}),o(!0);}catch(d){throw r(d instanceof Error?d:new Error("Failed to reset password")),d}finally{e(false);}},[s]);return {requestReset:c,confirmReset:u,isLoading:t,error:n,isRequested:a,isConfirmed:l}}function Te(){let{client:s}=L(),[t,e]=useState(false),[n,r]=useState(null),[a,i]=useState(false),[l,o]=useState(false),c=useCallback(async f=>{e(true),r(null);try{await s.auth.requestEmailVerification({email:f}),i(!0);}catch(p){throw r(p instanceof Error?p:new Error("Failed to send verification")),p}finally{e(false);}},[s]),u=useCallback(async f=>{e(true),r(null);try{await s.auth.confirmEmailVerification({token:f}),o(!0);}catch(p){throw r(p instanceof Error?p:new Error("Failed to verify email")),p}finally{e(false);}},[s]);return {requestVerification:c,confirmVerification:u,isLoading:t,error:n,isSent:a,isVerified:l}}function Se(){let{client:s}=L(),[t,e]=useState(false),[n,r]=useState(null),[a,i]=useState(false),l=useCallback(async c=>{e(true),r(null);try{await s.auth.requestMagicLink({email:c}),i(!0);}catch(u){throw r(u instanceof Error?u:new Error("Failed to send magic link")),u}finally{e(false);}},[s]),o=useCallback(async c=>{e(true),r(null);try{return await s.auth.verifyMagicLink({token:c})}catch(u){throw r(u instanceof Error?u:new Error("Failed to verify magic link")),u}finally{e(false);}},[s]);return {sendMagicLink:l,verifyMagicLink:o,isLoading:t,error:n,isSent:a}}function we(){let{client:s}=L(),[t,e]=useState(false),[n,r]=useState(null);return {signInWithOAuth:useCallback(async(i,l)=>{e(true),r(null);try{let o=await s.auth.getOAuthSignInUrl({provider:i,redirectUrl:l});o.url&&(window.location.href=o.url);}catch(o){throw r(o instanceof Error?o:new Error("Failed to start OAuth flow")),o}finally{e(false);}},[s]),isLoading:t,error:n}}function Oe(){let{client:s}=L(),[t,e]=useState(false),[n,r]=useState(null),a=useCallback(async o=>{e(true),r(null);try{return await s.auth.setupMFA(o)}catch(c){throw r(c instanceof Error?c:new Error("Failed to setup MFA")),c}finally{e(false);}},[s]),i=useCallback(async(o,c)=>{e(true),r(null);try{return await s.auth.verifyMFA(o,c)}catch(u){throw r(u instanceof Error?u:new Error("Failed to verify MFA")),u}finally{e(false);}},[s]),l=useCallback(async o=>{e(true),r(null);try{await s.auth.disableMFA(o);}catch(c){throw r(c instanceof Error?c:new Error("Failed to disable MFA")),c}finally{e(false);}},[s]);return {setup:a,verify:i,disable:l,isLoading:t,error:n}}var Pe=new Map;function At(s,t){return `${s}:${JSON.stringify(t||{})}`}function ve(s,t){let e=E(),[n,r]=useState(t?.initialData||[]),[a,i]=useState(null),[l,o]=useState(t?.enabled===false?"idle":"loading"),[c,u]=useState(false),[f,p]=useState(true),d=useRef(0),g=t?.enabled!==false,m=t?.staleTime??0,T=t?.keepPreviousData??false,h=useCallback(async()=>{if(!g)return;let b={where:t?.where,orderBy:t?.orderBy,limit:t?.limit,offset:t?.offset,select:t?.select,include:t?.include,distinct:t?.distinct},y=At(s,b),w=Pe.get(y);if(w&&Date.now()-w.timestamp<m){r(w.data),o("success"),p(false);return}u(true),T||o("loading"),i(null);try{let v=await e.from(s).list(b);r(v.data),o("success"),p(!1),d.current=Date.now(),Pe.set(y,{data:v.data,timestamp:Date.now()}),t?.onSuccess?.(v.data);}catch(v){let R=v instanceof Error?v:new Error("Query failed");i(R),o("error"),t?.onError?.(R);}finally{u(false);}},[e,s,t,g,m,T]);return useEffect(()=>{h();},[h]),useEffect(()=>{if(!t?.refetchOnWindowFocus||!g)return;let b=()=>{Date.now()-d.current>m&&(p(true),h());};return window.addEventListener("focus",b),()=>window.removeEventListener("focus",b)},[t?.refetchOnWindowFocus,g,m,h]),useEffect(()=>{if(!t?.refetchInterval||t.refetchInterval<=0||!g)return;let b=setInterval(()=>{p(true),h();},t.refetchInterval);return ()=>clearInterval(b)},[t?.refetchInterval,g,h]),{data:n,isLoading:l==="loading",isFetching:c,error:a,status:l,refetch:h,isStale:f,isEnabled:g}}function Ue(s,t,e){let n=E(),[r,a]=useState(null),[i,l]=useState(null),[o,c]=useState(!!t&&e?.enabled!==false),[u,f]=useState(false),p=!!t&&e?.enabled!==false,d=useCallback(async()=>{if(!(!p||!t)){c(true),l(null),f(false);try{let g=await n.from(s).get(t);a(g.data);}catch(g){let m=g instanceof Error?g:new Error("Query failed");m.message.includes("not found")||m.message.includes("404")?f(true):l(m);}finally{c(false);}}},[n,s,t,p]);return useEffect(()=>{d();},[d]),{data:r,isLoading:o,error:i,isNotFound:u,refetch:d}}function te(s,t,e){let n=s.from(t);if(e?.where){let r=Array.isArray(e.where)?{AND:e.where}:e.where;n=n.where(r);}if(e?.orderBy){let r=Array.isArray(e.orderBy)?e.orderBy:[e.orderBy];for(let a of r)n=n.orderBy(a.field,a.direction);}if(e?.select&&(n=n.select(...e.select)),e?.include)for(let r of e.include)n=n.include(r);return n}function Ee(s,t){let e=E(),[n,r]=useState(null),[a,i]=useState(null),[l,o]=useState(t?.enabled!==false),[c,u]=useState(false),f=t?.enabled!==false,p=useCallback(async()=>{if(f){o(true),i(null),u(false);try{let g=await te(e,s,{where:t?.where,orderBy:t?.orderBy,select:t?.select,include:t?.include}).first();g?r(g):u(!0);}catch(d){let g=d instanceof Error?d:new Error("Query failed");i(g);}finally{o(false);}}},[e,s,t,f]);return useEffect(()=>{p();},[p]),{data:n,isLoading:l,error:a,isNotFound:c,refetch:p}}function Re(s,t){let e=E(),[n,r]=useState([]),[a,i]=useState(t?.initialPage??1),[l,o]=useState(null),[c,u]=useState(true),[f,p]=useState(null),d=t?.pageSize??10,g=useCallback(async S=>{u(true),p(null);try{let O=await te(e,s,{where:t?.where,orderBy:t?.orderBy,select:t?.select,include:t?.include}).paginate({page:S,pageSize:d});r(O.data),o(O.pageInfo),i(O.pageInfo.page),t?.onSuccess?.(O);}catch(U){let O=U instanceof Error?U:new Error("Query failed");p(O),t?.onError?.(O);}finally{u(false);}},[e,s,t,d]);useEffect(()=>{g(a);},[g,a]);let m=l?.total??0,T=l?.pageCount??0,h=l?.hasNextPage??false,b=l?.hasPrevPage??false,y=useCallback(()=>{h&&i(S=>S+1);},[h]),w=useCallback(()=>{b&&i(S=>S-1);},[b]),v=useCallback(S=>{let U=Math.max(1,Math.min(S,T||1));i(U);},[T]),R=useCallback(()=>g(a),[g,a]);return {data:n,page:a,pageSize:d,totalCount:m,totalPages:T,hasNextPage:h,hasPrevPage:b,isLoading:c,error:f,nextPage:y,prevPage:w,goToPage:v,refetch:R}}function ke(s,t){let e=E(),[n,r]=useState([]),[a,i]=useState(null),[l,o]=useState(true),[c,u]=useState(true),[f,p]=useState(false),[d,g]=useState(null),m=t?.pageSize??20,T=useCallback(async()=>{if(!l)return;n.length===0?u(true):p(true),g(null);try{let R=await te(e,s,{where:t?.where,orderBy:t?.orderBy,select:t?.select,include:t?.include}).cursorPaginate({cursor:a??void 0,limit:m});r(S=>[...S,R.data]),i(R.nextCursor??null),o(R.hasMore),t?.onSuccess?.(R.data,R.hasMore);}catch(v){let R=v instanceof Error?v:new Error("Query failed");g(R),t?.onError?.(R);}finally{u(false),p(false);}},[e,s,t,a,l,n.length,m]);useEffect(()=>{T();},[]);let h=useCallback(async()=>{r([]),i(null),o(true),u(true);try{let v=await te(e,s,{where:t?.where,orderBy:t?.orderBy,select:t?.select,include:t?.include}).cursorPaginate({limit:m});r([v.data]),i(v.nextCursor??null),o(v.hasMore);}catch(w){g(w instanceof Error?w:new Error("Query failed"));}finally{u(false);}},[e,s,t,m]),b=useCallback(()=>{r([]),i(null),o(true),u(true),g(null);},[]);return {data:n.flat(),pages:n,hasNextPage:l,isLoading:c,isFetchingNextPage:f,error:d,fetchNextPage:T,refetch:h,reset:b}}function Ie(s,t){let e=E(),[n,r]=useState(0),[a,i]=useState(t?.enabled!==false),[l,o]=useState(null),c=t?.enabled!==false,u=useCallback(async()=>{if(c){i(true),o(null);try{let f=e.from(s);t?.where&&(f=f.where(t.where));let p=await f.count();r(p);}catch(f){o(f instanceof Error?f:new Error("Count failed"));}finally{i(false);}}},[e,s,t?.where,c]);return useEffect(()=>{u();},[u]),{count:n,isLoading:a,error:l,refetch:u}}function j(s,t){let[e,n]=useState("idle"),[r,a]=useState(void 0),[i,l]=useState(null),o=useRef(0),c=useCallback(()=>{n("idle"),a(void 0),l(null),o.current=0;},[]),u=useCallback(async p=>{n("loading"),l(null);try{await t?.onMutate?.(p);let d=await s(p);return a(d),n("success"),o.current=0,await t?.onSuccess?.(d,p),await t?.onSettled?.(d,null,p),d}catch(d){let g=d instanceof Error?d:new Error("Mutation failed"),m=t?.retry??0;if(o.current<m){o.current++;let T=t?.retryDelay??1e3;return await new Promise(h=>setTimeout(h,T)),u(p)}throw l(g),n("error"),await t?.onError?.(g,p),await t?.onSettled?.(void 0,g,p),g}},[s,t]);return {mutate:useCallback(p=>{u(p).catch(()=>{});},[u]),mutateAsync:u,data:r,error:i,isLoading:e==="loading",isSuccess:e==="success",isError:e==="error",isIdle:e==="idle",status:e,reset:c}}function $e(s,t){let e=E();return j(async n=>(await e.from(s).create(n)).data,t)}function xe(s,t){let e=E();return j(async({id:n,data:r})=>(await e.from(s).update(n,r)).data,t)}function De(s,t){let e=E();return j(async n=>{await e.from(s).delete(n);},t)}function Fe(s,t){let e=E();return j(async({data:n,conflictFields:r,updateFields:a})=>{let i={conflictFields:r,updateFields:a};return (await e.from(s).upsert(n,i)).data},t)}function Me(s,t){let e=E();return j(async n=>{let r=await e.from(s).createMany(n);return {count:r.count,records:r.records}},t)}function Ae(s,t){let e=E();return j(async({data:n,where:r})=>{let a=await e.from(s).where(r).updateMany(n);return {count:a.count,records:a.records}},t)}function Le(s,t){let e=E();return j(async n=>({count:(await e.from(s).where(n).deleteMany()).count}),t)}function Ne(s,t,e){let[n,r]=useState(s),[a,i]=useState(false),[l,o]=useState(null),c=useRef(s),u=useCallback(()=>{r(c.current);},[]),f=useCallback(async d=>{i(true),o(null),c.current=n;let g=e.optimisticUpdate(n,d);r(g);try{let m=await t(d);return r(m),e.onSuccess?.(m,d),e.onSettled?.(m,null,d),m}catch(m){let T=m instanceof Error?m:new Error("Mutation failed");throw o(T),u(),e.onError?.(T,d),e.onSettled?.(void 0,T,d),T}finally{i(false);}},[n,t,e,u]);return {mutate:useCallback(d=>{f(d).catch(()=>{});},[f]),mutateAsync:f,optimisticData:n,rollback:u,isLoading:a,error:l}}function Je(s,t){let e=E(),[n,r]=useState(null),[a,i]=useState([]),[l,o]=useState(false),c=useRef(null),u=useRef(null),f=t?.enabled!==false;useEffect(()=>{if(!f)return;let d=e.realtime();c.current=d;let g=d.channel(`table:${s}`);return u.current=g,g.onDbChange({table:s,event:t?.operations||"*"},m=>{switch(m.new!==void 0&&r(m.new),i(T=>[...T,m]),m.operation){case "INSERT":m.new&&t?.onInsert?.(m.new);break;case "UPDATE":m.new&&t?.onUpdate?.(m.new,m.old??null);break;case "DELETE":m.old&&t?.onDelete?.(m.old);break}t?.onChange?.(m);}),g.subscribe(),o(true),()=>{g.unsubscribe(),d.disconnect(),o(false);}},[e,s,f,t]);let p=useCallback(()=>{i([]);},[]);return {data:n,changes:a,isSubscribed:l,clearChanges:p}}function ce(s,t){let e=E(),[n,r]=useState(null),[a,i]=useState([]),[l,o]=useState(false),c=useRef(null),u=useRef(null),f=t?.enabled!==false;useEffect(()=>{if(!f)return;let g=e.realtime();c.current=g;let m=g.channel(s,{type:t?.type||"public"});return u.current=m,m.on("*",T=>{let h={event:"*",payload:T};r(h),i(b=>[...b,h]);}),m.subscribe(),o(true),()=>{m.unsubscribe(),g.disconnect(),o(false);}},[e,s,f,t?.type]);let p=useCallback((g,m)=>{u.current?.broadcast({event:g,payload:m});},[]),d=useCallback(()=>{u.current?.unsubscribe(),o(false);},[]);return {broadcast:p,lastMessage:n,messages:a,isJoined:l,leave:d}}function Ve(s,t,e){let n=E(),[r,a]=useState({}),[i,l]=useState(false),o=useRef(null),c=useRef(null),u=e?.enabled!==false;useEffect(()=>{if(!u)return;let m=n.realtime();o.current=m;let T=m.channel(s,{type:"presence"});return c.current=T,T.presence.onSync(h=>{a(h);}),T.subscribe(),t&&(T.presence.track({state:t}),l(true)),()=>{T.unsubscribe(),m.disconnect(),l(false);}},[n,s,u,t]);let f=useCallback(m=>{c.current?.presence.update(m);},[]),p=useCallback(()=>{c.current?.presence.untrack(),l(false);},[]),d=Object.keys(r).length,g=Object.keys(r);return {presence:r,count:d,onlineUsers:g,update:f,leave:p,isTracking:i}}function Be(){let s=E(),[t,e]=useState("disconnected"),[n,r]=useState(null),a=useRef(null);useEffect(()=>{let o=s.realtime();return a.current=o,e(o.connectionState),r(o.connectionId),o.on("connect",()=>{e("connected"),r(o.connectionId);}),o.on("disconnect",()=>{e("disconnected"),r(null);}),o.on("reconnect",()=>{e("connected"),r(o.connectionId);}),o.on("error",()=>{e("disconnected");}),()=>{o.disconnect();}},[s]);let i=useCallback(()=>{a.current?.connect();},[]),l=useCallback(()=>{a.current?.disconnect();},[]);return {state:t,isConnected:t==="connected",connectionId:n,reconnect:i,disconnect:l}}function je(s,t){let e=ce(s,t);return {send:e.broadcast,messages:e.messages,lastMessage:e.lastMessage,isConnected:e.isJoined}}function le(s){let t=E(),[e,n]=useState(0),[r,a]=useState(false),[i,l]=useState(null),[o,c]=useState(null),[u,f]=useState([]),p=useCallback(T=>{if(s?.maxSize&&T.size>s.maxSize)throw new Error(`File size (${Math.round(T.size/1024/1024)}MB) exceeds maximum allowed (${Math.round(s.maxSize/1024/1024)}MB)`);if(s?.allowedTypes&&s.allowedTypes.length>0&&!s.allowedTypes.includes(T.type))throw new Error(`File type "${T.type}" is not allowed. Allowed types: ${s.allowedTypes.join(", ")}`)},[s?.maxSize,s?.allowedTypes]),d=useCallback(async(T,h)=>{a(true),l(null),n(0);try{p(h),s?.onUploadStart?.(h);let b=await t.storage.upload(T,h,{contentType:h.type,metadata:s?.metadata,isPublic:s?.isPublic});return n(100),c(b),f(y=>[...y,b]),s?.onSuccess?.(b,h),b}catch(b){let y=b instanceof Error?b:new Error("Upload failed");throw l(y),s?.onError?.(y,h),y}finally{a(false);}},[t,s,p]),g=useCallback(async T=>{let h=[];for(let{key:b,file:y}of T){let w=await d(b,y);h.push(w);}return h},[d]),m=useCallback(()=>{n(0),a(false),l(null),c(null),f([]);},[]);return {upload:d,uploadMultiple:g,progress:e,isUploading:r,error:i,result:o,results:u,reset:m}}function qe(s){let t=E(),[e,n]=useState(false),[r,a]=useState(null),i=useCallback(async(o,c)=>{n(true),a(null);try{let u=await t.storage.download(o);return s?.onSuccess?.(u,c||o.split("/").pop()||"download"),u}catch(u){let f=u instanceof Error?u:new Error("Download failed");throw a(f),s?.onError?.(f),f}finally{n(false);}},[t,s]),l=useCallback(async(o,c)=>{let u=await i(o,c),f=c||o.split("/").pop()||"download",p=URL.createObjectURL(u),d=document.createElement("a");d.href=p,d.download=f,document.body.appendChild(d),d.click(),document.body.removeChild(d),URL.revokeObjectURL(p);},[i]);return {download:i,downloadAndSave:l,isDownloading:e,error:r}}function Qe(s,t){let e=E(),[n,r]=useState(null),[a,i]=useState(null),[l,o]=useState(!!s&&t?.enabled!==false),[c,u]=useState(null),f=!!s&&t?.enabled!==false,p=useCallback(async()=>{if(!(!f||!s)){o(true),u(null);try{let g=await e.storage.createSignedUrl(s,t?.expiresIn);r(g);let m=await e.storage.getMetadata(s);i(m);}catch(g){u(g instanceof Error?g:new Error("Failed to load file"));}finally{o(false);}}},[e,s,t?.expiresIn,f]),d=useCallback(async()=>{s&&(await e.storage.delete(s),r(null),i(null));},[e,s]);return {url:n,metadata:a,isLoading:l,error:c,refresh:p,deleteFile:d}}function ze(s){let t=E(),[e,n]=useState([]),[r,a]=useState(s?.enabled!==false),[i,l]=useState(null),o=s?.enabled!==false,c=useCallback(async()=>{if(o){a(true),l(null);try{let u=await t.storage.list({prefix:s?.prefix,limit:s?.limit});n(u.files);}catch(u){l(u instanceof Error?u:new Error("Failed to list files"));}finally{a(false);}}},[t,s,o]);return {files:e,isLoading:r,error:i,refresh:c}}function He(s){let t=le(s),[e,n]=useState(false),[r,a]=useState([]),i=useRef(null),l=useCallback(h=>{h.preventDefault(),h.stopPropagation(),n(true);},[]),o=useCallback(h=>{h.preventDefault(),h.stopPropagation(),n(false);},[]),c=useCallback(h=>{let b=s?.basePath||"uploads",y=Date.now().toString(36)+Math.random().toString(36).substr(2,9),w=h.name.split(".").pop()||"";return s?.uniqueKey?`${b}/${y}.${w}`:`${b}/${h.name}`},[s?.basePath,s?.uniqueKey]),u=useCallback(async h=>{h.preventDefault(),h.stopPropagation(),n(false);let b=Array.from(h.dataTransfer.files);if(b.length===0)return;let y=s?.multiple?b:[b[0]];a(y),await t.uploadMultiple(y.map(w=>({key:c(w),file:w})));},[s?.multiple,t,c]),f=useCallback(async h=>{let b=Array.from(h.target.files||[]);b.length!==0&&(a(b),await t.uploadMultiple(b.map(y=>({key:c(y),file:y}))));},[t,c]),p=useCallback(()=>{i.current?.click();},[]),d=useCallback(()=>{a([]),t.reset();},[t]),g=useCallback(h=>{a(b=>b.filter((y,w)=>w!==h));},[]),m=useCallback(()=>({onDragOver:l,onDragLeave:o,onDrop:u,onClick:p}),[l,o,u,p]),T=useCallback(()=>({type:"file",onChange:f,multiple:s?.multiple??false,accept:s?.allowedTypes?.join(",")??"",style:{display:"none"},ref:h=>{i.current=h;}}),[f,s?.multiple,s?.allowedTypes]);return {...t,dropzone:{isDragOver:e,selectedFiles:r},getDropzoneProps:m,getInputProps:T,openFilePicker:p,clearFiles:d,removeFile:g}}function We(s){return E().storage.getPublicUrl(s)}var re=new Map;function Ke(s,t){let e=E(),[n,r]=useState(null),[a,i]=useState(false),[l,o]=useState(null),[c,u]=useState(false),[f,p]=useState(null),d=useRef(0),g=useCallback(async T=>{i(true),o(null),u(false);try{let h={timeout:t?.timeout,includeLogs:t?.includeLogs,version:t?.version};t?.retry&&(h.retry={maxRetries:t.maxRetries??3});let b=await e.functions.invoke(s,{body:T},h);return r(b.data),p(b),u(!0),d.current=0,t?.onSuccess?.(b.data,T),b.data}catch(h){let b=h instanceof Error?h:new Error("Function invocation failed");throw o(b),t?.onError?.(b,T),b}finally{i(false);}},[e,s,t]),m=useCallback(()=>{r(null),i(false),o(null),u(false),p(null),d.current=0;},[]);return {invoke:g,data:n,isLoading:a,error:l,isSuccess:c,invocation:f,reset:m}}function _e(s,t){let e=E(),[n,r]=useState(null),[a,i]=useState(false),[l,o]=useState(null),[c,u]=useState(false),[f,p]=useState(null),d=t?.cache??false,g=t?.cacheTtl??6e4,m=useCallback(y=>`${s}:${JSON.stringify(y)}`,[s]),T=useCallback(async y=>{if(d){let w=m(y),v=re.get(w);if(v&&Date.now()-v.timestamp<g){let R=v.data;return r(R),u(true),t?.onSuccess?.(R,y),R}}i(true),o(null),u(false);try{let w={timeout:t?.timeout,includeLogs:t?.includeLogs,version:t?.version};t?.retry&&(w.retry={maxRetries:t.maxRetries??3});let R=await e.functions.rpc(s,w)(y);if(r(R),u(!0),d){let S=m(y);re.set(S,{data:R,timestamp:Date.now()});}return t?.onSuccess?.(R,y),R}catch(w){let v=w instanceof Error?w:new Error("RPC call failed");throw o(v),t?.onError?.(v,y),v}finally{i(false);}},[e,s,t,d,g,m]),h=useCallback(()=>{let y=`${s}:`;for(let w of re.keys())w.startsWith(y)&&re.delete(w);},[s]),b=useCallback(()=>{r(null),i(false),o(null),u(false),p(null);},[]);return {invoke:T,data:n,isLoading:a,error:l,isSuccess:c,invocation:f,reset:b,clearCache:h}}function Ge(s){let t=E(),[e,n]=useState([]),[r,a]=useState(true),[i,l]=useState(null),o=useCallback(async()=>{a(true),l(null);try{let c=await t.functions.list({projectId:s.projectId,envId:s.envId,enabled:s.enabled,limit:s.limit,offset:s.offset});n(c);}catch(c){l(c instanceof Error?c:new Error("Failed to list functions"));}finally{a(false);}},[t,s.projectId,s.envId,s.enabled,s.limit,s.offset]);return useEffect(()=>{o();},[o]),{functions:e,isLoading:r,error:i,refresh:o}}function Xe(s,t){let e=E(),[n,r]=useState([]),[a,i]=useState(false),[l,o]=useState(0),[c,u]=useState(null);return {invoke:useCallback(async p=>{i(true),u(null),o(0),r([]);let d=[],g=t?.concurrency??5,m=p.length,T=0;try{for(let h=0;h<p.length;h+=g){let b=p.slice(h,h+g),y=await Promise.all(b.map(async w=>(await e.functions.invoke(s,{body:w})).data));d.push(...y),T+=b.length,o(Math.round(T/m*100)),r([...d]),t?.onProgress?.(T,m);}return t?.onSuccess?.(d),d}catch(h){let b=h instanceof Error?h:new Error("Batch invocation failed");throw u(b),t?.onError?.(b),b}finally{i(false);}},[e,s,t]),results:n,isLoading:a,progress:l,error:c}}function Ze(s){let t=E(),[e,n]=useState(false),[r,a]=useState(null),[i,l]=useState(null),[o,c]=useState(null),u=useCallback(async(p,d)=>{c(null);try{let m=(await t.functions.invoke(s,{body:p})).requestId??`scheduled-${Date.now()}`;return l(m),n(!0),a(new Date(Date.now()+d.delayMs)),m}catch(g){let m=g instanceof Error?g:new Error("Failed to schedule function");throw c(m),m}},[t,s]),f=useCallback(async()=>{n(false),a(null),l(null);},[]);return {schedule:u,cancel:f,isScheduled:e,scheduledAt:r,requestId:i,error:o}}export{fe as VaifProvider,ge as useAuth,Me as useBatchCreate,Le as useBatchDelete,Xe as useBatchInvoke,Ae as useBatchUpdate,je as useBroadcast,ce as useChannel,Ie as useCount,$e as useCreate,De as useDelete,qe as useDownload,He as useDropzone,Te as useEmailVerification,Qe as useFile,ze as useFiles,Ke as useFunction,Ge as useFunctionList,ke as useInfiniteQuery,Oe as useMFA,Se as useMagicLink,j as useMutation,we as useOAuth,Ne as useOptimisticMutation,Re as usePaginatedQuery,be as usePasswordReset,Ve as usePresence,We as usePublicUrl,ve as useQuery,Ue as useQueryById,Ee as useQueryFirst,Be as useRealtimeConnection,_e as useRpc,Ze as useScheduledFunction,Je as useSubscription,he as useToken,xe as useUpdate,le as useUpload,Fe as useUpsert,me as useUser,L as useVaif,E as useVaifClient};
|
|
1
|
+
import {createContext,useState,useRef,useCallback,useEffect,useContext}from'react';import {createVaifClient}from'@vaiftech/client';import {jsx}from'react/jsx-runtime';export{AuthProvider,VaifAuthClient,createAuthClient,useAuthClient,useIdentities,useIsAuthenticated,usePassword,useSession,useSessions,useAuth as useStandaloneAuth,useMFA as useStandaloneMFA,useUser as useStandaloneUser}from'@vaiftech/auth/react';var te=createContext(null);function ne({config:t,children:e,onAuthStateChange:n,autoRefreshSession:o=true,storageKey:r="vaif-auth"}){let[a]=useState(()=>createVaifClient(t)),[u,d]=useState(null),[s,l]=useState(null),[i,h]=useState(null),[f,c]=useState(null),[y,g]=useState(true),T=useRef(null),p=useCallback((x,M,F)=>{let U={token:x,refreshToken:M,expiresAt:F};localStorage.setItem(r,JSON.stringify(U));},[r]),m=useCallback(()=>{localStorage.removeItem(r),d(null),l(null),h(null),c(null);},[r]);useEffect(()=>((async()=>{try{let M=localStorage.getItem(r);if(!M){g(!1);return}let F=JSON.parse(M);if(F.expiresAt&&new Date(F.expiresAt)<=new Date)if(F.refreshToken)try{let U=await a.auth.refreshToken(F.refreshToken);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();else {l(F.token),h(F.refreshToken??null),c(F.expiresAt??null);try{let U=await a.auth.getUser();d(U);}catch{if(F.refreshToken)try{let U=await a.auth.refreshToken(F.refreshToken);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);let X=await a.auth.getUser();d(X);}catch{m();}else m();}}}catch{m();}finally{g(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[a,r,p,m]),useEffect(()=>{if(!o||!f||!i)return;let x=new Date(f).getTime(),M=Date.now(),F=x-M-6e4;return F>0&&(T.current=setTimeout(async()=>{try{let U=await a.auth.refreshToken(i);l(U.token),h(U.refreshToken??null),c(U.expiresAt),p(U.token,U.refreshToken,U.expiresAt);}catch{m();}},F)),()=>{T.current&&clearTimeout(T.current);}},[o,a,f,i,p,m]),useEffect(()=>{y||n?.(u);},[u,y,n]);let b=useCallback(async(x,M)=>{let F=await a.auth.login(x,M);if("mfaRequired"in F)throw new Error("MFA required - use verifyMFA to complete login");let U=F;return d(U.user),l(U.token),h(U.refreshToken??null),c(U.expiresAt??null),p(U.token,U.refreshToken,U.expiresAt),U},[a,p]),w=useCallback(async(x,M,F)=>{let U=await a.auth.signUp(x,M,{metadata:F});return d(U.user),l(U.token),h(U.refreshToken??null),c(U.expiresAt??null),p(U.token,U.refreshToken,U.expiresAt),U},[a,p]),v=useCallback(async()=>{try{await a.auth.logout();}finally{m();}},[a,m]),E=useCallback(async()=>{if(!i)throw new Error("No refresh token available");let x=await a.auth.refreshToken(i);l(x.token),h(x.refreshToken??null),c(x.expiresAt),p(x.token,x.refreshToken,x.expiresAt);},[a,i,p]),C=useCallback(x=>{d(M=>M?{...M,...x}:null);},[]),q={client:a,user:u,token:s,isLoading:y,isAuthenticated:!!u,signIn:b,signUp:w,signOut:v,refreshSession:E,updateUser:C};return jsx(te.Provider,{value:q,children:e})}function D(){let t=useContext(te);if(!t)throw new Error("useVaif must be used within a VaifProvider");return t}function R(){let{client:t}=D();return t}function re(){let{user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}=D();return {user:t,token:e,isLoading:n,isAuthenticated:o,signIn:r,signUp:a,signOut:u,refreshSession:d}}function se(){let{user:t}=D();return t}function oe(){let{token:t}=D();return t}function ae(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(false),l=useCallback(async h=>{n(true),r(null);try{await t.auth.requestPasswordReset({email:h}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to request reset")),f}finally{n(false);}},[t]),i=useCallback(async(h,f)=>{n(true),r(null);try{await t.auth.confirmPasswordReset({token:h,password:f}),s(!0);}catch(c){throw r(c instanceof Error?c:new Error("Failed to reset password")),c}finally{n(false);}},[t]);return {requestReset:l,confirmReset:i,isLoading:e,error:o,isRequested:a,isConfirmed:d}}function ie(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(false),l=useCallback(async h=>{n(true),r(null);try{await t.auth.requestEmailVerification({email:h}),u(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to send verification")),f}finally{n(false);}},[t]),i=useCallback(async h=>{n(true),r(null);try{await t.auth.confirmEmailVerification({token:h}),s(!0);}catch(f){throw r(f instanceof Error?f:new Error("Failed to verify email")),f}finally{n(false);}},[t]);return {requestVerification:l,confirmVerification:i,isLoading:e,error:o,isSent:a,isVerified:d}}function le(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),[a,u]=useState(false),d=useCallback(async l=>{n(true),r(null);try{await t.auth.requestMagicLink({email:l}),u(!0);}catch(i){throw r(i instanceof Error?i:new Error("Failed to send magic link")),i}finally{n(false);}},[t]),s=useCallback(async l=>{n(true),r(null);try{return await t.auth.verifyMagicLink({token:l})}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify magic link")),i}finally{n(false);}},[t]);return {sendMagicLink:d,verifyMagicLink:s,isLoading:e,error:o,isSent:a}}function ue(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null);return {signInWithOAuth:useCallback(async(u,d)=>{n(true),r(null);try{let s=await t.auth.getOAuthSignInUrl({provider:u,redirectUrl:d});s.url&&(window.location.href=s.url);}catch(s){throw r(s instanceof Error?s:new Error("Failed to start OAuth flow")),s}finally{n(false);}},[t]),isLoading:e,error:o}}function ce(){let{client:t}=D(),[e,n]=useState(false),[o,r]=useState(null),a=useCallback(async s=>{n(true),r(null);try{return await t.auth.setupMFA(s)}catch(l){throw r(l instanceof Error?l:new Error("Failed to setup MFA")),l}finally{n(false);}},[t]),u=useCallback(async(s,l)=>{n(true),r(null);try{return await t.auth.verifyMFA(s,l)}catch(i){throw r(i instanceof Error?i:new Error("Failed to verify MFA")),i}finally{n(false);}},[t]),d=useCallback(async s=>{n(true),r(null);try{await t.auth.disableMFA(s);}catch(l){throw r(l instanceof Error?l:new Error("Failed to disable MFA")),l}finally{n(false);}},[t]);return {setup:a,verify:u,disable:d,isLoading:e,error:o}}var de=new Map;function He(t,e){return `${t}:${JSON.stringify(e||{})}`}function fe(t,e){let n=R(),[o,r]=useState(e?.initialData||[]),[a,u]=useState(null),[d,s]=useState(e?.enabled===false?"idle":"loading"),[l,i]=useState(false),[h,f]=useState(true),c=useRef(0),y=e?.enabled!==false,g=e?.staleTime??0,T=e?.keepPreviousData??false,p=useCallback(async()=>{if(!y)return;let m={where:e?.where,orderBy:e?.orderBy,limit:e?.limit,offset:e?.offset,select:e?.select,include:e?.include,distinct:e?.distinct},b=He(t,m),w=de.get(b);if(w&&Date.now()-w.timestamp<g){r(w.data),s("success"),f(false);return}i(true),T||s("loading"),u(null);try{let v=await n.from(t).list(m);r(v.data),s("success"),f(!1),c.current=Date.now(),de.set(b,{data:v.data,timestamp:Date.now()}),e?.onSuccess?.(v.data);}catch(v){let E=v instanceof Error?v:new Error("Query failed");u(E),s("error"),e?.onError?.(E);}finally{i(false);}},[n,t,e,y,g,T]);return useEffect(()=>{p();},[p]),useEffect(()=>{if(!e?.refetchOnWindowFocus||!y)return;let m=()=>{Date.now()-c.current>g&&(f(true),p());};return window.addEventListener("focus",m),()=>window.removeEventListener("focus",m)},[e?.refetchOnWindowFocus,y,g,p]),useEffect(()=>{if(!e?.refetchInterval||e.refetchInterval<=0||!y)return;let m=setInterval(()=>{f(true),p();},e.refetchInterval);return ()=>clearInterval(m)},[e?.refetchInterval,y,p]),{data:o,isLoading:d==="loading",isFetching:l,error:a,status:d,refetch:p,isStale:h,isEnabled:y}}function pe(t,e,n){let o=R(),[r,a]=useState(null),[u,d]=useState(null),[s,l]=useState(!!e&&n?.enabled!==false),[i,h]=useState(false),f=!!e&&n?.enabled!==false,c=useCallback(async()=>{if(!(!f||!e)){l(true),d(null),h(false);try{let y=await o.from(t).get(e);a(y.data);}catch(y){let g=y instanceof Error?y:new Error("Query failed");g.message.includes("not found")||g.message.includes("404")?h(true):d(g);}finally{l(false);}}},[o,t,e,f]);return useEffect(()=>{c();},[c]),{data:r,isLoading:s,error:u,isNotFound:i,refetch:c}}function K(t,e,n){let o=t.from(e);if(n?.where){let r=Array.isArray(n.where)?{AND:n.where}:n.where;o=o.where(r);}if(n?.orderBy){let r=Array.isArray(n.orderBy)?n.orderBy:[n.orderBy];for(let a of r)o=o.orderBy(a.field,a.direction);}if(n?.select&&(o=o.select(...n.select)),n?.include)for(let r of n.include)o=o.include(r);return o}function ge(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState(null),[d,s]=useState(e?.enabled!==false),[l,i]=useState(false),h=e?.enabled!==false,f=useCallback(async()=>{if(h){s(true),u(null),i(false);try{let y=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).first();y?r(y):i(!0);}catch(c){let y=c instanceof Error?c:new Error("Query failed");u(y);}finally{s(false);}}},[n,t,e,h]);return useEffect(()=>{f();},[f]),{data:o,isLoading:d,error:a,isNotFound:l,refetch:f}}function ye(t,e){let n=R(),[o,r]=useState([]),[a,u]=useState(e?.initialPage??1),[d,s]=useState(null),[l,i]=useState(true),[h,f]=useState(null),c=e?.pageSize??10,y=useCallback(async C=>{i(true),f(null);try{let x=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).paginate({page:C,pageSize:c});r(x.data),s(x.pageInfo),u(x.pageInfo.page),e?.onSuccess?.(x);}catch(q){let x=q instanceof Error?q:new Error("Query failed");f(x),e?.onError?.(x);}finally{i(false);}},[n,t,e,c]);useEffect(()=>{y(a);},[y,a]);let g=d?.total??0,T=d?.pageCount??0,p=d?.hasNextPage??false,m=d?.hasPrevPage??false,b=useCallback(()=>{p&&u(C=>C+1);},[p]),w=useCallback(()=>{m&&u(C=>C-1);},[m]),v=useCallback(C=>{let q=Math.max(1,Math.min(C,T||1));u(q);},[T]),E=useCallback(()=>y(a),[y,a]);return {data:o,page:a,pageSize:c,totalCount:g,totalPages:T,hasNextPage:p,hasPrevPage:m,isLoading:l,error:h,nextPage:b,prevPage:w,goToPage:v,refetch:E}}function he(t,e){let n=R(),[o,r]=useState([]),[a,u]=useState(null),[d,s]=useState(true),[l,i]=useState(true),[h,f]=useState(false),[c,y]=useState(null),g=e?.pageSize??20,T=useCallback(async()=>{if(!d)return;o.length===0?i(true):f(true),y(null);try{let E=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({cursor:a??void 0,limit:g});r(C=>[...C,E.data]),u(E.nextCursor??null),s(E.hasMore),e?.onSuccess?.(E.data,E.hasMore);}catch(v){let E=v instanceof Error?v:new Error("Query failed");y(E),e?.onError?.(E);}finally{i(false),f(false);}},[n,t,e,a,d,o.length,g]);useEffect(()=>{T();},[]);let p=useCallback(async()=>{r([]),u(null),s(true),i(true);try{let v=await K(n,t,{where:e?.where,orderBy:e?.orderBy,select:e?.select,include:e?.include}).cursorPaginate({limit:g});r([v.data]),u(v.nextCursor??null),s(v.hasMore);}catch(w){y(w instanceof Error?w:new Error("Query failed"));}finally{i(false);}},[n,t,e,g]),m=useCallback(()=>{r([]),u(null),s(true),i(true),y(null);},[]);return {data:o.flat(),pages:o,hasNextPage:d,isLoading:l,isFetchingNextPage:h,error:c,fetchNextPage:T,refetch:p,reset:m}}function me(t,e){let n=R(),[o,r]=useState(0),[a,u]=useState(e?.enabled!==false),[d,s]=useState(null),l=e?.enabled!==false,i=useCallback(async()=>{if(l){u(true),s(null);try{let h=n.from(t);e?.where&&(h=h.where(e.where));let f=await h.count();r(f);}catch(h){s(h instanceof Error?h:new Error("Count failed"));}finally{u(false);}}},[n,t,e?.where,l]);return useEffect(()=>{i();},[i]),{count:o,isLoading:a,error:d,refetch:i}}function B(t,e){let[n,o]=useState("idle"),[r,a]=useState(void 0),[u,d]=useState(null),s=useRef(0),l=useCallback(()=>{o("idle"),a(void 0),d(null),s.current=0;},[]),i=useCallback(async f=>{o("loading"),d(null);try{await e?.onMutate?.(f);let c=await t(f);return a(c),o("success"),s.current=0,await e?.onSuccess?.(c,f),await e?.onSettled?.(c,null,f),c}catch(c){let y=c instanceof Error?c:new Error("Mutation failed"),g=e?.retry??0;if(s.current<g){s.current++;let T=e?.retryDelay??1e3;return await new Promise(p=>setTimeout(p,T)),i(f)}throw d(y),o("error"),await e?.onError?.(y,f),await e?.onSettled?.(void 0,y,f),y}},[t,e]);return {mutate:useCallback(f=>{i(f).catch(()=>{});},[i]),mutateAsync:i,data:r,error:u,isLoading:n==="loading",isSuccess:n==="success",isError:n==="error",isIdle:n==="idle",status:n,reset:l}}function Ue(t,e){let n=R();return B(async o=>(await n.from(t).create(o)).data,e)}function be(t,e){let n=R();return B(async({id:o,data:r})=>(await n.from(t).update(o,r)).data,e)}function we(t,e){let n=R();return B(async o=>{await n.from(t).delete(o);},e)}function Re(t,e){let n=R();return B(async({data:o,conflictFields:r,updateFields:a})=>{let u={conflictFields:r,updateFields:a};return (await n.from(t).upsert(o,u)).data},e)}function ve(t,e){let n=R();return B(async o=>{let r=await n.from(t).createMany(o);return {count:r.count,records:r.records}},e)}function Pe(t,e){let n=R();return B(async({data:o,where:r})=>{let a=await n.from(t).where(r).updateMany(o);return {count:a.count,records:a.records}},e)}function xe(t,e){let n=R();return B(async o=>({count:(await n.from(t).where(o).deleteMany()).count}),e)}function Ee(t,e,n){let[o,r]=useState(t),[a,u]=useState(false),[d,s]=useState(null),l=useRef(t),i=useCallback(()=>{r(l.current);},[]),h=useCallback(async c=>{u(true),s(null),l.current=o;let y=n.optimisticUpdate(o,c);r(y);try{let g=await e(c);return r(g),n.onSuccess?.(g,c),n.onSettled?.(g,null,c),g}catch(g){let T=g instanceof Error?g:new Error("Mutation failed");throw s(T),i(),n.onError?.(T,c),n.onSettled?.(void 0,T,c),T}finally{u(false);}},[o,e,n,i]);return {mutate:useCallback(c=>{h(c).catch(()=>{});},[h]),mutateAsync:h,optimisticData:o,rollback:i,isLoading:a,error:d}}function Oe(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState([]),[d,s]=useState(false),l=useRef(null),i=useRef(null),h=e?.enabled!==false;useEffect(()=>{if(!h)return;let c=n.realtime();l.current=c;let y=c.channel(`table:${t}`);return i.current=y,y.onDbChange({table:t,event:e?.operations||"*"},g=>{switch(g.new!==void 0&&r(g.new),u(T=>[...T,g]),g.operation){case "INSERT":g.new&&e?.onInsert?.(g.new);break;case "UPDATE":g.new&&e?.onUpdate?.(g.new,g.old??null);break;case "DELETE":g.old&&e?.onDelete?.(g.old);break}e?.onChange?.(g);}),y.subscribe(),s(true),()=>{y.unsubscribe(),c.disconnect(),s(false);}},[n,t,h,e]);let f=useCallback(()=>{u([]);},[]);return {data:o,changes:a,isSubscribed:d,clearChanges:f}}function Z(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState([]),[d,s]=useState(false),l=useRef(null),i=useRef(null),h=e?.enabled!==false;useEffect(()=>{if(!h)return;let y=n.realtime();l.current=y;let g=y.channel(t,{type:e?.type||"public"});return i.current=g,g.on("*",T=>{let p={event:"*",payload:T};r(p),u(m=>[...m,p]);}),g.subscribe(),s(true),()=>{g.unsubscribe(),y.disconnect(),s(false);}},[n,t,h,e?.type]);let f=useCallback((y,g)=>{i.current?.broadcast({event:y,payload:g});},[]),c=useCallback(()=>{i.current?.unsubscribe(),s(false);},[]);return {broadcast:f,lastMessage:o,messages:a,isJoined:d,leave:c}}function Fe(t,e,n){let o=R(),[r,a]=useState({}),[u,d]=useState(false),s=useRef(null),l=useRef(null),i=n?.enabled!==false;useEffect(()=>{if(!i)return;let g=o.realtime();s.current=g;let T=g.channel(t,{type:"presence"});return l.current=T,T.presence.onSync(p=>{a(p);}),T.subscribe(),e&&(T.presence.track({state:e}),d(true)),()=>{T.unsubscribe(),g.disconnect(),d(false);}},[o,t,i,e]);let h=useCallback(g=>{l.current?.presence.update(g);},[]),f=useCallback(()=>{l.current?.presence.untrack(),d(false);},[]),c=Object.keys(r).length,y=Object.keys(r);return {presence:r,count:c,onlineUsers:y,update:h,leave:f,isTracking:u}}function ke(){let t=R(),[e,n]=useState("disconnected"),[o,r]=useState(null),a=useRef(null);useEffect(()=>{let s=t.realtime();return a.current=s,n(s.connectionState),r(s.connectionId),s.on("connect",()=>{n("connected"),r(s.connectionId);}),s.on("disconnect",()=>{n("disconnected"),r(null);}),s.on("reconnect",()=>{n("connected"),r(s.connectionId);}),s.on("error",()=>{n("disconnected");}),()=>{s.disconnect();}},[t]);let u=useCallback(()=>{a.current?.connect();},[]),d=useCallback(()=>{a.current?.disconnect();},[]);return {state:e,isConnected:e==="connected",connectionId:o,reconnect:u,disconnect:d}}function Se(t,e){let n=Z(t,e);return {send:n.broadcast,messages:n.messages,lastMessage:n.lastMessage,isConnected:n.isJoined}}function ee(t){let e=R(),[n,o]=useState(0),[r,a]=useState(false),[u,d]=useState(null),[s,l]=useState(null),[i,h]=useState([]),f=useCallback(T=>{if(t?.maxSize&&T.size>t.maxSize)throw new Error(`File size (${Math.round(T.size/1024/1024)}MB) exceeds maximum allowed (${Math.round(t.maxSize/1024/1024)}MB)`);if(t?.allowedTypes&&t.allowedTypes.length>0&&!t.allowedTypes.includes(T.type))throw new Error(`File type "${T.type}" is not allowed. Allowed types: ${t.allowedTypes.join(", ")}`)},[t?.maxSize,t?.allowedTypes]),c=useCallback(async(T,p)=>{a(true),d(null),o(0);try{f(p),t?.onUploadStart?.(p);let m=await e.storage.upload(T,p,{contentType:p.type,metadata:t?.metadata,isPublic:t?.isPublic});return o(100),l(m),h(b=>[...b,m]),t?.onSuccess?.(m,p),m}catch(m){let b=m instanceof Error?m:new Error("Upload failed");throw d(b),t?.onError?.(b,p),b}finally{a(false);}},[e,t,f]),y=useCallback(async T=>{let p=[];for(let{key:m,file:b}of T){let w=await c(m,b);p.push(w);}return p},[c]),g=useCallback(()=>{o(0),a(false),d(null),l(null),h([]);},[]);return {upload:c,uploadMultiple:y,progress:n,isUploading:r,error:u,result:s,results:i,reset:g}}function Ie(t){let e=R(),[n,o]=useState(false),[r,a]=useState(null),u=useCallback(async(s,l)=>{o(true),a(null);try{let i=await e.storage.download(s);return t?.onSuccess?.(i,l||s.split("/").pop()||"download"),i}catch(i){let h=i instanceof Error?i:new Error("Download failed");throw a(h),t?.onError?.(h),h}finally{o(false);}},[e,t]),d=useCallback(async(s,l)=>{let i=await u(s,l),h=l||s.split("/").pop()||"download",f=URL.createObjectURL(i),c=document.createElement("a");c.href=f,c.download=h,document.body.appendChild(c),c.click(),document.body.removeChild(c),URL.revokeObjectURL(f);},[u]);return {download:u,downloadAndSave:d,isDownloading:n,error:r}}function Ce(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState(null),[d,s]=useState(!!t&&e?.enabled!==false),[l,i]=useState(null),h=!!t&&e?.enabled!==false,f=useCallback(async()=>{if(!(!h||!t)){s(true),i(null);try{let y=await n.storage.createSignedUrl(t,e?.expiresIn);r(y);let g=await n.storage.getMetadata(t);u(g);}catch(y){i(y instanceof Error?y:new Error("Failed to load file"));}finally{s(false);}}},[n,t,e?.expiresIn,h]),c=useCallback(async()=>{t&&(await n.storage.delete(t),r(null),u(null));},[n,t]);return {url:o,metadata:a,isLoading:d,error:l,refresh:f,deleteFile:c}}function Me(t){let e=R(),[n,o]=useState([]),[r,a]=useState(t?.enabled!==false),[u,d]=useState(null),s=t?.enabled!==false,l=useCallback(async()=>{if(s){a(true),d(null);try{let i=await e.storage.list({prefix:t?.prefix,limit:t?.limit});o(i.files);}catch(i){d(i instanceof Error?i:new Error("Failed to list files"));}finally{a(false);}}},[e,t,s]);return {files:n,isLoading:r,error:u,refresh:l}}function De(t){let e=ee(t),[n,o]=useState(false),[r,a]=useState([]),u=useRef(null),d=useCallback(p=>{p.preventDefault(),p.stopPropagation(),o(true);},[]),s=useCallback(p=>{p.preventDefault(),p.stopPropagation(),o(false);},[]),l=useCallback(p=>{let m=t?.basePath||"uploads",b=Date.now().toString(36)+Math.random().toString(36).substr(2,9),w=p.name.split(".").pop()||"";return t?.uniqueKey?`${m}/${b}.${w}`:`${m}/${p.name}`},[t?.basePath,t?.uniqueKey]),i=useCallback(async p=>{p.preventDefault(),p.stopPropagation(),o(false);let m=Array.from(p.dataTransfer.files);if(m.length===0)return;let b=t?.multiple?m:[m[0]];a(b),await e.uploadMultiple(b.map(w=>({key:l(w),file:w})));},[t?.multiple,e,l]),h=useCallback(async p=>{let m=Array.from(p.target.files||[]);m.length!==0&&(a(m),await e.uploadMultiple(m.map(b=>({key:l(b),file:b}))));},[e,l]),f=useCallback(()=>{u.current?.click();},[]),c=useCallback(()=>{a([]),e.reset();},[e]),y=useCallback(p=>{a(m=>m.filter((b,w)=>w!==p));},[]),g=useCallback(()=>({onDragOver:d,onDragLeave:s,onDrop:i,onClick:f}),[d,s,i,f]),T=useCallback(()=>({type:"file",onChange:h,multiple:t?.multiple??false,accept:t?.allowedTypes?.join(",")??"",style:{display:"none"},ref:p=>{u.current=p;}}),[h,t?.multiple,t?.allowedTypes]);return {...e,dropzone:{isDragOver:n,selectedFiles:r},getDropzoneProps:g,getInputProps:T,openFilePicker:f,clearFiles:c,removeFile:y}}function Ae(t){return R().storage.getPublicUrl(t)}var G=new Map;function Le(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(null),[l,i]=useState(false),[h,f]=useState(null),c=useRef(0),y=useCallback(async T=>{u(true),s(null),i(false);try{let p={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(p.retry={maxRetries:e.maxRetries??3});let m=await n.functions.invoke(t,{body:T},p);return r(m.data),f(m),i(!0),c.current=0,e?.onSuccess?.(m.data,T),m.data}catch(p){let m=p instanceof Error?p:new Error("Function invocation failed");throw s(m),e?.onError?.(m,T),m}finally{u(false);}},[n,t,e]),g=useCallback(()=>{r(null),u(false),s(null),i(false),f(null),c.current=0;},[]);return {invoke:y,data:o,isLoading:a,error:d,isSuccess:l,invocation:h,reset:g}}function Ve(t,e){let n=R(),[o,r]=useState(null),[a,u]=useState(false),[d,s]=useState(null),[l,i]=useState(false),[h,f]=useState(null),c=e?.cache??false,y=e?.cacheTtl??6e4,g=useCallback(b=>`${t}:${JSON.stringify(b)}`,[t]),T=useCallback(async b=>{if(c){let w=g(b),v=G.get(w);if(v&&Date.now()-v.timestamp<y){let E=v.data;return r(E),i(true),e?.onSuccess?.(E,b),E}}u(true),s(null),i(false);try{let w={timeout:e?.timeout,includeLogs:e?.includeLogs,version:e?.version};e?.retry&&(w.retry={maxRetries:e.maxRetries??3});let E=await n.functions.rpc(t,w)(b);if(r(E),i(!0),c){let C=g(b);G.set(C,{data:E,timestamp:Date.now()});}return e?.onSuccess?.(E,b),E}catch(w){let v=w instanceof Error?w:new Error("RPC call failed");throw s(v),e?.onError?.(v,b),v}finally{u(false);}},[n,t,e,c,y,g]),p=useCallback(()=>{let b=`${t}:`;for(let w of G.keys())w.startsWith(b)&&G.delete(w);},[t]),m=useCallback(()=>{r(null),u(false),s(null),i(false),f(null);},[]);return {invoke:T,data:o,isLoading:a,error:d,isSuccess:l,invocation:h,reset:m,clearCache:p}}function Qe(t){let e=R(),[n,o]=useState([]),[r,a]=useState(true),[u,d]=useState(null),s=useCallback(async()=>{a(true),d(null);try{let l=await e.functions.list({projectId:t.projectId,envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset});o(l);}catch(l){d(l instanceof Error?l:new Error("Failed to list functions"));}finally{a(false);}},[e,t.projectId,t.envId,t.enabled,t.limit,t.offset]);return useEffect(()=>{s();},[s]),{functions:n,isLoading:r,error:u,refresh:s}}function Be(t,e){let n=R(),[o,r]=useState([]),[a,u]=useState(false),[d,s]=useState(0),[l,i]=useState(null);return {invoke:useCallback(async f=>{u(true),i(null),s(0),r([]);let c=[],y=e?.concurrency??5,g=f.length,T=0;try{for(let p=0;p<f.length;p+=y){let m=f.slice(p,p+y),b=await Promise.all(m.map(async w=>(await n.functions.invoke(t,{body:w})).data));c.push(...b),T+=m.length,s(Math.round(T/g*100)),r([...c]),e?.onProgress?.(T,g);}return e?.onSuccess?.(c),c}catch(p){let m=p instanceof Error?p:new Error("Batch invocation failed");throw i(m),e?.onError?.(m),m}finally{u(false);}},[n,t,e]),results:o,isLoading:a,progress:d,error:l}}function ze(t){let e=R(),[n,o]=useState(false),[r,a]=useState(null),[u,d]=useState(null),[s,l]=useState(null),i=useCallback(async(f,c)=>{l(null);try{let g=(await e.functions.invoke(t,{body:f})).requestId??`scheduled-${Date.now()}`;return d(g),o(!0),a(new Date(Date.now()+c.delayMs)),g}catch(y){let g=y instanceof Error?y:new Error("Failed to schedule function");throw l(g),g}},[e,t]),h=useCallback(async()=>{o(false),a(null),d(null);},[]);return {schedule:i,cancel:h,isScheduled:n,scheduledAt:r,requestId:u,error:s}}export{ne as VaifProvider,re as useAuth,ve as useBatchCreate,xe as useBatchDelete,Be as useBatchInvoke,Pe as useBatchUpdate,Se as useBroadcast,Z as useChannel,me as useCount,Ue as useCreate,we as useDelete,Ie as useDownload,De as useDropzone,ie as useEmailVerification,Ce as useFile,Me as useFiles,Le as useFunction,Qe as useFunctionList,he as useInfiniteQuery,ce as useMFA,le as useMagicLink,B as useMutation,ue as useOAuth,Ee as useOptimisticMutation,ye as usePaginatedQuery,ae as usePasswordReset,Fe as usePresence,Ae as usePublicUrl,fe as useQuery,pe as useQueryById,ge as useQueryFirst,ke as useRealtimeConnection,Ve as useRpc,ze as useScheduledFunction,Oe as useSubscription,oe as useToken,be as useUpdate,ee as useUpload,Re as useUpsert,se as useUser,D as useVaif,R as useVaifClient};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaiftech/react",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "React hooks for VAIF - Authentication, Data, Realtime, Storage, and more",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
"typecheck": "tsc --noEmit"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@vaiftech/client": "workspace:*"
|
|
30
|
+
"@vaiftech/client": "workspace:*",
|
|
31
|
+
"@vaiftech/auth": "workspace:*"
|
|
31
32
|
},
|
|
32
33
|
"peerDependencies": {
|
|
33
34
|
"react": ">=18.0.0"
|
|
@@ -39,7 +40,7 @@
|
|
|
39
40
|
"typescript": "^5.5.4"
|
|
40
41
|
},
|
|
41
42
|
"engines": {
|
|
42
|
-
"node": ">=
|
|
43
|
+
"node": ">=19.0.0"
|
|
43
44
|
},
|
|
44
45
|
"keywords": [
|
|
45
46
|
"vaif",
|