@nimbleflux/fluxbase-sdk 2026.3.7-rc.2 → 2026.3.7-rc.3

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/dist/index.cjs CHANGED
@@ -2560,7 +2560,11 @@ var StorageBucket = class {
2560
2560
  }
2561
2561
  let response;
2562
2562
  if (options?.onUploadProgress) {
2563
- response = await this.uploadWithProgress(path, formData, options.onUploadProgress);
2563
+ response = await this.uploadWithProgress(
2564
+ path,
2565
+ formData,
2566
+ options.onUploadProgress
2567
+ );
2564
2568
  } else {
2565
2569
  response = await this.fetch.request(
2566
2570
  `/api/v1/storage/${this.bucketName}/${path}`,
@@ -2668,7 +2672,10 @@ var StorageBucket = class {
2668
2672
  async uploadStream(path, stream, size, options) {
2669
2673
  try {
2670
2674
  if (size <= 0) {
2671
- return { data: null, error: new Error("size must be a positive number") };
2675
+ return {
2676
+ data: null,
2677
+ error: new Error("size must be a positive number")
2678
+ };
2672
2679
  }
2673
2680
  const headers = {
2674
2681
  ...this.fetch["defaultHeaders"],
@@ -2715,7 +2722,9 @@ var StorageBucket = class {
2715
2722
  );
2716
2723
  if (!response.ok) {
2717
2724
  const errorData = await response.json().catch(() => ({ error: response.statusText }));
2718
- throw new Error(errorData.error || `Upload failed: ${response.statusText}`);
2725
+ throw new Error(
2726
+ errorData.error || `Upload failed: ${response.statusText}`
2727
+ );
2719
2728
  }
2720
2729
  const result = await response.json();
2721
2730
  return {
@@ -3114,7 +3123,10 @@ var StorageBucket = class {
3114
3123
  return { data: null, error: new Error("Upload aborted") };
3115
3124
  }
3116
3125
  const chunkController = new AbortController();
3117
- const timeoutId = setTimeout(() => chunkController.abort(), chunkTimeout);
3126
+ const timeoutId = setTimeout(
3127
+ () => chunkController.abort(),
3128
+ chunkTimeout
3129
+ );
3118
3130
  if (options?.signal) {
3119
3131
  options.signal.addEventListener(
3120
3132
  "abort",
@@ -3321,6 +3333,42 @@ var StorageBucket = class {
3321
3333
  return { data: null, error };
3322
3334
  }
3323
3335
  }
3336
+ /**
3337
+ * Copy a file to a new path
3338
+ *
3339
+ * @param fromPath - Source file path
3340
+ * @param toPath - Destination file path
3341
+ * @returns Promise resolving to { data, error } tuple
3342
+ */
3343
+ async copy(fromPath, toPath) {
3344
+ try {
3345
+ const data = await this.fetch.post(
3346
+ `/api/v1/storage/${this.bucketName}/copy`,
3347
+ { from_path: fromPath, to_path: toPath }
3348
+ );
3349
+ return { data, error: null };
3350
+ } catch (error) {
3351
+ return { data: null, error };
3352
+ }
3353
+ }
3354
+ /**
3355
+ * Move a file to a new path
3356
+ *
3357
+ * @param fromPath - Source file path
3358
+ * @param toPath - Destination file path
3359
+ * @returns Promise resolving to { data, error } tuple
3360
+ */
3361
+ async move(fromPath, toPath) {
3362
+ try {
3363
+ const data = await this.fetch.post(
3364
+ `/api/v1/storage/${this.bucketName}/move`,
3365
+ { from_path: fromPath, to_path: toPath }
3366
+ );
3367
+ return { data, error: null };
3368
+ } catch (error) {
3369
+ return { data: null, error };
3370
+ }
3371
+ }
3324
3372
  /**
3325
3373
  * Get a public URL for a file
3326
3374
  * @param path - The file path
@@ -3443,50 +3491,6 @@ var StorageBucket = class {
3443
3491
  return { data: null, error };
3444
3492
  }
3445
3493
  }
3446
- /**
3447
- * Move a file to a new location
3448
- * @param fromPath - Current file path
3449
- * @param toPath - New file path
3450
- */
3451
- async move(fromPath, toPath) {
3452
- try {
3453
- await this.fetch.post(
3454
- `/api/v1/storage/${this.bucketName}/move`,
3455
- {
3456
- from_path: fromPath,
3457
- to_path: toPath
3458
- }
3459
- );
3460
- return {
3461
- data: { message: "Successfully moved" },
3462
- error: null
3463
- };
3464
- } catch (error) {
3465
- return { data: null, error };
3466
- }
3467
- }
3468
- /**
3469
- * Copy a file to a new location
3470
- * @param fromPath - Source file path
3471
- * @param toPath - Destination file path
3472
- */
3473
- async copy(fromPath, toPath) {
3474
- try {
3475
- await this.fetch.post(
3476
- `/api/v1/storage/${this.bucketName}/copy`,
3477
- {
3478
- from_path: fromPath,
3479
- to_path: toPath
3480
- }
3481
- );
3482
- return {
3483
- data: { path: toPath },
3484
- error: null
3485
- };
3486
- } catch (error) {
3487
- return { data: null, error };
3488
- }
3489
- }
3490
3494
  /**
3491
3495
  * Share a file with another user (RLS)
3492
3496
  * @param path - The file path
@@ -4313,25 +4317,6 @@ var AppSettingsManager = class {
4313
4317
  request
4314
4318
  );
4315
4319
  }
4316
- /**
4317
- * Reset all application settings to defaults
4318
- *
4319
- * This will delete all custom settings and return to default values.
4320
- *
4321
- * @returns Promise resolving to AppSettings - Default settings
4322
- *
4323
- * @example
4324
- * ```typescript
4325
- * const defaults = await client.admin.settings.app.reset()
4326
- * console.log('Settings reset to defaults:', defaults)
4327
- * ```
4328
- */
4329
- async reset() {
4330
- return await this.fetch.post(
4331
- "/api/v1/admin/app/settings/reset",
4332
- {}
4333
- );
4334
- }
4335
4320
  /**
4336
4321
  * Enable user signup
4337
4322
  *
@@ -4927,6 +4912,14 @@ var AppSettingsManager = class {
4927
4912
  );
4928
4913
  return response.value;
4929
4914
  }
4915
+ /**
4916
+ * Reset all application settings to their default values
4917
+ *
4918
+ * @returns Promise resolving to the default app settings
4919
+ */
4920
+ async reset() {
4921
+ return this.fetch.post("/api/v1/admin/app/settings/reset", {});
4922
+ }
4930
4923
  };
4931
4924
  var EmailTemplateManager = class {
4932
4925
  constructor(fetch2) {
@@ -7515,24 +7508,14 @@ var FluxbaseAdminJobs = class _FluxbaseAdminJobs {
7515
7508
  /**
7516
7509
  * Create a new job function
7517
7510
  *
7518
- * @param request - Job function configuration and code
7519
- * @returns Promise resolving to { data, error } tuple with created job function metadata
7520
- *
7521
- * @example
7522
- * ```typescript
7523
- * const { data, error } = await client.admin.jobs.create({
7524
- * name: 'process-data',
7525
- * code: 'export async function handler(req) { return { success: true } }',
7526
- * enabled: true,
7527
- * timeout_seconds: 300
7528
- * })
7529
- * ```
7511
+ * @param params - Job function configuration
7512
+ * @returns Promise resolving to { data, error } tuple with created job function
7530
7513
  */
7531
- async create(request) {
7514
+ async create(params) {
7532
7515
  try {
7533
7516
  const data = await this.fetch.post(
7534
7517
  "/api/v1/admin/jobs/functions",
7535
- request
7518
+ params
7536
7519
  );
7537
7520
  return { data, error: null };
7538
7521
  } catch (error) {
@@ -7613,50 +7596,42 @@ var FluxbaseAdminJobs = class _FluxbaseAdminJobs {
7613
7596
  }
7614
7597
  }
7615
7598
  /**
7616
- * Update an existing job function
7599
+ * Delete a job function
7617
7600
  *
7618
7601
  * @param namespace - Namespace
7619
7602
  * @param name - Job function name
7620
- * @param updates - Fields to update
7621
- * @returns Promise resolving to { data, error } tuple with updated job function metadata
7603
+ * @returns Promise resolving to { data, error } tuple
7622
7604
  *
7623
7605
  * @example
7624
7606
  * ```typescript
7625
- * const { data, error } = await client.admin.jobs.update('default', 'process-data', {
7626
- * enabled: false,
7627
- * timeout_seconds: 600
7628
- * })
7607
+ * const { data, error } = await client.admin.jobs.delete('default', 'process-data')
7629
7608
  * ```
7630
7609
  */
7631
- async update(namespace, name, updates) {
7610
+ async delete(namespace, name) {
7632
7611
  try {
7633
- const data = await this.fetch.put(
7634
- `/api/v1/admin/jobs/functions/${namespace}/${name}`,
7635
- updates
7612
+ await this.fetch.delete(
7613
+ `/api/v1/admin/jobs/functions/${namespace}/${name}`
7636
7614
  );
7637
- return { data, error: null };
7615
+ return { data: null, error: null };
7638
7616
  } catch (error) {
7639
7617
  return { data: null, error };
7640
7618
  }
7641
7619
  }
7642
7620
  /**
7643
- * Delete a job function
7621
+ * Update an existing job function
7644
7622
  *
7645
7623
  * @param namespace - Namespace
7646
7624
  * @param name - Job function name
7647
- * @returns Promise resolving to { data, error } tuple
7648
- *
7649
- * @example
7650
- * ```typescript
7651
- * const { data, error } = await client.admin.jobs.delete('default', 'process-data')
7652
- * ```
7625
+ * @param updates - Fields to update
7626
+ * @returns Promise resolving to { data, error } tuple with updated job function
7653
7627
  */
7654
- async delete(namespace, name) {
7628
+ async update(namespace, name, updates) {
7655
7629
  try {
7656
- await this.fetch.delete(
7657
- `/api/v1/admin/jobs/functions/${namespace}/${name}`
7630
+ const data = await this.fetch.put(
7631
+ `/api/v1/admin/jobs/functions/${namespace}/${name}`,
7632
+ updates
7658
7633
  );
7659
- return { data: null, error: null };
7634
+ return { data, error: null };
7660
7635
  } catch (error) {
7661
7636
  return { data: null, error };
7662
7637
  }
@@ -8171,18 +8146,10 @@ var FluxbaseAdminAI = class {
8171
8146
  }
8172
8147
  }
8173
8148
  /**
8174
- * Get details of a specific provider
8149
+ * Get details of a specific AI provider
8175
8150
  *
8176
8151
  * @param id - Provider ID
8177
8152
  * @returns Promise resolving to { data, error } tuple with provider details
8178
- *
8179
- * @example
8180
- * ```typescript
8181
- * const { data, error } = await client.admin.ai.getProvider('uuid')
8182
- * if (data) {
8183
- * console.log('Provider:', data.display_name)
8184
- * }
8185
- * ```
8186
8153
  */
8187
8154
  async getProvider(id) {
8188
8155
  try {
@@ -8197,39 +8164,24 @@ var FluxbaseAdminAI = class {
8197
8164
  /**
8198
8165
  * Create a new AI provider
8199
8166
  *
8200
- * @param request - Provider configuration
8167
+ * @param params - Provider configuration including name, provider_type, and optional config
8201
8168
  * @returns Promise resolving to { data, error } tuple with created provider
8202
- *
8203
- * @example
8204
- * ```typescript
8205
- * const { data, error } = await client.admin.ai.createProvider({
8206
- * name: 'openai-main',
8207
- * display_name: 'OpenAI (Main)',
8208
- * provider_type: 'openai',
8209
- * is_default: true,
8210
- * config: {
8211
- * api_key: 'sk-...',
8212
- * model: 'gpt-4-turbo',
8213
- * }
8214
- * })
8215
- * ```
8216
8169
  */
8217
- async createProvider(request) {
8170
+ async createProvider(params) {
8218
8171
  try {
8219
- const normalizedConfig = {};
8220
- if (request.config) {
8221
- for (const [key, value] of Object.entries(request.config)) {
8222
- if (value !== void 0 && value !== null) {
8223
- normalizedConfig[key] = String(value);
8224
- }
8225
- }
8172
+ const body = {
8173
+ name: params.name,
8174
+ provider_type: params.provider_type
8175
+ };
8176
+ if (params.display_name !== void 0)
8177
+ body.display_name = params.display_name;
8178
+ if (params.is_default !== void 0) body.is_default = params.is_default;
8179
+ if (params.config) {
8180
+ body.config = normalizeConfig(params.config);
8226
8181
  }
8227
8182
  const data = await this.fetch.post(
8228
8183
  "/api/v1/admin/ai/providers",
8229
- {
8230
- ...request,
8231
- config: normalizedConfig
8232
- }
8184
+ body
8233
8185
  );
8234
8186
  return { data, error: null };
8235
8187
  } catch (error) {
@@ -8242,34 +8194,16 @@ var FluxbaseAdminAI = class {
8242
8194
  * @param id - Provider ID
8243
8195
  * @param updates - Fields to update
8244
8196
  * @returns Promise resolving to { data, error } tuple with updated provider
8245
- *
8246
- * @example
8247
- * ```typescript
8248
- * const { data, error } = await client.admin.ai.updateProvider('uuid', {
8249
- * display_name: 'Updated Name',
8250
- * config: {
8251
- * api_key: 'new-key',
8252
- * model: 'gpt-4-turbo',
8253
- * },
8254
- * enabled: true,
8255
- * })
8256
- * ```
8257
8197
  */
8258
8198
  async updateProvider(id, updates) {
8259
8199
  try {
8260
- let normalizedUpdates = updates;
8200
+ const body = { ...updates };
8261
8201
  if (updates.config) {
8262
- const normalizedConfig = {};
8263
- for (const [key, value] of Object.entries(updates.config)) {
8264
- if (value !== void 0 && value !== null) {
8265
- normalizedConfig[key] = String(value);
8266
- }
8267
- }
8268
- normalizedUpdates = { ...updates, config: normalizedConfig };
8202
+ body.config = normalizeConfig(updates.config);
8269
8203
  }
8270
8204
  const data = await this.fetch.put(
8271
8205
  `/api/v1/admin/ai/providers/${id}`,
8272
- normalizedUpdates
8206
+ body
8273
8207
  );
8274
8208
  return { data, error: null };
8275
8209
  } catch (error) {
@@ -8277,15 +8211,10 @@ var FluxbaseAdminAI = class {
8277
8211
  }
8278
8212
  }
8279
8213
  /**
8280
- * Set a provider as the default
8214
+ * Set a provider as the default provider
8281
8215
  *
8282
8216
  * @param id - Provider ID
8283
8217
  * @returns Promise resolving to { data, error } tuple with updated provider
8284
- *
8285
- * @example
8286
- * ```typescript
8287
- * const { data, error } = await client.admin.ai.setDefaultProvider('uuid')
8288
- * ```
8289
8218
  */
8290
8219
  async setDefaultProvider(id) {
8291
8220
  try {
@@ -8299,15 +8228,10 @@ var FluxbaseAdminAI = class {
8299
8228
  }
8300
8229
  }
8301
8230
  /**
8302
- * Delete a provider
8231
+ * Delete an AI provider
8303
8232
  *
8304
8233
  * @param id - Provider ID
8305
8234
  * @returns Promise resolving to { data, error } tuple
8306
- *
8307
- * @example
8308
- * ```typescript
8309
- * const { data, error } = await client.admin.ai.deleteProvider('uuid')
8310
- * ```
8311
8235
  */
8312
8236
  async deleteProvider(id) {
8313
8237
  try {
@@ -8321,31 +8245,24 @@ var FluxbaseAdminAI = class {
8321
8245
  * Set a provider as the embedding provider
8322
8246
  *
8323
8247
  * @param id - Provider ID
8324
- * @returns Promise resolving to { data, error } tuple
8325
- *
8326
- * @example
8327
- * ```typescript
8328
- * const { data, error } = await client.admin.ai.setEmbeddingProvider('uuid')
8329
- * ```
8248
+ * @returns Promise resolving to { data, error } tuple with updated provider
8330
8249
  */
8331
8250
  async setEmbeddingProvider(id) {
8332
8251
  try {
8333
- const data = await this.fetch.put(`/api/v1/admin/ai/providers/${id}/embedding`, {});
8252
+ const data = await this.fetch.put(
8253
+ `/api/v1/admin/ai/providers/${id}/embedding`,
8254
+ {}
8255
+ );
8334
8256
  return { data, error: null };
8335
8257
  } catch (error) {
8336
8258
  return { data: null, error };
8337
8259
  }
8338
8260
  }
8339
8261
  /**
8340
- * Clear explicit embedding provider preference (revert to default)
8262
+ * Clear the embedding provider assignment for a provider
8341
8263
  *
8342
- * @param id - Provider ID to clear
8264
+ * @param id - Provider ID
8343
8265
  * @returns Promise resolving to { data, error } tuple
8344
- *
8345
- * @example
8346
- * ```typescript
8347
- * const { data, error } = await client.admin.ai.clearEmbeddingProvider('uuid')
8348
- * ```
8349
8266
  */
8350
8267
  async clearEmbeddingProvider(id) {
8351
8268
  try {
@@ -8358,73 +8275,51 @@ var FluxbaseAdminAI = class {
8358
8275
  }
8359
8276
  }
8360
8277
  // ============================================================================
8361
- // KNOWLEDGE BASE MANAGEMENT (RAG)
8278
+ // CHATBOT KNOWLEDGE BASE LINKING
8362
8279
  // ============================================================================
8363
8280
  /**
8364
- * List all knowledge bases
8281
+ * List knowledge bases linked to a chatbot
8365
8282
  *
8366
- * @returns Promise resolving to { data, error } tuple with array of knowledge base summaries
8283
+ * @param chatbotId - Chatbot ID
8284
+ * @returns Promise resolving to { data, error } tuple with linked knowledge bases
8367
8285
  *
8368
8286
  * @example
8369
8287
  * ```typescript
8370
- * const { data, error } = await client.admin.ai.listKnowledgeBases()
8288
+ * const { data, error } = await client.admin.ai.listChatbotKnowledgeBases('chatbot-uuid')
8371
8289
  * if (data) {
8372
- * console.log('Knowledge bases:', data.map(kb => kb.name))
8290
+ * console.log('Linked KBs:', data.map(l => l.knowledge_base_id))
8373
8291
  * }
8374
8292
  * ```
8375
8293
  */
8376
- async listKnowledgeBases() {
8294
+ async listChatbotKnowledgeBases(chatbotId) {
8377
8295
  try {
8378
- const response = await this.fetch.get("/api/v1/admin/ai/knowledge-bases");
8296
+ const response = await this.fetch.get(`/api/v1/admin/ai/chatbots/${chatbotId}/knowledge-bases`);
8379
8297
  return { data: response.knowledge_bases || [], error: null };
8380
8298
  } catch (error) {
8381
8299
  return { data: null, error };
8382
8300
  }
8383
8301
  }
8384
8302
  /**
8385
- * Get a specific knowledge base
8386
- *
8387
- * @param id - Knowledge base ID
8388
- * @returns Promise resolving to { data, error } tuple with knowledge base details
8389
- *
8390
- * @example
8391
- * ```typescript
8392
- * const { data, error } = await client.admin.ai.getKnowledgeBase('uuid')
8393
- * if (data) {
8394
- * console.log('Knowledge base:', data.name)
8395
- * }
8396
- * ```
8397
- */
8398
- async getKnowledgeBase(id) {
8399
- try {
8400
- const data = await this.fetch.get(
8401
- `/api/v1/admin/ai/knowledge-bases/${id}`
8402
- );
8403
- return { data, error: null };
8404
- } catch (error) {
8405
- return { data: null, error };
8406
- }
8407
- }
8408
- /**
8409
- * Create a new knowledge base
8303
+ * Link a knowledge base to a chatbot
8410
8304
  *
8411
- * @param request - Knowledge base configuration
8412
- * @returns Promise resolving to { data, error } tuple with created knowledge base
8305
+ * @param chatbotId - Chatbot ID
8306
+ * @param request - Link configuration
8307
+ * @returns Promise resolving to { data, error } tuple with link details
8413
8308
  *
8414
8309
  * @example
8415
8310
  * ```typescript
8416
- * const { data, error } = await client.admin.ai.createKnowledgeBase({
8417
- * name: 'product-docs',
8418
- * description: 'Product documentation',
8419
- * chunk_size: 512,
8420
- * chunk_overlap: 50,
8311
+ * const { data, error } = await client.admin.ai.linkKnowledgeBase('chatbot-uuid', {
8312
+ * knowledge_base_id: 'kb-uuid',
8313
+ * priority: 1,
8314
+ * max_chunks: 5,
8315
+ * similarity_threshold: 0.7,
8421
8316
  * })
8422
8317
  * ```
8423
8318
  */
8424
- async createKnowledgeBase(request) {
8319
+ async linkKnowledgeBase(chatbotId, request) {
8425
8320
  try {
8426
8321
  const data = await this.fetch.post(
8427
- "/api/v1/admin/ai/knowledge-bases",
8322
+ `/api/v1/admin/ai/chatbots/${chatbotId}/knowledge-bases`,
8428
8323
  request
8429
8324
  );
8430
8325
  return { data, error: null };
@@ -8433,24 +8328,26 @@ var FluxbaseAdminAI = class {
8433
8328
  }
8434
8329
  }
8435
8330
  /**
8436
- * Update an existing knowledge base
8331
+ * Update a chatbot-knowledge base link
8437
8332
  *
8438
- * @param id - Knowledge base ID
8333
+ * @param chatbotId - Chatbot ID
8334
+ * @param knowledgeBaseId - Knowledge base ID
8439
8335
  * @param updates - Fields to update
8440
- * @returns Promise resolving to { data, error } tuple with updated knowledge base
8336
+ * @returns Promise resolving to { data, error } tuple with updated link
8441
8337
  *
8442
8338
  * @example
8443
8339
  * ```typescript
8444
- * const { data, error } = await client.admin.ai.updateKnowledgeBase('uuid', {
8445
- * description: 'Updated description',
8446
- * enabled: true,
8447
- * })
8340
+ * const { data, error } = await client.admin.ai.updateChatbotKnowledgeBase(
8341
+ * 'chatbot-uuid',
8342
+ * 'kb-uuid',
8343
+ * { max_chunks: 10, enabled: true }
8344
+ * )
8448
8345
  * ```
8449
8346
  */
8450
- async updateKnowledgeBase(id, updates) {
8347
+ async updateChatbotKnowledgeBase(chatbotId, knowledgeBaseId, updates) {
8451
8348
  try {
8452
8349
  const data = await this.fetch.put(
8453
- `/api/v1/admin/ai/knowledge-bases/${id}`,
8350
+ `/api/v1/admin/ai/chatbots/${chatbotId}/knowledge-bases/${knowledgeBaseId}`,
8454
8351
  updates
8455
8352
  );
8456
8353
  return { data, error: null };
@@ -8459,612 +8356,49 @@ var FluxbaseAdminAI = class {
8459
8356
  }
8460
8357
  }
8461
8358
  /**
8462
- * Delete a knowledge base
8359
+ * Unlink a knowledge base from a chatbot
8463
8360
  *
8464
- * @param id - Knowledge base ID
8361
+ * @param chatbotId - Chatbot ID
8362
+ * @param knowledgeBaseId - Knowledge base ID
8465
8363
  * @returns Promise resolving to { data, error } tuple
8466
8364
  *
8467
8365
  * @example
8468
8366
  * ```typescript
8469
- * const { data, error } = await client.admin.ai.deleteKnowledgeBase('uuid')
8367
+ * const { data, error } = await client.admin.ai.unlinkKnowledgeBase('chatbot-uuid', 'kb-uuid')
8470
8368
  * ```
8471
8369
  */
8472
- async deleteKnowledgeBase(id) {
8370
+ async unlinkKnowledgeBase(chatbotId, knowledgeBaseId) {
8473
8371
  try {
8474
- await this.fetch.delete(`/api/v1/admin/ai/knowledge-bases/${id}`);
8372
+ await this.fetch.delete(
8373
+ `/api/v1/admin/ai/chatbots/${chatbotId}/knowledge-bases/${knowledgeBaseId}`
8374
+ );
8475
8375
  return { data: null, error: null };
8476
8376
  } catch (error) {
8477
8377
  return { data: null, error };
8478
8378
  }
8479
8379
  }
8480
8380
  // ============================================================================
8481
- // DOCUMENT MANAGEMENT
8381
+ // TABLE DETAILS
8482
8382
  // ============================================================================
8483
8383
  /**
8484
- * List documents in a knowledge base
8384
+ * Get detailed table information including columns
8485
8385
  *
8486
- * @param knowledgeBaseId - Knowledge base ID
8487
- * @returns Promise resolving to { data, error } tuple with array of documents
8386
+ * Use this to discover available columns before exporting.
8387
+ *
8388
+ * @param schema - Schema name (e.g., 'public')
8389
+ * @param table - Table name
8390
+ * @returns Promise resolving to { data, error } tuple with table details
8488
8391
  *
8489
8392
  * @example
8490
8393
  * ```typescript
8491
- * const { data, error } = await client.admin.ai.listDocuments('kb-uuid')
8394
+ * const { data, error } = await client.admin.ai.getTableDetails('public', 'users')
8492
8395
  * if (data) {
8493
- * console.log('Documents:', data.map(d => d.title))
8396
+ * console.log('Columns:', data.columns.map(c => c.name))
8397
+ * console.log('Primary key:', data.primary_key)
8494
8398
  * }
8495
8399
  * ```
8496
8400
  */
8497
- async listDocuments(knowledgeBaseId) {
8498
- try {
8499
- const response = await this.fetch.get(`/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/documents`);
8500
- return { data: response.documents || [], error: null };
8501
- } catch (error) {
8502
- return { data: null, error };
8503
- }
8504
- }
8505
- /**
8506
- * Get a specific document
8507
- *
8508
- * @param knowledgeBaseId - Knowledge base ID
8509
- * @param documentId - Document ID
8510
- * @returns Promise resolving to { data, error } tuple with document details
8511
- *
8512
- * @example
8513
- * ```typescript
8514
- * const { data, error } = await client.admin.ai.getDocument('kb-uuid', 'doc-uuid')
8515
- * ```
8516
- */
8517
- async getDocument(knowledgeBaseId, documentId) {
8518
- try {
8519
- const data = await this.fetch.get(
8520
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/documents/${documentId}`
8521
- );
8522
- return { data, error: null };
8523
- } catch (error) {
8524
- return { data: null, error };
8525
- }
8526
- }
8527
- /**
8528
- * Add a document to a knowledge base
8529
- *
8530
- * Document will be chunked and embedded asynchronously.
8531
- *
8532
- * @param knowledgeBaseId - Knowledge base ID
8533
- * @param request - Document content and metadata
8534
- * @returns Promise resolving to { data, error } tuple with document ID
8535
- *
8536
- * @example
8537
- * ```typescript
8538
- * const { data, error } = await client.admin.ai.addDocument('kb-uuid', {
8539
- * title: 'Getting Started Guide',
8540
- * content: 'This is the content of the document...',
8541
- * metadata: { category: 'guides' },
8542
- * })
8543
- * if (data) {
8544
- * console.log('Document ID:', data.document_id)
8545
- * }
8546
- * ```
8547
- */
8548
- async addDocument(knowledgeBaseId, request) {
8549
- try {
8550
- const data = await this.fetch.post(
8551
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/documents`,
8552
- request
8553
- );
8554
- return { data, error: null };
8555
- } catch (error) {
8556
- return { data: null, error };
8557
- }
8558
- }
8559
- /**
8560
- * Upload a document file to a knowledge base
8561
- *
8562
- * Supported file types: PDF, TXT, MD, HTML, CSV, DOCX, XLSX, RTF, EPUB, JSON
8563
- * Maximum file size: 50MB
8564
- *
8565
- * @param knowledgeBaseId - Knowledge base ID
8566
- * @param file - File to upload (File or Blob)
8567
- * @param title - Optional document title (defaults to filename without extension)
8568
- * @returns Promise resolving to { data, error } tuple with upload result
8569
- *
8570
- * @example
8571
- * ```typescript
8572
- * // Browser
8573
- * const fileInput = document.getElementById('file') as HTMLInputElement
8574
- * const file = fileInput.files?.[0]
8575
- * if (file) {
8576
- * const { data, error } = await client.admin.ai.uploadDocument('kb-uuid', file)
8577
- * if (data) {
8578
- * console.log('Document ID:', data.document_id)
8579
- * console.log('Extracted length:', data.extracted_length)
8580
- * }
8581
- * }
8582
- *
8583
- * // Node.js (with node-fetch or similar)
8584
- * import { Blob } from 'buffer'
8585
- * const content = await fs.readFile('document.pdf')
8586
- * const blob = new Blob([content], { type: 'application/pdf' })
8587
- * const { data, error } = await client.admin.ai.uploadDocument('kb-uuid', blob, 'My Document')
8588
- * ```
8589
- */
8590
- async uploadDocument(knowledgeBaseId, file, title) {
8591
- try {
8592
- const formData = new FormData();
8593
- formData.append("file", file);
8594
- if (title) {
8595
- formData.append("title", title);
8596
- }
8597
- const data = await this.fetch.post(
8598
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/documents/upload`,
8599
- formData
8600
- );
8601
- return { data, error: null };
8602
- } catch (error) {
8603
- return { data: null, error };
8604
- }
8605
- }
8606
- /**
8607
- * Delete a document from a knowledge base
8608
- *
8609
- * @param knowledgeBaseId - Knowledge base ID
8610
- * @param documentId - Document ID
8611
- * @returns Promise resolving to { data, error } tuple
8612
- *
8613
- * @example
8614
- * ```typescript
8615
- * const { data, error } = await client.admin.ai.deleteDocument('kb-uuid', 'doc-uuid')
8616
- * ```
8617
- */
8618
- async deleteDocument(knowledgeBaseId, documentId) {
8619
- try {
8620
- await this.fetch.delete(
8621
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/documents/${documentId}`
8622
- );
8623
- return { data: null, error: null };
8624
- } catch (error) {
8625
- return { data: null, error };
8626
- }
8627
- }
8628
- /**
8629
- * Search a knowledge base
8630
- *
8631
- * @param knowledgeBaseId - Knowledge base ID
8632
- * @param query - Search query
8633
- * @param options - Search options
8634
- * @returns Promise resolving to { data, error } tuple with search results
8635
- *
8636
- * @example
8637
- * ```typescript
8638
- * const { data, error } = await client.admin.ai.searchKnowledgeBase('kb-uuid', 'how to reset password', {
8639
- * max_chunks: 5,
8640
- * threshold: 0.7,
8641
- * })
8642
- * if (data) {
8643
- * console.log('Results:', data.results.map(r => r.content))
8644
- * }
8645
- * ```
8646
- */
8647
- async searchKnowledgeBase(knowledgeBaseId, query, options) {
8648
- try {
8649
- const data = await this.fetch.post(
8650
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/search`,
8651
- {
8652
- query,
8653
- max_chunks: options?.max_chunks,
8654
- threshold: options?.threshold
8655
- }
8656
- );
8657
- return { data, error: null };
8658
- } catch (error) {
8659
- return { data: null, error };
8660
- }
8661
- }
8662
- // ============================================================================
8663
- // CHATBOT KNOWLEDGE BASE LINKING
8664
- // ============================================================================
8665
- /**
8666
- * List knowledge bases linked to a chatbot
8667
- *
8668
- * @param chatbotId - Chatbot ID
8669
- * @returns Promise resolving to { data, error } tuple with linked knowledge bases
8670
- *
8671
- * @example
8672
- * ```typescript
8673
- * const { data, error } = await client.admin.ai.listChatbotKnowledgeBases('chatbot-uuid')
8674
- * if (data) {
8675
- * console.log('Linked KBs:', data.map(l => l.knowledge_base_id))
8676
- * }
8677
- * ```
8678
- */
8679
- async listChatbotKnowledgeBases(chatbotId) {
8680
- try {
8681
- const response = await this.fetch.get(`/api/v1/admin/ai/chatbots/${chatbotId}/knowledge-bases`);
8682
- return { data: response.knowledge_bases || [], error: null };
8683
- } catch (error) {
8684
- return { data: null, error };
8685
- }
8686
- }
8687
- /**
8688
- * Link a knowledge base to a chatbot
8689
- *
8690
- * @param chatbotId - Chatbot ID
8691
- * @param request - Link configuration
8692
- * @returns Promise resolving to { data, error } tuple with link details
8693
- *
8694
- * @example
8695
- * ```typescript
8696
- * const { data, error } = await client.admin.ai.linkKnowledgeBase('chatbot-uuid', {
8697
- * knowledge_base_id: 'kb-uuid',
8698
- * priority: 1,
8699
- * max_chunks: 5,
8700
- * similarity_threshold: 0.7,
8701
- * })
8702
- * ```
8703
- */
8704
- async linkKnowledgeBase(chatbotId, request) {
8705
- try {
8706
- const data = await this.fetch.post(
8707
- `/api/v1/admin/ai/chatbots/${chatbotId}/knowledge-bases`,
8708
- request
8709
- );
8710
- return { data, error: null };
8711
- } catch (error) {
8712
- return { data: null, error };
8713
- }
8714
- }
8715
- /**
8716
- * Update a chatbot-knowledge base link
8717
- *
8718
- * @param chatbotId - Chatbot ID
8719
- * @param knowledgeBaseId - Knowledge base ID
8720
- * @param updates - Fields to update
8721
- * @returns Promise resolving to { data, error } tuple with updated link
8722
- *
8723
- * @example
8724
- * ```typescript
8725
- * const { data, error } = await client.admin.ai.updateChatbotKnowledgeBase(
8726
- * 'chatbot-uuid',
8727
- * 'kb-uuid',
8728
- * { max_chunks: 10, enabled: true }
8729
- * )
8730
- * ```
8731
- */
8732
- async updateChatbotKnowledgeBase(chatbotId, knowledgeBaseId, updates) {
8733
- try {
8734
- const data = await this.fetch.put(
8735
- `/api/v1/admin/ai/chatbots/${chatbotId}/knowledge-bases/${knowledgeBaseId}`,
8736
- updates
8737
- );
8738
- return { data, error: null };
8739
- } catch (error) {
8740
- return { data: null, error };
8741
- }
8742
- }
8743
- /**
8744
- * Unlink a knowledge base from a chatbot
8745
- *
8746
- * @param chatbotId - Chatbot ID
8747
- * @param knowledgeBaseId - Knowledge base ID
8748
- * @returns Promise resolving to { data, error } tuple
8749
- *
8750
- * @example
8751
- * ```typescript
8752
- * const { data, error } = await client.admin.ai.unlinkKnowledgeBase('chatbot-uuid', 'kb-uuid')
8753
- * ```
8754
- */
8755
- async unlinkKnowledgeBase(chatbotId, knowledgeBaseId) {
8756
- try {
8757
- await this.fetch.delete(
8758
- `/api/v1/admin/ai/chatbots/${chatbotId}/knowledge-bases/${knowledgeBaseId}`
8759
- );
8760
- return { data: null, error: null };
8761
- } catch (error) {
8762
- return { data: null, error };
8763
- }
8764
- }
8765
- // ============================================================================
8766
- // DOCUMENT UPDATE AND BULK DELETE
8767
- // ============================================================================
8768
- /**
8769
- * Update a document in a knowledge base
8770
- *
8771
- * @param knowledgeBaseId - Knowledge base ID
8772
- * @param documentId - Document ID
8773
- * @param updates - Fields to update
8774
- * @returns Promise resolving to { data, error } tuple with updated document
8775
- *
8776
- * @example
8777
- * ```typescript
8778
- * const { data, error } = await client.admin.ai.updateDocument('kb-uuid', 'doc-uuid', {
8779
- * title: 'Updated Title',
8780
- * tags: ['updated', 'tag'],
8781
- * metadata: { category: 'updated' },
8782
- * })
8783
- * ```
8784
- */
8785
- async updateDocument(knowledgeBaseId, documentId, updates) {
8786
- try {
8787
- const data = await this.fetch.patch(
8788
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/documents/${documentId}`,
8789
- updates
8790
- );
8791
- return { data, error: null };
8792
- } catch (error) {
8793
- return { data: null, error };
8794
- }
8795
- }
8796
- /**
8797
- * Delete documents from a knowledge base by filter
8798
- *
8799
- * @param knowledgeBaseId - Knowledge base ID
8800
- * @param filter - Filter criteria for deletion
8801
- * @returns Promise resolving to { data, error } tuple with deletion count
8802
- *
8803
- * @example
8804
- * ```typescript
8805
- * // Delete by tags
8806
- * const { data, error } = await client.admin.ai.deleteDocumentsByFilter('kb-uuid', {
8807
- * tags: ['deprecated', 'archive'],
8808
- * })
8809
- *
8810
- * // Delete by metadata
8811
- * const { data, error } = await client.admin.ai.deleteDocumentsByFilter('kb-uuid', {
8812
- * metadata: { source: 'legacy-system' },
8813
- * })
8814
- *
8815
- * if (data) {
8816
- * console.log(`Deleted ${data.deleted_count} documents`)
8817
- * }
8818
- * ```
8819
- */
8820
- async deleteDocumentsByFilter(knowledgeBaseId, filter) {
8821
- try {
8822
- const data = await this.fetch.post(
8823
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/documents/delete-by-filter`,
8824
- filter
8825
- );
8826
- return { data, error: null };
8827
- } catch (error) {
8828
- return { data: null, error };
8829
- }
8830
- }
8831
- // ============================================================================
8832
- // KNOWLEDGE BASE CAPABILITIES
8833
- // ============================================================================
8834
- /**
8835
- * Get knowledge base system capabilities
8836
- *
8837
- * Returns information about OCR support, supported file types, etc.
8838
- *
8839
- * @returns Promise resolving to { data, error } tuple with capabilities
8840
- *
8841
- * @example
8842
- * ```typescript
8843
- * const { data, error } = await client.admin.ai.getCapabilities()
8844
- * if (data) {
8845
- * console.log('OCR available:', data.ocr_available)
8846
- * console.log('Supported types:', data.supported_file_types)
8847
- * }
8848
- * ```
8849
- */
8850
- async getCapabilities() {
8851
- try {
8852
- const data = await this.fetch.get(
8853
- "/api/v1/admin/ai/knowledge-bases/capabilities"
8854
- );
8855
- return { data, error: null };
8856
- } catch (error) {
8857
- return { data: null, error };
8858
- }
8859
- }
8860
- // ============================================================================
8861
- // KNOWLEDGE GRAPH / ENTITIES
8862
- // ============================================================================
8863
- /**
8864
- * List entities in a knowledge base
8865
- *
8866
- * @param knowledgeBaseId - Knowledge base ID
8867
- * @param entityType - Optional entity type filter
8868
- * @returns Promise resolving to { data, error } tuple with array of entities
8869
- *
8870
- * @example
8871
- * ```typescript
8872
- * // List all entities
8873
- * const { data, error } = await client.admin.ai.listEntities('kb-uuid')
8874
- *
8875
- * // Filter by type
8876
- * const { data, error } = await client.admin.ai.listEntities('kb-uuid', 'person')
8877
- *
8878
- * if (data) {
8879
- * console.log('Entities:', data.map(e => e.name))
8880
- * }
8881
- * ```
8882
- */
8883
- async listEntities(knowledgeBaseId, entityType) {
8884
- try {
8885
- const params = entityType ? `?entity_type=${entityType}` : "";
8886
- const response = await this.fetch.get(
8887
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/entities${params}`
8888
- );
8889
- return { data: response.entities || [], error: null };
8890
- } catch (error) {
8891
- return { data: null, error };
8892
- }
8893
- }
8894
- /**
8895
- * Search for entities in a knowledge base
8896
- *
8897
- * @param knowledgeBaseId - Knowledge base ID
8898
- * @param query - Search query
8899
- * @param types - Optional entity type filters
8900
- * @returns Promise resolving to { data, error } tuple with matching entities
8901
- *
8902
- * @example
8903
- * ```typescript
8904
- * // Search all entity types
8905
- * const { data, error } = await client.admin.ai.searchEntities('kb-uuid', 'John')
8906
- *
8907
- * // Search specific types
8908
- * const { data, error } = await client.admin.ai.searchEntities('kb-uuid', 'Apple', ['organization', 'product'])
8909
- *
8910
- * if (data) {
8911
- * console.log('Found entities:', data.map(e => `${e.name} (${e.entity_type})`))
8912
- * }
8913
- * ```
8914
- */
8915
- async searchEntities(knowledgeBaseId, query, types) {
8916
- try {
8917
- const params = new URLSearchParams({ query });
8918
- if (types && types.length > 0) {
8919
- params.append("types", types.join(","));
8920
- }
8921
- const response = await this.fetch.get(
8922
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/entities/search?${params.toString()}`
8923
- );
8924
- return { data: response.entities || [], error: null };
8925
- } catch (error) {
8926
- return { data: null, error };
8927
- }
8928
- }
8929
- /**
8930
- * Get relationships for a specific entity
8931
- *
8932
- * @param knowledgeBaseId - Knowledge base ID
8933
- * @param entityId - Entity ID
8934
- * @returns Promise resolving to { data, error } tuple with entity relationships
8935
- *
8936
- * @example
8937
- * ```typescript
8938
- * const { data, error } = await client.admin.ai.getEntityRelationships('kb-uuid', 'entity-uuid')
8939
- * if (data) {
8940
- * console.log('Relationships:', data.map(r => `${r.relationship_type} -> ${r.target_entity?.name}`))
8941
- * }
8942
- * ```
8943
- */
8944
- async getEntityRelationships(knowledgeBaseId, entityId) {
8945
- try {
8946
- const response = await this.fetch.get(
8947
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/entities/${entityId}/relationships`
8948
- );
8949
- return { data: response.relationships || [], error: null };
8950
- } catch (error) {
8951
- return { data: null, error };
8952
- }
8953
- }
8954
- /**
8955
- * Get the knowledge graph for a knowledge base
8956
- *
8957
- * Returns all entities and relationships for visualization.
8958
- *
8959
- * @param knowledgeBaseId - Knowledge base ID
8960
- * @returns Promise resolving to { data, error } tuple with graph data
8961
- *
8962
- * @example
8963
- * ```typescript
8964
- * const { data, error } = await client.admin.ai.getKnowledgeGraph('kb-uuid')
8965
- * if (data) {
8966
- * console.log('Graph:', data.entity_count, 'entities,', data.relationship_count, 'relationships')
8967
- * // Use with visualization libraries like D3.js, Cytoscape.js, etc.
8968
- * }
8969
- * ```
8970
- */
8971
- async getKnowledgeGraph(knowledgeBaseId) {
8972
- try {
8973
- const data = await this.fetch.get(
8974
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/graph`
8975
- );
8976
- return { data, error: null };
8977
- } catch (error) {
8978
- return { data: null, error };
8979
- }
8980
- }
8981
- // ============================================================================
8982
- // KNOWLEDGE BASE REVERSE LOOKUP
8983
- // ============================================================================
8984
- /**
8985
- * List all chatbots that use a specific knowledge base
8986
- *
8987
- * Reverse lookup to find which chatbots are linked to a knowledge base.
8988
- *
8989
- * @param knowledgeBaseId - Knowledge base ID
8990
- * @returns Promise resolving to { data, error } tuple with array of chatbot summaries
8991
- *
8992
- * @example
8993
- * ```typescript
8994
- * const { data, error } = await client.admin.ai.listChatbotsUsingKB('kb-uuid')
8995
- * if (data) {
8996
- * console.log('Used by chatbots:', data.map(c => c.name))
8997
- * }
8998
- * ```
8999
- */
9000
- async listChatbotsUsingKB(knowledgeBaseId) {
9001
- try {
9002
- const response = await this.fetch.get(`/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/chatbots`);
9003
- return { data: response.chatbots || [], error: null };
9004
- } catch (error) {
9005
- return { data: null, error };
9006
- }
9007
- }
9008
- // ============================================================================
9009
- // TABLE EXPORT
9010
- // ============================================================================
9011
- /**
9012
- * Export a database table to a knowledge base
9013
- *
9014
- * The table schema will be exported as a markdown document and indexed.
9015
- * Optionally filter which columns to export for security or relevance.
9016
- *
9017
- * @param knowledgeBaseId - Knowledge base ID
9018
- * @param options - Export options including column selection
9019
- * @returns Promise resolving to { data, error } tuple with export result
9020
- *
9021
- * @example
9022
- * ```typescript
9023
- * // Export all columns
9024
- * const { data, error } = await client.admin.ai.exportTable('kb-uuid', {
9025
- * schema: 'public',
9026
- * table: 'users',
9027
- * include_foreign_keys: true,
9028
- * })
9029
- *
9030
- * // Export specific columns (recommended for sensitive data)
9031
- * const { data, error } = await client.admin.ai.exportTable('kb-uuid', {
9032
- * schema: 'public',
9033
- * table: 'users',
9034
- * columns: ['id', 'name', 'email', 'created_at'],
9035
- * })
9036
- * ```
9037
- */
9038
- async exportTable(knowledgeBaseId, options) {
9039
- try {
9040
- const data = await this.fetch.post(
9041
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/tables/export`,
9042
- options
9043
- );
9044
- return { data, error: null };
9045
- } catch (error) {
9046
- return { data: null, error };
9047
- }
9048
- }
9049
- /**
9050
- * Get detailed table information including columns
9051
- *
9052
- * Use this to discover available columns before exporting.
9053
- *
9054
- * @param schema - Schema name (e.g., 'public')
9055
- * @param table - Table name
9056
- * @returns Promise resolving to { data, error } tuple with table details
9057
- *
9058
- * @example
9059
- * ```typescript
9060
- * const { data, error } = await client.admin.ai.getTableDetails('public', 'users')
9061
- * if (data) {
9062
- * console.log('Columns:', data.columns.map(c => c.name))
9063
- * console.log('Primary key:', data.primary_key)
9064
- * }
9065
- * ```
9066
- */
9067
- async getTableDetails(schema, table) {
8401
+ async getTableDetails(schema, table) {
9068
8402
  try {
9069
8403
  const data = await this.fetch.get(
9070
8404
  `/api/v1/admin/ai/tables/${schema}/${table}`
@@ -9074,143 +8408,15 @@ var FluxbaseAdminAI = class {
9074
8408
  return { data: null, error };
9075
8409
  }
9076
8410
  }
9077
- // ============================================================================
9078
- // TABLE EXPORT PRESETS
9079
- // ============================================================================
9080
- /**
9081
- * Create a table export preset
9082
- *
9083
- * Saves a table export configuration for easy re-export. Use triggerTableExportSync
9084
- * to re-export when the schema changes.
9085
- *
9086
- * @param knowledgeBaseId - Knowledge base ID
9087
- * @param config - Export preset configuration
9088
- * @returns Promise resolving to { data, error } tuple with created preset
9089
- *
9090
- * @example
9091
- * ```typescript
9092
- * const { data, error } = await client.admin.ai.createTableExportSync('kb-uuid', {
9093
- * schema_name: 'public',
9094
- * table_name: 'products',
9095
- * columns: ['id', 'name', 'description', 'price'],
9096
- * include_foreign_keys: true,
9097
- * export_now: true, // Trigger initial export
9098
- * })
9099
- * ```
9100
- */
9101
- async createTableExportSync(knowledgeBaseId, config) {
9102
- try {
9103
- const data = await this.fetch.post(
9104
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/sync-configs`,
9105
- config
9106
- );
9107
- return { data, error: null };
9108
- } catch (error) {
9109
- return { data: null, error };
9110
- }
9111
- }
9112
- /**
9113
- * List table export presets for a knowledge base
9114
- *
9115
- * @param knowledgeBaseId - Knowledge base ID
9116
- * @returns Promise resolving to { data, error } tuple with array of presets
9117
- *
9118
- * @example
9119
- * ```typescript
9120
- * const { data, error } = await client.admin.ai.listTableExportSyncs('kb-uuid')
9121
- * if (data) {
9122
- * data.forEach(config => {
9123
- * console.log(`${config.schema_name}.${config.table_name}`)
9124
- * })
9125
- * }
9126
- * ```
9127
- */
9128
- async listTableExportSyncs(knowledgeBaseId) {
9129
- try {
9130
- const response = await this.fetch.get(`/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/sync-configs`);
9131
- return { data: response.sync_configs || [], error: null };
9132
- } catch (error) {
9133
- return { data: null, error };
9134
- }
9135
- }
9136
- /**
9137
- * Update a table export preset
9138
- *
9139
- * @param knowledgeBaseId - Knowledge base ID
9140
- * @param syncId - Preset ID
9141
- * @param updates - Fields to update
9142
- * @returns Promise resolving to { data, error } tuple with updated preset
9143
- *
9144
- * @example
9145
- * ```typescript
9146
- * const { data, error } = await client.admin.ai.updateTableExportSync('kb-uuid', 'sync-id', {
9147
- * columns: ['id', 'name', 'email', 'updated_at'],
9148
- * })
9149
- * ```
9150
- */
9151
- async updateTableExportSync(knowledgeBaseId, syncId, updates) {
9152
- try {
9153
- const data = await this.fetch.patch(
9154
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/sync-configs/${syncId}`,
9155
- updates
9156
- );
9157
- return { data, error: null };
9158
- } catch (error) {
9159
- return { data: null, error };
9160
- }
9161
- }
9162
- /**
9163
- * Delete a table export sync configuration
9164
- *
9165
- * @param knowledgeBaseId - Knowledge base ID
9166
- * @param syncId - Sync config ID
9167
- * @returns Promise resolving to { data, error } tuple
9168
- *
9169
- * @example
9170
- * ```typescript
9171
- * const { data, error } = await client.admin.ai.deleteTableExportSync('kb-uuid', 'sync-id')
9172
- * ```
9173
- */
9174
- async deleteTableExportSync(knowledgeBaseId, syncId) {
9175
- try {
9176
- await this.fetch.delete(
9177
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/sync-configs/${syncId}`
9178
- );
9179
- return { data: null, error: null };
9180
- } catch (error) {
9181
- return { data: null, error };
9182
- }
9183
- }
9184
- /**
9185
- * Manually trigger a table export sync
9186
- *
9187
- * Immediately re-exports the table to the knowledge base,
9188
- * regardless of the sync mode.
9189
- *
9190
- * @param knowledgeBaseId - Knowledge base ID
9191
- * @param syncId - Sync config ID
9192
- * @returns Promise resolving to { data, error } tuple with export result
9193
- *
9194
- * @example
9195
- * ```typescript
9196
- * const { data, error } = await client.admin.ai.triggerTableExportSync('kb-uuid', 'sync-id')
9197
- * if (data) {
9198
- * console.log('Exported document:', data.document_id)
9199
- * }
9200
- * ```
9201
- */
9202
- async triggerTableExportSync(knowledgeBaseId, syncId) {
9203
- try {
9204
- const data = await this.fetch.post(
9205
- `/api/v1/admin/ai/knowledge-bases/${knowledgeBaseId}/sync-configs/${syncId}/trigger`,
9206
- {}
9207
- );
9208
- return { data, error: null };
9209
- } catch (error) {
9210
- return { data: null, error };
9211
- }
9212
- }
9213
8411
  };
8412
+ function normalizeConfig(config) {
8413
+ const result = {};
8414
+ for (const [key, value] of Object.entries(config)) {
8415
+ if (value === void 0 || value === null) continue;
8416
+ result[key] = String(value);
8417
+ }
8418
+ return result;
8419
+ }
9214
8420
 
9215
8421
  // src/admin-rpc.ts
9216
8422
  var FluxbaseAdminRPC = class {
@@ -9725,19 +8931,18 @@ var FluxbaseAdminStorage = class {
9725
8931
  });
9726
8932
  }
9727
8933
  /**
9728
- * Generate a signed URL for temporary access
8934
+ * Generate a signed URL for a private object
9729
8935
  *
9730
8936
  * @param bucket - Bucket name
9731
8937
  * @param key - Object key (path)
9732
- * @param expiresIn - Expiration time in seconds
8938
+ * @param expiresIn - URL expiration time in seconds
9733
8939
  * @returns Signed URL and expiration info
9734
8940
  *
9735
8941
  * @example
9736
8942
  * ```typescript
9737
8943
  * const { data } = await admin.storage.generateSignedUrl('my-bucket', 'file.pdf', 3600);
9738
8944
  * if (data) {
9739
- * console.log(`Download at: ${data.url}`);
9740
- * console.log(`Expires in: ${data.expires_in} seconds`);
8945
+ * window.open(data.url);
9741
8946
  * }
9742
8947
  * ```
9743
8948
  */
@@ -9745,7 +8950,7 @@ var FluxbaseAdminStorage = class {
9745
8950
  return wrapAsync(async () => {
9746
8951
  const encodedKey = key.split("/").map((s) => encodeURIComponent(s)).join("/");
9747
8952
  return await this.fetch.post(
9748
- `/api/v1/storage/${encodeURIComponent(bucket)}/${encodedKey}/signed-url`,
8953
+ `/api/v1/storage/${encodeURIComponent(bucket)}/sign/${encodedKey}`,
9749
8954
  { expires_in: expiresIn }
9750
8955
  );
9751
8956
  });
@@ -9931,7 +9136,7 @@ var ServiceKeysManager = class {
9931
9136
  */
9932
9137
  async list() {
9933
9138
  try {
9934
- const data = await this.fetch.get("/service-keys");
9139
+ const data = await this.fetch.get("/api/v1/admin/service-keys");
9935
9140
  return { data, error: null };
9936
9141
  } catch (error) {
9937
9142
  return { data: null, error };
@@ -9950,7 +9155,7 @@ var ServiceKeysManager = class {
9950
9155
  */
9951
9156
  async get(id) {
9952
9157
  try {
9953
- const data = await this.fetch.get(`/service-keys/${id}`);
9158
+ const data = await this.fetch.get(`/api/v1/admin/service-keys/${id}`);
9954
9159
  return { data, error: null };
9955
9160
  } catch (error) {
9956
9161
  return { data: null, error };
@@ -9982,7 +9187,7 @@ var ServiceKeysManager = class {
9982
9187
  async create(request) {
9983
9188
  try {
9984
9189
  const data = await this.fetch.post(
9985
- "/service-keys",
9190
+ "/api/v1/admin/service-keys",
9986
9191
  request
9987
9192
  );
9988
9193
  return { data, error: null };
@@ -10008,7 +9213,7 @@ var ServiceKeysManager = class {
10008
9213
  async update(id, request) {
10009
9214
  try {
10010
9215
  const data = await this.fetch.put(
10011
- `/service-keys/${id}`,
9216
+ `/api/v1/admin/service-keys/${id}`,
10012
9217
  request
10013
9218
  );
10014
9219
  return { data, error: null };
@@ -10029,7 +9234,7 @@ var ServiceKeysManager = class {
10029
9234
  */
10030
9235
  async delete(id) {
10031
9236
  try {
10032
- await this.fetch.delete(`/service-keys/${id}`);
9237
+ await this.fetch.delete(`/api/v1/admin/service-keys/${id}`);
10033
9238
  return { error: null };
10034
9239
  } catch (error) {
10035
9240
  return { error };
@@ -10048,7 +9253,7 @@ var ServiceKeysManager = class {
10048
9253
  */
10049
9254
  async disable(id) {
10050
9255
  try {
10051
- await this.fetch.post(`/service-keys/${id}/disable`, {});
9256
+ await this.fetch.post(`/api/v1/admin/service-keys/${id}/disable`, {});
10052
9257
  return { error: null };
10053
9258
  } catch (error) {
10054
9259
  return { error };
@@ -10067,7 +9272,7 @@ var ServiceKeysManager = class {
10067
9272
  */
10068
9273
  async enable(id) {
10069
9274
  try {
10070
- await this.fetch.post(`/service-keys/${id}/enable`, {});
9275
+ await this.fetch.post(`/api/v1/admin/service-keys/${id}/enable`, {});
10071
9276
  return { error: null };
10072
9277
  } catch (error) {
10073
9278
  return { error };
@@ -10092,7 +9297,7 @@ var ServiceKeysManager = class {
10092
9297
  async revoke(id, request) {
10093
9298
  try {
10094
9299
  const body = request?.reason ? new URLSearchParams({ reason: request.reason }) : {};
10095
- await this.fetch.post(`/service-keys/${id}/revoke`, body);
9300
+ await this.fetch.post(`/api/v1/admin/service-keys/${id}/revoke`, body);
10096
9301
  return { error: null };
10097
9302
  } catch (error) {
10098
9303
  return { error };
@@ -10122,7 +9327,7 @@ var ServiceKeysManager = class {
10122
9327
  params.set("grace_period_hours", String(request.grace_period_hours));
10123
9328
  }
10124
9329
  const body = request?.grace_period_hours ? Object.fromEntries(params) : {};
10125
- const data = await this.fetch.post(`/service-keys/${id}/deprecate`, body);
9330
+ const data = await this.fetch.post(`/api/v1/admin/service-keys/${id}/deprecate`, body);
10126
9331
  return { data, error: null };
10127
9332
  } catch (error) {
10128
9333
  return { data: null, error };
@@ -10150,7 +9355,7 @@ var ServiceKeysManager = class {
10150
9355
  async rotate(id) {
10151
9356
  try {
10152
9357
  const data = await this.fetch.post(
10153
- `/service-keys/${id}/rotate`,
9358
+ `/api/v1/admin/service-keys/${id}/rotate`,
10154
9359
  {}
10155
9360
  );
10156
9361
  return { data, error: null };
@@ -10171,7 +9376,7 @@ var ServiceKeysManager = class {
10171
9376
  */
10172
9377
  async getRevocationHistory(id) {
10173
9378
  try {
10174
- const data = await this.fetch.get(`/service-keys/${id}/revocations`);
9379
+ const data = await this.fetch.get(`/api/v1/admin/service-keys/${id}/revocations`);
10175
9380
  return { data, error: null };
10176
9381
  } catch (error) {
10177
9382
  return { data: null, error };
@@ -10243,31 +9448,6 @@ var FluxbaseAdmin = class {
10243
9448
  });
10244
9449
  }
10245
9450
  // ============================================================================
10246
- // Email
10247
- // ============================================================================
10248
- /**
10249
- * Send an email
10250
- *
10251
- * @param request - Email details (to, subject, html/text)
10252
- *
10253
- * @example
10254
- * ```typescript
10255
- * const { error } = await admin.sendEmail({
10256
- * to: 'user@example.com',
10257
- * subject: 'Hello',
10258
- * html: '<p>Your message here</p>'
10259
- * });
10260
- * if (!error) {
10261
- * console.log('Email sent');
10262
- * }
10263
- * ```
10264
- */
10265
- async sendEmail(request) {
10266
- return wrapAsyncVoid(async () => {
10267
- await this.fetch.post("/api/v1/admin/email/send", request);
10268
- });
10269
- }
10270
- // ============================================================================
10271
9451
  // Admin Authentication
10272
9452
  // ============================================================================
10273
9453
  /**
@@ -12039,7 +11219,7 @@ var FluxbaseTenant = class {
12039
11219
  */
12040
11220
  async list() {
12041
11221
  try {
12042
- const data = await this.fetch.get("/tenants");
11222
+ const data = await this.fetch.get("/api/v1/admin/tenants");
12043
11223
  return { data, error: null };
12044
11224
  } catch (error) {
12045
11225
  return { data: null, error };
@@ -12058,7 +11238,7 @@ var FluxbaseTenant = class {
12058
11238
  */
12059
11239
  async listMine() {
12060
11240
  try {
12061
- const data = await this.fetch.get("/tenants/mine");
11241
+ const data = await this.fetch.get("/api/v1/admin/tenants/mine");
12062
11242
  return { data, error: null };
12063
11243
  } catch (error) {
12064
11244
  return { data: null, error };
@@ -12077,7 +11257,7 @@ var FluxbaseTenant = class {
12077
11257
  */
12078
11258
  async get(id) {
12079
11259
  try {
12080
- const data = await this.fetch.get(`/tenants/${id}`);
11260
+ const data = await this.fetch.get(`/api/v1/admin/tenants/${id}`);
12081
11261
  return { data, error: null };
12082
11262
  } catch (error) {
12083
11263
  return { data: null, error };
@@ -12102,7 +11282,7 @@ var FluxbaseTenant = class {
12102
11282
  */
12103
11283
  async create(options) {
12104
11284
  try {
12105
- const data = await this.fetch.post("/tenants", options);
11285
+ const data = await this.fetch.post("/api/v1/admin/tenants", options);
12106
11286
  return { data, error: null };
12107
11287
  } catch (error) {
12108
11288
  return { data: null, error };
@@ -12124,7 +11304,7 @@ var FluxbaseTenant = class {
12124
11304
  */
12125
11305
  async update(id, options) {
12126
11306
  try {
12127
- const data = await this.fetch.patch(`/tenants/${id}`, options);
11307
+ const data = await this.fetch.patch(`/api/v1/admin/tenants/${id}`, options);
12128
11308
  return { data, error: null };
12129
11309
  } catch (error) {
12130
11310
  return { data: null, error };
@@ -12146,7 +11326,7 @@ var FluxbaseTenant = class {
12146
11326
  */
12147
11327
  async delete(id) {
12148
11328
  try {
12149
- await this.fetch.delete(`/tenants/${id}`);
11329
+ await this.fetch.delete(`/api/v1/admin/tenants/${id}`);
12150
11330
  return { data: void 0, error: null };
12151
11331
  } catch (error) {
12152
11332
  return { data: null, error };
@@ -12167,7 +11347,7 @@ var FluxbaseTenant = class {
12167
11347
  async migrate(id) {
12168
11348
  try {
12169
11349
  const data = await this.fetch.post(
12170
- `/tenants/${id}/migrate`,
11350
+ `/api/v1/admin/tenants/${id}/migrate`,
12171
11351
  {}
12172
11352
  );
12173
11353
  return { data, error: null };
@@ -12190,7 +11370,7 @@ var FluxbaseTenant = class {
12190
11370
  async listAdmins(tenantId) {
12191
11371
  try {
12192
11372
  const data = await this.fetch.get(
12193
- `/tenants/${tenantId}/admins`
11373
+ `/api/v1/admin/tenants/${tenantId}/admins`
12194
11374
  );
12195
11375
  return { data, error: null };
12196
11376
  } catch (error) {
@@ -12214,7 +11394,7 @@ var FluxbaseTenant = class {
12214
11394
  async assignAdmin(tenantId, options) {
12215
11395
  try {
12216
11396
  const data = await this.fetch.post(
12217
- `/tenants/${tenantId}/admins`,
11397
+ `/api/v1/admin/tenants/${tenantId}/admins`,
12218
11398
  options
12219
11399
  );
12220
11400
  return { data, error: null };
@@ -12236,7 +11416,7 @@ var FluxbaseTenant = class {
12236
11416
  */
12237
11417
  async removeAdmin(tenantId, userId) {
12238
11418
  try {
12239
- await this.fetch.delete(`/tenants/${tenantId}/admins/${userId}`);
11419
+ await this.fetch.delete(`/api/v1/admin/tenants/${tenantId}/admins/${userId}`);
12240
11420
  return { data: void 0, error: null };
12241
11421
  } catch (error) {
12242
11422
  return { data: null, error };