            (when @stoped? (throw (ex-info "store already terminated" {})))
            (rx/push! input-sb event))
 
+         (-input-stream [_]
+           (->> input-sb
+                (rx/map identity)
+                (rx/share)))
+
          Object
          (close [_]
            (vreset! stoped? true)

  ([store event & more]
   {:pre [(satisfies? Store store)]}
   (run! (partial -push store) (cons event more))))

;; An abstraction used for send data to the store.

(defprotocol Store
  (^:private -push [_ event] "Push event into the stream.")
  (^:private -input-stream [_] "Returns the internal input stream/subject."))

;; --- Predicates

