{"record":{"id":"082a27ce64c41b81","repo":"rohitg00/agentmemory","slug":"invalid-datefrom-filter-datefrom","errorCode":null,"errorMessage":"Invalid dateFrom: ${filter.dateFrom}","messagePattern":"Invalid dateFrom: (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/functions/audit.ts","lineNumber":100,"sourceCode":"  filter?: {\n    operation?: AuditEntry[\"operation\"];\n    dateFrom?: string;\n    dateTo?: string;\n    limit?: number;\n  },\n): Promise<AuditEntry[]> {\n  const all = await kv.list<AuditEntry>(KV.audit);\n  let entries = [...all].sort(\n    (a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime(),\n  );\n\n  if (filter?.operation) {\n    entries = entries.filter((e) => e.operation === filter.operation);\n  }\n  if (filter?.dateFrom) {\n    const from = new Date(filter.dateFrom).getTime();\n    if (Number.isNaN(from)) {\n      throw new Error(`Invalid dateFrom: ${filter.dateFrom}`);\n    }\n    entries = entries.filter((e) => new Date(e.timestamp).getTime() >= from);\n  }\n  if (filter?.dateTo) {\n    const to = new Date(filter.dateTo).getTime();\n    if (Number.isNaN(to)) {\n      throw new Error(`Invalid dateTo: ${filter.dateTo}`);\n    }\n    entries = entries.filter((e) => new Date(e.timestamp).getTime() <= to);\n  }\n\n  return entries.slice(0, filter?.limit || 100);\n}\n","sourceCodeStart":82,"sourceCodeEnd":114,"githubUrl":"https://github.com/rohitg00/agentmemory/blob/e04ba88819c365c9acf9d6661ea802143e728bd6/src/functions/audit.ts#L82-L114","documentation":"queryAudit filters audit entries by an optional dateFrom bound. The value is parsed with new Date(); if parsing yields NaN the filter would silently match nothing, so the library throws this error instead. It is an input-validation error for the audit query API (MCP memory_audit tool / mem::audit function).","triggerScenarios":"Calling queryAudit (via entries or entriesBefore, or the audit REST/MCP entry points) with filter.dateFrom set to a string that Date cannot parse, e.g. '31/02/2024', 'yesterday', or an empty string.","commonSituations":"Passing locale-formatted dates (DD/MM/YYYY) instead of ISO 8601; passing a JS Date object serialized poorly; user-supplied --since CLI values forwarded unvalidated.","solutions":["Pass dateFrom as an ISO 8601 string, e.g. '2024-01-15T00:00:00.000Z'.","Validate with new Date(value).toString() !== 'Invalid Date' before calling.","If accepting user input, normalize timezone-less dates explicitly.","Check for whitespace/encoding corruption in the value being forwarded."],"exampleFix":"// before\nawait trigger({ function_id: 'mem::audit', payload: { dateFrom: '15/01/2024' } });\n// after\nawait trigger({ function_id: 'mem::audit', payload: { dateFrom: new Date('2024-01-15').toISOString() } });","handlingStrategy":"validation","validationCode":"function assertIsoDate(v: string, label: string): string {\n  const t = new Date(v).getTime();\n  if (Number.isNaN(t)) throw new Error(`${label} is not a valid date: ${v}`);\n  return new Date(t).toISOString();\n}\nconst dateFrom = assertIsoDate(input.dateFrom, 'dateFrom');","typeGuard":"function isParseableDate(v: unknown): v is string {\n  return typeof v === 'string' && !Number.isNaN(new Date(v).getTime());\n}","tryCatchPattern":"try {\n  return await queryAudit({ dateFrom, dateTo });\n} catch (e) {\n  if (String(e.message).startsWith('Invalid date')) return { entries: [], hint: 'use ISO 8601 dates' };\n  throw e;\n}","preventionTips":["Always emit dates with new Date(...).toISOString().","Validate user-supplied dates at the CLI/UI boundary.","Avoid locale-formatted date strings in API payloads.","Unit-test date filter inputs in your integration layer."],"tags":["validation","audit","date-parsing"],"backgroundTag":"invalid-date-format","analyzedSha":"e04ba88819c365c9acf9d6661ea802143e728bd6","analyzedAt":"2026-08-30T01:07:40.754Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}