-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathIPFS.hs
More file actions
70 lines (55 loc) · 2.14 KB
/
IPFS.hs
File metadata and controls
70 lines (55 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
-- | IPFS client functions
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleContexts #-}
module Blockfrost.Client.IPFS
( ipfsAdd
, ipfsGateway
, ipfsGetPin
, ipfsListPins
, ipfsListPins'
, ipfsPin
, ipfsRemovePin
) where
import Blockfrost.API
import Blockfrost.Client.Types
import Blockfrost.Types
import Data.ByteString.Lazy (ByteString)
import Data.Text (Text)
import qualified Data.Text
import qualified System.FilePath
ipfsAdd_ :: MonadBlockfrost m => Project -> (ByteString, Form) -> m IPFSAdd
ipfsAdd_ = _add . ipfsClient
-- | Add a file or directory to IPFS
ipfsAdd :: MonadBlockfrost m => FilePath -> m IPFSAdd
ipfsAdd fp = do
let fn = Data.Text.pack $ System.FilePath.takeBaseName fp
go (\proj -> ipfsAdd_ proj ("suchBoundary", (Form fn fp)))
ipfsGateway_ :: MonadBlockfrost m => Project -> Text -> m IPFSData
ipfsGateway_ = _gateway . ipfsClient
-- | Fetch file via API
ipfsGateway :: MonadBlockfrost m => Text -> m IPFSData
ipfsGateway x = go (`ipfsGateway_` x)
ipfsPin_ :: MonadBlockfrost m => Project -> Text -> m IPFSPinChange
ipfsPin_ = _pin . ipfsClient
-- | Pin an object
ipfsPin :: MonadBlockfrost m => Text -> m IPFSPinChange
ipfsPin x = go (`ipfsPin_` x)
ipfsListPins_ :: MonadBlockfrost m => Project -> Paged -> SortOrder -> m [IPFSPin]
ipfsListPins_ = _listPins . ipfsClient
-- | List objects pinned to local storage
-- Allows custom paging and ordering using @Paged@ and @SortOrder@.
ipfsListPins' :: MonadBlockfrost m => Paged -> SortOrder -> m [IPFSPin]
ipfsListPins' pg s = go (\p -> ipfsListPins_ p pg s)
-- | List objects pinned to local storage
ipfsListPins :: MonadBlockfrost m => m [IPFSPin]
ipfsListPins = ipfsListPins' def def
ipfsGetPin_ :: MonadBlockfrost m => Project -> Text -> m IPFSPin
ipfsGetPin_ = _getPin . ipfsClient
-- | Get pinned object details
ipfsGetPin :: MonadBlockfrost m => Text -> m IPFSPin
ipfsGetPin x = go (`ipfsGetPin_` x)
ipfsRemovePin_ :: MonadBlockfrost m => Project -> Text -> m IPFSPinChange
ipfsRemovePin_ = _removePin . ipfsClient
-- | Remove pinned object from local storage
ipfsRemovePin :: MonadBlockfrost m => Text -> m IPFSPinChange
ipfsRemovePin x = go (`ipfsRemovePin_` x)