Password Keeper

This example demonstrates using ULDA to securely store and update passwords, simulating a password manager. It creates a master file for a user’s password vault, adds a password entry, updates it, changes the master file password, and deletes the entry.

import { Ulda } from '@zeroam/ulda';

async function passwordKeeper() {
  const ulda = new Ulda('your_api_key', 'https://api.0am.ch', true);
  const masterFileName = 'passwordVault'; // Must be unique per API key
  const password = 'vaultPass789';
  const newPassword = 'vaultPass999';

  try {
    // Create and connect to master file
    await ulda.createMasterFile(masterFileName, password);
    await ulda.connect(masterFileName, password);

    // Create content file for a password entry
    const pwdData = { site: 'example.com', username: 'user1', password: 'pass123' };
    await ulda.createContentFile(pwdData, 'exampleLogin'); // Unique name in master file
    console.log('Password saved:', ulda.data['exampleLogin'].content);

    // Update password
    await ulda.data['exampleLogin'].update({ password: 'newPass456' });
    console.log('Updated password:', ulda.data['exampleLogin'].content);

    // Change master file password
    await ulda.changeMasterFilePassword(newPassword);
    await ulda.connect(masterFileName, newPassword);
    console.log('Master file password changed');

    // Set up real-time updates
    await ulda.connectToUpdateContentFile((response) => {
      console.log('Password updated in real-time:', response);
    });

    // Delete content file
    await ulda.data['exampleLogin'].delete();
    console.log('Password entry deleted');
  } catch (error) {
    console.error('Error:', error.message);
  }
}

passwordKeeper().catch(console.error);

Success Output:

Password saved: { site: 'example.com', username: 'user1', password: 'pass123' }
Updated password: { site: 'example.com', username: 'user1', password: 'newPass456' }
Master file password changed
Password entry deleted

Notes:

  • The real-time update listener’s output is omitted as it depends on external updates triggering content:update.
  • Outputs reflect successful createContentFile, update, changeMasterFilePassword, and delete operations.