import { HttpSpacePrimitives } from "../common/spaces/http_space_primitives.ts"; import { KV, KvKey, KvQuery } from "$sb/types.ts"; import { IDataStore } from "../plugos/lib/datastore.ts"; import { rpcCall } from "./syscalls/datastore.proxy.ts"; // implements DataStore "interface" export class RemoteDataStore implements IDataStore { constructor(private httpPrimitives: HttpSpacePrimitives) { } private proxy( name: string, ...args: any[] ) { // console.trace(); return rpcCall( this.httpPrimitives, name, ...args, ); } async get(key: KvKey): Promise { const results = await this.batchGet([key]); return results[0]; } batchGet(keys: KvKey[]): Promise<(T | null)[]> { return this.proxy("datastore.batchGet", keys); } set(key: KvKey, value: any): Promise { return this.batchSet([{ key, value }]); } batchSet(entries: KV[]): Promise { return this.proxy("datastore.batchSet", entries); } delete(key: KvKey): Promise { return this.batchDelete([key]); } batchDelete(keys: KvKey[]): Promise { return this.proxy("datastore.batchDelete", keys); } query(query: KvQuery): Promise[]> { return this.proxy("datastore.query", query); } queryDelete(query: KvQuery): Promise { return this.proxy("datastore.queryDelete", query); } }