@web5/agent
Version:
195 lines (171 loc) • 7.74 kB
text/typescript
import type { BearerDid } from '@web5/dids';
import type { Web5Rpc } from '../rpc-client.js';
import type { AgentDwnApi } from '../dwn-api.js';
import type { AgentSyncApi } from '../sync-api.js';
import type { AgentCryptoApi } from '../crypto-api.js';
import type { AgentKeyManager } from './key-manager.js';
import type { IdentityVault } from './identity-vault.js';
import type { AgentIdentityApi } from '../identity-api.js';
import type { AgentPermissionsApi } from '../permissions-api.js';
import type { ProcessVcRequest, SendVcRequest, VcResponse } from './vc.js';
import type { AgentDidApi, DidInterface, DidRequest, DidResponse } from '../did-api.js';
import type { DwnInterface, DwnResponse, ProcessDwnRequest, SendDwnRequest } from './dwn.js';
/**
* Defines the structure for response status in the context of an Agent's interaction within the
* Web5 framework.
*
* This type is utilized to convey the success or failure of an operation performed by the Agent,
* providing feedback that can be programmatically interpreted and acted upon.
*
* This standardized response structure ensures a consistent interface for handling operation
* outcomes, enabling clear communication of success or error states along with actionable insights
* when necessary.
*/
export type ResponseStatus = {
/**
* A boolean value indicating the overall success (`true`) or failure (`false`) of the operation.
* - `true`: Indicates that the operation was successful without errors.
* - `false`: Indicates that the operation failed, with the error details provided in the `status`
* object.
*/
ok: boolean;
status: {
/**
* A numerical code representing the specific outcome of the operation.
*
* This can be aligned with standard HTTP status codes for web-based operations or custom codes
* for specific business logic.
*/
code: number;
/**
* A descriptive message corresponding to the status code that provides additional information
* about the operation's result.
*
* This message is particularly useful for logging, debugging, or displaying contextual messages
* to the end-user, offering insights into why an operation succeeded or failed.
*/
message: string;
};
};
/**
* Defines the interface for a Web5 Agent, encapsulating the core functionality all implementations
* must include.
*
* The Agent is responsible for handling decentralized identifier (DID) requests, decentralized web
* node (DWN) requests, and verifiable credential (VC) requests.
*
* The `AgentDid` property represents the Web5 Agent's own DID, while the various process and send
* methods enable the Agent to handle and initiate requests pertaining to DIDs, DWNs, and VCs.
*/
export interface Web5Agent {
/**
* The Decentralized Identifier (DID) of this Web5 Agent.
*/
agentDid: BearerDid;
/**
* Processes a DID request, handling it internally within the agent and returning a DID response,
* typically involving operations like DID creation or resolution.
*/
processDidRequest<T extends DidInterface>(request: DidRequest<T>): Promise<DidResponse<T>>
/**
* Sends a DID request to another entity or service, expecting a DID response, often used for
* interactions involving DIDs occurring over a network or between different agents.
*/
sendDidRequest<T extends DidInterface>(request: DidRequest<T>): Promise<DidResponse<T>>;
/**
* Processes a request related to a Decentralized Web Node (DWN) and returns a corresponding
* response.
*/
processDwnRequest<T extends DwnInterface>(request: ProcessDwnRequest<T>): Promise<DwnResponse<T>>
/**
* Sends a request to a Decentralized Web Node (DWN) and awaits a response, often used for
* interactions involving DWNs occurring over a network or between different agents.
*/
sendDwnRequest<T extends DwnInterface>(request: SendDwnRequest<T>): Promise<DwnResponse<T>>;
/**
* Processes a request for handling Verifiable Credentials (VCs), such as issuing or verifying
* them, and returns a response indicating the outcome.
*/
processVcRequest(request: ProcessVcRequest): Promise<VcResponse>
/**
* Sends a request to issue, verify, or manage Verifiable Credentials (VCs), expecting a response
* that indicates the result of the operation. This method is often used for interactions
* involving VCs occurring over a network or between different agents.
*/
sendVcRequest(request: SendVcRequest): Promise<VcResponse>;
}
/**
* Represents a Web5 Platform Agent, an extended and more feature-rich implementation of a
* {@link Web5Agent}.
*
* This Agent integrates a comprehensive set of APIs and functionalities, including cryptographic
* operations, DID management, DWN interaction, identity handling, and data synchronization.
*
* The platform agent provides a higher-level abstraction over the core Web5Agent functionalities,
* facilitating a robust platform for developing Web5 applications. It includes lifecycle management
* methods like initialization and startup, alongside a suite of specialized APIs and utilities.
*
* @typeParam TKeyManager - The type of Key Manager used to manage cryptographic keys.
*/
export interface Web5PlatformAgent<TKeyManager extends AgentKeyManager = AgentKeyManager> extends Web5Agent {
/**
* The cryptography API, essential for performing various cryptographic operations such
* as encryption, decryption, signing, and verification, ensuring secure data handling and
* communication within the Web5 Platform.
*/
crypto: AgentCryptoApi;
/**
* The DID API, responsible for managing all DID-related functionalities, enabling the agent to
* create, resolve, update, and manage DIDs.
*/
did: AgentDidApi<TKeyManager>;
/**
* The DWN API, enabling the Agent to interact with Decentralized Web Nodes (DWNs) and handle
* requests from Web5 applications.
*/
dwn: AgentDwnApi;
/**
* The identity management API, handling identity-related operations and allowing the agent to
* manage Web5 identities, supporting operations like identity creation and update.
*/
identity: AgentIdentityApi<TKeyManager>;
/**
* The Key Manager instance, central to the agent's cryptographic operations, managing key
* generation, storage, retrieval, and usage, ensuring secure cryptographic practices.
*/
keyManager: TKeyManager;
/**
* The Permissions API, handling permission operations such as request, create, revocation, fetching and verifying revocation status.
*/
permissions: AgentPermissionsApi;
/**
* The RPC (Remote Procedure Call) client interface, facilitating communication with other Web5
* Agents and services.
*/
rpc: Web5Rpc;
/**
* The synchronization API, responsible for managing the consistency and real-time update of the
* agent's data with the state of the distributed network.
*/
sync: AgentSyncApi;
/**
* An instance of {@link IdentityVault}, providing secure storage and management of a Web5 Agent's
* DID and cryptographic keys.
*/
vault: IdentityVault;
/**
* Determines if it's the first time the Agent is being launched, typically used for initialization
* checks or first-time setup routines.
*/
firstLaunch(): Promise<boolean>;
/**
* Initializes the agent with essential parameters (e.g., a passphrase) and prepares it for
* processing Web5 requests.
*/
initialize(params: unknown): Promise<unknown>;
/**
* Starts the agent with the provided parameters, typically following initialization, to begin
* normal operation and readiness to process requests.
*/
start(params: unknown): Promise<unknown>;
}