 (defn session-tags-key [session-id]
   (format session-tags-key-template session-id))
 
-(defn ^:private is-ip? [s]
+(defn is-ip? [s]
   (re-matches #"(?:\d{1,3}\.){3}\d{1,3}" s))
 
-(def ^:private Node
+(def Node
   "A schema for a node spec."
   {(s/optional-key :url)   s/Str
    (s/optional-key :id)    s/Str
    (s/optional-key :tags) [s/Str]})
 
-(def ^:private Session
+(def Session
   "A schema for a session spec."
   {:id                            s/Str
    (s/optional-key :tags)        [s/Str]

  (let [u (if (string? url) (uri/uri url) url)]
    (assoc u :host (resolve-host (uri/host u)))))

(defn ^:private matches-requirements [session-model requirements]
  (let [exact-match-keys [:browser-name :reserved]
        resolved-nodes (map (comp str host-resolved-url)
                            (filter identity

    (s/pair :and          "type" [Requirement] "requirements")
    (s/pair :or           "type" [Requirement] "requirements")))

(defn maybe-bigdec [x]
  (try (bigdec x) (catch NumberFormatException e nil)))

(def DecString
  "A schema for a string that is convertable to bigdec."
  (s/pred #(boolean (maybe-bigdec %)) 'decimal-string))

(def Score
  "A schema for a session score rule."
  {:weight  DecString
   :require Requirement})
