@sschepis/resolang
Version:
ResoLang - Core quantum resonance computation library for browser and Node.js
633 lines (537 loc) • 11.6 kB
text/typescript
/**
* Core interfaces for the Prime Resonance Network Identity and Domain System
* Provides interfaces for identity management, domains, objects, and permissions
*/
import { Serializable, JSONSerializable, Cloneable, Equatable, Hashable, Validatable } from "../core/interfaces";
import { ValidationResult } from "../core/validation";
/**
* Identity types supported by the system
*/
export enum IdentityType {
SELF_SOVEREIGN,
MANAGED,
SYSTEM
}
/**
* KYC (Know Your Customer) verification levels
*/
export enum KYCLevel {
NONE = 0,
BASIC = 1, // Email/phone verification
ENHANCED = 2, // Government ID verification
FULL = 3 // Comprehensive verification
}
/**
* Core identity interface
* Represents a user or system identity in the network
*/
export interface IIdentity {
serialize(): Uint8Array;
deserialize(data: Uint8Array): void;
toJSON(): string;
fromJSON(json: string): void;
clone(): IIdentity;
equals(other: IIdentity): boolean;
hashCode(): i32;
validate(): ValidationResult;
/**
* Unique identifier for the identity
*/
getId(): string;
/**
* Type of identity (self-sovereign, managed, system)
*/
getType(): IdentityType;
/**
* Current KYC verification level
*/
getKYCLevel(): KYCLevel;
/**
* Set KYC verification level
*/
setKYCLevel(level: KYCLevel): void;
/**
* Get the prime resonance identity if connected to a node
*/
getPrimeResonanceId(): string | null;
/**
* Connect this identity to a prime resonance node
*/
connectToPrimeResonance(nodeId: string): void;
/**
* Get creation timestamp
*/
getCreatedAt(): f64;
/**
* Get last update timestamp
*/
getUpdatedAt(): f64;
/**
* Check if identity is active
*/
isActive(): boolean;
/**
* Deactivate the identity
*/
deactivate(): void;
/**
* Reactivate the identity
*/
reactivate(): void;
/**
* Get metadata associated with the identity
*/
getMetadata(): Map<string, string>;
/**
* Set metadata value
*/
setMetadata(key: string, value: string): void;
getPermissions(): IPermission[];
getRoles(): IRole[];
}
/**
* Domain interface
* Represents a named container that can have members and own objects
*/
export interface IDomain {
serialize(): Uint8Array;
deserialize(data: Uint8Array): void;
toJSON(): string;
fromJSON(json: string): void;
clone(): IDomain;
equals(other: IDomain): boolean;
hashCode(): i32;
validate(): ValidationResult;
/**
* Get domain identifier (e.g., "example.com" or "sub.example.com")
*/
getId(): string;
/**
* Get domain name (last part of the identifier)
*/
getName(): string;
/**
* Get parent domain ID if this is a subdomain
*/
getParentId(): string | null;
/**
* Get owner identity ID
*/
getOwnerId(): string;
/**
* Transfer ownership to another identity
*/
transferOwnership(newOwnerId: string, authorizedBy: string): boolean;
/**
* Get all member identity IDs
*/
getMembers(): string[];
/**
* Add a member to the domain
*/
addMember(identityId: string, addedBy: string): boolean;
/**
* Remove a member from the domain
*/
removeMember(identityId: string, removedBy: string): boolean;
/**
* Check if an identity is a member
*/
isMember(identityId: string): boolean;
/**
* Get all subdomain IDs
*/
getSubdomains(): string[];
/**
* Create a subdomain
*/
createSubdomain(name: string, ownerId: string): IDomain;
/**
* Get domain-specific permissions
*/
getPermissions(): Map<string, IPermission>;
/**
* Add a custom permission
*/
addPermission(permission: IPermission): void;
/**
* Get creation timestamp
*/
getCreatedAt(): f64;
/**
* Get domain metadata
*/
getMetadata(): Map<string, string>;
/**
* Set domain metadata
*/
setMetadata(key: string, value: string): void;
}
/**
* Object ownership properties
*/
export interface IObjectProperties {
fungible: boolean;
transferable: boolean;
destructible: boolean;
}
/**
* Domain object interface
* Represents any object that can be owned within a domain
*/
export interface IDomainObject {
serialize(): Uint8Array;
deserialize(data: Uint8Array): void;
toJSON(): string;
fromJSON(json: string): void;
clone(): IDomainObject;
equals(other: IDomainObject): boolean;
hashCode(): i32;
validate(): ValidationResult;
/**
* Get object identifier
*/
getId(): string;
/**
* Get object type
*/
getType(): string;
/**
* Get owner identity or domain ID
*/
getOwnerId(): string;
/**
* Get domain ID where this object exists
*/
getDomainId(): string;
/**
* Get object properties
*/
getProperties(): IObjectProperties;
/**
* Transfer ownership (if transferable)
*/
transfer(newOwnerId: string, authorizedBy: string): boolean;
/**
* Destroy the object (if destructible)
*/
destroy(authorizedBy: string): boolean;
/**
* Get creation timestamp
*/
getCreatedAt(): f64;
/**
* Get last update timestamp
*/
getUpdatedAt(): f64;
/**
* Get object data
*/
getData(): Map<string, string>;
/**
* Set object data
*/
setData(key: string, value: string): void;
/**
* Check if object is destroyed
*/
isDestroyed(): boolean;
}
/**
* Permission interface
* Represents a capability that can be granted to identities or roles
*/
export interface IPermission {
serialize(): Uint8Array;
deserialize(data: Uint8Array): void;
toJSON(): string;
fromJSON(json: string): void;
clone(): IPermission;
equals(other: IPermission): boolean;
/**
* Get permission identifier (e.g., "domain.create", "object.transfer")
*/
getId(): string;
/**
* Get human-readable name
*/
getName(): string;
/**
* Get permission description
*/
getDescription(): string;
/**
* Get the scope (global, domain, object)
*/
getScope(): PermissionScope;
/**
* Check if this permission implies another permission
*/
implies(other: IPermission): boolean;
}
/**
* Permission scope
*/
export enum PermissionScope {
GLOBAL,
DOMAIN,
OBJECT
}
/**
* Role interface
* Represents a collection of permissions that can be assigned to identities
*/
export interface IRole {
serialize(): Uint8Array;
deserialize(data: Uint8Array): void;
toJSON(): string;
fromJSON(json: string): void;
clone(): IRole;
equals(other: IRole): boolean;
/**
* Get role identifier
*/
getId(): string;
/**
* Get role name
*/
getName(): string;
/**
* Get role description
*/
getDescription(): string;
/**
* Get domain ID if this is a domain-specific role
*/
getDomainId(): string | null;
/**
* Get all permissions in this role
*/
getPermissions(): IPermission[];
/**
* Add a permission to the role
*/
addPermission(permission: IPermission): void;
/**
* Remove a permission from the role
*/
removePermission(permissionId: string): void;
/**
* Check if role has a specific permission
*/
hasPermission(permissionId: string): boolean;
}
/**
* KYC provider interface
* Implements verification logic for different KYC levels
*/
export interface IKYCProvider {
/**
* Get provider name
*/
getName(): string;
/**
* Get supported KYC levels
*/
getSupportedLevels(): KYCLevel[];
/**
* Initiate verification process
*/
initiateVerification(identity: IIdentity, level: KYCLevel): string; // Returns verification ID
/**
* Check verification status
*/
checkVerificationStatus(verificationId: string): KYCVerificationStatus;
/**
* Get verification result
*/
getVerificationResult(verificationId: string): KYCVerificationResult | null;
}
/**
* KYC verification status
*/
export enum KYCVerificationStatus {
PENDING,
IN_PROGRESS,
COMPLETED,
FAILED,
EXPIRED
}
/**
* KYC verification result
*/
export interface KYCVerificationResult {
verificationId: string;
identityId: string;
level: KYCLevel;
status: KYCVerificationStatus;
verifiedAt: f64;
expiresAt: f64;
verifiedData: Map<string, string>;
provider: string;
}
/**
* Audit entry interface
* Records all state changes in the system
*/
export interface IAuditEntry {
serialize(): Uint8Array;
deserialize(data: Uint8Array): void;
toJSON(): string;
fromJSON(json: string): void;
/**
* Get audit entry ID
*/
getId(): string;
/**
* Get timestamp of the action
*/
getTimestamp(): f64;
/**
* Get the identity that performed the action
*/
getActorId(): string;
/**
* Get the action type
*/
getAction(): AuditAction;
/**
* Get the target entity ID
*/
getTargetId(): string;
/**
* Get the target entity type
*/
getTargetType(): string;
/**
* Get additional context data
*/
getContext(): Map<string, string>;
/**
* Get the result of the action
*/
getResult(): AuditResult;
}
/**
* Audit actions
*/
export enum AuditAction {
CREATE,
UPDATE,
DELETE,
TRANSFER,
GRANT_PERMISSION,
REVOKE_PERMISSION,
ADD_MEMBER,
REMOVE_MEMBER,
VERIFY_KYC,
AUTHENTICATE,
DEACTIVATE,
REACTIVATE
}
/**
* Audit result
*/
export enum AuditResult {
SUCCESS,
FAILURE,
PARTIAL
}
/**
* Identity recovery interface
* Handles multi-signature recovery mechanisms
*/
export interface IIdentityRecovery {
/**
* Initiate recovery process
*/
initiateRecovery(identityId: string, recoveryMethod: RecoveryMethod): string; // Returns recovery ID
/**
* Add recovery signature
*/
addRecoverySignature(recoveryId: string, signature: string, signerId: string): boolean;
/**
* Check if recovery threshold is met
*/
isRecoveryThresholdMet(recoveryId: string): boolean;
/**
* Complete recovery process
*/
completeRecovery(recoveryId: string, newCredentials: Map<string, string>): boolean;
/**
* Cancel recovery process
*/
cancelRecovery(recoveryId: string, reason: string): boolean;
}
/**
* Recovery methods
*/
export enum RecoveryMethod {
MULTI_SIGNATURE,
SOCIAL_RECOVERY,
TIME_LOCKED,
HARDWARE_KEY
}
/**
* Session interface for authentication
*/
export interface ISession extends Serializable {
/**
* Get session ID
*/
getId(): string;
/**
* Get identity ID associated with session
*/
getIdentityId(): string;
/**
* Get session creation time
*/
getCreatedAt(): f64;
/**
* Get session expiration time
*/
getExpiresAt(): f64;
/**
* Check if session is valid
*/
isValid(): boolean;
/**
* Refresh session
*/
refresh(): void;
/**
* Invalidate session
*/
invalidate(): void;
/**
* Get session metadata
*/
getMetadata(): Map<string, string>;
}
/**
* Domain registry interface
* Manages root domain registration and lookup
*/
export interface IDomainRegistry {
/**
* Register a new root domain
*/
registerDomain(name: string, ownerId: string): IDomain;
/**
* Check if domain name is available
*/
isAvailable(name: string): boolean;
/**
* Lookup domain by name
*/
lookupDomain(name: string): IDomain | null;
/**
* Get all registered domains
*/
getAllDomains(): string[];
/**
* Transfer domain between registries
*/
transferDomain(domainId: string, targetRegistry: string): boolean;
}