WebUser
WebUser
is a helper class that simplifies using the Verida Network in a web application. An instance of the class represents a User with a set of common methods available such as connect
, getDid
, getPublicProfile
, etc.
Usage
// Example simplified for brevity. Notably, async/await should be handled appropriately
import { Network } from '@verida/types'
import { WebUser } from '@verida/web-helpers'
// Your application context name
const CONTEXT_NAME = '<Company name>: <Application name>'
const VERIDA_NETWORK = Network.BAKSIA
// Your logo URL (appears in the Wallet)
const LOGO_URL = ''
// Create a singleton instance of your user with network connection configuration
// Return this singleton instance so there is only ever one user object
// in your application.
export const user = new WebUser({
accountConfig: {
request: {
logoUrl: LOGO_URL
},
network: VERIDA_NETWORK
},
clientConfig: {
network: VERIDA_NETWORK
},
contextConfig: {
name: CONTEXT_NAME
},
debug: true // Provides logs in the console
})
// Note: `accountConfig`, `clientConfig`, `contextConfig` are all configuration objects that match their respective `account-web-vault`, `client` and `context` configuration objects.
// Bind some event listeners
user.on('connected',() => { console.log('User connected!') })
user.on('disconnect',() => { console.log('User disconnected!') })
user.on('profileChanged',(newProfile) => { console.log('Profile changed!', newProfile) })
// Automatically connect the user if there's an existing local session
await autoConnectExistingSession()
// Check if the user is connected. Note: `autoConnectExistingSession` also returns the connection status
const isConnected = user.isConnected()
if (!isConnected) {
// Use the `connect` method to explicitly prompt the user to connect with the Verida Wallet
const success = await user.connect()
if (!success) {
throw Error('User cancelled the connection')
}
}
// Get the DID of the user
const did = user.getDid()
console.log(`Logged in with ${did}`)
// Get the public name, avatar and description from the user's profile
const publicProfile = await user.getPublicProfile()
console.log(`Public profile:`, publicProfile)
// Send a message from the connected user to the specified DID (in this example to itself)
await user.sendMessage(did, 'Hello!')
// Open a private encrypted user database and save a row
const database = await user.openDatabase('test_db')
const row = await database.save({'hello': 'world'})
console.log(row)
// Open a private encrypted user datastore and save a row
const datastore = await user.openDatastore('https://common.schemas.verida.io/social/contact/v0.1.0/schema.json')
const row = await datastore.save({
firstName: 'Jane',
lastName: 'Smith',
email: 'jane_smith@example.com'
})
console.log(row)
// Disconnect the user
await user.disconnect()
It is recommended to avoid multiple instances of WebUser
to prevent side effects on shared resources.
import { WebUser, WebUserConfig } from '@verida/web-helpers'
// Define the configuration
const CONFIG: WebUserConfig = {
accountConfig: {
// ...
},
clientConfig: {
// ...
},
contextConfig: {
// ...
},
}
// Implement a singleton class
export class SingletonWebUser extends WebUser {
private static instance: VeridaUser
private constructor(config: WebUserConfig) {
super(config)
}
public static getInstance() {
if (this.instance) {
return this.instance
}
this.instance = new VeridaUser(CONFIG)
return this.instance
}
}
const user = SingletonWebUser.getInstance()
Last updated