DWN
DWN Client
1. Instala
npm i @extrimian/dwn-client
2. Inicializa DWN Client
Cuando queremos instaciar el DWN lo debemos configurar pasandole un DID, para que pueda pullear mensajes de ese DID, inboxURL que seria el endpoint de nuestro servico de DWN, y un storage que es el lugar donde se van a guardar los mensajes.
const dwnClient = new DWNClient({
did : "did:example";
inboxURL : "dwnURL";
storage : MessageStorage;
});
Para esta prueba puedes crear un storage que guarde los datos en memoria
export const storageMock: MessageStorage = {
async getMessages(): Promise<Entry[]> {
return messagesStorage;
},
async getLastPullDate(): Promise<Date> {
return lastPullDate;
},
async saveMessages(messages: Entry[]): Promise<void> {
messagesStorage.push(...messages);
},
async updateLastPullDate(date: Date): Promise<void> {
lastPullDate = date;
},
};
3. Envía un mesnaje al DWN
const sendMsg = await dwnClient.sendMessage({
targetDID: "did:example", //refiere al did del destinatario
targetInboxURL: "dwnURL", // refiere al servicio del dwn del destinatario, el mismo se obtiene resolviendo el DidDocument
message: {
data: packedMessage, //el mensaje a enviar debe ir empaquetado con DidComm
descriptor: {
method: ThreadMethod.Create,
dateCreated: new Date(),
dataFormat: "application/json",
},
},
});
DWN Types
La estructura de los mensajes estan definidas en el protocolo por lo que lo que seran de la siguiente manera.
export type Entry = {
descriptor: MessageDescriptor;
data?: any;
};
export type MessageDescriptor = {
method: ThreadMethod;
// UUIDv4
objectId?: string;
// Content-Type header (e.g. application/json)
dataFormat?: string;
// content id
cid?: {
codec: string;
version: number;
hash: any;
};
// Creation date in UNIX timestamp format
dateCreated?: number;
// Data Schema URL
schema?: string;
// Initial thread message id
root?: string;
// Parent (replying to) message id
parent?: string;
};
DWN Scheduler para el Pulleo de mensajes
1. Instala
npm i @extrimian/dwn-client-scheduler
2. Inicializa el DwnClientScheduler
const dwnClientScheduler = new DWNClientScheduler(dwnClient, cronExpression);
dwnClientScheduler.start();
dwnClient.addSubscriber(async (messages) => {
console.log(`Found ${messages.length} messages`);
console.log(messages);
});
const cronExpression = "*/10 * * * * *";