SDK Overview
Complete reference for the haex-vault SDK APIs and framework integrations.
Overview
The haex-vault SDK provides a complete API for building extensions. It includes database access, storage, filesystem operations, web requests, and more.
Installation
Install the SDK using your preferred package manager:
npm install @haex-space/vault-sdk
Framework Setup
The SDK provides adapters for popular frameworks. Choose your framework below:
Setup
<script setup lang="ts">
import { useHaexVaultSdk } from '@haex-space/vault-sdk/vue'
import manifest from '../haextension/manifest.json'
// Initialize SDK with manifest
const { client, context, extensionInfo, getTableName } = useHaexVaultSdk({
manifest,
debug: globalThis._importMeta_.env.DEV
})
// Watch for context changes (theme/locale)
watch(() => context.value, (ctx) => {
if (ctx) {
document.documentElement.classList.toggle('dark', ctx.theme === 'dark')
}
}, { immediate: true })
</script>
Usage
<script setup lang="ts">
import { useHaexVaultSdk } from '@haex-space/vault-sdk/vue'
const { client, context, getTableName } = useHaexVaultSdk()
// Access context - reactive refs
const theme = computed(() => context.value?.theme) // 'light' | 'dark'
const locale = computed(() => context.value?.locale) // 'en', 'de', etc.
const platform = computed(() => context.value?.platform) // 'linux', 'windows', 'macos', 'android', 'ios', etc.
// Database operations with namespaced table names
async function loadData() {
const tableName = getTableName('users')
const users = await client.query(`SELECT * FROM ${tableName}`)
console.log(users)
}
</script>
Client API Overview
The client provides access to all SDK features:
const { client, extensionInfo, context, getTableName } = useHaexVaultSdk()
// Extension info (reactive in Vue/React/Svelte)
extensionInfo // { publicKey, name, version }
getTableName('users') // Prefixed table name
// Context (reactive)
context.theme // 'light' | 'dark'
context.locale // 'en', 'de', etc.
context.platform // 'linux', 'windows', 'macos', 'android', 'ios'
// Database
await client.query(sql, params)
await client.execute(sql, params)
await client.database.insert(table, data)
await client.database.update(table, data, where, whereParams)
await client.database.delete(table, where, whereParams)
// Storage
await client.storage.get(key)
await client.storage.set(key, value)
await client.storage.remove(key)
// Filesystem
await client.filesystem.saveFileAsync(data, options)
await client.filesystem.openFileAsync(options)
// Web
await client.web.fetchAsync(url, options)
await client.web.openAsync(url)
// Permissions
await client.permissions.checkDatabaseAsync(table, operation)
await client.permissions.checkFilesystemAsync(path, operation)
await client.permissions.checkWebAsync(url)
Application Context
Access the current theme, locale, and platform. The context updates automatically when the user changes settings.
const { context } = useHaexVaultSdk()
// Access current context (reactive ref in Vue)
const ctx = context.value
// Available properties
ctx.theme // 'light' | 'dark'
ctx.locale // 'en' | 'de' | ...
ctx.platform // 'linux' | 'windows' | 'macos' | 'android' | 'ios'
// React to context changes (Vue)
watch(() => context.value?.theme, (theme) => {
console.log('Theme changed:', theme)
document.documentElement.classList.toggle('dark', theme === 'dark')
})
watch(() => context.value?.platform, (platform) => {
console.log('Platform:', platform)
// Adapt UI for mobile/desktop
})
theme
Current theme: light, dark, or system
locale
Current locale code (en, de, etc.)
platform
Operating system: windows, macos, linux, ios, android
Events
Listen for events from haex-vault:
import { HAEXTENSION_EVENTS, EXTERNAL_EVENTS } from '@haex-space/vault-sdk'
const { client } = useHaexVaultSdk()
// Listen for context changes
client.on(HAEXTENSION_EVENTS.CONTEXT_CHANGED, (event) => {
const { theme, locale, platform } = event.data.context
console.log('Context updated:', { theme, locale, platform })
})
// Listen for search requests (if extension supports search)
client.on(HAEXTENSION_EVENTS.SEARCH_REQUEST, async (event) => {
const { query, requestId } = event.data
// Perform search
const results = await performSearch(query)
// Send results back
await client.respondToSearch(requestId, results)
})
// Listen for external requests (from browser extensions, CLI tools, etc.)
client.on(EXTERNAL_EVENTS.REQUEST, async (event) => {
const { clientId, action, payload, requestId } = event.data
// Handle the external request
const response = await handleExternalRequest(action, payload)
// Send response back
await client.respondToExternalRequest(requestId, response)
})