@holochain/client
Version:
A JavaScript client for the Holochain Conductor API
870 lines (869 loc) • 18.7 kB
TypeScript
import { Action, DhtOp, Entry, ZomeCallCapGrant } from "../../hdk/index.js";
import { ActionHash, AgentPubKey, CellId, DnaHash, DnaHashB64, DnaProperties, Duration, HoloHash, HoloHashB64, InstalledAppId, KitsuneAgent, KitsuneSpace, RoleName, Signature, Timestamp, WasmHash } from "../../types.js";
import { Requester } from "../common.js";
/**
* @public
*/
export type AttachAppInterfaceRequest = {
port?: number;
/**
* Comma separated list of origins, or `*` to allow any origin.
* For example: `http://localhost:3000,http://localhost:3001`
*/
allowed_origins: string;
/**
* Optionally, bind this app interface to a specific installed app.
*/
installed_app_id?: InstalledAppId;
};
/**
* @public
*/
export type AttachAppInterfaceResponse = {
port: number;
};
/**
* @public
*/
export type EnableAppRequest = {
installed_app_id: InstalledAppId;
};
/**
* @public
*/
export type EnableAppResponse = {
app: AppInfo;
errors: Array<[CellId, string]>;
};
/**
* @public
*/
export type DeactivationReason = "never_activated" | "normal" | {
quarantined: {
error: string;
};
};
/**
* @public
*/
export type PausedAppReason = {
error: string;
};
/**
* @public
*/
export type DisabledAppReason = "never_started" | "user" | "not_started_after_providing_memproofs" | {
error: string;
};
/**
* @public
*/
export type InstalledAppInfoStatus = {
paused: {
reason: PausedAppReason;
};
} | {
disabled: {
reason: DisabledAppReason;
};
} | "awaiting_memproofs" | "running";
/**
* @public
*/
export interface StemCell {
dna: DnaHash;
name?: string;
dna_modifiers: DnaModifiers;
}
/**
* @public
*/
export interface ProvisionedCell {
cell_id: CellId;
dna_modifiers: DnaModifiers;
name: string;
}
/**
* @public
*/
export interface ClonedCell {
cell_id: CellId;
clone_id: RoleName;
original_dna_hash: DnaHash;
dna_modifiers: DnaModifiers;
name: string;
enabled: boolean;
}
/**
* @public
*/
export declare enum CellType {
Provisioned = "provisioned",
Cloned = "cloned",
Stem = "stem"
}
/**
* @public
*/
export type CellInfo = {
[CellType.Provisioned]: ProvisionedCell;
} | {
[CellType.Cloned]: ClonedCell;
} | {
[CellType.Stem]: StemCell;
};
/**
* @public
*/
export type AppInfo = {
agent_pub_key: AgentPubKey;
installed_app_id: InstalledAppId;
cell_info: Record<RoleName, Array<CellInfo>>;
status: InstalledAppInfoStatus;
};
/**
* @public
*/
export type MembraneProof = Uint8Array;
/**
* @public
*/
export type MemproofMap = {
[key: RoleName]: MembraneProof;
};
/**
* @public
*/
export type RoleSettingsMap = {
[key: RoleName]: RoleSettings;
};
/**
* @public
*/
export type RoleSettings = {
type: "UseExisting";
cell_id: CellId;
} | {
type: "Provisioned";
membrane_proof?: MembraneProof;
modifiers?: DnaModifiersOpt;
};
/**
* @public
* Any value that is serializable to a Yaml value
*/
export type YamlProperties = unknown;
/**
* @public
*/
export type DnaModifiersOpt = {
network_seed?: NetworkSeed;
properties?: YamlProperties;
origin_time?: Timestamp;
quantum_time?: Duration;
};
/**
* @public
*/
export type DisableAppRequest = {
installed_app_id: InstalledAppId;
};
/**
* @public
*/
export type DisableAppResponse = null;
/**
* @public
*/
export type StartAppRequest = {
installed_app_id: InstalledAppId;
};
/**
* @public
*/
export type StartAppResponse = boolean;
/**
* @public
*/
export type DumpStateRequest = {
cell_id: CellId;
};
/**
* @public
*/
export type DumpStateResponse = any;
/**
* @public
*/
export type DumpFullStateRequest = {
cell_id: CellId;
dht_ops_cursor?: number;
};
/**
* @public
*/
export type DumpFullStateResponse = FullStateDump;
/**
* @public
*/
export type GenerateAgentPubKeyRequest = void;
/**
* @public
*/
export type GenerateAgentPubKeyResponse = AgentPubKey;
/**
* @public
*/
export type RevokeAgentKeyRequest = {
agent_key: AgentPubKey;
app_id: InstalledAppId;
};
/**
* Contains a list of errors of the cells where deletion was unsuccessful.
*
* If the key could not be deleted from all cells, the call
* {@link RevokeAgentKeyRequest} can be re-attempted to delete the key from the remaining cells.
*
* @public
*/
export type RevokeAgentKeyResponse = Array<[CellId, string]>;
/**
* @public
*/
export type RegisterDnaRequest = {
modifiers?: {
network_seed?: string;
properties?: DnaProperties;
};
} & DnaSource;
/**
* @public
*/
export type RegisterDnaResponse = HoloHash;
/**
* @public
*/
export type DnaModifiers = {
network_seed: NetworkSeed;
properties: Uint8Array;
origin_time: Timestamp;
quantum_time: Duration;
};
/**
* @public
*/
export type FunctionName = string;
/**
* @public
*/
export type ZomeName = string;
/**
* @public
*/
export type ZomeDefinition = [
ZomeName,
{
wasm_hash: WasmHash;
dependencies: ZomeName[];
}
];
/**
* @public
*/
export type IntegrityZome = ZomeDefinition;
/**
* @public
*/
export type CoordinatorZome = ZomeDefinition;
/**
* @public
*/
export type DnaDefinition = {
name: string;
modifiers: DnaModifiers;
lineage: DnaHashB64[];
integrity_zomes: IntegrityZome[];
coordinator_zomes: CoordinatorZome[];
};
/**
* @public
*/
export type GetDnaDefinitionRequest = DnaHash;
/**
* @public
*/
export type GetDnaDefinitionResponse = DnaDefinition;
/**
* @public
*/
export type GetCompatibleCellsRequest = DnaHashB64;
/**
* @public
*/
export type GetCompatibleCellsResponse = Set<[InstalledAppId, Set<CellId>]>;
/**
* @public
*/
export type UninstallAppRequest = {
installed_app_id: InstalledAppId;
};
/**
* @public
*/
export type UninstallAppResponse = null;
/**
* @public
*/
export type UpdateCoordinatorsRequest = {
dna_hash: DnaHash;
} & CoordinatorSource;
/**
* @public
*/
export type UpdateCoordinatorsResponse = void;
/**
* @public
*/
export type ResourceBytes = Uint8Array;
/**
* @public
*/
export type ResourceMap = {
[key: string]: ResourceBytes;
};
/**
* @public
*/
export declare enum CellProvisioningStrategy {
/**
* Always create a new Cell when installing this App
*/
Create = "create",
/**
* Always create a new Cell when installing the App,
* and use a unique network seed to ensure a distinct DHT network.
*
* Not implemented
*/
/**
* Require that a Cell is already installed which matches the DNA version
* spec, and which has an Agent that's associated with this App's agent
* via DPKI. If no such Cell exists, *app installation fails*.
*/
UseExisting = "use_existing",
/**
* Try `UseExisting`, and if that fails, fallback to `Create`
*/
CreateIfNoExists = "create_if_no_exists"
}
/**
* @public
*/
export interface CellProvisioning {
strategy: CellProvisioningStrategy;
deferred?: boolean;
}
/**
* @public
*/
export type Location = {
/**
* Expect file to be part of this bundle
*/
bundled: string;
} | {
/**
* Get file from local filesystem (not bundled)
*/
path: string;
} | {
/**
* Get file from URL
*/
url: string;
};
/**
* @public
*/
export type DnaVersionSpec = Array<HoloHashB64>;
/**
* @public
*/
export type DnaVersionFlexible = {
singleton: HoloHashB64;
} | {
multiple: DnaVersionSpec;
};
/**
* @public
*/
export type AppRoleDnaManifest = {
clone_limit?: number;
modifiers?: Partial<DnaModifiers>;
version?: DnaVersionFlexible;
} & Location;
/**
* @public
*/
export type AppRoleManifest = {
name: RoleName;
provisioning?: CellProvisioning;
dna: AppRoleDnaManifest;
};
/**
* @public
*/
export type AppManifest = {
manifest_version: string;
name: string;
description?: string;
roles: Array<AppRoleManifest>;
membrane_proofs_deferred: boolean;
};
/**
* @public
*/
export type AppBundle = {
manifest: AppManifest;
resources: ResourceMap;
};
/**
* @public
*/
export type AppBundleSource = {
bundle: AppBundle;
} | {
path: string;
} | {
bytes: Uint8Array;
};
/**
* @public
*/
export type NetworkSeed = string;
/**
* @public
*/
export type InstallAppRequest = {
/**
* The agent to use when creating Cells for this App.
* If not specified, a new agent will be generated by Holochain.
* If DPKI is enabled (default), and the agent key is not specified here,
* a new agent key will be derived from the DPKI device seed and registered with DPKI.
*/
agent_key?: AgentPubKey;
/**
* The unique identifier for an installed app in this conductor.
* If not specified, it will be derived from the app name in the bundle manifest.
*/
installed_app_id?: InstalledAppId;
/**
* Optional global network seed override. If set will override the network seed value for all
* DNAs in the bundle.
*/
network_seed?: NetworkSeed;
/**
* Specify role specific settings or modifiers that will override any settings in the dna manifest.
*/
roles_settings?: RoleSettingsMap;
/**
* Optional: If app installation fails due to genesis failure, normally the app will be immediately uninstalled.
* When this flag is set, the app is left installed with empty cells intact. This can be useful for
* using graft_records_onto_source_chain, or for diagnostics.
*/
ignore_genesis_failure?: boolean;
} & AppBundleSource;
/**
* @public
*/
export type InstallAppResponse = AppInfo;
/**
* @public
*/
export type ListDnasRequest = void;
/**
* @public
*/
export type ListDnasResponse = Array<string>;
/**
* @public
*/
export type ListCellIdsRequest = void;
/**
* @public
*/
export type ListCellIdsResponse = Array<CellId>;
/**
* @public
*/
export type ListActiveAppsRequest = void;
/**
* @public
*/
export type ListActiveAppsResponse = Array<InstalledAppId>;
/**
* @public
*/
export declare enum AppStatusFilter {
Enabled = "Enabled",
Disabled = "Disabled",
Running = "Running",
Stopped = "Stopped",
Paused = "Paused"
}
/**
* @public
*/
export type ListAppsRequest = {
status_filter?: AppStatusFilter;
};
/**
* @public
*/
export type ListAppsResponse = Array<AppInfo>;
/**
* @public
*/
export type ListAppInterfacesRequest = void;
/**
* @public
*/
export type ListAppInterfacesResponse = Array<AppInterfaceInfo>;
/**
* @public
*/
export interface AppInterfaceInfo {
port: number;
allowed_origins: string;
installed_app_id?: InstalledAppId;
}
/**
* This type is meant to be opaque
*
* @public
*/
export type AgentInfoSigned = unknown;
/**
* @public
*/
export type AgentInfoRequest = {
cell_id: CellId | null;
};
/**
* @public
*/
export type AgentInfoResponse = Array<AgentInfoSigned>;
/**
* @public
*/
export type AddAgentInfoRequest = {
agent_infos: Array<AgentInfoSigned>;
};
/**
* @public
*/
export type AddAgentInfoResponse = unknown;
/**
* @public
*/
export interface DeleteCloneCellRequest {
/**
* The app id that the clone cell belongs to
*/
app_id: InstalledAppId;
/**
* The clone id or cell id of the clone cell
*/
clone_cell_id: RoleName | DnaHash;
}
/**
* @public
*/
export type DeleteCloneCellResponse = void;
/**
* @public
*/
export interface GrantZomeCallCapabilityRequest {
/**
* Cell for which to authorize the capability.
*/
cell_id: CellId;
/**
* Specifies the capability, consisting of zomes and functions to allow
* signing for as well as access level, secret and assignees.
*/
cap_grant: ZomeCallCapGrant;
}
/**
* @public
*/
export type GrantZomeCallCapabilityResponse = void;
/**
* @public
*/
export type InstallAppDnaPayload = {
hash: HoloHash;
role_name: RoleName;
membrane_proof?: MembraneProof;
};
/**
* @public
*/
export type ZomeLocation = Location;
/**
* @public
*/
export interface ZomeDependency {
name: ZomeName;
}
/**
* @public
*/
export type ZomeManifest = {
name: string;
hash?: string;
dependencies?: ZomeDependency[];
} & ZomeLocation;
/**
* @public
*/
export interface CoordinatorManifest {
zomes: Array<ZomeManifest>;
}
/**
* @public
*/
export interface CoordinatorBundle {
manifest: CoordinatorManifest;
resources: ResourceMap;
}
/**
* @public
*/
export type CoordinatorSource = {
path: string;
} | {
bundle: CoordinatorBundle;
};
/**
* @public
*/
export type DnaManifest = {
/**
* Currently one "1" is supported
*/
manifest_version: string;
/**
* The friendly "name" of a Holochain DNA.
*/
name: string;
/**
* A network seed for uniquifying this DNA.
*/
network_seed?: NetworkSeed;
/**
* Any arbitrary application properties can be included in this object.
*/
properties?: DnaProperties;
/**
* An array of zomes associated with your DNA.
* The order is significant: it determines initialization order.
*/
zomes: Array<ZomeManifest>;
/**
* A list of past "ancestors" of this DNA.
*
* Whenever a DNA is created which is intended to be used as a migration from
* a previous DNA, the lineage should be updated to include the hash of the
* DNA being migrated from. DNA hashes may also be removed from this list if
* it is desired to remove them from the lineage.
*
* The meaning of the "ancestor" relationship is as follows:
* - For any DNA, there is a migration path from any of its ancestors to itself.
* - When an app depends on a DnaHash via UseExisting, it means that any installed
* DNA in the lineage which contains that DnaHash can be used.
* - The app's Coordinator interface is expected to be compatible across the lineage.
* (Though this cannot be enforced, since Coordinators can be swapped out at
* will by the user, the intention is still there.)
*
* Holochain does nothing to ensure the correctness of the lineage, it is up to
* the app developer to make the necessary guarantees.
*/
lineage: DnaHashB64[];
};
/**
* @public
*/
export type DnaBundle = {
manifest: DnaManifest;
resources: ResourceMap;
};
/**
* @public
*/
export type DnaSource = {
hash: HoloHash;
} | {
path: string;
} | {
bundle: DnaBundle;
};
/**
* @public
*/
export type Zomes = Array<[string, {
wasm_hash: Array<HoloHash>;
}]>;
/**
* @public
*/
export type WasmCode = [HoloHash, {
code: Array<number>;
}];
/**
* @public
*/
export interface AgentInfoDump {
kitsune_agent: KitsuneAgent;
kitsune_space: KitsuneSpace;
dump: string;
}
/**
* @public
*/
export interface P2pAgentsDump {
/**
* The info of this agent's cell.
*/
this_agent_info: AgentInfoDump | undefined;
/**
* The dna as a [`DnaHash`] and [`kitsune_p2p::KitsuneSpace`].
*/
this_dna: [DnaHash, KitsuneSpace] | undefined;
/**
* The agent as [`AgentPubKey`] and [`kitsune_p2p::KitsuneAgent`].
*/
this_agent: [AgentPubKey, KitsuneAgent] | undefined;
/**
* All other agent info.
*/
peers: Array<AgentInfoDump>;
}
/**
* @public
*/
export interface FullIntegrationStateDump {
validation_limbo: Array<DhtOp>;
integration_limbo: Array<DhtOp>;
integrated: Array<DhtOp>;
dht_ops_cursor: number;
}
/**
* @public
*/
export interface SourceChainJsonRecord {
signature: Signature;
action_address: ActionHash;
action: Action;
entry: Entry | undefined;
}
/**
* @public
*/
export interface SourceChainJsonDump {
records: Array<SourceChainJsonRecord>;
published_ops_count: number;
}
/**
* @public
*/
export interface FullStateDump {
peer_dump: P2pAgentsDump;
source_chain_dump: SourceChainJsonDump;
integration_dump: FullIntegrationStateDump;
}
/**
* @public
*/
export interface DnaStorageInfo {
authored_data_size: number;
authored_data_size_on_disk: number;
dht_data_size: number;
dht_data_size_on_disk: number;
cache_data_size: number;
cache_data_size_on_disk: number;
used_by: Array<InstalledAppId>;
}
/**
* @public
*/
export interface DnaStorageBlob {
dna: DnaStorageInfo;
}
/**
* @public
*/
export interface StorageInfo {
blobs: Array<DnaStorageBlob>;
}
/**
* @public
*/
export type StorageInfoRequest = void;
/**
* @public
*/
export type StorageInfoResponse = StorageInfo;
/**
* @public
*/
export interface IssueAppAuthenticationTokenRequest {
installed_app_id: InstalledAppId;
expiry_seconds?: number;
single_use?: boolean;
}
/**
* @public
*/
export type AppAuthenticationToken = number[];
/**
* @public
*/
export interface IssueAppAuthenticationTokenResponse {
token: AppAuthenticationToken;
expires_at?: Timestamp;
}
/**
* @public
*/
export type DumpNetworkStatsRequest = void;
/**
* @public
*/
export type DumpNetworkStatsResponse = string;
/**
* @public
*/
export interface AdminApi {
attachAppInterface: Requester<AttachAppInterfaceRequest, AttachAppInterfaceResponse>;
enableApp: Requester<EnableAppRequest, EnableAppResponse>;
disableApp: Requester<DisableAppRequest, DisableAppResponse>;
dumpState: Requester<DumpStateRequest, DumpStateResponse>;
dumpFullState: Requester<DumpFullStateRequest, DumpFullStateResponse>;
generateAgentPubKey: Requester<GenerateAgentPubKeyRequest, GenerateAgentPubKeyResponse>;
registerDna: Requester<RegisterDnaRequest, RegisterDnaResponse>;
getDnaDefinition: Requester<GetDnaDefinitionRequest, GetDnaDefinitionResponse>;
uninstallApp: Requester<UninstallAppRequest, UninstallAppResponse>;
installApp: Requester<InstallAppRequest, InstallAppResponse>;
listDnas: Requester<ListDnasRequest, ListDnasResponse>;
listCellIds: Requester<ListCellIdsRequest, ListCellIdsResponse>;
listApps: Requester<ListAppsRequest, ListAppsResponse>;
listAppInterfaces: Requester<ListAppInterfacesRequest, ListAppInterfacesResponse>;
agentInfo: Requester<AgentInfoRequest, AgentInfoResponse>;
addAgentInfo: Requester<AddAgentInfoRequest, AddAgentInfoResponse>;
deleteCloneCell: Requester<DeleteCloneCellRequest, DeleteCloneCellResponse>;
grantZomeCallCapability: Requester<GrantZomeCallCapabilityRequest, GrantZomeCallCapabilityResponse>;
storageInfo: Requester<StorageInfoRequest, StorageInfoResponse>;
issueAppAuthenticationToken: Requester<IssueAppAuthenticationTokenRequest, IssueAppAuthenticationTokenResponse>;
dumpNetworkStats: Requester<DumpNetworkStatsRequest, DumpNetworkStatsResponse>;
}