Skip to content

Instantly share code, notes, and snippets.

@Gozala
Created February 20, 2020 07:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Gozala/d0c0990beb1fde533acb65805ec8cc38 to your computer and use it in GitHub Desktop.
Save Gozala/d0c0990beb1fde533acb65805ec8cc38 to your computer and use it in GitHub Desktop.
Attempt to revist hypermerge interface
type DocID<a> = string
type Doc<a> = a
interface RepoService {
keys: KeyService
create<a>(doc: Doc<a>): Promise<DocID<a>>
read<a>(id: DocID<a>): Promise<a>
change<a>(id: DocID<a>, change: (doc: a) => void): Promise<void>
watch<a>(id: DocID<a>): AsyncIterator<a>
}
interface RepoServiceBuilder {
service(options: {
keyService?: KeyService
ledgerServiceBuilder: LedgerServiceBuilder
}): RepoService
}
export interface LedgerData {
docId: string
actorIds: string[]
}
type LedgerID = DocID<LedgerData[]>
interface Ledger {
id: LedgerID
append(block: Uint8Array): Promise<void>
}
interface LedgerService {
create(): Ledger
open(id: LedgerID): Ledger
fork(id: LedgerID): Ledger
subscribe(id:LedgerID): AsyncIterableIterator<LedgerData>
}
interface LedgerServiceBuilder {
service(options: { keyService: KeyService }): LedgerService
}
interface KeyService {
get(keyID: string): Uint8Array
set(keyID: string, key: Uint8Array): void
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment