Skip to content

Commit 4d293a1

Browse files
committed
fix: schema updates for message update
1 parent 81d0d8f commit 4d293a1

File tree

2 files changed

+63
-11
lines changed

2 files changed

+63
-11
lines changed

lib/email-client/gmail-client.js

+31-2
Original file line numberDiff line numberDiff line change
@@ -769,14 +769,25 @@ class GmailClient extends BaseClient {
769769
switch (err?.oauthRequest?.response?.error?.code) {
770770
case 400: {
771771
// invalid name
772-
let error = new Error('Invalid label');
772+
let error = new Error(err?.oauthRequest?.response?.error?.message || 'Invalid label');
773773
error.info = {
774774
response: err?.oauthRequest?.response?.error?.message
775775
};
776776
error.code = err?.oauthRequest?.response?.error?.status;
777777
error.statusCode = 400;
778778
throw error;
779779
}
780+
781+
case 403: {
782+
// invalid name
783+
let error = new Error(err?.oauthRequest?.response?.error?.message || 'Permission Denied');
784+
error.info = {
785+
response: err?.oauthRequest?.response?.error?.message
786+
};
787+
error.code = err?.oauthRequest?.response?.error?.status;
788+
error.statusCode = 403;
789+
throw error;
790+
}
780791
}
781792

782793
throw err;
@@ -1154,7 +1165,25 @@ class GmailClient extends BaseClient {
11541165
payload.threadId = referencedMessage.threadId;
11551166
}
11561167

1157-
const uploadInfo = await this.request(`${GMAIL_API_BASE}/gmail/v1/users/me/messages?internalDateSource=dateHeader`, 'post', payload);
1168+
let uploadInfo;
1169+
try {
1170+
uploadInfo = await this.request(`${GMAIL_API_BASE}/gmail/v1/users/me/messages?internalDateSource=dateHeader`, 'post', payload);
1171+
} catch (err) {
1172+
switch (err?.oauthRequest?.response?.error?.code) {
1173+
case 403: {
1174+
// permission denied
1175+
let error = new Error(err?.oauthRequest?.response?.error?.message || 'Permission Denied');
1176+
error.info = {
1177+
response: err?.oauthRequest?.response?.error?.message
1178+
};
1179+
error.code = err?.oauthRequest?.response?.error?.status;
1180+
error.statusCode = 403;
1181+
throw error;
1182+
}
1183+
}
1184+
1185+
throw err;
1186+
}
11581187

11591188
let response = {
11601189
id: uploadInfo?.id,

lib/schemas.js

+32-9
Original file line numberDiff line numberDiff line change
@@ -1197,21 +1197,44 @@ const searchSchema = Joi.object({
11971197

11981198
const messageUpdateSchema = Joi.object({
11991199
flags: Joi.object({
1200-
add: Joi.array().items(Joi.string().max(128)).single().description('Add new flags').example(['\\Seen']).label('AddFlags'),
1201-
delete: Joi.array().items(Joi.string().max(128)).single().description('Delete specific flags').example(['\\Flagged']).label('DeleteFlags'),
1202-
set: Joi.array().items(Joi.string().max(128)).single().description('Override all flags').example(['\\Seen', '\\Flagged']).label('SetFlags')
1200+
add: Joi.array().items(Joi.string().max(128)).single().description('Add flags.').example(['\\Seen']).label('AddFlags'),
1201+
delete: Joi.array().items(Joi.string().max(128)).single().description('Remove flags.').example(['\\Flagged']).label('DeleteFlags'),
1202+
set: Joi.array().items(Joi.string().max(128)).single().description('Replace all existing flags.').example(['\\Seen', '\\Flagged']).label('SetFlags')
12031203
})
1204-
.description('Flag updates')
1204+
.description('Updates for message flags.')
12051205
.label('FlagUpdate'),
12061206

12071207
labels: Joi.object({
1208-
add: Joi.array().items(Joi.string().max(128)).single().description('Add new labels').example(['Some label']).label('AddLabels'),
1209-
delete: Joi.array().items(Joi.string().max(128)).single().description('Delete specific labels').example(['Some label']).label('DeleteLabels'),
1210-
set: Joi.array().items(Joi.string().max(128)).single().description('Override all labels').example(['First label', 'Second label']).label('SetLabels')
1208+
add: Joi.array()
1209+
.items(Joi.string().max(128))
1210+
.single()
1211+
.description('Add labels. Each label is a mailbox ID or a path if the ID is not set.')
1212+
.example(['Label_971539351003152516'])
1213+
.label('AddLabels'),
1214+
delete: Joi.array()
1215+
.items(Joi.string().max(128))
1216+
.single()
1217+
.description('Remove labels. Each label is a mailbox ID or a path if the ID is not set.')
1218+
.example(['Label_971539351003152516'])
1219+
.label('DeleteLabels'),
1220+
set: Joi.array()
1221+
.items(Joi.string().max(128))
1222+
.single()
1223+
.description('Replace all existing labels.')
1224+
.example(['Inbox', 'Important'])
1225+
.label('SetLabels')
1226+
.meta({ swaggerHidden: true })
12111227
})
1212-
.description('Label updates. Labels can only be used with Gmail IMAP and Gmail API accounts.')
1228+
.description('Updates for message labels. Labels can only be used with Gmail IMAP or Gmail API.')
12131229
.label('LabelUpdate')
1214-
}).label('MessageUpdate');
1230+
})
1231+
.label('MessageUpdate')
1232+
.example({
1233+
flags: {
1234+
add: '\\Seen',
1235+
delete: '\\Flagged'
1236+
}
1237+
});
12151238

12161239
const accountSchemas = {
12171240
syncFrom: Joi.date()

0 commit comments

Comments
 (0)