{"version":3,"file":"types.cjs","sources":["../../src/types.ts"],"sourcesContent":["import type {\n  Collection,\n  MutationFnParams,\n  PendingMutation,\n  Transaction,\n} from '@tanstack/db'\n\n// Extended mutation function that includes idempotency key\nexport type OfflineMutationFnParams<\n  T extends object = Record<string, unknown>,\n> = MutationFnParams<T> & {\n  idempotencyKey: string\n}\n\nexport type OfflineMutationFn<T extends object = Record<string, unknown>> = (\n  params: OfflineMutationFnParams<T>,\n) => Promise<any>\n\n// Simplified mutation structure for serialization\nexport interface SerializedMutation {\n  globalKey: string\n  type: string\n  modified: any\n  original: any\n  changes: any\n  collectionId: string\n}\n\nexport interface SerializedError {\n  name: string\n  message: string\n  stack?: string\n}\n\nexport interface SerializedSpanContext {\n  traceId: string\n  spanId: string\n  traceFlags: number\n  traceState?: string\n}\n\n// In-memory representation with full PendingMutation objects\nexport interface OfflineTransaction {\n  id: string\n  mutationFnName: string\n  mutations: Array<PendingMutation>\n  keys: Array<string>\n  idempotencyKey: string\n  createdAt: Date\n  retryCount: number\n  nextAttemptAt: number\n  lastError?: SerializedError\n  metadata?: Record<string, any>\n  spanContext?: SerializedSpanContext\n  version: 1\n}\n\n// Serialized representation for storage\nexport interface SerializedOfflineTransaction {\n  id: string\n  mutationFnName: string\n  mutations: Array<SerializedMutation>\n  keys: Array<string>\n  idempotencyKey: string\n  createdAt: string\n  retryCount: number\n  nextAttemptAt: number\n  lastError?: SerializedError\n  metadata?: Record<string, any>\n  spanContext?: SerializedSpanContext\n  version: 1\n}\n\n// Storage diagnostics and mode\nexport type OfflineMode = `offline` | `online-only`\n\nexport type StorageDiagnosticCode =\n  | `STORAGE_AVAILABLE`\n  | `INDEXEDDB_UNAVAILABLE`\n  | `LOCALSTORAGE_UNAVAILABLE`\n  | `STORAGE_BLOCKED`\n  | `QUOTA_EXCEEDED`\n  | `UNKNOWN_ERROR`\n\nexport interface StorageDiagnostic {\n  code: StorageDiagnosticCode\n  mode: OfflineMode\n  message: string\n  error?: Error\n}\n\nexport interface OfflineConfig {\n  collections: Record<string, Collection<any, any, any, any, any>>\n  mutationFns: Record<string, OfflineMutationFn>\n  storage?: StorageAdapter\n  maxConcurrency?: number\n  jitter?: boolean\n  beforeRetry?: (\n    transactions: Array<OfflineTransaction>,\n  ) => Array<OfflineTransaction>\n  onUnknownMutationFn?: (name: string, tx: OfflineTransaction) => void\n  onLeadershipChange?: (isLeader: boolean) => void\n  onStorageFailure?: (diagnostic: StorageDiagnostic) => void\n  leaderElection?: LeaderElection\n  /**\n   * Custom online detector implementation.\n   * Defaults to WebOnlineDetector for browser environments.\n   * The '@tanstack/offline-transactions/react-native' entry point uses ReactNativeOnlineDetector automatically.\n   */\n  onlineDetector?: OnlineDetector\n}\n\nexport interface StorageAdapter {\n  get: (key: string) => Promise<string | null>\n  set: (key: string, value: string) => Promise<void>\n  delete: (key: string) => Promise<void>\n  keys: () => Promise<Array<string>>\n  clear: () => Promise<void>\n}\n\nexport interface RetryPolicy {\n  calculateDelay: (retryCount: number) => number\n  shouldRetry: (error: Error, retryCount: number) => boolean\n}\n\nexport interface LeaderElection {\n  requestLeadership: () => Promise<boolean>\n  releaseLeadership: () => void\n  isLeader: () => boolean\n  onLeadershipChange: (callback: (isLeader: boolean) => void) => () => void\n}\n\nexport interface TransactionSignaler {\n  resolveTransaction: (transactionId: string, result: any) => void\n  rejectTransaction: (transactionId: string, error: Error) => void\n  registerRestorationTransaction: (\n    offlineTransactionId: string,\n    restorationTransaction: Transaction,\n  ) => void\n  isOnline: () => boolean\n}\n\nexport interface OnlineDetector {\n  subscribe: (callback: () => void) => () => void\n  notifyOnline: () => void\n  isOnline: () => boolean\n  dispose: () => void\n}\n\nexport interface CreateOfflineTransactionOptions {\n  id?: string\n  mutationFnName: string\n  autoCommit?: boolean\n  idempotencyKey?: string\n  metadata?: Record<string, any>\n}\n\nexport interface CreateOfflineActionOptions<T> {\n  mutationFnName: string\n  onMutate: (variables: T) => void\n}\n\nexport class NonRetriableError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = `NonRetriableError`\n  }\n}\n"],"names":[],"mappings":";;AAkKO,MAAM,0BAA0B,MAAM;AAAA,EAC3C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;;"}