// Generated from developer.reits.tech/contract-registry/v1. DO NOT EDIT.
export type ErrorEnvelope = { code: string; message: string; traceId: string; retryable: boolean; details?: Record<string, unknown> };

export type AppType = "ordinary" | "enterprise";
export type AppKind = "miniapp" | "bot";
export type ReleaseStatus = "draft" | "uploaded" | "scanning" | "review" | "rejected" | "approved" | "live" | "rolled_back";
export type BookingOrderStatus = "held" | "confirmed" | "cancel_requested" | "cancelled" | "completed" | "expired" | "refunded";
export type MarketSliceStatus = "staging" | "ready" | "rejected" | "expired";
export type QuantRunStatus = "queued" | "running" | "succeeded" | "failed" | "cancelled";

export interface AuthSession {
  sessionId: string;
  clientId: string;
  subject: { imCoreUid: number; email?: string };
  scopes: string[];
  state: "active" | "revoked" | "expired";
  issuedAt: string;
  expiresAt: string;
}

export interface DeveloperApp {
  id: number;
  appKey: string;
  name: string;
  kind: "miniapp" | "bot";
  appType: "ordinary" | "enterprise";
  status: "draft" | "submitted" | "approved" | "rejected" | "live" | "suspended" | "deleted";
  ownerId: string;
  revision: number;
}

export interface ReleaseCandidate {
  releaseId: string;
  appId: number;
  versionCode: number;
  versionName: string;
  artifact: { url: string; assetId: string; sha256: string };
  status: "draft" | "uploaded" | "scanning" | "review" | "rejected" | "approved" | "live" | "rolled_back";
  createdAt: string;
}

export interface EventEnvelope {
  eventId: string;
  eventType: string;
  eventVersion: number;
  occurredAt: string;
  producer: string;
  tenantId: string;
  actor?: Record<string, string>;
  resource: Record<string, string>;
  idempotencyKey: string;
  traceId: string;
  data: Record<string, unknown>;
}

export interface MediaAsset {
  assetId: string;
  objectKey: string;
  contentType: string;
  size: number;
  sha256: string;
  status: "pending" | "uploading" | "uploaded" | "scanning" | "clean" | "quarantined" | "deleted";
  storageBackend: "s3" | "local";
  createdAt: string;
}

export interface BookingOrder {
  orderId: string;
  consumerId: string;
  merchantId: string;
  serviceId: string;
  slotId: string;
  quantity: number;
  amount: { currency: string; minor: number };
  status: "held" | "confirmed" | "cancel_requested" | "cancelled" | "completed" | "expired" | "refunded";
  revision: number;
  idempotencyKey: string;
}

export interface MarketSlice {
  sliceId: string;
  symbol: string;
  venue: string;
  interval: string;
  startAt: string;
  endAt: string;
  dataAsOf: string;
  recordCount: number;
  storageUri: string;
  checksum: string;
  licenseClass: "public" | "licensed" | "restricted";
  status: "staging" | "ready" | "rejected" | "expired";
}

export interface QuantRun {
  runId: string;
  strategyVersionId: string;
  marketSliceIds: string[];
  status: "queued" | "running" | "succeeded" | "failed" | "cancelled";
  inputHash: string;
  engineHash: string;
  resultHash?: string;
  createdAt: string;
  startedAt?: string;
  completedAt?: string;
  error?: ErrorEnvelope;
}

