|
2 | 2 | (:require [fluree.db.storage :as storage]
|
3 | 3 | [fluree.db.index :as index]
|
4 | 4 | [fluree.db.util.context :as ctx-util]
|
| 5 | + [fluree.db.util.core :as util] |
5 | 6 | #?(:clj [fluree.db.full-text :as full-text])
|
6 | 7 | [fluree.db.util.log :as log :include-macros true]
|
7 | 8 | [fluree.db.conn.proto :as conn-proto]
|
|
12 | 13 | [fluree.db.serde.json :refer [json-serde]]
|
13 | 14 | [fluree.db.method.ipfs.keys :as ipfs-keys]
|
14 | 15 | [fluree.db.indexer.default :as idx-default]
|
| 16 | + [fluree.db.nameservice.ipns :as ns-ipns] |
15 | 17 | [fluree.db.conn.cache :as conn-cache])
|
16 | 18 | #?(:clj (:import (java.io Writer))))
|
17 | 19 |
|
|
26 | 28 |
|
27 | 29 | (defrecord IPFSConnection [id state ledger-defaults lru-cache-atom
|
28 | 30 | serializer parallelism msg-in-ch msg-out-ch
|
29 |
| - ipfs-endpoint] |
| 31 | + nameservices ipfs-endpoint] |
30 | 32 |
|
31 | 33 | conn-proto/iStorage
|
32 | 34 | (-c-read [_ commit-key]
|
|
56 | 58 | ;; ;; TODO - register/submit event
|
57 | 59 | ;; (log/warn "-msg-out: " msg)
|
58 | 60 | ;; :TODO))
|
| 61 | + (-nameservices [_] nameservices) |
59 | 62 | (-state [_] @state)
|
60 | 63 | (-state [_ ledger] (get @state ledger))
|
61 | 64 |
|
|
92 | 95 | (pr (conn-core/printer-map conn)))))
|
93 | 96 |
|
94 | 97 | (defn ledger-defaults
|
95 |
| - "Normalizes ledger defaults settings" |
96 |
| - [ipfs-endpoint {:keys [ipns context context-type did indexer] :as _defaults}] |
97 |
| - (go-try |
98 |
| - (let [ipns-default-key (or (:key ipns) "self") |
99 |
| - ipns-default-address (<? (ipfs-keys/address ipfs-endpoint ipns-default-key)) |
100 |
| - new-indexer-fn (cond |
101 |
| - (fn? indexer) |
102 |
| - indexer |
103 |
| - |
104 |
| - (or (map? indexer) (nil? indexer)) |
105 |
| - (fn [opts] |
106 |
| - (idx-default/create (merge indexer opts))) |
107 |
| - |
108 |
| - :else |
109 |
| - (throw (ex-info (str "Expected an indexer constructor fn or " |
110 |
| - "default indexer options map. Provided: " indexer) |
111 |
| - {:status 400 :error :db/invalid-ipfs-connection})))] |
112 |
| - (when-not ipns-default-address |
113 |
| - (throw (ex-info (str "IPNS publishing appears to have an issue. No corresponding ipns address found for key: " |
114 |
| - ipns-default-key) |
115 |
| - {:status 400 :error :db/ipfs-keys}))) |
116 |
| - {:ipns {:key ipns-default-key |
117 |
| - :address ipns-default-address} |
118 |
| - :did did |
119 |
| - :indexer new-indexer-fn}))) |
| 98 | + [{:keys [did indexer]}] |
| 99 | + {:did did |
| 100 | + :indexer (cond |
| 101 | + (fn? indexer) |
| 102 | + indexer |
| 103 | + |
| 104 | + (or (map? indexer) (nil? indexer)) |
| 105 | + (fn [opts] |
| 106 | + (idx-default/create (merge indexer opts))) |
| 107 | + |
| 108 | + :else |
| 109 | + (throw (ex-info (str "Expected an indexer constructor fn or " |
| 110 | + "default indexer options map. Provided: " indexer) |
| 111 | + {:status 400 :error :db/invalid-file-connection})))}) |
| 112 | + |
| 113 | +(defn default-ipns-nameservice |
| 114 | + [ipfs-endpoint ipns-profile] |
| 115 | + (ns-ipns/initialize ipfs-endpoint ipns-profile)) |
120 | 116 |
|
121 | 117 |
|
122 | 118 | (defn connect
|
123 | 119 | "Creates a new IPFS connection."
|
124 |
| - [{:keys [server parallelism lru-cache-atom memory defaults serializer] |
| 120 | + [{:keys [server parallelism lru-cache-atom memory ipns defaults serializer nameservices] |
125 | 121 | :or {server "http://127.0.0.1:5001/"
|
126 |
| - serializer (json-serde)}}] |
| 122 | + serializer (json-serde) |
| 123 | + ipns "self"}}] |
127 | 124 | (go-try
|
128 | 125 | (let [ipfs-endpoint (or server "http://127.0.0.1:5001/") ;; TODO - validate endpoint looks like a good URL and ends in a '/' or add it
|
129 |
| - ledger-defaults (<? (ledger-defaults ipfs-endpoint defaults)) |
| 126 | + ledger-defaults (ledger-defaults defaults) |
130 | 127 | memory (or memory 1000000) ;; default 1MB memory
|
131 | 128 | conn-id (str (random-uuid))
|
132 | 129 | state (conn-core/blank-state)
|
133 |
| - |
| 130 | + nameservices* (util/sequential |
| 131 | + (or nameservices (<? (default-ipns-nameservice ipfs-endpoint ipns)))) |
134 | 132 | cache-size (conn-cache/memory->cache-size memory)
|
135 | 133 | lru-cache-atom (or lru-cache-atom (atom (conn-cache/create-lru-cache cache-size)))]
|
136 | 134 | ;; TODO - need to set up monitor loops for async chans
|
|
142 | 140 | :msg-in-ch (chan)
|
143 | 141 | :msg-out-ch (chan)
|
144 | 142 | :state state
|
145 |
| - :lru-cache-atom lru-cache-atom})))) |
| 143 | + :lru-cache-atom lru-cache-atom |
| 144 | + :nameservices nameservices*})))) |
0 commit comments