← Files Velox TriFit API DocsARCHIVED FILE

sdks/javascript/index.d.ts

5.84 KB · Nov 7, 2026 · 13:08 UTC

↓ Download file

export type AssetRole = 'personal' | 'product' | 'result';
export interface ProductPreparation {status:'not_scheduled'|'queued'|'preparing'|'ready'|'unavailable'|'failed'|'simulated'|'not_required'; updatedAt?:string; operationId?:string; error?:{code:string;message:string}; evidence?:{provider:string|null;model:string|null;cacheHit:boolean;cacheScope:'shared'|'worker-local'}}
export interface Asset { id: string; role: AssetRole; status: 'pending' | 'ready' | 'deleted'; contentType: string; sizeBytes: number; url?: string; expiresAt?: string; retentionExpiresAt?:string; deletedAt?:string; purgeState?:string; fileName?:string; contentHash?:string; preparation?:ProductPreparation }
export interface ImageUploadOptions {fileName?:string;signal?:AbortSignal;onAssetCreated?:(assetId:string)=>void|Promise<void>}
export interface AccountLink { id: string; externalUserId: string; email: string; veloxUserId: string; status: "linked" | "unlinked" | "relink_required"; linkedAt: string; lastLoginAt?: string; unlinkedAt?: string | null }
export interface Session { link?: AccountLink; accessToken: string; refreshToken: string; tokenType: 'Bearer'; expiresIn: number; user: { id: string; email: string } }
export interface UploadTarget { assetId: string; uploadUrl: string; uploadHeaders: Record<string,string>; expiresAt: string }
export interface RequestContext {runId?:string;scenarioId?:string;requestId?:string}
/** Generation routes are assigned by Velox Admin, never selected by a caller. */
export interface GenerationOptions {context?:RequestContext;notificationEndpointId?:string}
export interface GenerationJob { id: string; kind: 'dressme' | 'animateme'; status: 'queued' | 'running' | 'succeeded' | 'failed'; createdAt: string; environment?:string; context?:RequestContext; timings?:Record<string,string>; simulated: boolean; result?: Asset; error?: { code: string; message: string } }
export interface DressMeJob extends GenerationJob { kind: 'dressme' }
export interface AnimateMeJob extends GenerationJob { kind: 'animateme' }
export interface PollOptions<T extends GenerationJob = GenerationJob> { timeoutMs?: number; intervalMs?: number; signal?: AbortSignal; onStatus?: (job: T) => void | Promise<void> }
export class VeloxError extends Error { status: number; code: string; requestId?: string; retryAfter?: string }
export class VeloxDressMe {
  constructor(options: { baseUrl: string; clientId: string; fetch?: typeof fetch; timeoutMs?: number; autoRefresh?: boolean; serverToken?: string; integrationKey?: string; subject?: string });
  applicationInfo(): Promise<{kind:'application'; id:string; scopes:string[]; clientId:string; environment:string}>;
  notificationEndpoints():Promise<{environment:string;revision:number;endpoints:Array<{id:string;url:string;keyId:string;enabled:boolean;revision:number;managedBy:'partner'|'velox'}>;deliveries:Array<{eventId:string;jobId:string;endpointId:string;status:string;attempts:number;lastAttempt:{at:string;outcome:string;httpStatus?:number;error?:string}|null;deliveredAt:string|null}>}>;
  registerNotificationEndpoint(url:string):Promise<{id:string;url:string;keyId:string;secret:string}>;
  setNotificationEndpointState(id:string,input:{enabled:boolean;expectedRevision:number}):Promise<{updated:true}>;
  importProductImage(url:string, options?:{signal?:AbortSignal}):Promise<Asset>;
  deleteAsset(id:string):Promise<{id:string;status:'deleted';purgeState:string}>;
  deleteSubject():Promise<{status:'deleted';assets:number;physicalPurge:'pending'}>;
  profiles():Promise<{environment:string;configurationRevision:number;routingRevision:number;dressme:Array<{id:string;label:string;default:boolean;selectable:boolean}>;animateme:Array<{id:string;label:string;default:boolean;selectable:boolean}>;note:string}>;
  overview(options?:{runId?:string}):Promise<Record<string,unknown>>;
  session: Session | null;
  createLinkChallenge(externalUserId: string, purpose?: 'link' | 'login'): Promise<{challengeId: string; nonce: string; expiresIn: number}>;
  linkAccount(input: {challengeId: string; idToken: string; consent: true}): Promise<Session>;
  loginLinkedAccount(input: {challengeId: string; idToken: string}): Promise<Session>;
  linkedAccount(): Promise<AccountLink>;
  unlinkAccount(linkId: string): Promise<{unlinked: true}>;
  requestCode(email: string): Promise<{ challengeId: string; expiresIn: number }>;
  verifyCode(challengeId: string, code: string): Promise<Session>;
  refresh(): Promise<Session>;
  logout(): Promise<void>;
  me(): Promise<{ id: string; email: string; clientId: string; environment: string }>;
  createImageUpload(input: { role: 'personal' | 'product'; fileName: string; contentType: string; sizeBytes: number }, options?: { signal?: AbortSignal }): Promise<UploadTarget>;
  completeImageUpload(assetId: string, options?: { signal?: AbortSignal }): Promise<Asset>;
  uploadImage(file: Blob, options: ImageUploadOptions & {role:'personal'|'product'}): Promise<Asset>;
  uploadPersonalPhoto(file: Blob, options?: ImageUploadOptions): Promise<Asset>;
  uploadProductImage(file: Blob, options?: ImageUploadOptions): Promise<Asset>;
  getAsset(id: string): Promise<Asset>;
  createDressMeJob(input: { personalAssetId: string; productAssetId: string } & GenerationOptions, options?: { idempotencyKey?: string; signal?: AbortSignal }): Promise<DressMeJob>;
  getDressMeJob(id: string, options?: { signal?: AbortSignal }): Promise<DressMeJob>;
  waitForDressMe(id: string, options?: PollOptions<DressMeJob>): Promise<DressMeJob>;
  createAnimateMeJob(input: { sourceAssetId: string } & GenerationOptions, options?: { idempotencyKey?: string; signal?: AbortSignal }): Promise<AnimateMeJob>;
  getAnimateMeJob(id: string, options?: { signal?: AbortSignal }): Promise<AnimateMeJob>;
  waitForAnimateMe(id: string, options?: PollOptions<AnimateMeJob>): Promise<AnimateMeJob>;
  waitForJob(kind: 'dressme' | 'animateme', id: string, options?: PollOptions): Promise<GenerationJob>;
}

SHA-256: f85a842f069050bda170a83e16d8668cbd875be502471a3789ac295fbf9ed8cb