@vaiftech/sdk-expo 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 CHANGED
@@ -1,22 +1,22 @@
1
- # @vaif/sdk-expo
1
+ # @vaiftech/sdk-expo
2
2
 
3
3
  React Native and Expo SDK for VAIF Studio - a Backend-as-a-Service platform.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
- npm install @vaif/sdk-expo @vaif/client @react-native-async-storage/async-storage
8
+ npm install @vaiftech/sdk-expo @vaiftech/client @react-native-async-storage/async-storage
9
9
  # or
10
- pnpm add @vaif/sdk-expo @vaif/client @react-native-async-storage/async-storage
10
+ pnpm add @vaiftech/sdk-expo @vaiftech/client @react-native-async-storage/async-storage
11
11
  # or
12
- yarn add @vaif/sdk-expo @vaif/client @react-native-async-storage/async-storage
12
+ yarn add @vaiftech/sdk-expo @vaiftech/client @react-native-async-storage/async-storage
13
13
  ```
14
14
 
15
15
  ## Quick Start
16
16
 
17
17
  ```tsx
18
- import { VaifProvider } from '@vaif/sdk-expo';
19
- import { createVaifClient } from '@vaif/client';
18
+ import { VaifProvider } from '@vaiftech/sdk-expo';
19
+ import { createVaifClient } from '@vaiftech/client';
20
20
  import AsyncStorage from '@react-native-async-storage/async-storage';
21
21
 
22
22
  const client = createVaifClient({
@@ -40,7 +40,7 @@ export default function App() {
40
40
  Sessions are automatically persisted using AsyncStorage, so users stay logged in:
41
41
 
42
42
  ```tsx
43
- import { useAuth } from '@vaif/sdk-expo';
43
+ import { useAuth } from '@vaiftech/sdk-expo';
44
44
 
45
45
  function LoginScreen() {
46
46
  const { user, isLoading, signIn } = useAuth();
@@ -63,7 +63,7 @@ function LoginScreen() {
63
63
  Upload images directly from Expo ImagePicker:
64
64
 
65
65
  ```tsx
66
- import { useUpload } from '@vaif/sdk-expo';
66
+ import { useUpload } from '@vaiftech/sdk-expo';
67
67
  import * as ImagePicker from 'expo-image-picker';
68
68
 
69
69
  function ImageUpload() {
@@ -97,7 +97,7 @@ function ImageUpload() {
97
97
  ### Realtime Updates
98
98
 
99
99
  ```tsx
100
- import { useRealtime, useRealtimePresence } from '@vaif/sdk-expo';
100
+ import { useRealtime, useRealtimePresence } from '@vaiftech/sdk-expo';
101
101
 
102
102
  function ChatRoom({ roomId }) {
103
103
  // Listen for new messages
@@ -129,7 +129,7 @@ function ChatRoom({ roomId }) {
129
129
  ### Authentication
130
130
 
131
131
  ```tsx
132
- import { useAuth, useUser, useSession } from '@vaif/sdk-expo';
132
+ import { useAuth, useUser, useSession } from '@vaiftech/sdk-expo';
133
133
 
134
134
  // Full auth functionality
135
135
  const {
@@ -154,7 +154,7 @@ const { session, refresh } = useSession();
154
154
  ### Data
155
155
 
156
156
  ```tsx
157
- import { useQuery, useMutation, useRealtime } from '@vaif/sdk-expo';
157
+ import { useQuery, useMutation, useRealtime } from '@vaiftech/sdk-expo';
158
158
 
159
159
  // Fetch data
160
160
  const { data, isLoading, error, refetch } = useQuery<Post>('posts', {
@@ -176,7 +176,7 @@ useRealtime<Post>('posts', {
176
176
  ### Storage
177
177
 
178
178
  ```tsx
179
- import { useUpload, useDownload, usePublicUrl } from '@vaif/sdk-expo';
179
+ import { useUpload, useDownload, usePublicUrl } from '@vaiftech/sdk-expo';
180
180
 
181
181
  // Upload files
182
182
  const { upload, uploadUri, isUploading, progress } = useUpload();
@@ -191,7 +191,7 @@ const url = usePublicUrl('avatars/user-123.jpg');
191
191
  ### Functions
192
192
 
193
193
  ```tsx
194
- import { useFunction } from '@vaif/sdk-expo';
194
+ import { useFunction } from '@vaiftech/sdk-expo';
195
195
 
196
196
  const { invoke, isInvoking, result, error } = useFunction('process-image');
197
197
 
@@ -203,7 +203,7 @@ const handleProcess = async () => {
203
203
  ### Presence & Broadcast
204
204
 
205
205
  ```tsx
206
- import { useRealtimePresence, useRealtimeBroadcast } from '@vaif/sdk-expo';
206
+ import { useRealtimePresence, useRealtimeBroadcast } from '@vaiftech/sdk-expo';
207
207
 
208
208
  // Presence tracking
209
209
  const { users, track, leave } = useRealtimePresence('room-1');
@@ -229,9 +229,9 @@ const { data } = useQuery<User>('users');
229
229
 
230
230
  ## Related Packages
231
231
 
232
- - [@vaif/client](https://www.npmjs.com/package/@vaif/client) - Core client SDK
233
- - [@vaif/react](https://www.npmjs.com/package/@vaif/react) - React (web) hooks
234
- - [@vaif/cli](https://www.npmjs.com/package/@vaif/cli) - CLI tools
232
+ - [@vaiftech/client](https://www.npmjs.com/package/@vaiftech/client) - Core client SDK
233
+ - [@vaiftech/react](https://www.npmjs.com/package/@vaiftech/react) - React (web) hooks
234
+ - [@vaiftech/cli](https://www.npmjs.com/package/@vaiftech/cli) - CLI tools
235
235
 
236
236
  ## License
237
237
 
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, QueryOptions, WhereFilter, OrderByClause, DbOperation, SubscriptionFilter, DbChangeEvent, ConnectionState, PresenceState, PresenceEntry, UploadResult, FileMetadata, RetryConfig, VaifFunction } from '@vaif/client';
4
- export { AuthResponse, ConnectionState, DbChangeEvent, DbOperation, FileMetadata, InvokeResult, OrderByClause, PresenceState, QueryOptions, UploadResult, User, VaifClient, VaifClientConfig, VaifFunction, WhereFilter } from '@vaif/client';
3
+ import { VaifClientConfig, User, VaifClient, AuthResponse, QueryOptions, WhereFilter, OrderByClause, DbOperation, SubscriptionFilter, DbChangeEvent, ConnectionState, PresenceState, PresenceEntry, UploadResult, FileMetadata, RetryConfig, 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 } from '@vaiftech/auth/react';
5
6
 
6
7
  /**
7
8
  * Storage interface for React Native (AsyncStorage compatible)
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, QueryOptions, WhereFilter, OrderByClause, DbOperation, SubscriptionFilter, DbChangeEvent, ConnectionState, PresenceState, PresenceEntry, UploadResult, FileMetadata, RetryConfig, VaifFunction } from '@vaif/client';
4
- export { AuthResponse, ConnectionState, DbChangeEvent, DbOperation, FileMetadata, InvokeResult, OrderByClause, PresenceState, QueryOptions, UploadResult, User, VaifClient, VaifClientConfig, VaifFunction, WhereFilter } from '@vaif/client';
3
+ import { VaifClientConfig, User, VaifClient, AuthResponse, QueryOptions, WhereFilter, OrderByClause, DbOperation, SubscriptionFilter, DbChangeEvent, ConnectionState, PresenceState, PresenceEntry, UploadResult, FileMetadata, RetryConfig, 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 } from '@vaiftech/auth/react';
5
6
 
6
7
  /**
7
8
  * Storage interface for React Native (AsyncStorage compatible)
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- 'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime');var V=class ie extends Error{constructor(n,e){super(n),this.name="VaifError",this.code=e.code,this.statusCode=e.statusCode,this.requestId=e.requestId,this.details=e.details;let t=Error;t.captureStackTrace&&t.captureStackTrace(this,ie);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,requestId:this.requestId,details:this.details}}},te=class extends V{constructor(o,n){super(o,{code:n?.code??"AUTH_ERROR",statusCode:n?.statusCode??401,requestId:n?.requestId}),this.name="VaifAuthError";}},De=class extends V{constructor(o,n){super(o,{code:"VALIDATION_ERROR",statusCode:400,requestId:n?.requestId,details:n?.details??n?.fieldErrors}),this.name="VaifValidationError",this.fieldErrors=n?.fieldErrors;}},W=class extends V{constructor(o,n){super(o,{code:"NETWORK_ERROR"}),this.name="VaifNetworkError",this.cause=n;}},Me=class extends V{constructor(o,n){super(o,{code:"RATE_LIMITED",statusCode:429}),this.name="VaifRateLimitError",this.retryAfter=n;}},Fe=class extends V{constructor(o,n){super(o,{code:"NOT_FOUND",statusCode:404,requestId:n}),this.name="VaifNotFoundError";}};async function je(o){let n;try{n=await o.json();}catch{}let e=n?.message??n?.error??o.statusText??"Request failed",t=n?.requestId;switch(o.status){case 400:return new De(e,{details:n?.details,requestId:t});case 401:return new te(e,{code:"UNAUTHORIZED",statusCode:401,requestId:t});case 403:return new te(e,{code:"FORBIDDEN",statusCode:403,requestId:t});case 404:return new Fe(e,t);case 429:{let r=o.headers.get("Retry-After"),s=r?parseInt(r,10):void 0;return new Me(e,s)}default:return new V(e,{code:n?.error??"HTTP_ERROR",statusCode:o.status,requestId:t,details:n?.details})}}async function Ve(o,n){let{timeout:e=3e4,fetchFn:t,...r}=n,s=new AbortController,a=setTimeout(()=>s.abort(),e);try{let c=await t(o,{...r,signal:s.signal});if(clearTimeout(a),!c.ok)throw await je(c);if(c.status===204)return;let i=await c.text();return i?JSON.parse(i):void 0}catch(c){throw clearTimeout(a),c instanceof V?c:c instanceof Error&&c.name==="AbortError"?new W("Request timed out"):c instanceof Error?new W(c.message,c):new W("Network request failed")}}function $(o){let{baseUrl:n,apiKey:e,apiKeyHeader:t,accessToken:r,fetch:s,timeout:a}=o;return async function(c,i={}){let u=`${n}${c}`,l={"Content-Type":"application/json",...i.headers??{}};if(e&&(l[t]=e),r){let d=typeof r=="function"?await r():r;l.Authorization=`Bearer ${d}`;}return Ve(u,{...i,headers:l,timeout:a,fetchFn:s})}}function C(o){let n=new URLSearchParams;for(let[t,r]of Object.entries(o))r!==void 0&&n.set(t,String(r));let e=n.toString();return e?`?${e}`:""}function Be(o){return JSON.stringify(o)}function ne(o,n,e={}){let t={...e},r=()=>{let i={};if(t.limit!==void 0&&(i.limit=t.limit),t.offset!==void 0&&(i.offset=t.offset),t.where&&(i.where=Be(t.where)),t.orderBy){let u=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];i.orderBy=JSON.stringify(u);}return t.select&&t.select.length>0&&(i.select=t.select.join(",")),t.include&&t.include.length>0&&(i.include=JSON.stringify(t.include)),t.distinct&&t.distinct.length>0&&(i.distinct=t.distinct.join(",")),i},s=()=>C(r()),a=i=>ne(o,n,{...t,...i}),c={async list(i){i&&(t={...t,...i});let u=s();return n(`/generated/${o}${u}`)},async get(i){let u={};t.select&&t.select.length>0&&(u.select=t.select.join(",")),t.include&&t.include.length>0&&(u.include=JSON.stringify(t.include));let l=C(u);return n(`/generated/${o}/${encodeURIComponent(i)}${l}`)},async first(){let i=await c.limit(1).list();return i.data.length>0?i.data[0]:null},async firstOrFail(){let i=await c.first();if(!i)throw new Error(`No record found in table '${o}' matching the query`);return i},async create(i){return n(`/generated/${o}`,{method:"POST",body:JSON.stringify(i)})},async update(i,u){return n(`/generated/${o}/${encodeURIComponent(i)}`,{method:"PATCH",body:JSON.stringify(u)})},async delete(i){return n(`/generated/${o}/${encodeURIComponent(i)}`,{method:"DELETE"})},async createMany(i,u){return n(`/generated/${o}/batch`,{method:"POST",body:JSON.stringify({records:i,skipOnConflict:u?.skipOnConflict,returnRecords:u?.returnRecords})})},async updateMany(i,u){return r(),n(`/generated/${o}/batch`,{method:"PATCH",body:JSON.stringify({data:i,where:t.where,returnRecords:u?.returnRecords})})},async deleteMany(){return n(`/generated/${o}/batch`,{method:"DELETE",body:JSON.stringify({where:t.where})})},async upsert(i,u){return n(`/generated/${o}/upsert`,{method:"POST",body:JSON.stringify({data:i,conflictFields:u.conflictFields,updateFields:u.updateFields})})},async count(){let i=r(),u=C(i);return (await n(`/generated/${o}/count${u}`)).count},async sum(i){let u=r(),l=C({...u,field:i});return (await n(`/generated/${o}/sum${l}`)).sum},async avg(i){let u=r(),l=C({...u,field:i});return (await n(`/generated/${o}/avg${l}`)).avg},async min(i){let u=r(),l=C({...u,field:i});return (await n(`/generated/${o}/min${l}`)).min},async max(i){let u=r(),l=C({...u,field:i});return (await n(`/generated/${o}/max${l}`)).max},async aggregate(i,u){return n(`/generated/${o}/aggregate`,{method:"POST",body:JSON.stringify({aggregates:i,where:u?.where||t.where,groupBy:u?.groupBy,having:u?.having})})},async paginate(i){let u=i.page||1,l=i.pageSize||20,d=(u-1)*l,p=r();p.limit=l,p.offset=d,p.includeCount=true;let g=C(p),b=await n(`/generated/${o}${g}`),h=b.total||b.data.length,m=Math.ceil(h/l);return {data:b.data,pageInfo:{total:h,page:u,pageSize:l,pageCount:m,hasNextPage:u<m,hasPrevPage:u>1}}},async cursorPaginate(i){let u=r();u.limit=i.limit||20,i.cursor&&(u.cursor=i.cursor);let l=C(u),d=await n(`/generated/${o}/cursor${l}`);return {data:d.data,nextCursor:d.nextCursor,prevCursor:d.prevCursor,hasMore:d.hasMore}},where(i){if(t.where){let u=t.where;return a({where:{AND:[...Array.isArray(u)?u:[u],i]}})}return a({where:i})},orderBy(i,u="asc"){let l={field:i,direction:u};if(t.orderBy){let d=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];return a({orderBy:[...d,l]})}return a({orderBy:l})},select(...i){return a({select:i})},limit(i){return a({limit:i})},offset(i){return a({offset:i})},include(i){let u=t.include||[];return a({include:[...u,i]})},distinct(...i){return a({distinct:i})}};return c}function qe(o){let n=$(o);return {from(e){return ne(e,n)},async raw(e,t){return n("/generated/raw",{method:"POST",body:JSON.stringify({query:e,params:t})})},async transaction(e,t){return n("/generated/transaction",{method:"POST",body:JSON.stringify({operations:e,isolationLevel:t?.isolationLevel,timeout:t?.timeout})})},async withTransaction(e,t){let r=(await n("/generated/transaction/start",{method:"POST",body:JSON.stringify({isolationLevel:t?.isolationLevel,timeout:t?.timeout})})).transactionId,s=(c,i)=>{let u=new Headers(i?.headers);return u.set("X-Transaction-Id",r),n(c,{...i,headers:u})},a={from(c){return ne(c,s)},async raw(c,i){return s("/generated/raw",{method:"POST",body:JSON.stringify({query:c,params:i})})},async transaction(){throw new Error("Nested transactions are not supported")},async withTransaction(){throw new Error("Nested transactions are not supported")}};try{let c=await e(a);return await n("/generated/transaction/commit",{method:"POST",body:JSON.stringify({transactionId:r})}),c}catch(c){throw await n("/generated/transaction/rollback",{method:"POST",body:JSON.stringify({transactionId:r})}).catch(()=>{}),c}}}}function Qe(o){let n=$(o);return {async signUp(e,t,r){return n("/auth/signup",{method:"POST",body:JSON.stringify({email:e,password:t,name:r?.name,phone:r?.phone,metadata:r?.metadata,redirectUrl:r?.redirectUrl})})},async login(e,t,r){return n("/auth/login",{method:"POST",body:JSON.stringify({email:e,password:t,mfaCode:r?.mfaCode,rememberMe:r?.rememberMe})})},async logout(){await n("/auth/logout",{method:"POST"});},async logoutAll(){await n("/auth/logout-all",{method:"POST"});},async getUser(){return (await n("/auth/me")).user},async updateProfile(e){return (await n("/users/me",{method:"PATCH",body:JSON.stringify(e)})).user},async changePassword(e){return n("/users/me/change-password",{method:"POST",body:JSON.stringify(e)})},async requestPasswordReset(e){return n("/auth/forgot-password",{method:"POST",body:JSON.stringify(e)})},async confirmPasswordReset(e){return n("/auth/reset-password",{method:"POST",body:JSON.stringify(e)})},async requestEmailVerification(e){return n("/auth/verify-email/send",{method:"POST",body:JSON.stringify(e||{})})},async confirmEmailVerification(e){return n("/auth/verify-email/confirm",{method:"POST",body:JSON.stringify(e)})},async getOAuthSignInUrl(e){return n("/auth/oauth/authorize",{method:"POST",body:JSON.stringify(e)})},async handleOAuthCallback(e){return n("/auth/oauth/callback",{method:"POST",body:JSON.stringify(e)})},async linkOAuthProvider(e){return n("/auth/oauth/link",{method:"POST",body:JSON.stringify(e)})},async unlinkOAuthProvider(e){return n(`/auth/oauth/unlink/${e}`,{method:"POST"})},async listLinkedProviders(){return n("/auth/oauth/providers")},async requestMagicLink(e){return n("/auth/magic-link/send",{method:"POST",body:JSON.stringify(e)})},async verifyMagicLink(e){return n("/auth/magic-link/verify",{method:"POST",body:JSON.stringify(e)})},async requestPhoneVerification(e){return n("/auth/phone/send",{method:"POST",body:JSON.stringify(e)})},async confirmPhoneVerification(e){return n("/auth/phone/verify",{method:"POST",body:JSON.stringify(e)})},async setupMFA(e){return n("/auth/mfa/setup",{method:"POST",body:JSON.stringify({method:e})})},async enableMFA(e){return n("/auth/mfa/enable",{method:"POST",body:JSON.stringify({code:e})})},async disableMFA(e){return n("/auth/mfa/disable",{method:"POST",body:JSON.stringify({code:e})})},async verifyMFA(e,t){return n("/auth/mfa/verify",{method:"POST",body:JSON.stringify({mfaToken:e,code:t})})},async regenerateBackupCodes(){return n("/auth/mfa/backup-codes",{method:"POST"})},async refreshToken(e){return n("/auth/refresh",{method:"POST",body:JSON.stringify({refreshToken:e})})},async listSessions(){return n("/auth/sessions")},async revokeSession(e){return n(`/auth/sessions/${e}`,{method:"DELETE"})},async revokeOtherSessions(){return n("/auth/sessions/revoke-others",{method:"POST"})}}}function ae(o){return new Promise(n=>setTimeout(n,o))}function He(o){let n=$(o);async function e(t,r,s){let a=s?.retry||{},c=a.maxRetries??0,i=a.initialDelay??1e3,u=a.maxDelay??3e4,l=a.backoffMultiplier??2,d=a.retryOnStatus??[429,500,502,503,504],p=a.retryOnNetworkError??true,g=null,b=i;for(let h=0;h<=c;h++)try{let m={};s?.version!==void 0&&(m.version=s.version),s?.includeLogs&&(m.includeLogs=!0);let T=C(m),w=await n(`/functions/${t}/invoke${T}`,{method:"POST",body:JSON.stringify(r??{}),headers:s?.headers});if(d.includes(w.status)&&h<c){g=new Error(`Function returned status ${w.status}`),await ae(b),b=Math.min(b*l,u);continue}return w}catch(m){g=m;let T=m instanceof TypeError||m.message?.includes("network")||m.message?.includes("fetch");if(p&&T&&h<c){await ae(b),b=Math.min(b*l,u);continue}throw m}throw g||new Error("Function invocation failed after retries")}return {invoke:e,async invokeByName(t,r,s){let a={};s?.version!==void 0&&(a.version=s.version),s?.includeLogs&&(a.includeLogs=true);let c=C(a);return n(`/functions/name/${encodeURIComponent(t)}/invoke${c}`,{method:"POST",body:JSON.stringify(r??{}),headers:s?.headers})},async batchInvoke(t,r){let s=(await Promise.allSettled(t.map(a=>this.invoke(a.functionId,a.input,r)))).map((a,c)=>a.status==="fulfilled"?{functionId:t[c].functionId,success:true,result:a.value}:{functionId:t[c].functionId,success:false,error:a.reason?.message||"Unknown error"});return {results:s,successCount:s.filter(a=>a.success).length,errorCount:s.filter(a=>!a.success).length}},rpc(t,r){let s=this,a=async(c,i)=>{let u={...r,...i};return (await e(t,{body:c},u)).data};return Object.defineProperty(a,"id",{value:t,writable:false}),a.getInfo=()=>s.get(t),a.getInvocations=c=>s.getInvocations({...c,functionId:t}),a},async list(t){let r={envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset},s=C(r);return n(`/functions/project/${t.projectId}${s}`)},async get(t){return n(`/functions/${t}`)},async getByName(t,r){return n(`/functions/project/${r}/name/${encodeURIComponent(t)}`)},async create(t){return n("/functions",{method:"POST",body:JSON.stringify(t)})},async update(t,r){return n(`/functions/${t}`,{method:"PATCH",body:JSON.stringify(r)})},async delete(t){return n(`/functions/${t}`,{method:"DELETE"})},async enable(t){return this.update(t,{enabled:true})},async disable(t){return this.update(t,{enabled:false})},async deploy(t,r,s){return n(`/functions/${t}/deploy`,{method:"POST",body:JSON.stringify({sourceCode:r,createVersion:s?.createVersion,versionDescription:s?.versionDescription,envVars:s?.envVars,secrets:s?.secrets})})},async getSource(t,r){let s=r!==void 0?`?version=${r}`:"";return n(`/functions/${t}/source${s}`)},async listVersions(t){return (await n(`/functions/${t}/versions`)).versions},async rollback(t,r){return n(`/functions/${t}/rollback`,{method:"POST",body:JSON.stringify({version:r})})},async getEnvVars(t){return (await n(`/functions/${t}/env`)).envVars},async setEnvVars(t,r){return n(`/functions/${t}/env`,{method:"PUT",body:JSON.stringify({envVars:r})})},async deleteEnvVar(t,r){return n(`/functions/${t}/env/${encodeURIComponent(r)}`,{method:"DELETE"})},async bindSecrets(t,r){return n(`/functions/${t}/secrets`,{method:"PUT",body:JSON.stringify({secrets:r})})},async setSchedule(t,r){return n(`/functions/${t}/schedule`,{method:"PUT",body:JSON.stringify(r)})},async removeSchedule(t){return n(`/functions/${t}/schedule`,{method:"DELETE"})},async getInvocations(t){let r={functionId:t.functionId,projectId:t.projectId,status:t.status,since:t.since,until:t.until,limit:t.limit,offset:t.offset},s=C(r);return (await n(`/functions/invocations${s}`)).invocations},async getInvocation(t){return n(`/functions/invocations/${t}`)},async getLogs(t,r){let s={since:r?.since,until:r?.until,level:r?.level,limit:r?.limit},a=C(s);return (await n(`/functions/${t}/logs${a}`)).logs}}}function ze(o){let n=$(o),e="default";return {async getUploadUrl(t,r){return n("/storage/upload-url",{method:"POST",body:JSON.stringify({key:t,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(t,r){return n("/storage/download-url",{method:"POST",body:JSON.stringify({key:t,bucket:r?.bucket||e,expiresIn:r?.expiresIn,download:r?.download,transform:r?.transform})})},async createSignedUrl(t,r=3600,s){return (await this.getDownloadUrl(t,{...s,expiresIn:r})).url},async createSignedUrls(t,r=3600,s){return await Promise.all(t.map(async a=>({key:a,url:await this.createSignedUrl(a,r,s)})))},async upload(t,r,s){let a=r instanceof Blob?r:new Blob([r]),c=a.size,i=s?.contentType||(r instanceof File?r.type:void 0)||"application/octet-stream",u=await this.getUploadUrl(t,{...s,contentType:i,sizeBytes:c}),l=await o.fetch(u.url,{method:"PUT",body:a,headers:{"Content-Type":i,...s?.cacheControl&&{"Cache-Control":s.cacheControl},...s?.contentDisposition&&{"Content-Disposition":s.contentDisposition}}});if(!l.ok)throw new Error(`Upload failed: ${l.statusText}`);let d=s?.bucket||e,p=u.url.split("?")[0];return {ok:true,key:t,bucket:d,url:p,publicUrl:s?.isPublic?this.getPublicUrl(t,{bucket:d}):void 0,size:c,contentType:i}},async uploadFromUrl(t,r,s){return n("/storage/upload-from-url",{method:"POST",body:JSON.stringify({key:t,url:r,bucket:s?.bucket||e,contentType:s?.contentType,metadata:s?.metadata,isPublic:s?.isPublic,timeout:s?.timeout})})},async download(t,r){let s=await this.getDownloadUrl(t,r),a=await o.fetch(s.url);if(!a.ok)throw new Error(`Download failed: ${a.statusText}`);return a.blob()},async list(t){let r={bucket:t?.bucket||e,prefix:t?.prefix,delimiter:t?.delimiter,limit:t?.limit,cursor:t?.cursor,includeUrls:t?.includeUrls},s=C(r);return n(`/storage/files${s}`)},async getMetadata(t,r){let s=r?.bucket||e;return n(`/storage/files/${encodeURIComponent(s)}/${encodeURIComponent(t)}/metadata`)},async updateMetadata(t,r,s){let a=s?.bucket||e;return n(`/storage/files/${encodeURIComponent(a)}/${encodeURIComponent(t)}/metadata`,{method:"PATCH",body:JSON.stringify(r)})},async exists(t,r){try{return await this.getMetadata(t,r),!0}catch{return false}},async copy(t,r,s){return n("/storage/files/copy",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:s?.sourceBucket||e,destinationKey:r,destinationBucket:s?.destinationBucket||s?.sourceBucket||e,metadata:s?.metadata})})},async move(t,r,s){return n("/storage/files/move",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:s?.sourceBucket||e,destinationKey:r,destinationBucket:s?.destinationBucket||s?.sourceBucket||e,metadata:s?.metadata})})},async delete(t,r){let s=r?.bucket||e;await n(`/storage/files/${encodeURIComponent(s)}/${encodeURIComponent(t)}`,{method:"DELETE"});},async deleteMany(t,r){return n("/storage/files/delete-batch",{method:"POST",body:JSON.stringify({keys:t,bucket:r?.bucket||e})})},getPublicUrl(t,r){let s=r?.bucket||e;return `${o.baseUrl.replace("/api","")}/storage/${encodeURIComponent(s)}/${encodeURIComponent(t)}`},async createBucket(t,r){return n("/storage/buckets",{method:"POST",body:JSON.stringify({name:t,isPublic:r?.isPublic,allowedMimeTypes:r?.allowedMimeTypes,maxFileSize:r?.maxFileSize,fileSizeLimit:r?.fileSizeLimit})})},async getBucket(t){return n(`/storage/buckets/${encodeURIComponent(t)}`)},async updateBucket(t,r){return n(`/storage/buckets/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(r)})},async listBuckets(){return (await n("/storage/buckets")).buckets},async deleteBucket(t){await n(`/storage/buckets/${encodeURIComponent(t)}`,{method:"DELETE"});},async emptyBucket(t){return n(`/storage/buckets/${encodeURIComponent(t)}/empty`,{method:"POST"})},async createMultipartUpload(t,r){return n("/storage/multipart/create",{method:"POST",body:JSON.stringify({key:t,bucket:r?.bucket||e,contentType:r?.contentType,metadata:r?.metadata,partSize:r?.partSize})})},async uploadPart(t,r,s){let a=s instanceof Blob?s:new Blob([s]),{url:c}=await n(`/storage/multipart/${t}/part-url`,{method:"POST",body:JSON.stringify({partNumber:r})}),i=await o.fetch(c,{method:"PUT",body:a});if(!i.ok)throw new Error(`Part upload failed: ${i.statusText}`);let u=i.headers.get("etag")||"";return {partNumber:r,etag:u}},async completeMultipartUpload(t,r){return n(`/storage/multipart/${t}/complete`,{method:"POST",body:JSON.stringify({parts:r})})},async abortMultipartUpload(t){await n(`/storage/multipart/${t}/abort`,{method:"POST"});}}}function Ke(o){let n=$(o);return {async list(){return n("/projects")},async get(e){return n(`/projects/${e}`)},async create(e){return n("/projects",{method:"POST",body:JSON.stringify(e)})},async getApiKeys(e){return n(`/projects/${e}/api-keys`)},async createApiKey(e,t){return n(`/projects/${e}/api-keys`,{method:"POST",body:JSON.stringify(t??{})})},async revokeApiKey(e,t){return n(`/projects/${e}/api-keys/${t}/revoke`,{method:"POST"})},async rotateApiKey(e,t){return n(`/projects/${e}/api-keys/${t}/rotate`,{method:"POST"})}}}function _e(o){let n=$(o);return {async list(){return n("/orgs")},async create(e){return n("/orgs",{method:"POST",body:JSON.stringify(e)})},async getProfile(e){return (await n(`/orgs/${e}/profile`)).profile||{}},async updateProfile(e,t){return (await n(`/orgs/${e}/profile`,{method:"PATCH",body:JSON.stringify(t)})).profile},async listBillingContacts(e){return (await n(`/orgs/${e}/billing-contacts`)).contacts},async addBillingContact(e,t){return n(`/orgs/${e}/billing-contacts`,{method:"POST",body:JSON.stringify(t)})},async removeBillingContact(e,t){return n(`/orgs/${e}/billing-contacts/${t}`,{method:"DELETE"})},async listMembers(e){return (await n(`/orgs/${e}/members`)).members},async inviteMember(e,t){return n(`/orgs/${e}/members/invite`,{method:"POST",body:JSON.stringify(t)})},async listInvites(e){return (await n(`/orgs/${e}/invites`)).invites},async cancelInvite(e,t){return n(`/orgs/${e}/invites/${t}`,{method:"DELETE"})},async removeMember(e,t){return n(`/orgs/${e}/members/${t}`,{method:"DELETE"})},async updateMemberRole(e,t,r){return n(`/orgs/${e}/members/${t}/role`,{method:"PATCH",body:JSON.stringify({role:r})})}}}function We(o){let n=$(o);return {async preview(e){return n("/schema-engine/preview",{method:"POST",body:JSON.stringify(e)})},async apply(e){return n("/schema-engine/apply",{method:"POST",body:JSON.stringify(e)})},async getMigrations(e,t){let r=t?`/schema-engine/migrations/project/${e}?limit=${t}`:`/schema-engine/migrations/project/${e}`;return n(r)},async saveSchema(e){return n("/schemas/",{method:"POST",body:JSON.stringify(e)})},async getSchemas(e){return n(`/schemas/project/${e}`)}}}function Ge(o){let n=$(o);return {async create(e){return n("/functions/secrets",{method:"POST",body:JSON.stringify(e)})},async list(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let s=r.toString(),a=`/functions/secrets/project/${e}${s?`?${s}`:""}`;return n(a)},async reveal(e){return n(`/functions/secrets/${e}/value`)},async update(e,t){return n(`/functions/secrets/${e}`,{method:"PUT",body:JSON.stringify({value:t})})},async delete(e){return n(`/functions/secrets/${e}`,{method:"DELETE"})}}}function Xe(o){let n=$(o);return {async list(e,t){let r=new URLSearchParams;t&&r.set("env",t);let s=r.toString(),a=`/deployments/project/${e}${s?`?${s}`:""}`;return (await n(a)).deployments},async get(e){let t=await n(`/deployments/${e}`);return {...t.deployment,steps:t.steps}},async getSteps(e){return (await n(`/deployments/${e}/steps`)).steps},async promote(e){let t={projectId:e.projectId,fromEnv:e.sourceEnv,toEnv:e.targetEnv},r=await n("/deployments/promote",{method:"POST",body:JSON.stringify(t)}),s=await n(`/deployments/${r.deploymentId}`);return {deployment:{...s.deployment,steps:s.steps}}},async rollback(e){return n(`/deployments/${e}/rollback`,{method:"POST"})},async listTokens(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let s=r.toString(),a=`/deployments/tokens/project/${encodeURIComponent(e)}${s?`?${s}`:""}`;return (await n(a)).tokens},async createToken(e){return n("/deployments/tokens",{method:"POST",body:JSON.stringify(e)})},async revokeToken(e){return n(`/deployments/tokens/${encodeURIComponent(e)}/revoke`,{method:"POST"})}}}function Ze(o){let n=$(o);return {async getStats(e){return n(`/realtime/stats/project/${e}`)},async getConnections(e){return (await n(`/realtime/connections/project/${e}`)).connections},async getSubscriptions(e){return (await n(`/realtime/subscriptions/project/${e}`)).subscriptions},async getEvents(e,t){let r=new URLSearchParams;t&&r.set("limit",String(t));let s=r.toString(),a=`/realtime/events/project/${e}${s?`?${s}`:""}`;return (await n(a)).events},async getStatus(e){return n(`/realtime/status/project/${e}`)},async install(e){return n("/realtime/install",{method:"POST",body:JSON.stringify(e)})},async enableAll(e){return n("/realtime/enable-all",{method:"POST",body:JSON.stringify(e)})}}}function Ye(o){let n=$(o);return {async listBuckets(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let s=r.toString(),a=`/buckets/project/${e}${s?`?${s}`:""}`;return (await n(a)).buckets},async getBucket(e){return (await n(`/buckets/${e}`)).bucket},async createBucket(e){return (await n("/buckets",{method:"POST",body:JSON.stringify(e)})).bucket},async updateBucket(e,t){return (await n(`/buckets/${e}`,{method:"PUT",body:JSON.stringify(t)})).bucket},async deleteBucket(e){return n(`/buckets/${e}`,{method:"DELETE"})},async listFiles(e,t){let r=new URLSearchParams;t?.prefix&&r.set("prefix",t.prefix),t?.maxKeys&&r.set("maxKeys",String(t.maxKeys)),t?.continuationToken&&r.set("continuationToken",t.continuationToken);let s=r.toString(),a=`/buckets/${e}/files${s?`?${s}`:""}`;return n(a)},async deleteFile(e,t){return n(`/buckets/${e}/files?key=${encodeURIComponent(t)}`,{method:"DELETE"})},async getSignedUrl(e,t,r){return n(`/buckets/${e}/signed-url`,{method:"POST",body:JSON.stringify({key:t,expiresIn:r})})},async getUploadUrl(e,t,r){return n(`/buckets/${e}/upload-url`,{method:"POST",body:JSON.stringify({key:t,...r})})},async uploadFile(e,t,r,s){let a=s?.prefix?`${s.prefix}${t}`:t,c=s?.contentType??(r instanceof Blob?r.type:"application/octet-stream"),i=new URLSearchParams;return i.set("key",a),c&&i.set("contentType",c),n(`/buckets/${e}/upload?${i.toString()}`,{method:"POST",body:r,headers:{"Content-Type":c||"application/octet-stream"}})}}}function et(o){let n=$(o);return {async list(e,t){let r={type:t?.type,enabled:t?.enabled},s=C(r);return (await n(`/integrations/subscriptions/project/${e}${s}`)).subscriptions},async get(e){return n(`/integrations/subscriptions/${e}`)},async create(e){return (await n("/integrations/subscriptions",{method:"POST",body:JSON.stringify(e)})).subscription},async update(e,t){return (await n(`/integrations/subscriptions/${e}`,{method:"PATCH",body:JSON.stringify(t)})).subscription},async delete(e){return n(`/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 n(`/integrations/subscriptions/${e}/test`,{method:"POST"})},async publish(e){return n("/integrations/events/publish",{method:"POST",body:JSON.stringify(e)})},async publishBatch(e){return (await n("/integrations/events/publish-batch",{method:"POST",body:JSON.stringify({events:e})})).results},async listEvents(e){let t={envId:e.envId,source:e.source,name:e.name,since:e.since,until:e.until,limit:e.limit,offset:e.offset},r=C(t);return (await n(`/integrations/events/project/${e.projectId}${r}`)).events},async getEvent(e){return n(`/integrations/events/${e}`)},async getDeliveries(e){let t={subscriptionId:e.subscriptionId,eventId:e.eventId,status:e.status,since:e.since,until:e.until,limit:e.limit,offset:e.offset},r=C(t);return (await n(`/integrations/deliveries${r}`)).deliveries},async getDelivery(e){return n(`/integrations/deliveries/${e}`)},async retryDelivery(e){return n(`/integrations/deliveries/${e}/retry`,{method:"POST"})},async retryAllFailed(e){return n(`/integrations/subscriptions/${e}/retry-failed`,{method:"POST"})},async getDlq(e,t){let r={limit:t?.limit,offset:t?.offset},s=C(r);return (await n(`/integrations/dlq/project/${e}${s}`)).deliveries},async purgeDlq(e,t){return n(`/integrations/dlq/project/${e}/purge`,{method:"POST",body:JSON.stringify({olderThan:t.olderThan})})},async replayDlq(e,t){return n(`/integrations/dlq/project/${e}/replay`,{method:"POST",body:JSON.stringify(t)})},verifySignature(e){let t=e.tolerance??300;try{let r=e.signature.split(","),s=r.find(m=>m.startsWith("t=")),a=r.find(m=>m.startsWith("v1="));if(!s||!a)return !1;let c=parseInt(s.slice(2),10),i=a.slice(3),u=Math.floor(Date.now()/1e3);if(Math.abs(u-c)>t)return !1;let l=`${c}.${e.payload}`,d=new TextEncoder,p=d.encode(e.secret),g=d.encode(l),b=Array.from(p).concat(Array.from(g)).reduce((m,T)=>m+T,0).toString(16);if(i.length!==b.length)return !1;let h=0;for(let m=0;m<i.length;m++)h|=i.charCodeAt(m)^b.charCodeAt(m);return h===0}catch{return false}},generateSecret(){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="whsec_";for(let r=0;r<32;r++)t+=e.charAt(Math.floor(Math.random()*e.length));return t}}}function tt(o){let n=$(o);return {async getSummary(e){return n(`/billing/org/${e}/summary`)},async getEntitlements(e){return n(`/entitlements/org/${e}`)},async checkEntitlement(e,t){return n(`/entitlements/org/${e}/check`,{method:"POST",body:JSON.stringify(t)})},async getPlans(){return (await n("/pricing/plans")).plans},async createCheckout(e){return n("/billing/checkout",{method:"POST",body:JSON.stringify(e)})},async openPortal(e){return n(`/billing/org/${e.orgId}/portal`,{method:"POST",body:JSON.stringify({returnUrl:e.returnUrl})})}}}function nt(o){let n=$(o);return {async getOverview(){return n("/admin/overview")},async listUsers(e){let t=new URLSearchParams;e?.search&&t.set("search",e.search),e?.limit&&t.set("limit",String(e.limit)),e?.offset&&t.set("offset",String(e.offset));let r=t.toString();return n(`/admin/users${r?`?${r}`:""}`)},async getUser(e){return n(`/admin/users/${e}`)},async updateUserStatus(e,t){return n(`/admin/users/${e}/status`,{method:"PATCH",body:JSON.stringify({status:t})})},async updateUserAdmin(e,t){return n(`/admin/users/${e}/admin`,{method:"PATCH",body:JSON.stringify({isAdmin:t})})},async listOrganizations(e){let t=new URLSearchParams;e?.search&&t.set("search",e.search),e?.plan&&t.set("plan",e.plan),e?.limit&&t.set("limit",String(e.limit)),e?.offset&&t.set("offset",String(e.offset));let r=t.toString();return n(`/admin/organizations${r?`?${r}`:""}`)},async getOrganization(e){return n(`/admin/organizations/${e}`)},async updateOrganization(e,t){return n(`/admin/organizations/${e}`,{method:"PATCH",body:JSON.stringify(t)})},async listProjects(e){let t=new URLSearchParams;e?.search&&t.set("search",e.search),e?.orgId&&t.set("orgId",e.orgId),e?.region&&t.set("region",e.region),e?.tenancy&&t.set("tenancy",e.tenancy),e?.limit&&t.set("limit",String(e.limit)),e?.offset&&t.set("offset",String(e.offset));let r=t.toString();return n(`/admin/projects${r?`?${r}`:""}`)},async getProject(e){return n(`/admin/projects/${e}`)},async updateProject(e,t){return n(`/admin/projects/${e}`,{method:"PATCH",body:JSON.stringify(t)})},async getProjectResources(e){return n(`/admin/resources/project/${e}`)},async setDedicatedDb(e){return n(`/admin/resources/project/${e.projectId}/db`,{method:"POST",body:JSON.stringify({connectionString:e.connectionString})})},async listIncidents(e="open"){return (await n(`/admin/incidents?status=${e}`)).incidents},async createIncident(e){return n("/admin/incidents",{method:"POST",body:JSON.stringify(e)})},async acknowledgeIncident(e){return n(`/admin/incidents/${e}/ack`,{method:"POST"})},async resolveIncident(e){return n(`/admin/incidents/${e}/resolve`,{method:"POST"})},async listRegions(){return n("/admin/regions")},async updateRegion(e,t){return n(`/admin/regions/${e}`,{method:"PATCH",body:JSON.stringify(t)})},async getHealthComponents(){return n("/admin/health/components")},async updateHealthComponent(e,t){return n(`/admin/health/components/${e}`,{method:"PATCH",body:JSON.stringify(t)})},async listQueues(){return n("/admin/queues")},async listDlqMessages(e){let t=new URLSearchParams;e?.queue&&t.set("queue",e.queue),e?.search&&t.set("search",e.search),e?.limit&&t.set("limit",String(e.limit)),e?.offset&&t.set("offset",String(e.offset));let r=t.toString();return n(`/admin/dlq${r?`?${r}`:""}`)},async retryDlqMessage(e){return n(`/admin/dlq/${e}/retry`,{method:"POST"})},async archiveDlqMessage(e){return n(`/admin/dlq/${e}`,{method:"DELETE"})}}}function rt(o){let n=$(o);return {async list(){return (await n("/flags")).flags},async create(e){return n("/flags",{method:"POST",body:JSON.stringify(e)})},async update(e,t){return n(`/flags/${encodeURIComponent(e)}`,{method:"PUT",body:JSON.stringify(t)})},async delete(e){return n(`/flags/${encodeURIComponent(e)}`,{method:"DELETE"})}}}function st(o){let n=$(o);return {async getOverview(e){return (await n(`/security/overview/${encodeURIComponent(e)}`)).overview},async getAuditLogs(e,t){let r=new URLSearchParams;t?.limit&&r.set("limit",String(t.limit)),t?.offset&&r.set("offset",String(t.offset));let s=r.toString(),a=`/security/audit/${encodeURIComponent(e)}${s?`?${s}`:""}`;return n(a)},async listEnvVars(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let s=r.toString(),a=`/projects/${encodeURIComponent(e)}/env-vars${s?`?${s}`:""}`;return (await n(a)).envVars},async createEnvVar(e,t){return (await n(`/projects/${encodeURIComponent(e)}/env-vars`,{method:"POST",body:JSON.stringify(t)})).envVar},async updateEnvVar(e,t,r){return (await n(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(r)})).envVar},async deleteEnvVar(e,t){return n(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(t)}`,{method:"DELETE"})},async getEnvVarValue(e,t){return n(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(t)}/value`)}}}function ot(o){let n=$(o);return {async generatePlan(e){return n("/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 n("/ai/explain",{method:"POST",body:JSON.stringify({plan:e.plan,projectId:e.projectId,taskType:e.taskType,mode:e.mode})})},async getOrgSettings(e){return n(`/ai/settings/org/${encodeURIComponent(e)}`)},async updateOrgSettings(e,t){return n(`/ai/settings/org/${encodeURIComponent(e)}`,{method:"POST",body:JSON.stringify(t)})},async getProjectOverrides(e){return n(`/ai/settings/project/${encodeURIComponent(e)}`)},async updateProjectOverrides(e,t){return n(`/ai/settings/project/${encodeURIComponent(e)}`,{method:"POST",body:JSON.stringify(t)})},async getUsage(e,t){let r=new URLSearchParams;t&&r.set("month",t);let s=r.toString(),a=`/ai/usage/org/${encodeURIComponent(e)}${s?`?${s}`:""}`;return n(a)},async getBudgetStatus(e){let[t,r]=await Promise.all([this.getOrgSettings(e),this.getUsage(e)]),s=t?.monthlyBudgetCents??1e4,a=r.costCents,c=Math.max(0,s-a),i=s>0?Math.round(a/s*100):0;return {spent:a,budget:s,remaining:c,hardStop:t?.hardStopEnabled??false,percentUsed:i}},async generateFunction(e){return n("/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 n("/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 n("/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,t){return n("/ai/conversations",{method:"POST",body:JSON.stringify({projectId:e,title:t?.title,context:t?.context})})},async sendMessage(e,t){return n(`/ai/conversations/${encodeURIComponent(e)}/messages`,{method:"POST",body:JSON.stringify({content:t.content,taskType:t.taskType})})},async getConversation(e){return n(`/ai/conversations/${encodeURIComponent(e)}`)},async listConversations(e){return (await n(`/ai/conversations/project/${encodeURIComponent(e)}`)).conversations},async deleteConversation(e){return n(`/ai/conversations/${encodeURIComponent(e)}`,{method:"DELETE"})}}}function at(o){let n=$(o);return {async load(){return n("/bootstrap")}}}function it(o){let n=$(o);return {async list(e){let t=new URLSearchParams;e?.visibility&&t.set("visibility",e.visibility),e?.category&&t.set("category",e.category),e?.orgId&&t.set("orgId",e.orgId);let r=t.toString(),s=`/templates${r?`?${r}`:""}`;return (await n(s)).templates},async get(e){return n(`/templates/${e}`)},async previewInstall(e){return n("/templates/install/preview",{method:"POST",body:JSON.stringify(e)})},async applyInstall(e){return n("/templates/install/apply",{method:"POST",body:JSON.stringify(e)})},async rollback(e){return n(`/templates/install/${e}/rollback`,{method:"POST"})},async createProject(e){return n("/templates/create-project",{method:"POST",body:JSON.stringify(e)})}}}function ct(o){let n=$(o);return {async list(e){return (await n(`/oauth/org/${e}`)).connections},async configure(e,t){return n(`/oauth/org/${e}/configure`,{method:"POST",body:JSON.stringify(t)})},async enable(e){return n(`/oauth/connections/${e}/enable`,{method:"POST"})},async disable(e){return n(`/oauth/connections/${e}/disable`,{method:"POST"})},async delete(e){return n(`/oauth/connections/${e}`,{method:"DELETE"})}}}function ut(o){let n=$(o);return {async listPages(e){let t=e?`?category=${encodeURIComponent(e)}`:"";return (await n(`/docs/pages${t}`)).pages},async getPage(e){return (await n(`/docs/pages/${encodeURIComponent(e)}`)).page},async createPage(e){return (await n("/docs/pages",{method:"POST",body:JSON.stringify(e)})).page},async updatePage(e,t){return (await n(`/docs/pages/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})).page},async deletePage(e){return n(`/docs/pages/${encodeURIComponent(e)}`,{method:"DELETE"})},async listSdks(){return (await n("/docs/sdks")).sdks},async getSdk(e){return (await n(`/docs/sdks/${encodeURIComponent(e)}`)).sdk},async createSdk(e){return (await n("/docs/sdks",{method:"POST",body:JSON.stringify(e)})).sdk},async updateSdk(e,t){return (await n(`/docs/sdks/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})).sdk},async deleteSdk(e){return n(`/docs/sdks/${encodeURIComponent(e)}`,{method:"DELETE"})},async listSdkExamples(e,t){let r=t?`?topic=${encodeURIComponent(t)}`:"";return (await n(`/docs/sdks/${encodeURIComponent(e)}/examples${r}`)).examples},async createSdkExample(e){return (await n("/docs/sdk-examples",{method:"POST",body:JSON.stringify(e)})).example},async deleteSdkExample(e){return n(`/docs/sdk-examples/${encodeURIComponent(e)}`,{method:"DELETE"})},async listEndpoints(e){let t=e?`?category=${encodeURIComponent(e)}`:"";return (await n(`/docs/api-endpoints${t}`)).endpoints},async getEndpoint(e){return (await n(`/docs/api-endpoints/${encodeURIComponent(e)}`)).endpoint},async createEndpoint(e){return (await n("/docs/api-endpoints",{method:"POST",body:JSON.stringify(e)})).endpoint},async updateEndpoint(e,t){return (await n(`/docs/api-endpoints/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})).endpoint},async deleteEndpoint(e){return n(`/docs/api-endpoints/${encodeURIComponent(e)}`,{method:"DELETE"})},async listExamples(e){let t=e!==void 0?`?featured=${e}`:"";return (await n(`/docs/examples${t}`)).examples},async getExample(e){return (await n(`/docs/examples/${encodeURIComponent(e)}`)).example},async createExample(e){return (await n("/docs/examples",{method:"POST",body:JSON.stringify(e)})).example},async updateExample(e,t){return (await n(`/docs/examples/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})).example},async deleteExample(e){return n(`/docs/examples/${encodeURIComponent(e)}`,{method:"DELETE"})},async listChangelog(){return (await n("/docs/changelog")).entries},async getChangelogEntry(e){return (await n(`/docs/changelog/${encodeURIComponent(e)}`)).entry},async createChangelogEntry(e){return (await n("/docs/changelog",{method:"POST",body:JSON.stringify(e)})).entry},async updateChangelogEntry(e,t){return (await n(`/docs/changelog/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})).entry},async deleteChangelogEntry(e){return n(`/docs/changelog/${encodeURIComponent(e)}`,{method:"DELETE"})},async search(e){return (await n(`/docs/search?q=${encodeURIComponent(e)}`)).results}}}function lt(o,n,e,t){let r=n.type||"public",s="unsubscribed",a=new Map,c=[],i={},u=null,l=null,d=new Set,p=new Set,g=new Set,b=y=>{if(y.event){let k=a.get(y.event);k&&k.forEach(E=>E(y.payload));}},h=y=>{i=y.state||{},d.forEach(k=>k(i));},m=y=>{let k=y.key||"",E=y.currentPresences||[],x=y.joinedPresences||[],f=y.leftPresences||[];x.length>0&&(i[k]=E,p.forEach(P=>P(k,E,x))),f.length>0&&(E.length===0?delete i[k]:i[k]=E,g.forEach(P=>P(k,E,f))),d.forEach(P=>P(i));},T=y=>{let k={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};c.forEach(({options:E,handler:x})=>{if(E.table===k.table){let f=E.event||"*";(f==="*"||(Array.isArray(f)?f.includes(k.operation):f===k.operation))&&x(k);}});},w={get name(){return o},get type(){return r},get status(){return s},_handleMessage:y=>{switch(y.type){case "broadcast":b(y);break;case "presence_state":h(y);break;case "presence":m(y);break;case "db_change":T(y);break;case "subscribed":s="subscribed";break;case "error":s="error";break}},onDbChange(y,k){return c.push({options:y,handler:k}),s==="subscribed"&&e({type:"subscribe",channel:o,options:{table:y.table,filter:y.filter,event:y.event,columns:y.columns}}),w},on(y,k){return a.has(y)||a.set(y,new Set),a.get(y).add(k),w},off(y,k){return k?a.get(y)?.delete(k):a.delete(y),w},async broadcast(y){if(s!=="subscribed")throw new Error("Channel must be subscribed before broadcasting");e({type:"broadcast",channel:o,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");u=y.key||t()||"anonymous",l=y.state,e({type:"presence_track",channel:o,key:u,state:l});},async update(y){if(!l)throw new Error("Must call track() before update()");l={...l,...y},e({type:"presence_update",channel:o,key:u,state:l});},async untrack(){u&&(e({type:"presence_untrack",channel:o,key:u}),u=null,l=null);},state(){return {...i}},onSync(y){return d.add(y),w},onJoin(y){return p.add(y),w},onLeave(y){return g.add(y),w}},async subscribe(){return s==="subscribed"||(s="subscribing",e({type:"subscribe",channel:o}),c.forEach(({options:y})=>{e({type:"subscribe",channel:o,options:{table:y.table,filter:y.filter,event:y.event,columns:y.columns}});}),n.presenceState&&r==="presence"&&await w.presence.track({state:n.presenceState})),w},async unsubscribe(){s!=="unsubscribed"&&(u&&await w.presence.untrack(),e({type:"unsubscribe",channel:o}),s="unsubscribed",i={},a.clear(),c.length=0);}};return w}function dt(o,n){let{wsUrl:e=o.baseUrl.replace(/^http/,"ws")+"/realtime/ws",autoReconnect:t=true,reconnectDelay:r=1e3,maxReconnectAttempts:s=10}=n??{},a=null,c="disconnected",i=null,u=null,l=0,d=null,p=null,g=new Map,b=new Map,h=new Set,m={connect:new Set,disconnect:new Set,error:new Set,reconnect:new Set},T=f=>{m[f].forEach(P=>P());},w=f=>{let P=`table:${f.table}`;if(f.filter){let U=(Array.isArray(f.filter)?f.filter:[f.filter]).map(O=>`${O.field}${O.operator||"eq"}${O.value}`).join("&");P+=`?${U}`;}return P},y=f=>{a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify(f));},k=f=>{if(f.channel){let P=g.get(f.channel);if(P){P._handleMessage(f);return}}switch(f.type){case "db_change":{let P={type:"db_change",projectId:f.projectId??"",schema:f.schema??"",table:f.table??"",operation:f.op,new:f.record,old:f.old_record,timestamp:f.ts??new Date().toISOString(),partial:f.partial},U=`table:${f.table}`;b.forEach((O,I)=>{(I===U||I.startsWith(U+"?"))&&O.forEach(R=>R(P));});break}case "presence":{let P={type:"presence",event:f.event,key:f.key||f.connectionId||"",connectionId:f.connectionId??"",projectId:f.projectId??"",currentPresences:f.currentPresences||[],leftPresences:f.leftPresences||[],joinedPresences:f.joinedPresences||[]};h.forEach(U=>U(P));break}case "welcome":i=f.connectionId||null;break;case "error":{console.error("[vaif/realtime] Server error:",f.message),T("error");break}}},E=()=>new Promise((f,P)=>{let U=new URLSearchParams;o.apiKey&&U.set(o.apiKeyHeader,o.apiKey),u&&U.set("token",u);let O=U.toString(),I=O?`${e}?${O}`:e;try{a=new WebSocket(I);}catch{P(new W("Failed to create WebSocket connection"));return}let R=()=>{c="connected",l=0,T("connect"),g.forEach(M=>{(M.status==="subscribed"||M.status==="subscribing")&&M.subscribe();}),b.forEach((M,ee)=>{y({type:"subscribe",channel:ee});}),p=setInterval(()=>{y({type:"ping"});},3e4),f();},S=M=>{try{let ee=JSON.parse(M.data);k(ee);}catch{}},K=()=>{if(c="disconnected",i=null,a=null,p&&(clearInterval(p),p=null),T("disconnect"),t&&l<s){c="reconnecting";let M=r*Math.pow(2,l);d=setTimeout(()=>{l++,T("reconnect"),E().catch(()=>{});},Math.min(M,3e4));}},Le=()=>{T("error"),P(new W("WebSocket connection error"));};a.addEventListener("open",R),a.addEventListener("message",S),a.addEventListener("close",K),a.addEventListener("error",Le);}),x=()=>{d&&(clearTimeout(d),d=null),p&&(clearInterval(p),p=null),l=s;};return {channel(f,P={}){let U=g.get(f);if(U)return U;let O=lt(f,P,y,()=>i);return g.set(f,O),O},async removeChannel(f){let P=g.get(f.name);P&&(await P.unsubscribe(),g.delete(f.name));},getChannels(){return Array.from(g.values())},subscribe(f,P){let U=w(f);return b.has(U)||b.set(U,new Set),b.get(U).add(P),a?.readyState===WebSocket.OPEN&&y({type:"subscribe",channel:U}),()=>{let O=b.get(U);O&&(O.delete(P),O.size===0&&(b.delete(U),a?.readyState===WebSocket.OPEN&&y({type:"unsubscribe",channel:U})));}},subscribeToPresence(f){return h.add(f),()=>{h.delete(f);}},async connect(){if(c!=="connected"){if(!o.apiKey)throw new te("API key is required for realtime connections");c="connecting",await E();}},disconnect(){x(),g.forEach(f=>{f.unsubscribe();}),g.clear(),a&&(a.close(),a=null),c="disconnected",i=null;},get isConnected(){return c==="connected"},get connectionState(){return c},get connectionId(){return i},on(f,P){m[f].add(P);},off(f,P){m[f].delete(P);},setAuth(f){u=f;}}}var _={apiKeyHeader:"x-vaif-key",timeout:3e4,retry:{maxRetries:3,retryDelay:1e3,retryOn:[429,500,502,503,504]}};function yt(o){return {baseUrl:o.baseUrl.replace(/\/$/,""),apiKey:o.apiKey,apiKeyHeader:o.apiKeyHeader??_.apiKeyHeader,accessToken:o.accessToken,fetch:o.fetch??globalThis.fetch.bind(globalThis),timeout:o.timeout??_.timeout,retry:{maxRetries:o.retry?.maxRetries??_.retry.maxRetries,retryDelay:o.retry?.retryDelay??_.retry.retryDelay,retryOn:o.retry?.retryOn??[..._.retry.retryOn]}}}function ce(o){let n=yt(o),e=qe(n),t=Qe(n),r=He(n),s=ze(n),a=Ke(n),c=_e(n),i=We(n),u=Ge(n),l=Xe(n),d=Ze(n),p=Ye(n),g=et(n),b=tt(n),h=nt(n),m=rt(n),T=st(n),w=ot(n),y=at(n),k=it(n),E=ct(n),x=ut(n);return {from:e.from,auth:t,functions:r,storage:s,projects:a,orgs:c,schema:i,secrets:u,deployments:l,realtimeMonitoring:d,storageDashboard:p,integrations:g,billing:b,admin:h,flags:m,security:T,ai:w,bootstrap:y,templates:k,oauth:E,docs:x,realtime:f=>dt(n,f)}}var ue=react.createContext(null);function le({config:o,children:n,storage:e,onAuthStateChange:t,autoRefreshSession:r=true,storageKey:s="vaif-auth"}){let[a]=react.useState(()=>ce(o)),[c,i]=react.useState(null),[u,l]=react.useState(null),[d,p]=react.useState(null),[g,b]=react.useState(null),[h,m]=react.useState(true),T=react.useRef(null),w=react.useCallback(async(O,I,R)=>{if(!e)return;let S={token:O,refreshToken:I,expiresAt:R};await e.setItem(s,JSON.stringify(S));},[e,s]),y=react.useCallback(async()=>{e&&await e.removeItem(s),i(null),l(null),p(null),b(null);},[e,s]);react.useEffect(()=>((async()=>{try{if(!e){m(!1);return}let I=await e.getItem(s);if(!I){m(!1);return}let R=JSON.parse(I);if(R.expiresAt&&new Date(R.expiresAt)<=new Date)if(R.refreshToken)try{let S=await a.auth.refreshToken(R.refreshToken);l(S.token),p(S.refreshToken??null),b(S.expiresAt),await w(S.token,S.refreshToken,S.expiresAt);let K=await a.auth.getUser();i(K);}catch{await y();}else await y();else {l(R.token),p(R.refreshToken??null),b(R.expiresAt??null);try{let S=await a.auth.getUser();i(S);}catch{if(R.refreshToken)try{let S=await a.auth.refreshToken(R.refreshToken);l(S.token),p(S.refreshToken??null),b(S.expiresAt),await w(S.token,S.refreshToken,S.expiresAt);let K=await a.auth.getUser();i(K);}catch{await y();}else await y();}}}catch{await y();}finally{m(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[a,e,s,w,y]),react.useEffect(()=>{if(!r||!g||!d)return;let O=new Date(g).getTime(),I=Date.now(),R=O-I-6e4;return R>0&&(T.current=setTimeout(async()=>{try{let S=await a.auth.refreshToken(d);l(S.token),p(S.refreshToken??null),b(S.expiresAt),await w(S.token,S.refreshToken,S.expiresAt);}catch{await y();}},R)),()=>{T.current&&clearTimeout(T.current);}},[r,a,g,d,w,y]),react.useEffect(()=>{h||t?.(c);},[c,h,t]);let k=react.useCallback(async(O,I)=>{let R=await a.auth.login(O,I);if("mfaRequired"in R)throw new Error("MFA required - use verifyMFA to complete login");let S=R;return i(S.user),l(S.token),p(S.refreshToken??null),b(S.expiresAt??null),await w(S.token,S.refreshToken,S.expiresAt),S},[a,w]),E=react.useCallback(async(O,I,R)=>{let S=await a.auth.signUp(O,I,{metadata:R});return i(S.user),l(S.token),p(S.refreshToken??null),b(S.expiresAt??null),await w(S.token,S.refreshToken,S.expiresAt),S},[a,w]),x=react.useCallback(async()=>{try{await a.auth.logout();}finally{await y();}},[a,y]),f=react.useCallback(async()=>{if(!d)throw new Error("No refresh token available");let O=await a.auth.refreshToken(d);l(O.token),p(O.refreshToken??null),b(O.expiresAt),await w(O.token,O.refreshToken,O.expiresAt);},[a,d,w]),P=react.useCallback(O=>{i(I=>I?{...I,...O}:null);},[]),U={client:a,user:c,token:u,isLoading:h,isAuthenticated:!!c,signIn:k,signUp:E,signOut:x,refreshSession:f,updateUser:P};return jsxRuntime.jsx(ue.Provider,{value:U,children:n})}function H(){let o=react.useContext(ue);if(!o)throw new Error("useVaif must be used within a VaifProvider");return o}function v(){let{client:o}=H();return o}function ye(){let{client:o,user:n,isLoading:e,isAuthenticated:t,token:r,signIn:s,signUp:a,signOut:c,refreshSession:i,updateUser:u}=H(),l=react.useCallback(async p=>{let g=await o.auth.updateProfile(p);return u(g),g},[o,u]),d=react.useCallback(async(p,g)=>{await o.auth.changePassword({currentPassword:p,newPassword:g});},[o]);return {user:n,isLoading:e,isAuthenticated:t,token:r,signIn:s,signUp:a,signOut:c,refreshSession:i,updateProfile:l,changePassword:d}}function pe(){let{user:o}=H();return o}function ge(o,n={}){let e=v(),[t,r]=react.useState([]),[s,a]=react.useState("idle"),[c,i]=react.useState(null),u=react.useRef(n);u.current=n;let{enabled:l=true,refetchInterval:d,where:p,orderBy:g,...b}=n,h=react.useCallback(async()=>{if(l){a("loading"),i(null);try{let m={...b};p&&(Array.isArray(p)?m.where={AND:p}:m.where=p),g&&(m.orderBy=Array.isArray(g)?g:[g]);let T=await e.from(o).list(m);r(T.data??[]),a("success");}catch(m){i(m),a("error");}}},[e,o,l,JSON.stringify(p),JSON.stringify(g),JSON.stringify(b)]);return react.useEffect(()=>{h();},[h]),react.useEffect(()=>{if(!d||!l)return;let m=setInterval(h,d);return ()=>clearInterval(m)},[d,h,l]),{data:t,status:s,isLoading:s==="loading",isError:s==="error",isSuccess:s==="success",error:c,refetch:h}}function me(o,n,e={}){let t=v(),[r,s]=react.useState(null),[a,c]=react.useState("idle"),[i,u]=react.useState(null),l=e.enabled!==false&&!!n,d=react.useCallback(async()=>{if(!(!l||!n)){c("loading"),u(null);try{let p=await t.from(o).get(n);s(p.data??null),c("success");}catch(p){u(p),c("error");}}},[t,o,n,l]);return react.useEffect(()=>{d();},[d]),{data:r,isLoading:a==="loading",isError:a==="error",error:i,refetch:d}}function fe(o,n={}){let e=v(),[t,r]=react.useState([]),[s,a]=react.useState("idle"),[c,i]=react.useState(null),[u,l]=react.useState(n.initialPage??1),[d,p]=react.useState(0),g=n.pageSize??20,{enabled:b=true,where:h,orderBy:m}=n,T=react.useCallback(async()=>{if(b){a("loading"),i(null);try{let y=e.from(o);if(h){let E=Array.isArray(h)?h:[h];for(let x of E)y=y.where(x);}if(m){let E=Array.isArray(m)?m:[m];for(let x of E)y=y.orderBy(x.field,x.direction);}let k=await y.paginate({page:u,pageSize:g});r(k.data??[]),p(k.pageInfo?.total??0),a("success");}catch(y){i(y),a("error");}}},[e,o,u,g,b,JSON.stringify(h),JSON.stringify(m)]);react.useEffect(()=>{T();},[T]);let w=Math.ceil(d/g);return {data:t,status:s,isLoading:s==="loading",isError:s==="error",isSuccess:s==="success",error:c,refetch:T,page:u,pageSize:g,totalPages:w,totalCount:d,hasNextPage:u<w,hasPreviousPage:u>1,nextPage:()=>l(y=>Math.min(y+1,w)),previousPage:()=>l(y=>Math.max(y-1,1)),goToPage:y=>l(Math.max(1,Math.min(y,w)))}}function he(o){let n=v(),[e,t]=react.useState(null),[r,s]=react.useState("idle"),[a,c]=react.useState(null),i=react.useCallback(async l=>{s("loading"),c(null);try{let p=(await n.from(o).create(l)).data??null;return t(p),s("success"),p}catch(d){return c(d),s("error"),null}},[n,o]),u=react.useCallback(()=>{t(null),s("idle"),c(null);},[]);return {create:i,mutate:i,data:e,status:r,isLoading:r==="loading",isError:r==="error",isSuccess:r==="success",error:a,reset:u}}function be(o){let n=v(),[e,t]=react.useState(null),[r,s]=react.useState("idle"),[a,c]=react.useState(null),i=react.useCallback(async(l,d)=>{s("loading"),c(null);try{let g=(await n.from(o).update(l,d)).data??null;return t(g),s("success"),g}catch(p){return c(p),s("error"),null}},[n,o]),u=react.useCallback(()=>{t(null),s("idle"),c(null);},[]);return {update:i,data:e,status:r,isLoading:r==="loading",isError:r==="error",error:a,reset:u}}function Se(o){let n=v(),[e,t]=react.useState("idle"),[r,s]=react.useState(null),a=react.useCallback(async i=>{t("loading"),s(null);try{return await n.from(o).delete(i),t("success"),!0}catch(u){return s(u),t("error"),false}},[n,o]),c=react.useCallback(()=>{t("idle"),s(null);},[]);return {remove:a,status:e,isLoading:e==="loading",isError:e==="error",error:r,reset:c}}function Te(o){let n=v(),[e,t]=react.useState(null),[r,s]=react.useState("idle"),[a,c]=react.useState(null),i=react.useCallback(async(l,d)=>{s("loading"),c(null);try{let g=(await n.from(o).upsert(l,{conflictFields:d})).data??null;return t(g),s("success"),g}catch(p){return c(p),s("error"),null}},[n,o]),u=react.useCallback(()=>{t(null),s("idle"),c(null);},[]);return {upsert:i,data:e,status:r,isLoading:r==="loading",isError:r==="error",error:a,reset:u}}function we(o){let n=v(),[e,t]=react.useState([]),[r,s]=react.useState("idle"),[a,c]=react.useState(null);return {createMany:react.useCallback(async u=>{s("loading"),c(null);try{let d=(await n.from(o).createMany(u)).records??[];return t(d),s("success"),d}catch(l){return c(l),s("error"),[]}},[n,o]),data:e,isLoading:r==="loading",isError:r==="error",error:a}}function Pe(o,n={}){let e=v(),[t,r]=react.useState("connecting"),s=react.useRef(null),a=react.useRef(null),{enabled:c=true,event:i,filter:u,onInsert:l,onUpdate:d,onDelete:p,onChange:g}=n;react.useEffect(()=>{if(!c)return;let h=e.realtime();s.current=h,h.on("connect",()=>r("connected")),h.on("disconnect",()=>r("disconnected")),h.on("reconnect",()=>r("reconnecting")),h.connect().catch(()=>{r("disconnected");});let m=T=>{switch(g?.(T),T.operation){case "INSERT":T.new&&l?.(T.new);break;case "UPDATE":T.new&&d?.(T.new,T.old??null);break;case "DELETE":T.old&&p?.(T.old);break}};return a.current=h.subscribe({table:o,event:i??"*",filter:u},m),()=>{a.current?.(),h.disconnect();}},[e,o,c,JSON.stringify(i),JSON.stringify(u)]);let b=react.useCallback(()=>{a.current?.(),s.current?.disconnect();},[]);return {isConnected:t==="connected",connectionState:t,unsubscribe:b}}function Oe(o,n={}){let e=v(),[t,r]=react.useState([]),[s,a]=react.useState(false),c=react.useRef(null),i=react.useRef(null);react.useEffect(()=>{let p=e.realtime();i.current=p,p.on("connect",()=>a(true)),p.on("disconnect",()=>a(false));let g=p.channel(o,{type:"presence"});return c.current=g,g.presence.onSync(b=>{let h=[];for(let m of Object.values(b))h.push(...m);r(h);}),g.subscribe().then(()=>{n.initialState&&g.presence.track({state:n.initialState});}),()=>{g.presence.untrack(),g.unsubscribe(),p.disconnect();}},[e,o]);let u=react.useCallback(p=>{c.current?.presence.track({state:p});},[]),l=react.useCallback(p=>{c.current?.presence.update(p);},[]),d=react.useCallback(()=>{c.current?.presence.untrack();},[]);return {presences:t,track:u,update:l,untrack:d,isConnected:s}}function ke(o){let n=v(),[e,t]=react.useState(null),[r,s]=react.useState(false),a=react.useRef(null),c=react.useRef(null),i=react.useRef(new Map);react.useEffect(()=>{let d=n.realtime();c.current=d,d.on("connect",()=>s(true)),d.on("disconnect",()=>s(false));let p=d.channel(o);return a.current=p,p.subscribe(),()=>{p.unsubscribe(),d.disconnect();}},[n,o]);let u=react.useCallback((d,p)=>{a.current?.broadcast({event:d,payload:p});},[]),l=react.useCallback((d,p)=>(i.current.has(d)||(i.current.set(d,new Set),a.current?.on(d,g=>{t({event:d,payload:g}),i.current.get(d)?.forEach(b=>b(g));})),i.current.get(d).add(p),()=>{i.current.get(d)?.delete(p);}),[]);return {broadcast:u,lastMessage:e,subscribe:l,isConnected:r}}function ve(){let o=v(),[n,e]=react.useState("disconnected"),t=react.useRef(null);react.useEffect(()=>{let a=o.realtime();return t.current=a,e(a.connectionState),a.on("connect",()=>e("connected")),a.on("disconnect",()=>e("disconnected")),a.on("reconnect",()=>e("reconnecting")),()=>{a.disconnect();}},[o]);let r=react.useCallback(()=>{t.current?.connect();},[]),s=react.useCallback(()=>{t.current?.disconnect();},[]);return {connectionState:n,isConnected:n==="connected",reconnect:r,disconnect:s}}function Re(o){let n=v(),[e,t]=react.useState(0),[r,s]=react.useState(false),[a,c]=react.useState(null),[i,u]=react.useState(null),l=react.useCallback(async(g,b,h={})=>{s(true),t(0),c(null),u(null);try{let m=await n.storage.upload(b,g,{bucket:h.bucket||o,contentType:h.contentType,metadata:h.metadata,isPublic:h.isPublic});return u(m),t(100),m}catch(m){return c(m),null}finally{s(false);}},[n,o]),d=react.useCallback(async(g,b,h={})=>{s(true),t(0),c(null),u(null);try{let T=await(await fetch(g)).blob(),w=h.contentType||T.type||bt(g),y=await n.storage.upload(b,T,{bucket:h.bucket||o,contentType:w,metadata:h.metadata,isPublic:h.isPublic});return u(y),t(100),y}catch(m){return c(m),null}finally{s(false);}},[n,o]),p=react.useCallback(()=>{t(0),c(null),u(null);},[]);return {upload:l,uploadUri:d,progress:e,isUploading:r,isError:!!a,error:a,result:i,reset:p}}function Ee(o){let n=v(),[e,t]=react.useState(false),[r,s]=react.useState(null),[a,c]=react.useState(0);return {download:react.useCallback(async u=>{t(true),c(0),s(null);try{let l=await n.storage.download(u,{bucket:o});return c(100),l}catch(l){return s(l),null}finally{t(false);}},[n,o]),isDownloading:e,isError:!!r,error:r,progress:a}}function $e(o,n){let e=v(),[t,r]=react.useState(null),[s,a]=react.useState(false),[c,i]=react.useState(null),u=react.useCallback(async()=>{if(o){a(true),i(null);try{let d=await e.storage.getMetadata(o,{bucket:n?.bucket});r(d);}catch(d){i(d);}finally{a(false);}}},[e,o,n?.bucket]),l=react.useCallback(async()=>{if(!o)return false;try{return await e.storage.delete(o,{bucket:n?.bucket}),r(null),!0}catch(d){return i(d),false}},[e,o,n?.bucket]);return react.useEffect(()=>{o&&u();},[o,u]),{file:t,isLoading:s,isError:!!c,error:c,refetch:u,remove:l}}function Ce(o={}){let n=v(),[e,t]=react.useState([]),[r,s]=react.useState(false),[a,c]=react.useState(null),i=react.useCallback(async()=>{s(true),c(null);try{let u=await n.storage.list({bucket:o.bucket,prefix:o.prefix,limit:o.limit});t(u.files??[]);}catch(u){c(u);}finally{s(false);}},[n,o.bucket,o.prefix,o.limit]);return react.useEffect(()=>{i();},[i]),{files:e,isLoading:r,isError:!!a,error:a,refetch:i}}function Ie(o,n){let e=v();if(!o)return null;try{return e.storage.getPublicUrl(o,{bucket:n?.bucket})}catch{return null}}function bt(o){let n=o.split(".").pop()?.toLowerCase();return {jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",mp4:"video/mp4",mov:"video/quicktime",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",json:"application/json",txt:"text/plain"}[n||""]||"application/octet-stream"}function Y(o,n={}){let e=v(),[t,r]=react.useState(null),[s,a]=react.useState(false),[c,i]=react.useState(null),[u,l]=react.useState(false),[d,p]=react.useState(null),g=react.useCallback(async h=>{a(true),i(null),l(false);try{let m=await e.functions.invoke(o,{body:h},{retry:n.retry,timeout:n.timeout});return r(m.data),p({status:m.status,durationMs:m.durationMs,requestId:m.requestId,logs:m.logs}),l(!0),m.data}catch(m){return i(m),null}finally{a(false);}},[e,o,n.retry,n.timeout]),b=react.useCallback(()=>{r(null),i(null),l(false),p(null);},[]);return {invoke:g,data:t,isLoading:s,isError:!!c,isSuccess:u,error:c,reset:b,meta:d}}function xe(o,n={}){let e=Y(o,n);return {...e,call:e.invoke}}function Ne(o,n,e={}){let t=Y(o,e),{enabled:r=true,refetchInterval:s}=e,a=react.useCallback(async()=>{await t.invoke(n);},[t.invoke,n]);return react.useEffect(()=>{r&&t.invoke(n);},[r]),react.useEffect(()=>{if(!s||!r)return;let c=setInterval(()=>{t.invoke(n);},s);return ()=>clearInterval(c)},[s,r]),{...t,refetch:a}}function Ae(o,n={}){let e=v(),[t,r]=react.useState([]),[s,a]=react.useState(false),[c,i]=react.useState(null),{enabled:u=true,envId:l}=n,d=react.useCallback(async()=>{if(!(!u||!o)){a(true),i(null);try{let p=await e.functions.list({projectId:o,envId:l});r(p);}catch(p){i(p);}finally{a(false);}}},[e,o,l,u]);return react.useEffect(()=>{d();},[d]),{functions:t,isLoading:s,isError:!!c,error:c,refetch:d}}function Je(){let o=v(),[n,e]=react.useState([]),[t,r]=react.useState(false),[s,a]=react.useState([]);return {invoke:react.useCallback(async(i,u=[])=>{r(true),a([]);let l=await Promise.all(i.map(async(g,b)=>{try{return {data:(await o.functions.invoke(g,{body:u[b]})).data,error:null}}catch(h){return {data:null,error:h}}})),d=l.map(g=>g.data),p=l.map(g=>g.error);return e(d),a(p),r(false),d},[o]),results:n,isLoading:t,errors:s}}exports.VaifProvider=le;exports.useAuth=ye;exports.useBatchCreate=we;exports.useBatchInvoke=Je;exports.useBroadcast=ke;exports.useCreate=he;exports.useDelete=Se;exports.useDownload=Ee;exports.useFile=$e;exports.useFiles=Ce;exports.useFunction=Y;exports.useFunctionList=Ae;exports.useFunctionQuery=Ne;exports.usePaginatedQuery=fe;exports.usePresence=Oe;exports.usePublicUrl=Ie;exports.useQuery=ge;exports.useQueryById=me;exports.useRealtimeConnection=ve;exports.useRpc=xe;exports.useSubscription=Pe;exports.useUpdate=be;exports.useUpload=Re;exports.useUpsert=Te;exports.useUser=pe;exports.useVaif=H;exports.useVaifClient=v;
1
+ 'use strict';var react$1=require('react'),client=require('@vaiftech/client'),jsxRuntime=require('react/jsx-runtime'),react=require('@vaiftech/auth/react');var X=react$1.createContext(null);function Y({config:e,children:n,storage:s,onAuthStateChange:u,autoRefreshSession:l=true,storageKey:r="vaif-auth"}){let[t]=react$1.useState(()=>client.createVaifClient(e)),[i,c]=react$1.useState(null),[d,p]=react$1.useState(null),[o,a]=react$1.useState(null),[f,h]=react$1.useState(null),[m,y]=react$1.useState(true),b=react$1.useRef(null),P=react$1.useCallback(async(x,w,R)=>{if(!s)return;let g={token:x,refreshToken:w,expiresAt:R};await s.setItem(r,JSON.stringify(g));},[s,r]),T=react$1.useCallback(async()=>{s&&await s.removeItem(r),c(null),p(null),a(null),h(null);},[s,r]);react$1.useEffect(()=>((async()=>{try{if(!s){y(!1);return}let w=await s.getItem(r);if(!w){y(!1);return}let R=JSON.parse(w);if(R.expiresAt&&new Date(R.expiresAt)<=new Date)if(R.refreshToken)try{let g=await t.auth.refreshToken(R.refreshToken);p(g.token),a(g.refreshToken??null),h(g.expiresAt),await P(g.token,g.refreshToken,g.expiresAt);let z=await t.auth.getUser();c(z);}catch{await T();}else await T();else {p(R.token),a(R.refreshToken??null),h(R.expiresAt??null);try{let g=await t.auth.getUser();c(g);}catch{if(R.refreshToken)try{let g=await t.auth.refreshToken(R.refreshToken);p(g.token),a(g.refreshToken??null),h(g.expiresAt),await P(g.token,g.refreshToken,g.expiresAt);let z=await t.auth.getUser();c(z);}catch{await T();}else await T();}}}catch{await T();}finally{y(false);}})(),()=>{b.current&&clearTimeout(b.current);}),[t,s,r,P,T]),react$1.useEffect(()=>{if(!l||!f||!o)return;let x=new Date(f).getTime(),w=Date.now(),R=x-w-6e4;return R>0&&(b.current=setTimeout(async()=>{try{let g=await t.auth.refreshToken(o);p(g.token),a(g.refreshToken??null),h(g.expiresAt),await P(g.token,g.refreshToken,g.expiresAt);}catch{await T();}},R)),()=>{b.current&&clearTimeout(b.current);}},[l,t,f,o,P,T]),react$1.useEffect(()=>{m||u?.(i);},[i,m,u]);let N=react$1.useCallback(async(x,w)=>{let R=await t.auth.login(x,w);if("mfaRequired"in R)throw new Error("MFA required - use verifyMFA to complete login");let g=R;return c(g.user),p(g.token),a(g.refreshToken??null),h(g.expiresAt??null),await P(g.token,g.refreshToken,g.expiresAt),g},[t,P]),Q=react$1.useCallback(async(x,w,R)=>{let g=await t.auth.signUp(x,w,{metadata:R});return c(g.user),p(g.token),a(g.refreshToken??null),h(g.expiresAt??null),await P(g.token,g.refreshToken,g.expiresAt),g},[t,P]),V=react$1.useCallback(async()=>{try{await t.auth.logout();}finally{await T();}},[t,T]),Re=react$1.useCallback(async()=>{if(!o)throw new Error("No refresh token available");let x=await t.auth.refreshToken(o);p(x.token),a(x.refreshToken??null),h(x.expiresAt),await P(x.token,x.refreshToken,x.expiresAt);},[t,o,P]),Pe=react$1.useCallback(x=>{c(w=>w?{...w,...x}:null);},[]),xe={client:t,user:i,token:d,isLoading:m,isAuthenticated:!!i,signIn:N,signUp:Q,signOut:V,refreshSession:Re,updateUser:Pe};return jsxRuntime.jsx(X.Provider,{value:xe,children:n})}function L(){let e=react$1.useContext(X);if(!e)throw new Error("useVaif must be used within a VaifProvider");return e}function U(){let{client:e}=L();return e}function _(){let{client:e,user:n,isLoading:s,isAuthenticated:u,token:l,signIn:r,signUp:t,signOut:i,refreshSession:c,updateUser:d}=L(),p=react$1.useCallback(async a=>{let f=await e.auth.updateProfile(a);return d(f),f},[e,d]),o=react$1.useCallback(async(a,f)=>{await e.auth.changePassword({currentPassword:a,newPassword:f});},[e]);return {user:n,isLoading:s,isAuthenticated:u,token:l,signIn:r,signUp:t,signOut:i,refreshSession:c,updateProfile:p,changePassword:o}}function $(){let{user:e}=L();return e}function K(e,n={}){let s=U(),[u,l]=react$1.useState([]),[r,t]=react$1.useState("idle"),[i,c]=react$1.useState(null),d=react$1.useRef(n);d.current=n;let{enabled:p=true,refetchInterval:o,where:a,orderBy:f,...h}=n,m=react$1.useCallback(async()=>{if(p){t("loading"),c(null);try{let y={...h};a&&(Array.isArray(a)?y.where={AND:a}:y.where=a),f&&(y.orderBy=Array.isArray(f)?f:[f]);let b=await s.from(e).list(y);l(b.data??[]),t("success");}catch(y){c(y),t("error");}}},[s,e,p,JSON.stringify(a),JSON.stringify(f),JSON.stringify(h)]);return react$1.useEffect(()=>{m();},[m]),react$1.useEffect(()=>{if(!o||!p)return;let y=setInterval(m,o);return ()=>clearInterval(y)},[o,m,p]),{data:u,status:r,isLoading:r==="loading",isError:r==="error",isSuccess:r==="success",error:i,refetch:m}}function ee(e,n,s={}){let u=U(),[l,r]=react$1.useState(null),[t,i]=react$1.useState("idle"),[c,d]=react$1.useState(null),p=s.enabled!==false&&!!n,o=react$1.useCallback(async()=>{if(!(!p||!n)){i("loading"),d(null);try{let a=await u.from(e).get(n);r(a.data??null),i("success");}catch(a){d(a),i("error");}}},[u,e,n,p]);return react$1.useEffect(()=>{o();},[o]),{data:l,isLoading:t==="loading",isError:t==="error",error:c,refetch:o}}function te(e,n={}){let s=U(),[u,l]=react$1.useState([]),[r,t]=react$1.useState("idle"),[i,c]=react$1.useState(null),[d,p]=react$1.useState(n.initialPage??1),[o,a]=react$1.useState(0),f=n.pageSize??20,{enabled:h=true,where:m,orderBy:y}=n,b=react$1.useCallback(async()=>{if(h){t("loading"),c(null);try{let T=s.from(e);if(m){let Q=Array.isArray(m)?m:[m];for(let V of Q)T=T.where(V);}if(y){let Q=Array.isArray(y)?y:[y];for(let V of Q)T=T.orderBy(V.field,V.direction);}let N=await T.paginate({page:d,pageSize:f});l(N.data??[]),a(N.pageInfo?.total??0),t("success");}catch(T){c(T),t("error");}}},[s,e,d,f,h,JSON.stringify(m),JSON.stringify(y)]);react$1.useEffect(()=>{b();},[b]);let P=Math.ceil(o/f);return {data:u,status:r,isLoading:r==="loading",isError:r==="error",isSuccess:r==="success",error:i,refetch:b,page:d,pageSize:f,totalPages:P,totalCount:o,hasNextPage:d<P,hasPreviousPage:d>1,nextPage:()=>p(T=>Math.min(T+1,P)),previousPage:()=>p(T=>Math.max(T-1,1)),goToPage:T=>p(Math.max(1,Math.min(T,P)))}}function ne(e){let n=U(),[s,u]=react$1.useState(null),[l,r]=react$1.useState("idle"),[t,i]=react$1.useState(null),c=react$1.useCallback(async p=>{r("loading"),i(null);try{let a=(await n.from(e).create(p)).data??null;return u(a),r("success"),a}catch(o){return i(o),r("error"),null}},[n,e]),d=react$1.useCallback(()=>{u(null),r("idle"),i(null);},[]);return {create:c,mutate:c,data:s,status:l,isLoading:l==="loading",isError:l==="error",isSuccess:l==="success",error:t,reset:d}}function re(e){let n=U(),[s,u]=react$1.useState(null),[l,r]=react$1.useState("idle"),[t,i]=react$1.useState(null),c=react$1.useCallback(async(p,o)=>{r("loading"),i(null);try{let f=(await n.from(e).update(p,o)).data??null;return u(f),r("success"),f}catch(a){return i(a),r("error"),null}},[n,e]),d=react$1.useCallback(()=>{u(null),r("idle"),i(null);},[]);return {update:c,data:s,status:l,isLoading:l==="loading",isError:l==="error",error:t,reset:d}}function se(e){let n=U(),[s,u]=react$1.useState("idle"),[l,r]=react$1.useState(null),t=react$1.useCallback(async c=>{u("loading"),r(null);try{return await n.from(e).delete(c),u("success"),!0}catch(d){return r(d),u("error"),false}},[n,e]),i=react$1.useCallback(()=>{u("idle"),r(null);},[]);return {remove:t,status:s,isLoading:s==="loading",isError:s==="error",error:l,reset:i}}function oe(e){let n=U(),[s,u]=react$1.useState(null),[l,r]=react$1.useState("idle"),[t,i]=react$1.useState(null),c=react$1.useCallback(async(p,o)=>{r("loading"),i(null);try{let f=(await n.from(e).upsert(p,{conflictFields:o})).data??null;return u(f),r("success"),f}catch(a){return i(a),r("error"),null}},[n,e]),d=react$1.useCallback(()=>{u(null),r("idle"),i(null);},[]);return {upsert:c,data:s,status:l,isLoading:l==="loading",isError:l==="error",error:t,reset:d}}function ie(e){let n=U(),[s,u]=react$1.useState([]),[l,r]=react$1.useState("idle"),[t,i]=react$1.useState(null);return {createMany:react$1.useCallback(async d=>{r("loading"),i(null);try{let o=(await n.from(e).createMany(d)).records??[];return u(o),r("success"),o}catch(p){return i(p),r("error"),[]}},[n,e]),data:s,isLoading:l==="loading",isError:l==="error",error:t}}function ae(e,n={}){let s=U(),[u,l]=react$1.useState("connecting"),r=react$1.useRef(null),t=react$1.useRef(null),{enabled:i=true,event:c,filter:d,onInsert:p,onUpdate:o,onDelete:a,onChange:f}=n;react$1.useEffect(()=>{if(!i)return;let m=s.realtime();r.current=m,m.on("connect",()=>l("connected")),m.on("disconnect",()=>l("disconnected")),m.on("reconnect",()=>l("reconnecting")),m.connect().catch(()=>{l("disconnected");});let y=b=>{switch(f?.(b),b.operation){case "INSERT":b.new&&p?.(b.new);break;case "UPDATE":b.new&&o?.(b.new,b.old??null);break;case "DELETE":b.old&&a?.(b.old);break}};return t.current=m.subscribe({table:e,event:c??"*",filter:d},y),()=>{t.current?.(),m.disconnect();}},[s,e,i,JSON.stringify(c),JSON.stringify(d)]);let h=react$1.useCallback(()=>{t.current?.(),r.current?.disconnect();},[]);return {isConnected:u==="connected",connectionState:u,unsubscribe:h}}function ue(e,n={}){let s=U(),[u,l]=react$1.useState([]),[r,t]=react$1.useState(false),i=react$1.useRef(null),c=react$1.useRef(null);react$1.useEffect(()=>{let a=s.realtime();c.current=a,a.on("connect",()=>t(true)),a.on("disconnect",()=>t(false));let f=a.channel(e,{type:"presence"});return i.current=f,f.presence.onSync(h=>{let m=[];for(let y of Object.values(h))m.push(...y);l(m);}),f.subscribe().then(()=>{n.initialState&&f.presence.track({state:n.initialState});}),()=>{f.presence.untrack(),f.unsubscribe(),a.disconnect();}},[s,e]);let d=react$1.useCallback(a=>{i.current?.presence.track({state:a});},[]),p=react$1.useCallback(a=>{i.current?.presence.update(a);},[]),o=react$1.useCallback(()=>{i.current?.presence.untrack();},[]);return {presences:u,track:d,update:p,untrack:o,isConnected:r}}function le(e){let n=U(),[s,u]=react$1.useState(null),[l,r]=react$1.useState(false),t=react$1.useRef(null),i=react$1.useRef(null),c=react$1.useRef(new Map);react$1.useEffect(()=>{let o=n.realtime();i.current=o,o.on("connect",()=>r(true)),o.on("disconnect",()=>r(false));let a=o.channel(e);return t.current=a,a.subscribe(),()=>{a.unsubscribe(),o.disconnect();}},[n,e]);let d=react$1.useCallback((o,a)=>{t.current?.broadcast({event:o,payload:a});},[]),p=react$1.useCallback((o,a)=>(c.current.has(o)||(c.current.set(o,new Set),t.current?.on(o,f=>{u({event:o,payload:f}),c.current.get(o)?.forEach(h=>h(f));})),c.current.get(o).add(a),()=>{c.current.get(o)?.delete(a);}),[]);return {broadcast:d,lastMessage:s,subscribe:p,isConnected:l}}function ce(){let e=U(),[n,s]=react$1.useState("disconnected"),u=react$1.useRef(null);react$1.useEffect(()=>{let t=e.realtime();return u.current=t,s(t.connectionState),t.on("connect",()=>s("connected")),t.on("disconnect",()=>s("disconnected")),t.on("reconnect",()=>s("reconnecting")),()=>{t.disconnect();}},[e]);let l=react$1.useCallback(()=>{u.current?.connect();},[]),r=react$1.useCallback(()=>{u.current?.disconnect();},[]);return {connectionState:n,isConnected:n==="connected",reconnect:l,disconnect:r}}function pe(e){let n=U(),[s,u]=react$1.useState(0),[l,r]=react$1.useState(false),[t,i]=react$1.useState(null),[c,d]=react$1.useState(null),p=react$1.useCallback(async(f,h,m={})=>{r(true),u(0),i(null),d(null);try{let y=await n.storage.upload(h,f,{bucket:m.bucket||e,contentType:m.contentType,metadata:m.metadata,isPublic:m.isPublic});return d(y),u(100),y}catch(y){return i(y),null}finally{r(false);}},[n,e]),o=react$1.useCallback(async(f,h,m={})=>{r(true),u(0),i(null),d(null);try{let b=await(await fetch(f)).blob(),P=m.contentType||b.type||Ae(f),T=await n.storage.upload(h,b,{bucket:m.bucket||e,contentType:P,metadata:m.metadata,isPublic:m.isPublic});return d(T),u(100),T}catch(y){return i(y),null}finally{r(false);}},[n,e]),a=react$1.useCallback(()=>{u(0),i(null),d(null);},[]);return {upload:p,uploadUri:o,progress:s,isUploading:l,isError:!!t,error:t,result:c,reset:a}}function fe(e){let n=U(),[s,u]=react$1.useState(false),[l,r]=react$1.useState(null),[t,i]=react$1.useState(0);return {download:react$1.useCallback(async d=>{u(true),i(0),r(null);try{let p=await n.storage.download(d,{bucket:e});return i(100),p}catch(p){return r(p),null}finally{u(false);}},[n,e]),isDownloading:s,isError:!!l,error:l,progress:t}}function ge(e,n){let s=U(),[u,l]=react$1.useState(null),[r,t]=react$1.useState(false),[i,c]=react$1.useState(null),d=react$1.useCallback(async()=>{if(e){t(true),c(null);try{let o=await s.storage.getMetadata(e,{bucket:n?.bucket});l(o);}catch(o){c(o);}finally{t(false);}}},[s,e,n?.bucket]),p=react$1.useCallback(async()=>{if(!e)return false;try{return await s.storage.delete(e,{bucket:n?.bucket}),l(null),!0}catch(o){return c(o),false}},[s,e,n?.bucket]);return react$1.useEffect(()=>{e&&d();},[e,d]),{file:u,isLoading:r,isError:!!i,error:i,refetch:d,remove:p}}function me(e={}){let n=U(),[s,u]=react$1.useState([]),[l,r]=react$1.useState(false),[t,i]=react$1.useState(null),c=react$1.useCallback(async()=>{r(true),i(null);try{let d=await n.storage.list({bucket:e.bucket,prefix:e.prefix,limit:e.limit});u(d.files??[]);}catch(d){i(d);}finally{r(false);}},[n,e.bucket,e.prefix,e.limit]);return react$1.useEffect(()=>{c();},[c]),{files:s,isLoading:l,isError:!!t,error:t,refetch:c}}function ye(e,n){let s=U();if(!e)return null;try{return s.storage.getPublicUrl(e,{bucket:n?.bucket})}catch{return null}}function Ae(e){let n=e.split(".").pop()?.toLowerCase();return {jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",mp4:"video/mp4",mov:"video/quicktime",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",json:"application/json",txt:"text/plain"}[n||""]||"application/octet-stream"}function j(e,n={}){let s=U(),[u,l]=react$1.useState(null),[r,t]=react$1.useState(false),[i,c]=react$1.useState(null),[d,p]=react$1.useState(false),[o,a]=react$1.useState(null),f=react$1.useCallback(async m=>{t(true),c(null),p(false);try{let y=await s.functions.invoke(e,{body:m},{retry:n.retry,timeout:n.timeout});return l(y.data),a({status:y.status,durationMs:y.durationMs,requestId:y.requestId,logs:y.logs}),p(!0),y.data}catch(y){return c(y),null}finally{t(false);}},[s,e,n.retry,n.timeout]),h=react$1.useCallback(()=>{l(null),c(null),p(false),a(null);},[]);return {invoke:f,data:u,isLoading:r,isError:!!i,isSuccess:d,error:i,reset:h,meta:o}}function he(e,n={}){let s=j(e,n);return {...s,call:s.invoke}}function Te(e,n,s={}){let u=j(e,s),{enabled:l=true,refetchInterval:r}=s,t=react$1.useCallback(async()=>{await u.invoke(n);},[u.invoke,n]);return react$1.useEffect(()=>{l&&u.invoke(n);},[l]),react$1.useEffect(()=>{if(!r||!l)return;let i=setInterval(()=>{u.invoke(n);},r);return ()=>clearInterval(i)},[r,l]),{...u,refetch:t}}function Ue(e,n={}){let s=U(),[u,l]=react$1.useState([]),[r,t]=react$1.useState(false),[i,c]=react$1.useState(null),{enabled:d=true,envId:p}=n,o=react$1.useCallback(async()=>{if(!(!d||!e)){t(true),c(null);try{let a=await s.functions.list({projectId:e,envId:p});l(a);}catch(a){c(a);}finally{t(false);}}},[s,e,p,d]);return react$1.useEffect(()=>{o();},[o]),{functions:u,isLoading:r,isError:!!i,error:i,refetch:o}}function be(){let e=U(),[n,s]=react$1.useState([]),[u,l]=react$1.useState(false),[r,t]=react$1.useState([]);return {invoke:react$1.useCallback(async(c,d=[])=>{l(true),t([]);let p=await Promise.all(c.map(async(f,h)=>{try{return {data:(await e.functions.invoke(f,{body:d[h]})).data,error:null}}catch(m){return {data:null,error:m}}})),o=p.map(f=>f.data),a=p.map(f=>f.error);return s(o),t(a),l(false),o},[e]),results:n,isLoading:u,errors:r}}Object.defineProperty(exports,"AuthProvider",{enumerable:true,get:function(){return react.AuthProvider}});Object.defineProperty(exports,"VaifAuthClient",{enumerable:true,get:function(){return react.VaifAuthClient}});Object.defineProperty(exports,"createAuthClient",{enumerable:true,get:function(){return react.createAuthClient}});Object.defineProperty(exports,"useAuthClient",{enumerable:true,get:function(){return react.useAuthClient}});Object.defineProperty(exports,"useIdentities",{enumerable:true,get:function(){return react.useIdentities}});Object.defineProperty(exports,"useIsAuthenticated",{enumerable:true,get:function(){return react.useIsAuthenticated}});Object.defineProperty(exports,"usePassword",{enumerable:true,get:function(){return react.usePassword}});Object.defineProperty(exports,"useSession",{enumerable:true,get:function(){return react.useSession}});Object.defineProperty(exports,"useSessions",{enumerable:true,get:function(){return react.useSessions}});Object.defineProperty(exports,"useStandaloneAuth",{enumerable:true,get:function(){return react.useAuth}});Object.defineProperty(exports,"useStandaloneMFA",{enumerable:true,get:function(){return react.useMFA}});exports.VaifProvider=Y;exports.useAuth=_;exports.useBatchCreate=ie;exports.useBatchInvoke=be;exports.useBroadcast=le;exports.useCreate=ne;exports.useDelete=se;exports.useDownload=fe;exports.useFile=ge;exports.useFiles=me;exports.useFunction=j;exports.useFunctionList=Ue;exports.useFunctionQuery=Te;exports.usePaginatedQuery=te;exports.usePresence=ue;exports.usePublicUrl=ye;exports.useQuery=K;exports.useQueryById=ee;exports.useRealtimeConnection=ce;exports.useRpc=he;exports.useSubscription=ae;exports.useUpdate=re;exports.useUpload=pe;exports.useUpsert=oe;exports.useUser=$;exports.useVaif=L;exports.useVaifClient=U;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import {createContext,useState,useRef,useCallback,useEffect,useContext}from'react';import {jsx}from'react/jsx-runtime';var V=class ie extends Error{constructor(n,e){super(n),this.name="VaifError",this.code=e.code,this.statusCode=e.statusCode,this.requestId=e.requestId,this.details=e.details;let t=Error;t.captureStackTrace&&t.captureStackTrace(this,ie);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,requestId:this.requestId,details:this.details}}},te=class extends V{constructor(o,n){super(o,{code:n?.code??"AUTH_ERROR",statusCode:n?.statusCode??401,requestId:n?.requestId}),this.name="VaifAuthError";}},De=class extends V{constructor(o,n){super(o,{code:"VALIDATION_ERROR",statusCode:400,requestId:n?.requestId,details:n?.details??n?.fieldErrors}),this.name="VaifValidationError",this.fieldErrors=n?.fieldErrors;}},W=class extends V{constructor(o,n){super(o,{code:"NETWORK_ERROR"}),this.name="VaifNetworkError",this.cause=n;}},Me=class extends V{constructor(o,n){super(o,{code:"RATE_LIMITED",statusCode:429}),this.name="VaifRateLimitError",this.retryAfter=n;}},Fe=class extends V{constructor(o,n){super(o,{code:"NOT_FOUND",statusCode:404,requestId:n}),this.name="VaifNotFoundError";}};async function je(o){let n;try{n=await o.json();}catch{}let e=n?.message??n?.error??o.statusText??"Request failed",t=n?.requestId;switch(o.status){case 400:return new De(e,{details:n?.details,requestId:t});case 401:return new te(e,{code:"UNAUTHORIZED",statusCode:401,requestId:t});case 403:return new te(e,{code:"FORBIDDEN",statusCode:403,requestId:t});case 404:return new Fe(e,t);case 429:{let r=o.headers.get("Retry-After"),s=r?parseInt(r,10):void 0;return new Me(e,s)}default:return new V(e,{code:n?.error??"HTTP_ERROR",statusCode:o.status,requestId:t,details:n?.details})}}async function Ve(o,n){let{timeout:e=3e4,fetchFn:t,...r}=n,s=new AbortController,a=setTimeout(()=>s.abort(),e);try{let c=await t(o,{...r,signal:s.signal});if(clearTimeout(a),!c.ok)throw await je(c);if(c.status===204)return;let i=await c.text();return i?JSON.parse(i):void 0}catch(c){throw clearTimeout(a),c instanceof V?c:c instanceof Error&&c.name==="AbortError"?new W("Request timed out"):c instanceof Error?new W(c.message,c):new W("Network request failed")}}function $(o){let{baseUrl:n,apiKey:e,apiKeyHeader:t,accessToken:r,fetch:s,timeout:a}=o;return async function(c,i={}){let u=`${n}${c}`,l={"Content-Type":"application/json",...i.headers??{}};if(e&&(l[t]=e),r){let d=typeof r=="function"?await r():r;l.Authorization=`Bearer ${d}`;}return Ve(u,{...i,headers:l,timeout:a,fetchFn:s})}}function C(o){let n=new URLSearchParams;for(let[t,r]of Object.entries(o))r!==void 0&&n.set(t,String(r));let e=n.toString();return e?`?${e}`:""}function Be(o){return JSON.stringify(o)}function ne(o,n,e={}){let t={...e},r=()=>{let i={};if(t.limit!==void 0&&(i.limit=t.limit),t.offset!==void 0&&(i.offset=t.offset),t.where&&(i.where=Be(t.where)),t.orderBy){let u=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];i.orderBy=JSON.stringify(u);}return t.select&&t.select.length>0&&(i.select=t.select.join(",")),t.include&&t.include.length>0&&(i.include=JSON.stringify(t.include)),t.distinct&&t.distinct.length>0&&(i.distinct=t.distinct.join(",")),i},s=()=>C(r()),a=i=>ne(o,n,{...t,...i}),c={async list(i){i&&(t={...t,...i});let u=s();return n(`/generated/${o}${u}`)},async get(i){let u={};t.select&&t.select.length>0&&(u.select=t.select.join(",")),t.include&&t.include.length>0&&(u.include=JSON.stringify(t.include));let l=C(u);return n(`/generated/${o}/${encodeURIComponent(i)}${l}`)},async first(){let i=await c.limit(1).list();return i.data.length>0?i.data[0]:null},async firstOrFail(){let i=await c.first();if(!i)throw new Error(`No record found in table '${o}' matching the query`);return i},async create(i){return n(`/generated/${o}`,{method:"POST",body:JSON.stringify(i)})},async update(i,u){return n(`/generated/${o}/${encodeURIComponent(i)}`,{method:"PATCH",body:JSON.stringify(u)})},async delete(i){return n(`/generated/${o}/${encodeURIComponent(i)}`,{method:"DELETE"})},async createMany(i,u){return n(`/generated/${o}/batch`,{method:"POST",body:JSON.stringify({records:i,skipOnConflict:u?.skipOnConflict,returnRecords:u?.returnRecords})})},async updateMany(i,u){return r(),n(`/generated/${o}/batch`,{method:"PATCH",body:JSON.stringify({data:i,where:t.where,returnRecords:u?.returnRecords})})},async deleteMany(){return n(`/generated/${o}/batch`,{method:"DELETE",body:JSON.stringify({where:t.where})})},async upsert(i,u){return n(`/generated/${o}/upsert`,{method:"POST",body:JSON.stringify({data:i,conflictFields:u.conflictFields,updateFields:u.updateFields})})},async count(){let i=r(),u=C(i);return (await n(`/generated/${o}/count${u}`)).count},async sum(i){let u=r(),l=C({...u,field:i});return (await n(`/generated/${o}/sum${l}`)).sum},async avg(i){let u=r(),l=C({...u,field:i});return (await n(`/generated/${o}/avg${l}`)).avg},async min(i){let u=r(),l=C({...u,field:i});return (await n(`/generated/${o}/min${l}`)).min},async max(i){let u=r(),l=C({...u,field:i});return (await n(`/generated/${o}/max${l}`)).max},async aggregate(i,u){return n(`/generated/${o}/aggregate`,{method:"POST",body:JSON.stringify({aggregates:i,where:u?.where||t.where,groupBy:u?.groupBy,having:u?.having})})},async paginate(i){let u=i.page||1,l=i.pageSize||20,d=(u-1)*l,p=r();p.limit=l,p.offset=d,p.includeCount=true;let g=C(p),b=await n(`/generated/${o}${g}`),h=b.total||b.data.length,m=Math.ceil(h/l);return {data:b.data,pageInfo:{total:h,page:u,pageSize:l,pageCount:m,hasNextPage:u<m,hasPrevPage:u>1}}},async cursorPaginate(i){let u=r();u.limit=i.limit||20,i.cursor&&(u.cursor=i.cursor);let l=C(u),d=await n(`/generated/${o}/cursor${l}`);return {data:d.data,nextCursor:d.nextCursor,prevCursor:d.prevCursor,hasMore:d.hasMore}},where(i){if(t.where){let u=t.where;return a({where:{AND:[...Array.isArray(u)?u:[u],i]}})}return a({where:i})},orderBy(i,u="asc"){let l={field:i,direction:u};if(t.orderBy){let d=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];return a({orderBy:[...d,l]})}return a({orderBy:l})},select(...i){return a({select:i})},limit(i){return a({limit:i})},offset(i){return a({offset:i})},include(i){let u=t.include||[];return a({include:[...u,i]})},distinct(...i){return a({distinct:i})}};return c}function qe(o){let n=$(o);return {from(e){return ne(e,n)},async raw(e,t){return n("/generated/raw",{method:"POST",body:JSON.stringify({query:e,params:t})})},async transaction(e,t){return n("/generated/transaction",{method:"POST",body:JSON.stringify({operations:e,isolationLevel:t?.isolationLevel,timeout:t?.timeout})})},async withTransaction(e,t){let r=(await n("/generated/transaction/start",{method:"POST",body:JSON.stringify({isolationLevel:t?.isolationLevel,timeout:t?.timeout})})).transactionId,s=(c,i)=>{let u=new Headers(i?.headers);return u.set("X-Transaction-Id",r),n(c,{...i,headers:u})},a={from(c){return ne(c,s)},async raw(c,i){return s("/generated/raw",{method:"POST",body:JSON.stringify({query:c,params:i})})},async transaction(){throw new Error("Nested transactions are not supported")},async withTransaction(){throw new Error("Nested transactions are not supported")}};try{let c=await e(a);return await n("/generated/transaction/commit",{method:"POST",body:JSON.stringify({transactionId:r})}),c}catch(c){throw await n("/generated/transaction/rollback",{method:"POST",body:JSON.stringify({transactionId:r})}).catch(()=>{}),c}}}}function Qe(o){let n=$(o);return {async signUp(e,t,r){return n("/auth/signup",{method:"POST",body:JSON.stringify({email:e,password:t,name:r?.name,phone:r?.phone,metadata:r?.metadata,redirectUrl:r?.redirectUrl})})},async login(e,t,r){return n("/auth/login",{method:"POST",body:JSON.stringify({email:e,password:t,mfaCode:r?.mfaCode,rememberMe:r?.rememberMe})})},async logout(){await n("/auth/logout",{method:"POST"});},async logoutAll(){await n("/auth/logout-all",{method:"POST"});},async getUser(){return (await n("/auth/me")).user},async updateProfile(e){return (await n("/users/me",{method:"PATCH",body:JSON.stringify(e)})).user},async changePassword(e){return n("/users/me/change-password",{method:"POST",body:JSON.stringify(e)})},async requestPasswordReset(e){return n("/auth/forgot-password",{method:"POST",body:JSON.stringify(e)})},async confirmPasswordReset(e){return n("/auth/reset-password",{method:"POST",body:JSON.stringify(e)})},async requestEmailVerification(e){return n("/auth/verify-email/send",{method:"POST",body:JSON.stringify(e||{})})},async confirmEmailVerification(e){return n("/auth/verify-email/confirm",{method:"POST",body:JSON.stringify(e)})},async getOAuthSignInUrl(e){return n("/auth/oauth/authorize",{method:"POST",body:JSON.stringify(e)})},async handleOAuthCallback(e){return n("/auth/oauth/callback",{method:"POST",body:JSON.stringify(e)})},async linkOAuthProvider(e){return n("/auth/oauth/link",{method:"POST",body:JSON.stringify(e)})},async unlinkOAuthProvider(e){return n(`/auth/oauth/unlink/${e}`,{method:"POST"})},async listLinkedProviders(){return n("/auth/oauth/providers")},async requestMagicLink(e){return n("/auth/magic-link/send",{method:"POST",body:JSON.stringify(e)})},async verifyMagicLink(e){return n("/auth/magic-link/verify",{method:"POST",body:JSON.stringify(e)})},async requestPhoneVerification(e){return n("/auth/phone/send",{method:"POST",body:JSON.stringify(e)})},async confirmPhoneVerification(e){return n("/auth/phone/verify",{method:"POST",body:JSON.stringify(e)})},async setupMFA(e){return n("/auth/mfa/setup",{method:"POST",body:JSON.stringify({method:e})})},async enableMFA(e){return n("/auth/mfa/enable",{method:"POST",body:JSON.stringify({code:e})})},async disableMFA(e){return n("/auth/mfa/disable",{method:"POST",body:JSON.stringify({code:e})})},async verifyMFA(e,t){return n("/auth/mfa/verify",{method:"POST",body:JSON.stringify({mfaToken:e,code:t})})},async regenerateBackupCodes(){return n("/auth/mfa/backup-codes",{method:"POST"})},async refreshToken(e){return n("/auth/refresh",{method:"POST",body:JSON.stringify({refreshToken:e})})},async listSessions(){return n("/auth/sessions")},async revokeSession(e){return n(`/auth/sessions/${e}`,{method:"DELETE"})},async revokeOtherSessions(){return n("/auth/sessions/revoke-others",{method:"POST"})}}}function ae(o){return new Promise(n=>setTimeout(n,o))}function He(o){let n=$(o);async function e(t,r,s){let a=s?.retry||{},c=a.maxRetries??0,i=a.initialDelay??1e3,u=a.maxDelay??3e4,l=a.backoffMultiplier??2,d=a.retryOnStatus??[429,500,502,503,504],p=a.retryOnNetworkError??true,g=null,b=i;for(let h=0;h<=c;h++)try{let m={};s?.version!==void 0&&(m.version=s.version),s?.includeLogs&&(m.includeLogs=!0);let T=C(m),w=await n(`/functions/${t}/invoke${T}`,{method:"POST",body:JSON.stringify(r??{}),headers:s?.headers});if(d.includes(w.status)&&h<c){g=new Error(`Function returned status ${w.status}`),await ae(b),b=Math.min(b*l,u);continue}return w}catch(m){g=m;let T=m instanceof TypeError||m.message?.includes("network")||m.message?.includes("fetch");if(p&&T&&h<c){await ae(b),b=Math.min(b*l,u);continue}throw m}throw g||new Error("Function invocation failed after retries")}return {invoke:e,async invokeByName(t,r,s){let a={};s?.version!==void 0&&(a.version=s.version),s?.includeLogs&&(a.includeLogs=true);let c=C(a);return n(`/functions/name/${encodeURIComponent(t)}/invoke${c}`,{method:"POST",body:JSON.stringify(r??{}),headers:s?.headers})},async batchInvoke(t,r){let s=(await Promise.allSettled(t.map(a=>this.invoke(a.functionId,a.input,r)))).map((a,c)=>a.status==="fulfilled"?{functionId:t[c].functionId,success:true,result:a.value}:{functionId:t[c].functionId,success:false,error:a.reason?.message||"Unknown error"});return {results:s,successCount:s.filter(a=>a.success).length,errorCount:s.filter(a=>!a.success).length}},rpc(t,r){let s=this,a=async(c,i)=>{let u={...r,...i};return (await e(t,{body:c},u)).data};return Object.defineProperty(a,"id",{value:t,writable:false}),a.getInfo=()=>s.get(t),a.getInvocations=c=>s.getInvocations({...c,functionId:t}),a},async list(t){let r={envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset},s=C(r);return n(`/functions/project/${t.projectId}${s}`)},async get(t){return n(`/functions/${t}`)},async getByName(t,r){return n(`/functions/project/${r}/name/${encodeURIComponent(t)}`)},async create(t){return n("/functions",{method:"POST",body:JSON.stringify(t)})},async update(t,r){return n(`/functions/${t}`,{method:"PATCH",body:JSON.stringify(r)})},async delete(t){return n(`/functions/${t}`,{method:"DELETE"})},async enable(t){return this.update(t,{enabled:true})},async disable(t){return this.update(t,{enabled:false})},async deploy(t,r,s){return n(`/functions/${t}/deploy`,{method:"POST",body:JSON.stringify({sourceCode:r,createVersion:s?.createVersion,versionDescription:s?.versionDescription,envVars:s?.envVars,secrets:s?.secrets})})},async getSource(t,r){let s=r!==void 0?`?version=${r}`:"";return n(`/functions/${t}/source${s}`)},async listVersions(t){return (await n(`/functions/${t}/versions`)).versions},async rollback(t,r){return n(`/functions/${t}/rollback`,{method:"POST",body:JSON.stringify({version:r})})},async getEnvVars(t){return (await n(`/functions/${t}/env`)).envVars},async setEnvVars(t,r){return n(`/functions/${t}/env`,{method:"PUT",body:JSON.stringify({envVars:r})})},async deleteEnvVar(t,r){return n(`/functions/${t}/env/${encodeURIComponent(r)}`,{method:"DELETE"})},async bindSecrets(t,r){return n(`/functions/${t}/secrets`,{method:"PUT",body:JSON.stringify({secrets:r})})},async setSchedule(t,r){return n(`/functions/${t}/schedule`,{method:"PUT",body:JSON.stringify(r)})},async removeSchedule(t){return n(`/functions/${t}/schedule`,{method:"DELETE"})},async getInvocations(t){let r={functionId:t.functionId,projectId:t.projectId,status:t.status,since:t.since,until:t.until,limit:t.limit,offset:t.offset},s=C(r);return (await n(`/functions/invocations${s}`)).invocations},async getInvocation(t){return n(`/functions/invocations/${t}`)},async getLogs(t,r){let s={since:r?.since,until:r?.until,level:r?.level,limit:r?.limit},a=C(s);return (await n(`/functions/${t}/logs${a}`)).logs}}}function ze(o){let n=$(o),e="default";return {async getUploadUrl(t,r){return n("/storage/upload-url",{method:"POST",body:JSON.stringify({key:t,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(t,r){return n("/storage/download-url",{method:"POST",body:JSON.stringify({key:t,bucket:r?.bucket||e,expiresIn:r?.expiresIn,download:r?.download,transform:r?.transform})})},async createSignedUrl(t,r=3600,s){return (await this.getDownloadUrl(t,{...s,expiresIn:r})).url},async createSignedUrls(t,r=3600,s){return await Promise.all(t.map(async a=>({key:a,url:await this.createSignedUrl(a,r,s)})))},async upload(t,r,s){let a=r instanceof Blob?r:new Blob([r]),c=a.size,i=s?.contentType||(r instanceof File?r.type:void 0)||"application/octet-stream",u=await this.getUploadUrl(t,{...s,contentType:i,sizeBytes:c}),l=await o.fetch(u.url,{method:"PUT",body:a,headers:{"Content-Type":i,...s?.cacheControl&&{"Cache-Control":s.cacheControl},...s?.contentDisposition&&{"Content-Disposition":s.contentDisposition}}});if(!l.ok)throw new Error(`Upload failed: ${l.statusText}`);let d=s?.bucket||e,p=u.url.split("?")[0];return {ok:true,key:t,bucket:d,url:p,publicUrl:s?.isPublic?this.getPublicUrl(t,{bucket:d}):void 0,size:c,contentType:i}},async uploadFromUrl(t,r,s){return n("/storage/upload-from-url",{method:"POST",body:JSON.stringify({key:t,url:r,bucket:s?.bucket||e,contentType:s?.contentType,metadata:s?.metadata,isPublic:s?.isPublic,timeout:s?.timeout})})},async download(t,r){let s=await this.getDownloadUrl(t,r),a=await o.fetch(s.url);if(!a.ok)throw new Error(`Download failed: ${a.statusText}`);return a.blob()},async list(t){let r={bucket:t?.bucket||e,prefix:t?.prefix,delimiter:t?.delimiter,limit:t?.limit,cursor:t?.cursor,includeUrls:t?.includeUrls},s=C(r);return n(`/storage/files${s}`)},async getMetadata(t,r){let s=r?.bucket||e;return n(`/storage/files/${encodeURIComponent(s)}/${encodeURIComponent(t)}/metadata`)},async updateMetadata(t,r,s){let a=s?.bucket||e;return n(`/storage/files/${encodeURIComponent(a)}/${encodeURIComponent(t)}/metadata`,{method:"PATCH",body:JSON.stringify(r)})},async exists(t,r){try{return await this.getMetadata(t,r),!0}catch{return false}},async copy(t,r,s){return n("/storage/files/copy",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:s?.sourceBucket||e,destinationKey:r,destinationBucket:s?.destinationBucket||s?.sourceBucket||e,metadata:s?.metadata})})},async move(t,r,s){return n("/storage/files/move",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:s?.sourceBucket||e,destinationKey:r,destinationBucket:s?.destinationBucket||s?.sourceBucket||e,metadata:s?.metadata})})},async delete(t,r){let s=r?.bucket||e;await n(`/storage/files/${encodeURIComponent(s)}/${encodeURIComponent(t)}`,{method:"DELETE"});},async deleteMany(t,r){return n("/storage/files/delete-batch",{method:"POST",body:JSON.stringify({keys:t,bucket:r?.bucket||e})})},getPublicUrl(t,r){let s=r?.bucket||e;return `${o.baseUrl.replace("/api","")}/storage/${encodeURIComponent(s)}/${encodeURIComponent(t)}`},async createBucket(t,r){return n("/storage/buckets",{method:"POST",body:JSON.stringify({name:t,isPublic:r?.isPublic,allowedMimeTypes:r?.allowedMimeTypes,maxFileSize:r?.maxFileSize,fileSizeLimit:r?.fileSizeLimit})})},async getBucket(t){return n(`/storage/buckets/${encodeURIComponent(t)}`)},async updateBucket(t,r){return n(`/storage/buckets/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(r)})},async listBuckets(){return (await n("/storage/buckets")).buckets},async deleteBucket(t){await n(`/storage/buckets/${encodeURIComponent(t)}`,{method:"DELETE"});},async emptyBucket(t){return n(`/storage/buckets/${encodeURIComponent(t)}/empty`,{method:"POST"})},async createMultipartUpload(t,r){return n("/storage/multipart/create",{method:"POST",body:JSON.stringify({key:t,bucket:r?.bucket||e,contentType:r?.contentType,metadata:r?.metadata,partSize:r?.partSize})})},async uploadPart(t,r,s){let a=s instanceof Blob?s:new Blob([s]),{url:c}=await n(`/storage/multipart/${t}/part-url`,{method:"POST",body:JSON.stringify({partNumber:r})}),i=await o.fetch(c,{method:"PUT",body:a});if(!i.ok)throw new Error(`Part upload failed: ${i.statusText}`);let u=i.headers.get("etag")||"";return {partNumber:r,etag:u}},async completeMultipartUpload(t,r){return n(`/storage/multipart/${t}/complete`,{method:"POST",body:JSON.stringify({parts:r})})},async abortMultipartUpload(t){await n(`/storage/multipart/${t}/abort`,{method:"POST"});}}}function Ke(o){let n=$(o);return {async list(){return n("/projects")},async get(e){return n(`/projects/${e}`)},async create(e){return n("/projects",{method:"POST",body:JSON.stringify(e)})},async getApiKeys(e){return n(`/projects/${e}/api-keys`)},async createApiKey(e,t){return n(`/projects/${e}/api-keys`,{method:"POST",body:JSON.stringify(t??{})})},async revokeApiKey(e,t){return n(`/projects/${e}/api-keys/${t}/revoke`,{method:"POST"})},async rotateApiKey(e,t){return n(`/projects/${e}/api-keys/${t}/rotate`,{method:"POST"})}}}function _e(o){let n=$(o);return {async list(){return n("/orgs")},async create(e){return n("/orgs",{method:"POST",body:JSON.stringify(e)})},async getProfile(e){return (await n(`/orgs/${e}/profile`)).profile||{}},async updateProfile(e,t){return (await n(`/orgs/${e}/profile`,{method:"PATCH",body:JSON.stringify(t)})).profile},async listBillingContacts(e){return (await n(`/orgs/${e}/billing-contacts`)).contacts},async addBillingContact(e,t){return n(`/orgs/${e}/billing-contacts`,{method:"POST",body:JSON.stringify(t)})},async removeBillingContact(e,t){return n(`/orgs/${e}/billing-contacts/${t}`,{method:"DELETE"})},async listMembers(e){return (await n(`/orgs/${e}/members`)).members},async inviteMember(e,t){return n(`/orgs/${e}/members/invite`,{method:"POST",body:JSON.stringify(t)})},async listInvites(e){return (await n(`/orgs/${e}/invites`)).invites},async cancelInvite(e,t){return n(`/orgs/${e}/invites/${t}`,{method:"DELETE"})},async removeMember(e,t){return n(`/orgs/${e}/members/${t}`,{method:"DELETE"})},async updateMemberRole(e,t,r){return n(`/orgs/${e}/members/${t}/role`,{method:"PATCH",body:JSON.stringify({role:r})})}}}function We(o){let n=$(o);return {async preview(e){return n("/schema-engine/preview",{method:"POST",body:JSON.stringify(e)})},async apply(e){return n("/schema-engine/apply",{method:"POST",body:JSON.stringify(e)})},async getMigrations(e,t){let r=t?`/schema-engine/migrations/project/${e}?limit=${t}`:`/schema-engine/migrations/project/${e}`;return n(r)},async saveSchema(e){return n("/schemas/",{method:"POST",body:JSON.stringify(e)})},async getSchemas(e){return n(`/schemas/project/${e}`)}}}function Ge(o){let n=$(o);return {async create(e){return n("/functions/secrets",{method:"POST",body:JSON.stringify(e)})},async list(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let s=r.toString(),a=`/functions/secrets/project/${e}${s?`?${s}`:""}`;return n(a)},async reveal(e){return n(`/functions/secrets/${e}/value`)},async update(e,t){return n(`/functions/secrets/${e}`,{method:"PUT",body:JSON.stringify({value:t})})},async delete(e){return n(`/functions/secrets/${e}`,{method:"DELETE"})}}}function Xe(o){let n=$(o);return {async list(e,t){let r=new URLSearchParams;t&&r.set("env",t);let s=r.toString(),a=`/deployments/project/${e}${s?`?${s}`:""}`;return (await n(a)).deployments},async get(e){let t=await n(`/deployments/${e}`);return {...t.deployment,steps:t.steps}},async getSteps(e){return (await n(`/deployments/${e}/steps`)).steps},async promote(e){let t={projectId:e.projectId,fromEnv:e.sourceEnv,toEnv:e.targetEnv},r=await n("/deployments/promote",{method:"POST",body:JSON.stringify(t)}),s=await n(`/deployments/${r.deploymentId}`);return {deployment:{...s.deployment,steps:s.steps}}},async rollback(e){return n(`/deployments/${e}/rollback`,{method:"POST"})},async listTokens(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let s=r.toString(),a=`/deployments/tokens/project/${encodeURIComponent(e)}${s?`?${s}`:""}`;return (await n(a)).tokens},async createToken(e){return n("/deployments/tokens",{method:"POST",body:JSON.stringify(e)})},async revokeToken(e){return n(`/deployments/tokens/${encodeURIComponent(e)}/revoke`,{method:"POST"})}}}function Ze(o){let n=$(o);return {async getStats(e){return n(`/realtime/stats/project/${e}`)},async getConnections(e){return (await n(`/realtime/connections/project/${e}`)).connections},async getSubscriptions(e){return (await n(`/realtime/subscriptions/project/${e}`)).subscriptions},async getEvents(e,t){let r=new URLSearchParams;t&&r.set("limit",String(t));let s=r.toString(),a=`/realtime/events/project/${e}${s?`?${s}`:""}`;return (await n(a)).events},async getStatus(e){return n(`/realtime/status/project/${e}`)},async install(e){return n("/realtime/install",{method:"POST",body:JSON.stringify(e)})},async enableAll(e){return n("/realtime/enable-all",{method:"POST",body:JSON.stringify(e)})}}}function Ye(o){let n=$(o);return {async listBuckets(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let s=r.toString(),a=`/buckets/project/${e}${s?`?${s}`:""}`;return (await n(a)).buckets},async getBucket(e){return (await n(`/buckets/${e}`)).bucket},async createBucket(e){return (await n("/buckets",{method:"POST",body:JSON.stringify(e)})).bucket},async updateBucket(e,t){return (await n(`/buckets/${e}`,{method:"PUT",body:JSON.stringify(t)})).bucket},async deleteBucket(e){return n(`/buckets/${e}`,{method:"DELETE"})},async listFiles(e,t){let r=new URLSearchParams;t?.prefix&&r.set("prefix",t.prefix),t?.maxKeys&&r.set("maxKeys",String(t.maxKeys)),t?.continuationToken&&r.set("continuationToken",t.continuationToken);let s=r.toString(),a=`/buckets/${e}/files${s?`?${s}`:""}`;return n(a)},async deleteFile(e,t){return n(`/buckets/${e}/files?key=${encodeURIComponent(t)}`,{method:"DELETE"})},async getSignedUrl(e,t,r){return n(`/buckets/${e}/signed-url`,{method:"POST",body:JSON.stringify({key:t,expiresIn:r})})},async getUploadUrl(e,t,r){return n(`/buckets/${e}/upload-url`,{method:"POST",body:JSON.stringify({key:t,...r})})},async uploadFile(e,t,r,s){let a=s?.prefix?`${s.prefix}${t}`:t,c=s?.contentType??(r instanceof Blob?r.type:"application/octet-stream"),i=new URLSearchParams;return i.set("key",a),c&&i.set("contentType",c),n(`/buckets/${e}/upload?${i.toString()}`,{method:"POST",body:r,headers:{"Content-Type":c||"application/octet-stream"}})}}}function et(o){let n=$(o);return {async list(e,t){let r={type:t?.type,enabled:t?.enabled},s=C(r);return (await n(`/integrations/subscriptions/project/${e}${s}`)).subscriptions},async get(e){return n(`/integrations/subscriptions/${e}`)},async create(e){return (await n("/integrations/subscriptions",{method:"POST",body:JSON.stringify(e)})).subscription},async update(e,t){return (await n(`/integrations/subscriptions/${e}`,{method:"PATCH",body:JSON.stringify(t)})).subscription},async delete(e){return n(`/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 n(`/integrations/subscriptions/${e}/test`,{method:"POST"})},async publish(e){return n("/integrations/events/publish",{method:"POST",body:JSON.stringify(e)})},async publishBatch(e){return (await n("/integrations/events/publish-batch",{method:"POST",body:JSON.stringify({events:e})})).results},async listEvents(e){let t={envId:e.envId,source:e.source,name:e.name,since:e.since,until:e.until,limit:e.limit,offset:e.offset},r=C(t);return (await n(`/integrations/events/project/${e.projectId}${r}`)).events},async getEvent(e){return n(`/integrations/events/${e}`)},async getDeliveries(e){let t={subscriptionId:e.subscriptionId,eventId:e.eventId,status:e.status,since:e.since,until:e.until,limit:e.limit,offset:e.offset},r=C(t);return (await n(`/integrations/deliveries${r}`)).deliveries},async getDelivery(e){return n(`/integrations/deliveries/${e}`)},async retryDelivery(e){return n(`/integrations/deliveries/${e}/retry`,{method:"POST"})},async retryAllFailed(e){return n(`/integrations/subscriptions/${e}/retry-failed`,{method:"POST"})},async getDlq(e,t){let r={limit:t?.limit,offset:t?.offset},s=C(r);return (await n(`/integrations/dlq/project/${e}${s}`)).deliveries},async purgeDlq(e,t){return n(`/integrations/dlq/project/${e}/purge`,{method:"POST",body:JSON.stringify({olderThan:t.olderThan})})},async replayDlq(e,t){return n(`/integrations/dlq/project/${e}/replay`,{method:"POST",body:JSON.stringify(t)})},verifySignature(e){let t=e.tolerance??300;try{let r=e.signature.split(","),s=r.find(m=>m.startsWith("t=")),a=r.find(m=>m.startsWith("v1="));if(!s||!a)return !1;let c=parseInt(s.slice(2),10),i=a.slice(3),u=Math.floor(Date.now()/1e3);if(Math.abs(u-c)>t)return !1;let l=`${c}.${e.payload}`,d=new TextEncoder,p=d.encode(e.secret),g=d.encode(l),b=Array.from(p).concat(Array.from(g)).reduce((m,T)=>m+T,0).toString(16);if(i.length!==b.length)return !1;let h=0;for(let m=0;m<i.length;m++)h|=i.charCodeAt(m)^b.charCodeAt(m);return h===0}catch{return false}},generateSecret(){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="whsec_";for(let r=0;r<32;r++)t+=e.charAt(Math.floor(Math.random()*e.length));return t}}}function tt(o){let n=$(o);return {async getSummary(e){return n(`/billing/org/${e}/summary`)},async getEntitlements(e){return n(`/entitlements/org/${e}`)},async checkEntitlement(e,t){return n(`/entitlements/org/${e}/check`,{method:"POST",body:JSON.stringify(t)})},async getPlans(){return (await n("/pricing/plans")).plans},async createCheckout(e){return n("/billing/checkout",{method:"POST",body:JSON.stringify(e)})},async openPortal(e){return n(`/billing/org/${e.orgId}/portal`,{method:"POST",body:JSON.stringify({returnUrl:e.returnUrl})})}}}function nt(o){let n=$(o);return {async getOverview(){return n("/admin/overview")},async listUsers(e){let t=new URLSearchParams;e?.search&&t.set("search",e.search),e?.limit&&t.set("limit",String(e.limit)),e?.offset&&t.set("offset",String(e.offset));let r=t.toString();return n(`/admin/users${r?`?${r}`:""}`)},async getUser(e){return n(`/admin/users/${e}`)},async updateUserStatus(e,t){return n(`/admin/users/${e}/status`,{method:"PATCH",body:JSON.stringify({status:t})})},async updateUserAdmin(e,t){return n(`/admin/users/${e}/admin`,{method:"PATCH",body:JSON.stringify({isAdmin:t})})},async listOrganizations(e){let t=new URLSearchParams;e?.search&&t.set("search",e.search),e?.plan&&t.set("plan",e.plan),e?.limit&&t.set("limit",String(e.limit)),e?.offset&&t.set("offset",String(e.offset));let r=t.toString();return n(`/admin/organizations${r?`?${r}`:""}`)},async getOrganization(e){return n(`/admin/organizations/${e}`)},async updateOrganization(e,t){return n(`/admin/organizations/${e}`,{method:"PATCH",body:JSON.stringify(t)})},async listProjects(e){let t=new URLSearchParams;e?.search&&t.set("search",e.search),e?.orgId&&t.set("orgId",e.orgId),e?.region&&t.set("region",e.region),e?.tenancy&&t.set("tenancy",e.tenancy),e?.limit&&t.set("limit",String(e.limit)),e?.offset&&t.set("offset",String(e.offset));let r=t.toString();return n(`/admin/projects${r?`?${r}`:""}`)},async getProject(e){return n(`/admin/projects/${e}`)},async updateProject(e,t){return n(`/admin/projects/${e}`,{method:"PATCH",body:JSON.stringify(t)})},async getProjectResources(e){return n(`/admin/resources/project/${e}`)},async setDedicatedDb(e){return n(`/admin/resources/project/${e.projectId}/db`,{method:"POST",body:JSON.stringify({connectionString:e.connectionString})})},async listIncidents(e="open"){return (await n(`/admin/incidents?status=${e}`)).incidents},async createIncident(e){return n("/admin/incidents",{method:"POST",body:JSON.stringify(e)})},async acknowledgeIncident(e){return n(`/admin/incidents/${e}/ack`,{method:"POST"})},async resolveIncident(e){return n(`/admin/incidents/${e}/resolve`,{method:"POST"})},async listRegions(){return n("/admin/regions")},async updateRegion(e,t){return n(`/admin/regions/${e}`,{method:"PATCH",body:JSON.stringify(t)})},async getHealthComponents(){return n("/admin/health/components")},async updateHealthComponent(e,t){return n(`/admin/health/components/${e}`,{method:"PATCH",body:JSON.stringify(t)})},async listQueues(){return n("/admin/queues")},async listDlqMessages(e){let t=new URLSearchParams;e?.queue&&t.set("queue",e.queue),e?.search&&t.set("search",e.search),e?.limit&&t.set("limit",String(e.limit)),e?.offset&&t.set("offset",String(e.offset));let r=t.toString();return n(`/admin/dlq${r?`?${r}`:""}`)},async retryDlqMessage(e){return n(`/admin/dlq/${e}/retry`,{method:"POST"})},async archiveDlqMessage(e){return n(`/admin/dlq/${e}`,{method:"DELETE"})}}}function rt(o){let n=$(o);return {async list(){return (await n("/flags")).flags},async create(e){return n("/flags",{method:"POST",body:JSON.stringify(e)})},async update(e,t){return n(`/flags/${encodeURIComponent(e)}`,{method:"PUT",body:JSON.stringify(t)})},async delete(e){return n(`/flags/${encodeURIComponent(e)}`,{method:"DELETE"})}}}function st(o){let n=$(o);return {async getOverview(e){return (await n(`/security/overview/${encodeURIComponent(e)}`)).overview},async getAuditLogs(e,t){let r=new URLSearchParams;t?.limit&&r.set("limit",String(t.limit)),t?.offset&&r.set("offset",String(t.offset));let s=r.toString(),a=`/security/audit/${encodeURIComponent(e)}${s?`?${s}`:""}`;return n(a)},async listEnvVars(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let s=r.toString(),a=`/projects/${encodeURIComponent(e)}/env-vars${s?`?${s}`:""}`;return (await n(a)).envVars},async createEnvVar(e,t){return (await n(`/projects/${encodeURIComponent(e)}/env-vars`,{method:"POST",body:JSON.stringify(t)})).envVar},async updateEnvVar(e,t,r){return (await n(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(r)})).envVar},async deleteEnvVar(e,t){return n(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(t)}`,{method:"DELETE"})},async getEnvVarValue(e,t){return n(`/projects/${encodeURIComponent(e)}/env-vars/${encodeURIComponent(t)}/value`)}}}function ot(o){let n=$(o);return {async generatePlan(e){return n("/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 n("/ai/explain",{method:"POST",body:JSON.stringify({plan:e.plan,projectId:e.projectId,taskType:e.taskType,mode:e.mode})})},async getOrgSettings(e){return n(`/ai/settings/org/${encodeURIComponent(e)}`)},async updateOrgSettings(e,t){return n(`/ai/settings/org/${encodeURIComponent(e)}`,{method:"POST",body:JSON.stringify(t)})},async getProjectOverrides(e){return n(`/ai/settings/project/${encodeURIComponent(e)}`)},async updateProjectOverrides(e,t){return n(`/ai/settings/project/${encodeURIComponent(e)}`,{method:"POST",body:JSON.stringify(t)})},async getUsage(e,t){let r=new URLSearchParams;t&&r.set("month",t);let s=r.toString(),a=`/ai/usage/org/${encodeURIComponent(e)}${s?`?${s}`:""}`;return n(a)},async getBudgetStatus(e){let[t,r]=await Promise.all([this.getOrgSettings(e),this.getUsage(e)]),s=t?.monthlyBudgetCents??1e4,a=r.costCents,c=Math.max(0,s-a),i=s>0?Math.round(a/s*100):0;return {spent:a,budget:s,remaining:c,hardStop:t?.hardStopEnabled??false,percentUsed:i}},async generateFunction(e){return n("/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 n("/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 n("/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,t){return n("/ai/conversations",{method:"POST",body:JSON.stringify({projectId:e,title:t?.title,context:t?.context})})},async sendMessage(e,t){return n(`/ai/conversations/${encodeURIComponent(e)}/messages`,{method:"POST",body:JSON.stringify({content:t.content,taskType:t.taskType})})},async getConversation(e){return n(`/ai/conversations/${encodeURIComponent(e)}`)},async listConversations(e){return (await n(`/ai/conversations/project/${encodeURIComponent(e)}`)).conversations},async deleteConversation(e){return n(`/ai/conversations/${encodeURIComponent(e)}`,{method:"DELETE"})}}}function at(o){let n=$(o);return {async load(){return n("/bootstrap")}}}function it(o){let n=$(o);return {async list(e){let t=new URLSearchParams;e?.visibility&&t.set("visibility",e.visibility),e?.category&&t.set("category",e.category),e?.orgId&&t.set("orgId",e.orgId);let r=t.toString(),s=`/templates${r?`?${r}`:""}`;return (await n(s)).templates},async get(e){return n(`/templates/${e}`)},async previewInstall(e){return n("/templates/install/preview",{method:"POST",body:JSON.stringify(e)})},async applyInstall(e){return n("/templates/install/apply",{method:"POST",body:JSON.stringify(e)})},async rollback(e){return n(`/templates/install/${e}/rollback`,{method:"POST"})},async createProject(e){return n("/templates/create-project",{method:"POST",body:JSON.stringify(e)})}}}function ct(o){let n=$(o);return {async list(e){return (await n(`/oauth/org/${e}`)).connections},async configure(e,t){return n(`/oauth/org/${e}/configure`,{method:"POST",body:JSON.stringify(t)})},async enable(e){return n(`/oauth/connections/${e}/enable`,{method:"POST"})},async disable(e){return n(`/oauth/connections/${e}/disable`,{method:"POST"})},async delete(e){return n(`/oauth/connections/${e}`,{method:"DELETE"})}}}function ut(o){let n=$(o);return {async listPages(e){let t=e?`?category=${encodeURIComponent(e)}`:"";return (await n(`/docs/pages${t}`)).pages},async getPage(e){return (await n(`/docs/pages/${encodeURIComponent(e)}`)).page},async createPage(e){return (await n("/docs/pages",{method:"POST",body:JSON.stringify(e)})).page},async updatePage(e,t){return (await n(`/docs/pages/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})).page},async deletePage(e){return n(`/docs/pages/${encodeURIComponent(e)}`,{method:"DELETE"})},async listSdks(){return (await n("/docs/sdks")).sdks},async getSdk(e){return (await n(`/docs/sdks/${encodeURIComponent(e)}`)).sdk},async createSdk(e){return (await n("/docs/sdks",{method:"POST",body:JSON.stringify(e)})).sdk},async updateSdk(e,t){return (await n(`/docs/sdks/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})).sdk},async deleteSdk(e){return n(`/docs/sdks/${encodeURIComponent(e)}`,{method:"DELETE"})},async listSdkExamples(e,t){let r=t?`?topic=${encodeURIComponent(t)}`:"";return (await n(`/docs/sdks/${encodeURIComponent(e)}/examples${r}`)).examples},async createSdkExample(e){return (await n("/docs/sdk-examples",{method:"POST",body:JSON.stringify(e)})).example},async deleteSdkExample(e){return n(`/docs/sdk-examples/${encodeURIComponent(e)}`,{method:"DELETE"})},async listEndpoints(e){let t=e?`?category=${encodeURIComponent(e)}`:"";return (await n(`/docs/api-endpoints${t}`)).endpoints},async getEndpoint(e){return (await n(`/docs/api-endpoints/${encodeURIComponent(e)}`)).endpoint},async createEndpoint(e){return (await n("/docs/api-endpoints",{method:"POST",body:JSON.stringify(e)})).endpoint},async updateEndpoint(e,t){return (await n(`/docs/api-endpoints/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})).endpoint},async deleteEndpoint(e){return n(`/docs/api-endpoints/${encodeURIComponent(e)}`,{method:"DELETE"})},async listExamples(e){let t=e!==void 0?`?featured=${e}`:"";return (await n(`/docs/examples${t}`)).examples},async getExample(e){return (await n(`/docs/examples/${encodeURIComponent(e)}`)).example},async createExample(e){return (await n("/docs/examples",{method:"POST",body:JSON.stringify(e)})).example},async updateExample(e,t){return (await n(`/docs/examples/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})).example},async deleteExample(e){return n(`/docs/examples/${encodeURIComponent(e)}`,{method:"DELETE"})},async listChangelog(){return (await n("/docs/changelog")).entries},async getChangelogEntry(e){return (await n(`/docs/changelog/${encodeURIComponent(e)}`)).entry},async createChangelogEntry(e){return (await n("/docs/changelog",{method:"POST",body:JSON.stringify(e)})).entry},async updateChangelogEntry(e,t){return (await n(`/docs/changelog/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})).entry},async deleteChangelogEntry(e){return n(`/docs/changelog/${encodeURIComponent(e)}`,{method:"DELETE"})},async search(e){return (await n(`/docs/search?q=${encodeURIComponent(e)}`)).results}}}function lt(o,n,e,t){let r=n.type||"public",s="unsubscribed",a=new Map,c=[],i={},u=null,l=null,d=new Set,p=new Set,g=new Set,b=y=>{if(y.event){let k=a.get(y.event);k&&k.forEach(E=>E(y.payload));}},h=y=>{i=y.state||{},d.forEach(k=>k(i));},m=y=>{let k=y.key||"",E=y.currentPresences||[],x=y.joinedPresences||[],f=y.leftPresences||[];x.length>0&&(i[k]=E,p.forEach(P=>P(k,E,x))),f.length>0&&(E.length===0?delete i[k]:i[k]=E,g.forEach(P=>P(k,E,f))),d.forEach(P=>P(i));},T=y=>{let k={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};c.forEach(({options:E,handler:x})=>{if(E.table===k.table){let f=E.event||"*";(f==="*"||(Array.isArray(f)?f.includes(k.operation):f===k.operation))&&x(k);}});},w={get name(){return o},get type(){return r},get status(){return s},_handleMessage:y=>{switch(y.type){case "broadcast":b(y);break;case "presence_state":h(y);break;case "presence":m(y);break;case "db_change":T(y);break;case "subscribed":s="subscribed";break;case "error":s="error";break}},onDbChange(y,k){return c.push({options:y,handler:k}),s==="subscribed"&&e({type:"subscribe",channel:o,options:{table:y.table,filter:y.filter,event:y.event,columns:y.columns}}),w},on(y,k){return a.has(y)||a.set(y,new Set),a.get(y).add(k),w},off(y,k){return k?a.get(y)?.delete(k):a.delete(y),w},async broadcast(y){if(s!=="subscribed")throw new Error("Channel must be subscribed before broadcasting");e({type:"broadcast",channel:o,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");u=y.key||t()||"anonymous",l=y.state,e({type:"presence_track",channel:o,key:u,state:l});},async update(y){if(!l)throw new Error("Must call track() before update()");l={...l,...y},e({type:"presence_update",channel:o,key:u,state:l});},async untrack(){u&&(e({type:"presence_untrack",channel:o,key:u}),u=null,l=null);},state(){return {...i}},onSync(y){return d.add(y),w},onJoin(y){return p.add(y),w},onLeave(y){return g.add(y),w}},async subscribe(){return s==="subscribed"||(s="subscribing",e({type:"subscribe",channel:o}),c.forEach(({options:y})=>{e({type:"subscribe",channel:o,options:{table:y.table,filter:y.filter,event:y.event,columns:y.columns}});}),n.presenceState&&r==="presence"&&await w.presence.track({state:n.presenceState})),w},async unsubscribe(){s!=="unsubscribed"&&(u&&await w.presence.untrack(),e({type:"unsubscribe",channel:o}),s="unsubscribed",i={},a.clear(),c.length=0);}};return w}function dt(o,n){let{wsUrl:e=o.baseUrl.replace(/^http/,"ws")+"/realtime/ws",autoReconnect:t=true,reconnectDelay:r=1e3,maxReconnectAttempts:s=10}=n??{},a=null,c="disconnected",i=null,u=null,l=0,d=null,p=null,g=new Map,b=new Map,h=new Set,m={connect:new Set,disconnect:new Set,error:new Set,reconnect:new Set},T=f=>{m[f].forEach(P=>P());},w=f=>{let P=`table:${f.table}`;if(f.filter){let U=(Array.isArray(f.filter)?f.filter:[f.filter]).map(O=>`${O.field}${O.operator||"eq"}${O.value}`).join("&");P+=`?${U}`;}return P},y=f=>{a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify(f));},k=f=>{if(f.channel){let P=g.get(f.channel);if(P){P._handleMessage(f);return}}switch(f.type){case "db_change":{let P={type:"db_change",projectId:f.projectId??"",schema:f.schema??"",table:f.table??"",operation:f.op,new:f.record,old:f.old_record,timestamp:f.ts??new Date().toISOString(),partial:f.partial},U=`table:${f.table}`;b.forEach((O,I)=>{(I===U||I.startsWith(U+"?"))&&O.forEach(R=>R(P));});break}case "presence":{let P={type:"presence",event:f.event,key:f.key||f.connectionId||"",connectionId:f.connectionId??"",projectId:f.projectId??"",currentPresences:f.currentPresences||[],leftPresences:f.leftPresences||[],joinedPresences:f.joinedPresences||[]};h.forEach(U=>U(P));break}case "welcome":i=f.connectionId||null;break;case "error":{console.error("[vaif/realtime] Server error:",f.message),T("error");break}}},E=()=>new Promise((f,P)=>{let U=new URLSearchParams;o.apiKey&&U.set(o.apiKeyHeader,o.apiKey),u&&U.set("token",u);let O=U.toString(),I=O?`${e}?${O}`:e;try{a=new WebSocket(I);}catch{P(new W("Failed to create WebSocket connection"));return}let R=()=>{c="connected",l=0,T("connect"),g.forEach(M=>{(M.status==="subscribed"||M.status==="subscribing")&&M.subscribe();}),b.forEach((M,ee)=>{y({type:"subscribe",channel:ee});}),p=setInterval(()=>{y({type:"ping"});},3e4),f();},S=M=>{try{let ee=JSON.parse(M.data);k(ee);}catch{}},K=()=>{if(c="disconnected",i=null,a=null,p&&(clearInterval(p),p=null),T("disconnect"),t&&l<s){c="reconnecting";let M=r*Math.pow(2,l);d=setTimeout(()=>{l++,T("reconnect"),E().catch(()=>{});},Math.min(M,3e4));}},Le=()=>{T("error"),P(new W("WebSocket connection error"));};a.addEventListener("open",R),a.addEventListener("message",S),a.addEventListener("close",K),a.addEventListener("error",Le);}),x=()=>{d&&(clearTimeout(d),d=null),p&&(clearInterval(p),p=null),l=s;};return {channel(f,P={}){let U=g.get(f);if(U)return U;let O=lt(f,P,y,()=>i);return g.set(f,O),O},async removeChannel(f){let P=g.get(f.name);P&&(await P.unsubscribe(),g.delete(f.name));},getChannels(){return Array.from(g.values())},subscribe(f,P){let U=w(f);return b.has(U)||b.set(U,new Set),b.get(U).add(P),a?.readyState===WebSocket.OPEN&&y({type:"subscribe",channel:U}),()=>{let O=b.get(U);O&&(O.delete(P),O.size===0&&(b.delete(U),a?.readyState===WebSocket.OPEN&&y({type:"unsubscribe",channel:U})));}},subscribeToPresence(f){return h.add(f),()=>{h.delete(f);}},async connect(){if(c!=="connected"){if(!o.apiKey)throw new te("API key is required for realtime connections");c="connecting",await E();}},disconnect(){x(),g.forEach(f=>{f.unsubscribe();}),g.clear(),a&&(a.close(),a=null),c="disconnected",i=null;},get isConnected(){return c==="connected"},get connectionState(){return c},get connectionId(){return i},on(f,P){m[f].add(P);},off(f,P){m[f].delete(P);},setAuth(f){u=f;}}}var _={apiKeyHeader:"x-vaif-key",timeout:3e4,retry:{maxRetries:3,retryDelay:1e3,retryOn:[429,500,502,503,504]}};function yt(o){return {baseUrl:o.baseUrl.replace(/\/$/,""),apiKey:o.apiKey,apiKeyHeader:o.apiKeyHeader??_.apiKeyHeader,accessToken:o.accessToken,fetch:o.fetch??globalThis.fetch.bind(globalThis),timeout:o.timeout??_.timeout,retry:{maxRetries:o.retry?.maxRetries??_.retry.maxRetries,retryDelay:o.retry?.retryDelay??_.retry.retryDelay,retryOn:o.retry?.retryOn??[..._.retry.retryOn]}}}function ce(o){let n=yt(o),e=qe(n),t=Qe(n),r=He(n),s=ze(n),a=Ke(n),c=_e(n),i=We(n),u=Ge(n),l=Xe(n),d=Ze(n),p=Ye(n),g=et(n),b=tt(n),h=nt(n),m=rt(n),T=st(n),w=ot(n),y=at(n),k=it(n),E=ct(n),x=ut(n);return {from:e.from,auth:t,functions:r,storage:s,projects:a,orgs:c,schema:i,secrets:u,deployments:l,realtimeMonitoring:d,storageDashboard:p,integrations:g,billing:b,admin:h,flags:m,security:T,ai:w,bootstrap:y,templates:k,oauth:E,docs:x,realtime:f=>dt(n,f)}}var ue=createContext(null);function le({config:o,children:n,storage:e,onAuthStateChange:t,autoRefreshSession:r=true,storageKey:s="vaif-auth"}){let[a]=useState(()=>ce(o)),[c,i]=useState(null),[u,l]=useState(null),[d,p]=useState(null),[g,b]=useState(null),[h,m]=useState(true),T=useRef(null),w=useCallback(async(O,I,R)=>{if(!e)return;let S={token:O,refreshToken:I,expiresAt:R};await e.setItem(s,JSON.stringify(S));},[e,s]),y=useCallback(async()=>{e&&await e.removeItem(s),i(null),l(null),p(null),b(null);},[e,s]);useEffect(()=>((async()=>{try{if(!e){m(!1);return}let I=await e.getItem(s);if(!I){m(!1);return}let R=JSON.parse(I);if(R.expiresAt&&new Date(R.expiresAt)<=new Date)if(R.refreshToken)try{let S=await a.auth.refreshToken(R.refreshToken);l(S.token),p(S.refreshToken??null),b(S.expiresAt),await w(S.token,S.refreshToken,S.expiresAt);let K=await a.auth.getUser();i(K);}catch{await y();}else await y();else {l(R.token),p(R.refreshToken??null),b(R.expiresAt??null);try{let S=await a.auth.getUser();i(S);}catch{if(R.refreshToken)try{let S=await a.auth.refreshToken(R.refreshToken);l(S.token),p(S.refreshToken??null),b(S.expiresAt),await w(S.token,S.refreshToken,S.expiresAt);let K=await a.auth.getUser();i(K);}catch{await y();}else await y();}}}catch{await y();}finally{m(false);}})(),()=>{T.current&&clearTimeout(T.current);}),[a,e,s,w,y]),useEffect(()=>{if(!r||!g||!d)return;let O=new Date(g).getTime(),I=Date.now(),R=O-I-6e4;return R>0&&(T.current=setTimeout(async()=>{try{let S=await a.auth.refreshToken(d);l(S.token),p(S.refreshToken??null),b(S.expiresAt),await w(S.token,S.refreshToken,S.expiresAt);}catch{await y();}},R)),()=>{T.current&&clearTimeout(T.current);}},[r,a,g,d,w,y]),useEffect(()=>{h||t?.(c);},[c,h,t]);let k=useCallback(async(O,I)=>{let R=await a.auth.login(O,I);if("mfaRequired"in R)throw new Error("MFA required - use verifyMFA to complete login");let S=R;return i(S.user),l(S.token),p(S.refreshToken??null),b(S.expiresAt??null),await w(S.token,S.refreshToken,S.expiresAt),S},[a,w]),E=useCallback(async(O,I,R)=>{let S=await a.auth.signUp(O,I,{metadata:R});return i(S.user),l(S.token),p(S.refreshToken??null),b(S.expiresAt??null),await w(S.token,S.refreshToken,S.expiresAt),S},[a,w]),x=useCallback(async()=>{try{await a.auth.logout();}finally{await y();}},[a,y]),f=useCallback(async()=>{if(!d)throw new Error("No refresh token available");let O=await a.auth.refreshToken(d);l(O.token),p(O.refreshToken??null),b(O.expiresAt),await w(O.token,O.refreshToken,O.expiresAt);},[a,d,w]),P=useCallback(O=>{i(I=>I?{...I,...O}:null);},[]),U={client:a,user:c,token:u,isLoading:h,isAuthenticated:!!c,signIn:k,signUp:E,signOut:x,refreshSession:f,updateUser:P};return jsx(ue.Provider,{value:U,children:n})}function H(){let o=useContext(ue);if(!o)throw new Error("useVaif must be used within a VaifProvider");return o}function v(){let{client:o}=H();return o}function ye(){let{client:o,user:n,isLoading:e,isAuthenticated:t,token:r,signIn:s,signUp:a,signOut:c,refreshSession:i,updateUser:u}=H(),l=useCallback(async p=>{let g=await o.auth.updateProfile(p);return u(g),g},[o,u]),d=useCallback(async(p,g)=>{await o.auth.changePassword({currentPassword:p,newPassword:g});},[o]);return {user:n,isLoading:e,isAuthenticated:t,token:r,signIn:s,signUp:a,signOut:c,refreshSession:i,updateProfile:l,changePassword:d}}function pe(){let{user:o}=H();return o}function ge(o,n={}){let e=v(),[t,r]=useState([]),[s,a]=useState("idle"),[c,i]=useState(null),u=useRef(n);u.current=n;let{enabled:l=true,refetchInterval:d,where:p,orderBy:g,...b}=n,h=useCallback(async()=>{if(l){a("loading"),i(null);try{let m={...b};p&&(Array.isArray(p)?m.where={AND:p}:m.where=p),g&&(m.orderBy=Array.isArray(g)?g:[g]);let T=await e.from(o).list(m);r(T.data??[]),a("success");}catch(m){i(m),a("error");}}},[e,o,l,JSON.stringify(p),JSON.stringify(g),JSON.stringify(b)]);return useEffect(()=>{h();},[h]),useEffect(()=>{if(!d||!l)return;let m=setInterval(h,d);return ()=>clearInterval(m)},[d,h,l]),{data:t,status:s,isLoading:s==="loading",isError:s==="error",isSuccess:s==="success",error:c,refetch:h}}function me(o,n,e={}){let t=v(),[r,s]=useState(null),[a,c]=useState("idle"),[i,u]=useState(null),l=e.enabled!==false&&!!n,d=useCallback(async()=>{if(!(!l||!n)){c("loading"),u(null);try{let p=await t.from(o).get(n);s(p.data??null),c("success");}catch(p){u(p),c("error");}}},[t,o,n,l]);return useEffect(()=>{d();},[d]),{data:r,isLoading:a==="loading",isError:a==="error",error:i,refetch:d}}function fe(o,n={}){let e=v(),[t,r]=useState([]),[s,a]=useState("idle"),[c,i]=useState(null),[u,l]=useState(n.initialPage??1),[d,p]=useState(0),g=n.pageSize??20,{enabled:b=true,where:h,orderBy:m}=n,T=useCallback(async()=>{if(b){a("loading"),i(null);try{let y=e.from(o);if(h){let E=Array.isArray(h)?h:[h];for(let x of E)y=y.where(x);}if(m){let E=Array.isArray(m)?m:[m];for(let x of E)y=y.orderBy(x.field,x.direction);}let k=await y.paginate({page:u,pageSize:g});r(k.data??[]),p(k.pageInfo?.total??0),a("success");}catch(y){i(y),a("error");}}},[e,o,u,g,b,JSON.stringify(h),JSON.stringify(m)]);useEffect(()=>{T();},[T]);let w=Math.ceil(d/g);return {data:t,status:s,isLoading:s==="loading",isError:s==="error",isSuccess:s==="success",error:c,refetch:T,page:u,pageSize:g,totalPages:w,totalCount:d,hasNextPage:u<w,hasPreviousPage:u>1,nextPage:()=>l(y=>Math.min(y+1,w)),previousPage:()=>l(y=>Math.max(y-1,1)),goToPage:y=>l(Math.max(1,Math.min(y,w)))}}function he(o){let n=v(),[e,t]=useState(null),[r,s]=useState("idle"),[a,c]=useState(null),i=useCallback(async l=>{s("loading"),c(null);try{let p=(await n.from(o).create(l)).data??null;return t(p),s("success"),p}catch(d){return c(d),s("error"),null}},[n,o]),u=useCallback(()=>{t(null),s("idle"),c(null);},[]);return {create:i,mutate:i,data:e,status:r,isLoading:r==="loading",isError:r==="error",isSuccess:r==="success",error:a,reset:u}}function be(o){let n=v(),[e,t]=useState(null),[r,s]=useState("idle"),[a,c]=useState(null),i=useCallback(async(l,d)=>{s("loading"),c(null);try{let g=(await n.from(o).update(l,d)).data??null;return t(g),s("success"),g}catch(p){return c(p),s("error"),null}},[n,o]),u=useCallback(()=>{t(null),s("idle"),c(null);},[]);return {update:i,data:e,status:r,isLoading:r==="loading",isError:r==="error",error:a,reset:u}}function Se(o){let n=v(),[e,t]=useState("idle"),[r,s]=useState(null),a=useCallback(async i=>{t("loading"),s(null);try{return await n.from(o).delete(i),t("success"),!0}catch(u){return s(u),t("error"),false}},[n,o]),c=useCallback(()=>{t("idle"),s(null);},[]);return {remove:a,status:e,isLoading:e==="loading",isError:e==="error",error:r,reset:c}}function Te(o){let n=v(),[e,t]=useState(null),[r,s]=useState("idle"),[a,c]=useState(null),i=useCallback(async(l,d)=>{s("loading"),c(null);try{let g=(await n.from(o).upsert(l,{conflictFields:d})).data??null;return t(g),s("success"),g}catch(p){return c(p),s("error"),null}},[n,o]),u=useCallback(()=>{t(null),s("idle"),c(null);},[]);return {upsert:i,data:e,status:r,isLoading:r==="loading",isError:r==="error",error:a,reset:u}}function we(o){let n=v(),[e,t]=useState([]),[r,s]=useState("idle"),[a,c]=useState(null);return {createMany:useCallback(async u=>{s("loading"),c(null);try{let d=(await n.from(o).createMany(u)).records??[];return t(d),s("success"),d}catch(l){return c(l),s("error"),[]}},[n,o]),data:e,isLoading:r==="loading",isError:r==="error",error:a}}function Pe(o,n={}){let e=v(),[t,r]=useState("connecting"),s=useRef(null),a=useRef(null),{enabled:c=true,event:i,filter:u,onInsert:l,onUpdate:d,onDelete:p,onChange:g}=n;useEffect(()=>{if(!c)return;let h=e.realtime();s.current=h,h.on("connect",()=>r("connected")),h.on("disconnect",()=>r("disconnected")),h.on("reconnect",()=>r("reconnecting")),h.connect().catch(()=>{r("disconnected");});let m=T=>{switch(g?.(T),T.operation){case "INSERT":T.new&&l?.(T.new);break;case "UPDATE":T.new&&d?.(T.new,T.old??null);break;case "DELETE":T.old&&p?.(T.old);break}};return a.current=h.subscribe({table:o,event:i??"*",filter:u},m),()=>{a.current?.(),h.disconnect();}},[e,o,c,JSON.stringify(i),JSON.stringify(u)]);let b=useCallback(()=>{a.current?.(),s.current?.disconnect();},[]);return {isConnected:t==="connected",connectionState:t,unsubscribe:b}}function Oe(o,n={}){let e=v(),[t,r]=useState([]),[s,a]=useState(false),c=useRef(null),i=useRef(null);useEffect(()=>{let p=e.realtime();i.current=p,p.on("connect",()=>a(true)),p.on("disconnect",()=>a(false));let g=p.channel(o,{type:"presence"});return c.current=g,g.presence.onSync(b=>{let h=[];for(let m of Object.values(b))h.push(...m);r(h);}),g.subscribe().then(()=>{n.initialState&&g.presence.track({state:n.initialState});}),()=>{g.presence.untrack(),g.unsubscribe(),p.disconnect();}},[e,o]);let u=useCallback(p=>{c.current?.presence.track({state:p});},[]),l=useCallback(p=>{c.current?.presence.update(p);},[]),d=useCallback(()=>{c.current?.presence.untrack();},[]);return {presences:t,track:u,update:l,untrack:d,isConnected:s}}function ke(o){let n=v(),[e,t]=useState(null),[r,s]=useState(false),a=useRef(null),c=useRef(null),i=useRef(new Map);useEffect(()=>{let d=n.realtime();c.current=d,d.on("connect",()=>s(true)),d.on("disconnect",()=>s(false));let p=d.channel(o);return a.current=p,p.subscribe(),()=>{p.unsubscribe(),d.disconnect();}},[n,o]);let u=useCallback((d,p)=>{a.current?.broadcast({event:d,payload:p});},[]),l=useCallback((d,p)=>(i.current.has(d)||(i.current.set(d,new Set),a.current?.on(d,g=>{t({event:d,payload:g}),i.current.get(d)?.forEach(b=>b(g));})),i.current.get(d).add(p),()=>{i.current.get(d)?.delete(p);}),[]);return {broadcast:u,lastMessage:e,subscribe:l,isConnected:r}}function ve(){let o=v(),[n,e]=useState("disconnected"),t=useRef(null);useEffect(()=>{let a=o.realtime();return t.current=a,e(a.connectionState),a.on("connect",()=>e("connected")),a.on("disconnect",()=>e("disconnected")),a.on("reconnect",()=>e("reconnecting")),()=>{a.disconnect();}},[o]);let r=useCallback(()=>{t.current?.connect();},[]),s=useCallback(()=>{t.current?.disconnect();},[]);return {connectionState:n,isConnected:n==="connected",reconnect:r,disconnect:s}}function Re(o){let n=v(),[e,t]=useState(0),[r,s]=useState(false),[a,c]=useState(null),[i,u]=useState(null),l=useCallback(async(g,b,h={})=>{s(true),t(0),c(null),u(null);try{let m=await n.storage.upload(b,g,{bucket:h.bucket||o,contentType:h.contentType,metadata:h.metadata,isPublic:h.isPublic});return u(m),t(100),m}catch(m){return c(m),null}finally{s(false);}},[n,o]),d=useCallback(async(g,b,h={})=>{s(true),t(0),c(null),u(null);try{let T=await(await fetch(g)).blob(),w=h.contentType||T.type||bt(g),y=await n.storage.upload(b,T,{bucket:h.bucket||o,contentType:w,metadata:h.metadata,isPublic:h.isPublic});return u(y),t(100),y}catch(m){return c(m),null}finally{s(false);}},[n,o]),p=useCallback(()=>{t(0),c(null),u(null);},[]);return {upload:l,uploadUri:d,progress:e,isUploading:r,isError:!!a,error:a,result:i,reset:p}}function Ee(o){let n=v(),[e,t]=useState(false),[r,s]=useState(null),[a,c]=useState(0);return {download:useCallback(async u=>{t(true),c(0),s(null);try{let l=await n.storage.download(u,{bucket:o});return c(100),l}catch(l){return s(l),null}finally{t(false);}},[n,o]),isDownloading:e,isError:!!r,error:r,progress:a}}function $e(o,n){let e=v(),[t,r]=useState(null),[s,a]=useState(false),[c,i]=useState(null),u=useCallback(async()=>{if(o){a(true),i(null);try{let d=await e.storage.getMetadata(o,{bucket:n?.bucket});r(d);}catch(d){i(d);}finally{a(false);}}},[e,o,n?.bucket]),l=useCallback(async()=>{if(!o)return false;try{return await e.storage.delete(o,{bucket:n?.bucket}),r(null),!0}catch(d){return i(d),false}},[e,o,n?.bucket]);return useEffect(()=>{o&&u();},[o,u]),{file:t,isLoading:s,isError:!!c,error:c,refetch:u,remove:l}}function Ce(o={}){let n=v(),[e,t]=useState([]),[r,s]=useState(false),[a,c]=useState(null),i=useCallback(async()=>{s(true),c(null);try{let u=await n.storage.list({bucket:o.bucket,prefix:o.prefix,limit:o.limit});t(u.files??[]);}catch(u){c(u);}finally{s(false);}},[n,o.bucket,o.prefix,o.limit]);return useEffect(()=>{i();},[i]),{files:e,isLoading:r,isError:!!a,error:a,refetch:i}}function Ie(o,n){let e=v();if(!o)return null;try{return e.storage.getPublicUrl(o,{bucket:n?.bucket})}catch{return null}}function bt(o){let n=o.split(".").pop()?.toLowerCase();return {jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",mp4:"video/mp4",mov:"video/quicktime",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",json:"application/json",txt:"text/plain"}[n||""]||"application/octet-stream"}function Y(o,n={}){let e=v(),[t,r]=useState(null),[s,a]=useState(false),[c,i]=useState(null),[u,l]=useState(false),[d,p]=useState(null),g=useCallback(async h=>{a(true),i(null),l(false);try{let m=await e.functions.invoke(o,{body:h},{retry:n.retry,timeout:n.timeout});return r(m.data),p({status:m.status,durationMs:m.durationMs,requestId:m.requestId,logs:m.logs}),l(!0),m.data}catch(m){return i(m),null}finally{a(false);}},[e,o,n.retry,n.timeout]),b=useCallback(()=>{r(null),i(null),l(false),p(null);},[]);return {invoke:g,data:t,isLoading:s,isError:!!c,isSuccess:u,error:c,reset:b,meta:d}}function xe(o,n={}){let e=Y(o,n);return {...e,call:e.invoke}}function Ne(o,n,e={}){let t=Y(o,e),{enabled:r=true,refetchInterval:s}=e,a=useCallback(async()=>{await t.invoke(n);},[t.invoke,n]);return useEffect(()=>{r&&t.invoke(n);},[r]),useEffect(()=>{if(!s||!r)return;let c=setInterval(()=>{t.invoke(n);},s);return ()=>clearInterval(c)},[s,r]),{...t,refetch:a}}function Ae(o,n={}){let e=v(),[t,r]=useState([]),[s,a]=useState(false),[c,i]=useState(null),{enabled:u=true,envId:l}=n,d=useCallback(async()=>{if(!(!u||!o)){a(true),i(null);try{let p=await e.functions.list({projectId:o,envId:l});r(p);}catch(p){i(p);}finally{a(false);}}},[e,o,l,u]);return useEffect(()=>{d();},[d]),{functions:t,isLoading:s,isError:!!c,error:c,refetch:d}}function Je(){let o=v(),[n,e]=useState([]),[t,r]=useState(false),[s,a]=useState([]);return {invoke:useCallback(async(i,u=[])=>{r(true),a([]);let l=await Promise.all(i.map(async(g,b)=>{try{return {data:(await o.functions.invoke(g,{body:u[b]})).data,error:null}}catch(h){return {data:null,error:h}}})),d=l.map(g=>g.data),p=l.map(g=>g.error);return e(d),a(p),r(false),d},[o]),results:n,isLoading:t,errors:s}}export{le as VaifProvider,ye as useAuth,we as useBatchCreate,Je as useBatchInvoke,ke as useBroadcast,he as useCreate,Se as useDelete,Ee as useDownload,$e as useFile,Ce as useFiles,Y as useFunction,Ae as useFunctionList,Ne as useFunctionQuery,fe as usePaginatedQuery,Oe as usePresence,Ie as usePublicUrl,ge as useQuery,me as useQueryById,ve as useRealtimeConnection,xe as useRpc,Pe as useSubscription,be as useUpdate,Re as useUpload,Te as useUpsert,pe as useUser,H as useVaif,v 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}from'@vaiftech/auth/react';var X=createContext(null);function Y({config:e,children:n,storage:s,onAuthStateChange:u,autoRefreshSession:l=true,storageKey:r="vaif-auth"}){let[t]=useState(()=>createVaifClient(e)),[i,c]=useState(null),[d,p]=useState(null),[o,a]=useState(null),[f,h]=useState(null),[m,y]=useState(true),b=useRef(null),P=useCallback(async(x,w,R)=>{if(!s)return;let g={token:x,refreshToken:w,expiresAt:R};await s.setItem(r,JSON.stringify(g));},[s,r]),T=useCallback(async()=>{s&&await s.removeItem(r),c(null),p(null),a(null),h(null);},[s,r]);useEffect(()=>((async()=>{try{if(!s){y(!1);return}let w=await s.getItem(r);if(!w){y(!1);return}let R=JSON.parse(w);if(R.expiresAt&&new Date(R.expiresAt)<=new Date)if(R.refreshToken)try{let g=await t.auth.refreshToken(R.refreshToken);p(g.token),a(g.refreshToken??null),h(g.expiresAt),await P(g.token,g.refreshToken,g.expiresAt);let z=await t.auth.getUser();c(z);}catch{await T();}else await T();else {p(R.token),a(R.refreshToken??null),h(R.expiresAt??null);try{let g=await t.auth.getUser();c(g);}catch{if(R.refreshToken)try{let g=await t.auth.refreshToken(R.refreshToken);p(g.token),a(g.refreshToken??null),h(g.expiresAt),await P(g.token,g.refreshToken,g.expiresAt);let z=await t.auth.getUser();c(z);}catch{await T();}else await T();}}}catch{await T();}finally{y(false);}})(),()=>{b.current&&clearTimeout(b.current);}),[t,s,r,P,T]),useEffect(()=>{if(!l||!f||!o)return;let x=new Date(f).getTime(),w=Date.now(),R=x-w-6e4;return R>0&&(b.current=setTimeout(async()=>{try{let g=await t.auth.refreshToken(o);p(g.token),a(g.refreshToken??null),h(g.expiresAt),await P(g.token,g.refreshToken,g.expiresAt);}catch{await T();}},R)),()=>{b.current&&clearTimeout(b.current);}},[l,t,f,o,P,T]),useEffect(()=>{m||u?.(i);},[i,m,u]);let N=useCallback(async(x,w)=>{let R=await t.auth.login(x,w);if("mfaRequired"in R)throw new Error("MFA required - use verifyMFA to complete login");let g=R;return c(g.user),p(g.token),a(g.refreshToken??null),h(g.expiresAt??null),await P(g.token,g.refreshToken,g.expiresAt),g},[t,P]),Q=useCallback(async(x,w,R)=>{let g=await t.auth.signUp(x,w,{metadata:R});return c(g.user),p(g.token),a(g.refreshToken??null),h(g.expiresAt??null),await P(g.token,g.refreshToken,g.expiresAt),g},[t,P]),V=useCallback(async()=>{try{await t.auth.logout();}finally{await T();}},[t,T]),Re=useCallback(async()=>{if(!o)throw new Error("No refresh token available");let x=await t.auth.refreshToken(o);p(x.token),a(x.refreshToken??null),h(x.expiresAt),await P(x.token,x.refreshToken,x.expiresAt);},[t,o,P]),Pe=useCallback(x=>{c(w=>w?{...w,...x}:null);},[]),xe={client:t,user:i,token:d,isLoading:m,isAuthenticated:!!i,signIn:N,signUp:Q,signOut:V,refreshSession:Re,updateUser:Pe};return jsx(X.Provider,{value:xe,children:n})}function L(){let e=useContext(X);if(!e)throw new Error("useVaif must be used within a VaifProvider");return e}function U(){let{client:e}=L();return e}function _(){let{client:e,user:n,isLoading:s,isAuthenticated:u,token:l,signIn:r,signUp:t,signOut:i,refreshSession:c,updateUser:d}=L(),p=useCallback(async a=>{let f=await e.auth.updateProfile(a);return d(f),f},[e,d]),o=useCallback(async(a,f)=>{await e.auth.changePassword({currentPassword:a,newPassword:f});},[e]);return {user:n,isLoading:s,isAuthenticated:u,token:l,signIn:r,signUp:t,signOut:i,refreshSession:c,updateProfile:p,changePassword:o}}function $(){let{user:e}=L();return e}function K(e,n={}){let s=U(),[u,l]=useState([]),[r,t]=useState("idle"),[i,c]=useState(null),d=useRef(n);d.current=n;let{enabled:p=true,refetchInterval:o,where:a,orderBy:f,...h}=n,m=useCallback(async()=>{if(p){t("loading"),c(null);try{let y={...h};a&&(Array.isArray(a)?y.where={AND:a}:y.where=a),f&&(y.orderBy=Array.isArray(f)?f:[f]);let b=await s.from(e).list(y);l(b.data??[]),t("success");}catch(y){c(y),t("error");}}},[s,e,p,JSON.stringify(a),JSON.stringify(f),JSON.stringify(h)]);return useEffect(()=>{m();},[m]),useEffect(()=>{if(!o||!p)return;let y=setInterval(m,o);return ()=>clearInterval(y)},[o,m,p]),{data:u,status:r,isLoading:r==="loading",isError:r==="error",isSuccess:r==="success",error:i,refetch:m}}function ee(e,n,s={}){let u=U(),[l,r]=useState(null),[t,i]=useState("idle"),[c,d]=useState(null),p=s.enabled!==false&&!!n,o=useCallback(async()=>{if(!(!p||!n)){i("loading"),d(null);try{let a=await u.from(e).get(n);r(a.data??null),i("success");}catch(a){d(a),i("error");}}},[u,e,n,p]);return useEffect(()=>{o();},[o]),{data:l,isLoading:t==="loading",isError:t==="error",error:c,refetch:o}}function te(e,n={}){let s=U(),[u,l]=useState([]),[r,t]=useState("idle"),[i,c]=useState(null),[d,p]=useState(n.initialPage??1),[o,a]=useState(0),f=n.pageSize??20,{enabled:h=true,where:m,orderBy:y}=n,b=useCallback(async()=>{if(h){t("loading"),c(null);try{let T=s.from(e);if(m){let Q=Array.isArray(m)?m:[m];for(let V of Q)T=T.where(V);}if(y){let Q=Array.isArray(y)?y:[y];for(let V of Q)T=T.orderBy(V.field,V.direction);}let N=await T.paginate({page:d,pageSize:f});l(N.data??[]),a(N.pageInfo?.total??0),t("success");}catch(T){c(T),t("error");}}},[s,e,d,f,h,JSON.stringify(m),JSON.stringify(y)]);useEffect(()=>{b();},[b]);let P=Math.ceil(o/f);return {data:u,status:r,isLoading:r==="loading",isError:r==="error",isSuccess:r==="success",error:i,refetch:b,page:d,pageSize:f,totalPages:P,totalCount:o,hasNextPage:d<P,hasPreviousPage:d>1,nextPage:()=>p(T=>Math.min(T+1,P)),previousPage:()=>p(T=>Math.max(T-1,1)),goToPage:T=>p(Math.max(1,Math.min(T,P)))}}function ne(e){let n=U(),[s,u]=useState(null),[l,r]=useState("idle"),[t,i]=useState(null),c=useCallback(async p=>{r("loading"),i(null);try{let a=(await n.from(e).create(p)).data??null;return u(a),r("success"),a}catch(o){return i(o),r("error"),null}},[n,e]),d=useCallback(()=>{u(null),r("idle"),i(null);},[]);return {create:c,mutate:c,data:s,status:l,isLoading:l==="loading",isError:l==="error",isSuccess:l==="success",error:t,reset:d}}function re(e){let n=U(),[s,u]=useState(null),[l,r]=useState("idle"),[t,i]=useState(null),c=useCallback(async(p,o)=>{r("loading"),i(null);try{let f=(await n.from(e).update(p,o)).data??null;return u(f),r("success"),f}catch(a){return i(a),r("error"),null}},[n,e]),d=useCallback(()=>{u(null),r("idle"),i(null);},[]);return {update:c,data:s,status:l,isLoading:l==="loading",isError:l==="error",error:t,reset:d}}function se(e){let n=U(),[s,u]=useState("idle"),[l,r]=useState(null),t=useCallback(async c=>{u("loading"),r(null);try{return await n.from(e).delete(c),u("success"),!0}catch(d){return r(d),u("error"),false}},[n,e]),i=useCallback(()=>{u("idle"),r(null);},[]);return {remove:t,status:s,isLoading:s==="loading",isError:s==="error",error:l,reset:i}}function oe(e){let n=U(),[s,u]=useState(null),[l,r]=useState("idle"),[t,i]=useState(null),c=useCallback(async(p,o)=>{r("loading"),i(null);try{let f=(await n.from(e).upsert(p,{conflictFields:o})).data??null;return u(f),r("success"),f}catch(a){return i(a),r("error"),null}},[n,e]),d=useCallback(()=>{u(null),r("idle"),i(null);},[]);return {upsert:c,data:s,status:l,isLoading:l==="loading",isError:l==="error",error:t,reset:d}}function ie(e){let n=U(),[s,u]=useState([]),[l,r]=useState("idle"),[t,i]=useState(null);return {createMany:useCallback(async d=>{r("loading"),i(null);try{let o=(await n.from(e).createMany(d)).records??[];return u(o),r("success"),o}catch(p){return i(p),r("error"),[]}},[n,e]),data:s,isLoading:l==="loading",isError:l==="error",error:t}}function ae(e,n={}){let s=U(),[u,l]=useState("connecting"),r=useRef(null),t=useRef(null),{enabled:i=true,event:c,filter:d,onInsert:p,onUpdate:o,onDelete:a,onChange:f}=n;useEffect(()=>{if(!i)return;let m=s.realtime();r.current=m,m.on("connect",()=>l("connected")),m.on("disconnect",()=>l("disconnected")),m.on("reconnect",()=>l("reconnecting")),m.connect().catch(()=>{l("disconnected");});let y=b=>{switch(f?.(b),b.operation){case "INSERT":b.new&&p?.(b.new);break;case "UPDATE":b.new&&o?.(b.new,b.old??null);break;case "DELETE":b.old&&a?.(b.old);break}};return t.current=m.subscribe({table:e,event:c??"*",filter:d},y),()=>{t.current?.(),m.disconnect();}},[s,e,i,JSON.stringify(c),JSON.stringify(d)]);let h=useCallback(()=>{t.current?.(),r.current?.disconnect();},[]);return {isConnected:u==="connected",connectionState:u,unsubscribe:h}}function ue(e,n={}){let s=U(),[u,l]=useState([]),[r,t]=useState(false),i=useRef(null),c=useRef(null);useEffect(()=>{let a=s.realtime();c.current=a,a.on("connect",()=>t(true)),a.on("disconnect",()=>t(false));let f=a.channel(e,{type:"presence"});return i.current=f,f.presence.onSync(h=>{let m=[];for(let y of Object.values(h))m.push(...y);l(m);}),f.subscribe().then(()=>{n.initialState&&f.presence.track({state:n.initialState});}),()=>{f.presence.untrack(),f.unsubscribe(),a.disconnect();}},[s,e]);let d=useCallback(a=>{i.current?.presence.track({state:a});},[]),p=useCallback(a=>{i.current?.presence.update(a);},[]),o=useCallback(()=>{i.current?.presence.untrack();},[]);return {presences:u,track:d,update:p,untrack:o,isConnected:r}}function le(e){let n=U(),[s,u]=useState(null),[l,r]=useState(false),t=useRef(null),i=useRef(null),c=useRef(new Map);useEffect(()=>{let o=n.realtime();i.current=o,o.on("connect",()=>r(true)),o.on("disconnect",()=>r(false));let a=o.channel(e);return t.current=a,a.subscribe(),()=>{a.unsubscribe(),o.disconnect();}},[n,e]);let d=useCallback((o,a)=>{t.current?.broadcast({event:o,payload:a});},[]),p=useCallback((o,a)=>(c.current.has(o)||(c.current.set(o,new Set),t.current?.on(o,f=>{u({event:o,payload:f}),c.current.get(o)?.forEach(h=>h(f));})),c.current.get(o).add(a),()=>{c.current.get(o)?.delete(a);}),[]);return {broadcast:d,lastMessage:s,subscribe:p,isConnected:l}}function ce(){let e=U(),[n,s]=useState("disconnected"),u=useRef(null);useEffect(()=>{let t=e.realtime();return u.current=t,s(t.connectionState),t.on("connect",()=>s("connected")),t.on("disconnect",()=>s("disconnected")),t.on("reconnect",()=>s("reconnecting")),()=>{t.disconnect();}},[e]);let l=useCallback(()=>{u.current?.connect();},[]),r=useCallback(()=>{u.current?.disconnect();},[]);return {connectionState:n,isConnected:n==="connected",reconnect:l,disconnect:r}}function pe(e){let n=U(),[s,u]=useState(0),[l,r]=useState(false),[t,i]=useState(null),[c,d]=useState(null),p=useCallback(async(f,h,m={})=>{r(true),u(0),i(null),d(null);try{let y=await n.storage.upload(h,f,{bucket:m.bucket||e,contentType:m.contentType,metadata:m.metadata,isPublic:m.isPublic});return d(y),u(100),y}catch(y){return i(y),null}finally{r(false);}},[n,e]),o=useCallback(async(f,h,m={})=>{r(true),u(0),i(null),d(null);try{let b=await(await fetch(f)).blob(),P=m.contentType||b.type||Ae(f),T=await n.storage.upload(h,b,{bucket:m.bucket||e,contentType:P,metadata:m.metadata,isPublic:m.isPublic});return d(T),u(100),T}catch(y){return i(y),null}finally{r(false);}},[n,e]),a=useCallback(()=>{u(0),i(null),d(null);},[]);return {upload:p,uploadUri:o,progress:s,isUploading:l,isError:!!t,error:t,result:c,reset:a}}function fe(e){let n=U(),[s,u]=useState(false),[l,r]=useState(null),[t,i]=useState(0);return {download:useCallback(async d=>{u(true),i(0),r(null);try{let p=await n.storage.download(d,{bucket:e});return i(100),p}catch(p){return r(p),null}finally{u(false);}},[n,e]),isDownloading:s,isError:!!l,error:l,progress:t}}function ge(e,n){let s=U(),[u,l]=useState(null),[r,t]=useState(false),[i,c]=useState(null),d=useCallback(async()=>{if(e){t(true),c(null);try{let o=await s.storage.getMetadata(e,{bucket:n?.bucket});l(o);}catch(o){c(o);}finally{t(false);}}},[s,e,n?.bucket]),p=useCallback(async()=>{if(!e)return false;try{return await s.storage.delete(e,{bucket:n?.bucket}),l(null),!0}catch(o){return c(o),false}},[s,e,n?.bucket]);return useEffect(()=>{e&&d();},[e,d]),{file:u,isLoading:r,isError:!!i,error:i,refetch:d,remove:p}}function me(e={}){let n=U(),[s,u]=useState([]),[l,r]=useState(false),[t,i]=useState(null),c=useCallback(async()=>{r(true),i(null);try{let d=await n.storage.list({bucket:e.bucket,prefix:e.prefix,limit:e.limit});u(d.files??[]);}catch(d){i(d);}finally{r(false);}},[n,e.bucket,e.prefix,e.limit]);return useEffect(()=>{c();},[c]),{files:s,isLoading:l,isError:!!t,error:t,refetch:c}}function ye(e,n){let s=U();if(!e)return null;try{return s.storage.getPublicUrl(e,{bucket:n?.bucket})}catch{return null}}function Ae(e){let n=e.split(".").pop()?.toLowerCase();return {jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",mp4:"video/mp4",mov:"video/quicktime",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",json:"application/json",txt:"text/plain"}[n||""]||"application/octet-stream"}function j(e,n={}){let s=U(),[u,l]=useState(null),[r,t]=useState(false),[i,c]=useState(null),[d,p]=useState(false),[o,a]=useState(null),f=useCallback(async m=>{t(true),c(null),p(false);try{let y=await s.functions.invoke(e,{body:m},{retry:n.retry,timeout:n.timeout});return l(y.data),a({status:y.status,durationMs:y.durationMs,requestId:y.requestId,logs:y.logs}),p(!0),y.data}catch(y){return c(y),null}finally{t(false);}},[s,e,n.retry,n.timeout]),h=useCallback(()=>{l(null),c(null),p(false),a(null);},[]);return {invoke:f,data:u,isLoading:r,isError:!!i,isSuccess:d,error:i,reset:h,meta:o}}function he(e,n={}){let s=j(e,n);return {...s,call:s.invoke}}function Te(e,n,s={}){let u=j(e,s),{enabled:l=true,refetchInterval:r}=s,t=useCallback(async()=>{await u.invoke(n);},[u.invoke,n]);return useEffect(()=>{l&&u.invoke(n);},[l]),useEffect(()=>{if(!r||!l)return;let i=setInterval(()=>{u.invoke(n);},r);return ()=>clearInterval(i)},[r,l]),{...u,refetch:t}}function Ue(e,n={}){let s=U(),[u,l]=useState([]),[r,t]=useState(false),[i,c]=useState(null),{enabled:d=true,envId:p}=n,o=useCallback(async()=>{if(!(!d||!e)){t(true),c(null);try{let a=await s.functions.list({projectId:e,envId:p});l(a);}catch(a){c(a);}finally{t(false);}}},[s,e,p,d]);return useEffect(()=>{o();},[o]),{functions:u,isLoading:r,isError:!!i,error:i,refetch:o}}function be(){let e=U(),[n,s]=useState([]),[u,l]=useState(false),[r,t]=useState([]);return {invoke:useCallback(async(c,d=[])=>{l(true),t([]);let p=await Promise.all(c.map(async(f,h)=>{try{return {data:(await e.functions.invoke(f,{body:d[h]})).data,error:null}}catch(m){return {data:null,error:m}}})),o=p.map(f=>f.data),a=p.map(f=>f.error);return s(o),t(a),l(false),o},[e]),results:n,isLoading:u,errors:r}}export{Y as VaifProvider,_ as useAuth,ie as useBatchCreate,be as useBatchInvoke,le as useBroadcast,ne as useCreate,se as useDelete,fe as useDownload,ge as useFile,me as useFiles,j as useFunction,Ue as useFunctionList,Te as useFunctionQuery,te as usePaginatedQuery,ue as usePresence,ye as usePublicUrl,K as useQuery,ee as useQueryById,ce as useRealtimeConnection,he as useRpc,ae as useSubscription,re as useUpdate,pe as useUpload,oe as useUpsert,$ as useUser,L as useVaif,U as useVaifClient};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaiftech/sdk-expo",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "VAIF SDK for React Native and Expo applications",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -21,7 +21,8 @@
21
21
  "typecheck": "tsc -p tsconfig.json --noEmit"
22
22
  },
23
23
  "dependencies": {
24
- "@vaiftech/client": "workspace:*"
24
+ "@vaiftech/client": "workspace:*",
25
+ "@vaiftech/auth": "workspace:*"
25
26
  },
26
27
  "peerDependencies": {
27
28
  "react": ">=17.0.0",
@@ -40,7 +41,7 @@
40
41
  "typescript": "^5.5.4"
41
42
  },
42
43
  "engines": {
43
- "node": ">=18.0.0"
44
+ "node": ">=19.0.0"
44
45
  },
45
46
  "keywords": [
46
47
  "vaif",