import drift from "../../drift.app.mjs";
import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform";
import { doesContextMatch } from "../../common/utils.mjs";
export default {
key: "drift-new-message",
name: "New Message in Conversation",
description: "Emit new event when a message is received in a specific Drift conversation. [See the documentations](https://devdocs.drift.com/docs/retrieve-a-conversations-messages)",
version: "0.0.1",
type: "source",
dedupe: "unique",
props: {
drift,
db: "$.service.db",
conversationId: {
type: "integer",
label: "Conversation ID",
description: "Enter the ID of the conversation",
},
messageContext: {
type: "object",
label: "Message Context",
description: "Enter message context [See the documentation](https://devdocs.drift.com/docs/message-model).",
optional: true,
},
timer: {
type: "$.interface.timer",
label: "Polling Interval",
description: "How often to poll Drift for new messages.",
default: {
intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
},
},
},
async run({ $ }) {
const {
drift,
db,
conversationId,
} = this;
const messageContext = drift.parseIfJSONString(this.messageContext);
console.log(messageContext);
const messages = await drift.getMessagesByConvId($, conversationId);
if (!messages?.length) {
console.log("No messages found.");
return;
};
let lastMessageId = await db.get("lastMessage");
const lastFetchedMsgId = messages[messages.length - 1].id;
if (!lastMessageId) {
await db.set("lastMessage", lastFetchedMsgId);
console.log(`Initialized with ID ${lastFetchedMsgId}.`);
return;
};
if (lastMessageId === lastFetchedMsgId) {
console.log("No new messages found");
return;
};
const lastMessageIndex = messages.findIndex((obj) => obj.id === lastMessageId);
if (lastMessageIndex === -1) {
console.log("Last message ID not found.");
return;
};
for (let i = lastMessageIndex + 1; i < messages.length; i++) {
if (messageContext) {
if (!doesContextMatch(messageContext, messages[i].context)) continue;
}
this.$emit(messages[i], {
id: messages[i].id,
summary: `New message with ID ${messages[i].id}`,
ts: messages[i].createdAt,
});
};
await db.set("lastMessage", lastFetchedMsgId);
},
};