export { createShade } from './create-shade.js';
export { Shade, ShadeStream } from './shade.js';
export type {
  ShadeUploadOptions,
  ShadeWebRtcConfig,
  ShadeWebRtcRuntime,
} from './shade.js';
export type {
  BroadcastChannel,
  BroadcastChannelSummary,
  MessageMeta,
} from './broadcast.js';
export { generateThumbnail } from './thumbnail.js';
export type { GeneratedThumbnail, ThumbnailGenerationOptions } from './thumbnail.js';
export { ShadeThumbnailCache } from './thumbnail-cache.js';
export type { ThumbnailHit } from './thumbnail-cache.js';
export { resolveConfig, parseRotationInterval } from './config.js';
export { BackgroundTasks } from './background.js';
export {
  exportBackup,
  importBackup,
  decryptBackup,
  applyBackupPayload,
  backupToString,
  backupFromString,
} from './backup.js';
export {
  FingerprintGateRegistry,
} from './gates.js';
export type {
  FingerprintGate,
  FingerprintGateContext,
  FingerprintGateHandler,
} from './gates.js';
export type { ShadeConfig, ResolvedConfig, ShadeKTConfig, ResolvedKTConfig } from './config.js';
export type { BackgroundHooks } from './background.js';
export type { BackupBlob, BackupPayload } from './backup.js';

// ─── Stream transfers (v0.2.0) ─────────────────────────────
export {
  ShadeControlChannel,
  ShadeTransferAuthenticator,
  canonicalChunkBytes,
  canonicalControlBytes,
} from './streams-bridge.js';
export type { ControlEnvelopeTransport } from './streams-bridge.js';
export {
  TransferEngine,
  MemoryControlChannel,
  MemoryTransferTransport,
  ShadeTransferHttpTransport,
  MultiTransportFallback,
  createTransferRoutes,
  PermissiveAuthenticator,
  TransferError,
  TransferAbortError,
  TransferIntegrityError,
  TransferProtocolError,
  TransferOfflineError,
  TransferResumeError,
} from '@shade/transfer';
export type { NamedTransport } from '@shade/transfer';
export type {
  TransferOptions,
  TransferProgress,
  TransferEvent,
  TransferHandle,
  TransferResult,
  TransferInput,
  TransferOutput,
  IncomingTransfer,
  IncomingTransferAcceptOptions,
  TransferSummary,
  TransferRouteOptions,
  TransferRouteAuthenticator,
  ITransferTransport,
  IControlChannel,
  TransferAuthenticator,
  ChunkAck,
  TransferResumeState,
  LaneProgress,
} from '@shade/transfer';
export type {
  StreamMetadata,
  StreamFileMetadata,
  ThumbnailMime,
  LaneInitSpec,
  LanePartition,
} from '@shade/streams';
export {
  THUMBNAIL_MAX_BYTES,
  THUMBNAIL_MIME_ALLOWLIST,
  isAllowedThumbnailMime,
  validateFileMetadata,
  declaresThumbnail,
  thumbnailStreamIdFor,
  mainStreamIdForThumbnail,
} from '@shade/streams';

// ─── V4.9 — relay-side encrypted profile storage ──────────
export {
  createProfileNamespace,
  profilePlaintextToString,
  deriveBlobSlotId,
  deriveBlobKey,
  deriveBlobSigningSeed,
  ed25519PublicKeyFromSeed,
  slotIdToHex,
} from './profile.js';
export type {
  ProfileNamespace,
  ProfileNamespaceOptions,
  ProfileGetResult,
  ProfilePutOptions,
  ProfilePutResult,
} from './profile.js';

// ─── V4.10 — cross-host approval routing ──────────────────
export {
  emptyCanonicalProfile,
  parseCanonicalProfile,
  serializeCanonicalProfile,
  upsertHost,
  removeHost,
  upsertClient,
  removeClient,
  setTrustedApprover,
  isTrustedApprover,
  findClientByFingerprint,
  findClientByAddress,
  buildApprovalRequest,
  signProxyApproval,
  verifyProxyApproval,
  canonicalApprovalSigningBytes,
  DEFAULT_APPROVAL_DOMAIN,
} from './approval.js';
export type {
  CanonicalProfileBlob,
  ProfileHostEntry,
  ProfileClientEntry,
  ApprovalRequestingDevice,
  ApprovalRequestFrame,
  ProxyApprovalFrame,
  BuildApprovalRequestOptions,
  SignProxyApprovalOptions,
  VerifyProxyApprovalOptions,
  VerifyProxyApprovalReason,
  VerifyProxyApprovalResult,
  ApprovalSigningInput,
} from './approval.js';

// ─── Web Workers crypto (V3.8) ─────────────────────────────
export {
  createWorkerCryptoProvider,
  WorkerCryptoProvider,
  WorkerStreamSender,
  WorkerStreamReceiver,
  createEncryptStream,
  createDecryptStream,
  DEFAULT_STREAM_CHUNK_SIZE,
  WORKER_PROTOCOL_VERSION,
} from '@shade/crypto-web';
export type {
  WorkerCryptoProviderOptions,
  WorkerLike,
  CreateEncryptStreamOptions,
  CreateDecryptStreamOptions,
} from '@shade/crypto-web';
