{"version":3,"file":"utils.mjs","sources":["../../../../src/clients/feed/utils.ts"],"sourcesContent":["import type {\n  FeedClientOptions,\n  FeedItem,\n  FetchFeedOptionsForRequest,\n} from \"./interfaces\";\n\nexport function deduplicateItems(items: FeedItem[]): FeedItem[] {\n  const seen: Record<string, boolean> = {};\n  const values: FeedItem[] = [];\n\n  return items.reduce((acc, item) => {\n    if (seen[item.id]) {\n      return acc;\n    }\n\n    seen[item.id] = true;\n    return [...acc, item];\n  }, values);\n}\n\nexport function sortItems(items: FeedItem[]) {\n  return items.sort((a, b) => {\n    return (\n      new Date(b.inserted_at).getTime() - new Date(a.inserted_at).getTime()\n    );\n  });\n}\n\ntype DateRangeParams = Pick<\n  FetchFeedOptionsForRequest,\n  \"inserted_at.gte\" | \"inserted_at.lte\" | \"inserted_at.gt\" | \"inserted_at.lt\"\n>;\n\nexport function mergeDateRangeParams(options: FeedClientOptions) {\n  const { inserted_at_date_range, ...rest } = options;\n\n  if (!inserted_at_date_range) {\n    return rest;\n  }\n\n  const dateRangeParams: DateRangeParams = {};\n\n  // Determine which operators to use based on the inclusive flag\n  const isInclusive = inserted_at_date_range.inclusive ?? false;\n\n  // For start date: use gte if inclusive, gt if not\n  if (inserted_at_date_range.start) {\n    const startOperator = isInclusive ? \"inserted_at.gte\" : \"inserted_at.gt\";\n    dateRangeParams[startOperator] = inserted_at_date_range.start;\n  }\n\n  // For end date: use lte if inclusive, lt if not\n  if (inserted_at_date_range.end) {\n    const endOperator = isInclusive ? \"inserted_at.lte\" : \"inserted_at.lt\";\n    dateRangeParams[endOperator] = inserted_at_date_range.end;\n  }\n\n  return { ...rest, ...dateRangeParams };\n}\n\n// If the trigger data is an object, stringify it to conform to API expectations\n// https://docs.knock.app/reference#get-feed\n// We also want to be careful to check for string values already,\n// because this was a bug (KNO-7843) and customers had to manually stringify their trigger data\nexport function getFormattedTriggerData(options: FeedClientOptions) {\n  // If the trigger data is an object, stringify it to conform to API expectations\n  if (typeof options?.trigger_data === \"object\") {\n    return JSON.stringify(options.trigger_data);\n  }\n\n  // For when the trigger data is already formatted as a string by the user\n  if (typeof options?.trigger_data === \"string\") {\n    return options.trigger_data;\n  }\n\n  return undefined;\n}\n"],"names":["deduplicateItems","items","seen","values","acc","item","sortItems","a","b","mergeDateRangeParams","options","inserted_at_date_range","rest","dateRangeParams","isInclusive","startOperator","endOperator","getFormattedTriggerData"],"mappings":"AAMO,SAASA,EAAiBC,GAA+B;AAC9D,QAAMC,IAAgC,CAAC,GACjCC,IAAqB,CAAC;AAE5B,SAAOF,EAAM,OAAO,CAACG,GAAKC,MACpBH,EAAKG,EAAK,EAAE,IACPD,KAGJF,EAAAG,EAAK,EAAE,IAAI,IACT,CAAC,GAAGD,GAAKC,CAAI,IACnBF,CAAM;AACX;AAEO,SAASG,EAAUL,GAAmB;AAC3C,SAAOA,EAAM,KAAK,CAACM,GAAGC,MAElB,IAAI,KAAKA,EAAE,WAAW,EAAE,YAAY,IAAI,KAAKD,EAAE,WAAW,EAAE,QAAQ,CAEvE;AACH;AAOO,SAASE,EAAqBC,GAA4B;AAC/D,QAAM,EAAE,wBAAAC,GAAwB,GAAGC,EAAA,IAASF;AAE5C,MAAI,CAACC;AACI,WAAAC;AAGT,QAAMC,IAAmC,CAAC,GAGpCC,IAAcH,EAAuB,aAAa;AAGxD,MAAIA,EAAuB,OAAO;AAC1B,UAAAI,IAAgBD,IAAc,oBAAoB;AACxC,IAAAD,EAAAE,CAAa,IAAIJ,EAAuB;AAAA,EAAA;AAI1D,MAAIA,EAAuB,KAAK;AACxB,UAAAK,IAAcF,IAAc,oBAAoB;AACtC,IAAAD,EAAAG,CAAW,IAAIL,EAAuB;AAAA,EAAA;AAGxD,SAAO,EAAE,GAAGC,GAAM,GAAGC,EAAgB;AACvC;AAMO,SAASI,EAAwBP,GAA4B;AAE9D,MAAA,QAAOA,KAAA,gBAAAA,EAAS,iBAAiB;AAC5B,WAAA,KAAK,UAAUA,EAAQ,YAAY;AAIxC,MAAA,QAAOA,KAAA,gBAAAA,EAAS,iBAAiB;AACnC,WAAOA,EAAQ;AAInB;"}