OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-overlay / index.js

57 lines · javascript ref:
/**
 * hyper-overlay — content-addressed P2P file distribution over Protomux.
 *
 * The canonical bytes are REAL FILES ON DISK; the overlay stores only
 * metadata + chunk maps (Hyperbee), so there is no blob-storage balloon.
 * Files are chunked with FastCDC, fetched multi-source (torrent-style),
 * hash-verified incrementally, and written straight to the requester's disk.
 *
 * Main entry point: `HyperOverlay` (also the default export). The submodules
 * are available as subpath exports (`hyper-overlay/chunker`, …) for consumers
 * that only need a slice of the stack.
 *
 * Runs on Bare. The pure modules — chunker, messages, chunk-scheduler,
 * file-index, sync-engine — also run on Node.
 *
 * 0.3.0 adopts the hardened engine from ok/hyper-overlay-v3 (journaled resume,
 * wire paging, index GC, prepareForServe) while KEEPING our v2 architecture on
 * top: our single-flight backpressure discipline in the serve loop, our
 * getIndexMeta/putIndexMeta fast-boot, and the tree/pointer/ignore/manifest
 * modules Ok's fork dropped (pgh / hyper-deploy / pear-git-v3 depend on them).
 */

export { HyperOverlay, HyperOverlay as default } from './lib/overlay.js'
export { OverlayProtocol } from './lib/protocol.js'
export {
  TransferManager,
  PARTIAL_SUFFIX,
  partialPathFor,
  journalNameFor,
  cleanupOrphanedJournals
} from './lib/transfer.js'
export { ChunkScheduler } from './lib/chunk-scheduler.js'
export { FileIndex, CONTENT_REGISTER_PREFIX } from './lib/file-index.js'
export { SyncEngine, STRATEGIES } from './lib/sync-engine.js'
export {
  chunk,
  chunkStream,
  hashChunk,
  createStreamingHasher,
  selectTier,
  getTierParams,
  TIERS,
  MIN_SIZE,
  AVG_SIZE,
  MAX_SIZE
} from './lib/chunker.js'
export * as messages from './lib/messages.js'

// Our kept superset — dropped by ok/hyper-overlay-v3, retained here because
// pgh (tree/pointer/ignore), hyper-deploy (tree), and the forge (manifest)
// import them via subpaths. Not application concerns; they are the
// directory→Merkle-manifest + LFS-pointer primitives the distribution layer needs.
export { serialize, parse, isPointer, INLINE_MAX } from './lib/pointer.js'
export { encode as encodeManifest, decode as decodeManifest } from './lib/manifest.js'
export { createMatcher } from './lib/ignore.js'
export * as tree from './lib/tree.js'