@@ -5,11 +5,12 @@ const { oauth2Apps } = require('../oauth2-apps');
5
5
const getSecret = require ( '../get-secret' ) ;
6
6
const msgpack = require ( 'msgpack5' ) ( ) ;
7
7
const logger = require ( '../logger' ) ;
8
- const util = require ( 'util' ) ;
9
8
const addressparser = require ( 'nodemailer/lib/addressparser' ) ;
10
9
const libmime = require ( 'libmime' ) ;
11
10
const he = require ( 'he' ) ;
12
11
12
+ const { REDIS_PREFIX } = require ( '../consts' ) ;
13
+
13
14
const fs = require ( 'fs' ) ;
14
15
15
16
const GMAIL_API_BASE = 'https://gmail.googleapis.com' ;
@@ -68,8 +69,45 @@ class GmailClient {
68
69
constructor ( account , options ) {
69
70
this . account = account ;
70
71
this . options = options || { } ;
72
+
73
+ this . accountLogger = options . accountLogger ;
71
74
this . redis = options . redis ;
72
75
this . logger = options . logger || logger ;
76
+
77
+ this . subconnections = [ ] ;
78
+ }
79
+
80
+ async init ( ) {
81
+ // No-op
82
+ }
83
+
84
+ async delete ( ) {
85
+ // No-op
86
+ }
87
+
88
+ getAccountKey ( ) {
89
+ return `${ REDIS_PREFIX } iad:${ this . account } ` ;
90
+ }
91
+
92
+ getMailboxListKey ( ) {
93
+ return `${ REDIS_PREFIX } ial:${ this . account } ` ;
94
+ }
95
+
96
+ getMailboxHashKey ( ) {
97
+ return `${ REDIS_PREFIX } iah:${ this . account } ` ;
98
+ }
99
+
100
+ getLogKey ( ) {
101
+ // this format ensures that the key is deleted when user is removed
102
+ return `${ REDIS_PREFIX } iam:${ this . account } :g` ;
103
+ }
104
+
105
+ getLoggedAccountsKey ( ) {
106
+ return `${ REDIS_PREFIX } iaz:logged` ;
107
+ }
108
+
109
+ currentState ( ) {
110
+ return 'connected' ;
73
111
}
74
112
75
113
async getAccount ( ) {
@@ -108,12 +146,13 @@ class GmailClient {
108
146
}
109
147
110
148
async listMailboxes ( options ) {
149
+ console . log ( 'LIST MAILBOXES' , options ) ;
111
150
await this . prepare ( ) ;
112
-
151
+ console . log ( 1 ) ;
113
152
const accessToken = await this . getToken ( ) ;
114
-
153
+ console . log ( 2 , accessToken ) ;
115
154
let labelsResult = await this . oAuth2Client . request ( accessToken , `${ GMAIL_API_BASE } /gmail/v1/users/me/labels` ) ;
116
-
155
+ console . log ( 3 , labelsResult ) ;
117
156
let labels = labelsResult . labels . filter ( label => ! SKIP_LABELS . includes ( label . id ) ) ;
118
157
119
158
let resultLabels ;
@@ -127,7 +166,9 @@ class GmailClient {
127
166
resultLabels = labels ;
128
167
}
129
168
130
- resultLabels = resultLabels
169
+ console . log ( 3 , resultLabels ) ;
170
+
171
+ let mailboxes = resultLabels
131
172
. map ( label => {
132
173
let pathParts = label . name . split ( '/' ) ;
133
174
let name = pathParts . pop ( ) ;
@@ -191,8 +232,9 @@ class GmailClient {
191
232
192
233
return a . path . toLowerCase ( ) . localeCompare ( b . path . toLowerCase ( ) ) ;
193
234
} ) ;
235
+ console . log ( 555 , mailboxes ) ;
194
236
195
- return { mailboxes : resultLabels } ;
237
+ return mailboxes ;
196
238
}
197
239
198
240
getEnvelope ( messageData ) {
@@ -433,6 +475,7 @@ class GmailClient {
433
475
}
434
476
435
477
async listMessages ( query ) {
478
+ console . log ( 'LIST MESSAGES' , query ) ;
436
479
await this . prepare ( ) ;
437
480
438
481
const accessToken = await this . getToken ( ) ;
@@ -711,62 +754,66 @@ class GmailClient {
711
754
712
755
module . exports = { GmailClient } ;
713
756
714
- const { redis } = require ( '../db' ) ;
757
+ if ( / g m a i l - c l i e n t \. j s $ / . test ( process . argv [ 1 ] ) ) {
758
+ console . log ( 'RUN AS STANDALONE' ) ;
715
759
716
- let main = async ( ) => {
717
- let gmailClient = new GmailClient ( 'andris' , { redis } ) ;
760
+ let main = async ( ) => {
761
+ const { redis } = require ( '../db' ) ;
718
762
719
- let mailboxes = await gmailClient . listMailboxes ( ) ;
720
- console . log ( mailboxes ) ;
763
+ let gmailClient = new GmailClient ( 'andris' , { redis } ) ;
721
764
722
- let messages = await gmailClient . listMessages ( { path : 'INBOX' } ) ;
723
- console . log ( JSON . stringify ( messages , false , 2 ) ) ;
765
+ let mailboxes = await gmailClient . listMailboxes ( ) ;
766
+ console . log ( mailboxes ) ;
724
767
725
- let deleted = false ;
768
+ let messages = await gmailClient . listMessages ( { path : 'INBOX' } ) ;
769
+ console . log ( JSON . stringify ( messages , false , 2 ) ) ;
726
770
727
- for ( let msg of messages ) {
728
- if ( / t e s t k i r i / i. test ( msg . subject ) && ! deleted ) {
729
- deleted = true ;
771
+ let deleted = false ;
730
772
731
- console . log ( 'DELETING' , msg . id ) ;
732
- let y = await gmailClient . deleteMessage ( msg . id , true ) ;
733
- console . log ( 'DELETE RESULT' , y ) ;
734
- }
773
+ for ( let msg of messages ) {
774
+ if ( / t e s t k i r i / i. test ( msg . subject ) && ! deleted ) {
775
+ deleted = true ;
776
+
777
+ console . log ( 'DELETING' , msg . id ) ;
778
+ let y = await gmailClient . deleteMessage ( msg . id , true ) ;
779
+ console . log ( 'DELETE RESULT' , y ) ;
780
+ }
735
781
736
- if ( msg . attachments && msg . attachments . length ) {
737
- await gmailClient . getMessage ( msg . id , { textType : '*' } ) ;
782
+ if ( msg . attachments && msg . attachments . length ) {
783
+ await gmailClient . getMessage ( msg . id , { textType : '*' } ) ;
738
784
739
- const textContent = await gmailClient . getText ( msg . text . id , { textType : '*' } ) ;
740
- console . log ( 'TEXT CONTENT' , textContent ) ;
785
+ const textContent = await gmailClient . getText ( msg . text . id , { textType : '*' } ) ;
786
+ console . log ( 'TEXT CONTENT' , textContent ) ;
741
787
742
- console . log ( 'MOVE MESSAGE' ) ;
743
- let moveRes = await gmailClient . moveMessage ( msg . id , { path : 'Inbox' } ) ;
744
- console . log ( 'MOVE RES' , moveRes ) ;
788
+ console . log ( 'MOVE MESSAGE' ) ;
789
+ let moveRes = await gmailClient . moveMessage ( msg . id , { path : 'Inbox' } ) ;
790
+ console . log ( 'MOVE RES' , moveRes ) ;
745
791
746
- let raw = await gmailClient . getRawMessage ( msg . id ) ;
747
- await fs . promises . writeFile ( `/Users/andris/Desktop/${ msg . id } .eml` , raw ) ;
748
- for ( let a of msg . attachments ) {
749
- let attachment = await gmailClient . getAttachment ( a . id ) ;
750
- console . log ( attachment ) ;
751
- let s = fs . createWriteStream ( `/Users/andris/Desktop/${ a . filename } ` ) ;
792
+ let raw = await gmailClient . getRawMessage ( msg . id ) ;
793
+ await fs . promises . writeFile ( `/Users/andris/Desktop/${ msg . id } .eml` , raw ) ;
794
+ for ( let a of msg . attachments ) {
795
+ let attachment = await gmailClient . getAttachment ( a . id ) ;
796
+ console . log ( attachment ) ;
797
+ let s = fs . createWriteStream ( `/Users/andris/Desktop/${ a . filename } ` ) ;
752
798
753
- console . log ( 'PIPING TO STREAM' ) ;
754
- await new Promise ( ( r , e ) => {
755
- s . once ( 'finish' , r ) ;
756
- s . once ( 'error' , e ) ;
799
+ console . log ( 'PIPING TO STREAM' ) ;
800
+ await new Promise ( ( r , e ) => {
801
+ s . once ( 'finish' , r ) ;
802
+ s . once ( 'error' , e ) ;
757
803
758
- s . write ( attachment . data ) ;
759
- s . end ( ) ;
760
- } ) ;
761
- console . log ( 'DONE' ) ;
804
+ s . write ( attachment . data ) ;
805
+ s . end ( ) ;
806
+ } ) ;
807
+ console . log ( 'DONE' ) ;
762
808
763
- //await fs.promises.writeFile(`/Users/andris/Desktop/${a.filename}`, attachment);
764
- process . exit ( ) ;
809
+ //await fs.promises.writeFile(`/Users/andris/Desktop/${a.filename}`, attachment);
810
+ process . exit ( ) ;
811
+ }
765
812
}
766
813
}
767
- }
768
- } ;
814
+ } ;
769
815
770
- main ( )
771
- . catch ( err => console . error ( util . inspect ( err , false , 22 ) ) )
772
- . finally ( ( ) => process . exit ( ) ) ;
816
+ main ( )
817
+ . catch ( err => console . error ( require ( 'util' ) . inspect ( err , false , 22 ) ) )
818
+ . finally ( ( ) => process . exit ( ) ) ;
819
+ }
0 commit comments