@corsair-dev/gmail 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/dist/endpoints/index.d.ts +0 -8
- package/dist/endpoints/index.d.ts.map +1 -1
- package/dist/endpoints/messages.d.ts +0 -1
- package/dist/endpoints/messages.d.ts.map +1 -1
- package/dist/endpoints/threads.d.ts +0 -1
- package/dist/endpoints/threads.d.ts.map +1 -1
- package/dist/endpoints/types.d.ts +0 -12
- package/dist/endpoints/types.d.ts.map +1 -1
- package/dist/index.d.ts +0 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -24,14 +24,12 @@ pnpm add @corsair-dev/gmail
|
|
|
24
24
|
| `labels.list` | `gmail.api.labels.list` | `read` | List all labels in the mailbox |
|
|
25
25
|
| `labels.update` | `gmail.api.labels.update` | `write` | Update an existing label |
|
|
26
26
|
| `messages.batchModify` | `gmail.api.messages.batchModify` | `write` | Add or remove labels from multiple messages in bulk |
|
|
27
|
-
| `messages.delete` | `gmail.api.messages.delete` | `destructive` | Permanently delete a message [DESTRUCTIVE · IRREVERSIBLE] |
|
|
28
27
|
| `messages.get` | `gmail.api.messages.get` | `read` | Get a specific message |
|
|
29
28
|
| `messages.list` | `gmail.api.messages.list` | `read` | List messages in a mailbox |
|
|
30
29
|
| `messages.modify` | `gmail.api.messages.modify` | `write` | Add or remove labels from a message |
|
|
31
30
|
| `messages.send` | `gmail.api.messages.send` | `write` | Send an email to one or more recipients |
|
|
32
31
|
| `messages.trash` | `gmail.api.messages.trash` | `write` | Move a message to the trash |
|
|
33
32
|
| `messages.untrash` | `gmail.api.messages.untrash` | `write` | Restore a message from the trash |
|
|
34
|
-
| `threads.delete` | `gmail.api.threads.delete` | `destructive` | Permanently delete a thread [DESTRUCTIVE · IRREVERSIBLE] |
|
|
35
33
|
| `threads.get` | `gmail.api.threads.get` | `read` | Get a specific thread |
|
|
36
34
|
| `threads.list` | `gmail.api.threads.list` | `read` | List threads in the mailbox |
|
|
37
35
|
| `threads.modify` | `gmail.api.threads.modify` | `write` | Add or remove labels from a thread |
|
|
@@ -18,10 +18,6 @@ export declare const MessagesEndpoints: {
|
|
|
18
18
|
userId?: string | undefined;
|
|
19
19
|
threadId?: string | undefined;
|
|
20
20
|
}) => Promise<import("..").Message>;
|
|
21
|
-
delete: (ctx: import("..").GmailContext, args: {
|
|
22
|
-
id: string;
|
|
23
|
-
userId?: string | undefined;
|
|
24
|
-
}) => Promise<void>;
|
|
25
21
|
modify: (ctx: import("..").GmailContext, args: {
|
|
26
22
|
id: string;
|
|
27
23
|
userId?: string | undefined;
|
|
@@ -146,10 +142,6 @@ export declare const ThreadsEndpoints: {
|
|
|
146
142
|
addLabelIds?: string[] | undefined;
|
|
147
143
|
removeLabelIds?: string[] | undefined;
|
|
148
144
|
}) => Promise<import("..").Thread>;
|
|
149
|
-
delete: (ctx: import("..").GmailContext, args: {
|
|
150
|
-
id: string;
|
|
151
|
-
userId?: string | undefined;
|
|
152
|
-
}) => Promise<void>;
|
|
153
145
|
trash: (ctx: import("..").GmailContext, args: {
|
|
154
146
|
id: string;
|
|
155
147
|
userId?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../endpoints/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../endpoints/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQ7B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM3B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAO3B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM5B,CAAC;AAEF,cAAc,SAAS,CAAC"}
|
|
@@ -2,7 +2,6 @@ import type { GmailEndpoints } from '../index';
|
|
|
2
2
|
export declare const list: GmailEndpoints['messagesList'];
|
|
3
3
|
export declare const get: GmailEndpoints['messagesGet'];
|
|
4
4
|
export declare const send: GmailEndpoints['messagesSend'];
|
|
5
|
-
export declare const deleteMessage: GmailEndpoints['messagesDelete'];
|
|
6
5
|
export declare const modify: GmailEndpoints['messagesModify'];
|
|
7
6
|
export declare const batchModify: GmailEndpoints['messagesBatchModify'];
|
|
8
7
|
export declare const trash: GmailEndpoints['messagesTrash'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../endpoints/messages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,UAAU,CAAC;AAgFpE,eAAO,MAAM,IAAI,EAAE,cAAc,CAAC,cAAc,CAqC/C,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,cAAc,CAAC,aAAa,CAsC7C,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,cAAc,CAAC,cAAc,CAuB/C,CAAC;AAEF,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../endpoints/messages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,UAAU,CAAC;AAgFpE,eAAO,MAAM,IAAI,EAAE,cAAc,CAAC,cAAc,CAqC/C,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,cAAc,CAAC,aAAa,CAsC7C,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,cAAc,CAAC,cAAc,CAuB/C,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAiCnD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,cAAc,CAAC,qBAAqB,CAiC7D,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,cAAc,CAAC,eAAe,CAmBjD,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,cAAc,CAAC,iBAAiB,CAsBrD,CAAC"}
|
|
@@ -2,7 +2,6 @@ import type { GmailEndpoints } from '../index';
|
|
|
2
2
|
export declare const list: GmailEndpoints['threadsList'];
|
|
3
3
|
export declare const get: GmailEndpoints['threadsGet'];
|
|
4
4
|
export declare const modify: GmailEndpoints['threadsModify'];
|
|
5
|
-
export declare const deleteThread: GmailEndpoints['threadsDelete'];
|
|
6
5
|
export declare const trash: GmailEndpoints['threadsTrash'];
|
|
7
6
|
export declare const untrash: GmailEndpoints['threadsUntrash'];
|
|
8
7
|
//# sourceMappingURL=threads.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../endpoints/threads.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,UAAU,CAAC;AAGpE,eAAO,MAAM,IAAI,EAAE,cAAc,CAAC,aAAa,CAqC9C,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,cAAc,CAAC,YAAY,CA8B5C,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,cAAc,CAAC,eAAe,CAiClD,CAAC;AAEF,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../endpoints/threads.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,UAAU,CAAC;AAGpE,eAAO,MAAM,IAAI,EAAE,cAAc,CAAC,aAAa,CAqC9C,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,cAAc,CAAC,YAAY,CA8B5C,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,cAAc,CAAC,eAAe,CAiClD,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,cAAc,CAAC,cAAc,CAmBhD,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,cAAc,CAAC,gBAAgB,CAmBpD,CAAC"}
|
|
@@ -25,10 +25,6 @@ export declare const GmailEndpointInputSchemas: {
|
|
|
25
25
|
raw: z.ZodString;
|
|
26
26
|
threadId: z.ZodOptional<z.ZodString>;
|
|
27
27
|
}, z.core.$strip>;
|
|
28
|
-
readonly messagesDelete: z.ZodObject<{
|
|
29
|
-
userId: z.ZodOptional<z.ZodString>;
|
|
30
|
-
id: z.ZodString;
|
|
31
|
-
}, z.core.$strip>;
|
|
32
28
|
readonly messagesModify: z.ZodObject<{
|
|
33
29
|
userId: z.ZodOptional<z.ZodString>;
|
|
34
30
|
id: z.ZodString;
|
|
@@ -170,10 +166,6 @@ export declare const GmailEndpointInputSchemas: {
|
|
|
170
166
|
addLabelIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
171
167
|
removeLabelIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
172
168
|
}, z.core.$strip>;
|
|
173
|
-
readonly threadsDelete: z.ZodObject<{
|
|
174
|
-
userId: z.ZodOptional<z.ZodString>;
|
|
175
|
-
id: z.ZodString;
|
|
176
|
-
}, z.core.$strip>;
|
|
177
169
|
readonly threadsTrash: z.ZodObject<{
|
|
178
170
|
userId: z.ZodOptional<z.ZodString>;
|
|
179
171
|
id: z.ZodString;
|
|
@@ -244,7 +236,6 @@ export declare const GmailEndpointOutputSchemas: {
|
|
|
244
236
|
payload: z.ZodOptional<z.ZodType<MessagePartShape, unknown, z.core.$ZodTypeInternals<MessagePartShape, unknown>>>;
|
|
245
237
|
raw: z.ZodOptional<z.ZodString>;
|
|
246
238
|
}, z.core.$strip>;
|
|
247
|
-
readonly messagesDelete: z.ZodVoid;
|
|
248
239
|
readonly messagesModify: z.ZodObject<{
|
|
249
240
|
id: z.ZodOptional<z.ZodString>;
|
|
250
241
|
threadId: z.ZodOptional<z.ZodString>;
|
|
@@ -506,7 +497,6 @@ export declare const GmailEndpointOutputSchemas: {
|
|
|
506
497
|
raw: z.ZodOptional<z.ZodString>;
|
|
507
498
|
}, z.core.$strip>>>;
|
|
508
499
|
}, z.core.$strip>;
|
|
509
|
-
readonly threadsDelete: z.ZodVoid;
|
|
510
500
|
readonly threadsTrash: z.ZodObject<{
|
|
511
501
|
id: z.ZodOptional<z.ZodString>;
|
|
512
502
|
snippet: z.ZodOptional<z.ZodString>;
|
|
@@ -550,7 +540,6 @@ export type GmailEndpointOutputs = {
|
|
|
550
540
|
messagesList: MessageListResponse;
|
|
551
541
|
messagesGet: Message;
|
|
552
542
|
messagesSend: Message;
|
|
553
|
-
messagesDelete: void;
|
|
554
543
|
messagesModify: Message;
|
|
555
544
|
messagesBatchModify: void;
|
|
556
545
|
messagesTrash: Message;
|
|
@@ -569,7 +558,6 @@ export type GmailEndpointOutputs = {
|
|
|
569
558
|
threadsList: ThreadListResponse;
|
|
570
559
|
threadsGet: Thread;
|
|
571
560
|
threadsModify: Thread;
|
|
572
|
-
threadsDelete: void;
|
|
573
561
|
threadsTrash: Thread;
|
|
574
562
|
threadsUntrash: Thread;
|
|
575
563
|
usersGetProfile: Profile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../endpoints/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACX,KAAK,EACL,iBAAiB,EACjB,KAAK,EACL,iBAAiB,EACjB,OAAO,EACP,mBAAmB,EACnB,OAAO,EACP,MAAM,EACN,kBAAkB,EAClB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../endpoints/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACX,KAAK,EACL,iBAAiB,EACjB,KAAK,EACL,iBAAiB,EACjB,OAAO,EACP,mBAAmB,EACnB,OAAO,EACP,MAAM,EACN,kBAAkB,EAClB,MAAM,UAAU,CAAC;AAkMlB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyB5B,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG;KAChC,CAAC,IAAI,MAAM,OAAO,yBAAyB,GAAG,CAAC,CAAC,KAAK,CACrD,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,CACrC;CACD,CAAC;AAqBF,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;iBAMzB,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAAG;IACtE,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC3B,CAAC;AAiGF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyB7B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG;IAClC,YAAY,EAAE,mBAAmB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,IAAI,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,SAAS,EAAE,KAAK,CAAC;IACjB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,SAAS,EAAE,KAAK,CAAC;IACjB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,kBAAkB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;CACzB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -24,7 +24,6 @@ export type GmailEndpoints = {
|
|
|
24
24
|
messagesList: GmailEndpoint<'messagesList'>;
|
|
25
25
|
messagesGet: GmailEndpoint<'messagesGet'>;
|
|
26
26
|
messagesSend: GmailEndpoint<'messagesSend'>;
|
|
27
|
-
messagesDelete: GmailEndpoint<'messagesDelete'>;
|
|
28
27
|
messagesModify: GmailEndpoint<'messagesModify'>;
|
|
29
28
|
messagesBatchModify: GmailEndpoint<'messagesBatchModify'>;
|
|
30
29
|
messagesTrash: GmailEndpoint<'messagesTrash'>;
|
|
@@ -43,7 +42,6 @@ export type GmailEndpoints = {
|
|
|
43
42
|
threadsList: GmailEndpoint<'threadsList'>;
|
|
44
43
|
threadsGet: GmailEndpoint<'threadsGet'>;
|
|
45
44
|
threadsModify: GmailEndpoint<'threadsModify'>;
|
|
46
|
-
threadsDelete: GmailEndpoint<'threadsDelete'>;
|
|
47
45
|
threadsTrash: GmailEndpoint<'threadsTrash'>;
|
|
48
46
|
threadsUntrash: GmailEndpoint<'threadsUntrash'>;
|
|
49
47
|
usersGetProfile: GmailEndpoint<'usersGetProfile'>;
|
|
@@ -59,7 +57,6 @@ export declare const gmailEndpointsNested: {
|
|
|
59
57
|
readonly list: GmailEndpoint<"messagesList">;
|
|
60
58
|
readonly get: GmailEndpoint<"messagesGet">;
|
|
61
59
|
readonly send: GmailEndpoint<"messagesSend">;
|
|
62
|
-
readonly delete: GmailEndpoint<"messagesDelete">;
|
|
63
60
|
readonly modify: GmailEndpoint<"messagesModify">;
|
|
64
61
|
readonly batchModify: GmailEndpoint<"messagesBatchModify">;
|
|
65
62
|
readonly trash: GmailEndpoint<"messagesTrash">;
|
|
@@ -84,7 +81,6 @@ export declare const gmailEndpointsNested: {
|
|
|
84
81
|
readonly list: GmailEndpoint<"threadsList">;
|
|
85
82
|
readonly get: GmailEndpoint<"threadsGet">;
|
|
86
83
|
readonly modify: GmailEndpoint<"threadsModify">;
|
|
87
|
-
readonly delete: GmailEndpoint<"threadsDelete">;
|
|
88
84
|
readonly trash: GmailEndpoint<"threadsTrash">;
|
|
89
85
|
readonly untrash: GmailEndpoint<"threadsUntrash">;
|
|
90
86
|
};
|
|
@@ -157,13 +153,6 @@ export declare const gmailEndpointSchemas: {
|
|
|
157
153
|
raw: import("zod").ZodOptional<import("zod").ZodString>;
|
|
158
154
|
}, import("zod/v4/core").$strip>;
|
|
159
155
|
};
|
|
160
|
-
readonly 'messages.delete': {
|
|
161
|
-
readonly input: import("zod").ZodObject<{
|
|
162
|
-
userId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
163
|
-
id: import("zod").ZodString;
|
|
164
|
-
}, import("zod/v4/core").$strip>;
|
|
165
|
-
readonly output: import("zod").ZodVoid;
|
|
166
|
-
};
|
|
167
156
|
readonly 'messages.modify': {
|
|
168
157
|
readonly input: import("zod").ZodObject<{
|
|
169
158
|
userId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -602,13 +591,6 @@ export declare const gmailEndpointSchemas: {
|
|
|
602
591
|
}, import("zod/v4/core").$strip>>>;
|
|
603
592
|
}, import("zod/v4/core").$strip>;
|
|
604
593
|
};
|
|
605
|
-
readonly 'threads.delete': {
|
|
606
|
-
readonly input: import("zod").ZodObject<{
|
|
607
|
-
userId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
608
|
-
id: import("zod").ZodString;
|
|
609
|
-
}, import("zod/v4/core").$strip>;
|
|
610
|
-
readonly output: import("zod").ZodVoid;
|
|
611
|
-
};
|
|
612
594
|
readonly 'threads.trash': {
|
|
613
595
|
readonly input: import("zod").ZodObject<{
|
|
614
596
|
userId: import("zod").ZodOptional<import("zod").ZodString>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,QAAQ,EAER,uBAAuB,EAGvB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAW7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,MAAM,YAAY,CAAC;AAIpB,OAAO,KAAK,EACX,qBAAqB,EAErB,MAAM,kBAAkB,CAAC;AAO1B;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe;;;;;CAKS,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAC9C,OAAO,WAAW,EAClB,kBAAkB,EAClB,SAAS,EACT,OAAO,eAAe,CACtB,CAAC;AAEF,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,oBAAoB,IAAI,eAAe,CACzE,YAAY,EACZ,mBAAmB,CAAC,CAAC,CAAC,EACtB,oBAAoB,CAAC,CAAC,CAAC,CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC5C,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC1C,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC5C,cAAc,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChD,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AuthMissingError as us,getOAuthAccessToken as gs}from"corsair/core";import{logEventFromContext as S}from"corsair/core";import{request as Ve}from"corsair/http";var B="https://gmail.googleapis.com/gmail/v1";async function y(e,t,a={}){let{method:o="GET",body:n,query:i}=a;return await Ve({BASE:B,VERSION:"1.0.0",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:t,HEADERS:{"Content-Type":"application/json"}},{method:o,url:e,body:o==="POST"||o==="PUT"||o==="PATCH"?n:void 0,mediaType:"application/json",query:o==="GET"?i:void 0})}function Ke(e){return e instanceof Error&&"status"in e&&e.status===401}async function p(e,t,a={}){try{return await y(e,t.key,a)}catch(o){if(Ke(o)&&t._refreshAuth){let n=await t._refreshAuth();return await y(e,n,a)}throw o}}var Y=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/drafts`,e,{method:"GET",query:{maxResults:t.maxResults,pageToken:t.pageToken,q:t.q}});if(a.drafts&&e.db.drafts)try{for(let o of a.drafts)o.id&&await e.db.drafts.upsertByEntityId(o.id,{...o,id:o.id,messageId:o.message?.id,createdAt:new Date})}catch(o){console.warn("Failed to save drafts to database:",o)}return await S(e,"gmail.drafts.list",{...t},"completed"),a},Z=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"GET",query:{format:t.format}});if(a.id&&e.db.drafts)try{await e.db.drafts.upsertByEntityId(a.id,{...a,id:a.id,messageId:a.message?.id,createdAt:new Date})}catch(o){console.warn("Failed to save draft to database:",o)}return await S(e,"gmail.drafts.get",{...t},"completed"),a},Q=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/drafts`,e,{method:"POST",body:t.draft});return a.id&&await e.endpoints.drafts.get({id:a.id,userId:t.userId}),await S(e,"gmail.drafts.create",{...t},"completed"),a},ee=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"PUT",body:t.draft});return a.id&&await e.endpoints.drafts.get({id:a.id,userId:t.userId}),await S(e,"gmail.drafts.update",{...t},"completed"),a},te=async(e,t)=>{if(await p(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"DELETE"}),e.db.drafts)try{await e.db.drafts.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete draft from database:",a)}await S(e,"gmail.drafts.delete",{...t},"completed")},se=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/drafts/send`,e,{method:"POST",body:{id:t.id,message:t.message}});return await S(e,"gmail.drafts.send",{...t},"completed"),a};import{logEventFromContext as D}from"corsair/core";var ae=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/labels`,e,{method:"GET"});if(a.labels&&e.db.labels)try{for(let o of a.labels)o.id&&await e.db.labels.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save labels to database:",o)}return await D(e,"gmail.labels.list",{...t},"completed"),a},oe=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"GET"});if(a.id&&e.db.labels)try{await e.db.labels.upsertByEntityId(a.id,{id:a.id,name:a.name,messageListVisibility:a.messageListVisibility,labelListVisibility:a.labelListVisibility,type:a.type,messagesTotal:a.messagesTotal,messagesUnread:a.messagesUnread,threadsTotal:a.threadsTotal,threadsUnread:a.threadsUnread,createdAt:new Date})}catch(o){console.warn("Failed to save label to database:",o)}return await D(e,"gmail.labels.get",{...t},"completed"),a},ie=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/labels`,e,{method:"POST",body:t.label});return a.id&&await e.endpoints.labels.get({id:a.id,userId:t.userId}),await D(e,"gmail.labels.create",{...t},"completed"),a},ne=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"PUT",body:t.label});return a.id&&await e.endpoints.labels.get({id:a.id,userId:t.userId}),await D(e,"gmail.labels.update",{...t},"completed"),a},re=async(e,t)=>{if(await p(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"DELETE"}),e.db.labels)try{await e.db.labels.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete label from database:",a)}await D(e,"gmail.labels.delete",{...t},"completed")};import{logEventFromContext as I}from"corsair/core";function F(e,t){return e?.headers?e.headers.find(o=>o.name?.toLowerCase()===t.toLowerCase())?.value:void 0}function Ye(e){if(e.payload)return F(e.payload,"Subject")}function Ze(e){if(e.payload)return F(e.payload,"From")}function Qe(e){if(e.payload)return F(e.payload,"To")}function de(e){if(!e)return;let t,a;if(e.body?.data)try{let o=Buffer.from(e.body.data,"base64").toString("utf-8");e.mimeType==="text/plain"?t=o:e.mimeType==="text/html"&&(a=o)}catch{}if(e.parts&&e.parts.length>0)for(let o of e.parts){let n=de(o);n&&(o.mimeType==="text/plain"?t=n:o.mimeType==="text/html"&&!t&&(a=n))}return t||a}function et(e){if(e.payload)return de(e.payload)}var le=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/messages`,e,{method:"GET",query:{q:t.q,maxResults:t.maxResults,pageToken:t.pageToken,labelIds:t.labelIds?.join(","),includeSpamTrash:t.includeSpamTrash}});if(a.messages&&e.db.messages)try{for(let o of a.messages)o.id&&await e.db.messages.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save messages to database:",o)}return await I(e,"gmail.messages.list",{...t},"completed"),a},me=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/messages/${t.id}`,e,{method:"GET",query:{format:t.format,metadataHeaders:t.metadataHeaders?.join(",")}});if(a.id&&e.db.messages)try{let o=Ye(a),n=et(a),i=Ze(a),d=Qe(a);await e.db.messages.upsertByEntityId(a.id,{...a,subject:o,body:n,from:i,to:d,id:a.id,createdAt:new Date})}catch(o){console.warn("Failed to save message to database:",o)}return await I(e,"gmail.messages.get",{...t},"completed"),a},pe=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/messages/send`,e,{method:"POST",body:{raw:t.raw,threadId:t.threadId}});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.send",{...t},"completed"),a},ue=async(e,t)=>{if(await p(`/users/${t.userId||"me"}/messages/${t.id}`,e,{method:"DELETE"}),e.db.messages)try{await e.db.messages.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete message from database:",a)}await I(e,"gmail.messages.delete",{...t},"completed")},ge=async(e,t)=>{let a={};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds);let o=await p(`/users/${t.userId||"me"}/messages/${t.id}/modify`,e,{method:"POST",body:a});return o.id&&await e.endpoints.messages.get({id:o.id,userId:t.userId}),await I(e,"gmail.messages.modify",{...t},"completed"),o},ce=async(e,t)=>{let a={ids:t.ids};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds),await p(`/users/${t.userId||"me"}/messages/batchModify`,e,{method:"POST",body:a}),await I(e,"gmail.messages.batchModify",{...t},"completed")},he=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/messages/${t.id}/trash`,e,{method:"POST"});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.trash",{...t},"completed"),a},fe=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/messages/${t.id}/untrash`,e,{method:"POST"});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.untrash",{...t},"completed"),a};import{logEventFromContext as L}from"corsair/core";var be=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/threads`,e,{method:"GET",query:{q:t.q,maxResults:t.maxResults,pageToken:t.pageToken,labelIds:t.labelIds?.join(","),includeSpamTrash:t.includeSpamTrash}});if(a.threads&&e.db.threads)try{for(let o of a.threads)o.id&&await e.db.threads.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save threads to database:",o)}return await L(e,"gmail.threads.list",{...t},"completed"),a},ye=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/threads/${t.id}`,e,{method:"GET",query:{format:t.format,metadataHeaders:t.metadataHeaders?.join(",")}});if(a.id&&e.db.threads)try{await e.db.threads.upsertByEntityId(a.id,{...a,id:a.id,createdAt:new Date})}catch(o){console.warn("Failed to save thread to database:",o)}return await L(e,"gmail.threads.get",{...t},"completed"),a},Ge=async(e,t)=>{let a={};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds);let o=await p(`/users/${t.userId||"me"}/threads/${t.id}/modify`,e,{method:"POST",body:a});return o.id&&await e.endpoints.threads.get({id:o.id,userId:t.userId}),await L(e,"gmail.threads.modify",{...t},"completed"),o},Ee=async(e,t)=>{if(await p(`/users/${t.userId||"me"}/threads/${t.id}`,e,{method:"DELETE"}),e.db.threads)try{await e.db.threads.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete thread from database:",a)}await L(e,"gmail.threads.delete",{...t},"completed")},Ie=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/threads/${t.id}/trash`,e,{method:"POST"});return a.id&&await e.endpoints.threads.get({id:a.id,userId:t.userId}),await L(e,"gmail.threads.trash",{...t},"completed"),a},we=async(e,t)=>{let a=await p(`/users/${t.userId||"me"}/threads/${t.id}/untrash`,e,{method:"POST"});return a.id&&await e.endpoints.threads.get({id:a.id,userId:t.userId}),await L(e,"gmail.threads.untrash",{...t},"completed"),a};import{z as s}from"zod";var Te="Base64url-encoded RFC 2822 email \u2014 do NOT pass plain email text. Build the MIME message (From, To, Subject, Content-Type headers, blank line, body; lines separated by \\r\\n), then base64url-encode: standard base64, replace + with -, / with _, remove trailing =.",q=s.object({raw:s.string().optional().describe(Te),threadId:s.string().optional()}),at=s.object({userId:s.string().optional(),q:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),labelIds:s.array(s.string()).optional(),includeSpamTrash:s.boolean().optional()}),ot=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","raw","metadata"]).optional(),metadataHeaders:s.array(s.string()).optional()}),it=s.object({userId:s.string().optional(),raw:s.string().describe(Te),threadId:s.string().optional()}),nt=s.object({userId:s.string().optional(),id:s.string()}),rt=s.object({userId:s.string().optional(),id:s.string(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),dt=s.object({userId:s.string().optional(),ids:s.array(s.string()).optional(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),lt=s.object({userId:s.string().optional(),id:s.string()}),mt=s.object({userId:s.string().optional(),id:s.string()}),pt=s.object({userId:s.string().optional()}),ut=s.object({userId:s.string().optional(),id:s.string()}),gt=s.object({userId:s.string().optional(),label:s.object({name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),color:s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}).optional()})}),ct=s.object({userId:s.string().optional(),id:s.string(),label:s.object({name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),color:s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}).optional()})}),ht=s.object({userId:s.string().optional(),id:s.string()}),ft=s.object({userId:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),q:s.string().optional()}),bt=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","raw","metadata"]).optional()}),yt=s.object({userId:s.string().optional(),draft:s.object({message:q.optional()}).optional().describe("Draft payload. message.raw must be a base64url-encoded RFC 2822 email, not plain text.")}),Gt=s.object({userId:s.string().optional(),id:s.string(),draft:s.object({message:q.optional()}).optional().describe("Updated draft payload. message.raw must be a base64url-encoded RFC 2822 email, not plain text.")}),Et=s.object({userId:s.string().optional(),id:s.string()}),It=s.object({userId:s.string().optional(),id:s.string().optional(),message:q.optional().describe("Optional message body when sending without a draft id. raw must be base64url-encoded RFC 2822, not plain text.")}),wt=s.object({userId:s.string().optional(),q:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),labelIds:s.array(s.string()).optional(),includeSpamTrash:s.boolean().optional()}),Tt=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","metadata"]).optional(),metadataHeaders:s.array(s.string()).optional()}),Mt=s.object({userId:s.string().optional(),id:s.string(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),St=s.object({userId:s.string().optional(),id:s.string()}),Lt=s.object({userId:s.string().optional(),id:s.string()}),kt=s.object({userId:s.string().optional(),id:s.string()}),vt=s.object({userId:s.string().optional()}),g={messagesList:at,messagesGet:ot,messagesSend:it,messagesDelete:nt,messagesModify:rt,messagesBatchModify:dt,messagesTrash:lt,messagesUntrash:mt,labelsList:pt,labelsGet:ut,labelsCreate:gt,labelsUpdate:ct,labelsDelete:ht,draftsList:ft,draftsGet:bt,draftsCreate:yt,draftsUpdate:Gt,draftsDelete:Et,draftsSend:It,threadsList:wt,threadsGet:Tt,threadsModify:Mt,threadsDelete:St,threadsTrash:Lt,threadsUntrash:kt,usersGetProfile:vt},Pt=s.object({name:s.string().optional(),value:s.string().optional()}),Ct=s.object({attachmentId:s.string().optional(),size:s.number().optional(),data:s.string().optional()}),Dt=s.object({partId:s.string().optional(),mimeType:s.string().optional(),filename:s.string().optional(),headers:s.array(Pt).optional(),body:Ct.optional()}),Me=Dt.extend({parts:s.lazy(()=>s.array(Me).optional())}),G=s.object({id:s.string().optional(),threadId:s.string().optional(),labelIds:s.array(s.string()).optional(),snippet:s.string().optional(),historyId:s.string().optional(),internalDate:s.union([s.string(),s.number(),s.date()]).transform(e=>{if(e instanceof Date)return e;if(typeof e=="number")return new Date(e);if(typeof e=="string"){let t=Number(e);return isNaN(t)?null:new Date(t)}return null}).nullable().optional(),sizeEstimate:s.number().optional(),payload:Me.optional(),raw:s.string().optional().describe("Full RFC 2822 message in base64url encoding (when format=raw). Not plain text \u2014 decode base64url before reading headers/body.")}),Rt=s.object({messages:s.array(G).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),xt=s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}),N=s.object({id:s.string().optional(),name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),type:s.enum(["system","user"]).optional(),messagesTotal:s.number().optional(),messagesUnread:s.number().optional(),threadsTotal:s.number().optional(),threadsUnread:s.number().optional(),color:xt.optional()}),At=s.object({labels:s.array(N).optional()}),U=s.object({id:s.string().optional(),message:G.optional()}),Ot=s.object({drafts:s.array(U).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),R=s.object({id:s.string().optional(),snippet:s.string().optional(),historyId:s.string().optional(),messages:s.array(G).optional()}),jt=s.object({threads:s.array(R).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),Bt=s.object({emailAddress:s.string().optional(),messagesTotal:s.number().optional(),threadsTotal:s.number().optional(),historyId:s.string().optional()}),c={messagesList:Rt,messagesGet:G,messagesSend:G,messagesDelete:s.void(),messagesModify:G,messagesBatchModify:s.void(),messagesTrash:G,messagesUntrash:G,labelsList:At,labelsGet:N,labelsCreate:N,labelsUpdate:N,labelsDelete:s.void(),draftsList:Ot,draftsGet:U,draftsCreate:U,draftsUpdate:U,draftsDelete:s.void(),draftsSend:G,threadsList:jt,threadsGet:R,threadsModify:R,threadsDelete:s.void(),threadsTrash:R,threadsUntrash:R,usersGetProfile:Bt};var E={list:le,get:me,send:pe,delete:ue,modify:ge,batchModify:ce,trash:he,untrash:fe},k={list:ae,get:oe,create:ie,update:ne,delete:re},w={list:Y,get:Z,create:Q,update:ee,delete:te,send:se},T={list:be,get:ye,modify:Ge,delete:Ee,trash:Ie,untrash:we};import{z as x}from"zod";import{z as r}from"zod";var Nt=r.object({name:r.string().optional(),value:r.string().optional()}),Ut=r.object({attachmentId:r.string().optional(),size:r.number().optional(),data:r.string().optional()}),Se=r.lazy(()=>r.object({partId:r.string().optional(),mimeType:r.string().optional(),filename:r.string().optional(),headers:r.array(Nt).optional(),body:Ut.optional(),parts:r.array(Se).optional()})),Le=r.object({id:r.string(),threadId:r.string().optional(),labelIds:r.array(r.string()).optional(),snippet:r.string().optional(),historyId:r.string().optional(),internalDate:r.string().optional(),sizeEstimate:r.number().optional(),payload:Se.optional(),raw:r.string().optional(),subject:r.string().optional(),body:r.string().optional(),from:r.string().optional(),to:r.string().optional(),createdAt:r.coerce.date().nullable().optional()}),ke=r.object({id:r.string(),name:r.string().optional(),messageListVisibility:r.enum(["show","hide"]).optional(),labelListVisibility:r.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),type:r.enum(["system","user"]).optional(),messagesTotal:r.number().optional(),messagesUnread:r.number().optional(),threadsTotal:r.number().optional(),threadsUnread:r.number().optional(),createdAt:r.coerce.date().nullable().optional()}),ve=r.object({id:r.string(),messageId:r.string().optional(),createdAt:r.coerce.date().nullable().optional()}),Pe=r.object({id:r.string(),snippet:r.string().optional(),historyId:r.string().optional(),createdAt:r.coerce.date().nullable().optional()});var $s=x.object({clientId:x.string(),clientSecret:x.string(),accessToken:x.string(),refreshToken:x.string()}),H={version:"1.0.0",entities:{messages:Le,labels:ke,drafts:ve,threads:Pe}};var Ce=2e4;async function De(e,t){let a=await e.keys.get_access_token();if(!a)return null;let o=await e.keys.get_integration_credentials();if(!o.topic_id)return null;let n={authorization:`Bearer ${a}`},i=await fetch(`${B}/users/me/watch`,{method:"POST",signal:AbortSignal.timeout(Ce),headers:{...n,"content-type":"application/json"},body:JSON.stringify({topicName:o.topic_id,labelIds:["INBOX"]})});if(!i.ok)throw new Error(`Gmail watch failed (${i.status}): ${await i.text()}`);let d=await fetch(`${B}/users/me/profile`,{headers:n,signal:AbortSignal.timeout(Ce)});if(!d.ok)throw new Error(`Gmail profile fetch failed (${d.status}): ${await d.text()}`);let{emailAddress:u}=await d.json();return u?{webhookLink:{linkType:"email_address",externalId:u},webhookSecret:o.pubsub_audience??void 0}:null}import{logEventFromContext as V}from"corsair/core";import{z as m}from"zod";var $t=m.object({data:m.string().optional(),attributes:m.record(m.string(),m.string()).optional(),messageId:m.string().optional(),publishTime:m.string().optional()}),Re=m.object({message:$t.optional(),subscription:m.string().optional(),event:m.unknown().optional()}),Wt=m.object({emailAddress:m.string().optional(),historyId:m.coerce.string().optional()}),_t=m.object({type:m.literal("messageReceived"),emailAddress:m.string(),historyId:m.string(),message:m.custom()}),Ft=m.object({type:m.literal("messageDeleted"),emailAddress:m.string(),historyId:m.string(),message:m.custom()}),qt=m.object({type:m.literal("messageLabelChanged"),emailAddress:m.string(),historyId:m.string(),message:m.custom(),labelsAdded:m.array(m.string()).optional(),labelsRemoved:m.array(m.string()).optional()}),xe=m.union([_t,Ft,qt]);function v(e){let t=Buffer.from(e,"base64").toString("utf-8");return Wt.parse(JSON.parse(t))}function z(e){return t=>{let a=t.body;if(!a.message?.data)return!1;try{let o=v(a.message.data);return!!o.historyId&&!!o.emailAddress}catch{return!1}}}var Ht=100,zt=10,Vt=10;function K(e,t){let a=e.options?.webhookEvents;return a?a.includes(t):!0}async function Ae(e,t,a){let o=[],n;do{let i=await y(`/users/${t}/history`,e,{method:"GET",query:{startHistoryId:a,maxResults:Ht,...n?{pageToken:n}:{}}});i.history&&o.push(...i.history),n=i.nextPageToken}while(n);return o}async function Kt(e,t,a){return y(`/users/${t}/messages/${a}`,e,{method:"GET",query:{format:"minimal"}})}function J(e,t){return e?.headers?e.headers.find(o=>o.name?.toLowerCase()===t.toLowerCase())?.value:void 0}function Jt(e){if(e.payload)return J(e.payload,"Subject")}function Xt(e){if(e.payload)return J(e.payload,"From")}function Yt(e){if(e.payload)return J(e.payload,"To")}function Oe(e){if(!e)return;let t,a;if(e.body?.data)try{let o=Buffer.from(e.body.data,"base64").toString("utf-8");e.mimeType==="text/plain"?t=o:e.mimeType==="text/html"&&(a=o)}catch{}if(e.parts&&e.parts.length>0)for(let o of e.parts){let n=Oe(o);n&&(o.mimeType==="text/plain"?t=n:o.mimeType==="text/html"&&!t&&(a=n))}return t||a}function Zt(e){if(e.payload)return Oe(e.payload)}function Qt(e){let t=[],a=[],o=[];if(!e)return{added:t,deleted:a,modified:o};for(let n of e){if(n.messagesAdded)for(let i of n.messagesAdded)i.message?.id&&t.push(i.message.id);if(n.messagesDeleted)for(let i of n.messagesDeleted)i.message?.id&&a.push(i.message.id);if(n.labelsAdded||n.labelsRemoved){if(n.labelsAdded)for(let i of n.labelsAdded)i.message?.id&&o.push(i.message.id);if(n.labelsRemoved)for(let i of n.labelsRemoved)i.message?.id&&o.push(i.message.id)}}return{added:[...new Set(t)],deleted:[...new Set(a)],modified:[...new Set(o)]}}async function je(e,t,a){let[o,n]=await Promise.all([y(`/users/${t}/messages/${a}`,e,{method:"GET",query:{format:"full"}}),y(`/users/${t}/messages/${a}`,e,{method:"GET",query:{format:"raw"}}).catch(()=>null)]);return{...o,raw:n?.raw}}async function es(e,t,a,o){return y(`/users/${t}/messages/${a}/attachments/${o}`,e,{method:"GET"})}async function Be(e,t,a){if(!a.payload)return a;let o=async i=>{if(!i)return i;if(i.body?.attachmentId)try{let d=await es(e,t,a.id,i.body.attachmentId);return{...i,body:{...i.body,data:d.data,size:d.size}}}catch(d){return console.warn(`Failed to fetch attachment ${i.body.attachmentId} for message ${a.id}:`,d),i}if(i.parts&&i.parts.length>0){let d=await Promise.all(i.parts.map(o));return{...i,parts:d.filter(u=>u!==void 0)}}return i},n=await o(a.payload);return{...a,payload:n}}function $(e){let t=Number(e);return t>1?String(t-1):e}function Ne(e){return typeof e!="object"||e===null?!1:"status"in e&&e.status===404?!0:"statusCode"in e&&e.statusCode===404}async function ts(e){try{return await e.keys?.get_last_history_id?.()||null}catch{return null}}async function W(e,t,a){let o=Number(t),n=a?Number(a):Number.NaN;if(!(Number.isFinite(o)&&Number.isFinite(n)&&o<=n))try{await e.keys?.set_last_history_id?.(t)}catch(i){console.warn("Failed to persist Gmail webhook history cursor:",i)}}function ss(e){let t=0;for(let a of e){let o=a.id?Number(a.id):Number.NaN;Number.isFinite(o)&&o>t&&(t=o)}return t>0?String(t):null}async function Ue(e,t){return!e.db?.messages||!t.id?"":(await e.db.messages.upsertByEntityId(t.id,{...t,id:t.id,subject:Jt(t),body:Zt(t),from:Xt(t),to:Yt(t),createdAt:new Date}))?.id??""}async function as(e,t,a,o){let n=await y(`/users/${a}/messages`,t,{method:"GET",query:{maxResults:zt}}),i=[],d=[];if(!n.messages?.length)return{added:i,modified:d};let u=Number(o);for(let l of n.messages)if(l.id)try{let f=await Kt(t,a,l.id);(f.historyId?Number(f.historyId):0)>=u-Vt&&(e.db?.messages&&await e.db.messages.existsByEntityId(l.id)?d.push(l.id):i.push(l.id))}catch{}return{added:i,modified:d}}async function os(e,t,a,o){let n=null,i="",d=0;for(let u of o)try{let l=await je(t,a,u),f=await Be(t,a,l);n||(n=f);try{let b=await Ue(e,f);!i&&b&&(i=b)}catch(b){throw console.error(`Failed to save message ${f.id} to database:`,b),b}}catch(l){d++,console.warn(`Failed to process message ${u}:`,l)}return{message:n,corsairEntityId:i,failedCount:d}}async function is(e,t,a,o){let n=null,i="",d=0;if(!e.db?.messages)return{message:null,corsairEntityId:i,failedCount:d};for(let u of o)try{let l=null;try{l=await y(`/users/${a}/messages/${u}`,t,{method:"GET",query:{format:"full"}})}catch(f){if(!Ne(f))throw f}if(!n&&l&&(n=l),!i){let f=await e.db.messages.findIdByEntityId(u);f&&(i=f)}await e.db.messages.deleteByEntityId(u)}catch(l){d++,console.warn(`Failed to delete message ${u} from database:`,l)}return{message:n,corsairEntityId:i,failedCount:d}}async function ns(e,t,a,o){let n=null,i="",d=0;if(!e.db?.messages)return{message:null,corsairEntityId:i,failedCount:d};for(let u of o)try{let l=await je(t,a,u),f=await Be(t,a,l);n||(n=f);try{let b=await Ue(e,f);!i&&b&&(i=b)}catch(b){throw console.error(`Failed to update message ${f.id} in database:`,b),b}}catch(l){d++,console.warn(`Failed to process message ${u}:`,l)}return{message:n,corsairEntityId:i,failedCount:d}}var $e={match:z("messageChanged"),handler:async(e,t)=>{let o=t.payload.message?.data;if(!o)return{success:!1,error:"No message data in notification"};let n;try{n=v(o)}catch{return{success:!1,error:"Invalid push notification format"}}if(!n.historyId||!n.emailAddress)return{success:!1,error:"Invalid push notification format"};let i=e.key,d=n.emailAddress,u=n.historyId;try{let l=await ts(e),f=l??$(u),b;try{b=await Ae(i,d,f)}catch(h){if(l&&Ne(h))b=await Ae(i,d,$(u));else throw h}let M=Qt(b),qe=new Set(M.added),He=new Set(M.deleted),P=M.added,_=M.deleted,C=M.modified.filter(h=>!qe.has(h)&&!He.has(h)),ze=P.length>0||_.length>0||C.length>0,X=!1;if(!ze&&!l){let h=await as(e,i,d,u);P=h.added,C=h.modified,X=!0}let A=P.length>0&&K(e,"messageReceived")?await os(e,i,d,P):null,O=_.length>0&&K(e,"messageDeleted")?await is(e,i,d,_):null,j=C.length>0&&K(e,"messageLabelChanged")?await ns(e,i,d,C):null;if((A?.failedCount??0)+(O?.failedCount??0)+(j?.failedCount??0)>0)l||await W(e,$(u),l);else{let h=ss(b);h?await W(e,h,l):X&&(P.length>0||C.length>0)?await W(e,u,l):l||await W(e,$(u),l)}if(A){let h={type:"messageReceived",emailAddress:d,historyId:u,message:A.message??{}};return await V(e,"gmail.webhook.messageReceived",{...h},"completed"),{success:!0,corsairEntityId:A.corsairEntityId,data:h}}if(O){let h={type:"messageDeleted",emailAddress:d,historyId:u,message:O.message??{}};return await V(e,"gmail.webhook.messageDeleted",{...h},"completed"),{success:!0,corsairEntityId:O.corsairEntityId,data:h}}if(j){let h={type:"messageLabelChanged",emailAddress:d,historyId:u,message:j.message??{}};return await V(e,"gmail.webhook.messageLabelChanged",{...h},"completed"),{success:!0,corsairEntityId:j.corsairEntityId,data:h}}return{success:!0,corsairEntityId:"",data:void 0}}catch(l){return console.error("Failed to process Gmail webhook:",l),{success:!1,error:`Failed to process message: ${l instanceof Error?l.message:"Unknown error"}`}}}};var We={messageChanged:$e};import{toExternalId as rs}from"corsair/core";async function _e(e){let t=e.access_token;if(!t)return null;let a=await fetch("https://gmail.googleapis.com/gmail/v1/users/me/profile",{headers:{Authorization:`Bearer ${t}`}});if(!a.ok)return null;let o=await a.json(),n=rs(o.emailAddress);return n?{linkType:"email_address",externalId:n}:null}import{asRecord as ds,decodePubSubData as ls,firstString as ms,readBodyRecord as ps}from"corsair/core";function Fe(e){let t=ps(e);if(!t)return null;let a=ds(ls(t)),o=ms([a?.emailAddress]);return o?{linkType:"email_address",externalId:o}:null}var cs={oauth_2:{integration:["topic_id","pubsub_audience"],account:["email_address","last_history_id"]}},hs={messages:{list:E.list,get:E.get,send:E.send,delete:E.delete,modify:E.modify,batchModify:E.batchModify,trash:E.trash,untrash:E.untrash},labels:{list:k.list,get:k.get,create:k.create,update:k.update,delete:k.delete},drafts:{list:w.list,get:w.get,create:w.create,update:w.update,delete:w.delete,send:w.send},threads:{list:T.list,get:T.get,modify:T.modify,delete:T.delete,trash:T.trash,untrash:T.untrash}},fs={"messages.list":{input:g.messagesList,output:c.messagesList},"messages.get":{input:g.messagesGet,output:c.messagesGet},"messages.send":{input:g.messagesSend,output:c.messagesSend},"messages.delete":{input:g.messagesDelete,output:c.messagesDelete},"messages.modify":{input:g.messagesModify,output:c.messagesModify},"messages.batchModify":{input:g.messagesBatchModify,output:c.messagesBatchModify},"messages.trash":{input:g.messagesTrash,output:c.messagesTrash},"messages.untrash":{input:g.messagesUntrash,output:c.messagesUntrash},"labels.list":{input:g.labelsList,output:c.labelsList},"labels.get":{input:g.labelsGet,output:c.labelsGet},"labels.create":{input:g.labelsCreate,output:c.labelsCreate},"labels.update":{input:g.labelsUpdate,output:c.labelsUpdate},"labels.delete":{input:g.labelsDelete,output:c.labelsDelete},"drafts.list":{input:g.draftsList,output:c.draftsList},"drafts.get":{input:g.draftsGet,output:c.draftsGet},"drafts.create":{input:g.draftsCreate,output:c.draftsCreate},"drafts.update":{input:g.draftsUpdate,output:c.draftsUpdate},"drafts.delete":{input:g.draftsDelete,output:c.draftsDelete},"drafts.send":{input:g.draftsSend,output:c.draftsSend},"threads.list":{input:g.threadsList,output:c.threadsList},"threads.get":{input:g.threadsGet,output:c.threadsGet},"threads.modify":{input:g.threadsModify,output:c.threadsModify},"threads.delete":{input:g.threadsDelete,output:c.threadsDelete},"threads.trash":{input:g.threadsTrash,output:c.threadsTrash},"threads.untrash":{input:g.threadsUntrash,output:c.threadsUntrash}},bs={messageChanged:We.messageChanged},ys={messageChanged:{description:"A Gmail message was received, deleted, or had its labels changed",payload:Re,response:xe}},Gs="oauth_2",Es={"messages.list":{riskLevel:"read",description:"List messages in a mailbox"},"messages.get":{riskLevel:"read",description:"Get a specific message"},"messages.send":{riskLevel:"write",description:"Send an email to one or more recipients"},"messages.delete":{riskLevel:"destructive",irreversible:!0,description:"Permanently delete a message [DESTRUCTIVE \xB7 IRREVERSIBLE]"},"messages.modify":{riskLevel:"write",description:"Add or remove labels from a message"},"messages.batchModify":{riskLevel:"write",description:"Add or remove labels from multiple messages in bulk"},"messages.trash":{riskLevel:"write",description:"Move a message to the trash"},"messages.untrash":{riskLevel:"write",description:"Restore a message from the trash"},"labels.list":{riskLevel:"read",description:"List all labels in the mailbox"},"labels.get":{riskLevel:"read",description:"Get a specific label"},"labels.create":{riskLevel:"write",description:"Create a new label"},"labels.update":{riskLevel:"write",description:"Update an existing label"},"labels.delete":{riskLevel:"destructive",description:"Delete a label"},"drafts.list":{riskLevel:"read",description:"List drafts in the mailbox"},"drafts.get":{riskLevel:"read",description:"Get a specific draft"},"drafts.create":{riskLevel:"write",description:"Create a new draft"},"drafts.update":{riskLevel:"write",description:"Update an existing draft"},"drafts.delete":{riskLevel:"destructive",description:"Delete a draft"},"drafts.send":{riskLevel:"write",description:"Send a draft as an email"},"threads.list":{riskLevel:"read",description:"List threads in the mailbox"},"threads.get":{riskLevel:"read",description:"Get a specific thread"},"threads.modify":{riskLevel:"write",description:"Add or remove labels from a thread"},"threads.delete":{riskLevel:"destructive",irreversible:!0,description:"Permanently delete a thread [DESTRUCTIVE \xB7 IRREVERSIBLE]"},"threads.trash":{riskLevel:"write",description:"Move a thread to the trash"},"threads.untrash":{riskLevel:"write",description:"Restore a thread from the trash"}};function ua(e={}){let t={...e,authType:e.authType??Gs};return{id:"gmail",schema:H,options:t,authConfig:cs,oauthConfig:{providerName:"Google",authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/gmail.modify","https://www.googleapis.com/auth/gmail.labels","https://www.googleapis.com/auth/gmail.send","https://www.googleapis.com/auth/gmail.compose"],authParams:{access_type:"offline",prompt:"consent"}},hooks:t.hooks,webhookHooks:t.webhookHooks,endpoints:hs,webhooks:bs,endpointMeta:Es,endpointSchemas:fs,webhookSchemas:ys,keyBuilder:async a=>{let o=a.authType;if(t.key)return t.key;if(a.authType==="oauth_2")return gs(a,{plugin:"gmail",tokenUrl:"https://oauth2.googleapis.com/token"});throw new us("gmail","oauth_2")},pluginWebhookMatcher:a=>{let o=a.headers;if(!(o.from==="noreply@google.com"||typeof o["user-agent"]=="string"&&o["user-agent"].includes("APIs-Google")))return!1;let i=a.body;if(!i?.message?.data)return!1;try{let d=v(i.message.data);return!!d.emailAddress&&!!d.historyId}catch{return!1}},pluginTenantWebhookMatcher:Fe,oauthWebhookTenantLinkResolver:_e,subscribe:De}}export{H as GmailSchema,z as createGmailWebhookMatcher,v as decodePubSubMessage,ua as gmail,cs as gmailAuthConfig,fs as gmailEndpointSchemas,hs as gmailEndpointsNested,bs as gmailWebhooksNested};
|
|
1
|
+
import{AuthMissingError as ds,getOAuthAccessToken as ls}from"corsair/core";import{logEventFromContext as M}from"corsair/core";import{request as Fe}from"corsair/http";var N="https://gmail.googleapis.com/gmail/v1";async function y(e,t,a={}){let{method:o="GET",body:n,query:i}=a;return await Fe({BASE:N,VERSION:"1.0.0",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:t,HEADERS:{"Content-Type":"application/json"}},{method:o,url:e,body:o==="POST"||o==="PUT"||o==="PATCH"?n:void 0,mediaType:"application/json",query:o==="GET"?i:void 0})}function ze(e){return e instanceof Error&&"status"in e&&e.status===401}async function u(e,t,a={}){try{return await y(e,t.key,a)}catch(o){if(ze(o)&&t._refreshAuth){let n=await t._refreshAuth();return await y(e,n,a)}throw o}}var Y=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/drafts`,e,{method:"GET",query:{maxResults:t.maxResults,pageToken:t.pageToken,q:t.q}});if(a.drafts&&e.db.drafts)try{for(let o of a.drafts)o.id&&await e.db.drafts.upsertByEntityId(o.id,{...o,id:o.id,messageId:o.message?.id,createdAt:new Date})}catch(o){console.warn("Failed to save drafts to database:",o)}return await M(e,"gmail.drafts.list",{...t},"completed"),a},Z=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"GET",query:{format:t.format}});if(a.id&&e.db.drafts)try{await e.db.drafts.upsertByEntityId(a.id,{...a,id:a.id,messageId:a.message?.id,createdAt:new Date})}catch(o){console.warn("Failed to save draft to database:",o)}return await M(e,"gmail.drafts.get",{...t},"completed"),a},Q=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/drafts`,e,{method:"POST",body:t.draft});return a.id&&await e.endpoints.drafts.get({id:a.id,userId:t.userId}),await M(e,"gmail.drafts.create",{...t},"completed"),a},ee=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"PUT",body:t.draft});return a.id&&await e.endpoints.drafts.get({id:a.id,userId:t.userId}),await M(e,"gmail.drafts.update",{...t},"completed"),a},te=async(e,t)=>{if(await u(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"DELETE"}),e.db.drafts)try{await e.db.drafts.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete draft from database:",a)}await M(e,"gmail.drafts.delete",{...t},"completed")},se=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/drafts/send`,e,{method:"POST",body:{id:t.id,message:t.message}});return await M(e,"gmail.drafts.send",{...t},"completed"),a};import{logEventFromContext as v}from"corsair/core";var ae=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/labels`,e,{method:"GET"});if(a.labels&&e.db.labels)try{for(let o of a.labels)o.id&&await e.db.labels.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save labels to database:",o)}return await v(e,"gmail.labels.list",{...t},"completed"),a},oe=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"GET"});if(a.id&&e.db.labels)try{await e.db.labels.upsertByEntityId(a.id,{id:a.id,name:a.name,messageListVisibility:a.messageListVisibility,labelListVisibility:a.labelListVisibility,type:a.type,messagesTotal:a.messagesTotal,messagesUnread:a.messagesUnread,threadsTotal:a.threadsTotal,threadsUnread:a.threadsUnread,createdAt:new Date})}catch(o){console.warn("Failed to save label to database:",o)}return await v(e,"gmail.labels.get",{...t},"completed"),a},ie=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/labels`,e,{method:"POST",body:t.label});return a.id&&await e.endpoints.labels.get({id:a.id,userId:t.userId}),await v(e,"gmail.labels.create",{...t},"completed"),a},ne=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"PUT",body:t.label});return a.id&&await e.endpoints.labels.get({id:a.id,userId:t.userId}),await v(e,"gmail.labels.update",{...t},"completed"),a},re=async(e,t)=>{if(await u(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"DELETE"}),e.db.labels)try{await e.db.labels.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete label from database:",a)}await v(e,"gmail.labels.delete",{...t},"completed")};import{logEventFromContext as I}from"corsair/core";function q(e,t){return e?.headers?e.headers.find(o=>o.name?.toLowerCase()===t.toLowerCase())?.value:void 0}function Je(e){if(e.payload)return q(e.payload,"Subject")}function Xe(e){if(e.payload)return q(e.payload,"From")}function Ye(e){if(e.payload)return q(e.payload,"To")}function de(e){if(!e)return;let t,a;if(e.body?.data)try{let o=Buffer.from(e.body.data,"base64").toString("utf-8");e.mimeType==="text/plain"?t=o:e.mimeType==="text/html"&&(a=o)}catch{}if(e.parts&&e.parts.length>0)for(let o of e.parts){let n=de(o);n&&(o.mimeType==="text/plain"?t=n:o.mimeType==="text/html"&&!t&&(a=n))}return t||a}function Ze(e){if(e.payload)return de(e.payload)}var le=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/messages`,e,{method:"GET",query:{q:t.q,maxResults:t.maxResults,pageToken:t.pageToken,labelIds:t.labelIds?.join(","),includeSpamTrash:t.includeSpamTrash}});if(a.messages&&e.db.messages)try{for(let o of a.messages)o.id&&await e.db.messages.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save messages to database:",o)}return await I(e,"gmail.messages.list",{...t},"completed"),a},me=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/messages/${t.id}`,e,{method:"GET",query:{format:t.format,metadataHeaders:t.metadataHeaders?.join(",")}});if(a.id&&e.db.messages)try{let o=Je(a),n=Ze(a),i=Xe(a),d=Ye(a);await e.db.messages.upsertByEntityId(a.id,{...a,subject:o,body:n,from:i,to:d,id:a.id,createdAt:new Date})}catch(o){console.warn("Failed to save message to database:",o)}return await I(e,"gmail.messages.get",{...t},"completed"),a},pe=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/messages/send`,e,{method:"POST",body:{raw:t.raw,threadId:t.threadId}});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.send",{...t},"completed"),a},ue=async(e,t)=>{let a={};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds);let o=await u(`/users/${t.userId||"me"}/messages/${t.id}/modify`,e,{method:"POST",body:a});return o.id&&await e.endpoints.messages.get({id:o.id,userId:t.userId}),await I(e,"gmail.messages.modify",{...t},"completed"),o},ge=async(e,t)=>{let a={ids:t.ids};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds),await u(`/users/${t.userId||"me"}/messages/batchModify`,e,{method:"POST",body:a}),await I(e,"gmail.messages.batchModify",{...t},"completed")},ce=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/messages/${t.id}/trash`,e,{method:"POST"});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.trash",{...t},"completed"),a},he=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/messages/${t.id}/untrash`,e,{method:"POST"});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.untrash",{...t},"completed"),a};import{logEventFromContext as x}from"corsair/core";var fe=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/threads`,e,{method:"GET",query:{q:t.q,maxResults:t.maxResults,pageToken:t.pageToken,labelIds:t.labelIds?.join(","),includeSpamTrash:t.includeSpamTrash}});if(a.threads&&e.db.threads)try{for(let o of a.threads)o.id&&await e.db.threads.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save threads to database:",o)}return await x(e,"gmail.threads.list",{...t},"completed"),a},be=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/threads/${t.id}`,e,{method:"GET",query:{format:t.format,metadataHeaders:t.metadataHeaders?.join(",")}});if(a.id&&e.db.threads)try{await e.db.threads.upsertByEntityId(a.id,{...a,id:a.id,createdAt:new Date})}catch(o){console.warn("Failed to save thread to database:",o)}return await x(e,"gmail.threads.get",{...t},"completed"),a},ye=async(e,t)=>{let a={};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds);let o=await u(`/users/${t.userId||"me"}/threads/${t.id}/modify`,e,{method:"POST",body:a});return o.id&&await e.endpoints.threads.get({id:o.id,userId:t.userId}),await x(e,"gmail.threads.modify",{...t},"completed"),o},Ge=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/threads/${t.id}/trash`,e,{method:"POST"});return a.id&&await e.endpoints.threads.get({id:a.id,userId:t.userId}),await x(e,"gmail.threads.trash",{...t},"completed"),a},Ee=async(e,t)=>{let a=await u(`/users/${t.userId||"me"}/threads/${t.id}/untrash`,e,{method:"POST"});return a.id&&await e.endpoints.threads.get({id:a.id,userId:t.userId}),await x(e,"gmail.threads.untrash",{...t},"completed"),a};import{z as s}from"zod";var Ie="Base64url-encoded RFC 2822 email \u2014 do NOT pass plain email text. Build the MIME message (From, To, Subject, Content-Type headers, blank line, body; lines separated by \\r\\n), then base64url-encode: standard base64, replace + with -, / with _, remove trailing =.",H=s.object({raw:s.string().optional().describe(Ie),threadId:s.string().optional()}),tt=s.object({userId:s.string().optional(),q:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),labelIds:s.array(s.string()).optional(),includeSpamTrash:s.boolean().optional()}),st=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","raw","metadata"]).optional(),metadataHeaders:s.array(s.string()).optional()}),at=s.object({userId:s.string().optional(),raw:s.string().describe(Ie),threadId:s.string().optional()}),ot=s.object({userId:s.string().optional(),id:s.string(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),it=s.object({userId:s.string().optional(),ids:s.array(s.string()).optional(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),nt=s.object({userId:s.string().optional(),id:s.string()}),rt=s.object({userId:s.string().optional(),id:s.string()}),dt=s.object({userId:s.string().optional()}),lt=s.object({userId:s.string().optional(),id:s.string()}),mt=s.object({userId:s.string().optional(),label:s.object({name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),color:s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}).optional()})}),pt=s.object({userId:s.string().optional(),id:s.string(),label:s.object({name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),color:s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}).optional()})}),ut=s.object({userId:s.string().optional(),id:s.string()}),gt=s.object({userId:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),q:s.string().optional()}),ct=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","raw","metadata"]).optional()}),ht=s.object({userId:s.string().optional(),draft:s.object({message:H.optional()}).optional().describe("Draft payload. message.raw must be a base64url-encoded RFC 2822 email, not plain text.")}),ft=s.object({userId:s.string().optional(),id:s.string(),draft:s.object({message:H.optional()}).optional().describe("Updated draft payload. message.raw must be a base64url-encoded RFC 2822 email, not plain text.")}),bt=s.object({userId:s.string().optional(),id:s.string()}),yt=s.object({userId:s.string().optional(),id:s.string().optional(),message:H.optional().describe("Optional message body when sending without a draft id. raw must be base64url-encoded RFC 2822, not plain text.")}),Gt=s.object({userId:s.string().optional(),q:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),labelIds:s.array(s.string()).optional(),includeSpamTrash:s.boolean().optional()}),Et=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","metadata"]).optional(),metadataHeaders:s.array(s.string()).optional()}),It=s.object({userId:s.string().optional(),id:s.string(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),wt=s.object({userId:s.string().optional(),id:s.string()}),Tt=s.object({userId:s.string().optional(),id:s.string()}),Mt=s.object({userId:s.string().optional()}),g={messagesList:tt,messagesGet:st,messagesSend:at,messagesModify:ot,messagesBatchModify:it,messagesTrash:nt,messagesUntrash:rt,labelsList:dt,labelsGet:lt,labelsCreate:mt,labelsUpdate:pt,labelsDelete:ut,draftsList:gt,draftsGet:ct,draftsCreate:ht,draftsUpdate:ft,draftsDelete:bt,draftsSend:yt,threadsList:Gt,threadsGet:Et,threadsModify:It,threadsTrash:wt,threadsUntrash:Tt,usersGetProfile:Mt},St=s.object({name:s.string().optional(),value:s.string().optional()}),Lt=s.object({attachmentId:s.string().optional(),size:s.number().optional(),data:s.string().optional()}),kt=s.object({partId:s.string().optional(),mimeType:s.string().optional(),filename:s.string().optional(),headers:s.array(St).optional(),body:Lt.optional()}),we=kt.extend({parts:s.lazy(()=>s.array(we).optional())}),G=s.object({id:s.string().optional(),threadId:s.string().optional(),labelIds:s.array(s.string()).optional(),snippet:s.string().optional(),historyId:s.string().optional(),internalDate:s.union([s.string(),s.number(),s.date()]).transform(e=>{if(e instanceof Date)return e;if(typeof e=="number")return new Date(e);if(typeof e=="string"){let t=Number(e);return isNaN(t)?null:new Date(t)}return null}).nullable().optional(),sizeEstimate:s.number().optional(),payload:we.optional(),raw:s.string().optional().describe("Full RFC 2822 message in base64url encoding (when format=raw). Not plain text \u2014 decode base64url before reading headers/body.")}),Pt=s.object({messages:s.array(G).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),Ct=s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}),B=s.object({id:s.string().optional(),name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),type:s.enum(["system","user"]).optional(),messagesTotal:s.number().optional(),messagesUnread:s.number().optional(),threadsTotal:s.number().optional(),threadsUnread:s.number().optional(),color:Ct.optional()}),vt=s.object({labels:s.array(B).optional()}),U=s.object({id:s.string().optional(),message:G.optional()}),xt=s.object({drafts:s.array(U).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),R=s.object({id:s.string().optional(),snippet:s.string().optional(),historyId:s.string().optional(),messages:s.array(G).optional()}),Rt=s.object({threads:s.array(R).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),Dt=s.object({emailAddress:s.string().optional(),messagesTotal:s.number().optional(),threadsTotal:s.number().optional(),historyId:s.string().optional()}),c={messagesList:Pt,messagesGet:G,messagesSend:G,messagesModify:G,messagesBatchModify:s.void(),messagesTrash:G,messagesUntrash:G,labelsList:vt,labelsGet:B,labelsCreate:B,labelsUpdate:B,labelsDelete:s.void(),draftsList:xt,draftsGet:U,draftsCreate:U,draftsUpdate:U,draftsDelete:s.void(),draftsSend:G,threadsList:Rt,threadsGet:R,threadsModify:R,threadsTrash:R,threadsUntrash:R,usersGetProfile:Dt};var E={list:le,get:me,send:pe,modify:ue,batchModify:ge,trash:ce,untrash:he},S={list:ae,get:oe,create:ie,update:ne,delete:re},w={list:Y,get:Z,create:Q,update:ee,delete:te,send:se},L={list:fe,get:be,modify:ye,trash:Ge,untrash:Ee};import{z as D}from"zod";import{z as r}from"zod";var At=r.object({name:r.string().optional(),value:r.string().optional()}),Ot=r.object({attachmentId:r.string().optional(),size:r.number().optional(),data:r.string().optional()}),Te=r.lazy(()=>r.object({partId:r.string().optional(),mimeType:r.string().optional(),filename:r.string().optional(),headers:r.array(At).optional(),body:Ot.optional(),parts:r.array(Te).optional()})),Me=r.object({id:r.string(),threadId:r.string().optional(),labelIds:r.array(r.string()).optional(),snippet:r.string().optional(),historyId:r.string().optional(),internalDate:r.string().optional(),sizeEstimate:r.number().optional(),payload:Te.optional(),raw:r.string().optional(),subject:r.string().optional(),body:r.string().optional(),from:r.string().optional(),to:r.string().optional(),createdAt:r.coerce.date().nullable().optional()}),Se=r.object({id:r.string(),name:r.string().optional(),messageListVisibility:r.enum(["show","hide"]).optional(),labelListVisibility:r.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),type:r.enum(["system","user"]).optional(),messagesTotal:r.number().optional(),messagesUnread:r.number().optional(),threadsTotal:r.number().optional(),threadsUnread:r.number().optional(),createdAt:r.coerce.date().nullable().optional()}),Le=r.object({id:r.string(),messageId:r.string().optional(),createdAt:r.coerce.date().nullable().optional()}),ke=r.object({id:r.string(),snippet:r.string().optional(),historyId:r.string().optional(),createdAt:r.coerce.date().nullable().optional()});var js=D.object({clientId:D.string(),clientSecret:D.string(),accessToken:D.string(),refreshToken:D.string()}),F={version:"1.0.0",entities:{messages:Me,labels:Se,drafts:Le,threads:ke}};var Pe=2e4;async function Ce(e,t){let a=await e.keys.get_access_token();if(!a)return null;let o=await e.keys.get_integration_credentials();if(!o.topic_id)return null;let n={authorization:`Bearer ${a}`},i=await fetch(`${N}/users/me/watch`,{method:"POST",signal:AbortSignal.timeout(Pe),headers:{...n,"content-type":"application/json"},body:JSON.stringify({topicName:o.topic_id,labelIds:["INBOX"]})});if(!i.ok)throw new Error(`Gmail watch failed (${i.status}): ${await i.text()}`);let d=await fetch(`${N}/users/me/profile`,{headers:n,signal:AbortSignal.timeout(Pe)});if(!d.ok)throw new Error(`Gmail profile fetch failed (${d.status}): ${await d.text()}`);let{emailAddress:p}=await d.json();return p?{webhookLink:{linkType:"email_address",externalId:p},webhookSecret:o.pubsub_audience??void 0}:null}import{logEventFromContext as V}from"corsair/core";import{z as m}from"zod";var jt=m.object({data:m.string().optional(),attributes:m.record(m.string(),m.string()).optional(),messageId:m.string().optional(),publishTime:m.string().optional()}),ve=m.object({message:jt.optional(),subscription:m.string().optional(),event:m.unknown().optional()}),Nt=m.object({emailAddress:m.string().optional(),historyId:m.coerce.string().optional()}),Bt=m.object({type:m.literal("messageReceived"),emailAddress:m.string(),historyId:m.string(),message:m.custom()}),Ut=m.object({type:m.literal("messageDeleted"),emailAddress:m.string(),historyId:m.string(),message:m.custom()}),$t=m.object({type:m.literal("messageLabelChanged"),emailAddress:m.string(),historyId:m.string(),message:m.custom(),labelsAdded:m.array(m.string()).optional(),labelsRemoved:m.array(m.string()).optional()}),xe=m.union([Bt,Ut,$t]);function k(e){let t=Buffer.from(e,"base64").toString("utf-8");return Nt.parse(JSON.parse(t))}function z(e){return t=>{let a=t.body;if(!a.message?.data)return!1;try{let o=k(a.message.data);return!!o.historyId&&!!o.emailAddress}catch{return!1}}}var Wt=100,_t=10,qt=10;function K(e,t){let a=e.options?.webhookEvents;return a?a.includes(t):!0}async function Re(e,t,a){let o=[],n;do{let i=await y(`/users/${t}/history`,e,{method:"GET",query:{startHistoryId:a,maxResults:Wt,...n?{pageToken:n}:{}}});i.history&&o.push(...i.history),n=i.nextPageToken}while(n);return o}async function Ht(e,t,a){return y(`/users/${t}/messages/${a}`,e,{method:"GET",query:{format:"minimal"}})}function J(e,t){return e?.headers?e.headers.find(o=>o.name?.toLowerCase()===t.toLowerCase())?.value:void 0}function Ft(e){if(e.payload)return J(e.payload,"Subject")}function zt(e){if(e.payload)return J(e.payload,"From")}function Vt(e){if(e.payload)return J(e.payload,"To")}function De(e){if(!e)return;let t,a;if(e.body?.data)try{let o=Buffer.from(e.body.data,"base64").toString("utf-8");e.mimeType==="text/plain"?t=o:e.mimeType==="text/html"&&(a=o)}catch{}if(e.parts&&e.parts.length>0)for(let o of e.parts){let n=De(o);n&&(o.mimeType==="text/plain"?t=n:o.mimeType==="text/html"&&!t&&(a=n))}return t||a}function Kt(e){if(e.payload)return De(e.payload)}function Jt(e){let t=[],a=[],o=[];if(!e)return{added:t,deleted:a,modified:o};for(let n of e){if(n.messagesAdded)for(let i of n.messagesAdded)i.message?.id&&t.push(i.message.id);if(n.messagesDeleted)for(let i of n.messagesDeleted)i.message?.id&&a.push(i.message.id);if(n.labelsAdded||n.labelsRemoved){if(n.labelsAdded)for(let i of n.labelsAdded)i.message?.id&&o.push(i.message.id);if(n.labelsRemoved)for(let i of n.labelsRemoved)i.message?.id&&o.push(i.message.id)}}return{added:[...new Set(t)],deleted:[...new Set(a)],modified:[...new Set(o)]}}async function Ae(e,t,a){let[o,n]=await Promise.all([y(`/users/${t}/messages/${a}`,e,{method:"GET",query:{format:"full"}}),y(`/users/${t}/messages/${a}`,e,{method:"GET",query:{format:"raw"}}).catch(()=>null)]);return{...o,raw:n?.raw}}async function Xt(e,t,a,o){return y(`/users/${t}/messages/${a}/attachments/${o}`,e,{method:"GET"})}async function Oe(e,t,a){if(!a.payload)return a;let o=async i=>{if(!i)return i;if(i.body?.attachmentId)try{let d=await Xt(e,t,a.id,i.body.attachmentId);return{...i,body:{...i.body,data:d.data,size:d.size}}}catch(d){return console.warn(`Failed to fetch attachment ${i.body.attachmentId} for message ${a.id}:`,d),i}if(i.parts&&i.parts.length>0){let d=await Promise.all(i.parts.map(o));return{...i,parts:d.filter(p=>p!==void 0)}}return i},n=await o(a.payload);return{...a,payload:n}}function $(e){let t=Number(e);return t>1?String(t-1):e}function je(e){return typeof e!="object"||e===null?!1:"status"in e&&e.status===404?!0:"statusCode"in e&&e.statusCode===404}async function Yt(e){try{return await e.keys?.get_last_history_id?.()||null}catch{return null}}async function W(e,t,a){let o=Number(t),n=a?Number(a):Number.NaN;if(!(Number.isFinite(o)&&Number.isFinite(n)&&o<=n))try{await e.keys?.set_last_history_id?.(t)}catch(i){console.warn("Failed to persist Gmail webhook history cursor:",i)}}function Zt(e){let t=0;for(let a of e){let o=a.id?Number(a.id):Number.NaN;Number.isFinite(o)&&o>t&&(t=o)}return t>0?String(t):null}async function Ne(e,t){return!e.db?.messages||!t.id?"":(await e.db.messages.upsertByEntityId(t.id,{...t,id:t.id,subject:Ft(t),body:Kt(t),from:zt(t),to:Vt(t),createdAt:new Date}))?.id??""}async function Qt(e,t,a,o){let n=await y(`/users/${a}/messages`,t,{method:"GET",query:{maxResults:_t}}),i=[],d=[];if(!n.messages?.length)return{added:i,modified:d};let p=Number(o);for(let l of n.messages)if(l.id)try{let f=await Ht(t,a,l.id);(f.historyId?Number(f.historyId):0)>=p-qt&&(e.db?.messages&&await e.db.messages.existsByEntityId(l.id)?d.push(l.id):i.push(l.id))}catch{}return{added:i,modified:d}}async function es(e,t,a,o){let n=null,i="",d=0;for(let p of o)try{let l=await Ae(t,a,p),f=await Oe(t,a,l);n||(n=f);try{let b=await Ne(e,f);!i&&b&&(i=b)}catch(b){throw console.error(`Failed to save message ${f.id} to database:`,b),b}}catch(l){d++,console.warn(`Failed to process message ${p}:`,l)}return{message:n,corsairEntityId:i,failedCount:d}}async function ts(e,t,a,o){let n=null,i="",d=0;if(!e.db?.messages)return{message:null,corsairEntityId:i,failedCount:d};for(let p of o)try{let l=null;try{l=await y(`/users/${a}/messages/${p}`,t,{method:"GET",query:{format:"full"}})}catch(f){if(!je(f))throw f}if(!n&&l&&(n=l),!i){let f=await e.db.messages.findIdByEntityId(p);f&&(i=f)}await e.db.messages.deleteByEntityId(p)}catch(l){d++,console.warn(`Failed to delete message ${p} from database:`,l)}return{message:n,corsairEntityId:i,failedCount:d}}async function ss(e,t,a,o){let n=null,i="",d=0;if(!e.db?.messages)return{message:null,corsairEntityId:i,failedCount:d};for(let p of o)try{let l=await Ae(t,a,p),f=await Oe(t,a,l);n||(n=f);try{let b=await Ne(e,f);!i&&b&&(i=b)}catch(b){throw console.error(`Failed to update message ${f.id} in database:`,b),b}}catch(l){d++,console.warn(`Failed to process message ${p}:`,l)}return{message:n,corsairEntityId:i,failedCount:d}}var Be={match:z("messageChanged"),handler:async(e,t)=>{let o=t.payload.message?.data;if(!o)return{success:!1,error:"No message data in notification"};let n;try{n=k(o)}catch{return{success:!1,error:"Invalid push notification format"}}if(!n.historyId||!n.emailAddress)return{success:!1,error:"Invalid push notification format"};let i=e.key,d=n.emailAddress,p=n.historyId;try{let l=await Yt(e),f=l??$(p),b;try{b=await Re(i,d,f)}catch(h){if(l&&je(h))b=await Re(i,d,$(p));else throw h}let T=Jt(b),_e=new Set(T.added),qe=new Set(T.deleted),P=T.added,_=T.deleted,C=T.modified.filter(h=>!_e.has(h)&&!qe.has(h)),He=P.length>0||_.length>0||C.length>0,X=!1;if(!He&&!l){let h=await Qt(e,i,d,p);P=h.added,C=h.modified,X=!0}let A=P.length>0&&K(e,"messageReceived")?await es(e,i,d,P):null,O=_.length>0&&K(e,"messageDeleted")?await ts(e,i,d,_):null,j=C.length>0&&K(e,"messageLabelChanged")?await ss(e,i,d,C):null;if((A?.failedCount??0)+(O?.failedCount??0)+(j?.failedCount??0)>0)l||await W(e,$(p),l);else{let h=Zt(b);h?await W(e,h,l):X&&(P.length>0||C.length>0)?await W(e,p,l):l||await W(e,$(p),l)}if(A){let h={type:"messageReceived",emailAddress:d,historyId:p,message:A.message??{}};return await V(e,"gmail.webhook.messageReceived",{...h},"completed"),{success:!0,corsairEntityId:A.corsairEntityId,data:h}}if(O){let h={type:"messageDeleted",emailAddress:d,historyId:p,message:O.message??{}};return await V(e,"gmail.webhook.messageDeleted",{...h},"completed"),{success:!0,corsairEntityId:O.corsairEntityId,data:h}}if(j){let h={type:"messageLabelChanged",emailAddress:d,historyId:p,message:j.message??{}};return await V(e,"gmail.webhook.messageLabelChanged",{...h},"completed"),{success:!0,corsairEntityId:j.corsairEntityId,data:h}}return{success:!0,corsairEntityId:"",data:void 0}}catch(l){return console.error("Failed to process Gmail webhook:",l),{success:!1,error:`Failed to process message: ${l instanceof Error?l.message:"Unknown error"}`}}}};var Ue={messageChanged:Be};import{toExternalId as as}from"corsair/core";async function $e(e){let t=e.access_token;if(!t)return null;let a=await fetch("https://gmail.googleapis.com/gmail/v1/users/me/profile",{headers:{Authorization:`Bearer ${t}`}});if(!a.ok)return null;let o=await a.json(),n=as(o.emailAddress);return n?{linkType:"email_address",externalId:n}:null}import{asRecord as os,decodePubSubData as is,firstString as ns,readBodyRecord as rs}from"corsair/core";function We(e){let t=rs(e);if(!t)return null;let a=os(is(t)),o=ns([a?.emailAddress]);return o?{linkType:"email_address",externalId:o}:null}var ms={oauth_2:{integration:["topic_id","pubsub_audience"],account:["email_address","last_history_id"]}},ps={messages:{list:E.list,get:E.get,send:E.send,modify:E.modify,batchModify:E.batchModify,trash:E.trash,untrash:E.untrash},labels:{list:S.list,get:S.get,create:S.create,update:S.update,delete:S.delete},drafts:{list:w.list,get:w.get,create:w.create,update:w.update,delete:w.delete,send:w.send},threads:{list:L.list,get:L.get,modify:L.modify,trash:L.trash,untrash:L.untrash}},us={"messages.list":{input:g.messagesList,output:c.messagesList},"messages.get":{input:g.messagesGet,output:c.messagesGet},"messages.send":{input:g.messagesSend,output:c.messagesSend},"messages.modify":{input:g.messagesModify,output:c.messagesModify},"messages.batchModify":{input:g.messagesBatchModify,output:c.messagesBatchModify},"messages.trash":{input:g.messagesTrash,output:c.messagesTrash},"messages.untrash":{input:g.messagesUntrash,output:c.messagesUntrash},"labels.list":{input:g.labelsList,output:c.labelsList},"labels.get":{input:g.labelsGet,output:c.labelsGet},"labels.create":{input:g.labelsCreate,output:c.labelsCreate},"labels.update":{input:g.labelsUpdate,output:c.labelsUpdate},"labels.delete":{input:g.labelsDelete,output:c.labelsDelete},"drafts.list":{input:g.draftsList,output:c.draftsList},"drafts.get":{input:g.draftsGet,output:c.draftsGet},"drafts.create":{input:g.draftsCreate,output:c.draftsCreate},"drafts.update":{input:g.draftsUpdate,output:c.draftsUpdate},"drafts.delete":{input:g.draftsDelete,output:c.draftsDelete},"drafts.send":{input:g.draftsSend,output:c.draftsSend},"threads.list":{input:g.threadsList,output:c.threadsList},"threads.get":{input:g.threadsGet,output:c.threadsGet},"threads.modify":{input:g.threadsModify,output:c.threadsModify},"threads.trash":{input:g.threadsTrash,output:c.threadsTrash},"threads.untrash":{input:g.threadsUntrash,output:c.threadsUntrash}},gs={messageChanged:Ue.messageChanged},cs={messageChanged:{description:"A Gmail message was received, deleted, or had its labels changed",payload:ve,response:xe}},hs="oauth_2",fs={"messages.list":{riskLevel:"read",description:"List messages in a mailbox"},"messages.get":{riskLevel:"read",description:"Get a specific message"},"messages.send":{riskLevel:"write",description:"Send an email to one or more recipients"},"messages.modify":{riskLevel:"write",description:"Add or remove labels from a message"},"messages.batchModify":{riskLevel:"write",description:"Add or remove labels from multiple messages in bulk"},"messages.trash":{riskLevel:"write",description:"Move a message to the trash"},"messages.untrash":{riskLevel:"write",description:"Restore a message from the trash"},"labels.list":{riskLevel:"read",description:"List all labels in the mailbox"},"labels.get":{riskLevel:"read",description:"Get a specific label"},"labels.create":{riskLevel:"write",description:"Create a new label"},"labels.update":{riskLevel:"write",description:"Update an existing label"},"labels.delete":{riskLevel:"destructive",description:"Delete a label"},"drafts.list":{riskLevel:"read",description:"List drafts in the mailbox"},"drafts.get":{riskLevel:"read",description:"Get a specific draft"},"drafts.create":{riskLevel:"write",description:"Create a new draft"},"drafts.update":{riskLevel:"write",description:"Update an existing draft"},"drafts.delete":{riskLevel:"destructive",description:"Delete a draft"},"drafts.send":{riskLevel:"write",description:"Send a draft as an email"},"threads.list":{riskLevel:"read",description:"List threads in the mailbox"},"threads.get":{riskLevel:"read",description:"Get a specific thread"},"threads.modify":{riskLevel:"write",description:"Add or remove labels from a thread"},"threads.trash":{riskLevel:"write",description:"Move a thread to the trash"},"threads.untrash":{riskLevel:"write",description:"Restore a thread from the trash"}};function da(e={}){let t={...e,authType:e.authType??hs};return{id:"gmail",schema:F,options:t,authConfig:ms,oauthConfig:{providerName:"Google",authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/gmail.modify"],authParams:{access_type:"offline",prompt:"consent"}},hooks:t.hooks,webhookHooks:t.webhookHooks,endpoints:ps,webhooks:gs,endpointMeta:fs,endpointSchemas:us,webhookSchemas:cs,keyBuilder:async a=>{let o=a.authType;if(t.key)return t.key;if(a.authType==="oauth_2")return ls(a,{plugin:"gmail",tokenUrl:"https://oauth2.googleapis.com/token"});throw new ds("gmail","oauth_2")},pluginWebhookMatcher:a=>{let o=a.headers;if(!(o.from==="noreply@google.com"||typeof o["user-agent"]=="string"&&o["user-agent"].includes("APIs-Google")))return!1;let i=a.body;if(!i?.message?.data)return!1;try{let d=k(i.message.data);return!!d.emailAddress&&!!d.historyId}catch{return!1}},pluginTenantWebhookMatcher:We,oauthWebhookTenantLinkResolver:$e,subscribe:Ce}}export{F as GmailSchema,z as createGmailWebhookMatcher,k as decodePubSubMessage,da as gmail,ms as gmailAuthConfig,us as gmailEndpointSchemas,ps as gmailEndpointsNested,gs as gmailWebhooksNested};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@corsair-dev/gmail",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Gmail plugin for Corsair",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"typescript": "^5.9.3",
|
|
29
29
|
"zod": "^4.1.13",
|
|
30
30
|
"jest": "^29.7.0",
|
|
31
|
-
"corsair": "0.1.
|
|
31
|
+
"corsair": "0.1.138"
|
|
32
32
|
},
|
|
33
33
|
"keywords": [
|
|
34
34
|
"corsair",
|