Skip to content

@offlinesync/core

The primary developer-facing package. Re-exports key types from @offlinesync/storage, @offlinesync/conflict, and @offlinesync/protocol.

Collection

Collection<T>

Typed CRUD operations and change observation for a named entity collection.

typescript
const tasks = new Collection<Task>('tasks', storage, {
  mutationRecorder: recorder,
  mutationQueue: queue,
})
MethodReturnsDescription
get(id)Promise<Entity<T>>Get entity by ID (throws if not found)
getOrNull(id)Promise<Entity<T> | null>Get entity or null
query(query)Promise<Entity<T>[]>Query with filters, sort, pagination
create(id, data)Promise<Entity<T>>Create new entity (fails if exists)
put(entity)Promise<Entity<T>>Create or replace entity
update(id, changes)Promise<Entity<T>>Partial field update
delete(id)Promise<void>Soft-delete entity
subscribe(callback)CollectionSubscriptionObserve change events
getSyncState()SyncStateCurrent sync state
setSyncState(state)voidUpdate sync state

Collection Events

ExportDescription
COLLECTION_CHANGE_TYPE{ CREATE, UPDATE, DELETE, PURGE }
CollectionChangeEvent<T>{ type, collectionName, entity }
CollectionSubscription{ dispose(): void }

MutationRecorder

new MutationRecorder(options)

MethodReturnsDescription
recordSet(collectionName, entity)MutationRecord a full entity replacement
recordUpdate(collectionName, entityId, changes)MutationRecord a partial field update
recordDelete(collectionName, entityId)MutationRecord a deletion
initializeSequence(collectionName, maxSeq)voidInit sequence tracker from stored state

MutationQueue

new MutationQueue(options)

MethodReturnsDescription
enqueue(mutation, tx?)Promise<void>Add mutation (optionally in a transaction)
dequeuePending(limit)Promise<Mutation[]>Get pending mutations in order
acknowledge(mutationId)Promise<void>Mark as acknowledged
markInFlight(mutationId)Promise<void>Mark as in-flight
markFailed(mutationId, error)Promise<void>Mark as failed
markConflict(mutationId)Promise<void>Mark as conflicted
retry(mutationId)Promise<void>Retry a failed mutation
resolveConflict(mutationId, updates?)Promise<void>Resolve conflict and re-queue
pendingCount()Promise<number>Count non-terminal mutations

SyncEngine

new SyncEngine(options)

OptionTypeDescription
clientIdstringUnique client identifier
storageStorageAdapterStorage backend
mutationQueueMutationQueueDurable mutation queue
transportSyncTransportServer communication
conflictResolverConflictResolutionManagerConflict routing
batchSizenumberMax mutations per cycle (default: 50)
MethodReturnsDescription
sync()Promise<SyncCycleResult>Run a single sync cycle
snapshotSync(collections)Promise<void>Full-state snapshot sync

SyncCycleResult

FieldTypeDescription
acknowledgedMutationsnumberMutations confirmed by server
appliedChangesnumberRemote changes applied locally
conflictsConflictEvent[]Unresolved conflicts
errorsArray<{ code, message }>Non-fatal errors

SyncScheduler

new SyncScheduler(options)

OptionTypeDefaultDescription
engineSyncEngineThe sync engine
baseIntervalMsnumber30_000Base sync interval
backoffMultipliernumber2Exponential backoff multiplier
maxBackoffMsnumber300_000Maximum backoff cap
MethodReturnsDescription
start()voidBegin periodic sync
stop()voidStop periodic sync
triggerSync()voidTrigger immediate sync
dispose()voidRelease all resources

RecoveryManager

new RecoveryManager(options)

MethodReturnsDescription
recover()Promise<RecoveryResult>Detect and recover from interrupted sync

Repairs: IN_FLIGHT → PENDING reset, sequence gap detection, orphaned mutation detection.

IntegrityChecker

new IntegrityChecker(options)

MethodReturnsDescription
check()Promise<IntegrityCheckResult>Validate data consistency
repair()Promise<IntegrityCheckResult>Check and repair issues

SyncTransport (interface)

ExportKindDescription
SyncTransportinterfacegetVersionInfo(), sendSync(), sendSnapshot()
StubSyncTransportclassIn-memory transport for testing

Type Converters

ExportDescription
clientMutationToProtocol(mutation)Convert client Mutation to ProtocolMutation
buildSyncRequest(clientId, mutations, cursor)Build a SyncRequest
protocolEntityToClient(entity)Convert ProtocolEntity to Entity
extractAcknowledgedIds(response)Extract acknowledged IDs from response
extractEntitiesFromChanges(changes)Extract entities from changes array
extractEntitiesFromSnapshot(response)Extract entities from snapshot

Error Classes

ExportExtendsDescription
OfflineSyncErrorErrorBase error for all core errors
ConflictResolutionErrorOfflineSyncErrorUnresolvable conflict
SyncConnectionErrorOfflineSyncErrorConnection failure during sync
SyncProtocolErrorOfflineSyncErrorProtocol-level error

Released under the MIT License.