@blinkdotnew/sdk 0.19.6 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -146,7 +146,7 @@ This SDK powers every Blink-generated app with:
146
146
 
147
147
  - **🔐 Authentication**: Flexible auth system with managed (redirect) and headless (custom UI) modes, email/password, social providers (Google, GitHub, Apple, Microsoft), magic links, RBAC, and custom email branding
148
148
  - **🗄️ Database**: PostgREST-compatible CRUD operations with advanced filtering
149
- - **🤖 AI**: Multi-model image generation & editing (10 models), text generation with web search, object generation, speech synthesis, and transcription
149
+ - **🤖 AI**: Text generation with web search, object generation, image creation (Gemini 2.5 Flash), speech synthesis, and transcription
150
150
  - **📄 Data**: Extract text content from documents, secure API proxy with secret substitution, web scraping, screenshots, and web search
151
151
  - **📁 Storage**: File upload, download, and management
152
152
  - **📧 Notifications**: Email sending with attachments, custom branding, and delivery tracking
@@ -195,167 +195,48 @@ const blink = createClient({
195
195
 
196
196
  The SDK has **first-class React Native support** with platform-aware features that automatically adapt to mobile environments.
197
197
 
198
- #### Step 1: Install Dependencies
199
-
200
198
  ```bash
201
- npm install @blinkdotnew/sdk @react-native-async-storage/async-storage expo-web-browser
199
+ npm install @blinkdotnew/sdk @react-native-async-storage/async-storage
202
200
  ```
203
201
 
204
- **Required packages:**
205
- - `@blinkdotnew/sdk` - The Blink SDK
206
- - `@react-native-async-storage/async-storage` - For token persistence
207
- - `expo-web-browser` - For OAuth authentication (Google, GitHub, Apple, etc.)
208
-
209
- #### Step 2: Create Client (`lib/blink.ts`)
210
-
211
- **⚠️ IMPORTANT: You MUST pass `webBrowser: WebBrowser` to enable OAuth on mobile!**
212
-
213
202
  ```typescript
214
- // lib/blink.ts
215
203
  import { createClient, AsyncStorageAdapter } from '@blinkdotnew/sdk'
216
204
  import AsyncStorage from '@react-native-async-storage/async-storage'
217
- import * as WebBrowser from 'expo-web-browser' // ← Import this
218
205
 
219
- export const blink = createClient({
206
+ const blink = createClient({
220
207
  projectId: 'your-project-id',
221
208
  authRequired: false,
222
- auth: {
223
- mode: 'headless',
224
- webBrowser: WebBrowser // ← Pass it here! Required for OAuth
225
- },
209
+ // Use AsyncStorage for secure token persistence on mobile
226
210
  storage: new AsyncStorageAdapter(AsyncStorage)
227
211
  })
228
- ```
229
212
 
230
- #### Step 3: Use Authentication
231
-
232
- **Email/Password (works immediately):**
233
- ```typescript
234
- // Sign up
235
- const user = await blink.auth.signUp({
236
- email: 'user@example.com',
237
- password: 'SecurePass123'
213
+ // All features work seamlessly in React Native!
214
+ const { data } = await blink.ai.generateImage({
215
+ prompt: 'A beautiful sunset over mountains',
216
+ n: 1
238
217
  })
239
-
240
- // Sign in
241
- const user = await blink.auth.signInWithEmail('user@example.com', 'SecurePass123')
242
- ```
243
-
244
- **OAuth (Google, GitHub, Apple, Microsoft):**
245
- ```typescript
246
- // ✅ Same code works on web, iOS, AND Android!
247
- const user = await blink.auth.signInWithGoogle()
248
- const user = await blink.auth.signInWithGitHub()
249
- const user = await blink.auth.signInWithApple()
250
- const user = await blink.auth.signInWithMicrosoft()
251
- ```
252
-
253
- #### Step 4: Create Auth Hook (`hooks/useAuth.ts`)
254
-
255
- ```typescript
256
- // hooks/useAuth.ts
257
- import { useEffect, useState } from 'react'
258
- import { blink } from '@/lib/blink'
259
- import type { BlinkUser } from '@blinkdotnew/sdk'
260
-
261
- export function useAuth() {
262
- const [user, setUser] = useState<BlinkUser | null>(null)
263
- const [isLoading, setIsLoading] = useState(true)
264
-
265
- useEffect(() => {
266
- const unsubscribe = blink.auth.onAuthStateChanged((state) => {
267
- setUser(state.user)
268
- setIsLoading(state.isLoading)
269
- })
270
- return unsubscribe
271
- }, [])
272
-
273
- return {
274
- user,
275
- isLoading,
276
- isAuthenticated: !!user,
277
- signInWithGoogle: () => blink.auth.signInWithGoogle(),
278
- signInWithGitHub: () => blink.auth.signInWithGitHub(),
279
- signInWithApple: () => blink.auth.signInWithApple(),
280
- signOut: () => blink.auth.signOut(),
281
- }
282
- }
283
- ```
284
-
285
- #### Step 5: Use in Components
286
-
287
- ```typescript
288
- import { useAuth } from '@/hooks/useAuth'
289
- import { View, Text, Button } from 'react-native'
290
-
291
- function App() {
292
- const { user, isLoading, signInWithGoogle, signOut } = useAuth()
293
-
294
- if (isLoading) return <Text>Loading...</Text>
295
-
296
- if (!user) {
297
- return <Button onPress={signInWithGoogle} title="Sign in with Google" />
298
- }
299
-
300
- return (
301
- <View>
302
- <Text>Welcome, {user.email}!</Text>
303
- <Button onPress={signOut} title="Sign Out" />
304
- </View>
305
- )
306
- }
307
218
  ```
308
219
 
309
- #### Common Mistakes
220
+ **Platform-Aware Features:**
221
+ - ✅ **AsyncStorage integration** for secure token persistence
222
+ - ✅ **Automatic platform detection** - skips browser-only features (analytics tracking, cross-tab sync)
223
+ - ✅ **No polyfills needed** - works out of the box
224
+ - ✅ **Optimized for mobile** - reduced memory footprint
310
225
 
226
+ **Configuration Options:**
311
227
  ```typescript
312
- // WRONG: Missing webBrowser - OAuth won't work on mobile!
228
+ // With AsyncStorage (recommended for token persistence)
313
229
  const blink = createClient({
314
230
  projectId: 'your-project-id',
315
- auth: { mode: 'headless' }, // Missing webBrowser!
316
231
  storage: new AsyncStorageAdapter(AsyncStorage)
317
232
  })
318
233
 
319
- // CORRECT: Include webBrowser for OAuth support
320
- import * as WebBrowser from 'expo-web-browser'
321
-
234
+ // Without persistence (tokens in memory only)
322
235
  const blink = createClient({
323
- projectId: 'your-project-id',
324
- auth: {
325
- mode: 'headless',
326
- webBrowser: WebBrowser // ← Required for OAuth!
327
- },
328
- storage: new AsyncStorageAdapter(AsyncStorage)
236
+ projectId: 'your-project-id'
329
237
  })
330
238
  ```
331
239
 
332
- #### Low-Level OAuth (For Custom Control)
333
-
334
- If you need custom polling timeouts or manual browser handling:
335
-
336
- ```typescript
337
- // Get auth URL and authenticate function separately
338
- const { authUrl, authenticate } = await blink.auth.signInWithProviderMobile('google')
339
-
340
- // Open browser manually
341
- await WebBrowser.openAuthSessionAsync(authUrl)
342
-
343
- // Poll with custom options
344
- const user = await authenticate({
345
- maxAttempts: 120, // 60 seconds (default: 60 = 30 seconds)
346
- intervalMs: 500 // Check every 500ms
347
- })
348
- ```
349
-
350
- #### Platform Features
351
-
352
- - ✅ **AsyncStorage** - Secure token persistence
353
- - ✅ **Universal OAuth** - Same code works on web + mobile
354
- - ✅ **expo-web-browser** - Native browser UI
355
- - ✅ **No deep linking** - Session-based polling
356
- - ✅ **Works in Expo Go** - No custom dev client needed
357
- - ✅ **Auto token refresh** - Seamless sessions
358
-
359
240
  ## 📖 API Reference
360
241
 
361
242
  ### Authentication
@@ -827,56 +708,29 @@ const { object: todoList } = await blink.ai.generateObject({
827
708
  // })
828
709
  // Error: "schema must be a JSON Schema of 'type: \"object\"', got 'type: \"array\"'"
829
710
 
830
- // Generate and modify images with AI - Multi-Model Support (10 models available)
831
- // 🔥 Choose between fast generation or high-quality results
711
+ // Generate and modify images with AI (powered by Gemini 2.5 Flash Image)
712
+ // 🔥 Automatic optimization - no need to specify size, quality, or style parameters
832
713
  // 🎨 For style transfer: provide ALL images in the images array, don't reference URLs in prompts
833
714
 
834
- // Basic image generation (uses default fast model: fal-ai/nano-banana)
715
+ // Basic image generation - returns public URLs directly
835
716
  const { data } = await blink.ai.generateImage({
836
717
  prompt: 'A serene landscape with mountains and a lake at sunset'
837
718
  })
838
719
  console.log('Image URL:', data[0].url)
839
720
 
840
- // High-quality generation with Pro model
841
- const { data: proImage } = await blink.ai.generateImage({
842
- prompt: 'A detailed infographic about AI with charts and diagrams',
843
- model: 'fal-ai/nano-banana-pro', // High quality model
844
- n: 1,
845
- size: '1792x1024' // Custom size
846
- })
847
-
848
- // Generate multiple variations
721
+ // Multiple images
849
722
  const { data } = await blink.ai.generateImage({
850
723
  prompt: 'A futuristic robot in different poses',
851
- model: 'fal-ai/nano-banana', // Fast model
852
724
  n: 3
853
725
  })
854
726
  data.forEach((img, i) => console.log(`Image ${i+1}:`, img.url))
855
727
 
856
- **Available Models for Text-to-Image:**
857
-
858
- | Model | Speed | Quality | Best For |
859
- |-------|-------|---------|----------|
860
- | `fal-ai/nano-banana` (default) | ⚡ Fast | Good | Prototypes, high-volume generation |
861
- | `fal-ai/nano-banana-pro` | Standard | ⭐ Excellent | Marketing materials, high-fidelity visuals |
862
- | `fal-ai/gemini-25-flash-image` | ⚡ Fast | Good | Alias for `nano-banana` |
863
- | `fal-ai/gemini-3-pro-image-preview` | Standard | ⭐ Excellent | Alias for `nano-banana-pro` |
864
- | `gemini-2.5-flash-image-preview` | ⚡ Fast | Good | Legacy - Direct Gemini API |
865
- | `gemini-3-pro-image-preview` | Standard | ⭐ Excellent | Legacy - Direct Gemini API |
866
-
867
- // Image editing - transform existing images with prompts (uses default fast model)
728
+ // Image editing - transform existing images with prompts
868
729
  const { data: headshots } = await blink.ai.modifyImage({
869
- images: ['https://storage.example.com/user-photo.jpg'], // Up to 16 images supported!
730
+ images: ['https://storage.example.com/user-photo.jpg'], // Up to 50 images supported!
870
731
  prompt: 'Transform into professional business headshot with studio lighting'
871
732
  })
872
733
 
873
- // High-quality editing with Pro model
874
- const { data: proEdited } = await blink.ai.modifyImage({
875
- images: ['https://storage.example.com/portrait.jpg'],
876
- prompt: 'Add a majestic ancient tree in the background with glowing leaves',
877
- model: 'fal-ai/nano-banana-pro/edit' // High quality editing
878
- })
879
-
880
734
  // Advanced image editing with multiple input images
881
735
  const { data } = await blink.ai.modifyImage({
882
736
  images: [
@@ -885,19 +739,9 @@ const { data } = await blink.ai.modifyImage({
885
739
  'https://storage.example.com/photo3.jpg'
886
740
  ],
887
741
  prompt: 'Combine these architectural styles into a futuristic building design',
888
- model: 'fal-ai/nano-banana/edit', // Fast editing
889
742
  n: 2
890
743
  })
891
744
 
892
- **Available Models for Image Editing:**
893
-
894
- | Model | Speed | Quality | Best For |
895
- |-------|-------|---------|----------|
896
- | `fal-ai/nano-banana/edit` (default) | ⚡ Fast | Good | Quick adjustments, style transfers |
897
- | `fal-ai/nano-banana-pro/edit` | Standard | ⭐ Excellent | Detailed retouching, complex edits |
898
- | `fal-ai/gemini-25-flash-image/edit` | ⚡ Fast | Good | Alias for `nano-banana/edit` |
899
- | `fal-ai/gemini-3-pro-image-preview/edit` | Standard | ⭐ Excellent | Alias for `nano-banana-pro/edit` |
900
-
901
745
  // 🎨 Style Transfer & Feature Application
902
746
  // ⚠️ IMPORTANT: When applying styles/features from one image to another,
903
747
  // provide ALL images in the array - don't reference images in the prompt text
package/dist/index.d.mts CHANGED
@@ -82,49 +82,6 @@ interface BlinkClientConfig {
82
82
  }
83
83
  interface BlinkAuthConfig {
84
84
  mode?: 'managed' | 'headless';
85
- /**
86
- * Automatically detect and extract auth tokens from URL parameters
87
- *
88
- * - Web: Set to `true` (default) to handle OAuth redirects
89
- * - React Native: Set to `false` to use deep links instead
90
- *
91
- * @default true
92
- *
93
- * @example
94
- * // React Native - disable URL detection, use deep links
95
- * {
96
- * auth: {
97
- * detectSessionInUrl: false,
98
- * storage: AsyncStorageAdapter(AsyncStorage)
99
- * }
100
- * }
101
- */
102
- detectSessionInUrl?: boolean;
103
- /**
104
- * WebBrowser module for React Native OAuth (expo-web-browser)
105
- *
106
- * When provided, `signInWithGoogle()` and other OAuth methods will
107
- * automatically use the mobile session-based flow on React Native,
108
- * so you don't need platform-specific code.
109
- *
110
- * @example
111
- * // React Native setup (configure once)
112
- * import * as WebBrowser from 'expo-web-browser'
113
- * import AsyncStorage from '@react-native-async-storage/async-storage'
114
- *
115
- * const blink = createClient({
116
- * projectId: 'your-project',
117
- * auth: {
118
- * mode: 'headless',
119
- * webBrowser: WebBrowser // Pass the module here
120
- * },
121
- * storage: new AsyncStorageAdapter(AsyncStorage)
122
- * })
123
- *
124
- * // Now this works on both web and mobile!
125
- * const user = await blink.auth.signInWithGoogle()
126
- */
127
- webBrowser?: WebBrowserModule;
128
85
  email?: {
129
86
  requireVerification?: boolean;
130
87
  allowSignUp?: boolean;
@@ -161,7 +118,6 @@ type AuthProvider = 'email' | 'google' | 'github' | 'apple' | 'microsoft' | 'twi
161
118
  interface AuthOptions {
162
119
  redirectUrl?: string;
163
120
  metadata?: Record<string, any>;
164
- useMobileSession?: boolean;
165
121
  }
166
122
  interface SignUpData {
167
123
  email: string;
@@ -175,22 +131,6 @@ interface SignUpData {
175
131
  interface MagicLinkOptions {
176
132
  redirectUrl?: string;
177
133
  }
178
- /**
179
- * WebBrowser interface for React Native OAuth
180
- * Compatible with expo-web-browser module
181
- *
182
- * Simply pass the expo-web-browser module directly:
183
- * ```typescript
184
- * import * as WebBrowser from 'expo-web-browser'
185
- * const blink = createClient({ auth: { webBrowser: WebBrowser } })
186
- * ```
187
- */
188
- interface WebBrowserModule {
189
- openAuthSessionAsync(url: string, redirectUrl?: string, options?: unknown): Promise<{
190
- type: string;
191
- url?: string;
192
- }>;
193
- }
194
134
  interface BlinkUser {
195
135
  id: string;
196
136
  email: string;
@@ -836,7 +776,7 @@ declare class HttpClient {
836
776
  signal?: AbortSignal;
837
777
  }): Promise<BlinkResponse<any>>;
838
778
  /**
839
- * Stream AI text generation with Vercel AI SDK data stream format
779
+ * Stream AI text generation - uses Vercel AI SDK's pipeUIMessageStreamToResponse (Data Stream Protocol)
840
780
  */
841
781
  streamAiText(prompt: string, options: {
842
782
  model?: string | undefined;
@@ -860,7 +800,7 @@ declare class HttpClient {
860
800
  signal?: AbortSignal;
861
801
  }): Promise<BlinkResponse<any>>;
862
802
  /**
863
- * Stream AI object generation with Vercel AI SDK data stream format
803
+ * Stream AI object generation - uses Vercel AI SDK's pipeTextStreamToResponse
864
804
  */
865
805
  streamAiObject(prompt: string, options: {
866
806
  model?: string | undefined;
@@ -941,10 +881,10 @@ declare class HttpClient {
941
881
  private parseResponse;
942
882
  private handleErrorResponse;
943
883
  /**
944
- * Parse Vercel AI SDK data stream format
945
- * Handles text chunks (0:"text"), partial objects (2:[...]), and metadata (d:, e:)
884
+ * Parse Vercel AI SDK v5 Data Stream Protocol (Server-Sent Events)
885
+ * Supports all event types from the UI Message Stream protocol
946
886
  */
947
- private parseDataStream;
887
+ private parseDataStreamProtocol;
948
888
  }
949
889
 
950
890
  /**
@@ -1068,143 +1008,8 @@ declare class BlinkAuth {
1068
1008
  * Sign in with Microsoft (headless mode)
1069
1009
  */
1070
1010
  signInWithMicrosoft(options?: AuthOptions): Promise<BlinkUser>;
1071
- /**
1072
- * Initiate OAuth for mobile without deep linking (expo-web-browser pattern)
1073
- *
1074
- * This method:
1075
- * 1. Generates a unique session ID
1076
- * 2. Returns OAuth URL with session parameter
1077
- * 3. App opens URL in expo-web-browser
1078
- * 4. App polls checkMobileOAuthSession() until complete
1079
- *
1080
- * @param provider - OAuth provider (google, github, apple, etc.)
1081
- * @param options - Optional metadata
1082
- * @returns Session ID and OAuth URL
1083
- *
1084
- * @example
1085
- * // React Native with expo-web-browser
1086
- * import * as WebBrowser from 'expo-web-browser';
1087
- *
1088
- * const { sessionId, authUrl } = await blink.auth.initiateMobileOAuth('google');
1089
- *
1090
- * // Open browser
1091
- * await WebBrowser.openAuthSessionAsync(authUrl);
1092
- *
1093
- * // Poll for completion
1094
- * const user = await blink.auth.pollMobileOAuthSession(sessionId);
1095
- * console.log('Authenticated:', user.email);
1096
- */
1097
- initiateMobileOAuth(provider: AuthProvider, options?: Omit<AuthOptions, 'redirectUrl'>): Promise<{
1098
- sessionId: string;
1099
- authUrl: string;
1100
- }>;
1101
- /**
1102
- * Check mobile OAuth session status (single check)
1103
- *
1104
- * @param sessionId - Session ID from initiateMobileOAuth
1105
- * @returns Tokens if session is complete, null if still pending
1106
- */
1107
- checkMobileOAuthSession(sessionId: string): Promise<AuthTokens | null>;
1108
- /**
1109
- * Poll mobile OAuth session until complete (convenience method)
1110
- *
1111
- * @param sessionId - Session ID from initiateMobileOAuth
1112
- * @param options - Polling options
1113
- * @returns Authenticated user
1114
- *
1115
- * @example
1116
- * const { sessionId, authUrl } = await blink.auth.initiateMobileOAuth('google');
1117
- * await WebBrowser.openAuthSessionAsync(authUrl);
1118
- * const user = await blink.auth.pollMobileOAuthSession(sessionId, {
1119
- * maxAttempts: 60,
1120
- * intervalMs: 1000
1121
- * });
1122
- */
1123
- pollMobileOAuthSession(sessionId: string, options?: {
1124
- maxAttempts?: number;
1125
- intervalMs?: number;
1126
- }): Promise<BlinkUser>;
1127
- /**
1128
- * Sign in with OAuth provider using expo-web-browser (React Native)
1129
- *
1130
- * This is a convenience method that handles the entire flow:
1131
- * 1. Initiates mobile OAuth session
1132
- * 2. Returns auth URL to open in WebBrowser
1133
- * 3. Provides polling function to call after browser opens
1134
- *
1135
- * @param provider - OAuth provider
1136
- * @returns Object with authUrl and authenticate function
1137
- *
1138
- * @example
1139
- * import * as WebBrowser from 'expo-web-browser';
1140
- *
1141
- * const { authUrl, authenticate } = await blink.auth.signInWithProviderMobile('google');
1142
- *
1143
- * // Open browser
1144
- * await WebBrowser.openAuthSessionAsync(authUrl);
1145
- *
1146
- * // Wait for authentication
1147
- * const user = await authenticate();
1148
- */
1149
- signInWithProviderMobile(provider: AuthProvider, options?: Omit<AuthOptions, 'redirectUrl'>): Promise<{
1150
- authUrl: string;
1151
- authenticate: () => Promise<BlinkUser>;
1152
- }>;
1153
- /**
1154
- * Sign in with Google using expo-web-browser (React Native convenience)
1155
- */
1156
- signInWithGoogleMobile(options?: Omit<AuthOptions, 'redirectUrl'>): Promise<{
1157
- authUrl: string;
1158
- authenticate: () => Promise<BlinkUser>;
1159
- }>;
1160
- /**
1161
- * Sign in with GitHub using expo-web-browser (React Native convenience)
1162
- */
1163
- signInWithGitHubMobile(options?: Omit<AuthOptions, 'redirectUrl'>): Promise<{
1164
- authUrl: string;
1165
- authenticate: () => Promise<BlinkUser>;
1166
- }>;
1167
- /**
1168
- * Sign in with Apple using expo-web-browser (React Native convenience)
1169
- */
1170
- signInWithAppleMobile(options?: Omit<AuthOptions, 'redirectUrl'>): Promise<{
1171
- authUrl: string;
1172
- authenticate: () => Promise<BlinkUser>;
1173
- }>;
1174
- /**
1175
- * React Native OAuth flow using expo-web-browser (internal)
1176
- * Automatically handles opening browser and extracting tokens from redirect
1177
- */
1178
- private signInWithProviderReactNative;
1179
1011
  /**
1180
1012
  * Generic provider sign-in method (headless mode)
1181
- *
1182
- * Supports both web (popup) and React Native (deep link) OAuth flows.
1183
- *
1184
- * **React Native Setup:**
1185
- * 1. Configure deep linking in your app (app.json):
1186
- * ```json
1187
- * { "expo": { "scheme": "com.yourapp" } }
1188
- * ```
1189
- *
1190
- * 2. Add redirect URL in Blink Dashboard:
1191
- * `com.yourapp://**`
1192
- *
1193
- * 3. Handle deep link callbacks:
1194
- * ```typescript
1195
- * import * as Linking from 'expo-linking'
1196
- *
1197
- * Linking.addEventListener('url', async ({ url }) => {
1198
- * const { queryParams } = Linking.parse(url)
1199
- * if (queryParams.access_token) {
1200
- * await blink.auth.setSession(queryParams)
1201
- * }
1202
- * })
1203
- * ```
1204
- *
1205
- * @param provider - OAuth provider (google, github, apple, etc.)
1206
- * @param options - Optional redirect URL and metadata
1207
- * @returns Promise that resolves with authenticated user
1208
1013
  */
1209
1014
  signInWithProvider(provider: AuthProvider, options?: AuthOptions): Promise<BlinkUser>;
1210
1015
  /**
@@ -1294,40 +1099,6 @@ declare class BlinkAuth {
1294
1099
  * Manually set tokens (for server-side usage)
1295
1100
  */
1296
1101
  setToken(jwt: string, persist?: boolean): Promise<void>;
1297
- /**
1298
- * Manually set auth session from tokens (React Native deep link OAuth)
1299
- *
1300
- * Use this method to set the user session after receiving tokens from a deep link callback.
1301
- * This is the React Native equivalent of automatic URL token detection on web.
1302
- *
1303
- * @param tokens - Auth tokens received from deep link or OAuth callback
1304
- * @param persist - Whether to persist tokens to storage (default: true)
1305
- *
1306
- * @example
1307
- * // React Native: Handle deep link OAuth callback
1308
- * import * as Linking from 'expo-linking'
1309
- *
1310
- * Linking.addEventListener('url', async ({ url }) => {
1311
- * const { queryParams } = Linking.parse(url)
1312
- *
1313
- * if (queryParams.access_token) {
1314
- * await blink.auth.setSession({
1315
- * access_token: queryParams.access_token,
1316
- * refresh_token: queryParams.refresh_token,
1317
- * expires_in: parseInt(queryParams.expires_in) || 3600,
1318
- * refresh_expires_in: parseInt(queryParams.refresh_expires_in)
1319
- * })
1320
- *
1321
- * console.log('User authenticated:', blink.auth.currentUser())
1322
- * }
1323
- * })
1324
- */
1325
- setSession(tokens: {
1326
- access_token: string;
1327
- refresh_token?: string;
1328
- expires_in?: number;
1329
- refresh_expires_in?: number;
1330
- }, persist?: boolean): Promise<BlinkUser>;
1331
1102
  /**
1332
1103
  * Refresh access token using refresh token
1333
1104
  */
@@ -1352,10 +1123,6 @@ declare class BlinkAuth {
1352
1123
  * Generate secure random state for OAuth flows
1353
1124
  */
1354
1125
  private generateState;
1355
- /**
1356
- * Generate unique session ID for mobile OAuth
1357
- */
1358
- private generateSessionId;
1359
1126
  /**
1360
1127
  * Extract magic link token from URL
1361
1128
  */
@@ -2297,4 +2064,4 @@ declare class BlinkRealtimeImpl implements BlinkRealtime {
2297
2064
  onPresence(channelName: string, callback: (users: PresenceUser[]) => void): () => void;
2298
2065
  }
2299
2066
 
2300
- export { type AnalyticsEvent, AsyncStorageAdapter, type AuthState, type AuthStateChangeCallback, type AuthTokens, type BlinkAI, BlinkAIImpl, type BlinkAnalytics, BlinkAnalyticsImpl, type BlinkClient, type BlinkClientConfig, type BlinkData, BlinkDataImpl, BlinkDatabase, type BlinkRealtime, BlinkRealtimeChannel, BlinkRealtimeError, BlinkRealtimeImpl, type BlinkStorage, BlinkStorageImpl, BlinkTable, type BlinkUser, type CreateOptions, type DataExtraction, type FileObject, type FilterCondition, type ImageGenerationRequest, type ImageGenerationResponse, type Message, NoOpStorageAdapter, type ObjectGenerationRequest, type ObjectGenerationResponse, type PresenceUser, type QueryOptions, type RealtimeChannel, type RealtimeGetMessagesOptions, type RealtimeMessage, type RealtimePublishOptions, type RealtimeSubscribeOptions, type SearchRequest, type SearchResponse, type SpeechGenerationRequest, type SpeechGenerationResponse, type StorageAdapter, type StorageUploadOptions, type StorageUploadResponse, type TableOperations, type TextGenerationRequest, type TextGenerationResponse, type TokenUsage, type TranscriptionRequest, type TranscriptionResponse, type UpdateOptions, type UpsertOptions, type WebBrowserModule, WebStorageAdapter, createClient, getDefaultStorageAdapter, isBrowser, isNode, isReactNative, isWeb, platform };
2067
+ export { type AnalyticsEvent, AsyncStorageAdapter, type AuthState, type AuthStateChangeCallback, type AuthTokens, type BlinkAI, BlinkAIImpl, type BlinkAnalytics, BlinkAnalyticsImpl, type BlinkClient, type BlinkClientConfig, type BlinkData, BlinkDataImpl, BlinkDatabase, type BlinkRealtime, BlinkRealtimeChannel, BlinkRealtimeError, BlinkRealtimeImpl, type BlinkStorage, BlinkStorageImpl, BlinkTable, type BlinkUser, type CreateOptions, type DataExtraction, type FileObject, type FilterCondition, type ImageGenerationRequest, type ImageGenerationResponse, type Message, NoOpStorageAdapter, type ObjectGenerationRequest, type ObjectGenerationResponse, type PresenceUser, type QueryOptions, type RealtimeChannel, type RealtimeGetMessagesOptions, type RealtimeMessage, type RealtimePublishOptions, type RealtimeSubscribeOptions, type SearchRequest, type SearchResponse, type SpeechGenerationRequest, type SpeechGenerationResponse, type StorageAdapter, type StorageUploadOptions, type StorageUploadResponse, type TableOperations, type TextGenerationRequest, type TextGenerationResponse, type TokenUsage, type TranscriptionRequest, type TranscriptionResponse, type UpdateOptions, type UpsertOptions, WebStorageAdapter, createClient, getDefaultStorageAdapter, isBrowser, isNode, isReactNative, isWeb, platform };