Why negative? Wouldn't it make more sense to make timeout === 0 the "indefinite" case and forbid timeout < 0?