@@ -41,25 +41,26 @@ const SYSTEM_NAMES = {
41
41
/*
42
42
43
43
✅ listMessages
44
+ ❌ paging - not implemented
44
45
✅ getText
45
46
✅ getMessage
46
47
case 'updateMessage':
47
48
case 'updateMessages':
48
49
✅ listMailboxes
49
50
case 'moveMessage':
50
51
case 'moveMessages':
51
- ✅ deleteMessage ( no force option)
52
+ ✅ deleteMessage - no force option
52
53
case 'deleteMessages':
53
54
✅ getRawMessage
54
- case ' getQuota':
55
+ ⭕️ getQuota - not supported
55
56
case 'createMailbox':
56
57
case 'renameMailbox':
57
58
case 'deleteMailbox':
58
59
✅ getAttachment
59
60
case 'submitMessage':
60
61
case 'queueMessage':
61
62
case 'uploadMessage':
62
- ✅ subconnections
63
+ ⭕️ subconnections - not supported
63
64
64
65
*/
65
66
@@ -101,6 +102,11 @@ class GmailClient {
101
102
await this . getClient ( ) ;
102
103
}
103
104
105
+ // Treat Quota request as unsupported by mail server
106
+ async getQuota ( ) {
107
+ return false ;
108
+ }
109
+
104
110
async listMailboxes ( options ) {
105
111
await this . prepare ( ) ;
106
112
@@ -513,6 +519,51 @@ class GmailClient {
513
519
} ;
514
520
}
515
521
522
+ async moveMessage ( messageId , target ) {
523
+ target = target || { } ;
524
+ // target.path
525
+
526
+ await this . prepare ( ) ;
527
+
528
+ const accessToken = await this . getToken ( ) ;
529
+
530
+ const requestQuery = {
531
+ format : 'minimal'
532
+ } ;
533
+
534
+ let path = ( target . path || '' ) . toString ( ) . trim ( ) ;
535
+
536
+ let label ;
537
+
538
+ if ( / ^ i n b o x $ / i. test ( path ) ) {
539
+ label = 'INBOX' ;
540
+ }
541
+
542
+ for ( let key of Object . keys ( SYSTEM_NAMES ) ) {
543
+ if ( path === SYSTEM_NAMES [ key ] ) {
544
+ label = key ;
545
+ }
546
+ }
547
+
548
+ if ( ! label ) {
549
+ label = path ;
550
+ }
551
+
552
+ const messageData = await this . oAuth2Client . request ( accessToken , `${ GMAIL_API_BASE } /gmail/v1/users/me/messages/${ messageId } ` , 'get' , requestQuery ) ;
553
+
554
+ console . log ( { label, p : path . toUpperCase ( ) , s : SYSTEM_NAMES [ path . toUpperCase ( ) ] } ) ;
555
+
556
+ if ( ! messageData ) {
557
+ return false ;
558
+ }
559
+
560
+ if ( messageData . labelIds . includes ( label ) ) {
561
+ return true ;
562
+ }
563
+
564
+ console . log ( messageData ) ;
565
+ }
566
+
516
567
async getAttachmentContent ( attachmentId ) {
517
568
let sepPos = attachmentId . indexOf ( '.' ) ;
518
569
if ( sepPos < 0 ) {
@@ -688,6 +739,10 @@ let main = async () => {
688
739
const textContent = await gmailClient . getText ( msg . text . id , { textType : '*' } ) ;
689
740
console . log ( 'TEXT CONTENT' , textContent ) ;
690
741
742
+ console . log ( 'MOVE MESSAGE' ) ;
743
+ let moveRes = await gmailClient . moveMessage ( msg . id , { path : 'Inbox' } ) ;
744
+ console . log ( 'MOVE RES' , moveRes ) ;
745
+
691
746
let raw = await gmailClient . getRawMessage ( msg . id ) ;
692
747
await fs . promises . writeFile ( `/Users/andris/Desktop/${ msg . id } .eml` , raw ) ;
693
748
for ( let a of msg . attachments ) {
0 commit comments