58 lines
1.9 KiB
JavaScript
58 lines
1.9 KiB
JavaScript
import { z } from "zod";
|
|
import { GmailBaseTool } from "./base.js";
|
|
import { CREATE_DRAFT_DESCRIPTION } from "./descriptions.js";
|
|
export class GmailCreateDraft extends GmailBaseTool {
|
|
constructor(fields) {
|
|
super(fields);
|
|
Object.defineProperty(this, "name", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: "create_gmail_draft"
|
|
});
|
|
Object.defineProperty(this, "schema", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: z.object({
|
|
message: z.string(),
|
|
to: z.array(z.string()),
|
|
subject: z.string(),
|
|
cc: z.array(z.string()).optional(),
|
|
bcc: z.array(z.string()).optional(),
|
|
})
|
|
});
|
|
Object.defineProperty(this, "description", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: CREATE_DRAFT_DESCRIPTION
|
|
});
|
|
}
|
|
prepareDraftMessage(message, to, subject, cc, bcc) {
|
|
const draftMessage = {
|
|
message: {
|
|
raw: "",
|
|
},
|
|
};
|
|
const email = [
|
|
`To: ${to.join(", ")}`,
|
|
`Subject: ${subject}`,
|
|
cc ? `Cc: ${cc.join(", ")}` : "",
|
|
bcc ? `Bcc: ${bcc.join(", ")}` : "",
|
|
"",
|
|
message,
|
|
].join("\n");
|
|
draftMessage.message.raw = Buffer.from(email).toString("base64url");
|
|
return draftMessage;
|
|
}
|
|
async _call(arg) {
|
|
const { message, to, subject, cc, bcc } = arg;
|
|
const create_message = this.prepareDraftMessage(message, to, subject, cc, bcc);
|
|
const response = await this.gmail.users.drafts.create({
|
|
userId: "me",
|
|
requestBody: create_message,
|
|
});
|
|
return `Draft created. Draft Id: ${response.data.id}`;
|
|
}
|
|
}
|