'use strict';
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/*
* Nexmo Client SDK
* Message NXMEvent Object Model
*
* Copyright (c) Nexmo Inc.
*/
const loglevel_1 = require("loglevel");
const utils_1 = __importDefault(require("../utils"));
const nxmEvent_1 = __importDefault(require("./nxmEvent"));
const nexmoClientError_1 = require("../nexmoClientError");
/**
* A message event
*
* @class MessageEvent
* @extends NXMEvent
*/
class MessageEvent extends nxmEvent_1.default {
constructor(conversation, params) {
super(conversation, params);
this.log = loglevel_1.getLogger(this.constructor.name);
this.type = 'message';
this.conversation = conversation;
this.state = {
seen_by: {},
delivered_to: {},
submitted_to: {},
rejected_by: {},
undeliverable_to: {}
};
if (params && params.body && params.body.timestamp) {
this.timestamp = params.body.timestamp;
}
Object.assign(this, params);
}
/**
* Set the messageEvent status to 'seen'
* @returns {Promise}
* @example <caption>Set the messageEvent status to 'seen'</caption>
* messageEvent.seen().then(() => {
* console.log("message event status set to seen");
* }).catch((error)=>{
* console.log("error setting message event status to seen ", error);
* });
*/
seen() {
return super.seen();
}
/**
* Set the messageEvent status to 'delivered'.
* handled by the SDK
* @returns {Promise}
* @example <caption>Set the messageEvent status to 'delivered'</caption>
* messageEvent.delivered().then(() => {
* console.log("message event status set to delivered");
* }).catch((error)=>{
* console.log("error setting message event status to delivered ", error);
* });
*/
delivered() {
return super.delivered();
}
/**
* Delete the messageEvent
* @returns {Promise}
* @example <caption>Delete the messageEvent</caption>
* messageEvent.del().then(() => {
* console.log("message event deleted");
* }).catch((error)=>{
* console.log("error deleting message event ", error);
* });
*/
del() {
return super.del();
}
/**
* Download an Image from Media service
* @returns {string} the dataUrl "data:image/jpeg;base64..."
* @example <caption>Downloading an image from the messageEvent</caption>
* messageEvent.fetchImage().then((imageData) => {
* const img = new Image();
* img.src = imageData;
* document.body.appendChild(img);
* }).catch((error) => {
* console.log("error getting image ", error);
* });
*/
async fetchImage() {
if (this.body.message_type !== "image") {
throw new nexmoClientError_1.NexmoClientError('error:message-event:invalid');
}
try {
return utils_1.default._fetchImage(this.body.image.url, this.conversation.application.session.config.token);
}
catch (error) {
this.log.error(error);
throw error;
}
}
}
exports.default = MessageEvent;
module.exports = MessageEvent;