{"version":3,"sources":["../src/auth.ts","../src/http-request.ts","../src/http.ts","../src/hybrid-task.ts","../src/params.ts","../src/validate.ts","../src/md5.ts","../src/files.ts","../src/uploads.ts","../src/account.ts","../src/pricing.ts","../src/base-client.ts","../src/index.ts"],"sourcesContent":["import { AuthenticationError } from './errors';\nimport type { ClientOptions } from './types';\n\nconst ENV_VAR_NAME = 'RUNAPI_API_KEY';\n\nfunction readApiKeyFromEnv(): string | undefined {\n  if (typeof process === 'undefined' || !process.env) {\n    return undefined;\n  }\n  const trimmed = process.env[ENV_VAR_NAME]?.trim();\n  return trimmed ? trimmed : undefined;\n}\n\n/**\n * Resolve the API key from explicit options or the `RUNAPI_API_KEY` environment\n * variable. Throws `AuthenticationError` when neither is provided.\n */\nexport function resolveApiKey(options: ClientOptions): string {\n  const apiKey = resolveOptionalApiKey(options);\n  if (!apiKey) {\n    throw new AuthenticationError(\n      `API key is required. Pass \\`apiKey\\` or set the \\`${ENV_VAR_NAME}\\` environment variable.`\n    );\n  }\n  return apiKey;\n}\n\n/** Resolve an API key when present without requiring one for public resources. */\nexport function resolveOptionalApiKey(options: ClientOptions): string | undefined {\n  const explicit = options.apiKey?.trim();\n  return explicit || readApiKeyFromEnv();\n}\n","import type { QueryParams } from './types';\nimport { ValidationError } from './errors';\n\nexport function buildUrl(baseUrl: string, path: string, query?: QueryParams): string {\n  if (/^https?:\\/\\//i.test(path)) {\n    const requested = new URL(path);\n    const configured = new URL(baseUrl);\n    if (requested.origin !== configured.origin) {\n      throw new ValidationError('Request URL must use the configured RunAPI origin');\n    }\n    return requested.toString();\n  }\n\n  const normalizedBase = baseUrl.replace(/\\/+$/, '');\n  const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n  const url = new URL(`${normalizedBase}${normalizedPath}`);\n\n  if (query) {\n    for (const [key, value] of Object.entries(query)) {\n      if (value === undefined || value === null) continue;\n\n      url.searchParams.set(key, String(value));\n    }\n  }\n\n  return url.toString();\n}\n\nexport function mergeHeaders(\n  base: Record<string, string>,\n  extra?: Record<string, string>\n): Record<string, string> {\n  return { ...base, ...(extra || {}) };\n}\n\nexport function hasHeader(headers: Record<string, string>, name: string): boolean {\n  const target = name.toLowerCase();\n  return Object.keys(headers).some((key) => key.toLowerCase() === target);\n}\n\nexport function prepareBody(body: unknown, headers: Record<string, string>): BodyInit | undefined {\n  if (body === undefined || body === null) return undefined;\n  if (isFormData(body) || body instanceof URLSearchParams) return body as BodyInit;\n  if (typeof body === 'string' || body instanceof Blob || body instanceof ArrayBuffer) return body as BodyInit;\n\n  if (!hasHeader(headers, 'content-type')) {\n    headers['content-type'] = 'application/json';\n  }\n\n  return JSON.stringify(body);\n}\n\nexport async function parseResponseBody(response: Response): Promise<{\n  text: string | null;\n  json: unknown;\n}> {\n  const text = await response.text();\n  if (!text) return { text: null, json: undefined };\n\n  const contentType = response.headers.get('content-type')?.toLowerCase() ?? '';\n  if (!contentType.includes('json')) return { text, json: undefined };\n\n  try {\n    return { text, json: JSON.parse(text) };\n  } catch {\n    return { text, json: undefined };\n  }\n}\n\nexport function idempotencyKey(): string {\n  if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n    return crypto.randomUUID();\n  }\n\n  return `runapi-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n}\n\nexport function captureResponseHeaders(\n  response: Response,\n  target: Record<string, string> | undefined,\n): void {\n  if (!target) return;\n\n  response.headers.forEach((value, key) => {\n    target[key] = value;\n  });\n}\n\nexport function captureResponseStatus(\n  response: Response,\n  target: { status?: number } | undefined,\n): void {\n  if (target) target.status = response.status;\n}\n\nfunction isFormData(body: unknown): body is FormData {\n  return typeof FormData !== 'undefined' && body instanceof FormData;\n}\n","import { resolveOptionalApiKey } from './auth';\nimport {\n  errorFromResponse,\n  NetworkError,\n  RunApiError,\n  TimeoutError,\n} from './errors';\nimport {\n  getRetryDelayMs,\n  isIdempotentMethod,\n  isRetryableStatus,\n  parseRetryAfterMs,\n} from './retry';\nimport type { ClientOptions, HttpMethod, QueryParams, RequestOptions } from './types';\nimport {\n  DEFAULT_BASE_URL,\n  RETRY_CONFIG,\n  SDK_USER_AGENT,\n  TIMEOUTS,\n} from './constants';\nimport {\n  buildUrl,\n  captureResponseHeaders,\n  captureResponseStatus,\n  hasHeader,\n  idempotencyKey,\n  mergeHeaders,\n  parseResponseBody,\n  prepareBody,\n} from './http-request';\n\nexport interface HttpRequestOptions extends RequestOptions {\n  query?: QueryParams;\n  body?: unknown;\n  /** Return a successful response body without text decoding. */\n  responseType?: 'json' | 'bytes';\n  /** Treat HTTP 304 as a successful conditional request result. */\n  allowNotModified?: boolean;\n  /** Internal response-header capture for resources that support HTTP revalidation. */\n  captureResponseHeaders?: Record<string, string>;\n  /** Internal HTTP status capture for resources with response lifecycle branches. */\n  captureResponseStatus?: { status?: number };\n}\n\nexport interface HttpClient {\n  request<T>(\n    method: HttpMethod,\n    path: string,\n    options?: HttpRequestOptions\n  ): Promise<T>;\n  /**\n   * PUT bytes straight to an absolute upload URL with the exact headers issued\n   * for it. Skips the base URL, auth, and retries — the URL is single-use and\n   * pre-authorized, and the body is not safe to replay.\n   */\n  upload(\n    url: string,\n    options: { headers: Record<string, string>; body: BodyInit; timeoutMs?: number; signal?: AbortSignal }\n  ): Promise<void>;\n}\n\nfunction createAbortController(\n  timeoutMs: number,\n  signal?: AbortSignal\n): { controller: AbortController; cleanup: () => void; timedOut: () => boolean } {\n  const controller = new AbortController();\n  let timeoutId: ReturnType<typeof setTimeout> | undefined;\n  let didTimeOut = false;\n\n  if (signal) {\n    if (signal.aborted) {\n      controller.abort();\n    } else {\n      signal.addEventListener(\n        'abort',\n        () => {\n          controller.abort();\n        },\n        { once: true }\n      );\n    }\n  }\n\n  if (timeoutMs > 0) {\n    timeoutId = setTimeout(() => {\n      didTimeOut = true;\n      controller.abort();\n    }, timeoutMs);\n  }\n\n  return {\n    controller,\n    cleanup: () => {\n      if (timeoutId) {\n        clearTimeout(timeoutId);\n      }\n    },\n    timedOut: () => didTimeOut,\n  };\n}\n\nfunction canRetryRequest(\n  method: HttpMethod,\n  status: number | undefined,\n  headers: Record<string, string>\n): boolean {\n  return status !== undefined && isRetryableStatus(status) && (isIdempotentMethod(method) || hasHeader(headers, 'idempotency-key'));\n}\n\nexport function createHttpClient(options: ClientOptions): HttpClient {\n  const apiKey = resolveOptionalApiKey(options);\n  const baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n  const clientTimeoutMs = options.timeoutMs;\n  const maxRetries = options.maxRetries ?? RETRY_CONFIG.MAX_RETRIES;\n  const retryBaseDelayMs = options.retryBaseDelayMs ?? RETRY_CONFIG.BASE_DELAY;\n  const retryMaxDelayMs = options.retryMaxDelayMs ?? RETRY_CONFIG.MAX_DELAY;\n  const fetchImpl = options.fetch ?? fetch;\n  const clientFetchOptions = options.fetchOptions ?? {};\n\n  return {\n    async request<T>(\n      method: HttpMethod,\n      path: string,\n      requestOptions: HttpRequestOptions = {}\n    ) {\n      const url = buildUrl(baseUrl, path, requestOptions.query);\n      const headers = mergeHeaders(\n        {\n          accept: 'application/json',\n          'user-agent': SDK_USER_AGENT,\n          ...(apiKey ? { authorization: `Bearer ${apiKey}` } : {}),\n        },\n        requestOptions.headers\n      );\n\n      if (method === 'POST' && !hasHeader(headers, 'idempotency-key')) {\n        headers['Idempotency-Key'] = idempotencyKey();\n      }\n\n      const body = prepareBody(requestOptions.body, headers);\n      const requestTimeoutMs = requestOptions.timeoutMs ?? clientTimeoutMs ?? TIMEOUTS.HTTP_REQUEST;\n      const requestMaxRetries = requestOptions.maxRetries ?? maxRetries;\n\n      for (let attempt = 0; attempt <= requestMaxRetries; attempt += 1) {\n        const { controller, cleanup, timedOut } = createAbortController(\n          requestTimeoutMs,\n          requestOptions.signal\n        );\n\n        try {\n          const response = await fetchImpl(url, {\n            ...clientFetchOptions,\n            ...(requestOptions.fetchOptions ?? {}),\n            method,\n            headers,\n            body,\n            signal: controller.signal,\n          });\n\n          cleanup();\n\n          if (response.status === 304 && requestOptions.allowNotModified) {\n            captureResponseHeaders(response, requestOptions.captureResponseHeaders);\n            captureResponseStatus(response, requestOptions.captureResponseStatus);\n            return {\n              not_modified: true,\n              etag: response.headers.get('etag') ?? undefined,\n            } as T;\n          }\n\n          if (response.ok && requestOptions.responseType === 'bytes') {\n            captureResponseHeaders(response, requestOptions.captureResponseHeaders);\n            captureResponseStatus(response, requestOptions.captureResponseStatus);\n            return new Uint8Array(await response.arrayBuffer()) as T;\n          }\n\n          const { text, json } = await parseResponseBody(response);\n\n          if (!response.ok) {\n            if (\n              attempt < requestMaxRetries &&\n              canRetryRequest(method, response.status, headers)\n            ) {\n              const retryAfterMs = parseRetryAfterMs(response);\n              const delayMs =\n                retryAfterMs ??\n                getRetryDelayMs(attempt, retryBaseDelayMs, retryMaxDelayMs);\n              await new Promise((resolve) => setTimeout(resolve, delayMs));\n              continue;\n            }\n\n            throw errorFromResponse(response, text, json);\n          }\n\n          captureResponseHeaders(response, requestOptions.captureResponseHeaders);\n          captureResponseStatus(response, requestOptions.captureResponseStatus);\n          return (json ?? text) as T;\n        } catch (error) {\n          cleanup();\n\n          if (timedOut()) {\n            if (attempt < requestMaxRetries && (isIdempotentMethod(method) || hasHeader(headers, 'idempotency-key'))) {\n              const delayMs = getRetryDelayMs(\n                attempt,\n                retryBaseDelayMs,\n                retryMaxDelayMs\n              );\n              await new Promise((resolve) => setTimeout(resolve, delayMs));\n              continue;\n            }\n\n            throw new TimeoutError('Request timed out');\n          }\n\n          if (requestOptions.signal?.aborted) {\n            throw new RunApiError('Request aborted', { cause: error as Error });\n          }\n\n          if (error instanceof RunApiError) {\n            throw error;\n          }\n\n          if (attempt < requestMaxRetries && (isIdempotentMethod(method) || hasHeader(headers, 'idempotency-key'))) {\n            const delayMs = getRetryDelayMs(\n              attempt,\n              retryBaseDelayMs,\n              retryMaxDelayMs\n            );\n            await new Promise((resolve) => setTimeout(resolve, delayMs));\n            continue;\n          }\n\n          throw new NetworkError('Network error', { cause: error as Error });\n        }\n      }\n\n      // Unreachable at runtime, but required for TypeScript return type inference\n      throw new NetworkError('Network error');\n    },\n\n    async upload(url, uploadOptions) {\n      const timeoutMs = uploadOptions.timeoutMs ?? clientTimeoutMs ?? TIMEOUTS.HTTP_REQUEST;\n      const { controller, cleanup, timedOut } = createAbortController(timeoutMs, uploadOptions.signal);\n\n      try {\n        const response = await fetchImpl(url, {\n          ...clientFetchOptions,\n          method: 'PUT',\n          headers: uploadOptions.headers,\n          body: uploadOptions.body,\n          signal: controller.signal,\n        });\n        cleanup();\n\n        if (!response.ok) {\n          const text = await response.text().catch(() => '');\n          throw new RunApiError(`Direct upload failed with status ${response.status}${text ? `: ${text}` : ''}`);\n        }\n      } catch (error) {\n        cleanup();\n        if (timedOut()) {\n          throw new TimeoutError('Direct upload timed out');\n        }\n        if (error instanceof RunApiError) {\n          throw error;\n        }\n        throw new NetworkError('Direct upload network error', { cause: error as Error });\n      }\n    },\n  };\n}\n","import { errorFromResponse, TaskTimeoutError } from './errors';\nimport type { HttpClient, HttpRequestOptions } from './http';\nimport type { PollingOptions, RequestOptions } from './types';\nimport { TIMEOUTS } from './constants';\n\nexport interface HybridTaskUpdate {\n  id?: string;\n  status: 'processing' | 'completed' | 'failed';\n}\n\nexport type HybridTaskListener = (task: HybridTaskUpdate) => void;\n\nexport type HybridTaskOptions = RequestOptions & PollingOptions;\n\ninterface TaskResultResponse {\n  id?: string;\n  status?: string;\n  response?: StoredResponse;\n}\n\ninterface StoredResponse {\n  status: number;\n  content_type: string;\n  headers: Record<string, string>;\n  body: unknown;\n}\n\nexport class HybridTask<T> {\n  private completion?: Promise<T>;\n  private readonly listeners = new Set<HybridTaskListener>();\n\n  constructor(\n    private readonly http: HttpClient,\n    private readonly location: string | undefined,\n    private readonly terminal: T | undefined,\n    private readonly options: HybridTaskOptions,\n  ) {}\n\n  run(): Promise<T> {\n    return this.wait();\n  }\n\n  subscribe(listener: HybridTaskListener): Promise<T> {\n    this.listeners.add(listener);\n    return this.wait();\n  }\n\n  private wait(): Promise<T> {\n    if (!this.completion) {\n      this.completion = this.terminal === undefined ? this.poll() : this.completeTerminal();\n    }\n\n    return this.completion;\n  }\n\n  private async completeTerminal(): Promise<T> {\n    this.notify({ status: 'completed' });\n    return this.terminal as T;\n  }\n\n  private async poll(): Promise<T> {\n    if (!this.location) {\n      throw new Error('Task acceptance did not include Location');\n    }\n\n    const maxWaitMs = this.options.maxWaitMs ?? TIMEOUTS.POLLING_MAX_WAIT;\n    const pollIntervalMs = this.options.pollIntervalMs ?? TIMEOUTS.POLLING_INTERVAL;\n    const startedAt = Date.now();\n\n    while (true) {\n      const headers: Record<string, string> = {};\n      const response = await this.http.request<TaskResultResponse>('GET', this.location, {\n        ...requestOptions(this.options),\n        captureResponseHeaders: headers,\n      });\n      const status = String(response.status).toLowerCase();\n\n      if (status === 'completed') {\n        this.notify({ id: response.id, status: 'completed' });\n        return decodeStoredResponse<T>(response.response);\n      }\n\n      if (status === 'failed') {\n        this.notify({ id: response.id, status: 'failed' });\n        throw storedResponseError(response.response);\n      }\n\n      this.notify({ id: response.id, status: 'processing' });\n      if (Date.now() - startedAt >= maxWaitMs) {\n        throw new TaskTimeoutError('Task polling timed out', { details: response });\n      }\n\n      await sleep(retryAfterMs(headers) ?? pollIntervalMs);\n    }\n  }\n\n  private notify(update: HybridTaskUpdate): void {\n    for (const listener of this.listeners) listener(update);\n  }\n}\n\nexport async function createHybridTask<T>(\n  http: HttpClient,\n  path: string,\n  options: HttpRequestOptions & HybridTaskOptions,\n): Promise<HybridTask<T>> {\n  const headers: Record<string, string> = {};\n  const status: { status?: number } = {};\n  const response = await http.request<T>('POST', path, {\n    ...options,\n    captureResponseHeaders: headers,\n    captureResponseStatus: status,\n  });\n\n  if (status.status !== 202) {\n    return new HybridTask<T>(http, undefined, response, options);\n  }\n\n  return new HybridTask<T>(http, headers.location, undefined, options);\n}\n\nfunction requestOptions(options: HybridTaskOptions): RequestOptions {\n  const { maxWaitMs: _maxWaitMs, pollIntervalMs: _pollIntervalMs, ...requestOptions } = options;\n  return requestOptions;\n}\n\nfunction decodeStoredResponse<T>(response: StoredResponse | undefined): T {\n  if (!response) throw new Error('Completed Task Result did not include a response');\n\n  if (response.status < 200 || response.status >= 300) {\n    throw storedResponseError(response);\n  }\n\n  const contentType = response.content_type.toLowerCase();\n  if (contentType.includes('json') && typeof response.body === 'string') {\n    return JSON.parse(response.body) as T;\n  }\n\n  return response.body as T;\n}\n\nfunction storedResponseError(response: StoredResponse | undefined): Error {\n  if (!response) return new Error('Task failed without a response');\n\n  const bodyText = typeof response.body === 'string' ? response.body : JSON.stringify(response.body);\n  return errorFromResponse(\n    new Response(bodyText, { status: response.status, headers: response.headers }),\n    bodyText,\n    typeof response.body === 'string' ? undefined : response.body,\n  );\n}\n\nfunction retryAfterMs(headers: Record<string, string>): number | undefined {\n  const value = headers['retry-after'];\n  if (!value) return undefined;\n\n  const seconds = Number(value);\n  if (!Number.isNaN(seconds)) return seconds * 1000;\n\n  const timestamp = Date.parse(value);\n  return Number.isNaN(timestamp) ? undefined : Math.max(0, timestamp - Date.now());\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","export function compactParams<T extends object>(params: T): Partial<T> {\n  const result: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(params)) {\n    if (value === undefined || value === null) continue;\n    if (typeof value === 'string' && value.trim() === '') continue;\n    result[key] = value;\n  }\n  return result as Partial<T>;\n}\n","import { ValidationError } from './errors';\n\n/** One action entry from a package's generated contract. */\nexport interface ActionSchema {\n  models?: readonly string[];\n  rules?: readonly Record<string, any>[];\n  fields_by_model?: Record<string, Record<string, any>>;\n}\n\ntype Params = Record<string, unknown>;\n\n/**\n * Validates request params against a generated action schema: model\n * membership, then declared cross-field rules, then per-field\n * required/enum/integer/min/max/length. A missing schema is a no-op.\n */\nexport function validateParams(schema: ActionSchema | undefined, params: Params): void {\n  if (!schema) return;\n\n  const model = params['model'];\n  const models = schema.models ?? [];\n  let fields: Record<string, any>;\n  if (models.length === 0) {\n    fields = schema.fields_by_model?.['_'] ?? {};\n  } else {\n    if (typeof model !== 'string' || !models.includes(model)) {\n      const sorted = [...models].sort();\n      throw new ValidationError(`model must be one of: ${sorted.join(', ')}`);\n    }\n\n    fields = schema.fields_by_model?.[model] ?? {};\n  }\n\n  const rules = schema.rules;\n  if (Array.isArray(rules)) {\n    for (const rule of rules) enforceContractRule(params, rule);\n  }\n\n  const keys = Object.keys(fields).sort();\n  for (const field of keys) {\n    validateSchemaField(params, field, fields[field]);\n  }\n}\n\nfunction validateSchemaField(params: Params, field: string, rules: Record<string, any>): void {\n  const value = params[field];\n  if (value != null && ('min_items' in rules || 'max_items' in rules)) {\n    validateSchemaItemCount(field, value, rules);\n  }\n\n  const present = fieldPresent(params, field);\n  if (rules.required && !present) {\n    throw new ValidationError(`${field} is required`);\n  }\n  if (!present) return;\n\n  if (rules.enum !== undefined && !enumValueAllowed(rules.enum, value)) {\n    throw new ValidationError(`${field} must be one of: ${formatEnumValues(rules.enum)}`);\n  }\n\n  if (rules.type === 'integer') {\n    validateSchemaInteger(field, value, rules);\n  }\n\n  if ('min' in rules || 'max' in rules) {\n    validateSchemaRange(field, value, rules);\n  }\n}\n\nfunction validateSchemaItemCount(field: string, value: unknown, rules: Record<string, any>): void {\n  if (!Array.isArray(value)) {\n    throw new ValidationError(`${field} must be an array`);\n  }\n\n  const min = rules.min_items;\n  const max = rules.max_items;\n  if ((min == null || value.length >= min) && (max == null || value.length <= max)) return;\n  throw new ValidationError(itemCountMessage(field, min, max));\n}\n\nfunction itemCountMessage(field: string, min: unknown, max: unknown): string {\n  if (min != null && max != null) {\n    return `${field} must contain between ${formatValue(min)} and ${formatValue(max)} items`;\n  }\n  if (min != null) {\n    return `${field} must contain at least ${formatValue(min)} items`;\n  }\n  return `${field} must contain at most ${formatValue(max)} items`;\n}\n\n// Mirrors GatewayEntry#validate_schema_integer!: a type: integer field rejects\n// non-integer numbers (e.g. 11.5), which min/max alone admit. JS has no integer\n// type, so whole-valued floats count — they serialize to an integer on the wire.\nfunction validateSchemaInteger(field: string, value: unknown, rules: Record<string, any>): void {\n  if (typeof value === 'number' && Number.isInteger(value)) return;\n  const detail =\n    rules.min != null && rules.max != null\n      ? ` between ${formatValue(rules.min)} and ${formatValue(rules.max)}`\n      : '';\n  throw new ValidationError(`${field} must be an integer${detail}`);\n}\n\nfunction validateSchemaRange(field: string, value: unknown, rules: Record<string, any>): void {\n  let measured: number;\n  let unit: string | null;\n  if (rules.length) {\n    measured = [...String(value)].length;\n    unit = 'characters';\n  } else {\n    if (typeof value !== 'number') {\n      throw new ValidationError(`${field} must be a number`);\n    }\n    measured = value;\n    unit = null;\n  }\n\n  const min = rules.min;\n  const max = rules.max;\n  if ((min == null || measured >= min) && (max == null || measured <= max)) return;\n  throw new ValidationError(rangeMessage(field, min, max, unit));\n}\n\nfunction rangeMessage(field: string, min: unknown, max: unknown, unit: string | null): string {\n  const suffix = unit ? ` ${unit}` : '';\n  if (min != null && max != null) {\n    return `${field} must be between ${formatValue(min)} and ${formatValue(max)}${suffix}`;\n  }\n  if (min != null) {\n    return `${field} must be at least ${formatValue(min)}${suffix}`;\n  }\n  return `${field} must be at most ${formatValue(max)}${suffix}`;\n}\n\nfunction enumValueAllowed(enumValues: readonly unknown[], value: unknown): boolean {\n  const valueIsNum = typeof value === 'number';\n  for (const allowed of enumValues) {\n    const allowedIsNum = typeof allowed === 'number';\n    if (typeof allowed === 'boolean') {\n      if (typeof value === 'boolean' && value === allowed) return true;\n    } else if (allowedIsNum) {\n      if (valueIsNum && value === allowed) return true;\n    } else if (valueIsNum) {\n      // allowed non-numeric while value is numeric never matches.\n    } else if (String(allowed) === String(value)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction enforceContractRule(params: Params, rule: Record<string, any>): void {\n  const conditions: Record<string, unknown> = rule.when ?? {};\n  const keys = Object.keys(conditions);\n  for (const key of keys) {\n    if (!ruleConditionMet(params, key, conditions[key])) return;\n  }\n\n  const context = keys.map((key) => ruleConditionLabel(key, conditions[key])).join(' and ');\n  const qualifier = context ? ` when ${context}` : '';\n\n  for (const field of rule.required ?? []) {\n    if (!fieldPresent(params, field)) {\n      throw new ValidationError(`${field} is required${qualifier}`);\n    }\n  }\n\n  const requiredAny: string[] = rule.required_any ?? [];\n  if (requiredAny.length > 0 && !requiredAny.some((field) => fieldPresent(params, field))) {\n    throw new ValidationError(`one of ${requiredAny.join(', ')} is required${qualifier}`);\n  }\n\n  for (const field of rule.forbidden ?? []) {\n    if (fieldPresent(params, field)) {\n      throw new ValidationError(`${field} is not allowed${qualifier}`);\n    }\n  }\n\n  const narrowed: Record<string, unknown[]> = rule.enum ?? {};\n  for (const field of Object.keys(narrowed)) {\n    if (!fieldPresent(params, field)) continue;\n    const allowed = narrowed[field] ?? [];\n    if (allowed.some((candidate) => String(candidate) === String(params[field]))) continue;\n    throw new ValidationError(\n      `${field} must be one of: ${allowed.map((candidate) => String(candidate)).join(', ')}${qualifier}`,\n    );\n  }\n}\n\n/**\n * A `when` entry is either `{present: true|false}` or a scalar the supplied\n * value must equal. Rules never resolve declared defaults.\n */\nfunction ruleConditionMet(params: Params, field: string, condition: unknown): boolean {\n  if (isPresenceCondition(condition)) {\n    return fieldPresent(params, field) === (condition.present === true);\n  }\n\n  if (!(field in params)) return false;\n  return String(params[field]) === String(condition);\n}\n\nfunction isPresenceCondition(condition: unknown): condition is { present: unknown } {\n  return typeof condition === 'object' && condition !== null && 'present' in condition;\n}\n\nfunction ruleConditionLabel(field: string, condition: unknown): string {\n  if (isPresenceCondition(condition)) {\n    return condition.present === true ? `${field} is present` : `${field} is absent`;\n  }\n  return `${field} is ${formatValue(condition)}`;\n}\n\nfunction fieldPresent(params: Params, field: string): boolean {\n  if (!(field in params)) return false;\n  const value = params[field];\n  if (value === false) return true;\n  if (Array.isArray(value)) return value.some(presentValue);\n  return presentValue(value);\n}\n\nfunction presentValue(value: unknown): boolean {\n  if (value === null || value === undefined || value === false) return false;\n  if (value === true) return true;\n  if (typeof value === 'string') return value.trim() !== '';\n  if (Array.isArray(value)) return value.length > 0;\n  if (typeof value === 'object') return Object.keys(value).length > 0;\n  return true;\n}\n\nfunction formatValue(value: unknown): string {\n  return typeof value === 'string' ? value : String(value);\n}\n\n// JS collapses float literals (0.0 -> 0), losing the float type the other SDKs\n// keep. When an enum has a fractional member it is a float enum, so render its\n// whole-number members with a trailing .0 to match the gateway/Go/Ruby/Python\n// message text (e.g. \"0.0, 0.5, 1.0\", not \"0, 0.5, 1\").\nfunction formatEnumValues(values: readonly unknown[]): string {\n  const floatEnum = values.some((v) => typeof v === 'number' && !Number.isInteger(v));\n  return values\n    .map((v) => (floatEnum && typeof v === 'number' ? formatFloat(v) : formatValue(v)))\n    .join(', ');\n}\n\nfunction formatFloat(value: number): string {\n  const text = String(value);\n  return /[.eE]/.test(text) ? text : `${text}.0`;\n}\n","// RFC 1321 MD5 over raw bytes, returning the Base64 of the 16-byte digest — the\n// value the upload target expects as the Content-MD5 header on a direct-upload\n// PUT. Web Crypto has no MD5, so direct upload needs this pure implementation to\n// run in browsers as well as Node.\n\nconst SHIFTS = [\n  7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,\n  5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,\n  4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,\n  6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21,\n];\n\nconst K = Array.from({ length: 64 }, (_v, i) =>\n  Math.floor(Math.abs(Math.sin(i + 1)) * 4294967296),\n);\n\nfunction add32(a: number, b: number): number {\n  return (a + b) & 0xffffffff;\n}\n\nfunction rotl(value: number, bits: number): number {\n  return (value << bits) | (value >>> (32 - bits));\n}\n\nfunction md5Bytes(input: Uint8Array): Uint8Array {\n  const withOne = input.length + 1;\n  const totalLen = withOne + ((56 - (withOne % 64) + 64) % 64) + 8;\n  const msg = new Uint8Array(totalLen);\n  msg.set(input);\n  msg[input.length] = 0x80;\n\n  const view = new DataView(msg.buffer);\n  const bitLen = input.length * 8;\n  view.setUint32(totalLen - 8, bitLen >>> 0, true);\n  view.setUint32(totalLen - 4, Math.floor(bitLen / 0x100000000) >>> 0, true);\n\n  let a0 = 0x67452301;\n  let b0 = 0xefcdab89;\n  let c0 = 0x98badcfe;\n  let d0 = 0x10325476;\n\n  const m = new Int32Array(16);\n  for (let offset = 0; offset < totalLen; offset += 64) {\n    for (let j = 0; j < 16; j += 1) {\n      m[j] = view.getUint32(offset + j * 4, true);\n    }\n\n    let a = a0;\n    let b = b0;\n    let c = c0;\n    let d = d0;\n\n    for (let i = 0; i < 64; i += 1) {\n      let f: number;\n      let g: number;\n      if (i < 16) {\n        f = (b & c) | (~b & d);\n        g = i;\n      } else if (i < 32) {\n        f = (d & b) | (~d & c);\n        g = (5 * i + 1) % 16;\n      } else if (i < 48) {\n        f = b ^ c ^ d;\n        g = (3 * i + 5) % 16;\n      } else {\n        f = c ^ (b | ~d);\n        g = (7 * i) % 16;\n      }\n\n      f = add32(add32(f, a), add32(K[i], m[g]));\n      a = d;\n      d = c;\n      c = b;\n      b = add32(b, rotl(f, SHIFTS[i]));\n    }\n\n    a0 = add32(a0, a);\n    b0 = add32(b0, b);\n    c0 = add32(c0, c);\n    d0 = add32(d0, d);\n  }\n\n  const out = new Uint8Array(16);\n  const outView = new DataView(out.buffer);\n  outView.setUint32(0, a0 >>> 0, true);\n  outView.setUint32(4, b0 >>> 0, true);\n  outView.setUint32(8, c0 >>> 0, true);\n  outView.setUint32(12, d0 >>> 0, true);\n  return out;\n}\n\nconst BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n  let out = '';\n  for (let i = 0; i < bytes.length; i += 3) {\n    const b0 = bytes[i];\n    const b1 = i + 1 < bytes.length ? bytes[i + 1] : 0;\n    const b2 = i + 2 < bytes.length ? bytes[i + 2] : 0;\n    out += BASE64_CHARS[b0 >> 2];\n    out += BASE64_CHARS[((b0 & 3) << 4) | (b1 >> 4)];\n    out += i + 1 < bytes.length ? BASE64_CHARS[((b1 & 15) << 2) | (b2 >> 6)] : '=';\n    out += i + 2 < bytes.length ? BASE64_CHARS[b2 & 63] : '=';\n  }\n  return out;\n}\n\nexport function md5Base64(bytes: Uint8Array): string {\n  return bytesToBase64(md5Bytes(bytes));\n}\n","import type { HttpClient } from './http';\nimport type { RequestOptions } from './types';\nimport { compactParams } from './params';\nimport { md5Base64 } from './md5';\n\nconst ENDPOINT = '/api/v1/files';\nconst PREPARE_ENDPOINT = `${ENDPOINT}/prepare`;\nconst CONFIRM_ENDPOINT = `${ENDPOINT}/confirm`;\nconst PROTOCOL_ENDPOINT = '/v1/files';\n\ninterface PrepareResponse {\n  signed_id: string;\n  upload_url: string;\n  headers: Record<string, string>;\n}\n\nexport interface FileUploadResponse {\n  file_name: string;\n  url: string;\n  size_bytes: number;\n  mime_type: string;\n  created_at: string;\n  expires_at: string;\n}\n\nexport interface FileObject {\n  id: string;\n  object: 'file';\n  bytes: number;\n  created_at: number;\n  expires_at?: number;\n  filename: string;\n  purpose: 'user_data';\n}\n\nexport interface FileList {\n  object: 'list';\n  data: FileObject[];\n  first_id?: string;\n  last_id?: string;\n  has_more: boolean;\n}\n\nexport interface DeletedFile {\n  id: string;\n  object: 'file';\n  deleted: true;\n}\n\nexport interface FileListParams {\n  after?: string;\n  limit?: number;\n  order?: 'asc' | 'desc';\n  purpose?: 'user_data';\n}\n\nexport interface ProtocolFileCreateParams {\n  file: Blob;\n  filename?: string;\n  purpose?: 'user_data';\n}\n\nexport type FileSource =\n  | { type: 'url'; url: string }\n  | { type: 'base64'; data: string };\n\nexport type FileCreateParams =\n  | {\n      file: Blob;\n      file_name?: string;\n      source?: never;\n    }\n  | {\n      source: FileSource;\n      file_name?: string;\n      file?: never;\n    };\n\nexport class Files {\n  constructor(private readonly http: HttpClient) {}\n\n  async create(params: FileCreateParams, options?: RequestOptions): Promise<FileUploadResponse> {\n    const rawParams = params as { file?: Blob; source?: FileSource; file_name?: string };\n    const hasFile = Boolean(rawParams.file);\n    const hasSource = Boolean(rawParams.source);\n    if (Number(hasFile) + Number(hasSource) !== 1) {\n      throw new Error('Exactly one source is required: file or source');\n    }\n\n    if (hasFile) {\n      return this.uploadDirect(rawParams.file as Blob, params.file_name, options);\n    }\n\n    return this.http.request<FileUploadResponse>('POST', ENDPOINT, {\n      body: compactParams(params),\n      ...options,\n    });\n  }\n\n  /** Uploads a persistent File through the OpenAI-compatible Files API. */\n  async createFile(\n    params: ProtocolFileCreateParams,\n    options?: RequestOptions,\n  ): Promise<FileObject> {\n    const body = new FormData();\n    body.append('file', params.file, params.filename);\n    body.append('purpose', params.purpose ?? 'user_data');\n    return this.http.request<FileObject>('POST', PROTOCOL_ENDPOINT, { body, ...options });\n  }\n\n  async list(params: FileListParams = {}, options?: RequestOptions): Promise<FileList> {\n    return this.http.request<FileList>('GET', PROTOCOL_ENDPOINT, {\n      query: compactParams(params),\n      ...options,\n    });\n  }\n\n  async retrieve(fileId: string, options?: RequestOptions): Promise<FileObject> {\n    return this.http.request<FileObject>('GET', this.filePath(fileId), options);\n  }\n\n  async content(fileId: string, options?: RequestOptions): Promise<Uint8Array> {\n    return this.http.request<Uint8Array>('GET', `${this.filePath(fileId)}/content`, {\n      responseType: 'bytes',\n      ...options,\n    });\n  }\n\n  async deleteFile(fileId: string, options?: RequestOptions): Promise<DeletedFile> {\n    return this.http.request<DeletedFile>('DELETE', this.filePath(fileId), options);\n  }\n\n  // Local files upload straight to storage: ask for a pre-authorized target,\n  // PUT the bytes there (never through the API), then confirm. The caller still\n  // sees a single create() call.\n  private async uploadDirect(\n    file: Blob,\n    fileName: string | undefined,\n    options?: RequestOptions,\n  ): Promise<FileUploadResponse> {\n    const bytes = new Uint8Array(await file.arrayBuffer());\n    const filename = fileName ?? (file as { name?: string }).name ?? 'upload';\n    const contentType = file.type || 'application/octet-stream';\n\n    const prepared = await this.http.request<PrepareResponse>('POST', PREPARE_ENDPOINT, {\n      body: {\n        filename,\n        byte_size: bytes.byteLength,\n        checksum: md5Base64(bytes),\n        content_type: contentType,\n      },\n      ...options,\n    });\n\n    await this.http.upload(prepared.upload_url, {\n      headers: prepared.headers,\n      body: bytes,\n      timeoutMs: options?.timeoutMs,\n      signal: options?.signal,\n    });\n\n    return this.http.request<FileUploadResponse>('POST', CONFIRM_ENDPOINT, {\n      body: { signed_id: prepared.signed_id },\n      ...options,\n    });\n  }\n\n  private filePath(fileId: string): string {\n    if (!fileId.trim()) throw new Error('fileId is required');\n    return `${PROTOCOL_ENDPOINT}/${encodeURIComponent(fileId)}`;\n  }\n}\n","import type { HttpClient } from './http';\nimport type { RequestOptions } from './types';\nimport type { FileObject } from './files';\n\nconst ENDPOINT = '/v1/uploads';\n\nexport interface UploadObject {\n  id: string;\n  object: 'upload';\n  bytes: number;\n  created_at: number;\n  filename: string;\n  purpose: 'user_data';\n  status: 'pending' | 'completed' | 'cancelled' | 'expired';\n  expires_at: number;\n  file?: FileObject;\n}\n\nexport interface UploadPart {\n  id: string;\n  object: 'upload.part';\n  created_at: number;\n  upload_id: string;\n}\n\nexport interface UploadCreateParams {\n  bytes: number;\n  filename: string;\n  mime_type: string;\n  purpose?: 'user_data';\n}\n\nexport class Uploads {\n  constructor(private readonly http: HttpClient) {}\n\n  async create(params: UploadCreateParams, options?: RequestOptions): Promise<UploadObject> {\n    return this.http.request<UploadObject>('POST', ENDPOINT, {\n      body: { ...params, purpose: params.purpose ?? 'user_data' },\n      ...options,\n    });\n  }\n\n  async addPart(\n    uploadId: string,\n    data: Blob,\n    filename = 'part.bin',\n    options?: RequestOptions,\n  ): Promise<UploadPart> {\n    const body = new FormData();\n    body.append('data', data, filename);\n    return this.http.request<UploadPart>('POST', `${this.uploadPath(uploadId)}/parts`, {\n      body,\n      ...options,\n    });\n  }\n\n  async complete(\n    uploadId: string,\n    partIds: string[],\n    options?: RequestOptions,\n  ): Promise<UploadObject> {\n    return this.http.request<UploadObject>('POST', `${this.uploadPath(uploadId)}/complete`, {\n      body: { part_ids: partIds },\n      ...options,\n    });\n  }\n\n  async cancel(uploadId: string, options?: RequestOptions): Promise<UploadObject> {\n    return this.http.request<UploadObject>('POST', `${this.uploadPath(uploadId)}/cancel`, {\n      body: {},\n      ...options,\n    });\n  }\n\n  private uploadPath(uploadId: string): string {\n    if (!uploadId.trim()) throw new Error('uploadId is required');\n    return `${ENDPOINT}/${encodeURIComponent(uploadId)}`;\n  }\n}\n","import type { HttpClient } from './http';\nimport type { RequestOptions } from './types';\n\nconst INFO_ENDPOINT = '/api/v1/me';\nconst BALANCE_ENDPOINT = '/api/v1/me/balance';\n\nexport interface AccountInfoResponse {\n  id: number;\n  name: string;\n  email: string;\n  account: {\n    id: number;\n    name: string;\n  };\n}\n\nexport interface AccountBalanceResponse {\n  balance_cents: number;\n  paid_balance_cents: number;\n  bonus_balance_cents: number;\n  spent_cents_today: number;\n  spent_cents_total: number;\n}\n\nexport class Account {\n  constructor(private readonly http: HttpClient) {}\n\n  async info(options?: RequestOptions): Promise<AccountInfoResponse> {\n    return this.http.request<AccountInfoResponse>('GET', INFO_ENDPOINT, { ...options });\n  }\n\n  async balance(options?: RequestOptions): Promise<AccountBalanceResponse> {\n    return this.http.request<AccountBalanceResponse>('GET', BALANCE_ENDPOINT, { ...options });\n  }\n}\n","import { createHttpClient, type HttpClient } from './http';\nimport type { ClientOptions, QueryParams, RequestOptions } from './types';\n\nconst SCHEDULES_ENDPOINT = '/api/v1/price_schedules';\nconst QUOTES_ENDPOINT = '/api/v1/price_quotes';\n\nexport interface PriceScheduleFilters extends QueryParams {\n  service?: string;\n  action?: string;\n  model?: string;\n}\n\nexport interface PriceSchedule {\n  service: string;\n  action: string;\n  model: string | null;\n  pricing_status: 'available' | 'pending' | string;\n  catalog_status: 'active' | 'maintenance' | 'disabled' | string;\n  currency: string;\n  billing_unit: string;\n  billing_strategy: string;\n  unit_price_cents?: number | null;\n  input_price_per_1m_cents: number | null;\n  output_price_per_1m_cents: number | null;\n  cache_read_price_per_1m_cents: number | null;\n  cache_write_price_per_1m_cents: number | null;\n  cache_write_5m_price_per_1m_cents: number | null;\n  cache_write_1h_price_per_1m_cents: number | null;\n  billing_config: Record<string, unknown>;\n}\n\nexport interface PriceScheduleListResponse {\n  as_of: string;\n  price_schedules: PriceSchedule[];\n  /** HTTP ETag for revalidating this schedule on a later request. */\n  etag?: string;\n}\n\nexport interface PriceScheduleNotModifiedResponse {\n  not_modified: true;\n  etag?: string;\n}\n\nexport type PriceScheduleListResult = PriceScheduleListResponse | PriceScheduleNotModifiedResponse;\n\nexport interface PriceQuoteParams {\n  service: string;\n  action: string;\n  model?: string | null;\n  params?: Record<string, unknown>;\n}\n\nexport interface PriceQuoteResponse {\n  service: string;\n  action: string;\n  model: string | null;\n  pricing_status: 'available' | string;\n  currency: string;\n  reservation_amount_cents: number;\n  estimate_basis: string;\n  as_of: string;\n}\n\n/** Live Price Schedule lookup and request-specific Price Quote operations. */\nexport class Pricing {\n  constructor(private readonly http: HttpClient) {}\n\n  async list(\n    filters: PriceScheduleFilters = {},\n    options?: RequestOptions,\n  ): Promise<PriceScheduleListResult> {\n    const responseHeaders: Record<string, string> = {};\n    const result = await this.http.request<PriceScheduleListResult>('GET', SCHEDULES_ENDPOINT, {\n      ...options,\n      query: filters,\n      allowNotModified: true,\n      captureResponseHeaders: responseHeaders,\n    });\n\n    return 'not_modified' in result ? result : {...result, etag: responseHeaders.etag};\n  }\n\n  async quote(\n    params: PriceQuoteParams,\n    options?: RequestOptions,\n  ): Promise<PriceQuoteResponse> {\n    const response = await this.http.request<{ price_quote: PriceQuoteResponse }>('POST', QUOTES_ENDPOINT, {\n      ...options,\n      body: params,\n    });\n    return response.price_quote;\n  }\n}\n\n/** Standalone live Pricing client with optional API authentication. */\nexport class PricingClient extends Pricing {\n  constructor(options: ClientOptions = {}) {\n    super(createHttpClient(options));\n  }\n}\n","import { createHttpClient, type HttpClient } from './http';\nimport { resolveApiKey } from './auth';\nimport type { ClientOptions } from './types';\nimport { Files } from './files';\nimport { Account } from './account';\nimport { Pricing } from './pricing';\nimport { Uploads } from './uploads';\n\n/**\n * Base class for RunAPI Provider Clients. Resolves the API key, builds the\n * shared HTTP client, and exposes the Universal Resources (Files, Uploads,\n * account, pricing) that are available on any client regardless of which model\n * package was imported.\n *\n * Provider clients extend this and build their model resources from `this.http`.\n */\nexport class BaseClient {\n  /** Persistent File lifecycle and temporary URL upload operations. */\n  public readonly files: Files;\n  /** Account info and balance operations. */\n  public readonly account: Account;\n  /** Live Price Schedule lookup and Price Quote operations. */\n  public readonly pricing: Pricing;\n  /** Multipart Upload lifecycle operations. */\n  public readonly uploads: Uploads;\n\n  protected readonly http: HttpClient;\n  private readonly apiKey: string;\n\n  constructor(options: ClientOptions = {}) {\n    this.apiKey = resolveApiKey(options);\n    this.http = createHttpClient(options);\n    this.files = new Files(this.http);\n    this.account = new Account(this.http);\n    this.pricing = new Pricing(this.http);\n    this.uploads = new Uploads(this.http);\n  }\n\n  getApiKey(): string {\n    return this.apiKey;\n  }\n}\n","// Types\nexport type {\n  HttpMethod,\n  QueryParams,\n  ClientOptions,\n  RequestOptions,\n  PollingOptions,\n  TaskStatus,\n  AsyncTaskStatus,\n  TaskBillingResponse,\n  TaskResponse,\n  TaskBillingFacts,\n  TaskReservation,\n  TaskSettlement,\n  TaskRefund,\n} from './types';\n\n// Constants\nexport { TIMEOUTS, RETRY_CONFIG, DEFAULT_BASE_URL, SDK_USER_AGENT } from './constants';\n\n// Errors\nexport {\n  RunApiError,\n  AuthenticationError,\n  RateLimitError,\n  InsufficientCreditsError,\n  NotFoundError,\n  ValidationError,\n  ServiceUnavailableError,\n  NetworkError,\n  TimeoutError,\n  TaskTimeoutError,\n  TaskFailedError,\n  errorFromResponse,\n} from './errors';\nexport type { RunApiErrorOptions } from './errors';\n\n// Auth\nexport { resolveApiKey, resolveOptionalApiKey } from './auth';\n\n// HTTP Client\nexport { createHttpClient } from './http';\nexport type { HttpClient, HttpRequestOptions } from './http';\n\n// Hybrid task lifecycle\nexport { createHybridTask, HybridTask } from './hybrid-task';\nexport type { HybridTaskListener, HybridTaskOptions, HybridTaskUpdate } from './hybrid-task';\n\n// Retry (高级用户可用)\nexport {\n  getRetryDelayMs,\n  isRetryableStatus,\n  isIdempotentMethod,\n  parseRetryAfterMs,\n} from './retry';\nexport type { RetryOptions } from './retry';\n\n// Params\nexport { compactParams } from './params';\n\n// Contract validation\nexport { validateParams } from './validate';\nexport type { ActionSchema } from './validate';\n\n// Files\nexport { Files } from './files';\nexport type { FileCreateParams, FileSource, FileUploadResponse } from './files';\nexport type {\n  DeletedFile,\n  FileList,\n  FileListParams,\n  FileObject,\n  ProtocolFileCreateParams,\n} from './files';\nexport { Uploads } from './uploads';\nexport type { UploadCreateParams, UploadObject, UploadPart } from './uploads';\n\n// Account\nexport { Account } from './account';\nexport type { AccountInfoResponse, AccountBalanceResponse } from './account';\n\n// Pricing\nexport { Pricing, PricingClient } from './pricing';\nexport type {\n  PriceScheduleFilters,\n  PriceSchedule,\n  PriceScheduleListResponse,\n  PriceScheduleNotModifiedResponse,\n  PriceScheduleListResult,\n  PriceQuoteParams,\n  PriceQuoteResponse,\n} from './pricing';\n\n// Base client\nexport { BaseClient } from './base-client';\n\n// Version\nexport const version = '0.1.0';\n\n// Note: pollUntilComplete 不从主入口导出，避免 PollingOptions 类型暴露\n// 各 API 包（suno/veo-3-1 等）通过 '@runapi.ai/core/internal' 导入\n"],"mappings":"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","names":["requestOptions","retryAfterMs","requestOptions","ENDPOINT"]}