Files
identity/index.d.ts
Chris Daßler a6b10428fa Initial commit: Identity management component
- Hierarchical user/device identity system with HD key derivation
- Dependency injection for AsyncStorage and Platform
- Self-contained TypeScript declarations
- Ed25519 keypairs managed by IdentityManager
- Deterministic peer ID generation from BIP39 mnemonic
2025-08-29 14:17:39 +02:00

234 lines
6.6 KiB
TypeScript

declare module '@metatrom/identity' {
/**
* User identity (master identity)
*/
export interface UserIdentity {
userId: string; // Hash of master public key
publicKey: Uint8Array; // Master public key
mnemonic?: string; // Stored securely, only on this device
}
/**
* Device identity (derived from user)
*/
export interface DeviceIdentity {
deviceId: string; // libp2p peer ID
deviceName: string; // Human-readable name
publicKey: Uint8Array; // Device public key (Ed25519)
privateKey: Uint8Array; // Device private key (Ed25519)
derivationPath: string; // HD derivation path
createdAt: number;
lastSeen?: number;
}
/**
* Device information for remote devices
*/
export interface DeviceInfo {
deviceId: string;
deviceName: string;
multiaddrs: string[];
isOnline: boolean;
lastSeen: number;
}
/**
* Configuration for identity manager
*/
export interface IdentityConfig {
storagePrefix?: string;
mnemonicStrength?: 128 | 160 | 192 | 224 | 256;
deviceNameProvider?: () => Promise<string>;
}
/**
* Main identity management interface
*/
export interface IIdentityManager {
/**
* Initialize the identity manager
* Either loads existing identity or creates new one
*/
initialize(): Promise<UserIdentity>;
/**
* Create a completely new user identity with mnemonic
*/
createNewIdentity(): Promise<UserIdentity>;
/**
* Restore identity from mnemonic phrase
*/
restoreFromMnemonic(mnemonic: string): Promise<UserIdentity>;
/**
* Create a new device identity derived from master
*/
createDeviceIdentity(deviceName: string): Promise<DeviceIdentity>;
/**
* Get current device identity or create one if none exists
*/
getCurrentDevice(): Promise<DeviceIdentity>;
/**
* List all registered devices for this user
*/
getRegisteredDevices(): Promise<DeviceIdentity[]>;
/**
* Remove a device from the user's identity
*/
removeDevice(deviceId: string): Promise<void>;
/**
* Clean up duplicate devices with the same base name
* @returns Number of devices removed
*/
cleanupDuplicateDevices(): Promise<number>;
/**
* Clean up inactive devices (except current device)
* @param daysInactive - Number of days of inactivity before removal (default: 30)
* @returns Number of devices removed
*/
cleanupInactiveDevices(daysInactive?: number): Promise<number>;
/**
* Get the libp2p keypair for current device
*/
getLibp2pKeypair(): Promise<{ privateKey: Uint8Array; publicKey: Uint8Array }>;
/**
* Update the current device's peer ID after libp2p generates it
*/
updateDevicePeerId(peerId: string): Promise<void>;
/**
* Calculate what the peer ID will be for a given device index
* Useful during pairing to predict the new device's peer ID
*/
calculatePeerIdForIndex(deviceIndex: number): Promise<string>;
/**
* Export mnemonic for backup (should be done securely!)
*/
getMnemonic(): string | undefined;
/**
* Get user identity
*/
getUserIdentity(): UserIdentity | undefined;
/**
* Check if identity is initialized
*/
isInitialized(): boolean;
/**
* Clear all identity data (dangerous!)
*/
reset(): Promise<void>;
/**
* Broadcast peer ID update to other devices
*/
broadcastPeerIdUpdate(
oldPeerId: string,
newPeerId: string,
sendProtocolData?: (peerId: string, protocolId: string, data: Uint8Array) => Promise<void>,
): Promise<void>;
}
/**
* Storage interface for identity persistence
*/
export interface IIdentityStorage {
setItem(key: string, value: string): Promise<void>;
getItem(key: string): Promise<string | null>;
removeItem(key: string): Promise<void>;
clear(): Promise<void>;
}
/**
* Factory interface for creating identity managers
*/
export interface IIdentityFactory {
create(config?: IdentityConfig): IIdentityManager;
}
// AsyncStorage type definition for dependency injection
interface IAsyncStorage {
setItem(key: string, value: string): Promise<void>;
getItem(key: string): Promise<string | null>;
removeItem(key: string): Promise<void>;
getAllKeys(): Promise<string[]>;
multiRemove(keys: string[]): Promise<void>;
}
// Platform interface for dependency injection
interface IPlatform {
OS: string;
}
/**
* AsyncStorage adapter for React Native
*/
export class AsyncStorageAdapter implements IIdentityStorage {
constructor(asyncStorage: IAsyncStorage);
setItem(key: string, value: string): Promise<void>;
getItem(key: string): Promise<string | null>;
removeItem(key: string): Promise<void>;
clear(): Promise<void>;
}
/**
* Identity Manager Implementation
*/
export class IdentityManager implements IIdentityManager {
constructor(storage: IIdentityStorage, config?: IdentityConfig);
initialize(): Promise<UserIdentity>;
createNewIdentity(): Promise<UserIdentity>;
restoreFromMnemonic(mnemonic: string): Promise<UserIdentity>;
createDeviceIdentity(deviceName: string): Promise<DeviceIdentity>;
getCurrentDevice(): Promise<DeviceIdentity>;
getRegisteredDevices(): Promise<DeviceIdentity[]>;
removeDevice(deviceId: string): Promise<void>;
cleanupDuplicateDevices(): Promise<number>;
cleanupInactiveDevices(daysInactive?: number): Promise<number>;
getLibp2pKeypair(): Promise<{ privateKey: Uint8Array; publicKey: Uint8Array }>;
updateDevicePeerId(peerId: string): Promise<void>;
calculatePeerIdForIndex(deviceIndex: number): Promise<string>;
getMnemonic(): string | undefined;
getUserIdentity(): UserIdentity | undefined;
isInitialized(): boolean;
reset(): Promise<void>;
broadcastPeerIdUpdate(
oldPeerId: string,
newPeerId: string,
sendProtocolData?: (peerId: string, protocolId: string, data: Uint8Array) => Promise<void>,
): Promise<void>;
}
/**
* Factory for creating identity manager instances
*/
export class IdentityFactory implements IIdentityFactory {
static getInstance(platform?: IPlatform, asyncStorage?: IAsyncStorage): IdentityFactory;
create(config?: IdentityConfig): IIdentityManager;
static reset(): void;
}
/**
* Create identity manager with dependency injection
*/
export function createIdentityManager(
config?: IdentityConfig,
platform?: IPlatform,
asyncStorage?: IAsyncStorage
): IIdentityManager;
// Version information
export const VERSION: string;
export const PROTOCOL_VERSION: string;
}