@vaiftech/client 1.0.2 → 1.0.4

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
@@ -23,9 +23,34 @@ const vaif = createVaifClient({
23
23
  });
24
24
  ```
25
25
 
26
- ## Features
27
-
28
- ### Authentication
26
+ ## Modules
27
+
28
+ The client provides access to the following modules:
29
+
30
+ | Module | Description |
31
+ |--------|-------------|
32
+ | `vaif.auth` | Authentication (email, OAuth, MFA, magic link) |
33
+ | `vaif.from()` | Database operations with query builder |
34
+ | `vaif.mongodb` | MongoDB document database |
35
+ | `vaif.realtime()` | Real-time subscriptions and presence |
36
+ | `vaif.storage` | File storage and CDN |
37
+ | `vaif.functions` | Edge functions |
38
+ | `vaif.projects` | Project management |
39
+ | `vaif.orgs` | Organization management |
40
+ | `vaif.schema` | Database schema migrations |
41
+ | `vaif.secrets` | Secret management |
42
+ | `vaif.deployments` | Deployment management |
43
+ | `vaif.integrations` | Webhooks and events |
44
+ | `vaif.billing` | Billing and subscriptions |
45
+ | `vaif.flags` | Feature flags |
46
+ | `vaif.security` | Security and environment variables |
47
+ | `vaif.ai` | AI-powered code generation |
48
+ | `vaif.templates` | Project templates |
49
+ | `vaif.oauth` | OAuth provider configuration |
50
+ | `vaif.docs` | Documentation management |
51
+ | `vaif.admin` | Admin operations |
52
+
53
+ ## Authentication
29
54
 
30
55
  ```typescript
31
56
  // Sign up
@@ -46,6 +71,13 @@ const { url } = await vaif.auth.signInWithOAuth({
46
71
  redirectTo: 'https://myapp.com/callback',
47
72
  });
48
73
 
74
+ // Magic Link
75
+ await vaif.auth.requestMagicLink({ email: 'user@example.com' });
76
+
77
+ // MFA
78
+ const { qrCode, secret } = await vaif.auth.setupMFA({ method: 'totp' });
79
+ await vaif.auth.verifyMFA({ code: '123456' });
80
+
49
81
  // Get current user
50
82
  const user = await vaif.auth.getUser();
51
83
 
@@ -53,7 +85,31 @@ const user = await vaif.auth.getUser();
53
85
  await vaif.auth.signOut();
54
86
  ```
55
87
 
56
- ### Database Operations
88
+ ### Standalone Auth Client
89
+
90
+ For auth-only applications, use the standalone auth package:
91
+
92
+ ```typescript
93
+ import { createAuthClient } from '@vaiftech/client';
94
+ // or import directly: import { createAuthClient } from '@vaiftech/auth';
95
+
96
+ const auth = createAuthClient({
97
+ url: 'https://api.vaif.studio',
98
+ apiKey: 'your-project-key',
99
+ });
100
+
101
+ // Full auth functionality
102
+ await auth.signInWithPassword({ email, password });
103
+ await auth.signInWithOAuth({ provider: 'google' });
104
+ await auth.signInWithMagicLink({ email });
105
+
106
+ // Session management
107
+ auth.onAuthStateChange((event) => {
108
+ console.log('Auth event:', event.event);
109
+ });
110
+ ```
111
+
112
+ ## Database Operations
57
113
 
58
114
  ```typescript
59
115
  // Define your types
@@ -93,12 +149,126 @@ await vaif.from<User>('users')
93
149
  .eq('id', 'user-123')
94
150
  .delete();
95
151
 
152
+ // Batch operations
153
+ await vaif.from<User>('users').batchCreate([
154
+ { email: 'user1@example.com', name: 'User 1' },
155
+ { email: 'user2@example.com', name: 'User 2' },
156
+ ]);
157
+
96
158
  // Pagination
97
159
  const { data, total, page, pageSize } = await vaif.from<User>('users')
98
160
  .paginate({ page: 1, pageSize: 20 });
161
+
162
+ // Aggregations
163
+ const stats = await vaif.from<User>('users')
164
+ .aggregate({ count: '*', avg: 'age' });
165
+ ```
166
+
167
+ ## MongoDB Operations
168
+
169
+ Full MongoDB support for document-based data:
170
+
171
+ ```typescript
172
+ // Get a collection reference
173
+ const users = vaif.mongodb.collection<User>('users');
174
+
175
+ // Find documents
176
+ const activeUsers = await users.find({
177
+ filter: { status: 'active' },
178
+ sort: { createdAt: -1 },
179
+ limit: 10,
180
+ });
181
+
182
+ // Find one document
183
+ const user = await users.findOne({ email: 'user@example.com' });
184
+
185
+ // Find by ID
186
+ const userById = await users.findById('507f1f77bcf86cd799439011');
187
+
188
+ // Insert documents
189
+ const newUser = await users.insertOne({
190
+ email: 'new@example.com',
191
+ name: 'New User',
192
+ createdAt: new Date(),
193
+ });
194
+
195
+ const manyUsers = await users.insertMany([
196
+ { email: 'user1@example.com', name: 'User 1' },
197
+ { email: 'user2@example.com', name: 'User 2' },
198
+ ]);
199
+
200
+ // Update documents
201
+ await users.updateOne(
202
+ { email: 'user@example.com' },
203
+ { $set: { name: 'Updated Name' } }
204
+ );
205
+
206
+ await users.updateMany(
207
+ { status: 'pending' },
208
+ { $set: { status: 'active' } }
209
+ );
210
+
211
+ // Atomic operations
212
+ const updated = await users.findOneAndUpdate(
213
+ { email: 'user@example.com' },
214
+ { $inc: { loginCount: 1 } },
215
+ { returnDocument: 'after' }
216
+ );
217
+
218
+ // Delete documents
219
+ await users.deleteOne({ email: 'old@example.com' });
220
+ await users.deleteMany({ status: 'inactive' });
221
+
222
+ // Aggregation pipeline
223
+ const stats = await users.aggregate([
224
+ { $match: { status: 'active' } },
225
+ { $group: { _id: '$country', count: { $sum: 1 } } },
226
+ { $sort: { count: -1 } },
227
+ ]);
228
+
229
+ // Count and distinct
230
+ const totalUsers = await users.count({ status: 'active' });
231
+ const countries = await users.distinct('country', { status: 'active' });
232
+
233
+ // Index management
234
+ const indexes = await users.listIndexes();
235
+ await users.createIndex({ email: 1 }, { unique: true });
236
+ await users.dropIndex('old_index');
237
+
238
+ // Bulk operations
239
+ await users.bulkWrite([
240
+ { insertOne: { document: { email: 'bulk@example.com' } } },
241
+ { updateOne: { filter: { email: 'old@example.com' }, update: { $set: { migrated: true } } } },
242
+ { deleteOne: { filter: { email: 'remove@example.com' } } },
243
+ ]);
244
+
245
+ // Collection management
246
+ const collections = await vaif.mongodb.listCollections();
247
+ await vaif.mongodb.createCollection('logs');
99
248
  ```
100
249
 
101
- ### Realtime Subscriptions
250
+ ### Cursor Support
251
+
252
+ For large datasets, use cursors to paginate through results:
253
+
254
+ ```typescript
255
+ const cursor = await users.findWithCursor({
256
+ filter: { status: 'active' },
257
+ batchSize: 100,
258
+ });
259
+
260
+ let batch = await cursor.next();
261
+ while (batch.length > 0) {
262
+ for (const user of batch) {
263
+ console.log(user.email);
264
+ }
265
+ batch = await cursor.next();
266
+ }
267
+
268
+ await cursor.close();
269
+ ```
270
+
271
+ ## Realtime Subscriptions
102
272
 
103
273
  ```typescript
104
274
  const realtime = vaif.realtime();
@@ -132,7 +302,7 @@ realtime.unsubscribe({ table: 'messages' });
132
302
  await realtime.disconnect();
133
303
  ```
134
304
 
135
- ### Storage
305
+ ## Storage
136
306
 
137
307
  ```typescript
138
308
  // Upload file
@@ -157,9 +327,15 @@ const { files } = await vaif.storage.list({ prefix: 'avatars/' });
157
327
 
158
328
  // Delete file
159
329
  await vaif.storage.delete('avatars/old-avatar.jpg');
330
+
331
+ // Multipart uploads for large files
332
+ const upload = await vaif.storage.createMultipartUpload('large-file.zip');
333
+ await vaif.storage.uploadPart(upload.uploadId, 1, chunk1);
334
+ await vaif.storage.uploadPart(upload.uploadId, 2, chunk2);
335
+ await vaif.storage.completeMultipartUpload(upload.uploadId, parts);
160
336
  ```
161
337
 
162
- ### Edge Functions
338
+ ## Edge Functions
163
339
 
164
340
  ```typescript
165
341
  // Invoke a function
@@ -169,13 +345,57 @@ const result = await vaif.functions.invoke('send-email', {
169
345
  body: 'Welcome to VAIF!',
170
346
  });
171
347
 
348
+ // Invoke with options
349
+ const result = await vaif.functions.invoke('process-data', payload, {
350
+ timeout: 30000,
351
+ retry: { attempts: 3, backoff: 'exponential' },
352
+ });
353
+
354
+ // Batch invoke
355
+ const results = await vaif.functions.batchInvoke([
356
+ { name: 'func1', payload: { data: 1 } },
357
+ { name: 'func2', payload: { data: 2 } },
358
+ ]);
359
+
172
360
  // List functions
173
361
  const functions = await vaif.functions.list({ projectId: 'proj-123' });
362
+
363
+ // Deploy a function
364
+ await vaif.functions.deploy('my-function', {
365
+ code: functionCode,
366
+ runtime: 'node20',
367
+ });
368
+ ```
369
+
370
+ ## Integrations (Webhooks & Events)
371
+
372
+ ```typescript
373
+ // Create a webhook subscription
374
+ const subscription = await vaif.integrations.createSubscription({
375
+ type: 'webhook',
376
+ url: 'https://myapp.com/webhooks',
377
+ events: ['user.created', 'user.updated'],
378
+ secret: 'whsec_xxx',
379
+ });
380
+
381
+ // Publish custom events
382
+ await vaif.integrations.publish({
383
+ name: 'order.completed',
384
+ data: { orderId: '123', amount: 99.99 },
385
+ });
386
+
387
+ // List webhook deliveries
388
+ const deliveries = await vaif.integrations.listDeliveries({
389
+ subscriptionId: 'sub-123',
390
+ });
391
+
392
+ // Retry failed delivery
393
+ await vaif.integrations.retryDelivery('delivery-123');
174
394
  ```
175
395
 
176
396
  ## TypeScript Support
177
397
 
178
- The SDK is fully typed. Use generics for type-safe database operations:
398
+ The SDK is fully typed. Use generics for type-safe operations:
179
399
 
180
400
  ```typescript
181
401
  interface Post {
@@ -189,10 +409,39 @@ interface Post {
189
409
  // Full type inference
190
410
  const posts = await vaif.from<Post>('posts').list();
191
411
  // posts is Post[]
412
+
413
+ // MongoDB with types
414
+ const users = vaif.mongodb.collection<User>('users');
415
+ const user = await users.findOne({ email: 'test@example.com' });
416
+ // user is User | null
417
+ ```
418
+
419
+ ## Error Handling
420
+
421
+ ```typescript
422
+ import {
423
+ VaifError,
424
+ VaifAuthError,
425
+ VaifNotFoundError,
426
+ isVaifError
427
+ } from '@vaiftech/client';
428
+
429
+ try {
430
+ await vaif.from('users').eq('id', 'invalid').single();
431
+ } catch (error) {
432
+ if (error instanceof VaifNotFoundError) {
433
+ console.log('User not found');
434
+ } else if (error instanceof VaifAuthError) {
435
+ console.log('Authentication failed');
436
+ } else if (isVaifError(error)) {
437
+ console.log('VAIF error:', error.message);
438
+ }
439
+ }
192
440
  ```
193
441
 
194
442
  ## Related Packages
195
443
 
444
+ - [@vaiftech/auth](https://www.npmjs.com/package/@vaiftech/auth) - Standalone authentication client
196
445
  - [@vaiftech/react](https://www.npmjs.com/package/@vaiftech/react) - React hooks
197
446
  - [@vaiftech/sdk-expo](https://www.npmjs.com/package/@vaiftech/sdk-expo) - React Native/Expo SDK
198
447
  - [@vaiftech/cli](https://www.npmjs.com/package/@vaiftech/cli) - CLI tools
package/dist/index.d.mts CHANGED
@@ -4132,6 +4132,124 @@ interface PortalResponse {
4132
4132
  interface PlansResponse {
4133
4133
  plans: PlanDefinition[];
4134
4134
  }
4135
+ /**
4136
+ * AI usage summary for billing dashboard
4137
+ */
4138
+ interface AIUsageSummary {
4139
+ ok: boolean;
4140
+ plan: PlanName;
4141
+ periodStart: string;
4142
+ periodEnd: string;
4143
+ daysRemaining: number;
4144
+ creditsIncluded: number;
4145
+ creditsUsed: number;
4146
+ creditsRemaining: number;
4147
+ percentUsed: number;
4148
+ customBudgetCents: number | null;
4149
+ hardStopEnabled: boolean;
4150
+ overagesEnabled: boolean;
4151
+ dailyAverageCents: number;
4152
+ projectedMonthEndCents: number;
4153
+ withinBudget: boolean;
4154
+ aiEnabled: boolean;
4155
+ providersAllowed: string[];
4156
+ maxRequestTokens: number;
4157
+ maxOutputTokens: number;
4158
+ }
4159
+ /**
4160
+ * AI usage history entry (daily)
4161
+ */
4162
+ interface AIUsageHistoryEntry {
4163
+ date: string;
4164
+ requests: number;
4165
+ totalTokens: number;
4166
+ costCents: number;
4167
+ creditsCharged: number;
4168
+ }
4169
+ /**
4170
+ * AI usage history response
4171
+ */
4172
+ interface AIUsageHistoryResponse {
4173
+ ok: boolean;
4174
+ orgId: string;
4175
+ periodStart: string;
4176
+ periodEnd: string;
4177
+ history: AIUsageHistoryEntry[];
4178
+ }
4179
+ /**
4180
+ * AI usage breakdown item
4181
+ */
4182
+ interface AIUsageBreakdownItem {
4183
+ requests: number;
4184
+ totalTokens: number;
4185
+ costCents: number;
4186
+ creditsCharged: number;
4187
+ }
4188
+ /**
4189
+ * AI usage breakdown by feature
4190
+ */
4191
+ interface AIUsageByFeature extends AIUsageBreakdownItem {
4192
+ featureTag: string;
4193
+ }
4194
+ /**
4195
+ * AI usage breakdown by provider
4196
+ */
4197
+ interface AIUsageByProvider extends AIUsageBreakdownItem {
4198
+ provider: string;
4199
+ }
4200
+ /**
4201
+ * AI usage breakdown by model
4202
+ */
4203
+ interface AIUsageByModel extends AIUsageBreakdownItem {
4204
+ model: string;
4205
+ provider: string;
4206
+ }
4207
+ /**
4208
+ * AI usage breakdown response
4209
+ */
4210
+ interface AIUsageBreakdownResponse {
4211
+ ok: boolean;
4212
+ orgId: string;
4213
+ periodStart: string;
4214
+ periodEnd: string;
4215
+ byFeature: AIUsageByFeature[];
4216
+ byProvider: AIUsageByProvider[];
4217
+ byModel: AIUsageByModel[];
4218
+ }
4219
+ /**
4220
+ * Recent AI request
4221
+ */
4222
+ interface RecentAIRequest {
4223
+ id: string;
4224
+ projectId: string | null;
4225
+ userId: string | null;
4226
+ provider: string;
4227
+ model: string;
4228
+ taskType: string;
4229
+ featureTag: string | null;
4230
+ environment: string | null;
4231
+ promptTokens: number;
4232
+ completionTokens: number;
4233
+ totalTokens: number;
4234
+ costCents: number;
4235
+ creditsCharged: number;
4236
+ requestId: string | null;
4237
+ cached: boolean;
4238
+ createdAt: string;
4239
+ }
4240
+ /**
4241
+ * Recent AI requests response
4242
+ */
4243
+ interface RecentAIRequestsResponse {
4244
+ ok: boolean;
4245
+ orgId: string;
4246
+ requests: RecentAIRequest[];
4247
+ pagination: {
4248
+ limit: number;
4249
+ offset: number;
4250
+ total: number;
4251
+ };
4252
+ }
4135
4253
  /**
4136
4254
  * Billing module interface
4137
4255
  */
@@ -4160,6 +4278,22 @@ interface BillingModule {
4160
4278
  * Open Stripe billing portal for managing subscription
4161
4279
  */
4162
4280
  openPortal(input: PortalInput): Promise<PortalResponse>;
4281
+ /**
4282
+ * Get AI credits usage summary for billing dashboard
4283
+ */
4284
+ getAIUsageSummary(orgId: string): Promise<AIUsageSummary>;
4285
+ /**
4286
+ * Get AI usage history (daily) for charts
4287
+ */
4288
+ getAIUsageHistory(orgId: string, days?: number): Promise<AIUsageHistoryResponse>;
4289
+ /**
4290
+ * Get AI usage breakdown by feature, provider, and model
4291
+ */
4292
+ getAIUsageBreakdown(orgId: string): Promise<AIUsageBreakdownResponse>;
4293
+ /**
4294
+ * Get recent AI requests for detailed inspection
4295
+ */
4296
+ getRecentAIRequests(orgId: string, limit?: number, offset?: number): Promise<RecentAIRequestsResponse>;
4163
4297
  }
4164
4298
 
4165
4299
  /**
package/dist/index.d.ts CHANGED
@@ -4132,6 +4132,124 @@ interface PortalResponse {
4132
4132
  interface PlansResponse {
4133
4133
  plans: PlanDefinition[];
4134
4134
  }
4135
+ /**
4136
+ * AI usage summary for billing dashboard
4137
+ */
4138
+ interface AIUsageSummary {
4139
+ ok: boolean;
4140
+ plan: PlanName;
4141
+ periodStart: string;
4142
+ periodEnd: string;
4143
+ daysRemaining: number;
4144
+ creditsIncluded: number;
4145
+ creditsUsed: number;
4146
+ creditsRemaining: number;
4147
+ percentUsed: number;
4148
+ customBudgetCents: number | null;
4149
+ hardStopEnabled: boolean;
4150
+ overagesEnabled: boolean;
4151
+ dailyAverageCents: number;
4152
+ projectedMonthEndCents: number;
4153
+ withinBudget: boolean;
4154
+ aiEnabled: boolean;
4155
+ providersAllowed: string[];
4156
+ maxRequestTokens: number;
4157
+ maxOutputTokens: number;
4158
+ }
4159
+ /**
4160
+ * AI usage history entry (daily)
4161
+ */
4162
+ interface AIUsageHistoryEntry {
4163
+ date: string;
4164
+ requests: number;
4165
+ totalTokens: number;
4166
+ costCents: number;
4167
+ creditsCharged: number;
4168
+ }
4169
+ /**
4170
+ * AI usage history response
4171
+ */
4172
+ interface AIUsageHistoryResponse {
4173
+ ok: boolean;
4174
+ orgId: string;
4175
+ periodStart: string;
4176
+ periodEnd: string;
4177
+ history: AIUsageHistoryEntry[];
4178
+ }
4179
+ /**
4180
+ * AI usage breakdown item
4181
+ */
4182
+ interface AIUsageBreakdownItem {
4183
+ requests: number;
4184
+ totalTokens: number;
4185
+ costCents: number;
4186
+ creditsCharged: number;
4187
+ }
4188
+ /**
4189
+ * AI usage breakdown by feature
4190
+ */
4191
+ interface AIUsageByFeature extends AIUsageBreakdownItem {
4192
+ featureTag: string;
4193
+ }
4194
+ /**
4195
+ * AI usage breakdown by provider
4196
+ */
4197
+ interface AIUsageByProvider extends AIUsageBreakdownItem {
4198
+ provider: string;
4199
+ }
4200
+ /**
4201
+ * AI usage breakdown by model
4202
+ */
4203
+ interface AIUsageByModel extends AIUsageBreakdownItem {
4204
+ model: string;
4205
+ provider: string;
4206
+ }
4207
+ /**
4208
+ * AI usage breakdown response
4209
+ */
4210
+ interface AIUsageBreakdownResponse {
4211
+ ok: boolean;
4212
+ orgId: string;
4213
+ periodStart: string;
4214
+ periodEnd: string;
4215
+ byFeature: AIUsageByFeature[];
4216
+ byProvider: AIUsageByProvider[];
4217
+ byModel: AIUsageByModel[];
4218
+ }
4219
+ /**
4220
+ * Recent AI request
4221
+ */
4222
+ interface RecentAIRequest {
4223
+ id: string;
4224
+ projectId: string | null;
4225
+ userId: string | null;
4226
+ provider: string;
4227
+ model: string;
4228
+ taskType: string;
4229
+ featureTag: string | null;
4230
+ environment: string | null;
4231
+ promptTokens: number;
4232
+ completionTokens: number;
4233
+ totalTokens: number;
4234
+ costCents: number;
4235
+ creditsCharged: number;
4236
+ requestId: string | null;
4237
+ cached: boolean;
4238
+ createdAt: string;
4239
+ }
4240
+ /**
4241
+ * Recent AI requests response
4242
+ */
4243
+ interface RecentAIRequestsResponse {
4244
+ ok: boolean;
4245
+ orgId: string;
4246
+ requests: RecentAIRequest[];
4247
+ pagination: {
4248
+ limit: number;
4249
+ offset: number;
4250
+ total: number;
4251
+ };
4252
+ }
4135
4253
  /**
4136
4254
  * Billing module interface
4137
4255
  */
@@ -4160,6 +4278,22 @@ interface BillingModule {
4160
4278
  * Open Stripe billing portal for managing subscription
4161
4279
  */
4162
4280
  openPortal(input: PortalInput): Promise<PortalResponse>;
4281
+ /**
4282
+ * Get AI credits usage summary for billing dashboard
4283
+ */
4284
+ getAIUsageSummary(orgId: string): Promise<AIUsageSummary>;
4285
+ /**
4286
+ * Get AI usage history (daily) for charts
4287
+ */
4288
+ getAIUsageHistory(orgId: string, days?: number): Promise<AIUsageHistoryResponse>;
4289
+ /**
4290
+ * Get AI usage breakdown by feature, provider, and model
4291
+ */
4292
+ getAIUsageBreakdown(orgId: string): Promise<AIUsageBreakdownResponse>;
4293
+ /**
4294
+ * Get recent AI requests for detailed inspection
4295
+ */
4296
+ getRecentAIRequests(orgId: string, limit?: number, offset?: number): Promise<RecentAIRequestsResponse>;
4163
4297
  }
4164
4298
 
4165
4299
  /**
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- 'use strict';var auth=require('@vaiftech/auth');var M=class s 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,s);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,requestId:this.requestId,details:this.details}}},D=class extends M{constructor(n,e){super(n,{code:e?.code??"AUTH_ERROR",statusCode:e?.statusCode??401,requestId:e?.requestId}),this.name="VaifAuthError";}},U=class extends M{constructor(n,e){super(n,{code:"VALIDATION_ERROR",statusCode:400,requestId:e?.requestId,details:e?.details??e?.fieldErrors}),this.name="VaifValidationError",this.fieldErrors=e?.fieldErrors;}},x=class extends M{constructor(n,e){super(n,{code:"NETWORK_ERROR"}),this.name="VaifNetworkError",this.cause=e;}},F=class extends M{constructor(n,e){super(n,{code:"RATE_LIMITED",statusCode:429}),this.name="VaifRateLimitError",this.retryAfter=e;}},$=class extends M{constructor(n,e){super(n,{code:"NOT_FOUND",statusCode:404,requestId:e}),this.name="VaifNotFoundError";}};function ye(s){return s instanceof M}async function be(s){let n;try{n=await s.json();}catch{}let e=n?.message??n?.error??s.statusText??"Request failed",t=n?.requestId;switch(s.status){case 400:return new U(e,{details:n?.details,requestId:t});case 401:return new D(e,{code:"UNAUTHORIZED",statusCode:401,requestId:t});case 403:return new D(e,{code:"FORBIDDEN",statusCode:403,requestId:t});case 404:return new $(e,t);case 429:{let r=s.headers.get("Retry-After"),o=r?parseInt(r,10):void 0;return new F(e,o)}default:return new M(e,{code:n?.error??"HTTP_ERROR",statusCode:s.status,requestId:t,details:n?.details})}}async function fe(s,n){let{timeout:e=3e4,fetchFn:t,...r}=n,o=new AbortController,a=setTimeout(()=>o.abort(),e);try{let c=await t(s,{...r,signal:o.signal});if(clearTimeout(a),!c.ok)throw await be(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 M?c:c instanceof Error&&c.name==="AbortError"?new x("Request timed out"):c instanceof Error?new x(c.message,c):new x("Network request failed")}}function p(s){let{baseUrl:n,apiKey:e,apiKeyHeader:t,accessToken:r,fetch:o,timeout:a}=s;return async function(i,l={}){let g=`${n}${i}`,y={"Content-Type":"application/json",...l.headers??{}};if(e&&(y[t]=e),r){let h=typeof r=="function"?await r():r;y.Authorization=`Bearer ${h}`;}return fe(g,{...l,headers:y,timeout:a,fetchFn:o})}}function S(s){let n=new URLSearchParams;for(let[t,r]of Object.entries(s))r!==void 0&&n.set(t,String(r));let e=n.toString();return e?`?${e}`:""}function Pe(s){return JSON.stringify(s)}function L(s,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=Pe(t.where)),t.orderBy){let l=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];i.orderBy=JSON.stringify(l);}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},o=()=>S(r()),a=i=>L(s,n,{...t,...i}),c={async list(i){i&&(t={...t,...i});let l=o();return n(`/generated/${s}${l}`)},async get(i){let l={};t.select&&t.select.length>0&&(l.select=t.select.join(",")),t.include&&t.include.length>0&&(l.include=JSON.stringify(t.include));let g=S(l);return n(`/generated/${s}/${encodeURIComponent(i)}${g}`)},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 '${s}' matching the query`);return i},async create(i){return n(`/generated/${s}`,{method:"POST",body:JSON.stringify(i)})},async update(i,l){return n(`/generated/${s}/${encodeURIComponent(i)}`,{method:"PATCH",body:JSON.stringify(l)})},async delete(i){return n(`/generated/${s}/${encodeURIComponent(i)}`,{method:"DELETE"})},async createMany(i,l){return n(`/generated/${s}/batch`,{method:"POST",body:JSON.stringify({records:i,skipOnConflict:l?.skipOnConflict,returnRecords:l?.returnRecords})})},async updateMany(i,l){r();return n(`/generated/${s}/batch`,{method:"PATCH",body:JSON.stringify({data:i,where:t.where,returnRecords:l?.returnRecords})})},async deleteMany(){return n(`/generated/${s}/batch`,{method:"DELETE",body:JSON.stringify({where:t.where})})},async upsert(i,l){return n(`/generated/${s}/upsert`,{method:"POST",body:JSON.stringify({data:i,conflictFields:l.conflictFields,updateFields:l.updateFields})})},async count(){let i=r(),l=S(i);return (await n(`/generated/${s}/count${l}`)).count},async sum(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/sum${g}`)).sum},async avg(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/avg${g}`)).avg},async min(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/min${g}`)).min},async max(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/max${g}`)).max},async aggregate(i,l){return n(`/generated/${s}/aggregate`,{method:"POST",body:JSON.stringify({aggregates:i,where:l?.where||t.where,groupBy:l?.groupBy,having:l?.having})})},async paginate(i){let l=i.page||1,g=i.pageSize||20,y=(l-1)*g,h=r();h.limit=g,h.offset=y,h.includeCount=true;let k=S(h),I=await n(`/generated/${s}${k}`),R=I.total||I.data.length,b=Math.ceil(R/g);return {data:I.data,pageInfo:{total:R,page:l,pageSize:g,pageCount:b,hasNextPage:l<b,hasPrevPage:l>1}}},async cursorPaginate(i){let l=r();l.limit=i.limit||20,i.cursor&&(l.cursor=i.cursor);let g=S(l),y=await n(`/generated/${s}/cursor${g}`);return {data:y.data,nextCursor:y.nextCursor,prevCursor:y.prevCursor,hasMore:y.hasMore}},where(i){if(t.where){let l=t.where;return a({where:{AND:[...Array.isArray(l)?l:[l],i]}})}return a({where:i})},orderBy(i,l="asc"){let g={field:i,direction:l};if(t.orderBy){let y=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];return a({orderBy:[...y,g]})}return a({orderBy:g})},select(...i){return a({select:i})},limit(i){return a({limit:i})},offset(i){return a({offset:i})},include(i){let l=t.include||[];return a({include:[...l,i]})},distinct(...i){return a({distinct:i})}};return c}function J(s){let n=p(s);return {from(e){return L(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 o=(await n("/generated/transaction/start",{method:"POST",body:JSON.stringify({isolationLevel:t?.isolationLevel,timeout:t?.timeout})})).transactionId,a=(i,l)=>{let g=new Headers(l?.headers);return g.set("X-Transaction-Id",o),n(i,{...l,headers:g})},c={from(i){return L(i,a)},async raw(i,l){return a("/generated/raw",{method:"POST",body:JSON.stringify({query:i,params:l})})},async transaction(){throw new Error("Nested transactions are not supported")},async withTransaction(){throw new Error("Nested transactions are not supported")}};try{let i=await e(c);return await n("/generated/transaction/commit",{method:"POST",body:JSON.stringify({transactionId:o})}),i}catch(i){throw await n("/generated/transaction/rollback",{method:"POST",body:JSON.stringify({transactionId:o})}).catch(()=>{}),i}}}}function q(s){let n=p(s);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 K(s){return new Promise(n=>setTimeout(n,s))}function _(s){let n=p(s);async function e(t,r,o){let a=o?.retry||{},c=a.maxRetries??0,i=a.initialDelay??1e3,l=a.maxDelay??3e4,g=a.backoffMultiplier??2,y=a.retryOnStatus??[429,500,502,503,504],h=a.retryOnNetworkError??true,k=null,I=i;for(let R=0;R<=c;R++)try{let b={};o?.version!==void 0&&(b.version=o.version),o?.includeLogs&&(b.includeLogs=!0);let T=S(b),A=await n(`/functions/${t}/invoke${T}`,{method:"POST",body:JSON.stringify(r??{}),headers:o?.headers});if(y.includes(A.status)&&R<c){k=new Error(`Function returned status ${A.status}`),await K(I),I=Math.min(I*g,l);continue}return A}catch(b){k=b;let T=b instanceof TypeError||b.message?.includes("network")||b.message?.includes("fetch");if(h&&T&&R<c){await K(I),I=Math.min(I*g,l);continue}throw b}throw k||new Error("Function invocation failed after retries")}return {invoke:e,async invokeByName(t,r,o){let a={};o?.version!==void 0&&(a.version=o.version),o?.includeLogs&&(a.includeLogs=true);let c=S(a);return n(`/functions/name/${encodeURIComponent(t)}/invoke${c}`,{method:"POST",body:JSON.stringify(r??{}),headers:o?.headers})},async batchInvoke(t,r){let a=(await Promise.allSettled(t.map(c=>this.invoke(c.functionId,c.input,r)))).map((c,i)=>c.status==="fulfilled"?{functionId:t[i].functionId,success:true,result:c.value}:{functionId:t[i].functionId,success:false,error:c.reason?.message||"Unknown error"});return {results:a,successCount:a.filter(c=>c.success).length,errorCount:a.filter(c=>!c.success).length}},rpc(t,r){let o=this,a=async(c,i)=>{let l={...r,...i};return (await e(t,{body:c},l)).data};return Object.defineProperty(a,"id",{value:t,writable:false}),a.getInfo=()=>o.get(t),a.getInvocations=c=>o.getInvocations({...c,functionId:t}),a},async list(t){let r={envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset},o=S(r);return n(`/functions/project/${t.projectId}${o}`)},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,o){return n(`/functions/${t}/deploy`,{method:"POST",body:JSON.stringify({sourceCode:r,createVersion:o?.createVersion,versionDescription:o?.versionDescription,envVars:o?.envVars,secrets:o?.secrets})})},async getSource(t,r){let o=r!==void 0?`?version=${r}`:"";return n(`/functions/${t}/source${o}`)},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},o=S(r);return (await n(`/functions/invocations${o}`)).invocations},async getInvocation(t){return n(`/functions/invocations/${t}`)},async getLogs(t,r){let o={since:r?.since,until:r?.until,level:r?.level,limit:r?.limit},a=S(o);return (await n(`/functions/${t}/logs${a}`)).logs}}}function H(s){let n=p(s),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,o){return (await this.getDownloadUrl(t,{...o,expiresIn:r})).url},async createSignedUrls(t,r=3600,o){return await Promise.all(t.map(async c=>({key:c,url:await this.createSignedUrl(c,r,o)})))},async upload(t,r,o){let a=r instanceof Blob?r:new Blob([r]),c=a.size,i=o?.contentType||(r instanceof File?r.type:void 0)||"application/octet-stream",l=await this.getUploadUrl(t,{...o,contentType:i,sizeBytes:c}),g=await s.fetch(l.url,{method:"PUT",body:a,headers:{"Content-Type":i,...o?.cacheControl&&{"Cache-Control":o.cacheControl},...o?.contentDisposition&&{"Content-Disposition":o.contentDisposition}}});if(!g.ok)throw new Error(`Upload failed: ${g.statusText}`);let y=o?.bucket||e,h=l.url.split("?")[0];return {ok:true,key:t,bucket:y,url:h,publicUrl:o?.isPublic?this.getPublicUrl(t,{bucket:y}):void 0,size:c,contentType:i}},async uploadFromUrl(t,r,o){return n("/storage/upload-from-url",{method:"POST",body:JSON.stringify({key:t,url:r,bucket:o?.bucket||e,contentType:o?.contentType,metadata:o?.metadata,isPublic:o?.isPublic,timeout:o?.timeout})})},async download(t,r){let o=await this.getDownloadUrl(t,r),a=await s.fetch(o.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},o=S(r);return n(`/storage/files${o}`)},async getMetadata(t,r){let o=r?.bucket||e;return n(`/storage/files/${encodeURIComponent(o)}/${encodeURIComponent(t)}/metadata`)},async updateMetadata(t,r,o){let a=o?.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,o){return n("/storage/files/copy",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:o?.sourceBucket||e,destinationKey:r,destinationBucket:o?.destinationBucket||o?.sourceBucket||e,metadata:o?.metadata})})},async move(t,r,o){return n("/storage/files/move",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:o?.sourceBucket||e,destinationKey:r,destinationBucket:o?.destinationBucket||o?.sourceBucket||e,metadata:o?.metadata})})},async delete(t,r){let o=r?.bucket||e;await n(`/storage/files/${encodeURIComponent(o)}/${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 o=r?.bucket||e;return `${s.baseUrl.replace("/api","")}/storage/${encodeURIComponent(o)}/${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,o){let a=o instanceof Blob?o:new Blob([o]),{url:c}=await n(`/storage/multipart/${t}/part-url`,{method:"POST",body:JSON.stringify({partNumber:r})}),i=await s.fetch(c,{method:"PUT",body:a});if(!i.ok)throw new Error(`Part upload failed: ${i.statusText}`);let l=i.headers.get("etag")||"";return {partNumber:r,etag:l}},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 W(s){let n=p(s);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 z(s){let n=p(s);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 G(s){let n=p(s);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 Q(s){let n=p(s);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 o=r.toString(),a=`/functions/secrets/project/${e}${o?`?${o}`:""}`;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 X(s){let n=p(s);return {async list(e,t){let r=new URLSearchParams;t&&r.set("env",t);let o=r.toString(),a=`/deployments/project/${e}${o?`?${o}`:""}`;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)}),o=await n(`/deployments/${r.deploymentId}`);return {deployment:{...o.deployment,steps:o.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 o=r.toString(),a=`/deployments/tokens/project/${encodeURIComponent(e)}${o?`?${o}`:""}`;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 Z(s){let n=p(s);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 o=r.toString(),a=`/realtime/events/project/${e}${o?`?${o}`:""}`;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 Y(s){let n=p(s);return {async listBuckets(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let o=r.toString(),a=`/buckets/project/${e}${o?`?${o}`:""}`;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 o=r.toString(),a=`/buckets/${e}/files${o?`?${o}`:""}`;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,o){let a=o?.prefix?`${o.prefix}${t}`:t,c=o?.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 ee(s){let n=p(s);return {async list(e,t){let r={type:t?.type,enabled:t?.enabled},o=S(r);return (await n(`/integrations/subscriptions/project/${e}${o}`)).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=S(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=S(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},o=S(r);return (await n(`/integrations/dlq/project/${e}${o}`)).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(","),o=r.find(b=>b.startsWith("t=")),a=r.find(b=>b.startsWith("v1="));if(!o||!a)return !1;let c=parseInt(o.slice(2),10),i=a.slice(3),l=Math.floor(Date.now()/1e3);if(Math.abs(l-c)>t)return !1;let g=`${c}.${e.payload}`,y=new TextEncoder,h=y.encode(e.secret),k=y.encode(g),I=Array.from(h).concat(Array.from(k)).reduce((b,T)=>b+T,0).toString(16);if(i.length!==I.length)return !1;let R=0;for(let b=0;b<i.length;b++)R|=i.charCodeAt(b)^I.charCodeAt(b);return R===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 te(s){let n=p(s);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 ne(s){let n=p(s);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 re(s){let n=p(s);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 oe(s){let n=p(s);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 o=r.toString(),a=`/security/audit/${encodeURIComponent(e)}${o?`?${o}`:""}`;return n(a)},async listEnvVars(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let o=r.toString(),a=`/projects/${encodeURIComponent(e)}/env-vars${o?`?${o}`:""}`;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 se(s){let n=p(s);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 o=r.toString(),a=`/ai/usage/org/${encodeURIComponent(e)}${o?`?${o}`:""}`;return n(a)},async getBudgetStatus(e){let[t,r]=await Promise.all([this.getOrgSettings(e),this.getUsage(e)]),o=t?.monthlyBudgetCents??1e4,a=r.costCents,c=Math.max(0,o-a),i=o>0?Math.round(a/o*100):0;return {spent:a,budget:o,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 ie(s){let n=p(s);return {async load(){return n("/bootstrap")}}}function ae(s){let n=p(s);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(),o=`/templates${r?`?${r}`:""}`;return (await n(o)).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 le(s){let n=p(s);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 ce(s){let n=p(s);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 V(s,n,e,t){let r=[...n],o=0,a=false,c=false,i=async()=>{if(c||a)return;let l=await e(`/mongodb/${t}/cursor/${s}/next`,{method:"POST"});r=l.batch,o=0,a=l.exhausted;};return {id:s,async hasNext(){return c?false:o<r.length?true:a?false:(await i(),r.length>0)},async next(){return c?null:o<r.length?r[o++]:a||(await i(),r.length===0)?null:r[o++]},async toArray(){if(c)return [];let l=[];for(;o<r.length;)l.push(r[o++]);for(;!a;)await i(),l.push(...r),o=r.length;return l},async forEach(l){if(!c){for(;o<r.length;)await l(r[o++]);for(;!a;){await i();for(let g of r)await l(g);o=r.length;}}},map(l){let g=r.slice(o).map(l);return V(s,g,e,t)},async close(){if(!c){c=true;try{await e(`/mongodb/${t}/cursor/${s}/close`,{method:"POST"});}catch{}}},isClosed(){return c}}}function he(s,n){let e=`/mongodb/${encodeURIComponent(s)}`;return {collectionName:s,async find(t,r){return n(`${e}/find`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async findCursor(t,r){let o=await n(`${e}/find/cursor`,{method:"POST",body:JSON.stringify({filter:t,options:r})});return V(o.cursorId,o.batch,n,s)},async findOne(t,r){return n(`${e}/findOne`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async findById(t,r){return n(`${e}/findById/${encodeURIComponent(t)}`,{method:"GET",...r&&{body:JSON.stringify({options:r})}})},async countDocuments(t){return (await n(`${e}/count`,{method:"POST",body:JSON.stringify({filter:t})})).count},async estimatedDocumentCount(){return (await n(`${e}/estimatedCount`)).count},async distinct(t,r){return n(`${e}/distinct`,{method:"POST",body:JSON.stringify({field:t,...r})})},async insertOne(t){return n(`${e}/insertOne`,{method:"POST",body:JSON.stringify({document:t})})},async insertMany(t,r){return n(`${e}/insertMany`,{method:"POST",body:JSON.stringify({documents:t,options:r})})},async updateOne(t,r,o){return n(`${e}/updateOne`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async updateMany(t,r,o){return n(`${e}/updateMany`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async replaceOne(t,r,o){return n(`${e}/replaceOne`,{method:"POST",body:JSON.stringify({filter:t,replacement:r,options:o})})},async findOneAndUpdate(t,r,o){return n(`${e}/findOneAndUpdate`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async findOneAndReplace(t,r,o){return n(`${e}/findOneAndReplace`,{method:"POST",body:JSON.stringify({filter:t,replacement:r,options:o})})},async deleteOne(t){return n(`${e}/deleteOne`,{method:"POST",body:JSON.stringify({filter:t})})},async deleteMany(t){return n(`${e}/deleteMany`,{method:"POST",body:JSON.stringify({filter:t})})},async findOneAndDelete(t,r){return n(`${e}/findOneAndDelete`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async aggregate(t,r){return n(`${e}/aggregate`,{method:"POST",body:JSON.stringify({pipeline:t,options:r})})},async aggregateCursor(t,r){let o=await n(`${e}/aggregate/cursor`,{method:"POST",body:JSON.stringify({pipeline:t,options:r})});return V(o.cursorId,o.batch,n,s)},async createIndex(t,r){return (await n(`${e}/indexes`,{method:"POST",body:JSON.stringify({keys:t,options:r})})).indexName},async dropIndex(t){await n(`${e}/indexes/${encodeURIComponent(t)}`,{method:"DELETE"});},async listIndexes(){return n(`${e}/indexes`)},async bulkWrite(t,r){return n(`${e}/bulkWrite`,{method:"POST",body:JSON.stringify({operations:t,options:r})})}}}function ue(s){let n=p(s);return {collection(e){return he(e,n)},async listCollections(){return n("/mongodb/collections")},async createCollection(e,t){await n("/mongodb/collections",{method:"POST",body:JSON.stringify({name:e,options:t})});},async dropCollection(e){await n(`/mongodb/collections/${encodeURIComponent(e)}`,{method:"DELETE"});},async renameCollection(e,t){await n(`/mongodb/collections/${encodeURIComponent(e)}/rename`,{method:"POST",body:JSON.stringify({newName:t})});},async command(e){return n("/mongodb/command",{method:"POST",body:JSON.stringify(e)})}}}function Ie(s,n,e,t){let r=n.type||"public",o="unsubscribed",a=new Map,c=[],i={},l=null,g=null,y=new Set,h=new Set,k=new Set,I=u=>{if(u.event){let f=a.get(u.event);f&&f.forEach(O=>O(u.payload));}},R=u=>{i=u.state||{},y.forEach(f=>f(i));},b=u=>{let f=u.key||"",O=u.currentPresences||[],d=u.joinedPresences||[],m=u.leftPresences||[];d.length>0&&(i[f]=O,h.forEach(P=>P(f,O,d))),m.length>0&&(O.length===0?delete i[f]:i[f]=O,k.forEach(P=>P(f,O,m))),y.forEach(P=>P(i));},T=u=>{let f={type:"db_change",projectId:u.projectId||"",schema:u.schema||"",table:u.table||"",operation:u.op,new:u.record,old:u.old_record,timestamp:u.ts||new Date().toISOString(),partial:u.partial};c.forEach(({options:O,handler:d})=>{if(O.table===f.table){let m=O.event||"*";(m==="*"||(Array.isArray(m)?m.includes(f.operation):m===f.operation))&&d(f);}});},v={get name(){return s},get type(){return r},get status(){return o},_handleMessage:u=>{switch(u.type){case "broadcast":I(u);break;case "presence_state":R(u);break;case "presence":b(u);break;case "db_change":T(u);break;case "subscribed":o="subscribed";break;case "error":o="error";break}},onDbChange(u,f){return c.push({options:u,handler:f}),o==="subscribed"&&e({type:"subscribe",channel:s,options:{table:u.table,filter:u.filter,event:u.event,columns:u.columns}}),v},on(u,f){return a.has(u)||a.set(u,new Set),a.get(u).add(f),v},off(u,f){return f?a.get(u)?.delete(f):a.delete(u),v},async broadcast(u){if(o!=="subscribed")throw new Error("Channel must be subscribed before broadcasting");e({type:"broadcast",channel:s,event:u.event,payload:u.payload,includeSelf:u.includeSelf});},presence:{async track(u){if(r!=="presence")throw new Error("Presence tracking is only available on presence channels");l=u.key||t()||"anonymous",g=u.state,e({type:"presence_track",channel:s,key:l,state:g});},async update(u){if(!g)throw new Error("Must call track() before update()");g={...g,...u},e({type:"presence_update",channel:s,key:l,state:g});},async untrack(){l&&(e({type:"presence_untrack",channel:s,key:l}),l=null,g=null);},state(){return {...i}},onSync(u){return y.add(u),v},onJoin(u){return h.add(u),v},onLeave(u){return k.add(u),v}},async subscribe(){return o==="subscribed"||(o="subscribing",e({type:"subscribe",channel:s}),c.forEach(({options:u})=>{e({type:"subscribe",channel:s,options:{table:u.table,filter:u.filter,event:u.event,columns:u.columns}});}),n.presenceState&&r==="presence"&&await v.presence.track({state:n.presenceState})),v},async unsubscribe(){o!=="unsubscribed"&&(l&&await v.presence.untrack(),e({type:"unsubscribe",channel:s}),o="unsubscribed",i={},a.clear(),c.length=0);}};return v}function de(s,n){let{wsUrl:e=s.baseUrl.replace(/^http/,"ws")+"/realtime/ws",autoReconnect:t=true,reconnectDelay:r=1e3,maxReconnectAttempts:o=10}=n??{},a=null,c="disconnected",i=null,l=null,g=0,y=null,h=null,k=new Map,I=new Map,R=new Set,b={connect:new Set,disconnect:new Set,error:new Set,reconnect:new Set},T=d=>{b[d].forEach(m=>m());},A=d=>{let m=`table:${d.table}`;if(d.filter){let C=(Array.isArray(d.filter)?d.filter:[d.filter]).map(w=>`${w.field}${w.operator||"eq"}${w.value}`).join("&");m+=`?${C}`;}return m},v=d=>{a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify(d));},u=d=>{if(d.channel){let m=k.get(d.channel);if(m){m._handleMessage(d);return}}switch(d.type){case "db_change":{let m={type:"db_change",projectId:d.projectId??"",schema:d.schema??"",table:d.table??"",operation:d.op,new:d.record,old:d.old_record,timestamp:d.ts??new Date().toISOString(),partial:d.partial},P=`table:${d.table}`;I.forEach((C,w)=>{(w===P||w.startsWith(P+"?"))&&C.forEach(B=>B(m));});break}case "presence":{let m={type:"presence",event:d.event,key:d.key||d.connectionId||"",connectionId:d.connectionId??"",projectId:d.projectId??"",currentPresences:d.currentPresences||[],leftPresences:d.leftPresences||[],joinedPresences:d.joinedPresences||[]};R.forEach(P=>P(m));break}case "welcome":i=d.connectionId||null;break;case "error":{console.error("[vaif/realtime] Server error:",d.message),T("error");break}}},f=()=>new Promise((d,m)=>{let P=new URLSearchParams;s.apiKey&&P.set(s.apiKeyHeader,s.apiKey),l&&P.set("token",l);let C=P.toString(),w=C?`${e}?${C}`:e;try{a=new WebSocket(w);}catch{m(new x("Failed to create WebSocket connection"));return}let B=()=>{c="connected",g=0,T("connect"),k.forEach(E=>{(E.status==="subscribed"||E.status==="subscribing")&&E.subscribe();}),I.forEach((E,N)=>{v({type:"subscribe",channel:N});}),h=setInterval(()=>{v({type:"ping"});},3e4),d();},ge=E=>{try{let N=JSON.parse(E.data);u(N);}catch{}},pe=()=>{if(c="disconnected",i=null,a=null,h&&(clearInterval(h),h=null),T("disconnect"),t&&g<o){c="reconnecting";let E=r*Math.pow(2,g);y=setTimeout(()=>{g++,T("reconnect"),f().catch(()=>{});},Math.min(E,3e4));}},me=()=>{T("error"),m(new x("WebSocket connection error"));};a.addEventListener("open",B),a.addEventListener("message",ge),a.addEventListener("close",pe),a.addEventListener("error",me);}),O=()=>{y&&(clearTimeout(y),y=null),h&&(clearInterval(h),h=null),g=o;};return {channel(d,m={}){let P=k.get(d);if(P)return P;let C=Ie(d,m,v,()=>i);return k.set(d,C),C},async removeChannel(d){let m=k.get(d.name);m&&(await m.unsubscribe(),k.delete(d.name));},getChannels(){return Array.from(k.values())},subscribe(d,m){let P=A(d);return I.has(P)||I.set(P,new Set),I.get(P).add(m),a?.readyState===WebSocket.OPEN&&v({type:"subscribe",channel:P}),()=>{let C=I.get(P);C&&(C.delete(m),C.size===0&&(I.delete(P),a?.readyState===WebSocket.OPEN&&v({type:"unsubscribe",channel:P})));}},subscribeToPresence(d){return R.add(d),()=>{R.delete(d);}},async connect(){if(c!=="connected"){if(!s.apiKey)throw new D("API key is required for realtime connections");c="connecting",await f();}},disconnect(){O(),k.forEach(d=>{d.unsubscribe();}),k.clear(),a&&(a.close(),a=null),c="disconnected",i=null;},get isConnected(){return c==="connected"},get connectionState(){return c},get connectionId(){return i},on(d,m){b[d].add(m);},off(d,m){b[d].delete(m);},setAuth(d){l=d;}}}var j={apiKeyHeader:"x-vaif-key",timeout:3e4,retry:{maxRetries:3,retryDelay:1e3,retryOn:[429,500,502,503,504]}};function Se(s){return {baseUrl:s.baseUrl.replace(/\/$/,""),apiKey:s.apiKey,apiKeyHeader:s.apiKeyHeader??j.apiKeyHeader,accessToken:s.accessToken,fetch:s.fetch??globalThis.fetch.bind(globalThis),timeout:s.timeout??j.timeout,retry:{maxRetries:s.retry?.maxRetries??j.retry.maxRetries,retryDelay:s.retry?.retryDelay??j.retry.retryDelay,retryOn:s.retry?.retryOn??[...j.retry.retryOn]}}}function ke(s){let n=Se(s),e=J(n),t=q(n),r=_(n),o=H(n),a=W(n),c=z(n),i=G(n),l=Q(n),g=X(n),y=Z(n),h=Y(n),k=ee(n),I=te(n),R=ne(n),b=re(n),T=oe(n),A=se(n),v=ie(n),u=ae(n),f=le(n),O=ce(n),d=ue(n);return {from:e.from,auth:t,functions:r,storage:o,projects:a,orgs:c,schema:i,secrets:l,deployments:g,realtimeMonitoring:y,storageDashboard:h,integrations:k,billing:I,admin:R,flags:b,security:T,ai:A,bootstrap:v,templates:u,oauth:f,docs:O,mongodb:d,realtime:m=>de(n,m)}}Object.defineProperty(exports,"AuthError",{enumerable:true,get:function(){return auth.AuthError}});Object.defineProperty(exports,"InvalidCredentialsError",{enumerable:true,get:function(){return auth.InvalidCredentialsError}});Object.defineProperty(exports,"SessionExpiredError",{enumerable:true,get:function(){return auth.SessionExpiredError}});Object.defineProperty(exports,"SessionStorage",{enumerable:true,get:function(){return auth.SessionStorage}});Object.defineProperty(exports,"VaifAuthClient",{enumerable:true,get:function(){return auth.VaifAuthClient}});Object.defineProperty(exports,"authLocalStorage",{enumerable:true,get:function(){return auth.localStorage}});Object.defineProperty(exports,"authSessionStorage",{enumerable:true,get:function(){return auth.sessionStorage}});Object.defineProperty(exports,"cookieStorage",{enumerable:true,get:function(){return auth.cookieStorage}});Object.defineProperty(exports,"createAuthClient",{enumerable:true,get:function(){return auth.createAuthClient}});Object.defineProperty(exports,"getDefaultStorage",{enumerable:true,get:function(){return auth.getDefaultStorage}});Object.defineProperty(exports,"isBrowser",{enumerable:true,get:function(){return auth.isBrowser}});Object.defineProperty(exports,"isMFAChallenge",{enumerable:true,get:function(){return auth.isMFAChallenge}});Object.defineProperty(exports,"memoryStorage",{enumerable:true,get:function(){return auth.memoryStorage}});exports.VaifAuthError=D;exports.VaifError=M;exports.VaifNetworkError=x;exports.VaifNotFoundError=$;exports.VaifRateLimitError=F;exports.VaifValidationError=U;exports.createVaifClient=ke;exports.isVaifError=ye;
1
+ 'use strict';var auth=require('@vaiftech/auth');var M=class s 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,s);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,requestId:this.requestId,details:this.details}}},D=class extends M{constructor(n,e){super(n,{code:e?.code??"AUTH_ERROR",statusCode:e?.statusCode??401,requestId:e?.requestId}),this.name="VaifAuthError";}},U=class extends M{constructor(n,e){super(n,{code:"VALIDATION_ERROR",statusCode:400,requestId:e?.requestId,details:e?.details??e?.fieldErrors}),this.name="VaifValidationError",this.fieldErrors=e?.fieldErrors;}},x=class extends M{constructor(n,e){super(n,{code:"NETWORK_ERROR"}),this.name="VaifNetworkError",this.cause=e;}},F=class extends M{constructor(n,e){super(n,{code:"RATE_LIMITED",statusCode:429}),this.name="VaifRateLimitError",this.retryAfter=e;}},$=class extends M{constructor(n,e){super(n,{code:"NOT_FOUND",statusCode:404,requestId:e}),this.name="VaifNotFoundError";}};function ye(s){return s instanceof M}async function be(s){let n;try{n=await s.json();}catch{}let e=n?.message??n?.error??s.statusText??"Request failed",t=n?.requestId;switch(s.status){case 400:return new U(e,{details:n?.details,requestId:t});case 401:return new D(e,{code:"UNAUTHORIZED",statusCode:401,requestId:t});case 403:return new D(e,{code:"FORBIDDEN",statusCode:403,requestId:t});case 404:return new $(e,t);case 429:{let r=s.headers.get("Retry-After"),o=r?parseInt(r,10):void 0;return new F(e,o)}default:return new M(e,{code:n?.error??"HTTP_ERROR",statusCode:s.status,requestId:t,details:n?.details})}}async function fe(s,n){let{timeout:e=3e4,fetchFn:t,...r}=n,o=new AbortController,a=setTimeout(()=>o.abort(),e);try{let c=await t(s,{...r,signal:o.signal});if(clearTimeout(a),!c.ok)throw await be(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 M?c:c instanceof Error&&c.name==="AbortError"?new x("Request timed out"):c instanceof Error?new x(c.message,c):new x("Network request failed")}}function p(s){let{baseUrl:n,apiKey:e,apiKeyHeader:t,accessToken:r,fetch:o,timeout:a}=s;return async function(i,l={}){let g=`${n}${i}`,y={"Content-Type":"application/json",...l.headers??{}};if(e&&(y[t]=e),r){let h=typeof r=="function"?await r():r;y.Authorization=`Bearer ${h}`;}return fe(g,{...l,headers:y,timeout:a,fetchFn:o})}}function S(s){let n=new URLSearchParams;for(let[t,r]of Object.entries(s))r!==void 0&&n.set(t,String(r));let e=n.toString();return e?`?${e}`:""}function Pe(s){return JSON.stringify(s)}function L(s,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=Pe(t.where)),t.orderBy){let l=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];i.orderBy=JSON.stringify(l);}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},o=()=>S(r()),a=i=>L(s,n,{...t,...i}),c={async list(i){i&&(t={...t,...i});let l=o();return n(`/generated/${s}${l}`)},async get(i){let l={};t.select&&t.select.length>0&&(l.select=t.select.join(",")),t.include&&t.include.length>0&&(l.include=JSON.stringify(t.include));let g=S(l);return n(`/generated/${s}/${encodeURIComponent(i)}${g}`)},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 '${s}' matching the query`);return i},async create(i){return n(`/generated/${s}`,{method:"POST",body:JSON.stringify(i)})},async update(i,l){return n(`/generated/${s}/${encodeURIComponent(i)}`,{method:"PATCH",body:JSON.stringify(l)})},async delete(i){return n(`/generated/${s}/${encodeURIComponent(i)}`,{method:"DELETE"})},async createMany(i,l){return n(`/generated/${s}/batch`,{method:"POST",body:JSON.stringify({records:i,skipOnConflict:l?.skipOnConflict,returnRecords:l?.returnRecords})})},async updateMany(i,l){r();return n(`/generated/${s}/batch`,{method:"PATCH",body:JSON.stringify({data:i,where:t.where,returnRecords:l?.returnRecords})})},async deleteMany(){return n(`/generated/${s}/batch`,{method:"DELETE",body:JSON.stringify({where:t.where})})},async upsert(i,l){return n(`/generated/${s}/upsert`,{method:"POST",body:JSON.stringify({data:i,conflictFields:l.conflictFields,updateFields:l.updateFields})})},async count(){let i=r(),l=S(i);return (await n(`/generated/${s}/count${l}`)).count},async sum(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/sum${g}`)).sum},async avg(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/avg${g}`)).avg},async min(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/min${g}`)).min},async max(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/max${g}`)).max},async aggregate(i,l){return n(`/generated/${s}/aggregate`,{method:"POST",body:JSON.stringify({aggregates:i,where:l?.where||t.where,groupBy:l?.groupBy,having:l?.having})})},async paginate(i){let l=i.page||1,g=i.pageSize||20,y=(l-1)*g,h=r();h.limit=g,h.offset=y,h.includeCount=true;let k=S(h),I=await n(`/generated/${s}${k}`),R=I.total||I.data.length,b=Math.ceil(R/g);return {data:I.data,pageInfo:{total:R,page:l,pageSize:g,pageCount:b,hasNextPage:l<b,hasPrevPage:l>1}}},async cursorPaginate(i){let l=r();l.limit=i.limit||20,i.cursor&&(l.cursor=i.cursor);let g=S(l),y=await n(`/generated/${s}/cursor${g}`);return {data:y.data,nextCursor:y.nextCursor,prevCursor:y.prevCursor,hasMore:y.hasMore}},where(i){if(t.where){let l=t.where;return a({where:{AND:[...Array.isArray(l)?l:[l],i]}})}return a({where:i})},orderBy(i,l="asc"){let g={field:i,direction:l};if(t.orderBy){let y=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];return a({orderBy:[...y,g]})}return a({orderBy:g})},select(...i){return a({select:i})},limit(i){return a({limit:i})},offset(i){return a({offset:i})},include(i){let l=t.include||[];return a({include:[...l,i]})},distinct(...i){return a({distinct:i})}};return c}function q(s){let n=p(s);return {from(e){return L(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 o=(await n("/generated/transaction/start",{method:"POST",body:JSON.stringify({isolationLevel:t?.isolationLevel,timeout:t?.timeout})})).transactionId,a=(i,l)=>{let g=new Headers(l?.headers);return g.set("X-Transaction-Id",o),n(i,{...l,headers:g})},c={from(i){return L(i,a)},async raw(i,l){return a("/generated/raw",{method:"POST",body:JSON.stringify({query:i,params:l})})},async transaction(){throw new Error("Nested transactions are not supported")},async withTransaction(){throw new Error("Nested transactions are not supported")}};try{let i=await e(c);return await n("/generated/transaction/commit",{method:"POST",body:JSON.stringify({transactionId:o})}),i}catch(i){throw await n("/generated/transaction/rollback",{method:"POST",body:JSON.stringify({transactionId:o})}).catch(()=>{}),i}}}}function J(s){let n=p(s);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 K(s){return new Promise(n=>setTimeout(n,s))}function H(s){let n=p(s);async function e(t,r,o){let a=o?.retry||{},c=a.maxRetries??0,i=a.initialDelay??1e3,l=a.maxDelay??3e4,g=a.backoffMultiplier??2,y=a.retryOnStatus??[429,500,502,503,504],h=a.retryOnNetworkError??true,k=null,I=i;for(let R=0;R<=c;R++)try{let b={};o?.version!==void 0&&(b.version=o.version),o?.includeLogs&&(b.includeLogs=!0);let T=S(b),E=await n(`/functions/${t}/invoke${T}`,{method:"POST",body:JSON.stringify(r??{}),headers:o?.headers});if(y.includes(E.status)&&R<c){k=new Error(`Function returned status ${E.status}`),await K(I),I=Math.min(I*g,l);continue}return E}catch(b){k=b;let T=b instanceof TypeError||b.message?.includes("network")||b.message?.includes("fetch");if(h&&T&&R<c){await K(I),I=Math.min(I*g,l);continue}throw b}throw k||new Error("Function invocation failed after retries")}return {invoke:e,async invokeByName(t,r,o){let a={};o?.version!==void 0&&(a.version=o.version),o?.includeLogs&&(a.includeLogs=true);let c=S(a);return n(`/functions/name/${encodeURIComponent(t)}/invoke${c}`,{method:"POST",body:JSON.stringify(r??{}),headers:o?.headers})},async batchInvoke(t,r){let a=(await Promise.allSettled(t.map(c=>this.invoke(c.functionId,c.input,r)))).map((c,i)=>c.status==="fulfilled"?{functionId:t[i].functionId,success:true,result:c.value}:{functionId:t[i].functionId,success:false,error:c.reason?.message||"Unknown error"});return {results:a,successCount:a.filter(c=>c.success).length,errorCount:a.filter(c=>!c.success).length}},rpc(t,r){let o=this,a=async(c,i)=>{let l={...r,...i};return (await e(t,{body:c},l)).data};return Object.defineProperty(a,"id",{value:t,writable:false}),a.getInfo=()=>o.get(t),a.getInvocations=c=>o.getInvocations({...c,functionId:t}),a},async list(t){let r={envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset},o=S(r);return n(`/functions/project/${t.projectId}${o}`)},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,o){return n(`/functions/${t}/deploy`,{method:"POST",body:JSON.stringify({sourceCode:r,createVersion:o?.createVersion,versionDescription:o?.versionDescription,envVars:o?.envVars,secrets:o?.secrets})})},async getSource(t,r){let o=r!==void 0?`?version=${r}`:"";return n(`/functions/${t}/source${o}`)},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},o=S(r);return (await n(`/functions/invocations${o}`)).invocations},async getInvocation(t){return n(`/functions/invocations/${t}`)},async getLogs(t,r){let o={since:r?.since,until:r?.until,level:r?.level,limit:r?.limit},a=S(o);return (await n(`/functions/${t}/logs${a}`)).logs}}}function _(s){let n=p(s),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,o){return (await this.getDownloadUrl(t,{...o,expiresIn:r})).url},async createSignedUrls(t,r=3600,o){return await Promise.all(t.map(async c=>({key:c,url:await this.createSignedUrl(c,r,o)})))},async upload(t,r,o){let a=r instanceof Blob?r:new Blob([r]),c=a.size,i=o?.contentType||(r instanceof File?r.type:void 0)||"application/octet-stream",l=await this.getUploadUrl(t,{...o,contentType:i,sizeBytes:c}),g=await s.fetch(l.url,{method:"PUT",body:a,headers:{"Content-Type":i,...o?.cacheControl&&{"Cache-Control":o.cacheControl},...o?.contentDisposition&&{"Content-Disposition":o.contentDisposition}}});if(!g.ok)throw new Error(`Upload failed: ${g.statusText}`);let y=o?.bucket||e,h=l.url.split("?")[0];return {ok:true,key:t,bucket:y,url:h,publicUrl:o?.isPublic?this.getPublicUrl(t,{bucket:y}):void 0,size:c,contentType:i}},async uploadFromUrl(t,r,o){return n("/storage/upload-from-url",{method:"POST",body:JSON.stringify({key:t,url:r,bucket:o?.bucket||e,contentType:o?.contentType,metadata:o?.metadata,isPublic:o?.isPublic,timeout:o?.timeout})})},async download(t,r){let o=await this.getDownloadUrl(t,r),a=await s.fetch(o.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},o=S(r);return n(`/storage/files${o}`)},async getMetadata(t,r){let o=r?.bucket||e;return n(`/storage/files/${encodeURIComponent(o)}/${encodeURIComponent(t)}/metadata`)},async updateMetadata(t,r,o){let a=o?.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,o){return n("/storage/files/copy",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:o?.sourceBucket||e,destinationKey:r,destinationBucket:o?.destinationBucket||o?.sourceBucket||e,metadata:o?.metadata})})},async move(t,r,o){return n("/storage/files/move",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:o?.sourceBucket||e,destinationKey:r,destinationBucket:o?.destinationBucket||o?.sourceBucket||e,metadata:o?.metadata})})},async delete(t,r){let o=r?.bucket||e;await n(`/storage/files/${encodeURIComponent(o)}/${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 o=r?.bucket||e;return `${s.baseUrl.replace("/api","")}/storage/${encodeURIComponent(o)}/${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,o){let a=o instanceof Blob?o:new Blob([o]),{url:c}=await n(`/storage/multipart/${t}/part-url`,{method:"POST",body:JSON.stringify({partNumber:r})}),i=await s.fetch(c,{method:"PUT",body:a});if(!i.ok)throw new Error(`Part upload failed: ${i.statusText}`);let l=i.headers.get("etag")||"";return {partNumber:r,etag:l}},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 W(s){let n=p(s);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 z(s){let n=p(s);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 G(s){let n=p(s);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 Q(s){let n=p(s);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 o=r.toString(),a=`/functions/secrets/project/${e}${o?`?${o}`:""}`;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 X(s){let n=p(s);return {async list(e,t){let r=new URLSearchParams;t&&r.set("env",t);let o=r.toString(),a=`/deployments/project/${e}${o?`?${o}`:""}`;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)}),o=await n(`/deployments/${r.deploymentId}`);return {deployment:{...o.deployment,steps:o.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 o=r.toString(),a=`/deployments/tokens/project/${encodeURIComponent(e)}${o?`?${o}`:""}`;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 Z(s){let n=p(s);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 o=r.toString(),a=`/realtime/events/project/${e}${o?`?${o}`:""}`;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 Y(s){let n=p(s);return {async listBuckets(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let o=r.toString(),a=`/buckets/project/${e}${o?`?${o}`:""}`;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 o=r.toString(),a=`/buckets/${e}/files${o?`?${o}`:""}`;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,o){let a=o?.prefix?`${o.prefix}${t}`:t,c=o?.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 ee(s){let n=p(s);return {async list(e,t){let r={type:t?.type,enabled:t?.enabled},o=S(r);return (await n(`/integrations/subscriptions/project/${e}${o}`)).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=S(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=S(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},o=S(r);return (await n(`/integrations/dlq/project/${e}${o}`)).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(","),o=r.find(b=>b.startsWith("t=")),a=r.find(b=>b.startsWith("v1="));if(!o||!a)return !1;let c=parseInt(o.slice(2),10),i=a.slice(3),l=Math.floor(Date.now()/1e3);if(Math.abs(l-c)>t)return !1;let g=`${c}.${e.payload}`,y=new TextEncoder,h=y.encode(e.secret),k=y.encode(g),I=Array.from(h).concat(Array.from(k)).reduce((b,T)=>b+T,0).toString(16);if(i.length!==I.length)return !1;let R=0;for(let b=0;b<i.length;b++)R|=i.charCodeAt(b)^I.charCodeAt(b);return R===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 te(s){let n=p(s);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})})},async getAIUsageSummary(e){return n(`/ai-usage/org/${e}/summary`)},async getAIUsageHistory(e,t=30){return n(`/ai-usage/org/${e}/history?days=${t}`)},async getAIUsageBreakdown(e){return n(`/ai-usage/org/${e}/breakdown`)},async getRecentAIRequests(e,t=50,r=0){return n(`/ai-usage/org/${e}/recent?limit=${t}&offset=${r}`)}}}function ne(s){let n=p(s);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 re(s){let n=p(s);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 oe(s){let n=p(s);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 o=r.toString(),a=`/security/audit/${encodeURIComponent(e)}${o?`?${o}`:""}`;return n(a)},async listEnvVars(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let o=r.toString(),a=`/projects/${encodeURIComponent(e)}/env-vars${o?`?${o}`:""}`;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 se(s){let n=p(s);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 o=r.toString(),a=`/ai/usage/org/${encodeURIComponent(e)}${o?`?${o}`:""}`;return n(a)},async getBudgetStatus(e){let[t,r]=await Promise.all([this.getOrgSettings(e),this.getUsage(e)]),o=t?.monthlyBudgetCents??1e4,a=r.costCents,c=Math.max(0,o-a),i=o>0?Math.round(a/o*100):0;return {spent:a,budget:o,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 ie(s){let n=p(s);return {async load(){return n("/bootstrap")}}}function ae(s){let n=p(s);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(),o=`/templates${r?`?${r}`:""}`;return (await n(o)).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 le(s){let n=p(s);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 ce(s){let n=p(s);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 V(s,n,e,t){let r=[...n],o=0,a=false,c=false,i=async()=>{if(c||a)return;let l=await e(`/mongodb/${t}/cursor/${s}/next`,{method:"POST"});r=l.batch,o=0,a=l.exhausted;};return {id:s,async hasNext(){return c?false:o<r.length?true:a?false:(await i(),r.length>0)},async next(){return c?null:o<r.length?r[o++]:a||(await i(),r.length===0)?null:r[o++]},async toArray(){if(c)return [];let l=[];for(;o<r.length;)l.push(r[o++]);for(;!a;)await i(),l.push(...r),o=r.length;return l},async forEach(l){if(!c){for(;o<r.length;)await l(r[o++]);for(;!a;){await i();for(let g of r)await l(g);o=r.length;}}},map(l){let g=r.slice(o).map(l);return V(s,g,e,t)},async close(){if(!c){c=true;try{await e(`/mongodb/${t}/cursor/${s}/close`,{method:"POST"});}catch{}}},isClosed(){return c}}}function he(s,n){let e=`/mongodb/${encodeURIComponent(s)}`;return {collectionName:s,async find(t,r){return n(`${e}/find`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async findCursor(t,r){let o=await n(`${e}/find/cursor`,{method:"POST",body:JSON.stringify({filter:t,options:r})});return V(o.cursorId,o.batch,n,s)},async findOne(t,r){return n(`${e}/findOne`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async findById(t,r){return n(`${e}/findById/${encodeURIComponent(t)}`,{method:"GET",...r&&{body:JSON.stringify({options:r})}})},async countDocuments(t){return (await n(`${e}/count`,{method:"POST",body:JSON.stringify({filter:t})})).count},async estimatedDocumentCount(){return (await n(`${e}/estimatedCount`)).count},async distinct(t,r){return n(`${e}/distinct`,{method:"POST",body:JSON.stringify({field:t,...r})})},async insertOne(t){return n(`${e}/insertOne`,{method:"POST",body:JSON.stringify({document:t})})},async insertMany(t,r){return n(`${e}/insertMany`,{method:"POST",body:JSON.stringify({documents:t,options:r})})},async updateOne(t,r,o){return n(`${e}/updateOne`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async updateMany(t,r,o){return n(`${e}/updateMany`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async replaceOne(t,r,o){return n(`${e}/replaceOne`,{method:"POST",body:JSON.stringify({filter:t,replacement:r,options:o})})},async findOneAndUpdate(t,r,o){return n(`${e}/findOneAndUpdate`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async findOneAndReplace(t,r,o){return n(`${e}/findOneAndReplace`,{method:"POST",body:JSON.stringify({filter:t,replacement:r,options:o})})},async deleteOne(t){return n(`${e}/deleteOne`,{method:"POST",body:JSON.stringify({filter:t})})},async deleteMany(t){return n(`${e}/deleteMany`,{method:"POST",body:JSON.stringify({filter:t})})},async findOneAndDelete(t,r){return n(`${e}/findOneAndDelete`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async aggregate(t,r){return n(`${e}/aggregate`,{method:"POST",body:JSON.stringify({pipeline:t,options:r})})},async aggregateCursor(t,r){let o=await n(`${e}/aggregate/cursor`,{method:"POST",body:JSON.stringify({pipeline:t,options:r})});return V(o.cursorId,o.batch,n,s)},async createIndex(t,r){return (await n(`${e}/indexes`,{method:"POST",body:JSON.stringify({keys:t,options:r})})).indexName},async dropIndex(t){await n(`${e}/indexes/${encodeURIComponent(t)}`,{method:"DELETE"});},async listIndexes(){return n(`${e}/indexes`)},async bulkWrite(t,r){return n(`${e}/bulkWrite`,{method:"POST",body:JSON.stringify({operations:t,options:r})})}}}function ue(s){let n=p(s);return {collection(e){return he(e,n)},async listCollections(){return n("/mongodb/collections")},async createCollection(e,t){await n("/mongodb/collections",{method:"POST",body:JSON.stringify({name:e,options:t})});},async dropCollection(e){await n(`/mongodb/collections/${encodeURIComponent(e)}`,{method:"DELETE"});},async renameCollection(e,t){await n(`/mongodb/collections/${encodeURIComponent(e)}/rename`,{method:"POST",body:JSON.stringify({newName:t})});},async command(e){return n("/mongodb/command",{method:"POST",body:JSON.stringify(e)})}}}function Ie(s,n,e,t){let r=n.type||"public",o="unsubscribed",a=new Map,c=[],i={},l=null,g=null,y=new Set,h=new Set,k=new Set,I=u=>{if(u.event){let f=a.get(u.event);f&&f.forEach(O=>O(u.payload));}},R=u=>{i=u.state||{},y.forEach(f=>f(i));},b=u=>{let f=u.key||"",O=u.currentPresences||[],d=u.joinedPresences||[],m=u.leftPresences||[];d.length>0&&(i[f]=O,h.forEach(P=>P(f,O,d))),m.length>0&&(O.length===0?delete i[f]:i[f]=O,k.forEach(P=>P(f,O,m))),y.forEach(P=>P(i));},T=u=>{let f={type:"db_change",projectId:u.projectId||"",schema:u.schema||"",table:u.table||"",operation:u.op,new:u.record,old:u.old_record,timestamp:u.ts||new Date().toISOString(),partial:u.partial};c.forEach(({options:O,handler:d})=>{if(O.table===f.table){let m=O.event||"*";(m==="*"||(Array.isArray(m)?m.includes(f.operation):m===f.operation))&&d(f);}});},v={get name(){return s},get type(){return r},get status(){return o},_handleMessage:u=>{switch(u.type){case "broadcast":I(u);break;case "presence_state":R(u);break;case "presence":b(u);break;case "db_change":T(u);break;case "subscribed":o="subscribed";break;case "error":o="error";break}},onDbChange(u,f){return c.push({options:u,handler:f}),o==="subscribed"&&e({type:"subscribe",channel:s,options:{table:u.table,filter:u.filter,event:u.event,columns:u.columns}}),v},on(u,f){return a.has(u)||a.set(u,new Set),a.get(u).add(f),v},off(u,f){return f?a.get(u)?.delete(f):a.delete(u),v},async broadcast(u){if(o!=="subscribed")throw new Error("Channel must be subscribed before broadcasting");e({type:"broadcast",channel:s,event:u.event,payload:u.payload,includeSelf:u.includeSelf});},presence:{async track(u){if(r!=="presence")throw new Error("Presence tracking is only available on presence channels");l=u.key||t()||"anonymous",g=u.state,e({type:"presence_track",channel:s,key:l,state:g});},async update(u){if(!g)throw new Error("Must call track() before update()");g={...g,...u},e({type:"presence_update",channel:s,key:l,state:g});},async untrack(){l&&(e({type:"presence_untrack",channel:s,key:l}),l=null,g=null);},state(){return {...i}},onSync(u){return y.add(u),v},onJoin(u){return h.add(u),v},onLeave(u){return k.add(u),v}},async subscribe(){return o==="subscribed"||(o="subscribing",e({type:"subscribe",channel:s}),c.forEach(({options:u})=>{e({type:"subscribe",channel:s,options:{table:u.table,filter:u.filter,event:u.event,columns:u.columns}});}),n.presenceState&&r==="presence"&&await v.presence.track({state:n.presenceState})),v},async unsubscribe(){o!=="unsubscribed"&&(l&&await v.presence.untrack(),e({type:"unsubscribe",channel:s}),o="unsubscribed",i={},a.clear(),c.length=0);}};return v}function de(s,n){let{wsUrl:e=s.baseUrl.replace(/^http/,"ws")+"/realtime/ws",autoReconnect:t=true,reconnectDelay:r=1e3,maxReconnectAttempts:o=10}=n??{},a=null,c="disconnected",i=null,l=null,g=0,y=null,h=null,k=new Map,I=new Map,R=new Set,b={connect:new Set,disconnect:new Set,error:new Set,reconnect:new Set},T=d=>{b[d].forEach(m=>m());},E=d=>{let m=`table:${d.table}`;if(d.filter){let C=(Array.isArray(d.filter)?d.filter:[d.filter]).map(w=>`${w.field}${w.operator||"eq"}${w.value}`).join("&");m+=`?${C}`;}return m},v=d=>{a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify(d));},u=d=>{if(d.channel){let m=k.get(d.channel);if(m){m._handleMessage(d);return}}switch(d.type){case "db_change":{let m={type:"db_change",projectId:d.projectId??"",schema:d.schema??"",table:d.table??"",operation:d.op,new:d.record,old:d.old_record,timestamp:d.ts??new Date().toISOString(),partial:d.partial},P=`table:${d.table}`;I.forEach((C,w)=>{(w===P||w.startsWith(P+"?"))&&C.forEach(B=>B(m));});break}case "presence":{let m={type:"presence",event:d.event,key:d.key||d.connectionId||"",connectionId:d.connectionId??"",projectId:d.projectId??"",currentPresences:d.currentPresences||[],leftPresences:d.leftPresences||[],joinedPresences:d.joinedPresences||[]};R.forEach(P=>P(m));break}case "welcome":i=d.connectionId||null;break;case "error":{console.error("[vaif/realtime] Server error:",d.message),T("error");break}}},f=()=>new Promise((d,m)=>{let P=new URLSearchParams;s.apiKey&&P.set(s.apiKeyHeader,s.apiKey),l&&P.set("token",l);let C=P.toString(),w=C?`${e}?${C}`:e;try{a=new WebSocket(w);}catch{m(new x("Failed to create WebSocket connection"));return}let B=()=>{c="connected",g=0,T("connect"),k.forEach(A=>{(A.status==="subscribed"||A.status==="subscribing")&&A.subscribe();}),I.forEach((A,N)=>{v({type:"subscribe",channel:N});}),h=setInterval(()=>{v({type:"ping"});},3e4),d();},ge=A=>{try{let N=JSON.parse(A.data);u(N);}catch{}},pe=()=>{if(c="disconnected",i=null,a=null,h&&(clearInterval(h),h=null),T("disconnect"),t&&g<o){c="reconnecting";let A=r*Math.pow(2,g);y=setTimeout(()=>{g++,T("reconnect"),f().catch(()=>{});},Math.min(A,3e4));}},me=()=>{T("error"),m(new x("WebSocket connection error"));};a.addEventListener("open",B),a.addEventListener("message",ge),a.addEventListener("close",pe),a.addEventListener("error",me);}),O=()=>{y&&(clearTimeout(y),y=null),h&&(clearInterval(h),h=null),g=o;};return {channel(d,m={}){let P=k.get(d);if(P)return P;let C=Ie(d,m,v,()=>i);return k.set(d,C),C},async removeChannel(d){let m=k.get(d.name);m&&(await m.unsubscribe(),k.delete(d.name));},getChannels(){return Array.from(k.values())},subscribe(d,m){let P=E(d);return I.has(P)||I.set(P,new Set),I.get(P).add(m),a?.readyState===WebSocket.OPEN&&v({type:"subscribe",channel:P}),()=>{let C=I.get(P);C&&(C.delete(m),C.size===0&&(I.delete(P),a?.readyState===WebSocket.OPEN&&v({type:"unsubscribe",channel:P})));}},subscribeToPresence(d){return R.add(d),()=>{R.delete(d);}},async connect(){if(c!=="connected"){if(!s.apiKey)throw new D("API key is required for realtime connections");c="connecting",await f();}},disconnect(){O(),k.forEach(d=>{d.unsubscribe();}),k.clear(),a&&(a.close(),a=null),c="disconnected",i=null;},get isConnected(){return c==="connected"},get connectionState(){return c},get connectionId(){return i},on(d,m){b[d].add(m);},off(d,m){b[d].delete(m);},setAuth(d){l=d;}}}var j={apiKeyHeader:"x-vaif-key",timeout:3e4,retry:{maxRetries:3,retryDelay:1e3,retryOn:[429,500,502,503,504]}};function Se(s){return {baseUrl:s.baseUrl.replace(/\/$/,""),apiKey:s.apiKey,apiKeyHeader:s.apiKeyHeader??j.apiKeyHeader,accessToken:s.accessToken,fetch:s.fetch??globalThis.fetch.bind(globalThis),timeout:s.timeout??j.timeout,retry:{maxRetries:s.retry?.maxRetries??j.retry.maxRetries,retryDelay:s.retry?.retryDelay??j.retry.retryDelay,retryOn:s.retry?.retryOn??[...j.retry.retryOn]}}}function ke(s){let n=Se(s),e=q(n),t=J(n),r=H(n),o=_(n),a=W(n),c=z(n),i=G(n),l=Q(n),g=X(n),y=Z(n),h=Y(n),k=ee(n),I=te(n),R=ne(n),b=re(n),T=oe(n),E=se(n),v=ie(n),u=ae(n),f=le(n),O=ce(n),d=ue(n);return {from:e.from,auth:t,functions:r,storage:o,projects:a,orgs:c,schema:i,secrets:l,deployments:g,realtimeMonitoring:y,storageDashboard:h,integrations:k,billing:I,admin:R,flags:b,security:T,ai:E,bootstrap:v,templates:u,oauth:f,docs:O,mongodb:d,realtime:m=>de(n,m)}}Object.defineProperty(exports,"AuthError",{enumerable:true,get:function(){return auth.AuthError}});Object.defineProperty(exports,"InvalidCredentialsError",{enumerable:true,get:function(){return auth.InvalidCredentialsError}});Object.defineProperty(exports,"SessionExpiredError",{enumerable:true,get:function(){return auth.SessionExpiredError}});Object.defineProperty(exports,"SessionStorage",{enumerable:true,get:function(){return auth.SessionStorage}});Object.defineProperty(exports,"VaifAuthClient",{enumerable:true,get:function(){return auth.VaifAuthClient}});Object.defineProperty(exports,"authLocalStorage",{enumerable:true,get:function(){return auth.localStorage}});Object.defineProperty(exports,"authSessionStorage",{enumerable:true,get:function(){return auth.sessionStorage}});Object.defineProperty(exports,"cookieStorage",{enumerable:true,get:function(){return auth.cookieStorage}});Object.defineProperty(exports,"createAuthClient",{enumerable:true,get:function(){return auth.createAuthClient}});Object.defineProperty(exports,"getDefaultStorage",{enumerable:true,get:function(){return auth.getDefaultStorage}});Object.defineProperty(exports,"isBrowser",{enumerable:true,get:function(){return auth.isBrowser}});Object.defineProperty(exports,"isMFAChallenge",{enumerable:true,get:function(){return auth.isMFAChallenge}});Object.defineProperty(exports,"memoryStorage",{enumerable:true,get:function(){return auth.memoryStorage}});exports.VaifAuthError=D;exports.VaifError=M;exports.VaifNetworkError=x;exports.VaifNotFoundError=$;exports.VaifRateLimitError=F;exports.VaifValidationError=U;exports.createVaifClient=ke;exports.isVaifError=ye;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- export{AuthError,InvalidCredentialsError,SessionExpiredError,SessionStorage,VaifAuthClient,localStorage as authLocalStorage,sessionStorage as authSessionStorage,cookieStorage,createAuthClient,getDefaultStorage,isBrowser,isMFAChallenge,memoryStorage}from'@vaiftech/auth';var M=class s 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,s);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,requestId:this.requestId,details:this.details}}},D=class extends M{constructor(n,e){super(n,{code:e?.code??"AUTH_ERROR",statusCode:e?.statusCode??401,requestId:e?.requestId}),this.name="VaifAuthError";}},U=class extends M{constructor(n,e){super(n,{code:"VALIDATION_ERROR",statusCode:400,requestId:e?.requestId,details:e?.details??e?.fieldErrors}),this.name="VaifValidationError",this.fieldErrors=e?.fieldErrors;}},x=class extends M{constructor(n,e){super(n,{code:"NETWORK_ERROR"}),this.name="VaifNetworkError",this.cause=e;}},F=class extends M{constructor(n,e){super(n,{code:"RATE_LIMITED",statusCode:429}),this.name="VaifRateLimitError",this.retryAfter=e;}},$=class extends M{constructor(n,e){super(n,{code:"NOT_FOUND",statusCode:404,requestId:e}),this.name="VaifNotFoundError";}};function ye(s){return s instanceof M}async function be(s){let n;try{n=await s.json();}catch{}let e=n?.message??n?.error??s.statusText??"Request failed",t=n?.requestId;switch(s.status){case 400:return new U(e,{details:n?.details,requestId:t});case 401:return new D(e,{code:"UNAUTHORIZED",statusCode:401,requestId:t});case 403:return new D(e,{code:"FORBIDDEN",statusCode:403,requestId:t});case 404:return new $(e,t);case 429:{let r=s.headers.get("Retry-After"),o=r?parseInt(r,10):void 0;return new F(e,o)}default:return new M(e,{code:n?.error??"HTTP_ERROR",statusCode:s.status,requestId:t,details:n?.details})}}async function fe(s,n){let{timeout:e=3e4,fetchFn:t,...r}=n,o=new AbortController,a=setTimeout(()=>o.abort(),e);try{let c=await t(s,{...r,signal:o.signal});if(clearTimeout(a),!c.ok)throw await be(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 M?c:c instanceof Error&&c.name==="AbortError"?new x("Request timed out"):c instanceof Error?new x(c.message,c):new x("Network request failed")}}function p(s){let{baseUrl:n,apiKey:e,apiKeyHeader:t,accessToken:r,fetch:o,timeout:a}=s;return async function(i,l={}){let g=`${n}${i}`,y={"Content-Type":"application/json",...l.headers??{}};if(e&&(y[t]=e),r){let h=typeof r=="function"?await r():r;y.Authorization=`Bearer ${h}`;}return fe(g,{...l,headers:y,timeout:a,fetchFn:o})}}function S(s){let n=new URLSearchParams;for(let[t,r]of Object.entries(s))r!==void 0&&n.set(t,String(r));let e=n.toString();return e?`?${e}`:""}function Pe(s){return JSON.stringify(s)}function L(s,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=Pe(t.where)),t.orderBy){let l=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];i.orderBy=JSON.stringify(l);}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},o=()=>S(r()),a=i=>L(s,n,{...t,...i}),c={async list(i){i&&(t={...t,...i});let l=o();return n(`/generated/${s}${l}`)},async get(i){let l={};t.select&&t.select.length>0&&(l.select=t.select.join(",")),t.include&&t.include.length>0&&(l.include=JSON.stringify(t.include));let g=S(l);return n(`/generated/${s}/${encodeURIComponent(i)}${g}`)},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 '${s}' matching the query`);return i},async create(i){return n(`/generated/${s}`,{method:"POST",body:JSON.stringify(i)})},async update(i,l){return n(`/generated/${s}/${encodeURIComponent(i)}`,{method:"PATCH",body:JSON.stringify(l)})},async delete(i){return n(`/generated/${s}/${encodeURIComponent(i)}`,{method:"DELETE"})},async createMany(i,l){return n(`/generated/${s}/batch`,{method:"POST",body:JSON.stringify({records:i,skipOnConflict:l?.skipOnConflict,returnRecords:l?.returnRecords})})},async updateMany(i,l){r();return n(`/generated/${s}/batch`,{method:"PATCH",body:JSON.stringify({data:i,where:t.where,returnRecords:l?.returnRecords})})},async deleteMany(){return n(`/generated/${s}/batch`,{method:"DELETE",body:JSON.stringify({where:t.where})})},async upsert(i,l){return n(`/generated/${s}/upsert`,{method:"POST",body:JSON.stringify({data:i,conflictFields:l.conflictFields,updateFields:l.updateFields})})},async count(){let i=r(),l=S(i);return (await n(`/generated/${s}/count${l}`)).count},async sum(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/sum${g}`)).sum},async avg(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/avg${g}`)).avg},async min(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/min${g}`)).min},async max(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/max${g}`)).max},async aggregate(i,l){return n(`/generated/${s}/aggregate`,{method:"POST",body:JSON.stringify({aggregates:i,where:l?.where||t.where,groupBy:l?.groupBy,having:l?.having})})},async paginate(i){let l=i.page||1,g=i.pageSize||20,y=(l-1)*g,h=r();h.limit=g,h.offset=y,h.includeCount=true;let k=S(h),I=await n(`/generated/${s}${k}`),R=I.total||I.data.length,b=Math.ceil(R/g);return {data:I.data,pageInfo:{total:R,page:l,pageSize:g,pageCount:b,hasNextPage:l<b,hasPrevPage:l>1}}},async cursorPaginate(i){let l=r();l.limit=i.limit||20,i.cursor&&(l.cursor=i.cursor);let g=S(l),y=await n(`/generated/${s}/cursor${g}`);return {data:y.data,nextCursor:y.nextCursor,prevCursor:y.prevCursor,hasMore:y.hasMore}},where(i){if(t.where){let l=t.where;return a({where:{AND:[...Array.isArray(l)?l:[l],i]}})}return a({where:i})},orderBy(i,l="asc"){let g={field:i,direction:l};if(t.orderBy){let y=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];return a({orderBy:[...y,g]})}return a({orderBy:g})},select(...i){return a({select:i})},limit(i){return a({limit:i})},offset(i){return a({offset:i})},include(i){let l=t.include||[];return a({include:[...l,i]})},distinct(...i){return a({distinct:i})}};return c}function J(s){let n=p(s);return {from(e){return L(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 o=(await n("/generated/transaction/start",{method:"POST",body:JSON.stringify({isolationLevel:t?.isolationLevel,timeout:t?.timeout})})).transactionId,a=(i,l)=>{let g=new Headers(l?.headers);return g.set("X-Transaction-Id",o),n(i,{...l,headers:g})},c={from(i){return L(i,a)},async raw(i,l){return a("/generated/raw",{method:"POST",body:JSON.stringify({query:i,params:l})})},async transaction(){throw new Error("Nested transactions are not supported")},async withTransaction(){throw new Error("Nested transactions are not supported")}};try{let i=await e(c);return await n("/generated/transaction/commit",{method:"POST",body:JSON.stringify({transactionId:o})}),i}catch(i){throw await n("/generated/transaction/rollback",{method:"POST",body:JSON.stringify({transactionId:o})}).catch(()=>{}),i}}}}function q(s){let n=p(s);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 K(s){return new Promise(n=>setTimeout(n,s))}function _(s){let n=p(s);async function e(t,r,o){let a=o?.retry||{},c=a.maxRetries??0,i=a.initialDelay??1e3,l=a.maxDelay??3e4,g=a.backoffMultiplier??2,y=a.retryOnStatus??[429,500,502,503,504],h=a.retryOnNetworkError??true,k=null,I=i;for(let R=0;R<=c;R++)try{let b={};o?.version!==void 0&&(b.version=o.version),o?.includeLogs&&(b.includeLogs=!0);let T=S(b),A=await n(`/functions/${t}/invoke${T}`,{method:"POST",body:JSON.stringify(r??{}),headers:o?.headers});if(y.includes(A.status)&&R<c){k=new Error(`Function returned status ${A.status}`),await K(I),I=Math.min(I*g,l);continue}return A}catch(b){k=b;let T=b instanceof TypeError||b.message?.includes("network")||b.message?.includes("fetch");if(h&&T&&R<c){await K(I),I=Math.min(I*g,l);continue}throw b}throw k||new Error("Function invocation failed after retries")}return {invoke:e,async invokeByName(t,r,o){let a={};o?.version!==void 0&&(a.version=o.version),o?.includeLogs&&(a.includeLogs=true);let c=S(a);return n(`/functions/name/${encodeURIComponent(t)}/invoke${c}`,{method:"POST",body:JSON.stringify(r??{}),headers:o?.headers})},async batchInvoke(t,r){let a=(await Promise.allSettled(t.map(c=>this.invoke(c.functionId,c.input,r)))).map((c,i)=>c.status==="fulfilled"?{functionId:t[i].functionId,success:true,result:c.value}:{functionId:t[i].functionId,success:false,error:c.reason?.message||"Unknown error"});return {results:a,successCount:a.filter(c=>c.success).length,errorCount:a.filter(c=>!c.success).length}},rpc(t,r){let o=this,a=async(c,i)=>{let l={...r,...i};return (await e(t,{body:c},l)).data};return Object.defineProperty(a,"id",{value:t,writable:false}),a.getInfo=()=>o.get(t),a.getInvocations=c=>o.getInvocations({...c,functionId:t}),a},async list(t){let r={envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset},o=S(r);return n(`/functions/project/${t.projectId}${o}`)},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,o){return n(`/functions/${t}/deploy`,{method:"POST",body:JSON.stringify({sourceCode:r,createVersion:o?.createVersion,versionDescription:o?.versionDescription,envVars:o?.envVars,secrets:o?.secrets})})},async getSource(t,r){let o=r!==void 0?`?version=${r}`:"";return n(`/functions/${t}/source${o}`)},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},o=S(r);return (await n(`/functions/invocations${o}`)).invocations},async getInvocation(t){return n(`/functions/invocations/${t}`)},async getLogs(t,r){let o={since:r?.since,until:r?.until,level:r?.level,limit:r?.limit},a=S(o);return (await n(`/functions/${t}/logs${a}`)).logs}}}function H(s){let n=p(s),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,o){return (await this.getDownloadUrl(t,{...o,expiresIn:r})).url},async createSignedUrls(t,r=3600,o){return await Promise.all(t.map(async c=>({key:c,url:await this.createSignedUrl(c,r,o)})))},async upload(t,r,o){let a=r instanceof Blob?r:new Blob([r]),c=a.size,i=o?.contentType||(r instanceof File?r.type:void 0)||"application/octet-stream",l=await this.getUploadUrl(t,{...o,contentType:i,sizeBytes:c}),g=await s.fetch(l.url,{method:"PUT",body:a,headers:{"Content-Type":i,...o?.cacheControl&&{"Cache-Control":o.cacheControl},...o?.contentDisposition&&{"Content-Disposition":o.contentDisposition}}});if(!g.ok)throw new Error(`Upload failed: ${g.statusText}`);let y=o?.bucket||e,h=l.url.split("?")[0];return {ok:true,key:t,bucket:y,url:h,publicUrl:o?.isPublic?this.getPublicUrl(t,{bucket:y}):void 0,size:c,contentType:i}},async uploadFromUrl(t,r,o){return n("/storage/upload-from-url",{method:"POST",body:JSON.stringify({key:t,url:r,bucket:o?.bucket||e,contentType:o?.contentType,metadata:o?.metadata,isPublic:o?.isPublic,timeout:o?.timeout})})},async download(t,r){let o=await this.getDownloadUrl(t,r),a=await s.fetch(o.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},o=S(r);return n(`/storage/files${o}`)},async getMetadata(t,r){let o=r?.bucket||e;return n(`/storage/files/${encodeURIComponent(o)}/${encodeURIComponent(t)}/metadata`)},async updateMetadata(t,r,o){let a=o?.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,o){return n("/storage/files/copy",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:o?.sourceBucket||e,destinationKey:r,destinationBucket:o?.destinationBucket||o?.sourceBucket||e,metadata:o?.metadata})})},async move(t,r,o){return n("/storage/files/move",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:o?.sourceBucket||e,destinationKey:r,destinationBucket:o?.destinationBucket||o?.sourceBucket||e,metadata:o?.metadata})})},async delete(t,r){let o=r?.bucket||e;await n(`/storage/files/${encodeURIComponent(o)}/${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 o=r?.bucket||e;return `${s.baseUrl.replace("/api","")}/storage/${encodeURIComponent(o)}/${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,o){let a=o instanceof Blob?o:new Blob([o]),{url:c}=await n(`/storage/multipart/${t}/part-url`,{method:"POST",body:JSON.stringify({partNumber:r})}),i=await s.fetch(c,{method:"PUT",body:a});if(!i.ok)throw new Error(`Part upload failed: ${i.statusText}`);let l=i.headers.get("etag")||"";return {partNumber:r,etag:l}},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 W(s){let n=p(s);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 z(s){let n=p(s);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 G(s){let n=p(s);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 Q(s){let n=p(s);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 o=r.toString(),a=`/functions/secrets/project/${e}${o?`?${o}`:""}`;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 X(s){let n=p(s);return {async list(e,t){let r=new URLSearchParams;t&&r.set("env",t);let o=r.toString(),a=`/deployments/project/${e}${o?`?${o}`:""}`;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)}),o=await n(`/deployments/${r.deploymentId}`);return {deployment:{...o.deployment,steps:o.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 o=r.toString(),a=`/deployments/tokens/project/${encodeURIComponent(e)}${o?`?${o}`:""}`;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 Z(s){let n=p(s);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 o=r.toString(),a=`/realtime/events/project/${e}${o?`?${o}`:""}`;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 Y(s){let n=p(s);return {async listBuckets(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let o=r.toString(),a=`/buckets/project/${e}${o?`?${o}`:""}`;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 o=r.toString(),a=`/buckets/${e}/files${o?`?${o}`:""}`;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,o){let a=o?.prefix?`${o.prefix}${t}`:t,c=o?.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 ee(s){let n=p(s);return {async list(e,t){let r={type:t?.type,enabled:t?.enabled},o=S(r);return (await n(`/integrations/subscriptions/project/${e}${o}`)).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=S(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=S(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},o=S(r);return (await n(`/integrations/dlq/project/${e}${o}`)).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(","),o=r.find(b=>b.startsWith("t=")),a=r.find(b=>b.startsWith("v1="));if(!o||!a)return !1;let c=parseInt(o.slice(2),10),i=a.slice(3),l=Math.floor(Date.now()/1e3);if(Math.abs(l-c)>t)return !1;let g=`${c}.${e.payload}`,y=new TextEncoder,h=y.encode(e.secret),k=y.encode(g),I=Array.from(h).concat(Array.from(k)).reduce((b,T)=>b+T,0).toString(16);if(i.length!==I.length)return !1;let R=0;for(let b=0;b<i.length;b++)R|=i.charCodeAt(b)^I.charCodeAt(b);return R===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 te(s){let n=p(s);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 ne(s){let n=p(s);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 re(s){let n=p(s);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 oe(s){let n=p(s);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 o=r.toString(),a=`/security/audit/${encodeURIComponent(e)}${o?`?${o}`:""}`;return n(a)},async listEnvVars(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let o=r.toString(),a=`/projects/${encodeURIComponent(e)}/env-vars${o?`?${o}`:""}`;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 se(s){let n=p(s);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 o=r.toString(),a=`/ai/usage/org/${encodeURIComponent(e)}${o?`?${o}`:""}`;return n(a)},async getBudgetStatus(e){let[t,r]=await Promise.all([this.getOrgSettings(e),this.getUsage(e)]),o=t?.monthlyBudgetCents??1e4,a=r.costCents,c=Math.max(0,o-a),i=o>0?Math.round(a/o*100):0;return {spent:a,budget:o,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 ie(s){let n=p(s);return {async load(){return n("/bootstrap")}}}function ae(s){let n=p(s);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(),o=`/templates${r?`?${r}`:""}`;return (await n(o)).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 le(s){let n=p(s);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 ce(s){let n=p(s);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 V(s,n,e,t){let r=[...n],o=0,a=false,c=false,i=async()=>{if(c||a)return;let l=await e(`/mongodb/${t}/cursor/${s}/next`,{method:"POST"});r=l.batch,o=0,a=l.exhausted;};return {id:s,async hasNext(){return c?false:o<r.length?true:a?false:(await i(),r.length>0)},async next(){return c?null:o<r.length?r[o++]:a||(await i(),r.length===0)?null:r[o++]},async toArray(){if(c)return [];let l=[];for(;o<r.length;)l.push(r[o++]);for(;!a;)await i(),l.push(...r),o=r.length;return l},async forEach(l){if(!c){for(;o<r.length;)await l(r[o++]);for(;!a;){await i();for(let g of r)await l(g);o=r.length;}}},map(l){let g=r.slice(o).map(l);return V(s,g,e,t)},async close(){if(!c){c=true;try{await e(`/mongodb/${t}/cursor/${s}/close`,{method:"POST"});}catch{}}},isClosed(){return c}}}function he(s,n){let e=`/mongodb/${encodeURIComponent(s)}`;return {collectionName:s,async find(t,r){return n(`${e}/find`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async findCursor(t,r){let o=await n(`${e}/find/cursor`,{method:"POST",body:JSON.stringify({filter:t,options:r})});return V(o.cursorId,o.batch,n,s)},async findOne(t,r){return n(`${e}/findOne`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async findById(t,r){return n(`${e}/findById/${encodeURIComponent(t)}`,{method:"GET",...r&&{body:JSON.stringify({options:r})}})},async countDocuments(t){return (await n(`${e}/count`,{method:"POST",body:JSON.stringify({filter:t})})).count},async estimatedDocumentCount(){return (await n(`${e}/estimatedCount`)).count},async distinct(t,r){return n(`${e}/distinct`,{method:"POST",body:JSON.stringify({field:t,...r})})},async insertOne(t){return n(`${e}/insertOne`,{method:"POST",body:JSON.stringify({document:t})})},async insertMany(t,r){return n(`${e}/insertMany`,{method:"POST",body:JSON.stringify({documents:t,options:r})})},async updateOne(t,r,o){return n(`${e}/updateOne`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async updateMany(t,r,o){return n(`${e}/updateMany`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async replaceOne(t,r,o){return n(`${e}/replaceOne`,{method:"POST",body:JSON.stringify({filter:t,replacement:r,options:o})})},async findOneAndUpdate(t,r,o){return n(`${e}/findOneAndUpdate`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async findOneAndReplace(t,r,o){return n(`${e}/findOneAndReplace`,{method:"POST",body:JSON.stringify({filter:t,replacement:r,options:o})})},async deleteOne(t){return n(`${e}/deleteOne`,{method:"POST",body:JSON.stringify({filter:t})})},async deleteMany(t){return n(`${e}/deleteMany`,{method:"POST",body:JSON.stringify({filter:t})})},async findOneAndDelete(t,r){return n(`${e}/findOneAndDelete`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async aggregate(t,r){return n(`${e}/aggregate`,{method:"POST",body:JSON.stringify({pipeline:t,options:r})})},async aggregateCursor(t,r){let o=await n(`${e}/aggregate/cursor`,{method:"POST",body:JSON.stringify({pipeline:t,options:r})});return V(o.cursorId,o.batch,n,s)},async createIndex(t,r){return (await n(`${e}/indexes`,{method:"POST",body:JSON.stringify({keys:t,options:r})})).indexName},async dropIndex(t){await n(`${e}/indexes/${encodeURIComponent(t)}`,{method:"DELETE"});},async listIndexes(){return n(`${e}/indexes`)},async bulkWrite(t,r){return n(`${e}/bulkWrite`,{method:"POST",body:JSON.stringify({operations:t,options:r})})}}}function ue(s){let n=p(s);return {collection(e){return he(e,n)},async listCollections(){return n("/mongodb/collections")},async createCollection(e,t){await n("/mongodb/collections",{method:"POST",body:JSON.stringify({name:e,options:t})});},async dropCollection(e){await n(`/mongodb/collections/${encodeURIComponent(e)}`,{method:"DELETE"});},async renameCollection(e,t){await n(`/mongodb/collections/${encodeURIComponent(e)}/rename`,{method:"POST",body:JSON.stringify({newName:t})});},async command(e){return n("/mongodb/command",{method:"POST",body:JSON.stringify(e)})}}}function Ie(s,n,e,t){let r=n.type||"public",o="unsubscribed",a=new Map,c=[],i={},l=null,g=null,y=new Set,h=new Set,k=new Set,I=u=>{if(u.event){let f=a.get(u.event);f&&f.forEach(O=>O(u.payload));}},R=u=>{i=u.state||{},y.forEach(f=>f(i));},b=u=>{let f=u.key||"",O=u.currentPresences||[],d=u.joinedPresences||[],m=u.leftPresences||[];d.length>0&&(i[f]=O,h.forEach(P=>P(f,O,d))),m.length>0&&(O.length===0?delete i[f]:i[f]=O,k.forEach(P=>P(f,O,m))),y.forEach(P=>P(i));},T=u=>{let f={type:"db_change",projectId:u.projectId||"",schema:u.schema||"",table:u.table||"",operation:u.op,new:u.record,old:u.old_record,timestamp:u.ts||new Date().toISOString(),partial:u.partial};c.forEach(({options:O,handler:d})=>{if(O.table===f.table){let m=O.event||"*";(m==="*"||(Array.isArray(m)?m.includes(f.operation):m===f.operation))&&d(f);}});},v={get name(){return s},get type(){return r},get status(){return o},_handleMessage:u=>{switch(u.type){case "broadcast":I(u);break;case "presence_state":R(u);break;case "presence":b(u);break;case "db_change":T(u);break;case "subscribed":o="subscribed";break;case "error":o="error";break}},onDbChange(u,f){return c.push({options:u,handler:f}),o==="subscribed"&&e({type:"subscribe",channel:s,options:{table:u.table,filter:u.filter,event:u.event,columns:u.columns}}),v},on(u,f){return a.has(u)||a.set(u,new Set),a.get(u).add(f),v},off(u,f){return f?a.get(u)?.delete(f):a.delete(u),v},async broadcast(u){if(o!=="subscribed")throw new Error("Channel must be subscribed before broadcasting");e({type:"broadcast",channel:s,event:u.event,payload:u.payload,includeSelf:u.includeSelf});},presence:{async track(u){if(r!=="presence")throw new Error("Presence tracking is only available on presence channels");l=u.key||t()||"anonymous",g=u.state,e({type:"presence_track",channel:s,key:l,state:g});},async update(u){if(!g)throw new Error("Must call track() before update()");g={...g,...u},e({type:"presence_update",channel:s,key:l,state:g});},async untrack(){l&&(e({type:"presence_untrack",channel:s,key:l}),l=null,g=null);},state(){return {...i}},onSync(u){return y.add(u),v},onJoin(u){return h.add(u),v},onLeave(u){return k.add(u),v}},async subscribe(){return o==="subscribed"||(o="subscribing",e({type:"subscribe",channel:s}),c.forEach(({options:u})=>{e({type:"subscribe",channel:s,options:{table:u.table,filter:u.filter,event:u.event,columns:u.columns}});}),n.presenceState&&r==="presence"&&await v.presence.track({state:n.presenceState})),v},async unsubscribe(){o!=="unsubscribed"&&(l&&await v.presence.untrack(),e({type:"unsubscribe",channel:s}),o="unsubscribed",i={},a.clear(),c.length=0);}};return v}function de(s,n){let{wsUrl:e=s.baseUrl.replace(/^http/,"ws")+"/realtime/ws",autoReconnect:t=true,reconnectDelay:r=1e3,maxReconnectAttempts:o=10}=n??{},a=null,c="disconnected",i=null,l=null,g=0,y=null,h=null,k=new Map,I=new Map,R=new Set,b={connect:new Set,disconnect:new Set,error:new Set,reconnect:new Set},T=d=>{b[d].forEach(m=>m());},A=d=>{let m=`table:${d.table}`;if(d.filter){let C=(Array.isArray(d.filter)?d.filter:[d.filter]).map(w=>`${w.field}${w.operator||"eq"}${w.value}`).join("&");m+=`?${C}`;}return m},v=d=>{a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify(d));},u=d=>{if(d.channel){let m=k.get(d.channel);if(m){m._handleMessage(d);return}}switch(d.type){case "db_change":{let m={type:"db_change",projectId:d.projectId??"",schema:d.schema??"",table:d.table??"",operation:d.op,new:d.record,old:d.old_record,timestamp:d.ts??new Date().toISOString(),partial:d.partial},P=`table:${d.table}`;I.forEach((C,w)=>{(w===P||w.startsWith(P+"?"))&&C.forEach(B=>B(m));});break}case "presence":{let m={type:"presence",event:d.event,key:d.key||d.connectionId||"",connectionId:d.connectionId??"",projectId:d.projectId??"",currentPresences:d.currentPresences||[],leftPresences:d.leftPresences||[],joinedPresences:d.joinedPresences||[]};R.forEach(P=>P(m));break}case "welcome":i=d.connectionId||null;break;case "error":{console.error("[vaif/realtime] Server error:",d.message),T("error");break}}},f=()=>new Promise((d,m)=>{let P=new URLSearchParams;s.apiKey&&P.set(s.apiKeyHeader,s.apiKey),l&&P.set("token",l);let C=P.toString(),w=C?`${e}?${C}`:e;try{a=new WebSocket(w);}catch{m(new x("Failed to create WebSocket connection"));return}let B=()=>{c="connected",g=0,T("connect"),k.forEach(E=>{(E.status==="subscribed"||E.status==="subscribing")&&E.subscribe();}),I.forEach((E,N)=>{v({type:"subscribe",channel:N});}),h=setInterval(()=>{v({type:"ping"});},3e4),d();},ge=E=>{try{let N=JSON.parse(E.data);u(N);}catch{}},pe=()=>{if(c="disconnected",i=null,a=null,h&&(clearInterval(h),h=null),T("disconnect"),t&&g<o){c="reconnecting";let E=r*Math.pow(2,g);y=setTimeout(()=>{g++,T("reconnect"),f().catch(()=>{});},Math.min(E,3e4));}},me=()=>{T("error"),m(new x("WebSocket connection error"));};a.addEventListener("open",B),a.addEventListener("message",ge),a.addEventListener("close",pe),a.addEventListener("error",me);}),O=()=>{y&&(clearTimeout(y),y=null),h&&(clearInterval(h),h=null),g=o;};return {channel(d,m={}){let P=k.get(d);if(P)return P;let C=Ie(d,m,v,()=>i);return k.set(d,C),C},async removeChannel(d){let m=k.get(d.name);m&&(await m.unsubscribe(),k.delete(d.name));},getChannels(){return Array.from(k.values())},subscribe(d,m){let P=A(d);return I.has(P)||I.set(P,new Set),I.get(P).add(m),a?.readyState===WebSocket.OPEN&&v({type:"subscribe",channel:P}),()=>{let C=I.get(P);C&&(C.delete(m),C.size===0&&(I.delete(P),a?.readyState===WebSocket.OPEN&&v({type:"unsubscribe",channel:P})));}},subscribeToPresence(d){return R.add(d),()=>{R.delete(d);}},async connect(){if(c!=="connected"){if(!s.apiKey)throw new D("API key is required for realtime connections");c="connecting",await f();}},disconnect(){O(),k.forEach(d=>{d.unsubscribe();}),k.clear(),a&&(a.close(),a=null),c="disconnected",i=null;},get isConnected(){return c==="connected"},get connectionState(){return c},get connectionId(){return i},on(d,m){b[d].add(m);},off(d,m){b[d].delete(m);},setAuth(d){l=d;}}}var j={apiKeyHeader:"x-vaif-key",timeout:3e4,retry:{maxRetries:3,retryDelay:1e3,retryOn:[429,500,502,503,504]}};function Se(s){return {baseUrl:s.baseUrl.replace(/\/$/,""),apiKey:s.apiKey,apiKeyHeader:s.apiKeyHeader??j.apiKeyHeader,accessToken:s.accessToken,fetch:s.fetch??globalThis.fetch.bind(globalThis),timeout:s.timeout??j.timeout,retry:{maxRetries:s.retry?.maxRetries??j.retry.maxRetries,retryDelay:s.retry?.retryDelay??j.retry.retryDelay,retryOn:s.retry?.retryOn??[...j.retry.retryOn]}}}function ke(s){let n=Se(s),e=J(n),t=q(n),r=_(n),o=H(n),a=W(n),c=z(n),i=G(n),l=Q(n),g=X(n),y=Z(n),h=Y(n),k=ee(n),I=te(n),R=ne(n),b=re(n),T=oe(n),A=se(n),v=ie(n),u=ae(n),f=le(n),O=ce(n),d=ue(n);return {from:e.from,auth:t,functions:r,storage:o,projects:a,orgs:c,schema:i,secrets:l,deployments:g,realtimeMonitoring:y,storageDashboard:h,integrations:k,billing:I,admin:R,flags:b,security:T,ai:A,bootstrap:v,templates:u,oauth:f,docs:O,mongodb:d,realtime:m=>de(n,m)}}export{D as VaifAuthError,M as VaifError,x as VaifNetworkError,$ as VaifNotFoundError,F as VaifRateLimitError,U as VaifValidationError,ke as createVaifClient,ye as isVaifError};
1
+ export{AuthError,InvalidCredentialsError,SessionExpiredError,SessionStorage,VaifAuthClient,localStorage as authLocalStorage,sessionStorage as authSessionStorage,cookieStorage,createAuthClient,getDefaultStorage,isBrowser,isMFAChallenge,memoryStorage}from'@vaiftech/auth';var M=class s 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,s);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,requestId:this.requestId,details:this.details}}},D=class extends M{constructor(n,e){super(n,{code:e?.code??"AUTH_ERROR",statusCode:e?.statusCode??401,requestId:e?.requestId}),this.name="VaifAuthError";}},U=class extends M{constructor(n,e){super(n,{code:"VALIDATION_ERROR",statusCode:400,requestId:e?.requestId,details:e?.details??e?.fieldErrors}),this.name="VaifValidationError",this.fieldErrors=e?.fieldErrors;}},x=class extends M{constructor(n,e){super(n,{code:"NETWORK_ERROR"}),this.name="VaifNetworkError",this.cause=e;}},F=class extends M{constructor(n,e){super(n,{code:"RATE_LIMITED",statusCode:429}),this.name="VaifRateLimitError",this.retryAfter=e;}},$=class extends M{constructor(n,e){super(n,{code:"NOT_FOUND",statusCode:404,requestId:e}),this.name="VaifNotFoundError";}};function ye(s){return s instanceof M}async function be(s){let n;try{n=await s.json();}catch{}let e=n?.message??n?.error??s.statusText??"Request failed",t=n?.requestId;switch(s.status){case 400:return new U(e,{details:n?.details,requestId:t});case 401:return new D(e,{code:"UNAUTHORIZED",statusCode:401,requestId:t});case 403:return new D(e,{code:"FORBIDDEN",statusCode:403,requestId:t});case 404:return new $(e,t);case 429:{let r=s.headers.get("Retry-After"),o=r?parseInt(r,10):void 0;return new F(e,o)}default:return new M(e,{code:n?.error??"HTTP_ERROR",statusCode:s.status,requestId:t,details:n?.details})}}async function fe(s,n){let{timeout:e=3e4,fetchFn:t,...r}=n,o=new AbortController,a=setTimeout(()=>o.abort(),e);try{let c=await t(s,{...r,signal:o.signal});if(clearTimeout(a),!c.ok)throw await be(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 M?c:c instanceof Error&&c.name==="AbortError"?new x("Request timed out"):c instanceof Error?new x(c.message,c):new x("Network request failed")}}function p(s){let{baseUrl:n,apiKey:e,apiKeyHeader:t,accessToken:r,fetch:o,timeout:a}=s;return async function(i,l={}){let g=`${n}${i}`,y={"Content-Type":"application/json",...l.headers??{}};if(e&&(y[t]=e),r){let h=typeof r=="function"?await r():r;y.Authorization=`Bearer ${h}`;}return fe(g,{...l,headers:y,timeout:a,fetchFn:o})}}function S(s){let n=new URLSearchParams;for(let[t,r]of Object.entries(s))r!==void 0&&n.set(t,String(r));let e=n.toString();return e?`?${e}`:""}function Pe(s){return JSON.stringify(s)}function L(s,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=Pe(t.where)),t.orderBy){let l=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];i.orderBy=JSON.stringify(l);}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},o=()=>S(r()),a=i=>L(s,n,{...t,...i}),c={async list(i){i&&(t={...t,...i});let l=o();return n(`/generated/${s}${l}`)},async get(i){let l={};t.select&&t.select.length>0&&(l.select=t.select.join(",")),t.include&&t.include.length>0&&(l.include=JSON.stringify(t.include));let g=S(l);return n(`/generated/${s}/${encodeURIComponent(i)}${g}`)},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 '${s}' matching the query`);return i},async create(i){return n(`/generated/${s}`,{method:"POST",body:JSON.stringify(i)})},async update(i,l){return n(`/generated/${s}/${encodeURIComponent(i)}`,{method:"PATCH",body:JSON.stringify(l)})},async delete(i){return n(`/generated/${s}/${encodeURIComponent(i)}`,{method:"DELETE"})},async createMany(i,l){return n(`/generated/${s}/batch`,{method:"POST",body:JSON.stringify({records:i,skipOnConflict:l?.skipOnConflict,returnRecords:l?.returnRecords})})},async updateMany(i,l){r();return n(`/generated/${s}/batch`,{method:"PATCH",body:JSON.stringify({data:i,where:t.where,returnRecords:l?.returnRecords})})},async deleteMany(){return n(`/generated/${s}/batch`,{method:"DELETE",body:JSON.stringify({where:t.where})})},async upsert(i,l){return n(`/generated/${s}/upsert`,{method:"POST",body:JSON.stringify({data:i,conflictFields:l.conflictFields,updateFields:l.updateFields})})},async count(){let i=r(),l=S(i);return (await n(`/generated/${s}/count${l}`)).count},async sum(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/sum${g}`)).sum},async avg(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/avg${g}`)).avg},async min(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/min${g}`)).min},async max(i){let l=r(),g=S({...l,field:i});return (await n(`/generated/${s}/max${g}`)).max},async aggregate(i,l){return n(`/generated/${s}/aggregate`,{method:"POST",body:JSON.stringify({aggregates:i,where:l?.where||t.where,groupBy:l?.groupBy,having:l?.having})})},async paginate(i){let l=i.page||1,g=i.pageSize||20,y=(l-1)*g,h=r();h.limit=g,h.offset=y,h.includeCount=true;let k=S(h),I=await n(`/generated/${s}${k}`),R=I.total||I.data.length,b=Math.ceil(R/g);return {data:I.data,pageInfo:{total:R,page:l,pageSize:g,pageCount:b,hasNextPage:l<b,hasPrevPage:l>1}}},async cursorPaginate(i){let l=r();l.limit=i.limit||20,i.cursor&&(l.cursor=i.cursor);let g=S(l),y=await n(`/generated/${s}/cursor${g}`);return {data:y.data,nextCursor:y.nextCursor,prevCursor:y.prevCursor,hasMore:y.hasMore}},where(i){if(t.where){let l=t.where;return a({where:{AND:[...Array.isArray(l)?l:[l],i]}})}return a({where:i})},orderBy(i,l="asc"){let g={field:i,direction:l};if(t.orderBy){let y=Array.isArray(t.orderBy)?t.orderBy:[t.orderBy];return a({orderBy:[...y,g]})}return a({orderBy:g})},select(...i){return a({select:i})},limit(i){return a({limit:i})},offset(i){return a({offset:i})},include(i){let l=t.include||[];return a({include:[...l,i]})},distinct(...i){return a({distinct:i})}};return c}function q(s){let n=p(s);return {from(e){return L(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 o=(await n("/generated/transaction/start",{method:"POST",body:JSON.stringify({isolationLevel:t?.isolationLevel,timeout:t?.timeout})})).transactionId,a=(i,l)=>{let g=new Headers(l?.headers);return g.set("X-Transaction-Id",o),n(i,{...l,headers:g})},c={from(i){return L(i,a)},async raw(i,l){return a("/generated/raw",{method:"POST",body:JSON.stringify({query:i,params:l})})},async transaction(){throw new Error("Nested transactions are not supported")},async withTransaction(){throw new Error("Nested transactions are not supported")}};try{let i=await e(c);return await n("/generated/transaction/commit",{method:"POST",body:JSON.stringify({transactionId:o})}),i}catch(i){throw await n("/generated/transaction/rollback",{method:"POST",body:JSON.stringify({transactionId:o})}).catch(()=>{}),i}}}}function J(s){let n=p(s);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 K(s){return new Promise(n=>setTimeout(n,s))}function H(s){let n=p(s);async function e(t,r,o){let a=o?.retry||{},c=a.maxRetries??0,i=a.initialDelay??1e3,l=a.maxDelay??3e4,g=a.backoffMultiplier??2,y=a.retryOnStatus??[429,500,502,503,504],h=a.retryOnNetworkError??true,k=null,I=i;for(let R=0;R<=c;R++)try{let b={};o?.version!==void 0&&(b.version=o.version),o?.includeLogs&&(b.includeLogs=!0);let T=S(b),E=await n(`/functions/${t}/invoke${T}`,{method:"POST",body:JSON.stringify(r??{}),headers:o?.headers});if(y.includes(E.status)&&R<c){k=new Error(`Function returned status ${E.status}`),await K(I),I=Math.min(I*g,l);continue}return E}catch(b){k=b;let T=b instanceof TypeError||b.message?.includes("network")||b.message?.includes("fetch");if(h&&T&&R<c){await K(I),I=Math.min(I*g,l);continue}throw b}throw k||new Error("Function invocation failed after retries")}return {invoke:e,async invokeByName(t,r,o){let a={};o?.version!==void 0&&(a.version=o.version),o?.includeLogs&&(a.includeLogs=true);let c=S(a);return n(`/functions/name/${encodeURIComponent(t)}/invoke${c}`,{method:"POST",body:JSON.stringify(r??{}),headers:o?.headers})},async batchInvoke(t,r){let a=(await Promise.allSettled(t.map(c=>this.invoke(c.functionId,c.input,r)))).map((c,i)=>c.status==="fulfilled"?{functionId:t[i].functionId,success:true,result:c.value}:{functionId:t[i].functionId,success:false,error:c.reason?.message||"Unknown error"});return {results:a,successCount:a.filter(c=>c.success).length,errorCount:a.filter(c=>!c.success).length}},rpc(t,r){let o=this,a=async(c,i)=>{let l={...r,...i};return (await e(t,{body:c},l)).data};return Object.defineProperty(a,"id",{value:t,writable:false}),a.getInfo=()=>o.get(t),a.getInvocations=c=>o.getInvocations({...c,functionId:t}),a},async list(t){let r={envId:t.envId,enabled:t.enabled,limit:t.limit,offset:t.offset},o=S(r);return n(`/functions/project/${t.projectId}${o}`)},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,o){return n(`/functions/${t}/deploy`,{method:"POST",body:JSON.stringify({sourceCode:r,createVersion:o?.createVersion,versionDescription:o?.versionDescription,envVars:o?.envVars,secrets:o?.secrets})})},async getSource(t,r){let o=r!==void 0?`?version=${r}`:"";return n(`/functions/${t}/source${o}`)},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},o=S(r);return (await n(`/functions/invocations${o}`)).invocations},async getInvocation(t){return n(`/functions/invocations/${t}`)},async getLogs(t,r){let o={since:r?.since,until:r?.until,level:r?.level,limit:r?.limit},a=S(o);return (await n(`/functions/${t}/logs${a}`)).logs}}}function _(s){let n=p(s),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,o){return (await this.getDownloadUrl(t,{...o,expiresIn:r})).url},async createSignedUrls(t,r=3600,o){return await Promise.all(t.map(async c=>({key:c,url:await this.createSignedUrl(c,r,o)})))},async upload(t,r,o){let a=r instanceof Blob?r:new Blob([r]),c=a.size,i=o?.contentType||(r instanceof File?r.type:void 0)||"application/octet-stream",l=await this.getUploadUrl(t,{...o,contentType:i,sizeBytes:c}),g=await s.fetch(l.url,{method:"PUT",body:a,headers:{"Content-Type":i,...o?.cacheControl&&{"Cache-Control":o.cacheControl},...o?.contentDisposition&&{"Content-Disposition":o.contentDisposition}}});if(!g.ok)throw new Error(`Upload failed: ${g.statusText}`);let y=o?.bucket||e,h=l.url.split("?")[0];return {ok:true,key:t,bucket:y,url:h,publicUrl:o?.isPublic?this.getPublicUrl(t,{bucket:y}):void 0,size:c,contentType:i}},async uploadFromUrl(t,r,o){return n("/storage/upload-from-url",{method:"POST",body:JSON.stringify({key:t,url:r,bucket:o?.bucket||e,contentType:o?.contentType,metadata:o?.metadata,isPublic:o?.isPublic,timeout:o?.timeout})})},async download(t,r){let o=await this.getDownloadUrl(t,r),a=await s.fetch(o.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},o=S(r);return n(`/storage/files${o}`)},async getMetadata(t,r){let o=r?.bucket||e;return n(`/storage/files/${encodeURIComponent(o)}/${encodeURIComponent(t)}/metadata`)},async updateMetadata(t,r,o){let a=o?.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,o){return n("/storage/files/copy",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:o?.sourceBucket||e,destinationKey:r,destinationBucket:o?.destinationBucket||o?.sourceBucket||e,metadata:o?.metadata})})},async move(t,r,o){return n("/storage/files/move",{method:"POST",body:JSON.stringify({sourceKey:t,sourceBucket:o?.sourceBucket||e,destinationKey:r,destinationBucket:o?.destinationBucket||o?.sourceBucket||e,metadata:o?.metadata})})},async delete(t,r){let o=r?.bucket||e;await n(`/storage/files/${encodeURIComponent(o)}/${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 o=r?.bucket||e;return `${s.baseUrl.replace("/api","")}/storage/${encodeURIComponent(o)}/${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,o){let a=o instanceof Blob?o:new Blob([o]),{url:c}=await n(`/storage/multipart/${t}/part-url`,{method:"POST",body:JSON.stringify({partNumber:r})}),i=await s.fetch(c,{method:"PUT",body:a});if(!i.ok)throw new Error(`Part upload failed: ${i.statusText}`);let l=i.headers.get("etag")||"";return {partNumber:r,etag:l}},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 W(s){let n=p(s);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 z(s){let n=p(s);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 G(s){let n=p(s);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 Q(s){let n=p(s);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 o=r.toString(),a=`/functions/secrets/project/${e}${o?`?${o}`:""}`;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 X(s){let n=p(s);return {async list(e,t){let r=new URLSearchParams;t&&r.set("env",t);let o=r.toString(),a=`/deployments/project/${e}${o?`?${o}`:""}`;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)}),o=await n(`/deployments/${r.deploymentId}`);return {deployment:{...o.deployment,steps:o.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 o=r.toString(),a=`/deployments/tokens/project/${encodeURIComponent(e)}${o?`?${o}`:""}`;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 Z(s){let n=p(s);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 o=r.toString(),a=`/realtime/events/project/${e}${o?`?${o}`:""}`;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 Y(s){let n=p(s);return {async listBuckets(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let o=r.toString(),a=`/buckets/project/${e}${o?`?${o}`:""}`;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 o=r.toString(),a=`/buckets/${e}/files${o?`?${o}`:""}`;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,o){let a=o?.prefix?`${o.prefix}${t}`:t,c=o?.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 ee(s){let n=p(s);return {async list(e,t){let r={type:t?.type,enabled:t?.enabled},o=S(r);return (await n(`/integrations/subscriptions/project/${e}${o}`)).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=S(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=S(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},o=S(r);return (await n(`/integrations/dlq/project/${e}${o}`)).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(","),o=r.find(b=>b.startsWith("t=")),a=r.find(b=>b.startsWith("v1="));if(!o||!a)return !1;let c=parseInt(o.slice(2),10),i=a.slice(3),l=Math.floor(Date.now()/1e3);if(Math.abs(l-c)>t)return !1;let g=`${c}.${e.payload}`,y=new TextEncoder,h=y.encode(e.secret),k=y.encode(g),I=Array.from(h).concat(Array.from(k)).reduce((b,T)=>b+T,0).toString(16);if(i.length!==I.length)return !1;let R=0;for(let b=0;b<i.length;b++)R|=i.charCodeAt(b)^I.charCodeAt(b);return R===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 te(s){let n=p(s);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})})},async getAIUsageSummary(e){return n(`/ai-usage/org/${e}/summary`)},async getAIUsageHistory(e,t=30){return n(`/ai-usage/org/${e}/history?days=${t}`)},async getAIUsageBreakdown(e){return n(`/ai-usage/org/${e}/breakdown`)},async getRecentAIRequests(e,t=50,r=0){return n(`/ai-usage/org/${e}/recent?limit=${t}&offset=${r}`)}}}function ne(s){let n=p(s);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 re(s){let n=p(s);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 oe(s){let n=p(s);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 o=r.toString(),a=`/security/audit/${encodeURIComponent(e)}${o?`?${o}`:""}`;return n(a)},async listEnvVars(e,t){let r=new URLSearchParams;t&&r.set("envId",t);let o=r.toString(),a=`/projects/${encodeURIComponent(e)}/env-vars${o?`?${o}`:""}`;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 se(s){let n=p(s);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 o=r.toString(),a=`/ai/usage/org/${encodeURIComponent(e)}${o?`?${o}`:""}`;return n(a)},async getBudgetStatus(e){let[t,r]=await Promise.all([this.getOrgSettings(e),this.getUsage(e)]),o=t?.monthlyBudgetCents??1e4,a=r.costCents,c=Math.max(0,o-a),i=o>0?Math.round(a/o*100):0;return {spent:a,budget:o,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 ie(s){let n=p(s);return {async load(){return n("/bootstrap")}}}function ae(s){let n=p(s);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(),o=`/templates${r?`?${r}`:""}`;return (await n(o)).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 le(s){let n=p(s);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 ce(s){let n=p(s);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 V(s,n,e,t){let r=[...n],o=0,a=false,c=false,i=async()=>{if(c||a)return;let l=await e(`/mongodb/${t}/cursor/${s}/next`,{method:"POST"});r=l.batch,o=0,a=l.exhausted;};return {id:s,async hasNext(){return c?false:o<r.length?true:a?false:(await i(),r.length>0)},async next(){return c?null:o<r.length?r[o++]:a||(await i(),r.length===0)?null:r[o++]},async toArray(){if(c)return [];let l=[];for(;o<r.length;)l.push(r[o++]);for(;!a;)await i(),l.push(...r),o=r.length;return l},async forEach(l){if(!c){for(;o<r.length;)await l(r[o++]);for(;!a;){await i();for(let g of r)await l(g);o=r.length;}}},map(l){let g=r.slice(o).map(l);return V(s,g,e,t)},async close(){if(!c){c=true;try{await e(`/mongodb/${t}/cursor/${s}/close`,{method:"POST"});}catch{}}},isClosed(){return c}}}function he(s,n){let e=`/mongodb/${encodeURIComponent(s)}`;return {collectionName:s,async find(t,r){return n(`${e}/find`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async findCursor(t,r){let o=await n(`${e}/find/cursor`,{method:"POST",body:JSON.stringify({filter:t,options:r})});return V(o.cursorId,o.batch,n,s)},async findOne(t,r){return n(`${e}/findOne`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async findById(t,r){return n(`${e}/findById/${encodeURIComponent(t)}`,{method:"GET",...r&&{body:JSON.stringify({options:r})}})},async countDocuments(t){return (await n(`${e}/count`,{method:"POST",body:JSON.stringify({filter:t})})).count},async estimatedDocumentCount(){return (await n(`${e}/estimatedCount`)).count},async distinct(t,r){return n(`${e}/distinct`,{method:"POST",body:JSON.stringify({field:t,...r})})},async insertOne(t){return n(`${e}/insertOne`,{method:"POST",body:JSON.stringify({document:t})})},async insertMany(t,r){return n(`${e}/insertMany`,{method:"POST",body:JSON.stringify({documents:t,options:r})})},async updateOne(t,r,o){return n(`${e}/updateOne`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async updateMany(t,r,o){return n(`${e}/updateMany`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async replaceOne(t,r,o){return n(`${e}/replaceOne`,{method:"POST",body:JSON.stringify({filter:t,replacement:r,options:o})})},async findOneAndUpdate(t,r,o){return n(`${e}/findOneAndUpdate`,{method:"POST",body:JSON.stringify({filter:t,update:r,options:o})})},async findOneAndReplace(t,r,o){return n(`${e}/findOneAndReplace`,{method:"POST",body:JSON.stringify({filter:t,replacement:r,options:o})})},async deleteOne(t){return n(`${e}/deleteOne`,{method:"POST",body:JSON.stringify({filter:t})})},async deleteMany(t){return n(`${e}/deleteMany`,{method:"POST",body:JSON.stringify({filter:t})})},async findOneAndDelete(t,r){return n(`${e}/findOneAndDelete`,{method:"POST",body:JSON.stringify({filter:t,options:r})})},async aggregate(t,r){return n(`${e}/aggregate`,{method:"POST",body:JSON.stringify({pipeline:t,options:r})})},async aggregateCursor(t,r){let o=await n(`${e}/aggregate/cursor`,{method:"POST",body:JSON.stringify({pipeline:t,options:r})});return V(o.cursorId,o.batch,n,s)},async createIndex(t,r){return (await n(`${e}/indexes`,{method:"POST",body:JSON.stringify({keys:t,options:r})})).indexName},async dropIndex(t){await n(`${e}/indexes/${encodeURIComponent(t)}`,{method:"DELETE"});},async listIndexes(){return n(`${e}/indexes`)},async bulkWrite(t,r){return n(`${e}/bulkWrite`,{method:"POST",body:JSON.stringify({operations:t,options:r})})}}}function ue(s){let n=p(s);return {collection(e){return he(e,n)},async listCollections(){return n("/mongodb/collections")},async createCollection(e,t){await n("/mongodb/collections",{method:"POST",body:JSON.stringify({name:e,options:t})});},async dropCollection(e){await n(`/mongodb/collections/${encodeURIComponent(e)}`,{method:"DELETE"});},async renameCollection(e,t){await n(`/mongodb/collections/${encodeURIComponent(e)}/rename`,{method:"POST",body:JSON.stringify({newName:t})});},async command(e){return n("/mongodb/command",{method:"POST",body:JSON.stringify(e)})}}}function Ie(s,n,e,t){let r=n.type||"public",o="unsubscribed",a=new Map,c=[],i={},l=null,g=null,y=new Set,h=new Set,k=new Set,I=u=>{if(u.event){let f=a.get(u.event);f&&f.forEach(O=>O(u.payload));}},R=u=>{i=u.state||{},y.forEach(f=>f(i));},b=u=>{let f=u.key||"",O=u.currentPresences||[],d=u.joinedPresences||[],m=u.leftPresences||[];d.length>0&&(i[f]=O,h.forEach(P=>P(f,O,d))),m.length>0&&(O.length===0?delete i[f]:i[f]=O,k.forEach(P=>P(f,O,m))),y.forEach(P=>P(i));},T=u=>{let f={type:"db_change",projectId:u.projectId||"",schema:u.schema||"",table:u.table||"",operation:u.op,new:u.record,old:u.old_record,timestamp:u.ts||new Date().toISOString(),partial:u.partial};c.forEach(({options:O,handler:d})=>{if(O.table===f.table){let m=O.event||"*";(m==="*"||(Array.isArray(m)?m.includes(f.operation):m===f.operation))&&d(f);}});},v={get name(){return s},get type(){return r},get status(){return o},_handleMessage:u=>{switch(u.type){case "broadcast":I(u);break;case "presence_state":R(u);break;case "presence":b(u);break;case "db_change":T(u);break;case "subscribed":o="subscribed";break;case "error":o="error";break}},onDbChange(u,f){return c.push({options:u,handler:f}),o==="subscribed"&&e({type:"subscribe",channel:s,options:{table:u.table,filter:u.filter,event:u.event,columns:u.columns}}),v},on(u,f){return a.has(u)||a.set(u,new Set),a.get(u).add(f),v},off(u,f){return f?a.get(u)?.delete(f):a.delete(u),v},async broadcast(u){if(o!=="subscribed")throw new Error("Channel must be subscribed before broadcasting");e({type:"broadcast",channel:s,event:u.event,payload:u.payload,includeSelf:u.includeSelf});},presence:{async track(u){if(r!=="presence")throw new Error("Presence tracking is only available on presence channels");l=u.key||t()||"anonymous",g=u.state,e({type:"presence_track",channel:s,key:l,state:g});},async update(u){if(!g)throw new Error("Must call track() before update()");g={...g,...u},e({type:"presence_update",channel:s,key:l,state:g});},async untrack(){l&&(e({type:"presence_untrack",channel:s,key:l}),l=null,g=null);},state(){return {...i}},onSync(u){return y.add(u),v},onJoin(u){return h.add(u),v},onLeave(u){return k.add(u),v}},async subscribe(){return o==="subscribed"||(o="subscribing",e({type:"subscribe",channel:s}),c.forEach(({options:u})=>{e({type:"subscribe",channel:s,options:{table:u.table,filter:u.filter,event:u.event,columns:u.columns}});}),n.presenceState&&r==="presence"&&await v.presence.track({state:n.presenceState})),v},async unsubscribe(){o!=="unsubscribed"&&(l&&await v.presence.untrack(),e({type:"unsubscribe",channel:s}),o="unsubscribed",i={},a.clear(),c.length=0);}};return v}function de(s,n){let{wsUrl:e=s.baseUrl.replace(/^http/,"ws")+"/realtime/ws",autoReconnect:t=true,reconnectDelay:r=1e3,maxReconnectAttempts:o=10}=n??{},a=null,c="disconnected",i=null,l=null,g=0,y=null,h=null,k=new Map,I=new Map,R=new Set,b={connect:new Set,disconnect:new Set,error:new Set,reconnect:new Set},T=d=>{b[d].forEach(m=>m());},E=d=>{let m=`table:${d.table}`;if(d.filter){let C=(Array.isArray(d.filter)?d.filter:[d.filter]).map(w=>`${w.field}${w.operator||"eq"}${w.value}`).join("&");m+=`?${C}`;}return m},v=d=>{a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify(d));},u=d=>{if(d.channel){let m=k.get(d.channel);if(m){m._handleMessage(d);return}}switch(d.type){case "db_change":{let m={type:"db_change",projectId:d.projectId??"",schema:d.schema??"",table:d.table??"",operation:d.op,new:d.record,old:d.old_record,timestamp:d.ts??new Date().toISOString(),partial:d.partial},P=`table:${d.table}`;I.forEach((C,w)=>{(w===P||w.startsWith(P+"?"))&&C.forEach(B=>B(m));});break}case "presence":{let m={type:"presence",event:d.event,key:d.key||d.connectionId||"",connectionId:d.connectionId??"",projectId:d.projectId??"",currentPresences:d.currentPresences||[],leftPresences:d.leftPresences||[],joinedPresences:d.joinedPresences||[]};R.forEach(P=>P(m));break}case "welcome":i=d.connectionId||null;break;case "error":{console.error("[vaif/realtime] Server error:",d.message),T("error");break}}},f=()=>new Promise((d,m)=>{let P=new URLSearchParams;s.apiKey&&P.set(s.apiKeyHeader,s.apiKey),l&&P.set("token",l);let C=P.toString(),w=C?`${e}?${C}`:e;try{a=new WebSocket(w);}catch{m(new x("Failed to create WebSocket connection"));return}let B=()=>{c="connected",g=0,T("connect"),k.forEach(A=>{(A.status==="subscribed"||A.status==="subscribing")&&A.subscribe();}),I.forEach((A,N)=>{v({type:"subscribe",channel:N});}),h=setInterval(()=>{v({type:"ping"});},3e4),d();},ge=A=>{try{let N=JSON.parse(A.data);u(N);}catch{}},pe=()=>{if(c="disconnected",i=null,a=null,h&&(clearInterval(h),h=null),T("disconnect"),t&&g<o){c="reconnecting";let A=r*Math.pow(2,g);y=setTimeout(()=>{g++,T("reconnect"),f().catch(()=>{});},Math.min(A,3e4));}},me=()=>{T("error"),m(new x("WebSocket connection error"));};a.addEventListener("open",B),a.addEventListener("message",ge),a.addEventListener("close",pe),a.addEventListener("error",me);}),O=()=>{y&&(clearTimeout(y),y=null),h&&(clearInterval(h),h=null),g=o;};return {channel(d,m={}){let P=k.get(d);if(P)return P;let C=Ie(d,m,v,()=>i);return k.set(d,C),C},async removeChannel(d){let m=k.get(d.name);m&&(await m.unsubscribe(),k.delete(d.name));},getChannels(){return Array.from(k.values())},subscribe(d,m){let P=E(d);return I.has(P)||I.set(P,new Set),I.get(P).add(m),a?.readyState===WebSocket.OPEN&&v({type:"subscribe",channel:P}),()=>{let C=I.get(P);C&&(C.delete(m),C.size===0&&(I.delete(P),a?.readyState===WebSocket.OPEN&&v({type:"unsubscribe",channel:P})));}},subscribeToPresence(d){return R.add(d),()=>{R.delete(d);}},async connect(){if(c!=="connected"){if(!s.apiKey)throw new D("API key is required for realtime connections");c="connecting",await f();}},disconnect(){O(),k.forEach(d=>{d.unsubscribe();}),k.clear(),a&&(a.close(),a=null),c="disconnected",i=null;},get isConnected(){return c==="connected"},get connectionState(){return c},get connectionId(){return i},on(d,m){b[d].add(m);},off(d,m){b[d].delete(m);},setAuth(d){l=d;}}}var j={apiKeyHeader:"x-vaif-key",timeout:3e4,retry:{maxRetries:3,retryDelay:1e3,retryOn:[429,500,502,503,504]}};function Se(s){return {baseUrl:s.baseUrl.replace(/\/$/,""),apiKey:s.apiKey,apiKeyHeader:s.apiKeyHeader??j.apiKeyHeader,accessToken:s.accessToken,fetch:s.fetch??globalThis.fetch.bind(globalThis),timeout:s.timeout??j.timeout,retry:{maxRetries:s.retry?.maxRetries??j.retry.maxRetries,retryDelay:s.retry?.retryDelay??j.retry.retryDelay,retryOn:s.retry?.retryOn??[...j.retry.retryOn]}}}function ke(s){let n=Se(s),e=q(n),t=J(n),r=H(n),o=_(n),a=W(n),c=z(n),i=G(n),l=Q(n),g=X(n),y=Z(n),h=Y(n),k=ee(n),I=te(n),R=ne(n),b=re(n),T=oe(n),E=se(n),v=ie(n),u=ae(n),f=le(n),O=ce(n),d=ue(n);return {from:e.from,auth:t,functions:r,storage:o,projects:a,orgs:c,schema:i,secrets:l,deployments:g,realtimeMonitoring:y,storageDashboard:h,integrations:k,billing:I,admin:R,flags:b,security:T,ai:E,bootstrap:v,templates:u,oauth:f,docs:O,mongodb:d,realtime:m=>de(n,m)}}export{D as VaifAuthError,M as VaifError,x as VaifNetworkError,$ as VaifNotFoundError,F as VaifRateLimitError,U as VaifValidationError,ke as createVaifClient,ye as isVaifError};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaiftech/client",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "TypeScript SDK for VAIF Studio BaaS",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",