{"version":3,"file":"outlookIntegrationStatus.mjs","names":["OutlookIntegrationStatus","getStatus","fetchOutlookStatus","OutlookStatus","connected","mailboxPrincipal","expiresAt","scope","loaded","error","DEFAULT_STATUS","cachedStatus","listeners","Set","status","inFlight","Promise","hasFetchedOnce","statusVersion","getOutlookStatus","isOutlookConnected","setOutlookDisconnected","publish","resetOutlookStatus","subscribeOutlookStatus","handler","add","err","console","warn","delete","refreshOutlookStatus","requestVersion","request","then","mapStatus","catch","message","Error","finally","ensureOutlookStatusLoaded","resolve","forEach"],"sources":["../../../src/integrations/outlook/outlookIntegrationStatus.ts"],"sourcesContent":["import type { OutlookIntegrationStatus } from './outlookIntegrationClient';\nimport { getStatus as fetchOutlookStatus } from './outlookIntegrationClient';\n\nexport type OutlookStatus = {\n  connected: boolean;\n  mailboxPrincipal?: string | null;\n  expiresAt?: string | null;\n  scope?: string | null;\n  loaded: boolean;\n  error?: string | null;\n};\n\nconst DEFAULT_STATUS: OutlookStatus = {\n  connected: false,\n  mailboxPrincipal: null,\n  expiresAt: null,\n  scope: null,\n  loaded: false,\n  error: null,\n};\n\nlet cachedStatus: OutlookStatus = { ...DEFAULT_STATUS };\nconst listeners = new Set<(status: OutlookStatus) => void>();\nlet inFlight: Promise<OutlookStatus> | null = null;\nlet hasFetchedOnce = false;\nlet statusVersion = 0;\n\nexport function getOutlookStatus(): OutlookStatus {\n  return cachedStatus;\n}\n\nexport function isOutlookConnected(): boolean {\n  return !!cachedStatus.connected;\n}\n\nexport function setOutlookDisconnected(): void {\n  cachedStatus = {\n    ...cachedStatus,\n    connected: false,\n    mailboxPrincipal: null,\n    expiresAt: null,\n    scope: null,\n    loaded: true,\n    error: null,\n  };\n  publish();\n}\n\nexport function resetOutlookStatus(): void {\n  statusVersion += 1;\n  hasFetchedOnce = false;\n  inFlight = null;\n  cachedStatus = { ...DEFAULT_STATUS };\n  publish();\n}\n\nexport function subscribeOutlookStatus(\n  handler: (status: OutlookStatus) => void\n): () => void {\n  listeners.add(handler);\n  try {\n    handler(cachedStatus);\n  } catch (err) {\n    console.warn('OutlookStatus: failed to publish initial status', err);\n  }\n  return () => {\n    listeners.delete(handler);\n  };\n}\n\nexport async function refreshOutlookStatus(): Promise<OutlookStatus> {\n  if (inFlight !== null) {\n    return inFlight;\n  }\n\n  const requestVersion = statusVersion;\n  const request = fetchOutlookStatus()\n    .then(status => {\n      if (requestVersion !== statusVersion) {\n        return cachedStatus;\n      }\n      cachedStatus = mapStatus(status);\n      hasFetchedOnce = true;\n      publish();\n      return cachedStatus;\n    })\n    .catch(err => {\n      if (requestVersion !== statusVersion) {\n        return cachedStatus;\n      }\n      const message =\n        err instanceof Error\n          ? err.message\n          : 'Unable to load Outlook integration status.';\n      cachedStatus = {\n        ...cachedStatus,\n        loaded: true,\n        error: message,\n      };\n      publish();\n      throw err;\n    })\n    .finally(() => {\n      if (inFlight === request) {\n        inFlight = null;\n      }\n    });\n\n  inFlight = request;\n  return request;\n}\n\nexport function ensureOutlookStatusLoaded(): Promise<OutlookStatus> {\n  return hasFetchedOnce ? Promise.resolve(cachedStatus) : refreshOutlookStatus();\n}\n\nfunction mapStatus(status?: OutlookIntegrationStatus): OutlookStatus {\n  return {\n    connected: !!status?.connected,\n    mailboxPrincipal: status?.mailboxPrincipal ?? null,\n    expiresAt: status?.expiresAt ?? null,\n    scope: status?.scope ?? null,\n    loaded: true,\n    error: null,\n  };\n}\n\nfunction publish(): void {\n  listeners.forEach(handler => {\n    try {\n      handler(cachedStatus);\n    } catch (err) {\n      console.warn('OutlookStatus: subscriber threw an error', err);\n    }\n  });\n}\n"],"mappings":";;AAYA,MAAMU,iBAAgC;CACpCN,WAAW;CACXC,kBAAkB;CAClBC,WAAW;CACXC,OAAO;CACPC,QAAQ;CACRC,OAAO;CACR;AAED,IAAIE,eAA8B,EAAE,GAAGD,gBAAgB;AACvD,MAAME,4BAAY,IAAIC,KAAsC;AAC5D,IAAIE,WAA0C;AAC9C,IAAIE,iBAAiB;AACrB,IAAIC,gBAAgB;AAEpB,SAAgBC,mBAAkC;AAChD,QAAOR;;AAGT,SAAgBS,qBAA8B;AAC5C,QAAO,CAAC,CAACT,aAAaP;;AAGxB,SAAgBiB,yBAA+B;AAC7CV,gBAAe;EACb,GAAGA;EACHP,WAAW;EACXC,kBAAkB;EAClBC,WAAW;EACXC,OAAO;EACPC,QAAQ;EACRC,OAAO;EACR;AACDa,UAAS;;AAGX,SAAgBC,qBAA2B;AACzCL,kBAAiB;AACjBD,kBAAiB;AACjBF,YAAW;AACXJ,gBAAe,EAAE,GAAGD,gBAAgB;AACpCY,UAAS;;AAGX,SAAgBE,uBACdC,SACY;AACZb,WAAUc,IAAID,QAAQ;AACtB,KAAI;AACFA,UAAQd,aAAa;UACdgB,KAAK;AACZC,UAAQC,KAAK,mDAAmDF,IAAI;;AAEtE,cAAa;AACXf,YAAUkB,OAAOL,QAAQ;;;AAI7B,eAAsBM,uBAA+C;AACnE,KAAIhB,aAAa,KACf,QAAOA;CAGT,MAAMiB,iBAAiBd;CACvB,MAAMe,UAAU/B,WAAoB,CACjCgC,MAAKpB,WAAU;AACd,MAAIkB,mBAAmBd,cACrB,QAAOP;AAETA,iBAAewB,UAAUrB,OAAO;AAChCG,mBAAiB;AACjBK,WAAS;AACT,SAAOX;GACP,CACDyB,OAAMT,QAAO;AACZ,MAAIK,mBAAmBd,cACrB,QAAOP;EAET,MAAM0B,UACJV,eAAeW,QACXX,IAAIU,UACJ;AACN1B,iBAAe;GACb,GAAGA;GACHH,QAAQ;GACRC,OAAO4B;GACR;AACDf,WAAS;AACT,QAAMK;GACN,CACDY,cAAc;AACb,MAAIxB,aAAakB,QACflB,YAAW;GAEb;AAEJA,YAAWkB;AACX,QAAOA;;AAGT,SAAgBO,4BAAoD;AAClE,QAAOvB,iBAAiBD,QAAQyB,QAAQ9B,aAAa,GAAGoB,sBAAsB;;AAGhF,SAASI,UAAUrB,QAAkD;AACnE,QAAO;EACLV,WAAW,CAAC,CAACU,QAAQV;EACrBC,kBAAkBS,QAAQT,oBAAoB;EAC9CC,WAAWQ,QAAQR,aAAa;EAChCC,OAAOO,QAAQP,SAAS;EACxBC,QAAQ;EACRC,OAAO;EACR;;AAGH,SAASa,UAAgB;AACvBV,WAAU8B,SAAQjB,YAAW;AAC3B,MAAI;AACFA,WAAQd,aAAa;WACdgB,KAAK;AACZC,WAAQC,KAAK,4CAA4CF,IAAI;;GAE/D"}