{"record":{"id":"5c06eba2e476022f","repo":"actualbudget/actual","slug":"invalid-maxdistance-must-be-a-finite-positive-num","errorCode":null,"errorMessage":"Invalid maxDistance: must be a finite positive number greater than 0","messagePattern":"Invalid maxDistance: must be a finite positive number greater than 0","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/loot-core/src/server/payees/app.ts","lineNumber":245,"sourceCode":"  latitude: number;\n  longitude: number;\n  maxDistance?: number;\n}): Promise<NearbyPayeeEntity[]> {\n  if (\n    !Number.isFinite(latitude) ||\n    !Number.isFinite(longitude) ||\n    latitude < -90 ||\n    latitude > 90 ||\n    longitude < -180 ||\n    longitude > 180\n  ) {\n    throw new Error(\n      'Invalid coordinates: latitude must be between -90 and 90, longitude must be between -180 and 180',\n    );\n  }\n\n  if (!Number.isFinite(maxDistance) || maxDistance <= 0) {\n    throw new Error(\n      'Invalid maxDistance: must be a finite positive number greater than 0',\n    );\n  }\n\n  // Get the closest location for each payee within maxDistance using window functions\n  const query = `\n    WITH payee_distances AS (\n      SELECT\n        pl.id as location_id,\n        pl.payee_id,\n        pl.latitude,\n        pl.longitude,\n        pl.created_at,\n        p.id,\n        p.name,\n        p.transfer_acct,\n        p.favorite,\n        p.learn_categories,","sourceCodeStart":227,"sourceCodeEnd":263,"githubUrl":"https://github.com/actualbudget/actual/blob/d4334cb6e6123f4d3bcea1ad6166608884c7e658/packages/loot-core/src/server/payees/app.ts#L227-L263","documentation":"Error thrown by getNearbyPayees when maxDistance is not a finite number greater than 0. The proximity query needs a positive search radius to bound its results.","triggerScenarios":"Calling getNearbyPayees with maxDistance = 0, negative values, NaN, Infinity, or undefined.","commonSituations":"UI slider defaulting to 0, distance in wrong units causing negative values after conversion, config value missing so variable is undefined, user clearing an input field.","solutions":["Pass a finite positive maxDistance (e.g. distance in meters/km per the API's unit)","Default the value when undefined: maxDistance ?? 1000","Guard against 0/negative values from UI inputs before calling","Check unit conversion (km to m, miles to m) for sign and scale errors"],"exampleFix":"// before\nawait app.getNearbyPayees(lat, lon, radiusInput); // may be '' or 0\n// after\nconst dist = Number(radiusInput);\nif (Number.isFinite(dist) && dist > 0) {\n  await app.getNearbyPayees(lat, lon, dist);\n}","handlingStrategy":"validation","validationCode":"const d = Number(userDistance);\nif (Number.isFinite(d) && d > 0) await app.getNearbyPayees(lat, lon, d);","typeGuard":null,"tryCatchPattern":"try {\n  return await app.getNearbyPayees(lat, lon, dist);\n} catch (e) {\n  if (String(e.message).includes('maxDistance')) return await app.getNearbyPayees(lat, lon, 1000);\n  throw e;\n}","preventionTips":["Clamp distance inputs to a positive range","Set explicit defaults for optional params","Verify unit conversions","Treat empty inputs as undefined, not 0"],"tags":["validation","parameters","payees"],"backgroundTag":"invalid-parameter-value","analyzedSha":"d4334cb6e6123f4d3bcea1ad6166608884c7e658","analyzedAt":"2026-08-29T01:02:11.213Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}