@visgate_ai/client 0.3.3 → 0.3.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/dist/index.cjs +39 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +24 -2
- package/dist/index.d.ts +24 -2
- package/dist/index.js +39 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -503,6 +503,42 @@ var Deployments = class {
|
|
|
503
503
|
}
|
|
504
504
|
};
|
|
505
505
|
|
|
506
|
+
// src/resources/hf-models.ts
|
|
507
|
+
var HF_API_BASE = "https://huggingface.co/api/models";
|
|
508
|
+
function normalizeModel(raw) {
|
|
509
|
+
const id = raw.id ?? raw.modelId ?? "";
|
|
510
|
+
return {
|
|
511
|
+
id,
|
|
512
|
+
modelId: raw.modelId ?? id,
|
|
513
|
+
pipelineTag: raw.pipeline_tag ?? "",
|
|
514
|
+
libraryName: raw.library_name,
|
|
515
|
+
likes: raw.likes,
|
|
516
|
+
downloads: raw.downloads
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
var HfModels = class {
|
|
520
|
+
async list(options = {}) {
|
|
521
|
+
const task = options.task ?? "text-to-image";
|
|
522
|
+
const limit = Math.min(Math.max(options.limit ?? 50, 1), 100);
|
|
523
|
+
const params = new URLSearchParams();
|
|
524
|
+
params.set("pipeline_tag", task);
|
|
525
|
+
params.set("limit", String(limit));
|
|
526
|
+
if (options.search && options.search.trim()) {
|
|
527
|
+
params.set("search", options.search.trim());
|
|
528
|
+
}
|
|
529
|
+
const url = `${HF_API_BASE}?${params.toString()}`;
|
|
530
|
+
const response = await fetch(url);
|
|
531
|
+
if (!response.ok) {
|
|
532
|
+
throw new Error(`Hugging Face API error: ${response.status} ${response.statusText}`);
|
|
533
|
+
}
|
|
534
|
+
const data = await response.json();
|
|
535
|
+
if (!Array.isArray(data)) {
|
|
536
|
+
return [];
|
|
537
|
+
}
|
|
538
|
+
return data.map((item) => normalizeModel(item));
|
|
539
|
+
}
|
|
540
|
+
};
|
|
541
|
+
|
|
506
542
|
// src/resources/providers.ts
|
|
507
543
|
function providerKeyInfoFromResponse(data) {
|
|
508
544
|
return {
|
|
@@ -862,6 +898,7 @@ var Client = class {
|
|
|
862
898
|
this.usage = new Usage(this);
|
|
863
899
|
this.providers = new Providers(this);
|
|
864
900
|
this.deployments = new Deployments(this);
|
|
901
|
+
this.hfModels = new HfModels();
|
|
865
902
|
this.billing = new Billing(this);
|
|
866
903
|
this._generate = new Generate(this);
|
|
867
904
|
}
|
|
@@ -951,7 +988,7 @@ var AsyncClient = class extends Client {
|
|
|
951
988
|
};
|
|
952
989
|
|
|
953
990
|
// src/index.ts
|
|
954
|
-
var VERSION = "0.3.
|
|
991
|
+
var VERSION = "0.3.4";
|
|
955
992
|
|
|
956
993
|
exports.AsyncClient = AsyncClient;
|
|
957
994
|
exports.AuthenticationError = AuthenticationError;
|
|
@@ -959,6 +996,7 @@ exports.Billing = Billing;
|
|
|
959
996
|
exports.Client = Client;
|
|
960
997
|
exports.Deployments = Deployments;
|
|
961
998
|
exports.Generate = Generate;
|
|
999
|
+
exports.HfModels = HfModels;
|
|
962
1000
|
exports.Images = Images;
|
|
963
1001
|
exports.Models = Models;
|
|
964
1002
|
exports.ProviderError = ProviderError;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/exceptions.ts","../src/resources/billing.ts","../src/utils.ts","../src/resources/generate.ts","../src/resources/images.ts","../src/resources/models.ts","../src/resources/deployments.ts","../src/resources/providers.ts","../src/resources/requests.ts","../src/resources/usage.ts","../src/resources/videos.ts","../src/client.ts","../src/index.ts"],"names":["text","message"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Visgate SDK exceptions. All extend VisgateError. */\n\nexport interface VisgateErrorDetails {\n [key: string]: unknown;\n}\n\n/**\n * Base exception for all Visgate SDK errors.\n */\nexport class VisgateError extends Error {\n readonly message: string;\n readonly errorCode: string;\n readonly details: VisgateErrorDetails;\n readonly statusCode?: number;\n\n constructor(\n message: string,\n errorCode: string = \"VISGATE_ERROR\",\n details: VisgateErrorDetails = {},\n statusCode?: number\n ) {\n super(message);\n this.name = \"VisgateError\";\n this.message = message;\n this.errorCode = errorCode;\n this.details = details;\n this.statusCode = statusCode;\n Object.setPrototypeOf(this, VisgateError.prototype);\n }\n\n override toString(): string {\n return `[${this.errorCode}] ${this.message}`;\n }\n}\n\n/** 401 — invalid or missing API key. */\nexport class AuthenticationError extends VisgateError {\n constructor(message: string = \"Invalid or missing API key\") {\n super(message, \"AUTHENTICATION_ERROR\", {}, 401);\n this.name = \"AuthenticationError\";\n Object.setPrototypeOf(this, AuthenticationError.prototype);\n }\n}\n\n/** 422 — invalid request parameters. */\nexport class ValidationError extends VisgateError {\n readonly field?: string;\n\n constructor(message: string, field?: string) {\n super(message, \"VALIDATION_ERROR\", field ? { field } : {}, 422);\n this.name = \"ValidationError\";\n this.field = field;\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\n/** 429 — too many requests. */\nexport class RateLimitError extends VisgateError {\n readonly retryAfter?: number;\n\n constructor(message: string = \"Rate limit exceeded\", retryAfter?: number) {\n super(message, \"RATE_LIMIT_ERROR\", retryAfter != null ? { retry_after: retryAfter } : {}, 429);\n this.name = \"RateLimitError\";\n this.retryAfter = retryAfter;\n Object.setPrototypeOf(this, RateLimitError.prototype);\n }\n}\n\n/** Upstream provider error (e.g. Fal, Replicate, Runway). */\nexport class ProviderError extends VisgateError {\n readonly provider: string;\n\n constructor(message: string, provider: string = \"unknown\") {\n super(message, \"PROVIDER_ERROR\", { provider });\n this.name = \"ProviderError\";\n this.provider = provider;\n Object.setPrototypeOf(this, ProviderError.prototype);\n }\n}\n\n/** Request timed out before the server responded. */\nexport class VisgateTimeoutError extends VisgateError {\n constructor(message: string = \"Request timed out\") {\n super(message, \"TIMEOUT_ERROR\");\n this.name = \"VisgateTimeoutError\";\n Object.setPrototypeOf(this, VisgateTimeoutError.prototype);\n }\n}\n\n/** Network connection failed. */\nexport class VisgateConnectionError extends VisgateError {\n constructor(message: string = \"Connection failed\") {\n super(message, \"CONNECTION_ERROR\");\n this.name = \"VisgateConnectionError\";\n Object.setPrototypeOf(this, VisgateConnectionError.prototype);\n }\n}\n","/** Billing: GET /billing/stats, /billing/info, /billing/pricing, POST /billing/checkout, /billing/subscription */\n\nimport type { Client } from \"../client\";\n\nexport interface BillingInfo {\n tier: string;\n balanceMicro: number;\n billingStatus: string;\n monthlyBudgetCents?: number | null;\n usageThisMonthCents?: number;\n supportEmail?: string | null;\n companyName?: string | null;\n freeModeEnabled?: boolean;\n}\n\nexport function billingInfoFromResponse(data: Record<string, unknown>): BillingInfo {\n return {\n tier: (data.tier as string) ?? \"free\",\n balanceMicro: (data.balance_micro as number) ?? 0,\n billingStatus: (data.billing_status as string) ?? \"active\",\n monthlyBudgetCents: data.monthly_budget_cents as number | undefined,\n usageThisMonthCents: (data.usage_this_month_cents as number) ?? 0,\n supportEmail: data.support_email as string | undefined,\n companyName: data.company_name as string | undefined,\n freeModeEnabled: data.free_mode_enabled as boolean | undefined,\n };\n}\n\nexport interface ModelPricing {\n id: string;\n providerType: string;\n model: string;\n modelName: string;\n modelType: string;\n modelClass?: string | null;\n costPerUnitMicro: number;\n usageCount: number;\n totalSavingsMicro: number;\n avgSavingsMicro: number;\n}\n\nexport function modelPricingFromResponse(data: Record<string, unknown>): ModelPricing {\n return {\n id: (data.id as string) ?? \"\",\n providerType: (data.provider_type as string) ?? \"\",\n model: (data.model as string) ?? \"\",\n modelName: (data.model_name as string) ?? \"\",\n modelType: (data.model_type as string) ?? \"image\",\n modelClass: data.model_class as string | undefined,\n costPerUnitMicro: (data.cost_per_unit_micro as number) ?? 0,\n usageCount: (data.usage_count as number) ?? 0,\n totalSavingsMicro: (data.total_savings_micro as number) ?? 0,\n avgSavingsMicro: (data.avg_savings_micro as number) ?? 0,\n };\n}\n\nexport interface PricingResponse {\n lastUpdated: string | null;\n pricing: ModelPricing[];\n}\n\nexport function pricingResponseFromResponse(data: Record<string, unknown>): PricingResponse {\n const pricing = (data.pricing as Record<string, unknown>[]) ?? [];\n return {\n lastUpdated: (data.last_updated as string) ?? null,\n pricing: pricing.map(modelPricingFromResponse),\n };\n}\n\nexport interface CheckoutOptions {\n customerEmail?: string | null;\n firebaseUid?: string | null;\n}\n\nexport class Billing {\n constructor(private _client: Client) {}\n\n /** Public billing stats for landing/marketing (GET /billing/stats). May not require auth. */\n async getStats(): Promise<Record<string, unknown>> {\n return (await this._client._request(\"GET\", \"/billing/stats\")) as Record<string, unknown>;\n }\n\n /** Organization billing info (GET /billing/info). */\n async getInfo(): Promise<BillingInfo> {\n const data = (await this._client._request(\"GET\", \"/billing/info\")) as Record<string, unknown>;\n return billingInfoFromResponse(data);\n }\n\n /** Create checkout session (POST /billing/checkout). */\n async checkout(\n amountDollars: number,\n returnUrl: string,\n options?: CheckoutOptions\n ): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = {\n amount_dollars: amountDollars,\n return_url: returnUrl,\n };\n if (options?.customerEmail != null) body.customer_email = options.customerEmail;\n if (options?.firebaseUid != null) body.firebase_uid = options.firebaseUid;\n return (await this._client._request(\"POST\", \"/billing/checkout\", {\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n }\n\n /** Get pricing for all models (GET /billing/pricing). */\n async getPricing(): Promise<PricingResponse> {\n const data = (await this._client._request(\"GET\", \"/billing/pricing\")) as Record<string, unknown>;\n return pricingResponseFromResponse(data);\n }\n\n /** Update organization subscription tier (POST /billing/subscription). */\n async updateSubscription(tier: string): Promise<{ success: boolean; tier: string }> {\n const data = (await this._client._request(\"POST\", \"/billing/subscription\", {\n body: JSON.stringify({ tier }),\n })) as Record<string, unknown>;\n return {\n success: Boolean(data.success),\n tier: (data.tier as string) ?? tier,\n };\n }\n}\n","/** Internal utilities. */\n\nimport { AuthenticationError } from \"./exceptions\";\n\n/**\n * Parse ISO 8601 datetime string (handles Z suffix).\n */\nexport function parseDateTime(value: string | null | undefined): Date | null {\n if (value == null || value === \"\") return null;\n const normalized = value.replace(\"Z\", \"+00:00\");\n const date = new Date(normalized);\n return isNaN(date.getTime()) ? null : date;\n}\n\n/** Detect if we're in a Node-like environment with process.env. */\nfunction hasProcessEnv(): boolean {\n return typeof process !== \"undefined\" && typeof process.env !== \"undefined\";\n}\n\n/**\n * Resolve API key from argument or environment variable.\n * Node: process.env.VISGATE_API_KEY\n * Browser: only from argument (or Vite: import.meta.env.VITE_VISGATE_API_KEY — doc only).\n */\nexport function resolveApiKey(apiKey: string | null | undefined): string {\n const key = apiKey ?? (hasProcessEnv() ? process.env.VISGATE_API_KEY : undefined);\n if (!key || typeof key !== \"string\" || key.trim() === \"\") {\n throw new AuthenticationError(\n \"No API key provided. Pass apiKey or set the VISGATE_API_KEY environment variable.\"\n );\n }\n return key.trim();\n}\n","/** Unified image generation: POST /generate */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\nexport interface GenerateResult {\n id: string;\n status: string;\n imageUrl: string | null;\n images: string[];\n model: string;\n provider: string;\n mode: string;\n cost: number;\n costPerMegapixel: number;\n latencyMs: number;\n resolution: Record<string, number>;\n createdAt: Date | null;\n}\n\nexport function generateResultFromResponse(data: Record<string, unknown>): GenerateResult {\n return {\n id: data.id as string,\n status: (data.status as string) ?? \"success\",\n imageUrl: (data.image_url as string) ?? null,\n images: (data.images as string[]) ?? [],\n model: data.model as string,\n provider: (data.provider as string) ?? \"\",\n mode: (data.mode as string) ?? \"\",\n cost: (data.estimated_cost_usd as number) ?? 0,\n costPerMegapixel: (data.cost_per_megapixel_usd as number) ?? 0,\n latencyMs: (data.latency_ms as number) ?? 0,\n resolution: (data.resolution as Record<string, number>) ?? {},\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\nconst DEFAULT_MODEL = \"fal-ai/flux/schnell\";\n\nexport class Generate {\n constructor(private _client: Client) {}\n\n async __call__(\n prompt: string,\n model: string = DEFAULT_MODEL,\n params?: Record<string, unknown>\n ): Promise<GenerateResult> {\n const payload: Record<string, unknown> = { prompt, model };\n if (params) payload.params = params;\n const data = (await this._client._request(\"POST\", \"/generate\", {\n body: JSON.stringify(payload),\n })) as Record<string, unknown>;\n return generateResultFromResponse(data);\n }\n}\n","/** Image generation: POST /images/generate */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\nexport interface ImageResult {\n id: string;\n /** Request status: \"success\" | \"cached\" | \"failed\" */\n status?: string;\n images: string[];\n model: string;\n provider: string;\n cost: number;\n /** True when response was served from cache (exact or semantic match). */\n cacheHit: boolean;\n latencyMs: number | null;\n savedAmount?: number;\n marginPercent?: number;\n /** When cache hit: \"exact\" (hash match) or \"semantic\" (similarity match). Optional if API returns it. */\n cacheSource?: \"exact\" | \"semantic\" | null;\n createdAt: Date | null;\n}\n\nexport function imageResultFromResponse(data: Record<string, unknown>): ImageResult {\n const cacheSource = data.cache_source as string | undefined;\n return {\n id: data.id as string,\n status: data.status as string | undefined,\n images: (data.images as string[]) ?? [],\n model: data.model as string,\n provider: data.provider as string,\n cost: (data.cost as number) ?? 0,\n cacheHit: (data.cache_hit as boolean) ?? false,\n latencyMs: (data.latency_ms as number) ?? null,\n savedAmount: data.saved_amount as number | undefined,\n marginPercent: data.margin_percent as number | undefined,\n cacheSource:\n cacheSource === \"exact\" || cacheSource === \"semantic\" ? cacheSource : undefined,\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\nexport interface ImagesGenerateOptions {\n negativePrompt?: string | null;\n width?: number;\n height?: number;\n numImages?: number;\n seed?: number | null;\n /** Input image URL for image-to-image */\n imageUrl?: string | null;\n /** Prefer cache (exact or semantic match). Default true. Set false to force fresh generation. */\n preferCache?: boolean;\n /** Max acceptable latency in ms; API may use for routing. */\n maxLatencyMs?: number | null;\n /** URL to call when generation is complete (async callback). */\n webhookUrl?: string | null;\n /** ID to include in the callback payload. */\n callbackId?: string | null;\n params?: Record<string, unknown>;\n}\n\nexport class Images {\n constructor(private _client: Client) {}\n\n async generate(\n model: string,\n prompt: string,\n options: ImagesGenerateOptions = {}\n ): Promise<ImageResult> {\n const {\n negativePrompt,\n width = 1024,\n height = 1024,\n numImages = 1,\n seed,\n imageUrl,\n preferCache,\n maxLatencyMs,\n webhookUrl,\n callbackId,\n params,\n } = options;\n const payload: Record<string, unknown> = {\n model,\n prompt,\n width,\n height,\n num_images: numImages,\n };\n if (negativePrompt) payload.negative_prompt = negativePrompt;\n if (seed != null) payload.seed = seed;\n if (imageUrl) payload.image_url = imageUrl;\n if (preferCache !== undefined) payload.prefer_cache = preferCache;\n if (maxLatencyMs != null) payload.max_latency_ms = maxLatencyMs;\n if (webhookUrl) payload.webhook_url = webhookUrl;\n if (callbackId) payload.callback_id = callbackId;\n if (params) Object.assign(payload, params);\n const data = (await this._client._request(\"POST\", \"/images/generate\", {\n body: JSON.stringify(payload),\n })) as Record<string, unknown>;\n return imageResultFromResponse(data);\n }\n}\n","/** Model catalog: GET /models */\n\nimport type { Client } from \"../client\";\n\nexport interface ModelInfo {\n id: string;\n name: string;\n provider: string;\n mediaType: string;\n description?: string | null;\n category?: string | null;\n tags: string[];\n coverImageUrl?: string | null;\n author?: string | null;\n url?: string | null;\n baseCostMicro: number;\n normalizedCostMicro: number;\n pricing?: string | null;\n pricingUnit?: string | null;\n runCount: number;\n inputTypes: string[];\n outputType?: string | null;\n capabilities: string[];\n firstSeenAt?: string | null;\n providerCreatedAt?: string | null;\n lastSyncedAt?: string | null;\n compliance?: Record<string, unknown> | null;\n}\n\nexport function modelInfoFromResponse(data: Record<string, unknown>): ModelInfo {\n return {\n id: (data.id as string) ?? \"\",\n name: (data.name as string) ?? \"\",\n provider: (data.provider as string) ?? \"\",\n mediaType: (data.media_type as string) ?? \"image\",\n description: data.description as string | undefined,\n category: data.category as string | undefined,\n tags: (data.tags as string[]) ?? [],\n coverImageUrl: data.cover_image_url as string | undefined,\n author: data.author as string | undefined,\n url: data.url as string | undefined,\n baseCostMicro: (data.base_cost_micro as number) ?? 0,\n normalizedCostMicro: (data.normalized_cost_micro as number) ?? 0,\n pricing: data.pricing as string | undefined,\n pricingUnit: data.pricing_unit as string | undefined,\n runCount: (data.run_count as number) ?? 0,\n inputTypes: (data.input_types as string[]) ?? [],\n outputType: data.output_type as string | undefined,\n capabilities: (data.capabilities as string[]) ?? [],\n firstSeenAt: data.first_seen_at as string | undefined,\n providerCreatedAt: data.provider_created_at as string | undefined,\n lastSyncedAt: data.last_synced_at as string | undefined,\n compliance: (data.compliance as Record<string, unknown>) ?? undefined,\n };\n}\n\nexport interface FeaturedSection {\n title: string;\n key: string;\n models: ModelInfo[];\n}\n\nexport function featuredSectionFromResponse(data: Record<string, unknown>): FeaturedSection {\n const models = (data.models as Record<string, unknown>[]) ?? [];\n return {\n title: (data.title as string) ?? \"\",\n key: (data.key as string) ?? \"\",\n models: models.map(modelInfoFromResponse),\n };\n}\n\nexport interface ModelsResponse {\n models: ModelInfo[];\n totalCount: number;\n lastUpdated?: string | null;\n featured?: FeaturedSection[] | null;\n}\n\nexport function modelsResponseFromResponse(data: Record<string, unknown>): ModelsResponse {\n const models = (data.models as Record<string, unknown>[]) ?? [];\n const featuredRaw = data.featured as Record<string, unknown>[] | undefined;\n return {\n models: models.map(modelInfoFromResponse),\n totalCount: (data.total_count as number) ?? 0,\n lastUpdated: data.last_updated as string | undefined,\n featured: featuredRaw ? featuredRaw.map(featuredSectionFromResponse) : undefined,\n };\n}\n\nexport interface ModelsListOptions {\n provider?: string | null;\n mediaType?: string | null;\n capability?: string | null;\n search?: string | null;\n sort?: string | null;\n limit?: number;\n featured?: boolean;\n}\n\nexport class Models {\n constructor(private _client: Client) {}\n\n async list(options: ModelsListOptions = {}): Promise<ModelsResponse> {\n const {\n provider,\n mediaType,\n capability,\n search,\n sort,\n limit = 100,\n featured = false,\n } = options;\n const params = new URLSearchParams();\n params.set(\"limit\", String(limit));\n if (provider) params.set(\"provider\", provider);\n if (mediaType) params.set(\"media_type\", mediaType);\n if (capability) params.set(\"capability\", capability);\n if (search) params.set(\"search\", search);\n if (sort) params.set(\"sort\", sort);\n if (featured) params.set(\"featured\", \"true\");\n const data = (await this._client._request(\"GET\", `/models?${params.toString()}`)) as Record<\n string,\n unknown\n >;\n return modelsResponseFromResponse(data);\n }\n\n async get(modelId: string): Promise<ModelInfo> {\n const data = (await this._client._request(\"GET\", `/models/${encodeURIComponent(modelId)}`)) as Record<\n string,\n unknown\n >;\n return modelInfoFromResponse(data);\n }\n\n async search(query: string, limit: number = 20): Promise<ModelsResponse> {\n return this.list({ search: query, limit });\n }\n}\n","/** Deployment management: /deployments endpoints */\n\nimport type { Client } from \"../client\";\n\nexport interface DeploymentCreateOptions {\n modelName?: string;\n hfModelId?: string;\n gpuTier?: string;\n region?: string;\n hfToken?: string;\n runpodKey?: string;\n webhookUrl?: string;\n cacheScope?: \"off\" | \"shared\" | \"private\";\n provider?: string;\n task?: string;\n userS3Url?: string;\n userAwsAccessKeyId?: string;\n userAwsSecretAccessKey?: string;\n userAwsEndpointUrl?: string;\n}\n\nexport interface DeploymentInfo {\n deploymentId: string;\n modelId?: string | null;\n status: string;\n endpointUrl?: string | null;\n provider?: string | null;\n createdAt?: string | null;\n gpuAllocated?: string | null;\n modelVramGb?: number | null;\n readyAt?: string | null;\n error?: string | null;\n}\n\nexport interface DeploymentListResponse {\n deployments: DeploymentInfo[];\n}\n\nexport interface DeploymentGpuInfo {\n id: string;\n displayName: string;\n memoryGb: number;\n secureCloud: boolean;\n communityCloud: boolean;\n bidPricePerHr?: number | null;\n pricePerHr?: number | null;\n}\n\nexport interface DeploymentGpuListResponse {\n gpus: DeploymentGpuInfo[];\n}\n\nexport interface DeploymentLogEntry {\n timestamp: string;\n level: string;\n message: string;\n}\n\nexport interface DeploymentLogsResponse {\n deploymentId: string;\n logs: DeploymentLogEntry[];\n}\n\nexport interface DeploymentCostResponse {\n deploymentId: string;\n status: string;\n gpuAllocated?: string | null;\n hoursRunning?: number | null;\n pricePerHourUsd?: number | null;\n estimatedCostUsd?: number | null;\n note?: string | null;\n}\n\nexport interface DeploymentRunRequest {\n input: Record<string, unknown>;\n}\n\nexport interface StreamStatusEvent {\n deploymentId: string;\n status?: string;\n endpointUrl?: string;\n estimatedRemainingSeconds?: number;\n error?: string;\n}\n\nexport function deploymentInfoFromResponse(data: Record<string, unknown>): DeploymentInfo {\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n modelId: (data.model_id as string) ?? (data.modelId as string),\n status: (data.status as string) ?? \"unknown\",\n endpointUrl: (data.endpoint_url as string) ?? (data.endpointUrl as string),\n provider: (data.provider as string) ?? \"runpod\",\n createdAt: (data.created_at as string) ?? (data.createdAt as string),\n gpuAllocated: (data.gpu_allocated as string) ?? (data.gpuAllocated as string),\n modelVramGb: (data.model_vram_gb as number) ?? (data.modelVramGb as number),\n readyAt: (data.ready_at as string) ?? (data.readyAt as string),\n error: (data.error as string) ?? null,\n };\n}\n\nexport function deploymentListResponseFromResponse(data: Record<string, unknown>): DeploymentListResponse {\n const deployments = (data.deployments as Record<string, unknown>[]) ?? [];\n return { deployments: deployments.map(deploymentInfoFromResponse) };\n}\n\nexport function deploymentGpuInfoFromResponse(data: Record<string, unknown>): DeploymentGpuInfo {\n return {\n id: (data.id as string) ?? \"\",\n displayName: (data.display_name as string) ?? (data.displayName as string) ?? \"\",\n memoryGb: (data.memory_gb as number) ?? (data.memoryGb as number) ?? 0,\n secureCloud: Boolean((data.secure_cloud as boolean) ?? (data.secureCloud as boolean)),\n communityCloud: Boolean((data.community_cloud as boolean) ?? (data.communityCloud as boolean)),\n bidPricePerHr: (data.bid_price_per_hr as number) ?? (data.bidPricePerHr as number),\n pricePerHr: (data.price_per_hr as number) ?? (data.pricePerHr as number),\n };\n}\n\nexport function deploymentGpuListResponseFromResponse(\n data: Record<string, unknown>\n): DeploymentGpuListResponse {\n const gpus = (data.gpus as Record<string, unknown>[]) ?? [];\n return { gpus: gpus.map(deploymentGpuInfoFromResponse) };\n}\n\nexport function deploymentLogsResponseFromResponse(data: Record<string, unknown>): DeploymentLogsResponse {\n const rawLogs = (data.logs as Record<string, unknown>[]) ?? [];\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n logs: rawLogs.map((entry) => ({\n timestamp: (entry.timestamp as string) ?? \"\",\n level: (entry.level as string) ?? \"INFO\",\n message: (entry.message as string) ?? \"\",\n })),\n };\n}\n\nexport function deploymentCostResponseFromResponse(data: Record<string, unknown>): DeploymentCostResponse {\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n status: (data.status as string) ?? \"unknown\",\n gpuAllocated: (data.gpu_allocated as string) ?? (data.gpuAllocated as string),\n hoursRunning: (data.hours_running as number) ?? (data.hoursRunning as number),\n pricePerHourUsd: (data.price_per_hour_usd as number) ?? (data.pricePerHourUsd as number),\n estimatedCostUsd: (data.estimated_cost_usd as number) ?? (data.estimatedCostUsd as number),\n note: (data.note as string) ?? null,\n };\n}\n\nexport class Deployments {\n constructor(private _client: Client) {}\n\n async create(options: DeploymentCreateOptions): Promise<DeploymentInfo> {\n const data = (await this._client._request(\"POST\", \"/deployments\", {\n body: JSON.stringify({\n model_name: options.modelName,\n hf_model_id: options.hfModelId,\n gpu_tier: options.gpuTier,\n region: options.region,\n hf_token: options.hfToken,\n runpod_key: options.runpodKey,\n webhook_url: options.webhookUrl,\n cache_scope: options.cacheScope,\n provider: options.provider,\n task: options.task,\n user_s3_url: options.userS3Url,\n user_aws_access_key_id: options.userAwsAccessKeyId,\n user_aws_secret_access_key: options.userAwsSecretAccessKey,\n user_aws_endpoint_url: options.userAwsEndpointUrl,\n }),\n })) as Record<string, unknown>;\n return deploymentInfoFromResponse(data);\n }\n\n async list(): Promise<DeploymentListResponse> {\n const data = (await this._client._request(\"GET\", \"/deployments\")) as Record<string, unknown>;\n return deploymentListResponseFromResponse(data);\n }\n\n async get(deploymentId: string): Promise<DeploymentInfo> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}`\n )) as Record<string, unknown>;\n return deploymentInfoFromResponse(data);\n }\n\n async delete(deploymentId: string): Promise<void> {\n await this._client._request(\"DELETE\", `/deployments/${encodeURIComponent(deploymentId)}`);\n }\n\n async run(deploymentId: string, input: Record<string, unknown>): Promise<Record<string, unknown>> {\n const data = (await this._client._request(\"POST\", `/deployments/${encodeURIComponent(deploymentId)}/run`, {\n body: JSON.stringify({ input } satisfies DeploymentRunRequest),\n })) as Record<string, unknown>;\n return data;\n }\n\n async getLogs(deploymentId: string): Promise<DeploymentLogsResponse> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}/logs`\n )) as Record<string, unknown>;\n return deploymentLogsResponseFromResponse(data);\n }\n\n async getCost(deploymentId: string): Promise<DeploymentCostResponse> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}/cost`\n )) as Record<string, unknown>;\n return deploymentCostResponseFromResponse(data);\n }\n\n async listGpus(): Promise<DeploymentGpuListResponse> {\n const data = (await this._client._request(\"GET\", \"/deployments/gpus\")) as Record<string, unknown>;\n return deploymentGpuListResponseFromResponse(data);\n }\n\n /**\n * Streams deployment status events (SSE).\n * Returns an abort function to stop streaming.\n */\n streamStatus(\n deploymentId: string,\n onEvent: (event: StreamStatusEvent) => void,\n onError?: (error: Error) => void\n ): () => void {\n const controller = new AbortController();\n const base = this._client.baseUrl.replace(/\\/$/, \"\");\n const url = `${base}/deployments/${encodeURIComponent(deploymentId)}/stream`;\n const headers: Record<string, string> = {};\n if (this._client.apiKey) headers.Authorization = `Bearer ${this._client.apiKey}`;\n\n void (async () => {\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n signal: controller.signal,\n });\n if (!response.ok || !response.body) {\n throw new Error(`SSE stream failed with status ${response.status}`);\n }\n\n const decoder = new TextDecoder();\n const reader = response.body.getReader();\n let buffer = \"\";\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n const events = buffer.split(\"\\n\\n\");\n buffer = events.pop() ?? \"\";\n for (const rawEvent of events) {\n const dataLine = rawEvent\n .split(\"\\n\")\n .find((line) => line.startsWith(\"data:\"));\n if (!dataLine) continue;\n const payload = dataLine.slice(5).trim();\n if (!payload) continue;\n try {\n const parsed = JSON.parse(payload) as Record<string, unknown>;\n onEvent({\n deploymentId:\n (parsed.deployment_id as string) ??\n (parsed.deploymentId as string) ??\n deploymentId,\n status: parsed.status as string | undefined,\n endpointUrl:\n (parsed.endpoint_url as string | undefined) ??\n (parsed.endpointUrl as string | undefined),\n estimatedRemainingSeconds: parsed.estimated_remaining_seconds as number | undefined,\n error: parsed.error as string | undefined,\n });\n } catch {\n // Ignore malformed chunk.\n }\n }\n }\n } catch (err) {\n if (!controller.signal.aborted) {\n const error = err instanceof Error ? err : new Error(String(err));\n onError?.(error);\n }\n }\n })();\n\n return () => controller.abort();\n }\n}\n","/** Provider key management and balance resources */\n\nimport type { Client } from \"../client\";\n\nexport interface ProviderKeyInfo {\n provider: string;\n validated: boolean;\n validatedAt?: string | null;\n maskedKey?: string | null;\n}\n\nexport function providerKeyInfoFromResponse(data: Record<string, unknown>): ProviderKeyInfo {\n return {\n provider: (data.provider as string) ?? \"\",\n validated: Boolean(data.validated),\n validatedAt: data.validated_at as string | undefined,\n maskedKey: data.masked_key as string | undefined,\n };\n}\n\nexport interface ProviderKeysResponse {\n keys: ProviderKeyInfo[];\n}\n\nexport function providerKeysResponseFromResponse(data: Record<string, unknown>): ProviderKeysResponse {\n const keys = (data.keys as Record<string, unknown>[]) ?? [];\n return { keys: keys.map(providerKeyInfoFromResponse) };\n}\n\nexport interface ProviderValidationResult {\n valid: boolean;\n message: string;\n}\n\nexport function providerValidationResultFromResponse(\n data: Record<string, unknown>\n): ProviderValidationResult {\n return {\n valid: Boolean(data.valid),\n message: String(data.message ?? \"\"),\n };\n}\n\nexport interface ProviderBalanceItem {\n provider: string;\n configured: boolean;\n available: boolean;\n limit?: number | null;\n remaining?: number | null;\n currency?: string | null;\n message?: string | null;\n}\n\nexport function providerBalanceItemFromResponse(data: Record<string, unknown>): ProviderBalanceItem {\n return {\n provider: (data.provider as string) ?? \"\",\n configured: Boolean(data.configured),\n available: Boolean(data.available),\n limit: data.limit as number | undefined,\n remaining: data.remaining as number | undefined,\n currency: data.currency as string | undefined,\n message: data.message as string | undefined,\n };\n}\n\nexport interface ProviderBalancesResponse {\n balances: ProviderBalanceItem[];\n}\n\nexport function providerBalancesResponseFromResponse(\n data: Record<string, unknown>\n): ProviderBalancesResponse {\n const balances = (data.balances as Record<string, unknown>[]) ?? [];\n return { balances: balances.map(providerBalanceItemFromResponse) };\n}\n\nexport class Providers {\n constructor(private _client: Client) {}\n\n async listKeys(): Promise<ProviderKeysResponse> {\n const data = (await this._client._request(\"GET\", \"/providers/keys\")) as Record<string, unknown>;\n return providerKeysResponseFromResponse(data);\n }\n\n async setKey(provider: string, apiKey: string): Promise<ProviderKeyInfo> {\n const data = (await this._client._request(\"PUT\", \"/providers/keys\", {\n body: JSON.stringify({ provider, api_key: apiKey }),\n })) as Record<string, unknown>;\n return providerKeyInfoFromResponse(data);\n }\n\n async deleteKey(provider: string): Promise<Record<string, unknown>> {\n return (await this._client._request(\"DELETE\", `/providers/keys/${encodeURIComponent(provider)}`)) as Record<\n string,\n unknown\n >;\n }\n\n async validateKey(provider: string, apiKey: string): Promise<ProviderValidationResult> {\n const data = (await this._client._request(\"POST\", \"/providers/validate\", {\n body: JSON.stringify({ provider, api_key: apiKey }),\n })) as Record<string, unknown>;\n return providerValidationResultFromResponse(data);\n }\n\n async balances(): Promise<ProviderBalancesResponse> {\n const data = (await this._client._request(\"GET\", \"/providers/balances\")) as Record<string, unknown>;\n return providerBalancesResponseFromResponse(data);\n }\n}\n","/**\n * Async generation request status: GET /v1/requests/{request_id}\n * Used after POST /videos/generate or /images/generate with Prefer: respond-async (202).\n */\n\nimport type { Client } from \"../client\";\n\nexport interface RequestStatusResult {\n requestId: string;\n status: \"pending\" | \"processing\" | \"completed\" | \"failed\";\n mediaType: string;\n provider: string;\n model: string;\n outputUrl: string | null;\n errorMessage: string | null;\n createdAt: string | null;\n completedAt: string | null;\n}\n\nexport function requestStatusFromResponse(data: Record<string, unknown>): RequestStatusResult {\n return {\n requestId: (data.request_id as string) ?? (data.requestId as string),\n status: (data.status as RequestStatusResult[\"status\"]) ?? \"pending\",\n mediaType: (data.media_type as string) ?? \"video\",\n provider: (data.provider as string) ?? \"\",\n model: (data.model as string) ?? \"\",\n outputUrl: (data.output_url as string) ?? null,\n errorMessage: (data.error_message as string) ?? null,\n createdAt: (data.created_at as string) ?? null,\n completedAt: (data.completed_at as string) ?? null,\n };\n}\n\nexport class Requests {\n constructor(private _client: Client) {}\n\n /** Get status of an async generation request (video/image). */\n async get(requestId: string): Promise<RequestStatusResult> {\n const data = (await this._client._request(\"GET\", `/requests/${encodeURIComponent(requestId)}`)) as Record<string, unknown>;\n return requestStatusFromResponse(data);\n }\n}\n","/** Usage and billing: GET /usage, /usage/logs, /dashboard */\n\nimport type { Client } from \"../client\";\n\n/** Dashboard response shape (GET /dashboard). */\nexport interface DashboardResponse {\n total_generations: number;\n total_cost_usd: number;\n avg_latency_ms: number;\n cache_hit_rate: number;\n cached_requests: number;\n success_rate: number;\n cost_per_day: Array<{ date: string; cost_usd: number; requests: number }>;\n top_models_used: Array<{ model: string; count: number; total_cost_usd: number }>;\n period_days: number;\n}\nimport { parseDateTime } from \"../utils\";\n\nexport interface UsageSummary {\n totalRequests: number;\n successfulRequests: number;\n failedRequests: number;\n cachedRequests: number;\n totalProviderCost: number;\n totalBilledCost: number;\n totalSavings: number;\n byProvider: Record<string, number>;\n byModel: Record<string, number>;\n period: string;\n periodStart: Date | null;\n periodEnd: Date | null;\n cacheHitRate: number;\n /** Average latency in seconds (from API avg_latency) */\n avgLatency?: number;\n /** Raw provider breakdown: provider -> { requests, cost, ... } */\n providerBreakdown?: Record<string, { requests: number; cost: number; providerChargeCost?: number; providerEffectiveCost?: number; savingsCost?: number }>;\n /** Daily/history records when returned by API */\n history?: Record<string, unknown>[];\n}\n\nfunction byProviderFromBreakdown(providerBreakdown: Record<string, unknown> | undefined): Record<string, number> {\n if (!providerBreakdown || typeof providerBreakdown !== \"object\") return {};\n const out: Record<string, number> = {};\n for (const [provider, stats] of Object.entries(providerBreakdown)) {\n const s = stats as Record<string, unknown>;\n const requests = (s?.requests as number) ?? 0;\n if (provider) out[provider] = requests;\n }\n return out;\n}\n\nexport function usageSummaryFromResponse(data: Record<string, unknown>): UsageSummary {\n const totalRequests = (data.total_requests as number) ?? 0;\n const cachedRequests = (data.cached_requests as number) ?? 0;\n const cacheHitRateFromApi = data.cache_hit_rate as number | undefined;\n const cacheHitRate =\n typeof cacheHitRateFromApi === \"number\"\n ? cacheHitRateFromApi\n : totalRequests === 0\n ? 0\n : (cachedRequests / totalRequests) * 100;\n const providerBreakdown = data.provider_breakdown as Record<string, unknown> | undefined;\n const history = data.history as Record<string, unknown>[] | undefined;\n return {\n totalRequests,\n successfulRequests: (data.successful_requests as number) ?? 0,\n failedRequests: (data.failed_requests as number) ?? 0,\n cachedRequests,\n totalProviderCost:\n (data.total_provider_effective_cost as number) ?? (data.total_provider_cost as number) ?? 0,\n totalBilledCost: (data.total_billed_cost as number) ?? (data.total_cost_usd as number) ?? 0,\n totalSavings: (data.total_savings as number) ?? 0,\n byProvider:\n (data.by_provider as Record<string, number>) ?? byProviderFromBreakdown(providerBreakdown),\n byModel: (data.by_model as Record<string, number>) ?? {},\n period: (data.period as string) ?? \"month\",\n periodStart: parseDateTime(data.period_start as string | undefined),\n periodEnd: parseDateTime(data.period_end as string | undefined),\n cacheHitRate,\n avgLatency: data.avg_latency as number | undefined,\n providerBreakdown: providerBreakdown as UsageSummary[\"providerBreakdown\"],\n history: Array.isArray(history) ? history : undefined,\n };\n}\n\nexport class Usage {\n constructor(private _client: Client) {}\n\n async get(period: string = \"month\"): Promise<UsageSummary> {\n const data = (await this._client._request(\"GET\", `/usage?period=${encodeURIComponent(period)}`)) as Record<\n string,\n unknown\n >;\n return usageSummaryFromResponse(data);\n }\n\n async logs(options: { limit?: number; offset?: number } = {}): Promise<Record<string, unknown>[]> {\n const { limit = 50, offset = 0 } = options;\n const params = new URLSearchParams();\n params.set(\"limit\", String(limit));\n params.set(\"offset\", String(offset));\n const data = (await this._client._request(\"GET\", `/usage/logs?${params.toString()}`)) as\n | Record<string, unknown>[]\n | Record<string, unknown>;\n if (Array.isArray(data)) return data;\n return (data.logs as Record<string, unknown>[]) ?? [];\n }\n\n async dashboard(period: string = \"month\"): Promise<Record<string, unknown>> {\n return (await this._client._request(\n \"GET\",\n `/dashboard?period=${encodeURIComponent(period)}`\n )) as Record<string, unknown>;\n }\n\n /**\n * Track a download event for a request (POST /usage/downloads).\n * Increments download_count and adds timestamp to downloaded_at.\n */\n async trackDownload(\n requestId: string,\n outputUrl: string,\n options?: { mediaType?: string }\n ): Promise<{ success: boolean; request_id: string; download_count: number }> {\n const body: Record<string, unknown> = { request_id: requestId, output_url: outputUrl };\n if (options?.mediaType) body.media_type = options.mediaType;\n const data = (await this._client._request(\"POST\", \"/usage/downloads\", {\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n return {\n success: Boolean(data.success),\n request_id: (data.request_id as string) ?? requestId,\n download_count: (data.download_count as number) ?? 0,\n };\n }\n}\n","/**\n * Video generation: POST /videos/generate\n *\n * Mirrors the Python SDK example 04_videos_all_providers: managed mode and\n * BYOK (Fal, Replicate, Runway) with provider-specific model IDs.\n *\n * @example Managed (platform keys)\n * ```ts\n * const r = await client.videos.generate(\"fal-ai/veo3\", prompt, { durationSeconds: 6, skipGcsUpload: true, preferAsync: true });\n * ```\n *\n * @example BYOK – use client options or proxy env (X-Fal-Key, X-Replicate-Key, X-Runway-Key)\n * ```ts\n * // Fal (veo3; alternative: fal-ai/flux-pro)\n * client.videos.generate(\"fal-ai/veo3\", prompt, { durationSeconds: 6, skipGcsUpload: true, preferAsync: true });\n * // Replicate\n * client.videos.generate(\"replicate/lucataco/cogvideox-5b\", prompt, { durationSeconds: 5, skipGcsUpload: true, preferAsync: true });\n * // Runway\n * client.videos.generate(\"runway/gen4_turbo\", prompt, { durationSeconds: 5, skipGcsUpload: true, preferAsync: true });\n * ```\n */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\n/**\n * Convert a File or Blob to a data URL (data:image/...;base64,...).\n * Uses FileReader in browser, Blob.arrayBuffer() + Buffer in Node 18+.\n */\nfunction blobToDataUrl(blob: File | Blob): Promise<string> {\n if (typeof FileReader !== \"undefined\") {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") resolve(reader.result);\n else reject(new Error(\"FileReader did not return a string\"));\n };\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(blob);\n });\n }\n // Node 18+: Blob has arrayBuffer(); use global Buffer if available for large blobs\n return (async () => {\n const ab = await blob.arrayBuffer();\n const mime = blob.type || \"image/jpeg\";\n const NodeBuffer =\n typeof globalThis !== \"undefined\" &&\n (globalThis as unknown as { Buffer?: { from(a: ArrayBuffer): { toString(e: string): string } } }).Buffer;\n const base64 = NodeBuffer\n ? NodeBuffer.from(ab).toString(\"base64\")\n : btoa(String.fromCharCode(...new Uint8Array(ab)));\n return `data:${mime};base64,${base64}`;\n })();\n}\n\n/** Recommended video model IDs per provider (align with working 06_videos_all_providers; Fal uses veo3). */\nexport const VIDEO_MODEL_PRESETS = {\n fal: \"fal-ai/veo3\",\n replicate: \"replicate/lucataco/cogvideox-5b\",\n runway: \"runway/gen4_turbo\",\n} as const;\n\nexport interface VideoResult {\n id: string;\n /** Request status: \"success\" | \"cached\" | \"failed\" */\n status?: string;\n videoUrl: string | null;\n model: string;\n provider: string;\n cost: number;\n /** True when response was served from cache (exact or semantic match). */\n cacheHit: boolean;\n latencyMs: number | null;\n savedAmount?: number;\n marginPercent?: number;\n /** When cache hit: \"exact\" (hash match) or \"semantic\" (similarity match). */\n cacheSource?: \"exact\" | \"semantic\" | null;\n createdAt: Date | null;\n}\n\nexport function videoResultFromResponse(data: Record<string, unknown>): VideoResult {\n const cacheSource = data.cache_source as string | undefined;\n return {\n id: data.id as string,\n status: data.status as string | undefined,\n videoUrl: (data.video_url as string) ?? null,\n model: data.model as string,\n provider: data.provider as string,\n cost: (data.cost as number) ?? 0,\n cacheHit: (data.cache_hit as boolean) ?? false,\n latencyMs: (data.latency_ms as number) ?? null,\n savedAmount: data.saved_amount as number | undefined,\n marginPercent: data.margin_percent as number | undefined,\n cacheSource:\n cacheSource === \"exact\" || cacheSource === \"semantic\" ? cacheSource : undefined,\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\n/** Result when using preferAsync: true — API returns 202, poll client.requests.get(requestId). */\nexport interface AsyncVideoAccepted {\n requestId: string;\n status: \"accepted\";\n}\n\nexport interface VideosGenerateOptions {\n /** Input image URL for image-to-video. */\n imageUrl?: string | null;\n /**\n * Input image as File or Blob (e.g. from file input). Converted to data URL and sent as image_url.\n * Takes precedence over imageUrl if both are set.\n */\n imageFile?: File | Blob;\n /** Duration in seconds (default 5). */\n durationSeconds?: number;\n fps?: number;\n /** URL to call when generation is complete (async callback). */\n webhookUrl?: string | null;\n /** ID to include in the callback payload. */\n callbackId?: string | null;\n /** Skip uploading result to GCS; return provider URL directly. Faster, use when behind short timeouts. */\n skipGcsUpload?: boolean;\n /**\n * Use async mode: API returns 202 immediately, poll client.requests.get(requestId) for status.\n * Avoids 502 when video takes longer than proxy/Cloudflare timeout.\n */\n preferAsync?: boolean;\n /** Extra provider-specific params (merged into request body). */\n params?: Record<string, unknown>;\n}\n\nexport class Videos {\n constructor(private _client: Client) {}\n\n /**\n * Generate a video from a prompt (and optional image for img2vid).\n * Supports managed mode and BYOK (set falKey/replicateKey/runwayKey on client or via proxy env).\n * Use preferAsync: true to avoid 502 when video takes longer than proxy/Cloudflare timeout.\n */\n async generate(\n model: string,\n prompt: string,\n options: VideosGenerateOptions = {}\n ): Promise<VideoResult | AsyncVideoAccepted> {\n const {\n imageUrl,\n imageFile,\n durationSeconds = 5,\n fps,\n webhookUrl,\n callbackId,\n skipGcsUpload,\n preferAsync,\n params,\n } = options;\n\n let resolvedImageUrl: string | null = null;\n if (imageFile) {\n resolvedImageUrl = await blobToDataUrl(imageFile);\n } else if (imageUrl) {\n resolvedImageUrl = imageUrl;\n }\n\n const payload: Record<string, unknown> = {\n model,\n prompt,\n duration_seconds: durationSeconds,\n };\n if (resolvedImageUrl) payload.image_url = resolvedImageUrl;\n if (fps != null) payload.fps = fps;\n if (webhookUrl) payload.webhook_url = webhookUrl;\n if (callbackId) payload.callback_id = callbackId;\n if (skipGcsUpload === true) payload.skip_gcs_upload = true;\n if (preferAsync === true) payload.prefer_async = true;\n if (params && Object.keys(params).length > 0) Object.assign(payload, params);\n\n const headers: Record<string, string> = {};\n if (preferAsync === true) headers[\"Prefer\"] = \"respond-async\";\n\n const pathWithQuery = preferAsync === true ? \"/videos/generate?async=true\" : \"/videos/generate\";\n const data = (await this._client._request(\"POST\", pathWithQuery, {\n body: JSON.stringify(payload),\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n })) as Record<string, unknown>;\n\n // 202 Accepted: API returns { request_id }; poll client.requests.get(requestId)\n if (\"request_id\" in data && typeof data.request_id === \"string\" && !(\"video_url\" in data)) {\n return { requestId: data.request_id, status: \"accepted\" };\n }\n return videoResultFromResponse(data);\n }\n}\n","/**\n * Visgate API client (all methods return Promises in JS).\n */\n\nimport {\n AuthenticationError,\n ProviderError,\n RateLimitError,\n ValidationError,\n VisgateConnectionError,\n VisgateError,\n VisgateTimeoutError,\n} from \"./exceptions\";\nimport { Billing } from \"./resources/billing\";\nimport { Generate, type GenerateResult } from \"./resources/generate\";\nimport { Images } from \"./resources/images\";\nimport { Models } from \"./resources/models\";\nimport { Deployments } from \"./resources/deployments\";\nimport { Providers } from \"./resources/providers\";\nimport { Requests } from \"./resources/requests\";\nimport { Usage } from \"./resources/usage\";\nimport { Videos } from \"./resources/videos\";\nimport { resolveApiKey } from \"./utils\";\n\nconst DEFAULT_BASE_URL = \"https://visgateai.com/api/v1\";\nconst DEFAULT_TIMEOUT = 120_000; // ms\nconst DEFAULT_MAX_RETRIES = 2;\n\nconst RETRYABLE_STATUS_CODES = new Set([429, 500, 502, 503, 504]);\n\nconst SDK_VERSION = \"0.3.3\";\n\nfunction getVersion(): string {\n try {\n // @ts-expect-error - optional for bundlers\n if (typeof __VERSION__ !== \"undefined\") return __VERSION__;\n } catch {\n // ignore\n }\n return SDK_VERSION;\n}\n\nexport interface ClientOptions {\n apiKey?: string | null;\n /** When set, requests go to this URL and no API key is sent (key is added by the proxy). */\n proxyUrl?: string;\n /**\n * When set, the client calls this before each request and sends the result as Bearer token.\n * Use with proxyUrl for session-based auth (e.g. Firebase getIdToken); the proxy forwards the token to the API.\n */\n getToken?: () => string | Promise<string>;\n baseUrl?: string;\n timeout?: number;\n maxRetries?: number;\n falKey?: string | null;\n replicateKey?: string | null;\n runwayKey?: string | null;\n runpodKey?: string | null;\n}\n\nfunction buildHeaders(\n apiKey: string | null,\n options: {\n falKey?: string | null;\n replicateKey?: string | null;\n runwayKey?: string | null;\n runpodKey?: string | null;\n }\n): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"User-Agent\": `visgate-client/${getVersion()}`,\n };\n if (apiKey) headers.Authorization = `Bearer ${apiKey}`;\n if (options.falKey) headers[\"X-Fal-Key\"] = options.falKey;\n if (options.replicateKey) headers[\"X-Replicate-Key\"] = options.replicateKey;\n if (options.runwayKey) headers[\"X-Runway-Key\"] = options.runwayKey;\n if (options.runpodKey) headers[\"X-Runpod-Key\"] = options.runpodKey;\n return headers;\n}\n\nfunction backoff(attempt: number): number {\n return Math.min(0.5 * Math.pow(2, attempt), 8) * 1000; // ms\n}\n\nfunction retryWaitFromResponse(response: Response, attempt: number): number {\n const retryAfter = response.headers.get(\"Retry-After\");\n if (retryAfter) {\n const sec = parseInt(retryAfter, 10);\n if (!isNaN(sec)) return sec * 1000;\n }\n return backoff(attempt);\n}\n\nasync function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** @internal Exported for tests. */\nexport async function handleResponse(response: Response): Promise<unknown> {\n const status = response.status;\n\n if (status < 400) {\n const text = await response.text();\n if (!text) return {};\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return {};\n }\n }\n\n let body: Record<string, unknown> = {};\n const text = await response.text();\n try {\n if (text) body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n // use text as message below\n }\n\n if (status === 401) {\n throw new AuthenticationError(\"Invalid or missing API key\");\n }\n\n if (status === 422) {\n const message = (body.message as string) ?? text ?? \"Validation failed\";\n const field = (body.details as Record<string, unknown>)?.field as string | undefined;\n throw new ValidationError(message, field);\n }\n\n if (status === 429) {\n const retryAfterHeader = response.headers.get(\"Retry-After\");\n const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;\n throw new RateLimitError(\"Rate limit exceeded\", Number.isNaN(retryAfter) ? undefined : retryAfter);\n }\n\n const errorCode = (body.error as string) ?? `HTTP_${status}`;\n const message = (body.message as string) ?? text ?? \"Request failed\";\n\n if (String(errorCode).includes(\"PROVIDER\")) {\n const provider = ((body.details as Record<string, unknown>)?.provider as string) ?? \"unknown\";\n throw new ProviderError(message, provider);\n }\n\n throw new VisgateError(message, errorCode, body.details as Record<string, unknown> ?? {}, status);\n}\n\nexport interface RequestInitWithBody {\n body?: string;\n headers?: Record<string, string>;\n}\n\nexport class Client {\n readonly apiKey: string | null;\n readonly baseUrl: string;\n readonly maxRetries: number;\n readonly timeout: number;\n private readonly headers: Record<string, string>;\n private readonly getToken: (() => string | Promise<string>) | null;\n readonly images: Images;\n readonly models: Models;\n readonly videos: Videos;\n readonly requests: Requests;\n readonly usage: Usage;\n readonly providers: Providers;\n readonly deployments: Deployments;\n readonly billing: Billing;\n private _generate: Generate;\n\n constructor(options: ClientOptions = {}) {\n // When using proxy, still send apiKey if provided (e.g. playground: proxy URL + API key in input)\n this.apiKey = options.proxyUrl\n ? (options.apiKey != null && options.apiKey !== \"\" ? resolveApiKey(options.apiKey) : null)\n : resolveApiKey(options.apiKey);\n this.getToken = options.getToken ?? null;\n this.baseUrl = (options.proxyUrl ?? options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\");\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.headers = buildHeaders(this.apiKey, options.proxyUrl ? {} : {\n falKey: options.falKey,\n replicateKey: options.replicateKey,\n runwayKey: options.runwayKey,\n runpodKey: options.runpodKey,\n });\n\n this.images = new Images(this);\n this.models = new Models(this);\n this.videos = new Videos(this);\n this.requests = new Requests(this);\n this.usage = new Usage(this);\n this.providers = new Providers(this);\n this.deployments = new Deployments(this);\n this.billing = new Billing(this);\n this._generate = new Generate(this);\n }\n\n /**\n * Generate an image with a single call.\n */\n generate(\n prompt: string,\n options?: { model?: string; params?: Record<string, unknown> }\n ): Promise<GenerateResult> {\n return this._generate.__call__(prompt, options?.model, options?.params);\n }\n\n /**\n * Check API health status.\n */\n health(): Promise<Record<string, unknown>> {\n return this._request(\"GET\", \"/health\") as Promise<Record<string, unknown>>;\n }\n\n async _request(method: string, path: string, init: RequestInitWithBody = {}): Promise<unknown> {\n const url = `${this.baseUrl}${path}`;\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n let headers: Record<string, string> = { ...this.headers, ...(init.headers as Record<string, string>) };\n if (this.getToken) {\n const token = await Promise.resolve(this.getToken());\n headers = { ...headers, Authorization: `Bearer ${token}` };\n }\n const fetchInit: RequestInit = {\n method,\n ...init,\n headers,\n signal: controller.signal,\n };\n if (method !== \"GET\" && init.body !== undefined) {\n fetchInit.body = init.body;\n }\n const response = await fetch(url, fetchInit);\n clearTimeout(timeoutId);\n\n if (RETRYABLE_STATUS_CODES.has(response.status) && attempt < this.maxRetries) {\n const waitMs = retryWaitFromResponse(response, attempt);\n await sleep(waitMs);\n continue;\n }\n\n return await handleResponse(response);\n } catch (err) {\n clearTimeout(timeoutId);\n lastError = err instanceof Error ? err : new Error(String(err));\n\n if (err instanceof AuthenticationError && this.apiKey === null && !this.getToken) {\n throw new AuthenticationError(\"Proxy returned 401. Check VISGATE_API_KEY on the server (proxy).\");\n }\n if (err instanceof AuthenticationError && this.getToken) {\n throw new AuthenticationError(\"Proxy returned 401. Check getToken returns a valid session token.\");\n }\n if (err instanceof VisgateError && !(err instanceof RateLimitError)) throw err;\n if (attempt >= this.maxRetries) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new VisgateTimeoutError(`Request timed out after ${this.maxRetries + 1} attempt(s)`);\n }\n if (err instanceof TypeError && err.message.includes(\"fetch\")) {\n throw new VisgateConnectionError(`Connection failed: ${err.message}`);\n }\n throw err;\n }\n const waitMs = backoff(attempt);\n await sleep(waitMs);\n }\n }\n\n throw new VisgateError(\n `Request failed after ${this.maxRetries + 1} attempts`,\n \"VISGATE_ERROR\",\n {},\n undefined\n );\n }\n\n /** No-op for API compatibility (JS has no connection pool to close). */\n close(): void {}\n\n toString(): string {\n return `Client(baseUrl=${JSON.stringify(this.baseUrl)})`;\n }\n}\n\n/**\n * Async client — same as Client; all methods return Promises.\n * Provided for API parity with Python AsyncClient.\n */\nexport class AsyncClient extends Client {\n constructor(options: ClientOptions = {}) {\n super(options);\n }\n\n override toString(): string {\n return `AsyncClient(baseUrl=${JSON.stringify(this.baseUrl)})`;\n }\n}\n","/**\n * Visgate JavaScript/TypeScript SDK — unified client for the Visgate vision AI gateway.\n */\n\nexport { Client, AsyncClient, type ClientOptions } from \"./client\";\nexport {\n VisgateError,\n AuthenticationError,\n ValidationError,\n RateLimitError,\n ProviderError,\n VisgateTimeoutError,\n VisgateConnectionError,\n type VisgateErrorDetails,\n} from \"./exceptions\";\nexport {\n generateResultFromResponse,\n Generate,\n type GenerateResult,\n} from \"./resources/generate\";\nexport {\n imageResultFromResponse,\n Images,\n type ImageResult,\n type ImagesGenerateOptions,\n} from \"./resources/images\";\nexport {\n videoResultFromResponse,\n Videos,\n VIDEO_MODEL_PRESETS,\n type VideoResult,\n type VideosGenerateOptions,\n type AsyncVideoAccepted,\n} from \"./resources/videos\";\nexport {\n modelInfoFromResponse,\n featuredSectionFromResponse,\n modelsResponseFromResponse,\n Models,\n type ModelInfo,\n type FeaturedSection,\n type ModelsResponse,\n type ModelsListOptions,\n} from \"./resources/models\";\nexport {\n requestStatusFromResponse,\n Requests,\n type RequestStatusResult,\n} from \"./resources/requests\";\nexport {\n usageSummaryFromResponse,\n Usage,\n type UsageSummary,\n type DashboardResponse,\n} from \"./resources/usage\";\nexport {\n providerKeyInfoFromResponse,\n providerKeysResponseFromResponse,\n providerValidationResultFromResponse,\n providerBalanceItemFromResponse,\n providerBalancesResponseFromResponse,\n Providers,\n type ProviderKeyInfo,\n type ProviderKeysResponse,\n type ProviderValidationResult,\n type ProviderBalanceItem,\n type ProviderBalancesResponse,\n} from \"./resources/providers\";\nexport {\n billingInfoFromResponse,\n modelPricingFromResponse,\n pricingResponseFromResponse,\n Billing,\n type BillingInfo,\n type ModelPricing,\n type PricingResponse,\n type CheckoutOptions,\n} from \"./resources/billing\";\nexport {\n deploymentInfoFromResponse,\n deploymentListResponseFromResponse,\n deploymentGpuInfoFromResponse,\n deploymentGpuListResponseFromResponse,\n deploymentLogsResponseFromResponse,\n deploymentCostResponseFromResponse,\n Deployments,\n type DeploymentCreateOptions,\n type DeploymentInfo,\n type DeploymentListResponse,\n type DeploymentGpuInfo,\n type DeploymentGpuListResponse,\n type DeploymentLogEntry,\n type DeploymentLogsResponse,\n type DeploymentCostResponse,\n type DeploymentRunRequest,\n type StreamStatusEvent,\n} from \"./resources/deployments\";\n\nexport const VERSION = \"0.3.3\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/exceptions.ts","../src/resources/billing.ts","../src/utils.ts","../src/resources/generate.ts","../src/resources/images.ts","../src/resources/models.ts","../src/resources/deployments.ts","../src/resources/hf-models.ts","../src/resources/providers.ts","../src/resources/requests.ts","../src/resources/usage.ts","../src/resources/videos.ts","../src/client.ts","../src/index.ts"],"names":["text","message"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Visgate SDK exceptions. All extend VisgateError. */\n\nexport interface VisgateErrorDetails {\n [key: string]: unknown;\n}\n\n/**\n * Base exception for all Visgate SDK errors.\n */\nexport class VisgateError extends Error {\n readonly message: string;\n readonly errorCode: string;\n readonly details: VisgateErrorDetails;\n readonly statusCode?: number;\n\n constructor(\n message: string,\n errorCode: string = \"VISGATE_ERROR\",\n details: VisgateErrorDetails = {},\n statusCode?: number\n ) {\n super(message);\n this.name = \"VisgateError\";\n this.message = message;\n this.errorCode = errorCode;\n this.details = details;\n this.statusCode = statusCode;\n Object.setPrototypeOf(this, VisgateError.prototype);\n }\n\n override toString(): string {\n return `[${this.errorCode}] ${this.message}`;\n }\n}\n\n/** 401 — invalid or missing API key. */\nexport class AuthenticationError extends VisgateError {\n constructor(message: string = \"Invalid or missing API key\") {\n super(message, \"AUTHENTICATION_ERROR\", {}, 401);\n this.name = \"AuthenticationError\";\n Object.setPrototypeOf(this, AuthenticationError.prototype);\n }\n}\n\n/** 422 — invalid request parameters. */\nexport class ValidationError extends VisgateError {\n readonly field?: string;\n\n constructor(message: string, field?: string) {\n super(message, \"VALIDATION_ERROR\", field ? { field } : {}, 422);\n this.name = \"ValidationError\";\n this.field = field;\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\n/** 429 — too many requests. */\nexport class RateLimitError extends VisgateError {\n readonly retryAfter?: number;\n\n constructor(message: string = \"Rate limit exceeded\", retryAfter?: number) {\n super(message, \"RATE_LIMIT_ERROR\", retryAfter != null ? { retry_after: retryAfter } : {}, 429);\n this.name = \"RateLimitError\";\n this.retryAfter = retryAfter;\n Object.setPrototypeOf(this, RateLimitError.prototype);\n }\n}\n\n/** Upstream provider error (e.g. Fal, Replicate, Runway). */\nexport class ProviderError extends VisgateError {\n readonly provider: string;\n\n constructor(message: string, provider: string = \"unknown\") {\n super(message, \"PROVIDER_ERROR\", { provider });\n this.name = \"ProviderError\";\n this.provider = provider;\n Object.setPrototypeOf(this, ProviderError.prototype);\n }\n}\n\n/** Request timed out before the server responded. */\nexport class VisgateTimeoutError extends VisgateError {\n constructor(message: string = \"Request timed out\") {\n super(message, \"TIMEOUT_ERROR\");\n this.name = \"VisgateTimeoutError\";\n Object.setPrototypeOf(this, VisgateTimeoutError.prototype);\n }\n}\n\n/** Network connection failed. */\nexport class VisgateConnectionError extends VisgateError {\n constructor(message: string = \"Connection failed\") {\n super(message, \"CONNECTION_ERROR\");\n this.name = \"VisgateConnectionError\";\n Object.setPrototypeOf(this, VisgateConnectionError.prototype);\n }\n}\n","/** Billing: GET /billing/stats, /billing/info, /billing/pricing, POST /billing/checkout, /billing/subscription */\n\nimport type { Client } from \"../client\";\n\nexport interface BillingInfo {\n tier: string;\n balanceMicro: number;\n billingStatus: string;\n monthlyBudgetCents?: number | null;\n usageThisMonthCents?: number;\n supportEmail?: string | null;\n companyName?: string | null;\n freeModeEnabled?: boolean;\n}\n\nexport function billingInfoFromResponse(data: Record<string, unknown>): BillingInfo {\n return {\n tier: (data.tier as string) ?? \"free\",\n balanceMicro: (data.balance_micro as number) ?? 0,\n billingStatus: (data.billing_status as string) ?? \"active\",\n monthlyBudgetCents: data.monthly_budget_cents as number | undefined,\n usageThisMonthCents: (data.usage_this_month_cents as number) ?? 0,\n supportEmail: data.support_email as string | undefined,\n companyName: data.company_name as string | undefined,\n freeModeEnabled: data.free_mode_enabled as boolean | undefined,\n };\n}\n\nexport interface ModelPricing {\n id: string;\n providerType: string;\n model: string;\n modelName: string;\n modelType: string;\n modelClass?: string | null;\n costPerUnitMicro: number;\n usageCount: number;\n totalSavingsMicro: number;\n avgSavingsMicro: number;\n}\n\nexport function modelPricingFromResponse(data: Record<string, unknown>): ModelPricing {\n return {\n id: (data.id as string) ?? \"\",\n providerType: (data.provider_type as string) ?? \"\",\n model: (data.model as string) ?? \"\",\n modelName: (data.model_name as string) ?? \"\",\n modelType: (data.model_type as string) ?? \"image\",\n modelClass: data.model_class as string | undefined,\n costPerUnitMicro: (data.cost_per_unit_micro as number) ?? 0,\n usageCount: (data.usage_count as number) ?? 0,\n totalSavingsMicro: (data.total_savings_micro as number) ?? 0,\n avgSavingsMicro: (data.avg_savings_micro as number) ?? 0,\n };\n}\n\nexport interface PricingResponse {\n lastUpdated: string | null;\n pricing: ModelPricing[];\n}\n\nexport function pricingResponseFromResponse(data: Record<string, unknown>): PricingResponse {\n const pricing = (data.pricing as Record<string, unknown>[]) ?? [];\n return {\n lastUpdated: (data.last_updated as string) ?? null,\n pricing: pricing.map(modelPricingFromResponse),\n };\n}\n\nexport interface CheckoutOptions {\n customerEmail?: string | null;\n firebaseUid?: string | null;\n}\n\nexport class Billing {\n constructor(private _client: Client) {}\n\n /** Public billing stats for landing/marketing (GET /billing/stats). May not require auth. */\n async getStats(): Promise<Record<string, unknown>> {\n return (await this._client._request(\"GET\", \"/billing/stats\")) as Record<string, unknown>;\n }\n\n /** Organization billing info (GET /billing/info). */\n async getInfo(): Promise<BillingInfo> {\n const data = (await this._client._request(\"GET\", \"/billing/info\")) as Record<string, unknown>;\n return billingInfoFromResponse(data);\n }\n\n /** Create checkout session (POST /billing/checkout). */\n async checkout(\n amountDollars: number,\n returnUrl: string,\n options?: CheckoutOptions\n ): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = {\n amount_dollars: amountDollars,\n return_url: returnUrl,\n };\n if (options?.customerEmail != null) body.customer_email = options.customerEmail;\n if (options?.firebaseUid != null) body.firebase_uid = options.firebaseUid;\n return (await this._client._request(\"POST\", \"/billing/checkout\", {\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n }\n\n /** Get pricing for all models (GET /billing/pricing). */\n async getPricing(): Promise<PricingResponse> {\n const data = (await this._client._request(\"GET\", \"/billing/pricing\")) as Record<string, unknown>;\n return pricingResponseFromResponse(data);\n }\n\n /** Update organization subscription tier (POST /billing/subscription). */\n async updateSubscription(tier: string): Promise<{ success: boolean; tier: string }> {\n const data = (await this._client._request(\"POST\", \"/billing/subscription\", {\n body: JSON.stringify({ tier }),\n })) as Record<string, unknown>;\n return {\n success: Boolean(data.success),\n tier: (data.tier as string) ?? tier,\n };\n }\n}\n","/** Internal utilities. */\n\nimport { AuthenticationError } from \"./exceptions\";\n\n/**\n * Parse ISO 8601 datetime string (handles Z suffix).\n */\nexport function parseDateTime(value: string | null | undefined): Date | null {\n if (value == null || value === \"\") return null;\n const normalized = value.replace(\"Z\", \"+00:00\");\n const date = new Date(normalized);\n return isNaN(date.getTime()) ? null : date;\n}\n\n/** Detect if we're in a Node-like environment with process.env. */\nfunction hasProcessEnv(): boolean {\n return typeof process !== \"undefined\" && typeof process.env !== \"undefined\";\n}\n\n/**\n * Resolve API key from argument or environment variable.\n * Node: process.env.VISGATE_API_KEY\n * Browser: only from argument (or Vite: import.meta.env.VITE_VISGATE_API_KEY — doc only).\n */\nexport function resolveApiKey(apiKey: string | null | undefined): string {\n const key = apiKey ?? (hasProcessEnv() ? process.env.VISGATE_API_KEY : undefined);\n if (!key || typeof key !== \"string\" || key.trim() === \"\") {\n throw new AuthenticationError(\n \"No API key provided. Pass apiKey or set the VISGATE_API_KEY environment variable.\"\n );\n }\n return key.trim();\n}\n","/** Unified image generation: POST /generate */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\nexport interface GenerateResult {\n id: string;\n status: string;\n imageUrl: string | null;\n images: string[];\n model: string;\n provider: string;\n mode: string;\n cost: number;\n costPerMegapixel: number;\n latencyMs: number;\n resolution: Record<string, number>;\n createdAt: Date | null;\n}\n\nexport function generateResultFromResponse(data: Record<string, unknown>): GenerateResult {\n return {\n id: data.id as string,\n status: (data.status as string) ?? \"success\",\n imageUrl: (data.image_url as string) ?? null,\n images: (data.images as string[]) ?? [],\n model: data.model as string,\n provider: (data.provider as string) ?? \"\",\n mode: (data.mode as string) ?? \"\",\n cost: (data.estimated_cost_usd as number) ?? 0,\n costPerMegapixel: (data.cost_per_megapixel_usd as number) ?? 0,\n latencyMs: (data.latency_ms as number) ?? 0,\n resolution: (data.resolution as Record<string, number>) ?? {},\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\nconst DEFAULT_MODEL = \"fal-ai/flux/schnell\";\n\nexport class Generate {\n constructor(private _client: Client) {}\n\n async __call__(\n prompt: string,\n model: string = DEFAULT_MODEL,\n params?: Record<string, unknown>\n ): Promise<GenerateResult> {\n const payload: Record<string, unknown> = { prompt, model };\n if (params) payload.params = params;\n const data = (await this._client._request(\"POST\", \"/generate\", {\n body: JSON.stringify(payload),\n })) as Record<string, unknown>;\n return generateResultFromResponse(data);\n }\n}\n","/** Image generation: POST /images/generate */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\nexport interface ImageResult {\n id: string;\n /** Request status: \"success\" | \"cached\" | \"failed\" */\n status?: string;\n images: string[];\n model: string;\n provider: string;\n cost: number;\n /** True when response was served from cache (exact or semantic match). */\n cacheHit: boolean;\n latencyMs: number | null;\n savedAmount?: number;\n marginPercent?: number;\n /** When cache hit: \"exact\" (hash match) or \"semantic\" (similarity match). Optional if API returns it. */\n cacheSource?: \"exact\" | \"semantic\" | null;\n createdAt: Date | null;\n}\n\nexport function imageResultFromResponse(data: Record<string, unknown>): ImageResult {\n const cacheSource = data.cache_source as string | undefined;\n return {\n id: data.id as string,\n status: data.status as string | undefined,\n images: (data.images as string[]) ?? [],\n model: data.model as string,\n provider: data.provider as string,\n cost: (data.cost as number) ?? 0,\n cacheHit: (data.cache_hit as boolean) ?? false,\n latencyMs: (data.latency_ms as number) ?? null,\n savedAmount: data.saved_amount as number | undefined,\n marginPercent: data.margin_percent as number | undefined,\n cacheSource:\n cacheSource === \"exact\" || cacheSource === \"semantic\" ? cacheSource : undefined,\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\nexport interface ImagesGenerateOptions {\n negativePrompt?: string | null;\n width?: number;\n height?: number;\n numImages?: number;\n seed?: number | null;\n /** Input image URL for image-to-image */\n imageUrl?: string | null;\n /** Prefer cache (exact or semantic match). Default true. Set false to force fresh generation. */\n preferCache?: boolean;\n /** Max acceptable latency in ms; API may use for routing. */\n maxLatencyMs?: number | null;\n /** URL to call when generation is complete (async callback). */\n webhookUrl?: string | null;\n /** ID to include in the callback payload. */\n callbackId?: string | null;\n params?: Record<string, unknown>;\n}\n\nexport class Images {\n constructor(private _client: Client) {}\n\n async generate(\n model: string,\n prompt: string,\n options: ImagesGenerateOptions = {}\n ): Promise<ImageResult> {\n const {\n negativePrompt,\n width = 1024,\n height = 1024,\n numImages = 1,\n seed,\n imageUrl,\n preferCache,\n maxLatencyMs,\n webhookUrl,\n callbackId,\n params,\n } = options;\n const payload: Record<string, unknown> = {\n model,\n prompt,\n width,\n height,\n num_images: numImages,\n };\n if (negativePrompt) payload.negative_prompt = negativePrompt;\n if (seed != null) payload.seed = seed;\n if (imageUrl) payload.image_url = imageUrl;\n if (preferCache !== undefined) payload.prefer_cache = preferCache;\n if (maxLatencyMs != null) payload.max_latency_ms = maxLatencyMs;\n if (webhookUrl) payload.webhook_url = webhookUrl;\n if (callbackId) payload.callback_id = callbackId;\n if (params) Object.assign(payload, params);\n const data = (await this._client._request(\"POST\", \"/images/generate\", {\n body: JSON.stringify(payload),\n })) as Record<string, unknown>;\n return imageResultFromResponse(data);\n }\n}\n","/** Model catalog: GET /models */\n\nimport type { Client } from \"../client\";\n\nexport interface ModelInfo {\n id: string;\n name: string;\n provider: string;\n mediaType: string;\n description?: string | null;\n category?: string | null;\n tags: string[];\n coverImageUrl?: string | null;\n author?: string | null;\n url?: string | null;\n baseCostMicro: number;\n normalizedCostMicro: number;\n pricing?: string | null;\n pricingUnit?: string | null;\n runCount: number;\n inputTypes: string[];\n outputType?: string | null;\n capabilities: string[];\n firstSeenAt?: string | null;\n providerCreatedAt?: string | null;\n lastSyncedAt?: string | null;\n compliance?: Record<string, unknown> | null;\n}\n\nexport function modelInfoFromResponse(data: Record<string, unknown>): ModelInfo {\n return {\n id: (data.id as string) ?? \"\",\n name: (data.name as string) ?? \"\",\n provider: (data.provider as string) ?? \"\",\n mediaType: (data.media_type as string) ?? \"image\",\n description: data.description as string | undefined,\n category: data.category as string | undefined,\n tags: (data.tags as string[]) ?? [],\n coverImageUrl: data.cover_image_url as string | undefined,\n author: data.author as string | undefined,\n url: data.url as string | undefined,\n baseCostMicro: (data.base_cost_micro as number) ?? 0,\n normalizedCostMicro: (data.normalized_cost_micro as number) ?? 0,\n pricing: data.pricing as string | undefined,\n pricingUnit: data.pricing_unit as string | undefined,\n runCount: (data.run_count as number) ?? 0,\n inputTypes: (data.input_types as string[]) ?? [],\n outputType: data.output_type as string | undefined,\n capabilities: (data.capabilities as string[]) ?? [],\n firstSeenAt: data.first_seen_at as string | undefined,\n providerCreatedAt: data.provider_created_at as string | undefined,\n lastSyncedAt: data.last_synced_at as string | undefined,\n compliance: (data.compliance as Record<string, unknown>) ?? undefined,\n };\n}\n\nexport interface FeaturedSection {\n title: string;\n key: string;\n models: ModelInfo[];\n}\n\nexport function featuredSectionFromResponse(data: Record<string, unknown>): FeaturedSection {\n const models = (data.models as Record<string, unknown>[]) ?? [];\n return {\n title: (data.title as string) ?? \"\",\n key: (data.key as string) ?? \"\",\n models: models.map(modelInfoFromResponse),\n };\n}\n\nexport interface ModelsResponse {\n models: ModelInfo[];\n totalCount: number;\n lastUpdated?: string | null;\n featured?: FeaturedSection[] | null;\n}\n\nexport function modelsResponseFromResponse(data: Record<string, unknown>): ModelsResponse {\n const models = (data.models as Record<string, unknown>[]) ?? [];\n const featuredRaw = data.featured as Record<string, unknown>[] | undefined;\n return {\n models: models.map(modelInfoFromResponse),\n totalCount: (data.total_count as number) ?? 0,\n lastUpdated: data.last_updated as string | undefined,\n featured: featuredRaw ? featuredRaw.map(featuredSectionFromResponse) : undefined,\n };\n}\n\nexport interface ModelsListOptions {\n provider?: string | null;\n mediaType?: string | null;\n capability?: string | null;\n search?: string | null;\n sort?: string | null;\n limit?: number;\n featured?: boolean;\n}\n\nexport class Models {\n constructor(private _client: Client) {}\n\n async list(options: ModelsListOptions = {}): Promise<ModelsResponse> {\n const {\n provider,\n mediaType,\n capability,\n search,\n sort,\n limit = 100,\n featured = false,\n } = options;\n const params = new URLSearchParams();\n params.set(\"limit\", String(limit));\n if (provider) params.set(\"provider\", provider);\n if (mediaType) params.set(\"media_type\", mediaType);\n if (capability) params.set(\"capability\", capability);\n if (search) params.set(\"search\", search);\n if (sort) params.set(\"sort\", sort);\n if (featured) params.set(\"featured\", \"true\");\n const data = (await this._client._request(\"GET\", `/models?${params.toString()}`)) as Record<\n string,\n unknown\n >;\n return modelsResponseFromResponse(data);\n }\n\n async get(modelId: string): Promise<ModelInfo> {\n const data = (await this._client._request(\"GET\", `/models/${encodeURIComponent(modelId)}`)) as Record<\n string,\n unknown\n >;\n return modelInfoFromResponse(data);\n }\n\n async search(query: string, limit: number = 20): Promise<ModelsResponse> {\n return this.list({ search: query, limit });\n }\n}\n","/** Deployment management: /deployments endpoints */\n\nimport type { Client } from \"../client\";\n\nexport interface DeploymentCreateOptions {\n modelName?: string;\n hfModelId?: string;\n gpuTier?: string;\n region?: string;\n hfToken?: string;\n runpodKey?: string;\n webhookUrl?: string;\n cacheScope?: \"off\" | \"shared\" | \"private\";\n provider?: string;\n task?: string;\n userS3Url?: string;\n userAwsAccessKeyId?: string;\n userAwsSecretAccessKey?: string;\n userAwsEndpointUrl?: string;\n}\n\nexport interface DeploymentInfo {\n deploymentId: string;\n modelId?: string | null;\n status: string;\n endpointUrl?: string | null;\n provider?: string | null;\n createdAt?: string | null;\n gpuAllocated?: string | null;\n modelVramGb?: number | null;\n readyAt?: string | null;\n error?: string | null;\n}\n\nexport interface DeploymentListResponse {\n deployments: DeploymentInfo[];\n}\n\nexport interface DeploymentGpuInfo {\n id: string;\n displayName: string;\n memoryGb: number;\n secureCloud: boolean;\n communityCloud: boolean;\n bidPricePerHr?: number | null;\n pricePerHr?: number | null;\n}\n\nexport interface DeploymentGpuListResponse {\n gpus: DeploymentGpuInfo[];\n}\n\nexport interface DeploymentLogEntry {\n timestamp: string;\n level: string;\n message: string;\n}\n\nexport interface DeploymentLogsResponse {\n deploymentId: string;\n logs: DeploymentLogEntry[];\n}\n\nexport interface DeploymentCostResponse {\n deploymentId: string;\n status: string;\n gpuAllocated?: string | null;\n hoursRunning?: number | null;\n pricePerHourUsd?: number | null;\n estimatedCostUsd?: number | null;\n note?: string | null;\n}\n\nexport interface DeploymentRunRequest {\n input: Record<string, unknown>;\n}\n\nexport interface StreamStatusEvent {\n deploymentId: string;\n status?: string;\n endpointUrl?: string;\n estimatedRemainingSeconds?: number;\n error?: string;\n}\n\nexport function deploymentInfoFromResponse(data: Record<string, unknown>): DeploymentInfo {\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n modelId: (data.model_id as string) ?? (data.modelId as string),\n status: (data.status as string) ?? \"unknown\",\n endpointUrl: (data.endpoint_url as string) ?? (data.endpointUrl as string),\n provider: (data.provider as string) ?? \"runpod\",\n createdAt: (data.created_at as string) ?? (data.createdAt as string),\n gpuAllocated: (data.gpu_allocated as string) ?? (data.gpuAllocated as string),\n modelVramGb: (data.model_vram_gb as number) ?? (data.modelVramGb as number),\n readyAt: (data.ready_at as string) ?? (data.readyAt as string),\n error: (data.error as string) ?? null,\n };\n}\n\nexport function deploymentListResponseFromResponse(data: Record<string, unknown>): DeploymentListResponse {\n const deployments = (data.deployments as Record<string, unknown>[]) ?? [];\n return { deployments: deployments.map(deploymentInfoFromResponse) };\n}\n\nexport function deploymentGpuInfoFromResponse(data: Record<string, unknown>): DeploymentGpuInfo {\n return {\n id: (data.id as string) ?? \"\",\n displayName: (data.display_name as string) ?? (data.displayName as string) ?? \"\",\n memoryGb: (data.memory_gb as number) ?? (data.memoryGb as number) ?? 0,\n secureCloud: Boolean((data.secure_cloud as boolean) ?? (data.secureCloud as boolean)),\n communityCloud: Boolean((data.community_cloud as boolean) ?? (data.communityCloud as boolean)),\n bidPricePerHr: (data.bid_price_per_hr as number) ?? (data.bidPricePerHr as number),\n pricePerHr: (data.price_per_hr as number) ?? (data.pricePerHr as number),\n };\n}\n\nexport function deploymentGpuListResponseFromResponse(\n data: Record<string, unknown>\n): DeploymentGpuListResponse {\n const gpus = (data.gpus as Record<string, unknown>[]) ?? [];\n return { gpus: gpus.map(deploymentGpuInfoFromResponse) };\n}\n\nexport function deploymentLogsResponseFromResponse(data: Record<string, unknown>): DeploymentLogsResponse {\n const rawLogs = (data.logs as Record<string, unknown>[]) ?? [];\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n logs: rawLogs.map((entry) => ({\n timestamp: (entry.timestamp as string) ?? \"\",\n level: (entry.level as string) ?? \"INFO\",\n message: (entry.message as string) ?? \"\",\n })),\n };\n}\n\nexport function deploymentCostResponseFromResponse(data: Record<string, unknown>): DeploymentCostResponse {\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n status: (data.status as string) ?? \"unknown\",\n gpuAllocated: (data.gpu_allocated as string) ?? (data.gpuAllocated as string),\n hoursRunning: (data.hours_running as number) ?? (data.hoursRunning as number),\n pricePerHourUsd: (data.price_per_hour_usd as number) ?? (data.pricePerHourUsd as number),\n estimatedCostUsd: (data.estimated_cost_usd as number) ?? (data.estimatedCostUsd as number),\n note: (data.note as string) ?? null,\n };\n}\n\nexport class Deployments {\n constructor(private _client: Client) {}\n\n async create(options: DeploymentCreateOptions): Promise<DeploymentInfo> {\n const data = (await this._client._request(\"POST\", \"/deployments\", {\n body: JSON.stringify({\n model_name: options.modelName,\n hf_model_id: options.hfModelId,\n gpu_tier: options.gpuTier,\n region: options.region,\n hf_token: options.hfToken,\n runpod_key: options.runpodKey,\n webhook_url: options.webhookUrl,\n cache_scope: options.cacheScope,\n provider: options.provider,\n task: options.task,\n user_s3_url: options.userS3Url,\n user_aws_access_key_id: options.userAwsAccessKeyId,\n user_aws_secret_access_key: options.userAwsSecretAccessKey,\n user_aws_endpoint_url: options.userAwsEndpointUrl,\n }),\n })) as Record<string, unknown>;\n return deploymentInfoFromResponse(data);\n }\n\n async list(): Promise<DeploymentListResponse> {\n const data = (await this._client._request(\"GET\", \"/deployments\")) as Record<string, unknown>;\n return deploymentListResponseFromResponse(data);\n }\n\n async get(deploymentId: string): Promise<DeploymentInfo> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}`\n )) as Record<string, unknown>;\n return deploymentInfoFromResponse(data);\n }\n\n async delete(deploymentId: string): Promise<void> {\n await this._client._request(\"DELETE\", `/deployments/${encodeURIComponent(deploymentId)}`);\n }\n\n async run(deploymentId: string, input: Record<string, unknown>): Promise<Record<string, unknown>> {\n const data = (await this._client._request(\"POST\", `/deployments/${encodeURIComponent(deploymentId)}/run`, {\n body: JSON.stringify({ input } satisfies DeploymentRunRequest),\n })) as Record<string, unknown>;\n return data;\n }\n\n async getLogs(deploymentId: string): Promise<DeploymentLogsResponse> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}/logs`\n )) as Record<string, unknown>;\n return deploymentLogsResponseFromResponse(data);\n }\n\n async getCost(deploymentId: string): Promise<DeploymentCostResponse> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}/cost`\n )) as Record<string, unknown>;\n return deploymentCostResponseFromResponse(data);\n }\n\n async listGpus(): Promise<DeploymentGpuListResponse> {\n const data = (await this._client._request(\"GET\", \"/deployments/gpus\")) as Record<string, unknown>;\n return deploymentGpuListResponseFromResponse(data);\n }\n\n /**\n * Streams deployment status events (SSE).\n * Returns an abort function to stop streaming.\n */\n streamStatus(\n deploymentId: string,\n onEvent: (event: StreamStatusEvent) => void,\n onError?: (error: Error) => void\n ): () => void {\n const controller = new AbortController();\n const base = this._client.baseUrl.replace(/\\/$/, \"\");\n const url = `${base}/deployments/${encodeURIComponent(deploymentId)}/stream`;\n const headers: Record<string, string> = {};\n if (this._client.apiKey) headers.Authorization = `Bearer ${this._client.apiKey}`;\n\n void (async () => {\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n signal: controller.signal,\n });\n if (!response.ok || !response.body) {\n throw new Error(`SSE stream failed with status ${response.status}`);\n }\n\n const decoder = new TextDecoder();\n const reader = response.body.getReader();\n let buffer = \"\";\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n const events = buffer.split(\"\\n\\n\");\n buffer = events.pop() ?? \"\";\n for (const rawEvent of events) {\n const dataLine = rawEvent\n .split(\"\\n\")\n .find((line) => line.startsWith(\"data:\"));\n if (!dataLine) continue;\n const payload = dataLine.slice(5).trim();\n if (!payload) continue;\n try {\n const parsed = JSON.parse(payload) as Record<string, unknown>;\n onEvent({\n deploymentId:\n (parsed.deployment_id as string) ??\n (parsed.deploymentId as string) ??\n deploymentId,\n status: parsed.status as string | undefined,\n endpointUrl:\n (parsed.endpoint_url as string | undefined) ??\n (parsed.endpointUrl as string | undefined),\n estimatedRemainingSeconds: parsed.estimated_remaining_seconds as number | undefined,\n error: parsed.error as string | undefined,\n });\n } catch {\n // Ignore malformed chunk.\n }\n }\n }\n } catch (err) {\n if (!controller.signal.aborted) {\n const error = err instanceof Error ? err : new Error(String(err));\n onError?.(error);\n }\n }\n })();\n\n return () => controller.abort();\n }\n}\n","/**\n * Hugging Face Hub API — list deployable image/video generation models.\n * Calls https://huggingface.co/api/models directly (no Visgate backend).\n */\n\nexport interface HfModelInfo {\n id: string;\n modelId: string;\n pipelineTag: string;\n libraryName?: string;\n likes?: number;\n downloads?: number;\n}\n\nexport interface HfModelsListOptions {\n task?:\n | \"text-to-image\"\n | \"image-to-image\"\n | \"text-to-video\"\n | \"image-to-video\";\n limit?: number;\n search?: string;\n}\n\nconst HF_API_BASE = \"https://huggingface.co/api/models\";\n\nfunction normalizeModel(raw: Record<string, unknown>): HfModelInfo {\n const id = (raw.id as string) ?? (raw.modelId as string) ?? \"\";\n return {\n id,\n modelId: (raw.modelId as string) ?? id,\n pipelineTag: (raw.pipeline_tag as string) ?? \"\",\n libraryName: raw.library_name as string | undefined,\n likes: raw.likes as number | undefined,\n downloads: raw.downloads as number | undefined,\n };\n}\n\nexport class HfModels {\n async list(options: HfModelsListOptions = {}): Promise<HfModelInfo[]> {\n const task = options.task ?? \"text-to-image\";\n const limit = Math.min(Math.max(options.limit ?? 50, 1), 100);\n const params = new URLSearchParams();\n params.set(\"pipeline_tag\", task);\n params.set(\"limit\", String(limit));\n if (options.search && options.search.trim()) {\n params.set(\"search\", options.search.trim());\n }\n const url = `${HF_API_BASE}?${params.toString()}`;\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Hugging Face API error: ${response.status} ${response.statusText}`);\n }\n const data = (await response.json()) as Record<string, unknown>[];\n if (!Array.isArray(data)) {\n return [];\n }\n return data.map((item) => normalizeModel(item as Record<string, unknown>));\n }\n}\n","/** Provider key management and balance resources */\n\nimport type { Client } from \"../client\";\n\nexport interface ProviderKeyInfo {\n provider: string;\n validated: boolean;\n validatedAt?: string | null;\n maskedKey?: string | null;\n}\n\nexport function providerKeyInfoFromResponse(data: Record<string, unknown>): ProviderKeyInfo {\n return {\n provider: (data.provider as string) ?? \"\",\n validated: Boolean(data.validated),\n validatedAt: data.validated_at as string | undefined,\n maskedKey: data.masked_key as string | undefined,\n };\n}\n\nexport interface ProviderKeysResponse {\n keys: ProviderKeyInfo[];\n}\n\nexport function providerKeysResponseFromResponse(data: Record<string, unknown>): ProviderKeysResponse {\n const keys = (data.keys as Record<string, unknown>[]) ?? [];\n return { keys: keys.map(providerKeyInfoFromResponse) };\n}\n\nexport interface ProviderValidationResult {\n valid: boolean;\n message: string;\n}\n\nexport function providerValidationResultFromResponse(\n data: Record<string, unknown>\n): ProviderValidationResult {\n return {\n valid: Boolean(data.valid),\n message: String(data.message ?? \"\"),\n };\n}\n\nexport interface ProviderBalanceItem {\n provider: string;\n configured: boolean;\n available: boolean;\n limit?: number | null;\n remaining?: number | null;\n currency?: string | null;\n message?: string | null;\n}\n\nexport function providerBalanceItemFromResponse(data: Record<string, unknown>): ProviderBalanceItem {\n return {\n provider: (data.provider as string) ?? \"\",\n configured: Boolean(data.configured),\n available: Boolean(data.available),\n limit: data.limit as number | undefined,\n remaining: data.remaining as number | undefined,\n currency: data.currency as string | undefined,\n message: data.message as string | undefined,\n };\n}\n\nexport interface ProviderBalancesResponse {\n balances: ProviderBalanceItem[];\n}\n\nexport function providerBalancesResponseFromResponse(\n data: Record<string, unknown>\n): ProviderBalancesResponse {\n const balances = (data.balances as Record<string, unknown>[]) ?? [];\n return { balances: balances.map(providerBalanceItemFromResponse) };\n}\n\nexport class Providers {\n constructor(private _client: Client) {}\n\n async listKeys(): Promise<ProviderKeysResponse> {\n const data = (await this._client._request(\"GET\", \"/providers/keys\")) as Record<string, unknown>;\n return providerKeysResponseFromResponse(data);\n }\n\n async setKey(provider: string, apiKey: string): Promise<ProviderKeyInfo> {\n const data = (await this._client._request(\"PUT\", \"/providers/keys\", {\n body: JSON.stringify({ provider, api_key: apiKey }),\n })) as Record<string, unknown>;\n return providerKeyInfoFromResponse(data);\n }\n\n async deleteKey(provider: string): Promise<Record<string, unknown>> {\n return (await this._client._request(\"DELETE\", `/providers/keys/${encodeURIComponent(provider)}`)) as Record<\n string,\n unknown\n >;\n }\n\n async validateKey(provider: string, apiKey: string): Promise<ProviderValidationResult> {\n const data = (await this._client._request(\"POST\", \"/providers/validate\", {\n body: JSON.stringify({ provider, api_key: apiKey }),\n })) as Record<string, unknown>;\n return providerValidationResultFromResponse(data);\n }\n\n async balances(): Promise<ProviderBalancesResponse> {\n const data = (await this._client._request(\"GET\", \"/providers/balances\")) as Record<string, unknown>;\n return providerBalancesResponseFromResponse(data);\n }\n}\n","/**\n * Async generation request status: GET /v1/requests/{request_id}\n * Used after POST /videos/generate or /images/generate with Prefer: respond-async (202).\n */\n\nimport type { Client } from \"../client\";\n\nexport interface RequestStatusResult {\n requestId: string;\n status: \"pending\" | \"processing\" | \"completed\" | \"failed\";\n mediaType: string;\n provider: string;\n model: string;\n outputUrl: string | null;\n errorMessage: string | null;\n createdAt: string | null;\n completedAt: string | null;\n}\n\nexport function requestStatusFromResponse(data: Record<string, unknown>): RequestStatusResult {\n return {\n requestId: (data.request_id as string) ?? (data.requestId as string),\n status: (data.status as RequestStatusResult[\"status\"]) ?? \"pending\",\n mediaType: (data.media_type as string) ?? \"video\",\n provider: (data.provider as string) ?? \"\",\n model: (data.model as string) ?? \"\",\n outputUrl: (data.output_url as string) ?? null,\n errorMessage: (data.error_message as string) ?? null,\n createdAt: (data.created_at as string) ?? null,\n completedAt: (data.completed_at as string) ?? null,\n };\n}\n\nexport class Requests {\n constructor(private _client: Client) {}\n\n /** Get status of an async generation request (video/image). */\n async get(requestId: string): Promise<RequestStatusResult> {\n const data = (await this._client._request(\"GET\", `/requests/${encodeURIComponent(requestId)}`)) as Record<string, unknown>;\n return requestStatusFromResponse(data);\n }\n}\n","/** Usage and billing: GET /usage, /usage/logs, /dashboard */\n\nimport type { Client } from \"../client\";\n\n/** Dashboard response shape (GET /dashboard). */\nexport interface DashboardResponse {\n total_generations: number;\n total_cost_usd: number;\n avg_latency_ms: number;\n cache_hit_rate: number;\n cached_requests: number;\n success_rate: number;\n cost_per_day: Array<{ date: string; cost_usd: number; requests: number }>;\n top_models_used: Array<{ model: string; count: number; total_cost_usd: number }>;\n period_days: number;\n}\nimport { parseDateTime } from \"../utils\";\n\nexport interface UsageSummary {\n totalRequests: number;\n successfulRequests: number;\n failedRequests: number;\n cachedRequests: number;\n totalProviderCost: number;\n totalBilledCost: number;\n totalSavings: number;\n byProvider: Record<string, number>;\n byModel: Record<string, number>;\n period: string;\n periodStart: Date | null;\n periodEnd: Date | null;\n cacheHitRate: number;\n /** Average latency in seconds (from API avg_latency) */\n avgLatency?: number;\n /** Raw provider breakdown: provider -> { requests, cost, ... } */\n providerBreakdown?: Record<string, { requests: number; cost: number; providerChargeCost?: number; providerEffectiveCost?: number; savingsCost?: number }>;\n /** Daily/history records when returned by API */\n history?: Record<string, unknown>[];\n}\n\nfunction byProviderFromBreakdown(providerBreakdown: Record<string, unknown> | undefined): Record<string, number> {\n if (!providerBreakdown || typeof providerBreakdown !== \"object\") return {};\n const out: Record<string, number> = {};\n for (const [provider, stats] of Object.entries(providerBreakdown)) {\n const s = stats as Record<string, unknown>;\n const requests = (s?.requests as number) ?? 0;\n if (provider) out[provider] = requests;\n }\n return out;\n}\n\nexport function usageSummaryFromResponse(data: Record<string, unknown>): UsageSummary {\n const totalRequests = (data.total_requests as number) ?? 0;\n const cachedRequests = (data.cached_requests as number) ?? 0;\n const cacheHitRateFromApi = data.cache_hit_rate as number | undefined;\n const cacheHitRate =\n typeof cacheHitRateFromApi === \"number\"\n ? cacheHitRateFromApi\n : totalRequests === 0\n ? 0\n : (cachedRequests / totalRequests) * 100;\n const providerBreakdown = data.provider_breakdown as Record<string, unknown> | undefined;\n const history = data.history as Record<string, unknown>[] | undefined;\n return {\n totalRequests,\n successfulRequests: (data.successful_requests as number) ?? 0,\n failedRequests: (data.failed_requests as number) ?? 0,\n cachedRequests,\n totalProviderCost:\n (data.total_provider_effective_cost as number) ?? (data.total_provider_cost as number) ?? 0,\n totalBilledCost: (data.total_billed_cost as number) ?? (data.total_cost_usd as number) ?? 0,\n totalSavings: (data.total_savings as number) ?? 0,\n byProvider:\n (data.by_provider as Record<string, number>) ?? byProviderFromBreakdown(providerBreakdown),\n byModel: (data.by_model as Record<string, number>) ?? {},\n period: (data.period as string) ?? \"month\",\n periodStart: parseDateTime(data.period_start as string | undefined),\n periodEnd: parseDateTime(data.period_end as string | undefined),\n cacheHitRate,\n avgLatency: data.avg_latency as number | undefined,\n providerBreakdown: providerBreakdown as UsageSummary[\"providerBreakdown\"],\n history: Array.isArray(history) ? history : undefined,\n };\n}\n\nexport class Usage {\n constructor(private _client: Client) {}\n\n async get(period: string = \"month\"): Promise<UsageSummary> {\n const data = (await this._client._request(\"GET\", `/usage?period=${encodeURIComponent(period)}`)) as Record<\n string,\n unknown\n >;\n return usageSummaryFromResponse(data);\n }\n\n async logs(options: { limit?: number; offset?: number } = {}): Promise<Record<string, unknown>[]> {\n const { limit = 50, offset = 0 } = options;\n const params = new URLSearchParams();\n params.set(\"limit\", String(limit));\n params.set(\"offset\", String(offset));\n const data = (await this._client._request(\"GET\", `/usage/logs?${params.toString()}`)) as\n | Record<string, unknown>[]\n | Record<string, unknown>;\n if (Array.isArray(data)) return data;\n return (data.logs as Record<string, unknown>[]) ?? [];\n }\n\n async dashboard(period: string = \"month\"): Promise<Record<string, unknown>> {\n return (await this._client._request(\n \"GET\",\n `/dashboard?period=${encodeURIComponent(period)}`\n )) as Record<string, unknown>;\n }\n\n /**\n * Track a download event for a request (POST /usage/downloads).\n * Increments download_count and adds timestamp to downloaded_at.\n */\n async trackDownload(\n requestId: string,\n outputUrl: string,\n options?: { mediaType?: string }\n ): Promise<{ success: boolean; request_id: string; download_count: number }> {\n const body: Record<string, unknown> = { request_id: requestId, output_url: outputUrl };\n if (options?.mediaType) body.media_type = options.mediaType;\n const data = (await this._client._request(\"POST\", \"/usage/downloads\", {\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n return {\n success: Boolean(data.success),\n request_id: (data.request_id as string) ?? requestId,\n download_count: (data.download_count as number) ?? 0,\n };\n }\n}\n","/**\n * Video generation: POST /videos/generate\n *\n * Mirrors the Python SDK example 04_videos_all_providers: managed mode and\n * BYOK (Fal, Replicate, Runway) with provider-specific model IDs.\n *\n * @example Managed (platform keys)\n * ```ts\n * const r = await client.videos.generate(\"fal-ai/veo3\", prompt, { durationSeconds: 6, skipGcsUpload: true, preferAsync: true });\n * ```\n *\n * @example BYOK – use client options or proxy env (X-Fal-Key, X-Replicate-Key, X-Runway-Key)\n * ```ts\n * // Fal (veo3; alternative: fal-ai/flux-pro)\n * client.videos.generate(\"fal-ai/veo3\", prompt, { durationSeconds: 6, skipGcsUpload: true, preferAsync: true });\n * // Replicate\n * client.videos.generate(\"replicate/lucataco/cogvideox-5b\", prompt, { durationSeconds: 5, skipGcsUpload: true, preferAsync: true });\n * // Runway\n * client.videos.generate(\"runway/gen4_turbo\", prompt, { durationSeconds: 5, skipGcsUpload: true, preferAsync: true });\n * ```\n */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\n/**\n * Convert a File or Blob to a data URL (data:image/...;base64,...).\n * Uses FileReader in browser, Blob.arrayBuffer() + Buffer in Node 18+.\n */\nfunction blobToDataUrl(blob: File | Blob): Promise<string> {\n if (typeof FileReader !== \"undefined\") {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") resolve(reader.result);\n else reject(new Error(\"FileReader did not return a string\"));\n };\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(blob);\n });\n }\n // Node 18+: Blob has arrayBuffer(); use global Buffer if available for large blobs\n return (async () => {\n const ab = await blob.arrayBuffer();\n const mime = blob.type || \"image/jpeg\";\n const NodeBuffer =\n typeof globalThis !== \"undefined\" &&\n (globalThis as unknown as { Buffer?: { from(a: ArrayBuffer): { toString(e: string): string } } }).Buffer;\n const base64 = NodeBuffer\n ? NodeBuffer.from(ab).toString(\"base64\")\n : btoa(String.fromCharCode(...new Uint8Array(ab)));\n return `data:${mime};base64,${base64}`;\n })();\n}\n\n/** Recommended video model IDs per provider (align with working 06_videos_all_providers; Fal uses veo3). */\nexport const VIDEO_MODEL_PRESETS = {\n fal: \"fal-ai/veo3\",\n replicate: \"replicate/lucataco/cogvideox-5b\",\n runway: \"runway/gen4_turbo\",\n} as const;\n\nexport interface VideoResult {\n id: string;\n /** Request status: \"success\" | \"cached\" | \"failed\" */\n status?: string;\n videoUrl: string | null;\n model: string;\n provider: string;\n cost: number;\n /** True when response was served from cache (exact or semantic match). */\n cacheHit: boolean;\n latencyMs: number | null;\n savedAmount?: number;\n marginPercent?: number;\n /** When cache hit: \"exact\" (hash match) or \"semantic\" (similarity match). */\n cacheSource?: \"exact\" | \"semantic\" | null;\n createdAt: Date | null;\n}\n\nexport function videoResultFromResponse(data: Record<string, unknown>): VideoResult {\n const cacheSource = data.cache_source as string | undefined;\n return {\n id: data.id as string,\n status: data.status as string | undefined,\n videoUrl: (data.video_url as string) ?? null,\n model: data.model as string,\n provider: data.provider as string,\n cost: (data.cost as number) ?? 0,\n cacheHit: (data.cache_hit as boolean) ?? false,\n latencyMs: (data.latency_ms as number) ?? null,\n savedAmount: data.saved_amount as number | undefined,\n marginPercent: data.margin_percent as number | undefined,\n cacheSource:\n cacheSource === \"exact\" || cacheSource === \"semantic\" ? cacheSource : undefined,\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\n/** Result when using preferAsync: true — API returns 202, poll client.requests.get(requestId). */\nexport interface AsyncVideoAccepted {\n requestId: string;\n status: \"accepted\";\n}\n\nexport interface VideosGenerateOptions {\n /** Input image URL for image-to-video. */\n imageUrl?: string | null;\n /**\n * Input image as File or Blob (e.g. from file input). Converted to data URL and sent as image_url.\n * Takes precedence over imageUrl if both are set.\n */\n imageFile?: File | Blob;\n /** Duration in seconds (default 5). */\n durationSeconds?: number;\n fps?: number;\n /** URL to call when generation is complete (async callback). */\n webhookUrl?: string | null;\n /** ID to include in the callback payload. */\n callbackId?: string | null;\n /** Skip uploading result to GCS; return provider URL directly. Faster, use when behind short timeouts. */\n skipGcsUpload?: boolean;\n /**\n * Use async mode: API returns 202 immediately, poll client.requests.get(requestId) for status.\n * Avoids 502 when video takes longer than proxy/Cloudflare timeout.\n */\n preferAsync?: boolean;\n /** Extra provider-specific params (merged into request body). */\n params?: Record<string, unknown>;\n}\n\nexport class Videos {\n constructor(private _client: Client) {}\n\n /**\n * Generate a video from a prompt (and optional image for img2vid).\n * Supports managed mode and BYOK (set falKey/replicateKey/runwayKey on client or via proxy env).\n * Use preferAsync: true to avoid 502 when video takes longer than proxy/Cloudflare timeout.\n */\n async generate(\n model: string,\n prompt: string,\n options: VideosGenerateOptions = {}\n ): Promise<VideoResult | AsyncVideoAccepted> {\n const {\n imageUrl,\n imageFile,\n durationSeconds = 5,\n fps,\n webhookUrl,\n callbackId,\n skipGcsUpload,\n preferAsync,\n params,\n } = options;\n\n let resolvedImageUrl: string | null = null;\n if (imageFile) {\n resolvedImageUrl = await blobToDataUrl(imageFile);\n } else if (imageUrl) {\n resolvedImageUrl = imageUrl;\n }\n\n const payload: Record<string, unknown> = {\n model,\n prompt,\n duration_seconds: durationSeconds,\n };\n if (resolvedImageUrl) payload.image_url = resolvedImageUrl;\n if (fps != null) payload.fps = fps;\n if (webhookUrl) payload.webhook_url = webhookUrl;\n if (callbackId) payload.callback_id = callbackId;\n if (skipGcsUpload === true) payload.skip_gcs_upload = true;\n if (preferAsync === true) payload.prefer_async = true;\n if (params && Object.keys(params).length > 0) Object.assign(payload, params);\n\n const headers: Record<string, string> = {};\n if (preferAsync === true) headers[\"Prefer\"] = \"respond-async\";\n\n const pathWithQuery = preferAsync === true ? \"/videos/generate?async=true\" : \"/videos/generate\";\n const data = (await this._client._request(\"POST\", pathWithQuery, {\n body: JSON.stringify(payload),\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n })) as Record<string, unknown>;\n\n // 202 Accepted: API returns { request_id }; poll client.requests.get(requestId)\n if (\"request_id\" in data && typeof data.request_id === \"string\" && !(\"video_url\" in data)) {\n return { requestId: data.request_id, status: \"accepted\" };\n }\n return videoResultFromResponse(data);\n }\n}\n","/**\n * Visgate API client (all methods return Promises in JS).\n */\n\nimport {\n AuthenticationError,\n ProviderError,\n RateLimitError,\n ValidationError,\n VisgateConnectionError,\n VisgateError,\n VisgateTimeoutError,\n} from \"./exceptions\";\nimport { Billing } from \"./resources/billing\";\nimport { Generate, type GenerateResult } from \"./resources/generate\";\nimport { Images } from \"./resources/images\";\nimport { Models } from \"./resources/models\";\nimport { Deployments } from \"./resources/deployments\";\nimport { HfModels } from \"./resources/hf-models\";\nimport { Providers } from \"./resources/providers\";\nimport { Requests } from \"./resources/requests\";\nimport { Usage } from \"./resources/usage\";\nimport { Videos } from \"./resources/videos\";\nimport { resolveApiKey } from \"./utils\";\n\nconst DEFAULT_BASE_URL = \"https://visgateai.com/api/v1\";\nconst DEFAULT_TIMEOUT = 120_000; // ms\nconst DEFAULT_MAX_RETRIES = 2;\n\nconst RETRYABLE_STATUS_CODES = new Set([429, 500, 502, 503, 504]);\n\nconst SDK_VERSION = \"0.3.3\";\n\nfunction getVersion(): string {\n try {\n // @ts-expect-error - optional for bundlers\n if (typeof __VERSION__ !== \"undefined\") return __VERSION__;\n } catch {\n // ignore\n }\n return SDK_VERSION;\n}\n\nexport interface ClientOptions {\n apiKey?: string | null;\n /** When set, requests go to this URL and no API key is sent (key is added by the proxy). */\n proxyUrl?: string;\n /**\n * When set, the client calls this before each request and sends the result as Bearer token.\n * Use with proxyUrl for session-based auth (e.g. Firebase getIdToken); the proxy forwards the token to the API.\n */\n getToken?: () => string | Promise<string>;\n baseUrl?: string;\n timeout?: number;\n maxRetries?: number;\n falKey?: string | null;\n replicateKey?: string | null;\n runwayKey?: string | null;\n runpodKey?: string | null;\n}\n\nfunction buildHeaders(\n apiKey: string | null,\n options: {\n falKey?: string | null;\n replicateKey?: string | null;\n runwayKey?: string | null;\n runpodKey?: string | null;\n }\n): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"User-Agent\": `visgate-client/${getVersion()}`,\n };\n if (apiKey) headers.Authorization = `Bearer ${apiKey}`;\n if (options.falKey) headers[\"X-Fal-Key\"] = options.falKey;\n if (options.replicateKey) headers[\"X-Replicate-Key\"] = options.replicateKey;\n if (options.runwayKey) headers[\"X-Runway-Key\"] = options.runwayKey;\n if (options.runpodKey) headers[\"X-Runpod-Key\"] = options.runpodKey;\n return headers;\n}\n\nfunction backoff(attempt: number): number {\n return Math.min(0.5 * Math.pow(2, attempt), 8) * 1000; // ms\n}\n\nfunction retryWaitFromResponse(response: Response, attempt: number): number {\n const retryAfter = response.headers.get(\"Retry-After\");\n if (retryAfter) {\n const sec = parseInt(retryAfter, 10);\n if (!isNaN(sec)) return sec * 1000;\n }\n return backoff(attempt);\n}\n\nasync function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** @internal Exported for tests. */\nexport async function handleResponse(response: Response): Promise<unknown> {\n const status = response.status;\n\n if (status < 400) {\n const text = await response.text();\n if (!text) return {};\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return {};\n }\n }\n\n let body: Record<string, unknown> = {};\n const text = await response.text();\n try {\n if (text) body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n // use text as message below\n }\n\n if (status === 401) {\n throw new AuthenticationError(\"Invalid or missing API key\");\n }\n\n if (status === 422) {\n const message = (body.message as string) ?? text ?? \"Validation failed\";\n const field = (body.details as Record<string, unknown>)?.field as string | undefined;\n throw new ValidationError(message, field);\n }\n\n if (status === 429) {\n const retryAfterHeader = response.headers.get(\"Retry-After\");\n const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;\n throw new RateLimitError(\"Rate limit exceeded\", Number.isNaN(retryAfter) ? undefined : retryAfter);\n }\n\n const errorCode = (body.error as string) ?? `HTTP_${status}`;\n const message = (body.message as string) ?? text ?? \"Request failed\";\n\n if (String(errorCode).includes(\"PROVIDER\")) {\n const provider = ((body.details as Record<string, unknown>)?.provider as string) ?? \"unknown\";\n throw new ProviderError(message, provider);\n }\n\n throw new VisgateError(message, errorCode, body.details as Record<string, unknown> ?? {}, status);\n}\n\nexport interface RequestInitWithBody {\n body?: string;\n headers?: Record<string, string>;\n}\n\nexport class Client {\n readonly apiKey: string | null;\n readonly baseUrl: string;\n readonly maxRetries: number;\n readonly timeout: number;\n private readonly headers: Record<string, string>;\n private readonly getToken: (() => string | Promise<string>) | null;\n readonly images: Images;\n readonly models: Models;\n readonly videos: Videos;\n readonly requests: Requests;\n readonly usage: Usage;\n readonly providers: Providers;\n readonly deployments: Deployments;\n readonly hfModels: HfModels;\n readonly billing: Billing;\n private _generate: Generate;\n\n constructor(options: ClientOptions = {}) {\n // When using proxy, still send apiKey if provided (e.g. playground: proxy URL + API key in input)\n this.apiKey = options.proxyUrl\n ? (options.apiKey != null && options.apiKey !== \"\" ? resolveApiKey(options.apiKey) : null)\n : resolveApiKey(options.apiKey);\n this.getToken = options.getToken ?? null;\n this.baseUrl = (options.proxyUrl ?? options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\");\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.headers = buildHeaders(this.apiKey, options.proxyUrl ? {} : {\n falKey: options.falKey,\n replicateKey: options.replicateKey,\n runwayKey: options.runwayKey,\n runpodKey: options.runpodKey,\n });\n\n this.images = new Images(this);\n this.models = new Models(this);\n this.videos = new Videos(this);\n this.requests = new Requests(this);\n this.usage = new Usage(this);\n this.providers = new Providers(this);\n this.deployments = new Deployments(this);\n this.hfModels = new HfModels();\n this.billing = new Billing(this);\n this._generate = new Generate(this);\n }\n\n /**\n * Generate an image with a single call.\n */\n generate(\n prompt: string,\n options?: { model?: string; params?: Record<string, unknown> }\n ): Promise<GenerateResult> {\n return this._generate.__call__(prompt, options?.model, options?.params);\n }\n\n /**\n * Check API health status.\n */\n health(): Promise<Record<string, unknown>> {\n return this._request(\"GET\", \"/health\") as Promise<Record<string, unknown>>;\n }\n\n async _request(method: string, path: string, init: RequestInitWithBody = {}): Promise<unknown> {\n const url = `${this.baseUrl}${path}`;\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n let headers: Record<string, string> = { ...this.headers, ...(init.headers as Record<string, string>) };\n if (this.getToken) {\n const token = await Promise.resolve(this.getToken());\n headers = { ...headers, Authorization: `Bearer ${token}` };\n }\n const fetchInit: RequestInit = {\n method,\n ...init,\n headers,\n signal: controller.signal,\n };\n if (method !== \"GET\" && init.body !== undefined) {\n fetchInit.body = init.body;\n }\n const response = await fetch(url, fetchInit);\n clearTimeout(timeoutId);\n\n if (RETRYABLE_STATUS_CODES.has(response.status) && attempt < this.maxRetries) {\n const waitMs = retryWaitFromResponse(response, attempt);\n await sleep(waitMs);\n continue;\n }\n\n return await handleResponse(response);\n } catch (err) {\n clearTimeout(timeoutId);\n lastError = err instanceof Error ? err : new Error(String(err));\n\n if (err instanceof AuthenticationError && this.apiKey === null && !this.getToken) {\n throw new AuthenticationError(\"Proxy returned 401. Check VISGATE_API_KEY on the server (proxy).\");\n }\n if (err instanceof AuthenticationError && this.getToken) {\n throw new AuthenticationError(\"Proxy returned 401. Check getToken returns a valid session token.\");\n }\n if (err instanceof VisgateError && !(err instanceof RateLimitError)) throw err;\n if (attempt >= this.maxRetries) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new VisgateTimeoutError(`Request timed out after ${this.maxRetries + 1} attempt(s)`);\n }\n if (err instanceof TypeError && err.message.includes(\"fetch\")) {\n throw new VisgateConnectionError(`Connection failed: ${err.message}`);\n }\n throw err;\n }\n const waitMs = backoff(attempt);\n await sleep(waitMs);\n }\n }\n\n throw new VisgateError(\n `Request failed after ${this.maxRetries + 1} attempts`,\n \"VISGATE_ERROR\",\n {},\n undefined\n );\n }\n\n /** No-op for API compatibility (JS has no connection pool to close). */\n close(): void {}\n\n toString(): string {\n return `Client(baseUrl=${JSON.stringify(this.baseUrl)})`;\n }\n}\n\n/**\n * Async client — same as Client; all methods return Promises.\n * Provided for API parity with Python AsyncClient.\n */\nexport class AsyncClient extends Client {\n constructor(options: ClientOptions = {}) {\n super(options);\n }\n\n override toString(): string {\n return `AsyncClient(baseUrl=${JSON.stringify(this.baseUrl)})`;\n }\n}\n","/**\n * Visgate JavaScript/TypeScript SDK — unified client for the Visgate vision AI gateway.\n */\n\nexport { Client, AsyncClient, type ClientOptions } from \"./client\";\nexport {\n VisgateError,\n AuthenticationError,\n ValidationError,\n RateLimitError,\n ProviderError,\n VisgateTimeoutError,\n VisgateConnectionError,\n type VisgateErrorDetails,\n} from \"./exceptions\";\nexport {\n generateResultFromResponse,\n Generate,\n type GenerateResult,\n} from \"./resources/generate\";\nexport {\n imageResultFromResponse,\n Images,\n type ImageResult,\n type ImagesGenerateOptions,\n} from \"./resources/images\";\nexport {\n videoResultFromResponse,\n Videos,\n VIDEO_MODEL_PRESETS,\n type VideoResult,\n type VideosGenerateOptions,\n type AsyncVideoAccepted,\n} from \"./resources/videos\";\nexport {\n modelInfoFromResponse,\n featuredSectionFromResponse,\n modelsResponseFromResponse,\n Models,\n type ModelInfo,\n type FeaturedSection,\n type ModelsResponse,\n type ModelsListOptions,\n} from \"./resources/models\";\nexport {\n requestStatusFromResponse,\n Requests,\n type RequestStatusResult,\n} from \"./resources/requests\";\nexport {\n usageSummaryFromResponse,\n Usage,\n type UsageSummary,\n type DashboardResponse,\n} from \"./resources/usage\";\nexport {\n providerKeyInfoFromResponse,\n providerKeysResponseFromResponse,\n providerValidationResultFromResponse,\n providerBalanceItemFromResponse,\n providerBalancesResponseFromResponse,\n Providers,\n type ProviderKeyInfo,\n type ProviderKeysResponse,\n type ProviderValidationResult,\n type ProviderBalanceItem,\n type ProviderBalancesResponse,\n} from \"./resources/providers\";\nexport {\n billingInfoFromResponse,\n modelPricingFromResponse,\n pricingResponseFromResponse,\n Billing,\n type BillingInfo,\n type ModelPricing,\n type PricingResponse,\n type CheckoutOptions,\n} from \"./resources/billing\";\nexport {\n deploymentInfoFromResponse,\n deploymentListResponseFromResponse,\n deploymentGpuInfoFromResponse,\n deploymentGpuListResponseFromResponse,\n deploymentLogsResponseFromResponse,\n deploymentCostResponseFromResponse,\n Deployments,\n type DeploymentCreateOptions,\n type DeploymentInfo,\n type DeploymentListResponse,\n type DeploymentGpuInfo,\n type DeploymentGpuListResponse,\n type DeploymentLogEntry,\n type DeploymentLogsResponse,\n type DeploymentCostResponse,\n type DeploymentRunRequest,\n type StreamStatusEvent,\n} from \"./resources/deployments\";\nexport {\n HfModels,\n type HfModelInfo,\n type HfModelsListOptions,\n} from \"./resources/hf-models\";\n\nexport const VERSION = \"0.3.4\";\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -272,6 +272,27 @@ declare class Deployments {
|
|
|
272
272
|
streamStatus(deploymentId: string, onEvent: (event: StreamStatusEvent) => void, onError?: (error: Error) => void): () => void;
|
|
273
273
|
}
|
|
274
274
|
|
|
275
|
+
/**
|
|
276
|
+
* Hugging Face Hub API — list deployable image/video generation models.
|
|
277
|
+
* Calls https://huggingface.co/api/models directly (no Visgate backend).
|
|
278
|
+
*/
|
|
279
|
+
interface HfModelInfo {
|
|
280
|
+
id: string;
|
|
281
|
+
modelId: string;
|
|
282
|
+
pipelineTag: string;
|
|
283
|
+
libraryName?: string;
|
|
284
|
+
likes?: number;
|
|
285
|
+
downloads?: number;
|
|
286
|
+
}
|
|
287
|
+
interface HfModelsListOptions {
|
|
288
|
+
task?: "text-to-image" | "image-to-image" | "text-to-video" | "image-to-video";
|
|
289
|
+
limit?: number;
|
|
290
|
+
search?: string;
|
|
291
|
+
}
|
|
292
|
+
declare class HfModels {
|
|
293
|
+
list(options?: HfModelsListOptions): Promise<HfModelInfo[]>;
|
|
294
|
+
}
|
|
295
|
+
|
|
275
296
|
/** Provider key management and balance resources */
|
|
276
297
|
|
|
277
298
|
interface ProviderKeyInfo {
|
|
@@ -536,6 +557,7 @@ declare class Client {
|
|
|
536
557
|
readonly usage: Usage;
|
|
537
558
|
readonly providers: Providers;
|
|
538
559
|
readonly deployments: Deployments;
|
|
560
|
+
readonly hfModels: HfModels;
|
|
539
561
|
readonly billing: Billing;
|
|
540
562
|
private _generate;
|
|
541
563
|
constructor(options?: ClientOptions);
|
|
@@ -611,6 +633,6 @@ declare class VisgateConnectionError extends VisgateError {
|
|
|
611
633
|
* Visgate JavaScript/TypeScript SDK — unified client for the Visgate vision AI gateway.
|
|
612
634
|
*/
|
|
613
635
|
|
|
614
|
-
declare const VERSION = "0.3.
|
|
636
|
+
declare const VERSION = "0.3.4";
|
|
615
637
|
|
|
616
|
-
export { AsyncClient, type AsyncVideoAccepted, AuthenticationError, Billing, type BillingInfo, type CheckoutOptions, Client, type ClientOptions, type DashboardResponse, type DeploymentCostResponse, type DeploymentCreateOptions, type DeploymentGpuInfo, type DeploymentGpuListResponse, type DeploymentInfo, type DeploymentListResponse, type DeploymentLogEntry, type DeploymentLogsResponse, type DeploymentRunRequest, Deployments, type FeaturedSection, Generate, type GenerateResult, type ImageResult, Images, type ImagesGenerateOptions, type ModelInfo, type ModelPricing, Models, type ModelsListOptions, type ModelsResponse, type PricingResponse, type ProviderBalanceItem, type ProviderBalancesResponse, ProviderError, type ProviderKeyInfo, type ProviderKeysResponse, type ProviderValidationResult, Providers, RateLimitError, type RequestStatusResult, Requests, type StreamStatusEvent, Usage, type UsageSummary, VERSION, VIDEO_MODEL_PRESETS, ValidationError, type VideoResult, Videos, type VideosGenerateOptions, VisgateConnectionError, VisgateError, type VisgateErrorDetails, VisgateTimeoutError, billingInfoFromResponse, deploymentCostResponseFromResponse, deploymentGpuInfoFromResponse, deploymentGpuListResponseFromResponse, deploymentInfoFromResponse, deploymentListResponseFromResponse, deploymentLogsResponseFromResponse, featuredSectionFromResponse, generateResultFromResponse, imageResultFromResponse, modelInfoFromResponse, modelPricingFromResponse, modelsResponseFromResponse, pricingResponseFromResponse, providerBalanceItemFromResponse, providerBalancesResponseFromResponse, providerKeyInfoFromResponse, providerKeysResponseFromResponse, providerValidationResultFromResponse, requestStatusFromResponse, usageSummaryFromResponse, videoResultFromResponse };
|
|
638
|
+
export { AsyncClient, type AsyncVideoAccepted, AuthenticationError, Billing, type BillingInfo, type CheckoutOptions, Client, type ClientOptions, type DashboardResponse, type DeploymentCostResponse, type DeploymentCreateOptions, type DeploymentGpuInfo, type DeploymentGpuListResponse, type DeploymentInfo, type DeploymentListResponse, type DeploymentLogEntry, type DeploymentLogsResponse, type DeploymentRunRequest, Deployments, type FeaturedSection, Generate, type GenerateResult, type HfModelInfo, HfModels, type HfModelsListOptions, type ImageResult, Images, type ImagesGenerateOptions, type ModelInfo, type ModelPricing, Models, type ModelsListOptions, type ModelsResponse, type PricingResponse, type ProviderBalanceItem, type ProviderBalancesResponse, ProviderError, type ProviderKeyInfo, type ProviderKeysResponse, type ProviderValidationResult, Providers, RateLimitError, type RequestStatusResult, Requests, type StreamStatusEvent, Usage, type UsageSummary, VERSION, VIDEO_MODEL_PRESETS, ValidationError, type VideoResult, Videos, type VideosGenerateOptions, VisgateConnectionError, VisgateError, type VisgateErrorDetails, VisgateTimeoutError, billingInfoFromResponse, deploymentCostResponseFromResponse, deploymentGpuInfoFromResponse, deploymentGpuListResponseFromResponse, deploymentInfoFromResponse, deploymentListResponseFromResponse, deploymentLogsResponseFromResponse, featuredSectionFromResponse, generateResultFromResponse, imageResultFromResponse, modelInfoFromResponse, modelPricingFromResponse, modelsResponseFromResponse, pricingResponseFromResponse, providerBalanceItemFromResponse, providerBalancesResponseFromResponse, providerKeyInfoFromResponse, providerKeysResponseFromResponse, providerValidationResultFromResponse, requestStatusFromResponse, usageSummaryFromResponse, videoResultFromResponse };
|
package/dist/index.d.ts
CHANGED
|
@@ -272,6 +272,27 @@ declare class Deployments {
|
|
|
272
272
|
streamStatus(deploymentId: string, onEvent: (event: StreamStatusEvent) => void, onError?: (error: Error) => void): () => void;
|
|
273
273
|
}
|
|
274
274
|
|
|
275
|
+
/**
|
|
276
|
+
* Hugging Face Hub API — list deployable image/video generation models.
|
|
277
|
+
* Calls https://huggingface.co/api/models directly (no Visgate backend).
|
|
278
|
+
*/
|
|
279
|
+
interface HfModelInfo {
|
|
280
|
+
id: string;
|
|
281
|
+
modelId: string;
|
|
282
|
+
pipelineTag: string;
|
|
283
|
+
libraryName?: string;
|
|
284
|
+
likes?: number;
|
|
285
|
+
downloads?: number;
|
|
286
|
+
}
|
|
287
|
+
interface HfModelsListOptions {
|
|
288
|
+
task?: "text-to-image" | "image-to-image" | "text-to-video" | "image-to-video";
|
|
289
|
+
limit?: number;
|
|
290
|
+
search?: string;
|
|
291
|
+
}
|
|
292
|
+
declare class HfModels {
|
|
293
|
+
list(options?: HfModelsListOptions): Promise<HfModelInfo[]>;
|
|
294
|
+
}
|
|
295
|
+
|
|
275
296
|
/** Provider key management and balance resources */
|
|
276
297
|
|
|
277
298
|
interface ProviderKeyInfo {
|
|
@@ -536,6 +557,7 @@ declare class Client {
|
|
|
536
557
|
readonly usage: Usage;
|
|
537
558
|
readonly providers: Providers;
|
|
538
559
|
readonly deployments: Deployments;
|
|
560
|
+
readonly hfModels: HfModels;
|
|
539
561
|
readonly billing: Billing;
|
|
540
562
|
private _generate;
|
|
541
563
|
constructor(options?: ClientOptions);
|
|
@@ -611,6 +633,6 @@ declare class VisgateConnectionError extends VisgateError {
|
|
|
611
633
|
* Visgate JavaScript/TypeScript SDK — unified client for the Visgate vision AI gateway.
|
|
612
634
|
*/
|
|
613
635
|
|
|
614
|
-
declare const VERSION = "0.3.
|
|
636
|
+
declare const VERSION = "0.3.4";
|
|
615
637
|
|
|
616
|
-
export { AsyncClient, type AsyncVideoAccepted, AuthenticationError, Billing, type BillingInfo, type CheckoutOptions, Client, type ClientOptions, type DashboardResponse, type DeploymentCostResponse, type DeploymentCreateOptions, type DeploymentGpuInfo, type DeploymentGpuListResponse, type DeploymentInfo, type DeploymentListResponse, type DeploymentLogEntry, type DeploymentLogsResponse, type DeploymentRunRequest, Deployments, type FeaturedSection, Generate, type GenerateResult, type ImageResult, Images, type ImagesGenerateOptions, type ModelInfo, type ModelPricing, Models, type ModelsListOptions, type ModelsResponse, type PricingResponse, type ProviderBalanceItem, type ProviderBalancesResponse, ProviderError, type ProviderKeyInfo, type ProviderKeysResponse, type ProviderValidationResult, Providers, RateLimitError, type RequestStatusResult, Requests, type StreamStatusEvent, Usage, type UsageSummary, VERSION, VIDEO_MODEL_PRESETS, ValidationError, type VideoResult, Videos, type VideosGenerateOptions, VisgateConnectionError, VisgateError, type VisgateErrorDetails, VisgateTimeoutError, billingInfoFromResponse, deploymentCostResponseFromResponse, deploymentGpuInfoFromResponse, deploymentGpuListResponseFromResponse, deploymentInfoFromResponse, deploymentListResponseFromResponse, deploymentLogsResponseFromResponse, featuredSectionFromResponse, generateResultFromResponse, imageResultFromResponse, modelInfoFromResponse, modelPricingFromResponse, modelsResponseFromResponse, pricingResponseFromResponse, providerBalanceItemFromResponse, providerBalancesResponseFromResponse, providerKeyInfoFromResponse, providerKeysResponseFromResponse, providerValidationResultFromResponse, requestStatusFromResponse, usageSummaryFromResponse, videoResultFromResponse };
|
|
638
|
+
export { AsyncClient, type AsyncVideoAccepted, AuthenticationError, Billing, type BillingInfo, type CheckoutOptions, Client, type ClientOptions, type DashboardResponse, type DeploymentCostResponse, type DeploymentCreateOptions, type DeploymentGpuInfo, type DeploymentGpuListResponse, type DeploymentInfo, type DeploymentListResponse, type DeploymentLogEntry, type DeploymentLogsResponse, type DeploymentRunRequest, Deployments, type FeaturedSection, Generate, type GenerateResult, type HfModelInfo, HfModels, type HfModelsListOptions, type ImageResult, Images, type ImagesGenerateOptions, type ModelInfo, type ModelPricing, Models, type ModelsListOptions, type ModelsResponse, type PricingResponse, type ProviderBalanceItem, type ProviderBalancesResponse, ProviderError, type ProviderKeyInfo, type ProviderKeysResponse, type ProviderValidationResult, Providers, RateLimitError, type RequestStatusResult, Requests, type StreamStatusEvent, Usage, type UsageSummary, VERSION, VIDEO_MODEL_PRESETS, ValidationError, type VideoResult, Videos, type VideosGenerateOptions, VisgateConnectionError, VisgateError, type VisgateErrorDetails, VisgateTimeoutError, billingInfoFromResponse, deploymentCostResponseFromResponse, deploymentGpuInfoFromResponse, deploymentGpuListResponseFromResponse, deploymentInfoFromResponse, deploymentListResponseFromResponse, deploymentLogsResponseFromResponse, featuredSectionFromResponse, generateResultFromResponse, imageResultFromResponse, modelInfoFromResponse, modelPricingFromResponse, modelsResponseFromResponse, pricingResponseFromResponse, providerBalanceItemFromResponse, providerBalancesResponseFromResponse, providerKeyInfoFromResponse, providerKeysResponseFromResponse, providerValidationResultFromResponse, requestStatusFromResponse, usageSummaryFromResponse, videoResultFromResponse };
|
package/dist/index.js
CHANGED
|
@@ -501,6 +501,42 @@ var Deployments = class {
|
|
|
501
501
|
}
|
|
502
502
|
};
|
|
503
503
|
|
|
504
|
+
// src/resources/hf-models.ts
|
|
505
|
+
var HF_API_BASE = "https://huggingface.co/api/models";
|
|
506
|
+
function normalizeModel(raw) {
|
|
507
|
+
const id = raw.id ?? raw.modelId ?? "";
|
|
508
|
+
return {
|
|
509
|
+
id,
|
|
510
|
+
modelId: raw.modelId ?? id,
|
|
511
|
+
pipelineTag: raw.pipeline_tag ?? "",
|
|
512
|
+
libraryName: raw.library_name,
|
|
513
|
+
likes: raw.likes,
|
|
514
|
+
downloads: raw.downloads
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
var HfModels = class {
|
|
518
|
+
async list(options = {}) {
|
|
519
|
+
const task = options.task ?? "text-to-image";
|
|
520
|
+
const limit = Math.min(Math.max(options.limit ?? 50, 1), 100);
|
|
521
|
+
const params = new URLSearchParams();
|
|
522
|
+
params.set("pipeline_tag", task);
|
|
523
|
+
params.set("limit", String(limit));
|
|
524
|
+
if (options.search && options.search.trim()) {
|
|
525
|
+
params.set("search", options.search.trim());
|
|
526
|
+
}
|
|
527
|
+
const url = `${HF_API_BASE}?${params.toString()}`;
|
|
528
|
+
const response = await fetch(url);
|
|
529
|
+
if (!response.ok) {
|
|
530
|
+
throw new Error(`Hugging Face API error: ${response.status} ${response.statusText}`);
|
|
531
|
+
}
|
|
532
|
+
const data = await response.json();
|
|
533
|
+
if (!Array.isArray(data)) {
|
|
534
|
+
return [];
|
|
535
|
+
}
|
|
536
|
+
return data.map((item) => normalizeModel(item));
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
|
|
504
540
|
// src/resources/providers.ts
|
|
505
541
|
function providerKeyInfoFromResponse(data) {
|
|
506
542
|
return {
|
|
@@ -860,6 +896,7 @@ var Client = class {
|
|
|
860
896
|
this.usage = new Usage(this);
|
|
861
897
|
this.providers = new Providers(this);
|
|
862
898
|
this.deployments = new Deployments(this);
|
|
899
|
+
this.hfModels = new HfModels();
|
|
863
900
|
this.billing = new Billing(this);
|
|
864
901
|
this._generate = new Generate(this);
|
|
865
902
|
}
|
|
@@ -949,8 +986,8 @@ var AsyncClient = class extends Client {
|
|
|
949
986
|
};
|
|
950
987
|
|
|
951
988
|
// src/index.ts
|
|
952
|
-
var VERSION = "0.3.
|
|
989
|
+
var VERSION = "0.3.4";
|
|
953
990
|
|
|
954
|
-
export { AsyncClient, AuthenticationError, Billing, Client, Deployments, Generate, Images, Models, ProviderError, Providers, RateLimitError, Requests, Usage, VERSION, VIDEO_MODEL_PRESETS, ValidationError, Videos, VisgateConnectionError, VisgateError, VisgateTimeoutError, billingInfoFromResponse, deploymentCostResponseFromResponse, deploymentGpuInfoFromResponse, deploymentGpuListResponseFromResponse, deploymentInfoFromResponse, deploymentListResponseFromResponse, deploymentLogsResponseFromResponse, featuredSectionFromResponse, generateResultFromResponse, imageResultFromResponse, modelInfoFromResponse, modelPricingFromResponse, modelsResponseFromResponse, pricingResponseFromResponse, providerBalanceItemFromResponse, providerBalancesResponseFromResponse, providerKeyInfoFromResponse, providerKeysResponseFromResponse, providerValidationResultFromResponse, requestStatusFromResponse, usageSummaryFromResponse, videoResultFromResponse };
|
|
991
|
+
export { AsyncClient, AuthenticationError, Billing, Client, Deployments, Generate, HfModels, Images, Models, ProviderError, Providers, RateLimitError, Requests, Usage, VERSION, VIDEO_MODEL_PRESETS, ValidationError, Videos, VisgateConnectionError, VisgateError, VisgateTimeoutError, billingInfoFromResponse, deploymentCostResponseFromResponse, deploymentGpuInfoFromResponse, deploymentGpuListResponseFromResponse, deploymentInfoFromResponse, deploymentListResponseFromResponse, deploymentLogsResponseFromResponse, featuredSectionFromResponse, generateResultFromResponse, imageResultFromResponse, modelInfoFromResponse, modelPricingFromResponse, modelsResponseFromResponse, pricingResponseFromResponse, providerBalanceItemFromResponse, providerBalancesResponseFromResponse, providerKeyInfoFromResponse, providerKeysResponseFromResponse, providerValidationResultFromResponse, requestStatusFromResponse, usageSummaryFromResponse, videoResultFromResponse };
|
|
955
992
|
//# sourceMappingURL=index.js.map
|
|
956
993
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/exceptions.ts","../src/resources/billing.ts","../src/utils.ts","../src/resources/generate.ts","../src/resources/images.ts","../src/resources/models.ts","../src/resources/deployments.ts","../src/resources/providers.ts","../src/resources/requests.ts","../src/resources/usage.ts","../src/resources/videos.ts","../src/client.ts","../src/index.ts"],"names":["text","message"],"mappings":"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","file":"index.js","sourcesContent":["/** Visgate SDK exceptions. All extend VisgateError. */\n\nexport interface VisgateErrorDetails {\n [key: string]: unknown;\n}\n\n/**\n * Base exception for all Visgate SDK errors.\n */\nexport class VisgateError extends Error {\n readonly message: string;\n readonly errorCode: string;\n readonly details: VisgateErrorDetails;\n readonly statusCode?: number;\n\n constructor(\n message: string,\n errorCode: string = \"VISGATE_ERROR\",\n details: VisgateErrorDetails = {},\n statusCode?: number\n ) {\n super(message);\n this.name = \"VisgateError\";\n this.message = message;\n this.errorCode = errorCode;\n this.details = details;\n this.statusCode = statusCode;\n Object.setPrototypeOf(this, VisgateError.prototype);\n }\n\n override toString(): string {\n return `[${this.errorCode}] ${this.message}`;\n }\n}\n\n/** 401 — invalid or missing API key. */\nexport class AuthenticationError extends VisgateError {\n constructor(message: string = \"Invalid or missing API key\") {\n super(message, \"AUTHENTICATION_ERROR\", {}, 401);\n this.name = \"AuthenticationError\";\n Object.setPrototypeOf(this, AuthenticationError.prototype);\n }\n}\n\n/** 422 — invalid request parameters. */\nexport class ValidationError extends VisgateError {\n readonly field?: string;\n\n constructor(message: string, field?: string) {\n super(message, \"VALIDATION_ERROR\", field ? { field } : {}, 422);\n this.name = \"ValidationError\";\n this.field = field;\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\n/** 429 — too many requests. */\nexport class RateLimitError extends VisgateError {\n readonly retryAfter?: number;\n\n constructor(message: string = \"Rate limit exceeded\", retryAfter?: number) {\n super(message, \"RATE_LIMIT_ERROR\", retryAfter != null ? { retry_after: retryAfter } : {}, 429);\n this.name = \"RateLimitError\";\n this.retryAfter = retryAfter;\n Object.setPrototypeOf(this, RateLimitError.prototype);\n }\n}\n\n/** Upstream provider error (e.g. Fal, Replicate, Runway). */\nexport class ProviderError extends VisgateError {\n readonly provider: string;\n\n constructor(message: string, provider: string = \"unknown\") {\n super(message, \"PROVIDER_ERROR\", { provider });\n this.name = \"ProviderError\";\n this.provider = provider;\n Object.setPrototypeOf(this, ProviderError.prototype);\n }\n}\n\n/** Request timed out before the server responded. */\nexport class VisgateTimeoutError extends VisgateError {\n constructor(message: string = \"Request timed out\") {\n super(message, \"TIMEOUT_ERROR\");\n this.name = \"VisgateTimeoutError\";\n Object.setPrototypeOf(this, VisgateTimeoutError.prototype);\n }\n}\n\n/** Network connection failed. */\nexport class VisgateConnectionError extends VisgateError {\n constructor(message: string = \"Connection failed\") {\n super(message, \"CONNECTION_ERROR\");\n this.name = \"VisgateConnectionError\";\n Object.setPrototypeOf(this, VisgateConnectionError.prototype);\n }\n}\n","/** Billing: GET /billing/stats, /billing/info, /billing/pricing, POST /billing/checkout, /billing/subscription */\n\nimport type { Client } from \"../client\";\n\nexport interface BillingInfo {\n tier: string;\n balanceMicro: number;\n billingStatus: string;\n monthlyBudgetCents?: number | null;\n usageThisMonthCents?: number;\n supportEmail?: string | null;\n companyName?: string | null;\n freeModeEnabled?: boolean;\n}\n\nexport function billingInfoFromResponse(data: Record<string, unknown>): BillingInfo {\n return {\n tier: (data.tier as string) ?? \"free\",\n balanceMicro: (data.balance_micro as number) ?? 0,\n billingStatus: (data.billing_status as string) ?? \"active\",\n monthlyBudgetCents: data.monthly_budget_cents as number | undefined,\n usageThisMonthCents: (data.usage_this_month_cents as number) ?? 0,\n supportEmail: data.support_email as string | undefined,\n companyName: data.company_name as string | undefined,\n freeModeEnabled: data.free_mode_enabled as boolean | undefined,\n };\n}\n\nexport interface ModelPricing {\n id: string;\n providerType: string;\n model: string;\n modelName: string;\n modelType: string;\n modelClass?: string | null;\n costPerUnitMicro: number;\n usageCount: number;\n totalSavingsMicro: number;\n avgSavingsMicro: number;\n}\n\nexport function modelPricingFromResponse(data: Record<string, unknown>): ModelPricing {\n return {\n id: (data.id as string) ?? \"\",\n providerType: (data.provider_type as string) ?? \"\",\n model: (data.model as string) ?? \"\",\n modelName: (data.model_name as string) ?? \"\",\n modelType: (data.model_type as string) ?? \"image\",\n modelClass: data.model_class as string | undefined,\n costPerUnitMicro: (data.cost_per_unit_micro as number) ?? 0,\n usageCount: (data.usage_count as number) ?? 0,\n totalSavingsMicro: (data.total_savings_micro as number) ?? 0,\n avgSavingsMicro: (data.avg_savings_micro as number) ?? 0,\n };\n}\n\nexport interface PricingResponse {\n lastUpdated: string | null;\n pricing: ModelPricing[];\n}\n\nexport function pricingResponseFromResponse(data: Record<string, unknown>): PricingResponse {\n const pricing = (data.pricing as Record<string, unknown>[]) ?? [];\n return {\n lastUpdated: (data.last_updated as string) ?? null,\n pricing: pricing.map(modelPricingFromResponse),\n };\n}\n\nexport interface CheckoutOptions {\n customerEmail?: string | null;\n firebaseUid?: string | null;\n}\n\nexport class Billing {\n constructor(private _client: Client) {}\n\n /** Public billing stats for landing/marketing (GET /billing/stats). May not require auth. */\n async getStats(): Promise<Record<string, unknown>> {\n return (await this._client._request(\"GET\", \"/billing/stats\")) as Record<string, unknown>;\n }\n\n /** Organization billing info (GET /billing/info). */\n async getInfo(): Promise<BillingInfo> {\n const data = (await this._client._request(\"GET\", \"/billing/info\")) as Record<string, unknown>;\n return billingInfoFromResponse(data);\n }\n\n /** Create checkout session (POST /billing/checkout). */\n async checkout(\n amountDollars: number,\n returnUrl: string,\n options?: CheckoutOptions\n ): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = {\n amount_dollars: amountDollars,\n return_url: returnUrl,\n };\n if (options?.customerEmail != null) body.customer_email = options.customerEmail;\n if (options?.firebaseUid != null) body.firebase_uid = options.firebaseUid;\n return (await this._client._request(\"POST\", \"/billing/checkout\", {\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n }\n\n /** Get pricing for all models (GET /billing/pricing). */\n async getPricing(): Promise<PricingResponse> {\n const data = (await this._client._request(\"GET\", \"/billing/pricing\")) as Record<string, unknown>;\n return pricingResponseFromResponse(data);\n }\n\n /** Update organization subscription tier (POST /billing/subscription). */\n async updateSubscription(tier: string): Promise<{ success: boolean; tier: string }> {\n const data = (await this._client._request(\"POST\", \"/billing/subscription\", {\n body: JSON.stringify({ tier }),\n })) as Record<string, unknown>;\n return {\n success: Boolean(data.success),\n tier: (data.tier as string) ?? tier,\n };\n }\n}\n","/** Internal utilities. */\n\nimport { AuthenticationError } from \"./exceptions\";\n\n/**\n * Parse ISO 8601 datetime string (handles Z suffix).\n */\nexport function parseDateTime(value: string | null | undefined): Date | null {\n if (value == null || value === \"\") return null;\n const normalized = value.replace(\"Z\", \"+00:00\");\n const date = new Date(normalized);\n return isNaN(date.getTime()) ? null : date;\n}\n\n/** Detect if we're in a Node-like environment with process.env. */\nfunction hasProcessEnv(): boolean {\n return typeof process !== \"undefined\" && typeof process.env !== \"undefined\";\n}\n\n/**\n * Resolve API key from argument or environment variable.\n * Node: process.env.VISGATE_API_KEY\n * Browser: only from argument (or Vite: import.meta.env.VITE_VISGATE_API_KEY — doc only).\n */\nexport function resolveApiKey(apiKey: string | null | undefined): string {\n const key = apiKey ?? (hasProcessEnv() ? process.env.VISGATE_API_KEY : undefined);\n if (!key || typeof key !== \"string\" || key.trim() === \"\") {\n throw new AuthenticationError(\n \"No API key provided. Pass apiKey or set the VISGATE_API_KEY environment variable.\"\n );\n }\n return key.trim();\n}\n","/** Unified image generation: POST /generate */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\nexport interface GenerateResult {\n id: string;\n status: string;\n imageUrl: string | null;\n images: string[];\n model: string;\n provider: string;\n mode: string;\n cost: number;\n costPerMegapixel: number;\n latencyMs: number;\n resolution: Record<string, number>;\n createdAt: Date | null;\n}\n\nexport function generateResultFromResponse(data: Record<string, unknown>): GenerateResult {\n return {\n id: data.id as string,\n status: (data.status as string) ?? \"success\",\n imageUrl: (data.image_url as string) ?? null,\n images: (data.images as string[]) ?? [],\n model: data.model as string,\n provider: (data.provider as string) ?? \"\",\n mode: (data.mode as string) ?? \"\",\n cost: (data.estimated_cost_usd as number) ?? 0,\n costPerMegapixel: (data.cost_per_megapixel_usd as number) ?? 0,\n latencyMs: (data.latency_ms as number) ?? 0,\n resolution: (data.resolution as Record<string, number>) ?? {},\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\nconst DEFAULT_MODEL = \"fal-ai/flux/schnell\";\n\nexport class Generate {\n constructor(private _client: Client) {}\n\n async __call__(\n prompt: string,\n model: string = DEFAULT_MODEL,\n params?: Record<string, unknown>\n ): Promise<GenerateResult> {\n const payload: Record<string, unknown> = { prompt, model };\n if (params) payload.params = params;\n const data = (await this._client._request(\"POST\", \"/generate\", {\n body: JSON.stringify(payload),\n })) as Record<string, unknown>;\n return generateResultFromResponse(data);\n }\n}\n","/** Image generation: POST /images/generate */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\nexport interface ImageResult {\n id: string;\n /** Request status: \"success\" | \"cached\" | \"failed\" */\n status?: string;\n images: string[];\n model: string;\n provider: string;\n cost: number;\n /** True when response was served from cache (exact or semantic match). */\n cacheHit: boolean;\n latencyMs: number | null;\n savedAmount?: number;\n marginPercent?: number;\n /** When cache hit: \"exact\" (hash match) or \"semantic\" (similarity match). Optional if API returns it. */\n cacheSource?: \"exact\" | \"semantic\" | null;\n createdAt: Date | null;\n}\n\nexport function imageResultFromResponse(data: Record<string, unknown>): ImageResult {\n const cacheSource = data.cache_source as string | undefined;\n return {\n id: data.id as string,\n status: data.status as string | undefined,\n images: (data.images as string[]) ?? [],\n model: data.model as string,\n provider: data.provider as string,\n cost: (data.cost as number) ?? 0,\n cacheHit: (data.cache_hit as boolean) ?? false,\n latencyMs: (data.latency_ms as number) ?? null,\n savedAmount: data.saved_amount as number | undefined,\n marginPercent: data.margin_percent as number | undefined,\n cacheSource:\n cacheSource === \"exact\" || cacheSource === \"semantic\" ? cacheSource : undefined,\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\nexport interface ImagesGenerateOptions {\n negativePrompt?: string | null;\n width?: number;\n height?: number;\n numImages?: number;\n seed?: number | null;\n /** Input image URL for image-to-image */\n imageUrl?: string | null;\n /** Prefer cache (exact or semantic match). Default true. Set false to force fresh generation. */\n preferCache?: boolean;\n /** Max acceptable latency in ms; API may use for routing. */\n maxLatencyMs?: number | null;\n /** URL to call when generation is complete (async callback). */\n webhookUrl?: string | null;\n /** ID to include in the callback payload. */\n callbackId?: string | null;\n params?: Record<string, unknown>;\n}\n\nexport class Images {\n constructor(private _client: Client) {}\n\n async generate(\n model: string,\n prompt: string,\n options: ImagesGenerateOptions = {}\n ): Promise<ImageResult> {\n const {\n negativePrompt,\n width = 1024,\n height = 1024,\n numImages = 1,\n seed,\n imageUrl,\n preferCache,\n maxLatencyMs,\n webhookUrl,\n callbackId,\n params,\n } = options;\n const payload: Record<string, unknown> = {\n model,\n prompt,\n width,\n height,\n num_images: numImages,\n };\n if (negativePrompt) payload.negative_prompt = negativePrompt;\n if (seed != null) payload.seed = seed;\n if (imageUrl) payload.image_url = imageUrl;\n if (preferCache !== undefined) payload.prefer_cache = preferCache;\n if (maxLatencyMs != null) payload.max_latency_ms = maxLatencyMs;\n if (webhookUrl) payload.webhook_url = webhookUrl;\n if (callbackId) payload.callback_id = callbackId;\n if (params) Object.assign(payload, params);\n const data = (await this._client._request(\"POST\", \"/images/generate\", {\n body: JSON.stringify(payload),\n })) as Record<string, unknown>;\n return imageResultFromResponse(data);\n }\n}\n","/** Model catalog: GET /models */\n\nimport type { Client } from \"../client\";\n\nexport interface ModelInfo {\n id: string;\n name: string;\n provider: string;\n mediaType: string;\n description?: string | null;\n category?: string | null;\n tags: string[];\n coverImageUrl?: string | null;\n author?: string | null;\n url?: string | null;\n baseCostMicro: number;\n normalizedCostMicro: number;\n pricing?: string | null;\n pricingUnit?: string | null;\n runCount: number;\n inputTypes: string[];\n outputType?: string | null;\n capabilities: string[];\n firstSeenAt?: string | null;\n providerCreatedAt?: string | null;\n lastSyncedAt?: string | null;\n compliance?: Record<string, unknown> | null;\n}\n\nexport function modelInfoFromResponse(data: Record<string, unknown>): ModelInfo {\n return {\n id: (data.id as string) ?? \"\",\n name: (data.name as string) ?? \"\",\n provider: (data.provider as string) ?? \"\",\n mediaType: (data.media_type as string) ?? \"image\",\n description: data.description as string | undefined,\n category: data.category as string | undefined,\n tags: (data.tags as string[]) ?? [],\n coverImageUrl: data.cover_image_url as string | undefined,\n author: data.author as string | undefined,\n url: data.url as string | undefined,\n baseCostMicro: (data.base_cost_micro as number) ?? 0,\n normalizedCostMicro: (data.normalized_cost_micro as number) ?? 0,\n pricing: data.pricing as string | undefined,\n pricingUnit: data.pricing_unit as string | undefined,\n runCount: (data.run_count as number) ?? 0,\n inputTypes: (data.input_types as string[]) ?? [],\n outputType: data.output_type as string | undefined,\n capabilities: (data.capabilities as string[]) ?? [],\n firstSeenAt: data.first_seen_at as string | undefined,\n providerCreatedAt: data.provider_created_at as string | undefined,\n lastSyncedAt: data.last_synced_at as string | undefined,\n compliance: (data.compliance as Record<string, unknown>) ?? undefined,\n };\n}\n\nexport interface FeaturedSection {\n title: string;\n key: string;\n models: ModelInfo[];\n}\n\nexport function featuredSectionFromResponse(data: Record<string, unknown>): FeaturedSection {\n const models = (data.models as Record<string, unknown>[]) ?? [];\n return {\n title: (data.title as string) ?? \"\",\n key: (data.key as string) ?? \"\",\n models: models.map(modelInfoFromResponse),\n };\n}\n\nexport interface ModelsResponse {\n models: ModelInfo[];\n totalCount: number;\n lastUpdated?: string | null;\n featured?: FeaturedSection[] | null;\n}\n\nexport function modelsResponseFromResponse(data: Record<string, unknown>): ModelsResponse {\n const models = (data.models as Record<string, unknown>[]) ?? [];\n const featuredRaw = data.featured as Record<string, unknown>[] | undefined;\n return {\n models: models.map(modelInfoFromResponse),\n totalCount: (data.total_count as number) ?? 0,\n lastUpdated: data.last_updated as string | undefined,\n featured: featuredRaw ? featuredRaw.map(featuredSectionFromResponse) : undefined,\n };\n}\n\nexport interface ModelsListOptions {\n provider?: string | null;\n mediaType?: string | null;\n capability?: string | null;\n search?: string | null;\n sort?: string | null;\n limit?: number;\n featured?: boolean;\n}\n\nexport class Models {\n constructor(private _client: Client) {}\n\n async list(options: ModelsListOptions = {}): Promise<ModelsResponse> {\n const {\n provider,\n mediaType,\n capability,\n search,\n sort,\n limit = 100,\n featured = false,\n } = options;\n const params = new URLSearchParams();\n params.set(\"limit\", String(limit));\n if (provider) params.set(\"provider\", provider);\n if (mediaType) params.set(\"media_type\", mediaType);\n if (capability) params.set(\"capability\", capability);\n if (search) params.set(\"search\", search);\n if (sort) params.set(\"sort\", sort);\n if (featured) params.set(\"featured\", \"true\");\n const data = (await this._client._request(\"GET\", `/models?${params.toString()}`)) as Record<\n string,\n unknown\n >;\n return modelsResponseFromResponse(data);\n }\n\n async get(modelId: string): Promise<ModelInfo> {\n const data = (await this._client._request(\"GET\", `/models/${encodeURIComponent(modelId)}`)) as Record<\n string,\n unknown\n >;\n return modelInfoFromResponse(data);\n }\n\n async search(query: string, limit: number = 20): Promise<ModelsResponse> {\n return this.list({ search: query, limit });\n }\n}\n","/** Deployment management: /deployments endpoints */\n\nimport type { Client } from \"../client\";\n\nexport interface DeploymentCreateOptions {\n modelName?: string;\n hfModelId?: string;\n gpuTier?: string;\n region?: string;\n hfToken?: string;\n runpodKey?: string;\n webhookUrl?: string;\n cacheScope?: \"off\" | \"shared\" | \"private\";\n provider?: string;\n task?: string;\n userS3Url?: string;\n userAwsAccessKeyId?: string;\n userAwsSecretAccessKey?: string;\n userAwsEndpointUrl?: string;\n}\n\nexport interface DeploymentInfo {\n deploymentId: string;\n modelId?: string | null;\n status: string;\n endpointUrl?: string | null;\n provider?: string | null;\n createdAt?: string | null;\n gpuAllocated?: string | null;\n modelVramGb?: number | null;\n readyAt?: string | null;\n error?: string | null;\n}\n\nexport interface DeploymentListResponse {\n deployments: DeploymentInfo[];\n}\n\nexport interface DeploymentGpuInfo {\n id: string;\n displayName: string;\n memoryGb: number;\n secureCloud: boolean;\n communityCloud: boolean;\n bidPricePerHr?: number | null;\n pricePerHr?: number | null;\n}\n\nexport interface DeploymentGpuListResponse {\n gpus: DeploymentGpuInfo[];\n}\n\nexport interface DeploymentLogEntry {\n timestamp: string;\n level: string;\n message: string;\n}\n\nexport interface DeploymentLogsResponse {\n deploymentId: string;\n logs: DeploymentLogEntry[];\n}\n\nexport interface DeploymentCostResponse {\n deploymentId: string;\n status: string;\n gpuAllocated?: string | null;\n hoursRunning?: number | null;\n pricePerHourUsd?: number | null;\n estimatedCostUsd?: number | null;\n note?: string | null;\n}\n\nexport interface DeploymentRunRequest {\n input: Record<string, unknown>;\n}\n\nexport interface StreamStatusEvent {\n deploymentId: string;\n status?: string;\n endpointUrl?: string;\n estimatedRemainingSeconds?: number;\n error?: string;\n}\n\nexport function deploymentInfoFromResponse(data: Record<string, unknown>): DeploymentInfo {\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n modelId: (data.model_id as string) ?? (data.modelId as string),\n status: (data.status as string) ?? \"unknown\",\n endpointUrl: (data.endpoint_url as string) ?? (data.endpointUrl as string),\n provider: (data.provider as string) ?? \"runpod\",\n createdAt: (data.created_at as string) ?? (data.createdAt as string),\n gpuAllocated: (data.gpu_allocated as string) ?? (data.gpuAllocated as string),\n modelVramGb: (data.model_vram_gb as number) ?? (data.modelVramGb as number),\n readyAt: (data.ready_at as string) ?? (data.readyAt as string),\n error: (data.error as string) ?? null,\n };\n}\n\nexport function deploymentListResponseFromResponse(data: Record<string, unknown>): DeploymentListResponse {\n const deployments = (data.deployments as Record<string, unknown>[]) ?? [];\n return { deployments: deployments.map(deploymentInfoFromResponse) };\n}\n\nexport function deploymentGpuInfoFromResponse(data: Record<string, unknown>): DeploymentGpuInfo {\n return {\n id: (data.id as string) ?? \"\",\n displayName: (data.display_name as string) ?? (data.displayName as string) ?? \"\",\n memoryGb: (data.memory_gb as number) ?? (data.memoryGb as number) ?? 0,\n secureCloud: Boolean((data.secure_cloud as boolean) ?? (data.secureCloud as boolean)),\n communityCloud: Boolean((data.community_cloud as boolean) ?? (data.communityCloud as boolean)),\n bidPricePerHr: (data.bid_price_per_hr as number) ?? (data.bidPricePerHr as number),\n pricePerHr: (data.price_per_hr as number) ?? (data.pricePerHr as number),\n };\n}\n\nexport function deploymentGpuListResponseFromResponse(\n data: Record<string, unknown>\n): DeploymentGpuListResponse {\n const gpus = (data.gpus as Record<string, unknown>[]) ?? [];\n return { gpus: gpus.map(deploymentGpuInfoFromResponse) };\n}\n\nexport function deploymentLogsResponseFromResponse(data: Record<string, unknown>): DeploymentLogsResponse {\n const rawLogs = (data.logs as Record<string, unknown>[]) ?? [];\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n logs: rawLogs.map((entry) => ({\n timestamp: (entry.timestamp as string) ?? \"\",\n level: (entry.level as string) ?? \"INFO\",\n message: (entry.message as string) ?? \"\",\n })),\n };\n}\n\nexport function deploymentCostResponseFromResponse(data: Record<string, unknown>): DeploymentCostResponse {\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n status: (data.status as string) ?? \"unknown\",\n gpuAllocated: (data.gpu_allocated as string) ?? (data.gpuAllocated as string),\n hoursRunning: (data.hours_running as number) ?? (data.hoursRunning as number),\n pricePerHourUsd: (data.price_per_hour_usd as number) ?? (data.pricePerHourUsd as number),\n estimatedCostUsd: (data.estimated_cost_usd as number) ?? (data.estimatedCostUsd as number),\n note: (data.note as string) ?? null,\n };\n}\n\nexport class Deployments {\n constructor(private _client: Client) {}\n\n async create(options: DeploymentCreateOptions): Promise<DeploymentInfo> {\n const data = (await this._client._request(\"POST\", \"/deployments\", {\n body: JSON.stringify({\n model_name: options.modelName,\n hf_model_id: options.hfModelId,\n gpu_tier: options.gpuTier,\n region: options.region,\n hf_token: options.hfToken,\n runpod_key: options.runpodKey,\n webhook_url: options.webhookUrl,\n cache_scope: options.cacheScope,\n provider: options.provider,\n task: options.task,\n user_s3_url: options.userS3Url,\n user_aws_access_key_id: options.userAwsAccessKeyId,\n user_aws_secret_access_key: options.userAwsSecretAccessKey,\n user_aws_endpoint_url: options.userAwsEndpointUrl,\n }),\n })) as Record<string, unknown>;\n return deploymentInfoFromResponse(data);\n }\n\n async list(): Promise<DeploymentListResponse> {\n const data = (await this._client._request(\"GET\", \"/deployments\")) as Record<string, unknown>;\n return deploymentListResponseFromResponse(data);\n }\n\n async get(deploymentId: string): Promise<DeploymentInfo> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}`\n )) as Record<string, unknown>;\n return deploymentInfoFromResponse(data);\n }\n\n async delete(deploymentId: string): Promise<void> {\n await this._client._request(\"DELETE\", `/deployments/${encodeURIComponent(deploymentId)}`);\n }\n\n async run(deploymentId: string, input: Record<string, unknown>): Promise<Record<string, unknown>> {\n const data = (await this._client._request(\"POST\", `/deployments/${encodeURIComponent(deploymentId)}/run`, {\n body: JSON.stringify({ input } satisfies DeploymentRunRequest),\n })) as Record<string, unknown>;\n return data;\n }\n\n async getLogs(deploymentId: string): Promise<DeploymentLogsResponse> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}/logs`\n )) as Record<string, unknown>;\n return deploymentLogsResponseFromResponse(data);\n }\n\n async getCost(deploymentId: string): Promise<DeploymentCostResponse> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}/cost`\n )) as Record<string, unknown>;\n return deploymentCostResponseFromResponse(data);\n }\n\n async listGpus(): Promise<DeploymentGpuListResponse> {\n const data = (await this._client._request(\"GET\", \"/deployments/gpus\")) as Record<string, unknown>;\n return deploymentGpuListResponseFromResponse(data);\n }\n\n /**\n * Streams deployment status events (SSE).\n * Returns an abort function to stop streaming.\n */\n streamStatus(\n deploymentId: string,\n onEvent: (event: StreamStatusEvent) => void,\n onError?: (error: Error) => void\n ): () => void {\n const controller = new AbortController();\n const base = this._client.baseUrl.replace(/\\/$/, \"\");\n const url = `${base}/deployments/${encodeURIComponent(deploymentId)}/stream`;\n const headers: Record<string, string> = {};\n if (this._client.apiKey) headers.Authorization = `Bearer ${this._client.apiKey}`;\n\n void (async () => {\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n signal: controller.signal,\n });\n if (!response.ok || !response.body) {\n throw new Error(`SSE stream failed with status ${response.status}`);\n }\n\n const decoder = new TextDecoder();\n const reader = response.body.getReader();\n let buffer = \"\";\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n const events = buffer.split(\"\\n\\n\");\n buffer = events.pop() ?? \"\";\n for (const rawEvent of events) {\n const dataLine = rawEvent\n .split(\"\\n\")\n .find((line) => line.startsWith(\"data:\"));\n if (!dataLine) continue;\n const payload = dataLine.slice(5).trim();\n if (!payload) continue;\n try {\n const parsed = JSON.parse(payload) as Record<string, unknown>;\n onEvent({\n deploymentId:\n (parsed.deployment_id as string) ??\n (parsed.deploymentId as string) ??\n deploymentId,\n status: parsed.status as string | undefined,\n endpointUrl:\n (parsed.endpoint_url as string | undefined) ??\n (parsed.endpointUrl as string | undefined),\n estimatedRemainingSeconds: parsed.estimated_remaining_seconds as number | undefined,\n error: parsed.error as string | undefined,\n });\n } catch {\n // Ignore malformed chunk.\n }\n }\n }\n } catch (err) {\n if (!controller.signal.aborted) {\n const error = err instanceof Error ? err : new Error(String(err));\n onError?.(error);\n }\n }\n })();\n\n return () => controller.abort();\n }\n}\n","/** Provider key management and balance resources */\n\nimport type { Client } from \"../client\";\n\nexport interface ProviderKeyInfo {\n provider: string;\n validated: boolean;\n validatedAt?: string | null;\n maskedKey?: string | null;\n}\n\nexport function providerKeyInfoFromResponse(data: Record<string, unknown>): ProviderKeyInfo {\n return {\n provider: (data.provider as string) ?? \"\",\n validated: Boolean(data.validated),\n validatedAt: data.validated_at as string | undefined,\n maskedKey: data.masked_key as string | undefined,\n };\n}\n\nexport interface ProviderKeysResponse {\n keys: ProviderKeyInfo[];\n}\n\nexport function providerKeysResponseFromResponse(data: Record<string, unknown>): ProviderKeysResponse {\n const keys = (data.keys as Record<string, unknown>[]) ?? [];\n return { keys: keys.map(providerKeyInfoFromResponse) };\n}\n\nexport interface ProviderValidationResult {\n valid: boolean;\n message: string;\n}\n\nexport function providerValidationResultFromResponse(\n data: Record<string, unknown>\n): ProviderValidationResult {\n return {\n valid: Boolean(data.valid),\n message: String(data.message ?? \"\"),\n };\n}\n\nexport interface ProviderBalanceItem {\n provider: string;\n configured: boolean;\n available: boolean;\n limit?: number | null;\n remaining?: number | null;\n currency?: string | null;\n message?: string | null;\n}\n\nexport function providerBalanceItemFromResponse(data: Record<string, unknown>): ProviderBalanceItem {\n return {\n provider: (data.provider as string) ?? \"\",\n configured: Boolean(data.configured),\n available: Boolean(data.available),\n limit: data.limit as number | undefined,\n remaining: data.remaining as number | undefined,\n currency: data.currency as string | undefined,\n message: data.message as string | undefined,\n };\n}\n\nexport interface ProviderBalancesResponse {\n balances: ProviderBalanceItem[];\n}\n\nexport function providerBalancesResponseFromResponse(\n data: Record<string, unknown>\n): ProviderBalancesResponse {\n const balances = (data.balances as Record<string, unknown>[]) ?? [];\n return { balances: balances.map(providerBalanceItemFromResponse) };\n}\n\nexport class Providers {\n constructor(private _client: Client) {}\n\n async listKeys(): Promise<ProviderKeysResponse> {\n const data = (await this._client._request(\"GET\", \"/providers/keys\")) as Record<string, unknown>;\n return providerKeysResponseFromResponse(data);\n }\n\n async setKey(provider: string, apiKey: string): Promise<ProviderKeyInfo> {\n const data = (await this._client._request(\"PUT\", \"/providers/keys\", {\n body: JSON.stringify({ provider, api_key: apiKey }),\n })) as Record<string, unknown>;\n return providerKeyInfoFromResponse(data);\n }\n\n async deleteKey(provider: string): Promise<Record<string, unknown>> {\n return (await this._client._request(\"DELETE\", `/providers/keys/${encodeURIComponent(provider)}`)) as Record<\n string,\n unknown\n >;\n }\n\n async validateKey(provider: string, apiKey: string): Promise<ProviderValidationResult> {\n const data = (await this._client._request(\"POST\", \"/providers/validate\", {\n body: JSON.stringify({ provider, api_key: apiKey }),\n })) as Record<string, unknown>;\n return providerValidationResultFromResponse(data);\n }\n\n async balances(): Promise<ProviderBalancesResponse> {\n const data = (await this._client._request(\"GET\", \"/providers/balances\")) as Record<string, unknown>;\n return providerBalancesResponseFromResponse(data);\n }\n}\n","/**\n * Async generation request status: GET /v1/requests/{request_id}\n * Used after POST /videos/generate or /images/generate with Prefer: respond-async (202).\n */\n\nimport type { Client } from \"../client\";\n\nexport interface RequestStatusResult {\n requestId: string;\n status: \"pending\" | \"processing\" | \"completed\" | \"failed\";\n mediaType: string;\n provider: string;\n model: string;\n outputUrl: string | null;\n errorMessage: string | null;\n createdAt: string | null;\n completedAt: string | null;\n}\n\nexport function requestStatusFromResponse(data: Record<string, unknown>): RequestStatusResult {\n return {\n requestId: (data.request_id as string) ?? (data.requestId as string),\n status: (data.status as RequestStatusResult[\"status\"]) ?? \"pending\",\n mediaType: (data.media_type as string) ?? \"video\",\n provider: (data.provider as string) ?? \"\",\n model: (data.model as string) ?? \"\",\n outputUrl: (data.output_url as string) ?? null,\n errorMessage: (data.error_message as string) ?? null,\n createdAt: (data.created_at as string) ?? null,\n completedAt: (data.completed_at as string) ?? null,\n };\n}\n\nexport class Requests {\n constructor(private _client: Client) {}\n\n /** Get status of an async generation request (video/image). */\n async get(requestId: string): Promise<RequestStatusResult> {\n const data = (await this._client._request(\"GET\", `/requests/${encodeURIComponent(requestId)}`)) as Record<string, unknown>;\n return requestStatusFromResponse(data);\n }\n}\n","/** Usage and billing: GET /usage, /usage/logs, /dashboard */\n\nimport type { Client } from \"../client\";\n\n/** Dashboard response shape (GET /dashboard). */\nexport interface DashboardResponse {\n total_generations: number;\n total_cost_usd: number;\n avg_latency_ms: number;\n cache_hit_rate: number;\n cached_requests: number;\n success_rate: number;\n cost_per_day: Array<{ date: string; cost_usd: number; requests: number }>;\n top_models_used: Array<{ model: string; count: number; total_cost_usd: number }>;\n period_days: number;\n}\nimport { parseDateTime } from \"../utils\";\n\nexport interface UsageSummary {\n totalRequests: number;\n successfulRequests: number;\n failedRequests: number;\n cachedRequests: number;\n totalProviderCost: number;\n totalBilledCost: number;\n totalSavings: number;\n byProvider: Record<string, number>;\n byModel: Record<string, number>;\n period: string;\n periodStart: Date | null;\n periodEnd: Date | null;\n cacheHitRate: number;\n /** Average latency in seconds (from API avg_latency) */\n avgLatency?: number;\n /** Raw provider breakdown: provider -> { requests, cost, ... } */\n providerBreakdown?: Record<string, { requests: number; cost: number; providerChargeCost?: number; providerEffectiveCost?: number; savingsCost?: number }>;\n /** Daily/history records when returned by API */\n history?: Record<string, unknown>[];\n}\n\nfunction byProviderFromBreakdown(providerBreakdown: Record<string, unknown> | undefined): Record<string, number> {\n if (!providerBreakdown || typeof providerBreakdown !== \"object\") return {};\n const out: Record<string, number> = {};\n for (const [provider, stats] of Object.entries(providerBreakdown)) {\n const s = stats as Record<string, unknown>;\n const requests = (s?.requests as number) ?? 0;\n if (provider) out[provider] = requests;\n }\n return out;\n}\n\nexport function usageSummaryFromResponse(data: Record<string, unknown>): UsageSummary {\n const totalRequests = (data.total_requests as number) ?? 0;\n const cachedRequests = (data.cached_requests as number) ?? 0;\n const cacheHitRateFromApi = data.cache_hit_rate as number | undefined;\n const cacheHitRate =\n typeof cacheHitRateFromApi === \"number\"\n ? cacheHitRateFromApi\n : totalRequests === 0\n ? 0\n : (cachedRequests / totalRequests) * 100;\n const providerBreakdown = data.provider_breakdown as Record<string, unknown> | undefined;\n const history = data.history as Record<string, unknown>[] | undefined;\n return {\n totalRequests,\n successfulRequests: (data.successful_requests as number) ?? 0,\n failedRequests: (data.failed_requests as number) ?? 0,\n cachedRequests,\n totalProviderCost:\n (data.total_provider_effective_cost as number) ?? (data.total_provider_cost as number) ?? 0,\n totalBilledCost: (data.total_billed_cost as number) ?? (data.total_cost_usd as number) ?? 0,\n totalSavings: (data.total_savings as number) ?? 0,\n byProvider:\n (data.by_provider as Record<string, number>) ?? byProviderFromBreakdown(providerBreakdown),\n byModel: (data.by_model as Record<string, number>) ?? {},\n period: (data.period as string) ?? \"month\",\n periodStart: parseDateTime(data.period_start as string | undefined),\n periodEnd: parseDateTime(data.period_end as string | undefined),\n cacheHitRate,\n avgLatency: data.avg_latency as number | undefined,\n providerBreakdown: providerBreakdown as UsageSummary[\"providerBreakdown\"],\n history: Array.isArray(history) ? history : undefined,\n };\n}\n\nexport class Usage {\n constructor(private _client: Client) {}\n\n async get(period: string = \"month\"): Promise<UsageSummary> {\n const data = (await this._client._request(\"GET\", `/usage?period=${encodeURIComponent(period)}`)) as Record<\n string,\n unknown\n >;\n return usageSummaryFromResponse(data);\n }\n\n async logs(options: { limit?: number; offset?: number } = {}): Promise<Record<string, unknown>[]> {\n const { limit = 50, offset = 0 } = options;\n const params = new URLSearchParams();\n params.set(\"limit\", String(limit));\n params.set(\"offset\", String(offset));\n const data = (await this._client._request(\"GET\", `/usage/logs?${params.toString()}`)) as\n | Record<string, unknown>[]\n | Record<string, unknown>;\n if (Array.isArray(data)) return data;\n return (data.logs as Record<string, unknown>[]) ?? [];\n }\n\n async dashboard(period: string = \"month\"): Promise<Record<string, unknown>> {\n return (await this._client._request(\n \"GET\",\n `/dashboard?period=${encodeURIComponent(period)}`\n )) as Record<string, unknown>;\n }\n\n /**\n * Track a download event for a request (POST /usage/downloads).\n * Increments download_count and adds timestamp to downloaded_at.\n */\n async trackDownload(\n requestId: string,\n outputUrl: string,\n options?: { mediaType?: string }\n ): Promise<{ success: boolean; request_id: string; download_count: number }> {\n const body: Record<string, unknown> = { request_id: requestId, output_url: outputUrl };\n if (options?.mediaType) body.media_type = options.mediaType;\n const data = (await this._client._request(\"POST\", \"/usage/downloads\", {\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n return {\n success: Boolean(data.success),\n request_id: (data.request_id as string) ?? requestId,\n download_count: (data.download_count as number) ?? 0,\n };\n }\n}\n","/**\n * Video generation: POST /videos/generate\n *\n * Mirrors the Python SDK example 04_videos_all_providers: managed mode and\n * BYOK (Fal, Replicate, Runway) with provider-specific model IDs.\n *\n * @example Managed (platform keys)\n * ```ts\n * const r = await client.videos.generate(\"fal-ai/veo3\", prompt, { durationSeconds: 6, skipGcsUpload: true, preferAsync: true });\n * ```\n *\n * @example BYOK – use client options or proxy env (X-Fal-Key, X-Replicate-Key, X-Runway-Key)\n * ```ts\n * // Fal (veo3; alternative: fal-ai/flux-pro)\n * client.videos.generate(\"fal-ai/veo3\", prompt, { durationSeconds: 6, skipGcsUpload: true, preferAsync: true });\n * // Replicate\n * client.videos.generate(\"replicate/lucataco/cogvideox-5b\", prompt, { durationSeconds: 5, skipGcsUpload: true, preferAsync: true });\n * // Runway\n * client.videos.generate(\"runway/gen4_turbo\", prompt, { durationSeconds: 5, skipGcsUpload: true, preferAsync: true });\n * ```\n */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\n/**\n * Convert a File or Blob to a data URL (data:image/...;base64,...).\n * Uses FileReader in browser, Blob.arrayBuffer() + Buffer in Node 18+.\n */\nfunction blobToDataUrl(blob: File | Blob): Promise<string> {\n if (typeof FileReader !== \"undefined\") {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") resolve(reader.result);\n else reject(new Error(\"FileReader did not return a string\"));\n };\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(blob);\n });\n }\n // Node 18+: Blob has arrayBuffer(); use global Buffer if available for large blobs\n return (async () => {\n const ab = await blob.arrayBuffer();\n const mime = blob.type || \"image/jpeg\";\n const NodeBuffer =\n typeof globalThis !== \"undefined\" &&\n (globalThis as unknown as { Buffer?: { from(a: ArrayBuffer): { toString(e: string): string } } }).Buffer;\n const base64 = NodeBuffer\n ? NodeBuffer.from(ab).toString(\"base64\")\n : btoa(String.fromCharCode(...new Uint8Array(ab)));\n return `data:${mime};base64,${base64}`;\n })();\n}\n\n/** Recommended video model IDs per provider (align with working 06_videos_all_providers; Fal uses veo3). */\nexport const VIDEO_MODEL_PRESETS = {\n fal: \"fal-ai/veo3\",\n replicate: \"replicate/lucataco/cogvideox-5b\",\n runway: \"runway/gen4_turbo\",\n} as const;\n\nexport interface VideoResult {\n id: string;\n /** Request status: \"success\" | \"cached\" | \"failed\" */\n status?: string;\n videoUrl: string | null;\n model: string;\n provider: string;\n cost: number;\n /** True when response was served from cache (exact or semantic match). */\n cacheHit: boolean;\n latencyMs: number | null;\n savedAmount?: number;\n marginPercent?: number;\n /** When cache hit: \"exact\" (hash match) or \"semantic\" (similarity match). */\n cacheSource?: \"exact\" | \"semantic\" | null;\n createdAt: Date | null;\n}\n\nexport function videoResultFromResponse(data: Record<string, unknown>): VideoResult {\n const cacheSource = data.cache_source as string | undefined;\n return {\n id: data.id as string,\n status: data.status as string | undefined,\n videoUrl: (data.video_url as string) ?? null,\n model: data.model as string,\n provider: data.provider as string,\n cost: (data.cost as number) ?? 0,\n cacheHit: (data.cache_hit as boolean) ?? false,\n latencyMs: (data.latency_ms as number) ?? null,\n savedAmount: data.saved_amount as number | undefined,\n marginPercent: data.margin_percent as number | undefined,\n cacheSource:\n cacheSource === \"exact\" || cacheSource === \"semantic\" ? cacheSource : undefined,\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\n/** Result when using preferAsync: true — API returns 202, poll client.requests.get(requestId). */\nexport interface AsyncVideoAccepted {\n requestId: string;\n status: \"accepted\";\n}\n\nexport interface VideosGenerateOptions {\n /** Input image URL for image-to-video. */\n imageUrl?: string | null;\n /**\n * Input image as File or Blob (e.g. from file input). Converted to data URL and sent as image_url.\n * Takes precedence over imageUrl if both are set.\n */\n imageFile?: File | Blob;\n /** Duration in seconds (default 5). */\n durationSeconds?: number;\n fps?: number;\n /** URL to call when generation is complete (async callback). */\n webhookUrl?: string | null;\n /** ID to include in the callback payload. */\n callbackId?: string | null;\n /** Skip uploading result to GCS; return provider URL directly. Faster, use when behind short timeouts. */\n skipGcsUpload?: boolean;\n /**\n * Use async mode: API returns 202 immediately, poll client.requests.get(requestId) for status.\n * Avoids 502 when video takes longer than proxy/Cloudflare timeout.\n */\n preferAsync?: boolean;\n /** Extra provider-specific params (merged into request body). */\n params?: Record<string, unknown>;\n}\n\nexport class Videos {\n constructor(private _client: Client) {}\n\n /**\n * Generate a video from a prompt (and optional image for img2vid).\n * Supports managed mode and BYOK (set falKey/replicateKey/runwayKey on client or via proxy env).\n * Use preferAsync: true to avoid 502 when video takes longer than proxy/Cloudflare timeout.\n */\n async generate(\n model: string,\n prompt: string,\n options: VideosGenerateOptions = {}\n ): Promise<VideoResult | AsyncVideoAccepted> {\n const {\n imageUrl,\n imageFile,\n durationSeconds = 5,\n fps,\n webhookUrl,\n callbackId,\n skipGcsUpload,\n preferAsync,\n params,\n } = options;\n\n let resolvedImageUrl: string | null = null;\n if (imageFile) {\n resolvedImageUrl = await blobToDataUrl(imageFile);\n } else if (imageUrl) {\n resolvedImageUrl = imageUrl;\n }\n\n const payload: Record<string, unknown> = {\n model,\n prompt,\n duration_seconds: durationSeconds,\n };\n if (resolvedImageUrl) payload.image_url = resolvedImageUrl;\n if (fps != null) payload.fps = fps;\n if (webhookUrl) payload.webhook_url = webhookUrl;\n if (callbackId) payload.callback_id = callbackId;\n if (skipGcsUpload === true) payload.skip_gcs_upload = true;\n if (preferAsync === true) payload.prefer_async = true;\n if (params && Object.keys(params).length > 0) Object.assign(payload, params);\n\n const headers: Record<string, string> = {};\n if (preferAsync === true) headers[\"Prefer\"] = \"respond-async\";\n\n const pathWithQuery = preferAsync === true ? \"/videos/generate?async=true\" : \"/videos/generate\";\n const data = (await this._client._request(\"POST\", pathWithQuery, {\n body: JSON.stringify(payload),\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n })) as Record<string, unknown>;\n\n // 202 Accepted: API returns { request_id }; poll client.requests.get(requestId)\n if (\"request_id\" in data && typeof data.request_id === \"string\" && !(\"video_url\" in data)) {\n return { requestId: data.request_id, status: \"accepted\" };\n }\n return videoResultFromResponse(data);\n }\n}\n","/**\n * Visgate API client (all methods return Promises in JS).\n */\n\nimport {\n AuthenticationError,\n ProviderError,\n RateLimitError,\n ValidationError,\n VisgateConnectionError,\n VisgateError,\n VisgateTimeoutError,\n} from \"./exceptions\";\nimport { Billing } from \"./resources/billing\";\nimport { Generate, type GenerateResult } from \"./resources/generate\";\nimport { Images } from \"./resources/images\";\nimport { Models } from \"./resources/models\";\nimport { Deployments } from \"./resources/deployments\";\nimport { Providers } from \"./resources/providers\";\nimport { Requests } from \"./resources/requests\";\nimport { Usage } from \"./resources/usage\";\nimport { Videos } from \"./resources/videos\";\nimport { resolveApiKey } from \"./utils\";\n\nconst DEFAULT_BASE_URL = \"https://visgateai.com/api/v1\";\nconst DEFAULT_TIMEOUT = 120_000; // ms\nconst DEFAULT_MAX_RETRIES = 2;\n\nconst RETRYABLE_STATUS_CODES = new Set([429, 500, 502, 503, 504]);\n\nconst SDK_VERSION = \"0.3.3\";\n\nfunction getVersion(): string {\n try {\n // @ts-expect-error - optional for bundlers\n if (typeof __VERSION__ !== \"undefined\") return __VERSION__;\n } catch {\n // ignore\n }\n return SDK_VERSION;\n}\n\nexport interface ClientOptions {\n apiKey?: string | null;\n /** When set, requests go to this URL and no API key is sent (key is added by the proxy). */\n proxyUrl?: string;\n /**\n * When set, the client calls this before each request and sends the result as Bearer token.\n * Use with proxyUrl for session-based auth (e.g. Firebase getIdToken); the proxy forwards the token to the API.\n */\n getToken?: () => string | Promise<string>;\n baseUrl?: string;\n timeout?: number;\n maxRetries?: number;\n falKey?: string | null;\n replicateKey?: string | null;\n runwayKey?: string | null;\n runpodKey?: string | null;\n}\n\nfunction buildHeaders(\n apiKey: string | null,\n options: {\n falKey?: string | null;\n replicateKey?: string | null;\n runwayKey?: string | null;\n runpodKey?: string | null;\n }\n): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"User-Agent\": `visgate-client/${getVersion()}`,\n };\n if (apiKey) headers.Authorization = `Bearer ${apiKey}`;\n if (options.falKey) headers[\"X-Fal-Key\"] = options.falKey;\n if (options.replicateKey) headers[\"X-Replicate-Key\"] = options.replicateKey;\n if (options.runwayKey) headers[\"X-Runway-Key\"] = options.runwayKey;\n if (options.runpodKey) headers[\"X-Runpod-Key\"] = options.runpodKey;\n return headers;\n}\n\nfunction backoff(attempt: number): number {\n return Math.min(0.5 * Math.pow(2, attempt), 8) * 1000; // ms\n}\n\nfunction retryWaitFromResponse(response: Response, attempt: number): number {\n const retryAfter = response.headers.get(\"Retry-After\");\n if (retryAfter) {\n const sec = parseInt(retryAfter, 10);\n if (!isNaN(sec)) return sec * 1000;\n }\n return backoff(attempt);\n}\n\nasync function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** @internal Exported for tests. */\nexport async function handleResponse(response: Response): Promise<unknown> {\n const status = response.status;\n\n if (status < 400) {\n const text = await response.text();\n if (!text) return {};\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return {};\n }\n }\n\n let body: Record<string, unknown> = {};\n const text = await response.text();\n try {\n if (text) body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n // use text as message below\n }\n\n if (status === 401) {\n throw new AuthenticationError(\"Invalid or missing API key\");\n }\n\n if (status === 422) {\n const message = (body.message as string) ?? text ?? \"Validation failed\";\n const field = (body.details as Record<string, unknown>)?.field as string | undefined;\n throw new ValidationError(message, field);\n }\n\n if (status === 429) {\n const retryAfterHeader = response.headers.get(\"Retry-After\");\n const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;\n throw new RateLimitError(\"Rate limit exceeded\", Number.isNaN(retryAfter) ? undefined : retryAfter);\n }\n\n const errorCode = (body.error as string) ?? `HTTP_${status}`;\n const message = (body.message as string) ?? text ?? \"Request failed\";\n\n if (String(errorCode).includes(\"PROVIDER\")) {\n const provider = ((body.details as Record<string, unknown>)?.provider as string) ?? \"unknown\";\n throw new ProviderError(message, provider);\n }\n\n throw new VisgateError(message, errorCode, body.details as Record<string, unknown> ?? {}, status);\n}\n\nexport interface RequestInitWithBody {\n body?: string;\n headers?: Record<string, string>;\n}\n\nexport class Client {\n readonly apiKey: string | null;\n readonly baseUrl: string;\n readonly maxRetries: number;\n readonly timeout: number;\n private readonly headers: Record<string, string>;\n private readonly getToken: (() => string | Promise<string>) | null;\n readonly images: Images;\n readonly models: Models;\n readonly videos: Videos;\n readonly requests: Requests;\n readonly usage: Usage;\n readonly providers: Providers;\n readonly deployments: Deployments;\n readonly billing: Billing;\n private _generate: Generate;\n\n constructor(options: ClientOptions = {}) {\n // When using proxy, still send apiKey if provided (e.g. playground: proxy URL + API key in input)\n this.apiKey = options.proxyUrl\n ? (options.apiKey != null && options.apiKey !== \"\" ? resolveApiKey(options.apiKey) : null)\n : resolveApiKey(options.apiKey);\n this.getToken = options.getToken ?? null;\n this.baseUrl = (options.proxyUrl ?? options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\");\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.headers = buildHeaders(this.apiKey, options.proxyUrl ? {} : {\n falKey: options.falKey,\n replicateKey: options.replicateKey,\n runwayKey: options.runwayKey,\n runpodKey: options.runpodKey,\n });\n\n this.images = new Images(this);\n this.models = new Models(this);\n this.videos = new Videos(this);\n this.requests = new Requests(this);\n this.usage = new Usage(this);\n this.providers = new Providers(this);\n this.deployments = new Deployments(this);\n this.billing = new Billing(this);\n this._generate = new Generate(this);\n }\n\n /**\n * Generate an image with a single call.\n */\n generate(\n prompt: string,\n options?: { model?: string; params?: Record<string, unknown> }\n ): Promise<GenerateResult> {\n return this._generate.__call__(prompt, options?.model, options?.params);\n }\n\n /**\n * Check API health status.\n */\n health(): Promise<Record<string, unknown>> {\n return this._request(\"GET\", \"/health\") as Promise<Record<string, unknown>>;\n }\n\n async _request(method: string, path: string, init: RequestInitWithBody = {}): Promise<unknown> {\n const url = `${this.baseUrl}${path}`;\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n let headers: Record<string, string> = { ...this.headers, ...(init.headers as Record<string, string>) };\n if (this.getToken) {\n const token = await Promise.resolve(this.getToken());\n headers = { ...headers, Authorization: `Bearer ${token}` };\n }\n const fetchInit: RequestInit = {\n method,\n ...init,\n headers,\n signal: controller.signal,\n };\n if (method !== \"GET\" && init.body !== undefined) {\n fetchInit.body = init.body;\n }\n const response = await fetch(url, fetchInit);\n clearTimeout(timeoutId);\n\n if (RETRYABLE_STATUS_CODES.has(response.status) && attempt < this.maxRetries) {\n const waitMs = retryWaitFromResponse(response, attempt);\n await sleep(waitMs);\n continue;\n }\n\n return await handleResponse(response);\n } catch (err) {\n clearTimeout(timeoutId);\n lastError = err instanceof Error ? err : new Error(String(err));\n\n if (err instanceof AuthenticationError && this.apiKey === null && !this.getToken) {\n throw new AuthenticationError(\"Proxy returned 401. Check VISGATE_API_KEY on the server (proxy).\");\n }\n if (err instanceof AuthenticationError && this.getToken) {\n throw new AuthenticationError(\"Proxy returned 401. Check getToken returns a valid session token.\");\n }\n if (err instanceof VisgateError && !(err instanceof RateLimitError)) throw err;\n if (attempt >= this.maxRetries) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new VisgateTimeoutError(`Request timed out after ${this.maxRetries + 1} attempt(s)`);\n }\n if (err instanceof TypeError && err.message.includes(\"fetch\")) {\n throw new VisgateConnectionError(`Connection failed: ${err.message}`);\n }\n throw err;\n }\n const waitMs = backoff(attempt);\n await sleep(waitMs);\n }\n }\n\n throw new VisgateError(\n `Request failed after ${this.maxRetries + 1} attempts`,\n \"VISGATE_ERROR\",\n {},\n undefined\n );\n }\n\n /** No-op for API compatibility (JS has no connection pool to close). */\n close(): void {}\n\n toString(): string {\n return `Client(baseUrl=${JSON.stringify(this.baseUrl)})`;\n }\n}\n\n/**\n * Async client — same as Client; all methods return Promises.\n * Provided for API parity with Python AsyncClient.\n */\nexport class AsyncClient extends Client {\n constructor(options: ClientOptions = {}) {\n super(options);\n }\n\n override toString(): string {\n return `AsyncClient(baseUrl=${JSON.stringify(this.baseUrl)})`;\n }\n}\n","/**\n * Visgate JavaScript/TypeScript SDK — unified client for the Visgate vision AI gateway.\n */\n\nexport { Client, AsyncClient, type ClientOptions } from \"./client\";\nexport {\n VisgateError,\n AuthenticationError,\n ValidationError,\n RateLimitError,\n ProviderError,\n VisgateTimeoutError,\n VisgateConnectionError,\n type VisgateErrorDetails,\n} from \"./exceptions\";\nexport {\n generateResultFromResponse,\n Generate,\n type GenerateResult,\n} from \"./resources/generate\";\nexport {\n imageResultFromResponse,\n Images,\n type ImageResult,\n type ImagesGenerateOptions,\n} from \"./resources/images\";\nexport {\n videoResultFromResponse,\n Videos,\n VIDEO_MODEL_PRESETS,\n type VideoResult,\n type VideosGenerateOptions,\n type AsyncVideoAccepted,\n} from \"./resources/videos\";\nexport {\n modelInfoFromResponse,\n featuredSectionFromResponse,\n modelsResponseFromResponse,\n Models,\n type ModelInfo,\n type FeaturedSection,\n type ModelsResponse,\n type ModelsListOptions,\n} from \"./resources/models\";\nexport {\n requestStatusFromResponse,\n Requests,\n type RequestStatusResult,\n} from \"./resources/requests\";\nexport {\n usageSummaryFromResponse,\n Usage,\n type UsageSummary,\n type DashboardResponse,\n} from \"./resources/usage\";\nexport {\n providerKeyInfoFromResponse,\n providerKeysResponseFromResponse,\n providerValidationResultFromResponse,\n providerBalanceItemFromResponse,\n providerBalancesResponseFromResponse,\n Providers,\n type ProviderKeyInfo,\n type ProviderKeysResponse,\n type ProviderValidationResult,\n type ProviderBalanceItem,\n type ProviderBalancesResponse,\n} from \"./resources/providers\";\nexport {\n billingInfoFromResponse,\n modelPricingFromResponse,\n pricingResponseFromResponse,\n Billing,\n type BillingInfo,\n type ModelPricing,\n type PricingResponse,\n type CheckoutOptions,\n} from \"./resources/billing\";\nexport {\n deploymentInfoFromResponse,\n deploymentListResponseFromResponse,\n deploymentGpuInfoFromResponse,\n deploymentGpuListResponseFromResponse,\n deploymentLogsResponseFromResponse,\n deploymentCostResponseFromResponse,\n Deployments,\n type DeploymentCreateOptions,\n type DeploymentInfo,\n type DeploymentListResponse,\n type DeploymentGpuInfo,\n type DeploymentGpuListResponse,\n type DeploymentLogEntry,\n type DeploymentLogsResponse,\n type DeploymentCostResponse,\n type DeploymentRunRequest,\n type StreamStatusEvent,\n} from \"./resources/deployments\";\n\nexport const VERSION = \"0.3.3\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/exceptions.ts","../src/resources/billing.ts","../src/utils.ts","../src/resources/generate.ts","../src/resources/images.ts","../src/resources/models.ts","../src/resources/deployments.ts","../src/resources/hf-models.ts","../src/resources/providers.ts","../src/resources/requests.ts","../src/resources/usage.ts","../src/resources/videos.ts","../src/client.ts","../src/index.ts"],"names":["text","message"],"mappings":"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","file":"index.js","sourcesContent":["/** Visgate SDK exceptions. All extend VisgateError. */\n\nexport interface VisgateErrorDetails {\n [key: string]: unknown;\n}\n\n/**\n * Base exception for all Visgate SDK errors.\n */\nexport class VisgateError extends Error {\n readonly message: string;\n readonly errorCode: string;\n readonly details: VisgateErrorDetails;\n readonly statusCode?: number;\n\n constructor(\n message: string,\n errorCode: string = \"VISGATE_ERROR\",\n details: VisgateErrorDetails = {},\n statusCode?: number\n ) {\n super(message);\n this.name = \"VisgateError\";\n this.message = message;\n this.errorCode = errorCode;\n this.details = details;\n this.statusCode = statusCode;\n Object.setPrototypeOf(this, VisgateError.prototype);\n }\n\n override toString(): string {\n return `[${this.errorCode}] ${this.message}`;\n }\n}\n\n/** 401 — invalid or missing API key. */\nexport class AuthenticationError extends VisgateError {\n constructor(message: string = \"Invalid or missing API key\") {\n super(message, \"AUTHENTICATION_ERROR\", {}, 401);\n this.name = \"AuthenticationError\";\n Object.setPrototypeOf(this, AuthenticationError.prototype);\n }\n}\n\n/** 422 — invalid request parameters. */\nexport class ValidationError extends VisgateError {\n readonly field?: string;\n\n constructor(message: string, field?: string) {\n super(message, \"VALIDATION_ERROR\", field ? { field } : {}, 422);\n this.name = \"ValidationError\";\n this.field = field;\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\n/** 429 — too many requests. */\nexport class RateLimitError extends VisgateError {\n readonly retryAfter?: number;\n\n constructor(message: string = \"Rate limit exceeded\", retryAfter?: number) {\n super(message, \"RATE_LIMIT_ERROR\", retryAfter != null ? { retry_after: retryAfter } : {}, 429);\n this.name = \"RateLimitError\";\n this.retryAfter = retryAfter;\n Object.setPrototypeOf(this, RateLimitError.prototype);\n }\n}\n\n/** Upstream provider error (e.g. Fal, Replicate, Runway). */\nexport class ProviderError extends VisgateError {\n readonly provider: string;\n\n constructor(message: string, provider: string = \"unknown\") {\n super(message, \"PROVIDER_ERROR\", { provider });\n this.name = \"ProviderError\";\n this.provider = provider;\n Object.setPrototypeOf(this, ProviderError.prototype);\n }\n}\n\n/** Request timed out before the server responded. */\nexport class VisgateTimeoutError extends VisgateError {\n constructor(message: string = \"Request timed out\") {\n super(message, \"TIMEOUT_ERROR\");\n this.name = \"VisgateTimeoutError\";\n Object.setPrototypeOf(this, VisgateTimeoutError.prototype);\n }\n}\n\n/** Network connection failed. */\nexport class VisgateConnectionError extends VisgateError {\n constructor(message: string = \"Connection failed\") {\n super(message, \"CONNECTION_ERROR\");\n this.name = \"VisgateConnectionError\";\n Object.setPrototypeOf(this, VisgateConnectionError.prototype);\n }\n}\n","/** Billing: GET /billing/stats, /billing/info, /billing/pricing, POST /billing/checkout, /billing/subscription */\n\nimport type { Client } from \"../client\";\n\nexport interface BillingInfo {\n tier: string;\n balanceMicro: number;\n billingStatus: string;\n monthlyBudgetCents?: number | null;\n usageThisMonthCents?: number;\n supportEmail?: string | null;\n companyName?: string | null;\n freeModeEnabled?: boolean;\n}\n\nexport function billingInfoFromResponse(data: Record<string, unknown>): BillingInfo {\n return {\n tier: (data.tier as string) ?? \"free\",\n balanceMicro: (data.balance_micro as number) ?? 0,\n billingStatus: (data.billing_status as string) ?? \"active\",\n monthlyBudgetCents: data.monthly_budget_cents as number | undefined,\n usageThisMonthCents: (data.usage_this_month_cents as number) ?? 0,\n supportEmail: data.support_email as string | undefined,\n companyName: data.company_name as string | undefined,\n freeModeEnabled: data.free_mode_enabled as boolean | undefined,\n };\n}\n\nexport interface ModelPricing {\n id: string;\n providerType: string;\n model: string;\n modelName: string;\n modelType: string;\n modelClass?: string | null;\n costPerUnitMicro: number;\n usageCount: number;\n totalSavingsMicro: number;\n avgSavingsMicro: number;\n}\n\nexport function modelPricingFromResponse(data: Record<string, unknown>): ModelPricing {\n return {\n id: (data.id as string) ?? \"\",\n providerType: (data.provider_type as string) ?? \"\",\n model: (data.model as string) ?? \"\",\n modelName: (data.model_name as string) ?? \"\",\n modelType: (data.model_type as string) ?? \"image\",\n modelClass: data.model_class as string | undefined,\n costPerUnitMicro: (data.cost_per_unit_micro as number) ?? 0,\n usageCount: (data.usage_count as number) ?? 0,\n totalSavingsMicro: (data.total_savings_micro as number) ?? 0,\n avgSavingsMicro: (data.avg_savings_micro as number) ?? 0,\n };\n}\n\nexport interface PricingResponse {\n lastUpdated: string | null;\n pricing: ModelPricing[];\n}\n\nexport function pricingResponseFromResponse(data: Record<string, unknown>): PricingResponse {\n const pricing = (data.pricing as Record<string, unknown>[]) ?? [];\n return {\n lastUpdated: (data.last_updated as string) ?? null,\n pricing: pricing.map(modelPricingFromResponse),\n };\n}\n\nexport interface CheckoutOptions {\n customerEmail?: string | null;\n firebaseUid?: string | null;\n}\n\nexport class Billing {\n constructor(private _client: Client) {}\n\n /** Public billing stats for landing/marketing (GET /billing/stats). May not require auth. */\n async getStats(): Promise<Record<string, unknown>> {\n return (await this._client._request(\"GET\", \"/billing/stats\")) as Record<string, unknown>;\n }\n\n /** Organization billing info (GET /billing/info). */\n async getInfo(): Promise<BillingInfo> {\n const data = (await this._client._request(\"GET\", \"/billing/info\")) as Record<string, unknown>;\n return billingInfoFromResponse(data);\n }\n\n /** Create checkout session (POST /billing/checkout). */\n async checkout(\n amountDollars: number,\n returnUrl: string,\n options?: CheckoutOptions\n ): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = {\n amount_dollars: amountDollars,\n return_url: returnUrl,\n };\n if (options?.customerEmail != null) body.customer_email = options.customerEmail;\n if (options?.firebaseUid != null) body.firebase_uid = options.firebaseUid;\n return (await this._client._request(\"POST\", \"/billing/checkout\", {\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n }\n\n /** Get pricing for all models (GET /billing/pricing). */\n async getPricing(): Promise<PricingResponse> {\n const data = (await this._client._request(\"GET\", \"/billing/pricing\")) as Record<string, unknown>;\n return pricingResponseFromResponse(data);\n }\n\n /** Update organization subscription tier (POST /billing/subscription). */\n async updateSubscription(tier: string): Promise<{ success: boolean; tier: string }> {\n const data = (await this._client._request(\"POST\", \"/billing/subscription\", {\n body: JSON.stringify({ tier }),\n })) as Record<string, unknown>;\n return {\n success: Boolean(data.success),\n tier: (data.tier as string) ?? tier,\n };\n }\n}\n","/** Internal utilities. */\n\nimport { AuthenticationError } from \"./exceptions\";\n\n/**\n * Parse ISO 8601 datetime string (handles Z suffix).\n */\nexport function parseDateTime(value: string | null | undefined): Date | null {\n if (value == null || value === \"\") return null;\n const normalized = value.replace(\"Z\", \"+00:00\");\n const date = new Date(normalized);\n return isNaN(date.getTime()) ? null : date;\n}\n\n/** Detect if we're in a Node-like environment with process.env. */\nfunction hasProcessEnv(): boolean {\n return typeof process !== \"undefined\" && typeof process.env !== \"undefined\";\n}\n\n/**\n * Resolve API key from argument or environment variable.\n * Node: process.env.VISGATE_API_KEY\n * Browser: only from argument (or Vite: import.meta.env.VITE_VISGATE_API_KEY — doc only).\n */\nexport function resolveApiKey(apiKey: string | null | undefined): string {\n const key = apiKey ?? (hasProcessEnv() ? process.env.VISGATE_API_KEY : undefined);\n if (!key || typeof key !== \"string\" || key.trim() === \"\") {\n throw new AuthenticationError(\n \"No API key provided. Pass apiKey or set the VISGATE_API_KEY environment variable.\"\n );\n }\n return key.trim();\n}\n","/** Unified image generation: POST /generate */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\nexport interface GenerateResult {\n id: string;\n status: string;\n imageUrl: string | null;\n images: string[];\n model: string;\n provider: string;\n mode: string;\n cost: number;\n costPerMegapixel: number;\n latencyMs: number;\n resolution: Record<string, number>;\n createdAt: Date | null;\n}\n\nexport function generateResultFromResponse(data: Record<string, unknown>): GenerateResult {\n return {\n id: data.id as string,\n status: (data.status as string) ?? \"success\",\n imageUrl: (data.image_url as string) ?? null,\n images: (data.images as string[]) ?? [],\n model: data.model as string,\n provider: (data.provider as string) ?? \"\",\n mode: (data.mode as string) ?? \"\",\n cost: (data.estimated_cost_usd as number) ?? 0,\n costPerMegapixel: (data.cost_per_megapixel_usd as number) ?? 0,\n latencyMs: (data.latency_ms as number) ?? 0,\n resolution: (data.resolution as Record<string, number>) ?? {},\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\nconst DEFAULT_MODEL = \"fal-ai/flux/schnell\";\n\nexport class Generate {\n constructor(private _client: Client) {}\n\n async __call__(\n prompt: string,\n model: string = DEFAULT_MODEL,\n params?: Record<string, unknown>\n ): Promise<GenerateResult> {\n const payload: Record<string, unknown> = { prompt, model };\n if (params) payload.params = params;\n const data = (await this._client._request(\"POST\", \"/generate\", {\n body: JSON.stringify(payload),\n })) as Record<string, unknown>;\n return generateResultFromResponse(data);\n }\n}\n","/** Image generation: POST /images/generate */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\nexport interface ImageResult {\n id: string;\n /** Request status: \"success\" | \"cached\" | \"failed\" */\n status?: string;\n images: string[];\n model: string;\n provider: string;\n cost: number;\n /** True when response was served from cache (exact or semantic match). */\n cacheHit: boolean;\n latencyMs: number | null;\n savedAmount?: number;\n marginPercent?: number;\n /** When cache hit: \"exact\" (hash match) or \"semantic\" (similarity match). Optional if API returns it. */\n cacheSource?: \"exact\" | \"semantic\" | null;\n createdAt: Date | null;\n}\n\nexport function imageResultFromResponse(data: Record<string, unknown>): ImageResult {\n const cacheSource = data.cache_source as string | undefined;\n return {\n id: data.id as string,\n status: data.status as string | undefined,\n images: (data.images as string[]) ?? [],\n model: data.model as string,\n provider: data.provider as string,\n cost: (data.cost as number) ?? 0,\n cacheHit: (data.cache_hit as boolean) ?? false,\n latencyMs: (data.latency_ms as number) ?? null,\n savedAmount: data.saved_amount as number | undefined,\n marginPercent: data.margin_percent as number | undefined,\n cacheSource:\n cacheSource === \"exact\" || cacheSource === \"semantic\" ? cacheSource : undefined,\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\nexport interface ImagesGenerateOptions {\n negativePrompt?: string | null;\n width?: number;\n height?: number;\n numImages?: number;\n seed?: number | null;\n /** Input image URL for image-to-image */\n imageUrl?: string | null;\n /** Prefer cache (exact or semantic match). Default true. Set false to force fresh generation. */\n preferCache?: boolean;\n /** Max acceptable latency in ms; API may use for routing. */\n maxLatencyMs?: number | null;\n /** URL to call when generation is complete (async callback). */\n webhookUrl?: string | null;\n /** ID to include in the callback payload. */\n callbackId?: string | null;\n params?: Record<string, unknown>;\n}\n\nexport class Images {\n constructor(private _client: Client) {}\n\n async generate(\n model: string,\n prompt: string,\n options: ImagesGenerateOptions = {}\n ): Promise<ImageResult> {\n const {\n negativePrompt,\n width = 1024,\n height = 1024,\n numImages = 1,\n seed,\n imageUrl,\n preferCache,\n maxLatencyMs,\n webhookUrl,\n callbackId,\n params,\n } = options;\n const payload: Record<string, unknown> = {\n model,\n prompt,\n width,\n height,\n num_images: numImages,\n };\n if (negativePrompt) payload.negative_prompt = negativePrompt;\n if (seed != null) payload.seed = seed;\n if (imageUrl) payload.image_url = imageUrl;\n if (preferCache !== undefined) payload.prefer_cache = preferCache;\n if (maxLatencyMs != null) payload.max_latency_ms = maxLatencyMs;\n if (webhookUrl) payload.webhook_url = webhookUrl;\n if (callbackId) payload.callback_id = callbackId;\n if (params) Object.assign(payload, params);\n const data = (await this._client._request(\"POST\", \"/images/generate\", {\n body: JSON.stringify(payload),\n })) as Record<string, unknown>;\n return imageResultFromResponse(data);\n }\n}\n","/** Model catalog: GET /models */\n\nimport type { Client } from \"../client\";\n\nexport interface ModelInfo {\n id: string;\n name: string;\n provider: string;\n mediaType: string;\n description?: string | null;\n category?: string | null;\n tags: string[];\n coverImageUrl?: string | null;\n author?: string | null;\n url?: string | null;\n baseCostMicro: number;\n normalizedCostMicro: number;\n pricing?: string | null;\n pricingUnit?: string | null;\n runCount: number;\n inputTypes: string[];\n outputType?: string | null;\n capabilities: string[];\n firstSeenAt?: string | null;\n providerCreatedAt?: string | null;\n lastSyncedAt?: string | null;\n compliance?: Record<string, unknown> | null;\n}\n\nexport function modelInfoFromResponse(data: Record<string, unknown>): ModelInfo {\n return {\n id: (data.id as string) ?? \"\",\n name: (data.name as string) ?? \"\",\n provider: (data.provider as string) ?? \"\",\n mediaType: (data.media_type as string) ?? \"image\",\n description: data.description as string | undefined,\n category: data.category as string | undefined,\n tags: (data.tags as string[]) ?? [],\n coverImageUrl: data.cover_image_url as string | undefined,\n author: data.author as string | undefined,\n url: data.url as string | undefined,\n baseCostMicro: (data.base_cost_micro as number) ?? 0,\n normalizedCostMicro: (data.normalized_cost_micro as number) ?? 0,\n pricing: data.pricing as string | undefined,\n pricingUnit: data.pricing_unit as string | undefined,\n runCount: (data.run_count as number) ?? 0,\n inputTypes: (data.input_types as string[]) ?? [],\n outputType: data.output_type as string | undefined,\n capabilities: (data.capabilities as string[]) ?? [],\n firstSeenAt: data.first_seen_at as string | undefined,\n providerCreatedAt: data.provider_created_at as string | undefined,\n lastSyncedAt: data.last_synced_at as string | undefined,\n compliance: (data.compliance as Record<string, unknown>) ?? undefined,\n };\n}\n\nexport interface FeaturedSection {\n title: string;\n key: string;\n models: ModelInfo[];\n}\n\nexport function featuredSectionFromResponse(data: Record<string, unknown>): FeaturedSection {\n const models = (data.models as Record<string, unknown>[]) ?? [];\n return {\n title: (data.title as string) ?? \"\",\n key: (data.key as string) ?? \"\",\n models: models.map(modelInfoFromResponse),\n };\n}\n\nexport interface ModelsResponse {\n models: ModelInfo[];\n totalCount: number;\n lastUpdated?: string | null;\n featured?: FeaturedSection[] | null;\n}\n\nexport function modelsResponseFromResponse(data: Record<string, unknown>): ModelsResponse {\n const models = (data.models as Record<string, unknown>[]) ?? [];\n const featuredRaw = data.featured as Record<string, unknown>[] | undefined;\n return {\n models: models.map(modelInfoFromResponse),\n totalCount: (data.total_count as number) ?? 0,\n lastUpdated: data.last_updated as string | undefined,\n featured: featuredRaw ? featuredRaw.map(featuredSectionFromResponse) : undefined,\n };\n}\n\nexport interface ModelsListOptions {\n provider?: string | null;\n mediaType?: string | null;\n capability?: string | null;\n search?: string | null;\n sort?: string | null;\n limit?: number;\n featured?: boolean;\n}\n\nexport class Models {\n constructor(private _client: Client) {}\n\n async list(options: ModelsListOptions = {}): Promise<ModelsResponse> {\n const {\n provider,\n mediaType,\n capability,\n search,\n sort,\n limit = 100,\n featured = false,\n } = options;\n const params = new URLSearchParams();\n params.set(\"limit\", String(limit));\n if (provider) params.set(\"provider\", provider);\n if (mediaType) params.set(\"media_type\", mediaType);\n if (capability) params.set(\"capability\", capability);\n if (search) params.set(\"search\", search);\n if (sort) params.set(\"sort\", sort);\n if (featured) params.set(\"featured\", \"true\");\n const data = (await this._client._request(\"GET\", `/models?${params.toString()}`)) as Record<\n string,\n unknown\n >;\n return modelsResponseFromResponse(data);\n }\n\n async get(modelId: string): Promise<ModelInfo> {\n const data = (await this._client._request(\"GET\", `/models/${encodeURIComponent(modelId)}`)) as Record<\n string,\n unknown\n >;\n return modelInfoFromResponse(data);\n }\n\n async search(query: string, limit: number = 20): Promise<ModelsResponse> {\n return this.list({ search: query, limit });\n }\n}\n","/** Deployment management: /deployments endpoints */\n\nimport type { Client } from \"../client\";\n\nexport interface DeploymentCreateOptions {\n modelName?: string;\n hfModelId?: string;\n gpuTier?: string;\n region?: string;\n hfToken?: string;\n runpodKey?: string;\n webhookUrl?: string;\n cacheScope?: \"off\" | \"shared\" | \"private\";\n provider?: string;\n task?: string;\n userS3Url?: string;\n userAwsAccessKeyId?: string;\n userAwsSecretAccessKey?: string;\n userAwsEndpointUrl?: string;\n}\n\nexport interface DeploymentInfo {\n deploymentId: string;\n modelId?: string | null;\n status: string;\n endpointUrl?: string | null;\n provider?: string | null;\n createdAt?: string | null;\n gpuAllocated?: string | null;\n modelVramGb?: number | null;\n readyAt?: string | null;\n error?: string | null;\n}\n\nexport interface DeploymentListResponse {\n deployments: DeploymentInfo[];\n}\n\nexport interface DeploymentGpuInfo {\n id: string;\n displayName: string;\n memoryGb: number;\n secureCloud: boolean;\n communityCloud: boolean;\n bidPricePerHr?: number | null;\n pricePerHr?: number | null;\n}\n\nexport interface DeploymentGpuListResponse {\n gpus: DeploymentGpuInfo[];\n}\n\nexport interface DeploymentLogEntry {\n timestamp: string;\n level: string;\n message: string;\n}\n\nexport interface DeploymentLogsResponse {\n deploymentId: string;\n logs: DeploymentLogEntry[];\n}\n\nexport interface DeploymentCostResponse {\n deploymentId: string;\n status: string;\n gpuAllocated?: string | null;\n hoursRunning?: number | null;\n pricePerHourUsd?: number | null;\n estimatedCostUsd?: number | null;\n note?: string | null;\n}\n\nexport interface DeploymentRunRequest {\n input: Record<string, unknown>;\n}\n\nexport interface StreamStatusEvent {\n deploymentId: string;\n status?: string;\n endpointUrl?: string;\n estimatedRemainingSeconds?: number;\n error?: string;\n}\n\nexport function deploymentInfoFromResponse(data: Record<string, unknown>): DeploymentInfo {\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n modelId: (data.model_id as string) ?? (data.modelId as string),\n status: (data.status as string) ?? \"unknown\",\n endpointUrl: (data.endpoint_url as string) ?? (data.endpointUrl as string),\n provider: (data.provider as string) ?? \"runpod\",\n createdAt: (data.created_at as string) ?? (data.createdAt as string),\n gpuAllocated: (data.gpu_allocated as string) ?? (data.gpuAllocated as string),\n modelVramGb: (data.model_vram_gb as number) ?? (data.modelVramGb as number),\n readyAt: (data.ready_at as string) ?? (data.readyAt as string),\n error: (data.error as string) ?? null,\n };\n}\n\nexport function deploymentListResponseFromResponse(data: Record<string, unknown>): DeploymentListResponse {\n const deployments = (data.deployments as Record<string, unknown>[]) ?? [];\n return { deployments: deployments.map(deploymentInfoFromResponse) };\n}\n\nexport function deploymentGpuInfoFromResponse(data: Record<string, unknown>): DeploymentGpuInfo {\n return {\n id: (data.id as string) ?? \"\",\n displayName: (data.display_name as string) ?? (data.displayName as string) ?? \"\",\n memoryGb: (data.memory_gb as number) ?? (data.memoryGb as number) ?? 0,\n secureCloud: Boolean((data.secure_cloud as boolean) ?? (data.secureCloud as boolean)),\n communityCloud: Boolean((data.community_cloud as boolean) ?? (data.communityCloud as boolean)),\n bidPricePerHr: (data.bid_price_per_hr as number) ?? (data.bidPricePerHr as number),\n pricePerHr: (data.price_per_hr as number) ?? (data.pricePerHr as number),\n };\n}\n\nexport function deploymentGpuListResponseFromResponse(\n data: Record<string, unknown>\n): DeploymentGpuListResponse {\n const gpus = (data.gpus as Record<string, unknown>[]) ?? [];\n return { gpus: gpus.map(deploymentGpuInfoFromResponse) };\n}\n\nexport function deploymentLogsResponseFromResponse(data: Record<string, unknown>): DeploymentLogsResponse {\n const rawLogs = (data.logs as Record<string, unknown>[]) ?? [];\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n logs: rawLogs.map((entry) => ({\n timestamp: (entry.timestamp as string) ?? \"\",\n level: (entry.level as string) ?? \"INFO\",\n message: (entry.message as string) ?? \"\",\n })),\n };\n}\n\nexport function deploymentCostResponseFromResponse(data: Record<string, unknown>): DeploymentCostResponse {\n return {\n deploymentId: (data.deployment_id as string) ?? (data.deploymentId as string) ?? \"\",\n status: (data.status as string) ?? \"unknown\",\n gpuAllocated: (data.gpu_allocated as string) ?? (data.gpuAllocated as string),\n hoursRunning: (data.hours_running as number) ?? (data.hoursRunning as number),\n pricePerHourUsd: (data.price_per_hour_usd as number) ?? (data.pricePerHourUsd as number),\n estimatedCostUsd: (data.estimated_cost_usd as number) ?? (data.estimatedCostUsd as number),\n note: (data.note as string) ?? null,\n };\n}\n\nexport class Deployments {\n constructor(private _client: Client) {}\n\n async create(options: DeploymentCreateOptions): Promise<DeploymentInfo> {\n const data = (await this._client._request(\"POST\", \"/deployments\", {\n body: JSON.stringify({\n model_name: options.modelName,\n hf_model_id: options.hfModelId,\n gpu_tier: options.gpuTier,\n region: options.region,\n hf_token: options.hfToken,\n runpod_key: options.runpodKey,\n webhook_url: options.webhookUrl,\n cache_scope: options.cacheScope,\n provider: options.provider,\n task: options.task,\n user_s3_url: options.userS3Url,\n user_aws_access_key_id: options.userAwsAccessKeyId,\n user_aws_secret_access_key: options.userAwsSecretAccessKey,\n user_aws_endpoint_url: options.userAwsEndpointUrl,\n }),\n })) as Record<string, unknown>;\n return deploymentInfoFromResponse(data);\n }\n\n async list(): Promise<DeploymentListResponse> {\n const data = (await this._client._request(\"GET\", \"/deployments\")) as Record<string, unknown>;\n return deploymentListResponseFromResponse(data);\n }\n\n async get(deploymentId: string): Promise<DeploymentInfo> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}`\n )) as Record<string, unknown>;\n return deploymentInfoFromResponse(data);\n }\n\n async delete(deploymentId: string): Promise<void> {\n await this._client._request(\"DELETE\", `/deployments/${encodeURIComponent(deploymentId)}`);\n }\n\n async run(deploymentId: string, input: Record<string, unknown>): Promise<Record<string, unknown>> {\n const data = (await this._client._request(\"POST\", `/deployments/${encodeURIComponent(deploymentId)}/run`, {\n body: JSON.stringify({ input } satisfies DeploymentRunRequest),\n })) as Record<string, unknown>;\n return data;\n }\n\n async getLogs(deploymentId: string): Promise<DeploymentLogsResponse> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}/logs`\n )) as Record<string, unknown>;\n return deploymentLogsResponseFromResponse(data);\n }\n\n async getCost(deploymentId: string): Promise<DeploymentCostResponse> {\n const data = (await this._client._request(\n \"GET\",\n `/deployments/${encodeURIComponent(deploymentId)}/cost`\n )) as Record<string, unknown>;\n return deploymentCostResponseFromResponse(data);\n }\n\n async listGpus(): Promise<DeploymentGpuListResponse> {\n const data = (await this._client._request(\"GET\", \"/deployments/gpus\")) as Record<string, unknown>;\n return deploymentGpuListResponseFromResponse(data);\n }\n\n /**\n * Streams deployment status events (SSE).\n * Returns an abort function to stop streaming.\n */\n streamStatus(\n deploymentId: string,\n onEvent: (event: StreamStatusEvent) => void,\n onError?: (error: Error) => void\n ): () => void {\n const controller = new AbortController();\n const base = this._client.baseUrl.replace(/\\/$/, \"\");\n const url = `${base}/deployments/${encodeURIComponent(deploymentId)}/stream`;\n const headers: Record<string, string> = {};\n if (this._client.apiKey) headers.Authorization = `Bearer ${this._client.apiKey}`;\n\n void (async () => {\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n signal: controller.signal,\n });\n if (!response.ok || !response.body) {\n throw new Error(`SSE stream failed with status ${response.status}`);\n }\n\n const decoder = new TextDecoder();\n const reader = response.body.getReader();\n let buffer = \"\";\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n const events = buffer.split(\"\\n\\n\");\n buffer = events.pop() ?? \"\";\n for (const rawEvent of events) {\n const dataLine = rawEvent\n .split(\"\\n\")\n .find((line) => line.startsWith(\"data:\"));\n if (!dataLine) continue;\n const payload = dataLine.slice(5).trim();\n if (!payload) continue;\n try {\n const parsed = JSON.parse(payload) as Record<string, unknown>;\n onEvent({\n deploymentId:\n (parsed.deployment_id as string) ??\n (parsed.deploymentId as string) ??\n deploymentId,\n status: parsed.status as string | undefined,\n endpointUrl:\n (parsed.endpoint_url as string | undefined) ??\n (parsed.endpointUrl as string | undefined),\n estimatedRemainingSeconds: parsed.estimated_remaining_seconds as number | undefined,\n error: parsed.error as string | undefined,\n });\n } catch {\n // Ignore malformed chunk.\n }\n }\n }\n } catch (err) {\n if (!controller.signal.aborted) {\n const error = err instanceof Error ? err : new Error(String(err));\n onError?.(error);\n }\n }\n })();\n\n return () => controller.abort();\n }\n}\n","/**\n * Hugging Face Hub API — list deployable image/video generation models.\n * Calls https://huggingface.co/api/models directly (no Visgate backend).\n */\n\nexport interface HfModelInfo {\n id: string;\n modelId: string;\n pipelineTag: string;\n libraryName?: string;\n likes?: number;\n downloads?: number;\n}\n\nexport interface HfModelsListOptions {\n task?:\n | \"text-to-image\"\n | \"image-to-image\"\n | \"text-to-video\"\n | \"image-to-video\";\n limit?: number;\n search?: string;\n}\n\nconst HF_API_BASE = \"https://huggingface.co/api/models\";\n\nfunction normalizeModel(raw: Record<string, unknown>): HfModelInfo {\n const id = (raw.id as string) ?? (raw.modelId as string) ?? \"\";\n return {\n id,\n modelId: (raw.modelId as string) ?? id,\n pipelineTag: (raw.pipeline_tag as string) ?? \"\",\n libraryName: raw.library_name as string | undefined,\n likes: raw.likes as number | undefined,\n downloads: raw.downloads as number | undefined,\n };\n}\n\nexport class HfModels {\n async list(options: HfModelsListOptions = {}): Promise<HfModelInfo[]> {\n const task = options.task ?? \"text-to-image\";\n const limit = Math.min(Math.max(options.limit ?? 50, 1), 100);\n const params = new URLSearchParams();\n params.set(\"pipeline_tag\", task);\n params.set(\"limit\", String(limit));\n if (options.search && options.search.trim()) {\n params.set(\"search\", options.search.trim());\n }\n const url = `${HF_API_BASE}?${params.toString()}`;\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Hugging Face API error: ${response.status} ${response.statusText}`);\n }\n const data = (await response.json()) as Record<string, unknown>[];\n if (!Array.isArray(data)) {\n return [];\n }\n return data.map((item) => normalizeModel(item as Record<string, unknown>));\n }\n}\n","/** Provider key management and balance resources */\n\nimport type { Client } from \"../client\";\n\nexport interface ProviderKeyInfo {\n provider: string;\n validated: boolean;\n validatedAt?: string | null;\n maskedKey?: string | null;\n}\n\nexport function providerKeyInfoFromResponse(data: Record<string, unknown>): ProviderKeyInfo {\n return {\n provider: (data.provider as string) ?? \"\",\n validated: Boolean(data.validated),\n validatedAt: data.validated_at as string | undefined,\n maskedKey: data.masked_key as string | undefined,\n };\n}\n\nexport interface ProviderKeysResponse {\n keys: ProviderKeyInfo[];\n}\n\nexport function providerKeysResponseFromResponse(data: Record<string, unknown>): ProviderKeysResponse {\n const keys = (data.keys as Record<string, unknown>[]) ?? [];\n return { keys: keys.map(providerKeyInfoFromResponse) };\n}\n\nexport interface ProviderValidationResult {\n valid: boolean;\n message: string;\n}\n\nexport function providerValidationResultFromResponse(\n data: Record<string, unknown>\n): ProviderValidationResult {\n return {\n valid: Boolean(data.valid),\n message: String(data.message ?? \"\"),\n };\n}\n\nexport interface ProviderBalanceItem {\n provider: string;\n configured: boolean;\n available: boolean;\n limit?: number | null;\n remaining?: number | null;\n currency?: string | null;\n message?: string | null;\n}\n\nexport function providerBalanceItemFromResponse(data: Record<string, unknown>): ProviderBalanceItem {\n return {\n provider: (data.provider as string) ?? \"\",\n configured: Boolean(data.configured),\n available: Boolean(data.available),\n limit: data.limit as number | undefined,\n remaining: data.remaining as number | undefined,\n currency: data.currency as string | undefined,\n message: data.message as string | undefined,\n };\n}\n\nexport interface ProviderBalancesResponse {\n balances: ProviderBalanceItem[];\n}\n\nexport function providerBalancesResponseFromResponse(\n data: Record<string, unknown>\n): ProviderBalancesResponse {\n const balances = (data.balances as Record<string, unknown>[]) ?? [];\n return { balances: balances.map(providerBalanceItemFromResponse) };\n}\n\nexport class Providers {\n constructor(private _client: Client) {}\n\n async listKeys(): Promise<ProviderKeysResponse> {\n const data = (await this._client._request(\"GET\", \"/providers/keys\")) as Record<string, unknown>;\n return providerKeysResponseFromResponse(data);\n }\n\n async setKey(provider: string, apiKey: string): Promise<ProviderKeyInfo> {\n const data = (await this._client._request(\"PUT\", \"/providers/keys\", {\n body: JSON.stringify({ provider, api_key: apiKey }),\n })) as Record<string, unknown>;\n return providerKeyInfoFromResponse(data);\n }\n\n async deleteKey(provider: string): Promise<Record<string, unknown>> {\n return (await this._client._request(\"DELETE\", `/providers/keys/${encodeURIComponent(provider)}`)) as Record<\n string,\n unknown\n >;\n }\n\n async validateKey(provider: string, apiKey: string): Promise<ProviderValidationResult> {\n const data = (await this._client._request(\"POST\", \"/providers/validate\", {\n body: JSON.stringify({ provider, api_key: apiKey }),\n })) as Record<string, unknown>;\n return providerValidationResultFromResponse(data);\n }\n\n async balances(): Promise<ProviderBalancesResponse> {\n const data = (await this._client._request(\"GET\", \"/providers/balances\")) as Record<string, unknown>;\n return providerBalancesResponseFromResponse(data);\n }\n}\n","/**\n * Async generation request status: GET /v1/requests/{request_id}\n * Used after POST /videos/generate or /images/generate with Prefer: respond-async (202).\n */\n\nimport type { Client } from \"../client\";\n\nexport interface RequestStatusResult {\n requestId: string;\n status: \"pending\" | \"processing\" | \"completed\" | \"failed\";\n mediaType: string;\n provider: string;\n model: string;\n outputUrl: string | null;\n errorMessage: string | null;\n createdAt: string | null;\n completedAt: string | null;\n}\n\nexport function requestStatusFromResponse(data: Record<string, unknown>): RequestStatusResult {\n return {\n requestId: (data.request_id as string) ?? (data.requestId as string),\n status: (data.status as RequestStatusResult[\"status\"]) ?? \"pending\",\n mediaType: (data.media_type as string) ?? \"video\",\n provider: (data.provider as string) ?? \"\",\n model: (data.model as string) ?? \"\",\n outputUrl: (data.output_url as string) ?? null,\n errorMessage: (data.error_message as string) ?? null,\n createdAt: (data.created_at as string) ?? null,\n completedAt: (data.completed_at as string) ?? null,\n };\n}\n\nexport class Requests {\n constructor(private _client: Client) {}\n\n /** Get status of an async generation request (video/image). */\n async get(requestId: string): Promise<RequestStatusResult> {\n const data = (await this._client._request(\"GET\", `/requests/${encodeURIComponent(requestId)}`)) as Record<string, unknown>;\n return requestStatusFromResponse(data);\n }\n}\n","/** Usage and billing: GET /usage, /usage/logs, /dashboard */\n\nimport type { Client } from \"../client\";\n\n/** Dashboard response shape (GET /dashboard). */\nexport interface DashboardResponse {\n total_generations: number;\n total_cost_usd: number;\n avg_latency_ms: number;\n cache_hit_rate: number;\n cached_requests: number;\n success_rate: number;\n cost_per_day: Array<{ date: string; cost_usd: number; requests: number }>;\n top_models_used: Array<{ model: string; count: number; total_cost_usd: number }>;\n period_days: number;\n}\nimport { parseDateTime } from \"../utils\";\n\nexport interface UsageSummary {\n totalRequests: number;\n successfulRequests: number;\n failedRequests: number;\n cachedRequests: number;\n totalProviderCost: number;\n totalBilledCost: number;\n totalSavings: number;\n byProvider: Record<string, number>;\n byModel: Record<string, number>;\n period: string;\n periodStart: Date | null;\n periodEnd: Date | null;\n cacheHitRate: number;\n /** Average latency in seconds (from API avg_latency) */\n avgLatency?: number;\n /** Raw provider breakdown: provider -> { requests, cost, ... } */\n providerBreakdown?: Record<string, { requests: number; cost: number; providerChargeCost?: number; providerEffectiveCost?: number; savingsCost?: number }>;\n /** Daily/history records when returned by API */\n history?: Record<string, unknown>[];\n}\n\nfunction byProviderFromBreakdown(providerBreakdown: Record<string, unknown> | undefined): Record<string, number> {\n if (!providerBreakdown || typeof providerBreakdown !== \"object\") return {};\n const out: Record<string, number> = {};\n for (const [provider, stats] of Object.entries(providerBreakdown)) {\n const s = stats as Record<string, unknown>;\n const requests = (s?.requests as number) ?? 0;\n if (provider) out[provider] = requests;\n }\n return out;\n}\n\nexport function usageSummaryFromResponse(data: Record<string, unknown>): UsageSummary {\n const totalRequests = (data.total_requests as number) ?? 0;\n const cachedRequests = (data.cached_requests as number) ?? 0;\n const cacheHitRateFromApi = data.cache_hit_rate as number | undefined;\n const cacheHitRate =\n typeof cacheHitRateFromApi === \"number\"\n ? cacheHitRateFromApi\n : totalRequests === 0\n ? 0\n : (cachedRequests / totalRequests) * 100;\n const providerBreakdown = data.provider_breakdown as Record<string, unknown> | undefined;\n const history = data.history as Record<string, unknown>[] | undefined;\n return {\n totalRequests,\n successfulRequests: (data.successful_requests as number) ?? 0,\n failedRequests: (data.failed_requests as number) ?? 0,\n cachedRequests,\n totalProviderCost:\n (data.total_provider_effective_cost as number) ?? (data.total_provider_cost as number) ?? 0,\n totalBilledCost: (data.total_billed_cost as number) ?? (data.total_cost_usd as number) ?? 0,\n totalSavings: (data.total_savings as number) ?? 0,\n byProvider:\n (data.by_provider as Record<string, number>) ?? byProviderFromBreakdown(providerBreakdown),\n byModel: (data.by_model as Record<string, number>) ?? {},\n period: (data.period as string) ?? \"month\",\n periodStart: parseDateTime(data.period_start as string | undefined),\n periodEnd: parseDateTime(data.period_end as string | undefined),\n cacheHitRate,\n avgLatency: data.avg_latency as number | undefined,\n providerBreakdown: providerBreakdown as UsageSummary[\"providerBreakdown\"],\n history: Array.isArray(history) ? history : undefined,\n };\n}\n\nexport class Usage {\n constructor(private _client: Client) {}\n\n async get(period: string = \"month\"): Promise<UsageSummary> {\n const data = (await this._client._request(\"GET\", `/usage?period=${encodeURIComponent(period)}`)) as Record<\n string,\n unknown\n >;\n return usageSummaryFromResponse(data);\n }\n\n async logs(options: { limit?: number; offset?: number } = {}): Promise<Record<string, unknown>[]> {\n const { limit = 50, offset = 0 } = options;\n const params = new URLSearchParams();\n params.set(\"limit\", String(limit));\n params.set(\"offset\", String(offset));\n const data = (await this._client._request(\"GET\", `/usage/logs?${params.toString()}`)) as\n | Record<string, unknown>[]\n | Record<string, unknown>;\n if (Array.isArray(data)) return data;\n return (data.logs as Record<string, unknown>[]) ?? [];\n }\n\n async dashboard(period: string = \"month\"): Promise<Record<string, unknown>> {\n return (await this._client._request(\n \"GET\",\n `/dashboard?period=${encodeURIComponent(period)}`\n )) as Record<string, unknown>;\n }\n\n /**\n * Track a download event for a request (POST /usage/downloads).\n * Increments download_count and adds timestamp to downloaded_at.\n */\n async trackDownload(\n requestId: string,\n outputUrl: string,\n options?: { mediaType?: string }\n ): Promise<{ success: boolean; request_id: string; download_count: number }> {\n const body: Record<string, unknown> = { request_id: requestId, output_url: outputUrl };\n if (options?.mediaType) body.media_type = options.mediaType;\n const data = (await this._client._request(\"POST\", \"/usage/downloads\", {\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n return {\n success: Boolean(data.success),\n request_id: (data.request_id as string) ?? requestId,\n download_count: (data.download_count as number) ?? 0,\n };\n }\n}\n","/**\n * Video generation: POST /videos/generate\n *\n * Mirrors the Python SDK example 04_videos_all_providers: managed mode and\n * BYOK (Fal, Replicate, Runway) with provider-specific model IDs.\n *\n * @example Managed (platform keys)\n * ```ts\n * const r = await client.videos.generate(\"fal-ai/veo3\", prompt, { durationSeconds: 6, skipGcsUpload: true, preferAsync: true });\n * ```\n *\n * @example BYOK – use client options or proxy env (X-Fal-Key, X-Replicate-Key, X-Runway-Key)\n * ```ts\n * // Fal (veo3; alternative: fal-ai/flux-pro)\n * client.videos.generate(\"fal-ai/veo3\", prompt, { durationSeconds: 6, skipGcsUpload: true, preferAsync: true });\n * // Replicate\n * client.videos.generate(\"replicate/lucataco/cogvideox-5b\", prompt, { durationSeconds: 5, skipGcsUpload: true, preferAsync: true });\n * // Runway\n * client.videos.generate(\"runway/gen4_turbo\", prompt, { durationSeconds: 5, skipGcsUpload: true, preferAsync: true });\n * ```\n */\n\nimport type { Client } from \"../client\";\nimport { parseDateTime } from \"../utils\";\n\n/**\n * Convert a File or Blob to a data URL (data:image/...;base64,...).\n * Uses FileReader in browser, Blob.arrayBuffer() + Buffer in Node 18+.\n */\nfunction blobToDataUrl(blob: File | Blob): Promise<string> {\n if (typeof FileReader !== \"undefined\") {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") resolve(reader.result);\n else reject(new Error(\"FileReader did not return a string\"));\n };\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(blob);\n });\n }\n // Node 18+: Blob has arrayBuffer(); use global Buffer if available for large blobs\n return (async () => {\n const ab = await blob.arrayBuffer();\n const mime = blob.type || \"image/jpeg\";\n const NodeBuffer =\n typeof globalThis !== \"undefined\" &&\n (globalThis as unknown as { Buffer?: { from(a: ArrayBuffer): { toString(e: string): string } } }).Buffer;\n const base64 = NodeBuffer\n ? NodeBuffer.from(ab).toString(\"base64\")\n : btoa(String.fromCharCode(...new Uint8Array(ab)));\n return `data:${mime};base64,${base64}`;\n })();\n}\n\n/** Recommended video model IDs per provider (align with working 06_videos_all_providers; Fal uses veo3). */\nexport const VIDEO_MODEL_PRESETS = {\n fal: \"fal-ai/veo3\",\n replicate: \"replicate/lucataco/cogvideox-5b\",\n runway: \"runway/gen4_turbo\",\n} as const;\n\nexport interface VideoResult {\n id: string;\n /** Request status: \"success\" | \"cached\" | \"failed\" */\n status?: string;\n videoUrl: string | null;\n model: string;\n provider: string;\n cost: number;\n /** True when response was served from cache (exact or semantic match). */\n cacheHit: boolean;\n latencyMs: number | null;\n savedAmount?: number;\n marginPercent?: number;\n /** When cache hit: \"exact\" (hash match) or \"semantic\" (similarity match). */\n cacheSource?: \"exact\" | \"semantic\" | null;\n createdAt: Date | null;\n}\n\nexport function videoResultFromResponse(data: Record<string, unknown>): VideoResult {\n const cacheSource = data.cache_source as string | undefined;\n return {\n id: data.id as string,\n status: data.status as string | undefined,\n videoUrl: (data.video_url as string) ?? null,\n model: data.model as string,\n provider: data.provider as string,\n cost: (data.cost as number) ?? 0,\n cacheHit: (data.cache_hit as boolean) ?? false,\n latencyMs: (data.latency_ms as number) ?? null,\n savedAmount: data.saved_amount as number | undefined,\n marginPercent: data.margin_percent as number | undefined,\n cacheSource:\n cacheSource === \"exact\" || cacheSource === \"semantic\" ? cacheSource : undefined,\n createdAt: parseDateTime(data.created_at as string | undefined),\n };\n}\n\n/** Result when using preferAsync: true — API returns 202, poll client.requests.get(requestId). */\nexport interface AsyncVideoAccepted {\n requestId: string;\n status: \"accepted\";\n}\n\nexport interface VideosGenerateOptions {\n /** Input image URL for image-to-video. */\n imageUrl?: string | null;\n /**\n * Input image as File or Blob (e.g. from file input). Converted to data URL and sent as image_url.\n * Takes precedence over imageUrl if both are set.\n */\n imageFile?: File | Blob;\n /** Duration in seconds (default 5). */\n durationSeconds?: number;\n fps?: number;\n /** URL to call when generation is complete (async callback). */\n webhookUrl?: string | null;\n /** ID to include in the callback payload. */\n callbackId?: string | null;\n /** Skip uploading result to GCS; return provider URL directly. Faster, use when behind short timeouts. */\n skipGcsUpload?: boolean;\n /**\n * Use async mode: API returns 202 immediately, poll client.requests.get(requestId) for status.\n * Avoids 502 when video takes longer than proxy/Cloudflare timeout.\n */\n preferAsync?: boolean;\n /** Extra provider-specific params (merged into request body). */\n params?: Record<string, unknown>;\n}\n\nexport class Videos {\n constructor(private _client: Client) {}\n\n /**\n * Generate a video from a prompt (and optional image for img2vid).\n * Supports managed mode and BYOK (set falKey/replicateKey/runwayKey on client or via proxy env).\n * Use preferAsync: true to avoid 502 when video takes longer than proxy/Cloudflare timeout.\n */\n async generate(\n model: string,\n prompt: string,\n options: VideosGenerateOptions = {}\n ): Promise<VideoResult | AsyncVideoAccepted> {\n const {\n imageUrl,\n imageFile,\n durationSeconds = 5,\n fps,\n webhookUrl,\n callbackId,\n skipGcsUpload,\n preferAsync,\n params,\n } = options;\n\n let resolvedImageUrl: string | null = null;\n if (imageFile) {\n resolvedImageUrl = await blobToDataUrl(imageFile);\n } else if (imageUrl) {\n resolvedImageUrl = imageUrl;\n }\n\n const payload: Record<string, unknown> = {\n model,\n prompt,\n duration_seconds: durationSeconds,\n };\n if (resolvedImageUrl) payload.image_url = resolvedImageUrl;\n if (fps != null) payload.fps = fps;\n if (webhookUrl) payload.webhook_url = webhookUrl;\n if (callbackId) payload.callback_id = callbackId;\n if (skipGcsUpload === true) payload.skip_gcs_upload = true;\n if (preferAsync === true) payload.prefer_async = true;\n if (params && Object.keys(params).length > 0) Object.assign(payload, params);\n\n const headers: Record<string, string> = {};\n if (preferAsync === true) headers[\"Prefer\"] = \"respond-async\";\n\n const pathWithQuery = preferAsync === true ? \"/videos/generate?async=true\" : \"/videos/generate\";\n const data = (await this._client._request(\"POST\", pathWithQuery, {\n body: JSON.stringify(payload),\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n })) as Record<string, unknown>;\n\n // 202 Accepted: API returns { request_id }; poll client.requests.get(requestId)\n if (\"request_id\" in data && typeof data.request_id === \"string\" && !(\"video_url\" in data)) {\n return { requestId: data.request_id, status: \"accepted\" };\n }\n return videoResultFromResponse(data);\n }\n}\n","/**\n * Visgate API client (all methods return Promises in JS).\n */\n\nimport {\n AuthenticationError,\n ProviderError,\n RateLimitError,\n ValidationError,\n VisgateConnectionError,\n VisgateError,\n VisgateTimeoutError,\n} from \"./exceptions\";\nimport { Billing } from \"./resources/billing\";\nimport { Generate, type GenerateResult } from \"./resources/generate\";\nimport { Images } from \"./resources/images\";\nimport { Models } from \"./resources/models\";\nimport { Deployments } from \"./resources/deployments\";\nimport { HfModels } from \"./resources/hf-models\";\nimport { Providers } from \"./resources/providers\";\nimport { Requests } from \"./resources/requests\";\nimport { Usage } from \"./resources/usage\";\nimport { Videos } from \"./resources/videos\";\nimport { resolveApiKey } from \"./utils\";\n\nconst DEFAULT_BASE_URL = \"https://visgateai.com/api/v1\";\nconst DEFAULT_TIMEOUT = 120_000; // ms\nconst DEFAULT_MAX_RETRIES = 2;\n\nconst RETRYABLE_STATUS_CODES = new Set([429, 500, 502, 503, 504]);\n\nconst SDK_VERSION = \"0.3.3\";\n\nfunction getVersion(): string {\n try {\n // @ts-expect-error - optional for bundlers\n if (typeof __VERSION__ !== \"undefined\") return __VERSION__;\n } catch {\n // ignore\n }\n return SDK_VERSION;\n}\n\nexport interface ClientOptions {\n apiKey?: string | null;\n /** When set, requests go to this URL and no API key is sent (key is added by the proxy). */\n proxyUrl?: string;\n /**\n * When set, the client calls this before each request and sends the result as Bearer token.\n * Use with proxyUrl for session-based auth (e.g. Firebase getIdToken); the proxy forwards the token to the API.\n */\n getToken?: () => string | Promise<string>;\n baseUrl?: string;\n timeout?: number;\n maxRetries?: number;\n falKey?: string | null;\n replicateKey?: string | null;\n runwayKey?: string | null;\n runpodKey?: string | null;\n}\n\nfunction buildHeaders(\n apiKey: string | null,\n options: {\n falKey?: string | null;\n replicateKey?: string | null;\n runwayKey?: string | null;\n runpodKey?: string | null;\n }\n): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"User-Agent\": `visgate-client/${getVersion()}`,\n };\n if (apiKey) headers.Authorization = `Bearer ${apiKey}`;\n if (options.falKey) headers[\"X-Fal-Key\"] = options.falKey;\n if (options.replicateKey) headers[\"X-Replicate-Key\"] = options.replicateKey;\n if (options.runwayKey) headers[\"X-Runway-Key\"] = options.runwayKey;\n if (options.runpodKey) headers[\"X-Runpod-Key\"] = options.runpodKey;\n return headers;\n}\n\nfunction backoff(attempt: number): number {\n return Math.min(0.5 * Math.pow(2, attempt), 8) * 1000; // ms\n}\n\nfunction retryWaitFromResponse(response: Response, attempt: number): number {\n const retryAfter = response.headers.get(\"Retry-After\");\n if (retryAfter) {\n const sec = parseInt(retryAfter, 10);\n if (!isNaN(sec)) return sec * 1000;\n }\n return backoff(attempt);\n}\n\nasync function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** @internal Exported for tests. */\nexport async function handleResponse(response: Response): Promise<unknown> {\n const status = response.status;\n\n if (status < 400) {\n const text = await response.text();\n if (!text) return {};\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return {};\n }\n }\n\n let body: Record<string, unknown> = {};\n const text = await response.text();\n try {\n if (text) body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n // use text as message below\n }\n\n if (status === 401) {\n throw new AuthenticationError(\"Invalid or missing API key\");\n }\n\n if (status === 422) {\n const message = (body.message as string) ?? text ?? \"Validation failed\";\n const field = (body.details as Record<string, unknown>)?.field as string | undefined;\n throw new ValidationError(message, field);\n }\n\n if (status === 429) {\n const retryAfterHeader = response.headers.get(\"Retry-After\");\n const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;\n throw new RateLimitError(\"Rate limit exceeded\", Number.isNaN(retryAfter) ? undefined : retryAfter);\n }\n\n const errorCode = (body.error as string) ?? `HTTP_${status}`;\n const message = (body.message as string) ?? text ?? \"Request failed\";\n\n if (String(errorCode).includes(\"PROVIDER\")) {\n const provider = ((body.details as Record<string, unknown>)?.provider as string) ?? \"unknown\";\n throw new ProviderError(message, provider);\n }\n\n throw new VisgateError(message, errorCode, body.details as Record<string, unknown> ?? {}, status);\n}\n\nexport interface RequestInitWithBody {\n body?: string;\n headers?: Record<string, string>;\n}\n\nexport class Client {\n readonly apiKey: string | null;\n readonly baseUrl: string;\n readonly maxRetries: number;\n readonly timeout: number;\n private readonly headers: Record<string, string>;\n private readonly getToken: (() => string | Promise<string>) | null;\n readonly images: Images;\n readonly models: Models;\n readonly videos: Videos;\n readonly requests: Requests;\n readonly usage: Usage;\n readonly providers: Providers;\n readonly deployments: Deployments;\n readonly hfModels: HfModels;\n readonly billing: Billing;\n private _generate: Generate;\n\n constructor(options: ClientOptions = {}) {\n // When using proxy, still send apiKey if provided (e.g. playground: proxy URL + API key in input)\n this.apiKey = options.proxyUrl\n ? (options.apiKey != null && options.apiKey !== \"\" ? resolveApiKey(options.apiKey) : null)\n : resolveApiKey(options.apiKey);\n this.getToken = options.getToken ?? null;\n this.baseUrl = (options.proxyUrl ?? options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\");\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.headers = buildHeaders(this.apiKey, options.proxyUrl ? {} : {\n falKey: options.falKey,\n replicateKey: options.replicateKey,\n runwayKey: options.runwayKey,\n runpodKey: options.runpodKey,\n });\n\n this.images = new Images(this);\n this.models = new Models(this);\n this.videos = new Videos(this);\n this.requests = new Requests(this);\n this.usage = new Usage(this);\n this.providers = new Providers(this);\n this.deployments = new Deployments(this);\n this.hfModels = new HfModels();\n this.billing = new Billing(this);\n this._generate = new Generate(this);\n }\n\n /**\n * Generate an image with a single call.\n */\n generate(\n prompt: string,\n options?: { model?: string; params?: Record<string, unknown> }\n ): Promise<GenerateResult> {\n return this._generate.__call__(prompt, options?.model, options?.params);\n }\n\n /**\n * Check API health status.\n */\n health(): Promise<Record<string, unknown>> {\n return this._request(\"GET\", \"/health\") as Promise<Record<string, unknown>>;\n }\n\n async _request(method: string, path: string, init: RequestInitWithBody = {}): Promise<unknown> {\n const url = `${this.baseUrl}${path}`;\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n let headers: Record<string, string> = { ...this.headers, ...(init.headers as Record<string, string>) };\n if (this.getToken) {\n const token = await Promise.resolve(this.getToken());\n headers = { ...headers, Authorization: `Bearer ${token}` };\n }\n const fetchInit: RequestInit = {\n method,\n ...init,\n headers,\n signal: controller.signal,\n };\n if (method !== \"GET\" && init.body !== undefined) {\n fetchInit.body = init.body;\n }\n const response = await fetch(url, fetchInit);\n clearTimeout(timeoutId);\n\n if (RETRYABLE_STATUS_CODES.has(response.status) && attempt < this.maxRetries) {\n const waitMs = retryWaitFromResponse(response, attempt);\n await sleep(waitMs);\n continue;\n }\n\n return await handleResponse(response);\n } catch (err) {\n clearTimeout(timeoutId);\n lastError = err instanceof Error ? err : new Error(String(err));\n\n if (err instanceof AuthenticationError && this.apiKey === null && !this.getToken) {\n throw new AuthenticationError(\"Proxy returned 401. Check VISGATE_API_KEY on the server (proxy).\");\n }\n if (err instanceof AuthenticationError && this.getToken) {\n throw new AuthenticationError(\"Proxy returned 401. Check getToken returns a valid session token.\");\n }\n if (err instanceof VisgateError && !(err instanceof RateLimitError)) throw err;\n if (attempt >= this.maxRetries) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new VisgateTimeoutError(`Request timed out after ${this.maxRetries + 1} attempt(s)`);\n }\n if (err instanceof TypeError && err.message.includes(\"fetch\")) {\n throw new VisgateConnectionError(`Connection failed: ${err.message}`);\n }\n throw err;\n }\n const waitMs = backoff(attempt);\n await sleep(waitMs);\n }\n }\n\n throw new VisgateError(\n `Request failed after ${this.maxRetries + 1} attempts`,\n \"VISGATE_ERROR\",\n {},\n undefined\n );\n }\n\n /** No-op for API compatibility (JS has no connection pool to close). */\n close(): void {}\n\n toString(): string {\n return `Client(baseUrl=${JSON.stringify(this.baseUrl)})`;\n }\n}\n\n/**\n * Async client — same as Client; all methods return Promises.\n * Provided for API parity with Python AsyncClient.\n */\nexport class AsyncClient extends Client {\n constructor(options: ClientOptions = {}) {\n super(options);\n }\n\n override toString(): string {\n return `AsyncClient(baseUrl=${JSON.stringify(this.baseUrl)})`;\n }\n}\n","/**\n * Visgate JavaScript/TypeScript SDK — unified client for the Visgate vision AI gateway.\n */\n\nexport { Client, AsyncClient, type ClientOptions } from \"./client\";\nexport {\n VisgateError,\n AuthenticationError,\n ValidationError,\n RateLimitError,\n ProviderError,\n VisgateTimeoutError,\n VisgateConnectionError,\n type VisgateErrorDetails,\n} from \"./exceptions\";\nexport {\n generateResultFromResponse,\n Generate,\n type GenerateResult,\n} from \"./resources/generate\";\nexport {\n imageResultFromResponse,\n Images,\n type ImageResult,\n type ImagesGenerateOptions,\n} from \"./resources/images\";\nexport {\n videoResultFromResponse,\n Videos,\n VIDEO_MODEL_PRESETS,\n type VideoResult,\n type VideosGenerateOptions,\n type AsyncVideoAccepted,\n} from \"./resources/videos\";\nexport {\n modelInfoFromResponse,\n featuredSectionFromResponse,\n modelsResponseFromResponse,\n Models,\n type ModelInfo,\n type FeaturedSection,\n type ModelsResponse,\n type ModelsListOptions,\n} from \"./resources/models\";\nexport {\n requestStatusFromResponse,\n Requests,\n type RequestStatusResult,\n} from \"./resources/requests\";\nexport {\n usageSummaryFromResponse,\n Usage,\n type UsageSummary,\n type DashboardResponse,\n} from \"./resources/usage\";\nexport {\n providerKeyInfoFromResponse,\n providerKeysResponseFromResponse,\n providerValidationResultFromResponse,\n providerBalanceItemFromResponse,\n providerBalancesResponseFromResponse,\n Providers,\n type ProviderKeyInfo,\n type ProviderKeysResponse,\n type ProviderValidationResult,\n type ProviderBalanceItem,\n type ProviderBalancesResponse,\n} from \"./resources/providers\";\nexport {\n billingInfoFromResponse,\n modelPricingFromResponse,\n pricingResponseFromResponse,\n Billing,\n type BillingInfo,\n type ModelPricing,\n type PricingResponse,\n type CheckoutOptions,\n} from \"./resources/billing\";\nexport {\n deploymentInfoFromResponse,\n deploymentListResponseFromResponse,\n deploymentGpuInfoFromResponse,\n deploymentGpuListResponseFromResponse,\n deploymentLogsResponseFromResponse,\n deploymentCostResponseFromResponse,\n Deployments,\n type DeploymentCreateOptions,\n type DeploymentInfo,\n type DeploymentListResponse,\n type DeploymentGpuInfo,\n type DeploymentGpuListResponse,\n type DeploymentLogEntry,\n type DeploymentLogsResponse,\n type DeploymentCostResponse,\n type DeploymentRunRequest,\n type StreamStatusEvent,\n} from \"./resources/deployments\";\nexport {\n HfModels,\n type HfModelInfo,\n type HfModelsListOptions,\n} from \"./resources/hf-models\";\n\nexport const VERSION = \"0.3.4\";\n"]}
|
package/package.json
CHANGED