MCPcopy Index your code
hub / github.com/simstudioai/sim / updateImapState

Function updateImapState

apps/sim/lib/webhooks/polling/imap.ts:192–237  ·  view source on GitHub ↗
(
  webhookId: string,
  uidByMailbox: Record<string, number>,
  timestamp: string,
  config: ImapWebhookConfig,
  logger: Logger,
  uidValidityByMailbox: Record<string, string>
)

Source from the content-addressed store, hash-verified

190}
191
192async function updateImapState(
193 webhookId: string,
194 uidByMailbox: Record<string, number>,
195 timestamp: string,
196 config: ImapWebhookConfig,
197 logger: Logger,
198 uidValidityByMailbox: Record<string, string>
199) {
200 const existingUidByMailbox = config.lastProcessedUidByMailbox || {}
201 const prevUidValidity = config.uidValidityByMailbox || {}
202
203 const resetMailboxes = new Set(
204 Object.entries(uidValidityByMailbox)
205 .filter(
206 ([mailbox, validity]) =>
207 prevUidValidity[mailbox] !== undefined && prevUidValidity[mailbox] !== validity
208 )
209 .map(([mailbox]) => mailbox)
210 )
211
212 const mergedUidByMailbox: Record<string, number> = {}
213
214 for (const [mailbox, uid] of Object.entries(existingUidByMailbox)) {
215 if (!resetMailboxes.has(mailbox)) {
216 mergedUidByMailbox[mailbox] = uid
217 }
218 }
219
220 for (const [mailbox, uid] of Object.entries(uidByMailbox)) {
221 if (resetMailboxes.has(mailbox)) {
222 mergedUidByMailbox[mailbox] = uid
223 } else {
224 mergedUidByMailbox[mailbox] = Math.max(uid, mergedUidByMailbox[mailbox] || 0)
225 }
226 }
227
228 await updateWebhookProviderConfig(
229 webhookId,
230 {
231 lastProcessedUidByMailbox: mergedUidByMailbox,
232 lastCheckedTimestamp: timestamp,
233 uidValidityByMailbox,
234 },
235 logger
236 )
237}
238
239async function fetchNewEmails(
240 client: ImapFlow,

Callers 1

pollWebhookFunction · 0.85

Calls 1

Tested by

no test coverage detected