@insforge/sdk 0.0.58-dev.0 → 0.0.58-dev.10

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,249 +1,249 @@
1
- # insforge-sdk-js
2
-
3
- [![npm version](https://img.shields.io/npm/v/@insforge/sdk.svg)](https://www.npmjs.com/package/@insforge/sdk)
4
- [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
5
-
6
- Official TypeScript/JavaScript SDK for [InsForge](https://github.com/InsForge/InsForge) - A powerful, open-source Backend-as-a-Service (BaaS) platform.
7
-
8
- ## Features
9
-
10
- - **Authentication** - Email/password, OAuth (Google, GitHub), session management
11
- - **Database** - Full PostgreSQL database access with PostgREST
12
- - **Storage** - File upload and management with S3-compatible storage
13
- - **Edge Functions** - Serverless function invocation
14
- - **AI Integration** - Built-in AI capabilities
15
- - **TypeScript** - Full TypeScript support with type definitions
16
- - **Automatic OAuth Handling** - Seamless OAuth callback detection
17
-
18
- ## Installation
19
-
20
- ```bash
21
- npm install @insforge/sdk
22
- ```
23
-
24
- Or with yarn:
25
-
26
- ```bash
27
- yarn add @insforge/sdk
28
- ```
29
-
30
- ## Quick Start
31
-
32
- ### Initialize the Client
33
-
34
- ```javascript
35
- import { createClient } from '@insforge/sdk';
36
-
37
- const insforge = createClient({
38
- baseUrl: 'http://localhost:7130' // Your InsForge backend URL
39
- });
40
- ```
41
-
42
- ### Authentication
43
-
44
- ```javascript
45
- // Sign up a new user
46
- const { data, error } = await insforge.auth.signUp({
47
- email: 'user@example.com',
48
- password: 'securePassword123',
49
- name: 'John Doe' // optional
50
- });
51
-
52
- // Sign in with email/password
53
- const { data, error } = await insforge.auth.signInWithPassword({
54
- email: 'user@example.com',
55
- password: 'securePassword123'
56
- });
57
-
58
- // OAuth authentication (Google, GitHub)
59
- await insforge.auth.signInWithOAuth({
60
- provider: 'google',
61
- redirectTo: 'http://localhost:3000/dashboard'
62
- });
63
-
64
- // Get current user
65
- const { data: user } = await insforge.auth.getCurrentUser();
66
-
67
- // Sign out
68
- await insforge.auth.signOut();
69
- ```
70
-
71
- ### Database Operations
72
-
73
- ```javascript
74
- // Insert data
75
- const { data, error } = await insforge.database
76
- .from('posts')
77
- .insert([
78
- { title: 'My First Post', content: 'Hello World!' }
79
- ]);
80
-
81
- // Query data
82
- const { data, error } = await insforge.database
83
- .from('posts')
84
- .select('*')
85
- .eq('author_id', userId);
86
-
87
- // Update data
88
- const { data, error } = await insforge.database
89
- .from('posts')
90
- .update({ title: 'Updated Title' })
91
- .eq('id', postId);
92
-
93
- // Delete data
94
- const { data, error } = await insforge.database
95
- .from('posts')
96
- .delete()
97
- .eq('id', postId);
98
- ```
99
-
100
- ### File Storage
101
-
102
- ```javascript
103
- // Upload a file
104
- const file = document.querySelector('input[type="file"]').files[0];
105
- const { data, error } = await insforge.storage
106
- .from('avatars')
107
- .upload(file);
108
-
109
- // Download a file
110
- const { data, error } = await insforge.storage
111
- .from('avatars')
112
- .download('user-avatar.png');
113
-
114
- // Delete a file
115
- const { data, error } = await insforge.storage
116
- .from('avatars')
117
- .remove(['user-avatar.png']);
118
-
119
- // List files
120
- const { data, error } = await insforge.storage
121
- .from('avatars')
122
- .list();
123
- ```
124
-
125
- ### Edge Functions
126
-
127
- ```javascript
128
- // Invoke an edge function
129
- const { data, error } = await insforge.functions.invoke('my-function', {
130
- body: { key: 'value' }
131
- });
132
- ```
133
-
134
- ### AI Integration
135
-
136
- ```javascript
137
- // Generate text completion
138
- const { data, error } = await insforge.ai.completion({
139
- model: 'gpt-3.5-turbo',
140
- prompt: 'Write a hello world program'
141
- });
142
-
143
- // Analyze an image
144
- const { data, error } = await insforge.ai.vision({
145
- imageUrl: 'https://example.com/image.jpg',
146
- prompt: 'Describe this image'
147
- });
148
- ```
149
-
150
- ## Documentation
151
-
152
- For complete API reference and advanced usage, see:
153
-
154
- - **[SDK Reference](./SDK-REFERENCE.md)** - Complete API documentation
155
- - **[InsForge Main Repository](https://github.com/InsForge/InsForge)** - Backend platform and setup guides
156
-
157
- ## Configuration
158
-
159
- The SDK supports the following configuration options:
160
-
161
- ```javascript
162
- const insforge = createClient({
163
- baseUrl: 'http://localhost:7130', // Required: Your InsForge backend URL
164
- storageStrategy: 'localStorage' // Optional: 'localStorage' or 'memory' (default: 'localStorage')
165
- });
166
- ```
167
-
168
- ## TypeScript Support
169
-
170
- The SDK is written in TypeScript and provides full type definitions:
171
-
172
- ```typescript
173
- import { createClient, InsForgeClient, User, Session } from '@insforge/sdk';
174
-
175
- const insforge: InsForgeClient = createClient({
176
- baseUrl: 'http://localhost:7130'
177
- });
178
-
179
- // Type-safe API calls
180
- const response: { data: User | null; error: Error | null } =
181
- await insforge.auth.getCurrentUser();
182
- ```
183
-
184
- ## Error Handling
185
-
186
- All SDK methods return a consistent response format:
187
-
188
- ```javascript
189
- const { data, error } = await insforge.auth.signUp({...});
190
-
191
- if (error) {
192
- console.error('Error:', error.message);
193
- console.error('Status:', error.statusCode);
194
- } else {
195
- console.log('Success:', data);
196
- }
197
- ```
198
-
199
- ## Browser Support
200
-
201
- The SDK works in all modern browsers that support:
202
- - ES6+ features
203
- - Fetch API
204
- - LocalStorage (for session management)
205
-
206
- For Node.js environments, ensure you're using Node.js 18 or higher.
207
-
208
- ## Contributing
209
-
210
- We welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md) for details.
211
-
212
- ### Development Setup
213
-
214
- ```bash
215
- # Clone the repository
216
- git clone https://github.com/InsForge/insforge-sdk-js.git
217
- cd insforge-sdk-js
218
-
219
- # Install dependencies
220
- npm install
221
-
222
- # Build the SDK
223
- npm run build
224
-
225
- # Run tests
226
- npm test
227
-
228
- # Run integration tests
229
- npm run test:integration
230
- ```
231
-
232
- ## License
233
-
234
- This project is licensed under the Apache License 2.0 - see the [LICENSE](./LICENSE) file for details.
235
-
236
- ## Community & Support
237
-
238
- - **GitHub Issues**: [Report bugs or request features](https://github.com/InsForge/insforge-sdk-js/issues)
239
- - **Documentation**: [https://docs.insforge.com](https://docs.insforge.com)
240
- - **Main Repository**: [InsForge Backend Platform](https://github.com/InsForge/InsForge)
241
-
242
- ## Related Projects
243
-
244
- - **[InsForge](https://github.com/InsForge/InsForge)** - The main InsForge backend platform
245
- - **[InsForge MCP](https://github.com/InsForge/insforge-mcp)** - Model Context Protocol server for InsForge
246
-
247
- ---
248
-
249
- Built with ❤️ by the InsForge team
1
+ # insforge-sdk-js
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@insforge/sdk.svg)](https://www.npmjs.com/package/@insforge/sdk)
4
+ [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
5
+
6
+ Official TypeScript/JavaScript SDK for [InsForge](https://github.com/InsForge/InsForge) - A powerful, open-source Backend-as-a-Service (BaaS) platform.
7
+
8
+ ## Features
9
+
10
+ - **Authentication** - Email/password, OAuth (Google, GitHub), session management
11
+ - **Database** - Full PostgreSQL database access with PostgREST
12
+ - **Storage** - File upload and management with S3-compatible storage
13
+ - **Edge Functions** - Serverless function invocation
14
+ - **AI Integration** - Built-in AI capabilities
15
+ - **TypeScript** - Full TypeScript support with type definitions
16
+ - **Automatic OAuth Handling** - Seamless OAuth callback detection
17
+
18
+ ## Installation
19
+
20
+ ```bash
21
+ npm install @insforge/sdk
22
+ ```
23
+
24
+ Or with yarn:
25
+
26
+ ```bash
27
+ yarn add @insforge/sdk
28
+ ```
29
+
30
+ ## Quick Start
31
+
32
+ ### Initialize the Client
33
+
34
+ ```javascript
35
+ import { createClient } from '@insforge/sdk';
36
+
37
+ const insforge = createClient({
38
+ baseUrl: 'http://localhost:7130' // Your InsForge backend URL
39
+ });
40
+ ```
41
+
42
+ ### Authentication
43
+
44
+ ```javascript
45
+ // Sign up a new user
46
+ const { data, error } = await insforge.auth.signUp({
47
+ email: 'user@example.com',
48
+ password: 'securePassword123',
49
+ name: 'John Doe' // optional
50
+ });
51
+
52
+ // Sign in with email/password
53
+ const { data, error } = await insforge.auth.signInWithPassword({
54
+ email: 'user@example.com',
55
+ password: 'securePassword123'
56
+ });
57
+
58
+ // OAuth authentication (Google, GitHub)
59
+ await insforge.auth.signInWithOAuth({
60
+ provider: 'google',
61
+ redirectTo: 'http://localhost:3000/dashboard'
62
+ });
63
+
64
+ // Get current user
65
+ const { data: user } = await insforge.auth.getCurrentUser();
66
+
67
+ // Sign out
68
+ await insforge.auth.signOut();
69
+ ```
70
+
71
+ ### Database Operations
72
+
73
+ ```javascript
74
+ // Insert data
75
+ const { data, error } = await insforge.database
76
+ .from('posts')
77
+ .insert([
78
+ { title: 'My First Post', content: 'Hello World!' }
79
+ ]);
80
+
81
+ // Query data
82
+ const { data, error } = await insforge.database
83
+ .from('posts')
84
+ .select('*')
85
+ .eq('author_id', userId);
86
+
87
+ // Update data
88
+ const { data, error } = await insforge.database
89
+ .from('posts')
90
+ .update({ title: 'Updated Title' })
91
+ .eq('id', postId);
92
+
93
+ // Delete data
94
+ const { data, error } = await insforge.database
95
+ .from('posts')
96
+ .delete()
97
+ .eq('id', postId);
98
+ ```
99
+
100
+ ### File Storage
101
+
102
+ ```javascript
103
+ // Upload a file
104
+ const file = document.querySelector('input[type="file"]').files[0];
105
+ const { data, error } = await insforge.storage
106
+ .from('avatars')
107
+ .upload(file);
108
+
109
+ // Download a file
110
+ const { data, error } = await insforge.storage
111
+ .from('avatars')
112
+ .download('user-avatar.png');
113
+
114
+ // Delete a file
115
+ const { data, error } = await insforge.storage
116
+ .from('avatars')
117
+ .remove(['user-avatar.png']);
118
+
119
+ // List files
120
+ const { data, error } = await insforge.storage
121
+ .from('avatars')
122
+ .list();
123
+ ```
124
+
125
+ ### Edge Functions
126
+
127
+ ```javascript
128
+ // Invoke an edge function
129
+ const { data, error } = await insforge.functions.invoke('my-function', {
130
+ body: { key: 'value' }
131
+ });
132
+ ```
133
+
134
+ ### AI Integration
135
+
136
+ ```javascript
137
+ // Generate text completion
138
+ const { data, error } = await insforge.ai.completion({
139
+ model: 'gpt-3.5-turbo',
140
+ prompt: 'Write a hello world program'
141
+ });
142
+
143
+ // Analyze an image
144
+ const { data, error } = await insforge.ai.vision({
145
+ imageUrl: 'https://example.com/image.jpg',
146
+ prompt: 'Describe this image'
147
+ });
148
+ ```
149
+
150
+ ## Documentation
151
+
152
+ For complete API reference and advanced usage, see:
153
+
154
+ - **[SDK Reference](./SDK-REFERENCE.md)** - Complete API documentation
155
+ - **[InsForge Main Repository](https://github.com/InsForge/InsForge)** - Backend platform and setup guides
156
+
157
+ ## Configuration
158
+
159
+ The SDK supports the following configuration options:
160
+
161
+ ```javascript
162
+ const insforge = createClient({
163
+ baseUrl: 'http://localhost:7130', // Required: Your InsForge backend URL
164
+ storageStrategy: 'localStorage' // Optional: 'localStorage' or 'memory' (default: 'localStorage')
165
+ });
166
+ ```
167
+
168
+ ## TypeScript Support
169
+
170
+ The SDK is written in TypeScript and provides full type definitions:
171
+
172
+ ```typescript
173
+ import { createClient, InsForgeClient, User, Session } from '@insforge/sdk';
174
+
175
+ const insforge: InsForgeClient = createClient({
176
+ baseUrl: 'http://localhost:7130'
177
+ });
178
+
179
+ // Type-safe API calls
180
+ const response: { data: User | null; error: Error | null } =
181
+ await insforge.auth.getCurrentUser();
182
+ ```
183
+
184
+ ## Error Handling
185
+
186
+ All SDK methods return a consistent response format:
187
+
188
+ ```javascript
189
+ const { data, error } = await insforge.auth.signUp({...});
190
+
191
+ if (error) {
192
+ console.error('Error:', error.message);
193
+ console.error('Status:', error.statusCode);
194
+ } else {
195
+ console.log('Success:', data);
196
+ }
197
+ ```
198
+
199
+ ## Browser Support
200
+
201
+ The SDK works in all modern browsers that support:
202
+ - ES6+ features
203
+ - Fetch API
204
+ - LocalStorage (for session management)
205
+
206
+ For Node.js environments, ensure you're using Node.js 18 or higher.
207
+
208
+ ## Contributing
209
+
210
+ We welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md) for details.
211
+
212
+ ### Development Setup
213
+
214
+ ```bash
215
+ # Clone the repository
216
+ git clone https://github.com/InsForge/insforge-sdk-js.git
217
+ cd insforge-sdk-js
218
+
219
+ # Install dependencies
220
+ npm install
221
+
222
+ # Build the SDK
223
+ npm run build
224
+
225
+ # Run tests
226
+ npm test
227
+
228
+ # Run integration tests
229
+ npm run test:integration
230
+ ```
231
+
232
+ ## License
233
+
234
+ This project is licensed under the Apache License 2.0 - see the [LICENSE](./LICENSE) file for details.
235
+
236
+ ## Community & Support
237
+
238
+ - **GitHub Issues**: [Report bugs or request features](https://github.com/InsForge/insforge-sdk-js/issues)
239
+ - **Documentation**: [https://docs.insforge.com](https://docs.insforge.com)
240
+ - **Main Repository**: [InsForge Backend Platform](https://github.com/InsForge/InsForge)
241
+
242
+ ## Related Projects
243
+
244
+ - **[InsForge](https://github.com/InsForge/InsForge)** - The main InsForge backend platform
245
+ - **[InsForge MCP](https://github.com/InsForge/insforge-mcp)** - Model Context Protocol server for InsForge
246
+
247
+ ---
248
+
249
+ Built with ❤️ by the InsForge team
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { UserSchema, CreateUserRequest, CreateUserResponse, CreateSessionRequest, CreateSessionResponse, OAuthProvidersSchema, StorageFileSchema, ListObjectsResponseSchema, ChatCompletionRequest, ImageGenerationRequest } from '@insforge/shared-schemas';
1
+ import { UserSchema, CreateUserRequest, CreateUserResponse, CreateSessionRequest, CreateSessionResponse, OAuthProvidersSchema, GetPublicAuthConfigResponse, UserIdSchema, EmailSchema, RoleSchema, StorageFileSchema, ListObjectsResponseSchema, ChatCompletionRequest, ImageGenerationRequest } from '@insforge/shared-schemas';
2
2
  export { AuthErrorResponse, CreateSessionRequest, CreateUserRequest, UserSchema } from '@insforge/shared-schemas';
3
3
  import * as _supabase_postgrest_js from '@supabase/postgrest-js';
4
4
 
@@ -106,6 +106,21 @@ declare class TokenManager {
106
106
  * Uses shared schemas for type safety
107
107
  */
108
108
 
109
+ /**
110
+ * Dynamic profile type - represents flexible profile data from database
111
+ * Fields can vary based on database schema configuration.
112
+ * All fields are converted from snake_case (database) to camelCase (API)
113
+ */
114
+ type ProfileData = Record<string, any> & {
115
+ id: string;
116
+ createdAt?: string;
117
+ updatedAt?: string;
118
+ };
119
+ /**
120
+ * Dynamic profile update type - for updating profile fields
121
+ * Supports any fields that exist in the profile table
122
+ */
123
+ type UpdateProfileData = Partial<Record<string, any>>;
109
124
  declare class Auth {
110
125
  private http;
111
126
  private tokenManager;
@@ -151,23 +166,47 @@ declare class Auth {
151
166
  signOut(): Promise<{
152
167
  error: InsForgeError | null;
153
168
  }>;
169
+ /**
170
+ * Get all public authentication configuration (OAuth + Email)
171
+ * Returns both OAuth providers and email authentication settings in one request
172
+ * This is a public endpoint that doesn't require authentication
173
+ *
174
+ * @returns Complete public authentication configuration including OAuth providers and email auth settings
175
+ *
176
+ * @example
177
+ * ```ts
178
+ * const { data, error } = await insforge.auth.getPublicAuthConfig();
179
+ * if (data) {
180
+ * console.log(`OAuth providers: ${data.oauth.data.length}`);
181
+ * console.log(`Password min length: ${data.email.passwordMinLength}`);
182
+ * }
183
+ * ```
184
+ */
185
+ getPublicAuthConfig(): Promise<{
186
+ data: GetPublicAuthConfigResponse | null;
187
+ error: InsForgeError | null;
188
+ }>;
154
189
  /**
155
190
  * Get the current user with full profile information
156
- * Returns both auth info (id, email, role) and profile data (nickname, avatar_url, bio, etc.)
191
+ * Returns both auth info (id, email, role) and profile data (dynamic fields from users table)
157
192
  */
158
193
  getCurrentUser(): Promise<{
159
194
  data: {
160
- user: any;
161
- profile: any;
195
+ user: {
196
+ id: UserIdSchema;
197
+ email: EmailSchema;
198
+ role: RoleSchema;
199
+ };
200
+ profile: ProfileData | null;
162
201
  } | null;
163
202
  error: any | null;
164
203
  }>;
165
204
  /**
166
205
  * Get any user's profile by ID
167
- * Returns profile information from the users table (nickname, avatar_url, bio, etc.)
206
+ * Returns profile information from the users table (dynamic fields)
168
207
  */
169
208
  getProfile(userId: string): Promise<{
170
- data: any | null;
209
+ data: ProfileData | null;
171
210
  error: any | null;
172
211
  }>;
173
212
  /**
@@ -182,24 +221,19 @@ declare class Auth {
182
221
  };
183
222
  /**
184
223
  * Set/Update the current user's profile
185
- * Updates profile information in the users table (nickname, avatar_url, bio, etc.)
186
- */
187
- setProfile(profile: {
188
- nickname?: string;
189
- avatar_url?: string;
190
- bio?: string;
191
- birthday?: string;
192
- [key: string]: any;
193
- }): Promise<{
194
- data: any | null;
224
+ * Updates profile information in the users table (supports any dynamic fields)
225
+ */
226
+ setProfile(profile: UpdateProfileData): Promise<{
227
+ data: ProfileData | null;
195
228
  error: any | null;
196
229
  }>;
197
230
  /**
198
- * Send email verification code or link
199
- * @param type - 'code' for numeric OTP (6 digits) or 'link' for verification link
200
- * @param email - Email address to send verification to
231
+ * Send password reset code to user's email
232
+ * Always returns success to prevent user enumeration
201
233
  */
202
- sendEmailVerification(type: 'code' | 'link', email: string): Promise<{
234
+ sendPasswordResetCode(request: {
235
+ email: string;
236
+ }): Promise<{
203
237
  data: {
204
238
  success: boolean;
205
239
  message: string;
@@ -207,38 +241,39 @@ declare class Auth {
207
241
  error: InsForgeError | null;
208
242
  }>;
209
243
  /**
210
- * Verify email with OTP
211
- * @param otp - 6-digit numeric code (with email) or 64-char hex token (without email)
212
- * @param email - Optional email address (required for code verification)
213
- */
214
- verifyEmail(otp: string, email?: string): Promise<{
215
- data: CreateSessionResponse | null;
216
- error: InsForgeError | null;
217
- }>;
218
- /**
219
- * Send password reset code or link
220
- * @param type - 'code' for numeric OTP (6 digits) or 'link' for reset link
221
- * @param email - Email address to send reset instructions to
244
+ * Reset password with OTP token
245
+ * Token can be from magic link or from code verification
222
246
  */
223
- sendResetPasswordEmail(type: 'code' | 'link', email: string): Promise<{
247
+ resetPassword(request: {
248
+ newPassword: string;
249
+ otp: string;
250
+ }): Promise<{
224
251
  data: {
225
- success: boolean;
226
252
  message: string;
253
+ redirectTo?: string;
227
254
  } | null;
228
255
  error: InsForgeError | null;
229
256
  }>;
230
257
  /**
231
- * Reset password with OTP
232
- * @param otp - 6-digit numeric code (with email) or 64-char hex token (without email)
233
- * @param newPassword - New password to set
234
- * @param email - Optional email address (required for code-based reset)
258
+ * Verify email with OTP token
259
+ * If email is provided: uses numeric OTP verification (6-digit code)
260
+ * If email is NOT provided: uses link OTP verification (64-char token)
235
261
  */
236
- resetPassword(otp: string, newPassword: string, email?: string): Promise<{
262
+ verifyEmail(request: {
263
+ email?: string;
264
+ otp: string;
265
+ }): Promise<{
237
266
  data: {
238
- message: string;
267
+ accessToken: string;
268
+ user?: any;
239
269
  } | null;
240
270
  error: InsForgeError | null;
241
271
  }>;
272
+ /**
273
+ * Set the current session
274
+ * This is used to set the session from the OAuth callback
275
+ */
276
+ setSession(session: AuthSession): Promise<void>;
242
277
  }
243
278
 
244
279
  /**
@@ -572,4 +607,4 @@ declare class InsForgeClient {
572
607
 
573
608
  declare function createClient(config: InsForgeConfig): InsForgeClient;
574
609
 
575
- export { AI, type ApiError, Auth, type AuthSession, type InsForgeConfig as ClientOptions, Database, type FunctionInvokeOptions, Functions, HttpClient, InsForgeClient, type InsForgeConfig, InsForgeError, Storage, StorageBucket, type StorageResponse, TokenManager, type TokenStorage, createClient, InsForgeClient as default };
610
+ export { AI, type ApiError, Auth, type AuthSession, type InsForgeConfig as ClientOptions, Database, type FunctionInvokeOptions, Functions, HttpClient, InsForgeClient, type InsForgeConfig, InsForgeError, type ProfileData, Storage, StorageBucket, type StorageResponse, TokenManager, type TokenStorage, type UpdateProfileData, createClient, InsForgeClient as default };