UNPKG

@dwn-protocol/id-sdk

Version:

SDK for accessing the features and capabilities

68 lines (60 loc) 1.75 kB
import type { IDAgent } from './agent/index.js'; import type { ProtocolsConfigure } from '@dwn-protocol/id'; /** * The protocol configure message carries the protocol definition and is used * to setup the protocol. * * @beta */ export type ProtocolsConfigureMessage = ProtocolsConfigure['message']; /** * Metadata of the protocol * * @beta */ type ProtocolMetadata = { author: string; messageCid?: string; }; /** * The Protocol API abstraction class. It's used to represent and retrieve a protocol and * also to install (send) protocols to other DIDs. * * @beta */ export class Protocol { private _agent: IDAgent; private _metadata: ProtocolMetadata; private _protocolsConfigureMessage: ProtocolsConfigureMessage; /** * The protocol definition: types, structure and publish status */ get definition() { return this._protocolsConfigureMessage.descriptor.definition; } constructor(agent: IDAgent, protocolsConfigureMessage: ProtocolsConfigureMessage, metadata: ProtocolMetadata) { this._agent = agent; this._metadata = metadata; this._protocolsConfigureMessage = protocolsConfigureMessage; } /** * Returns the protocol as a JSON object. */ toJSON() { return this._protocolsConfigureMessage; } /** * Sends the protocol to a remote DWN by specifying their DID * @param target - the DID to send the protocol to * @returns the status of the send protocols request */ async send(target: string) { const { reply } = await this._agent.sendDwnRequest({ author : this._metadata.author, messageCid : this._metadata.messageCid, messageType : 'ProtocolsConfigure', target : target, }); return { status: reply.status }; } }