Saltar al contenido principal

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 * * * * *";