use a lazy builder since moose we can't rely on the order in which moose initializes internal members

and if endpoints is initialized before urls (which is a parameter passed to the constructor) we might
end up dereferencing an null pointer