-
Notifications
You must be signed in to change notification settings - Fork 2k
/
create_draft.ts
74 lines (62 loc) · 1.56 KB
/
create_draft.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import { z } from "zod";
import { GmailBaseTool, GmailBaseToolParams } from "./base.js";
import { CREATE_DRAFT_DESCRIPTION } from "./descriptions.js";
export class GmailCreateDraft extends GmailBaseTool {
name = "create_gmail_draft";
schema = 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(),
});
description = CREATE_DRAFT_DESCRIPTION;
constructor(fields?: GmailBaseToolParams) {
super(fields);
}
private prepareDraftMessage(
message: string,
to: string[],
subject: string,
cc?: string[],
bcc?: string[]
) {
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: z.output<typeof this.schema>) {
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}`;
}
}
export type CreateDraftSchema = {
message: string;
to: string[];
subject: string;
cc?: string[];
bcc?: string[];
};