Get Started / Web

Browser quickstart

Use the browser entrypoint and Web Crypto adapter.

1) Install

npm init -y
npm install mindoodb

2) Use in your web app

import {
  BaseMindooTenantFactory,
  InMemoryContentAddressedStoreFactory,
  KeyBag,
  createCryptoAdapter,
} from "mindoodb/browser";

async function runWebTodoDemo() {
  const cryptoAdapter = createCryptoAdapter();
  const storeFactory = new InMemoryContentAddressedStoreFactory();
  const factory = new BaseMindooTenantFactory(storeFactory, cryptoAdapter);

  const user = await factory.createUserId("CN=web-todo-user/O=demo", "user-password");
  const keyBag = new KeyBag(user.userEncryptionKeyPair.privateKey, "user-password", cryptoAdapter);
  const adminSigning = await factory.createSigningKeyPair("admin-password");
  const adminEncryption = await factory.createEncryptionKeyPair("admin-password");

  const tenant = await factory.createTenant(
    "web-todo-tenant",
    adminSigning.publicKey,
    adminEncryption.publicKey,
    "tenant-password",
    user,
    "user-password",
    keyBag
  );

  const db = await tenant.openDB("todos");
  const todo = await db.createDocument();

  await db.changeDoc(todo, async (d) => {
    const data = d.getData();
    data.title = "Ship web MVP";
    data.done = false;
  });

  const ids = await db.getAllDocumentIds();
  const loaded = await db.getDocument(ids[0]);
  return loaded.getData();
}

runWebTodoDemo().then((data) => {
  console.log("Web todo:", data);
  document.getElementById("app").textContent = `Todo: ${data.title} (done: ${String(data.done)})`;
});

Expected console output: Web todo: { title: 'Ship web MVP', done: false }