{"version":3,"sources":["../src/notifications/delivery-policy.ts"],"names":[],"mappings":";;;AA2BA,IAAM,iBAAA,GAAoB,CAAC,QAAA,KAA+E;AACxG,EAAA,IAAI,OAAO,QAAA,KAAa,QAAA,EAAU,OAAO,EAAE,QAAQ,QAAA,EAAS;AAC5D,EAAA,OAAO,QAAA;AACT,CAAA;AAEO,SAAS,oCACd,KAAA,EAC8B;AAC9B,EAAA,IAAI,KAAA,CAAM,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AACtC,IAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,QAAA,EAAS;AAAA,EAC/C;AAEA,EAAA,IAAI,KAAA,CAAM,MAAA,CAAO,QAAA,KAAa,MAAA,EAAQ;AACpC,IAAA,OAAO,MAAM,WAAA,KAAgB,QAAA,GACzB,EAAE,MAAA,EAAQ,WAAA,EAAa,WAAW,KAAA,CAAM,GAAA,EAAK,WAAW,KAAA,CAAM,GAAA,EAAK,QAAQ,+BAAA,EAAgC,GAC3G,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAQ,WAAA,EAAY;AAAA,EAC/C;AAEA,EAAA,IAAI,KAAA,CAAM,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AACtC,IAAA,OAAO,MAAM,WAAA,KAAgB,QAAA,GACzB,EAAE,MAAA,EAAQ,aAAa,SAAA,EAAW,KAAA,CAAM,GAAA,EAAK,MAAA,EAAQ,wBAAuB,GAC5E,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAQ,aAAA,EAAc;AAAA,EACjD;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,WAAA;AAAA,IACR,WAAW,KAAA,CAAM,GAAA;AAAA,IACjB,MAAA,EAAQ,KAAA,CAAM,WAAA,KAAgB,QAAA,GAAW,sBAAA,GAAyB;AAAA,GACpE;AACF;AAEA,eAAsB,mCAAA,CAAoC;AAAA,EACxD,MAAA;AAAA,EACA,GAAG;AACL,CAAA,EAE0C;AACxC,EAAA,MAAM,MAAA,GAAS,MAAM,MAAA,EAAQ,MAAA,GAAS,KAAK,CAAA;AAC3C,EAAA,IAAI,MAAA,EAAQ,OAAO,iBAAA,CAAkB,MAAM,CAAA;AAE3C,EAAA,MAAM,cAAA,GAAiB,MAAA,EAAQ,OAAA,GAAU,KAAA,CAAM,OAAO,MAAM,CAAA;AAC5D,EAAA,IAAI,cAAA,EAAgB,OAAO,iBAAA,CAAkB,cAAc,CAAA;AAE3D,EAAA,MAAM,gBAAA,GAAmB,MAAA,EAAQ,UAAA,GAAa,KAAA,CAAM,OAAO,QAAQ,CAAA;AACnE,EAAA,IAAI,gBAAA,EAAkB,OAAO,iBAAA,CAAkB,gBAAgB,CAAA;AAE/D,EAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,OAAO,iBAAA,CAAkB,OAAO,OAAO,CAAA;AAE5D,EAAA,OAAO,oCAAoC,KAAK,CAAA;AAClD","file":"chunk-OWZVEVJN.cjs","sourcesContent":["import type {\n  NotificationDeliveryAction,\n  NotificationDeliveryDecision,\n  NotificationDeliveryThreadState,\n  NotificationPriority,\n  NotificationRecord,\n} from './types';\n\nexport type NotificationDeliveryPolicyDecision = NotificationDeliveryAction | NotificationDeliveryDecision;\n\nexport type NotificationDeliveryPolicyInput = {\n  record: NotificationRecord;\n  threadState: NotificationDeliveryThreadState;\n  now: Date;\n};\n\nexport type NotificationDeliveryPolicyDecider = (\n  input: NotificationDeliveryPolicyInput,\n) => NotificationDeliveryPolicyDecision | undefined | Promise<NotificationDeliveryPolicyDecision | undefined>;\n\nexport type NotificationDeliveryPolicyConfig = {\n  default?: NotificationDeliveryPolicyDecision;\n  priorities?: Partial<Record<NotificationPriority, NotificationDeliveryPolicyDecision>>;\n  sources?: Record<string, NotificationDeliveryPolicyDecision>;\n  decide?: NotificationDeliveryPolicyDecider;\n};\n\nconst normalizeDecision = (decision: NotificationDeliveryPolicyDecision): NotificationDeliveryDecision => {\n  if (typeof decision === 'string') return { action: decision };\n  return decision;\n};\n\nexport function defaultNotificationDeliveryDecision(\n  input: NotificationDeliveryPolicyInput,\n): NotificationDeliveryDecision {\n  if (input.record.priority === 'urgent') {\n    return { action: 'deliver', reason: 'urgent' };\n  }\n\n  if (input.record.priority === 'high') {\n    return input.threadState === 'active'\n      ? { action: 'summarize', summaryAt: input.now, deliverAt: input.now, reason: 'active-high-summary-then-full' }\n      : { action: 'deliver', reason: 'idle-high' };\n  }\n\n  if (input.record.priority === 'medium') {\n    return input.threadState === 'active'\n      ? { action: 'summarize', summaryAt: input.now, reason: 'active-batch-summary' }\n      : { action: 'deliver', reason: 'idle-medium' };\n  }\n\n  return {\n    action: 'summarize',\n    summaryAt: input.now,\n    reason: input.threadState === 'active' ? 'active-batch-summary' : 'idle-low-summary',\n  };\n}\n\nexport async function resolveNotificationDeliveryDecision({\n  config,\n  ...input\n}: NotificationDeliveryPolicyInput & {\n  config?: NotificationDeliveryPolicyConfig;\n}): Promise<NotificationDeliveryDecision> {\n  const custom = await config?.decide?.(input);\n  if (custom) return normalizeDecision(custom);\n\n  const sourceDecision = config?.sources?.[input.record.source];\n  if (sourceDecision) return normalizeDecision(sourceDecision);\n\n  const priorityDecision = config?.priorities?.[input.record.priority];\n  if (priorityDecision) return normalizeDecision(priorityDecision);\n\n  if (config?.default) return normalizeDecision(config.default);\n\n  return defaultNotificationDeliveryDecision(input);\n}\n"]}