@@ -19,6 +19,7 @@ import Core.Types.Basic (RequestRefId, TokenId)
19
19
import Core.Types.Tx (TxHash , WithTxHash (WithTxHash ))
20
20
import Core.Types.Wallet (Wallet (.. ))
21
21
import Data.Functor ((<&>) )
22
+ import Data.Functor.Identity (Identity (.. ))
22
23
import Data.List (find )
23
24
import Lib.JSON.Canonical.Extra (object , (.=) )
24
25
import MPFS.API
@@ -30,6 +31,7 @@ import Oracle.Types
30
31
, RequestZoo
31
32
, Token (.. )
32
33
, TokenState (.. )
34
+ , fmapMToken
33
35
, requestZooRefId
34
36
)
35
37
import Oracle.Validate.Request
@@ -38,6 +40,7 @@ import Oracle.Validate.Request
38
40
import Oracle.Validate.Types
39
41
( AValidationResult (.. )
40
42
, Validate
43
+ , ValidationResult
41
44
, liftMaybe
42
45
, mapFailure
43
46
, notValidated
@@ -47,7 +50,6 @@ import Oracle.Validate.Types
47
50
import Submitting (Submission (.. ))
48
51
import Text.JSON.Canonical
49
52
( FromJSON (fromJSON )
50
- , JSValue (.. )
51
53
, ToJSON (.. )
52
54
)
53
55
@@ -101,8 +103,18 @@ instance Monad m => ToJSON m TokenUpdateFailure where
101
103
TokenUpdateNotRequestedFromTokenOwner ->
102
104
toJSON (" Token update not requested from token owner" :: String )
103
105
106
+ newtype TokenInfoFailure = TokenInfoTokenNotParsable TokenId
107
+ deriving (Show , Eq )
108
+
109
+ instance Monad m => ToJSON m TokenInfoFailure where
110
+ toJSON (TokenInfoTokenNotParsable tk) =
111
+ object [" tokenNotParsable" .= tk]
112
+
104
113
data TokenCommand a where
105
- GetToken :: TokenId -> TokenCommand JSValue
114
+ GetToken
115
+ :: TokenId
116
+ -> TokenCommand
117
+ (AValidationResult TokenInfoFailure (Token WithValidation ))
106
118
BootToken :: Wallet -> TokenCommand (WithTxHash TokenId )
107
119
UpdateToken
108
120
:: TokenId
@@ -130,14 +142,40 @@ promoteFailure req =
130
142
. TokenUpdateRequestValidationFailure
131
143
)
132
144
145
+ data WithValidation x = WithValidation
146
+ { validation :: ValidationResult RequestValidationFailure
147
+ , request :: x
148
+ }
149
+ deriving (Show , Eq )
150
+
151
+ instance (Monad m , ToJSON m x ) => ToJSON m (WithValidation x ) where
152
+ toJSON (WithValidation mvalidation request) =
153
+ object
154
+ [ " validation" .= mvalidation
155
+ , " request" .= request
156
+ ]
157
+
133
158
tokenCmdCore
134
159
:: (MonadIO m , MonadMask m )
135
160
=> TokenCommand a
136
161
-> WithContext m a
137
162
tokenCmdCore command = do
138
163
mpfs <- askMpfs
139
164
case command of
140
- GetToken tk -> lift $ mpfsGetToken mpfs tk
165
+ GetToken tk -> do
166
+ validation <- askValidation $ Just tk
167
+ mconfig <- askConfig tk
168
+ lift $ runValidate $ do
169
+ mpendings <- lift $ fromJSON <$> mpfsGetToken mpfs tk
170
+ token <- liftMaybe (TokenInfoTokenNotParsable tk) mpendings
171
+ let oracle = tokenOwner $ tokenState token
172
+ f (Identity req) = do
173
+ r <-
174
+ runValidate
175
+ $ validateRequest oracle mconfig validation req
176
+ pure $ WithValidation r req
177
+ lift $ fmapMToken f token
178
+ -- validateRequest oracle mconfig validation
141
179
UpdateToken tk wallet wanted -> do
142
180
Submission submit <- ($ wallet) <$> askSubmit
143
181
validation <- askValidation $ Just tk
@@ -156,10 +194,10 @@ tokenCmdCore command = do
156
194
$ sequenceValidate
157
195
$ wanted
158
196
<&> \ req -> do
159
- tokenRequest <-
197
+ Identity tokenRequest <-
160
198
liftMaybe
161
199
(TokenUpdateRequestValidation req TokenUpdateRequestNotFound )
162
- $ find ((== req) . requestZooRefId) requests
200
+ $ find ((== req) . requestZooRefId . runIdentity ) requests
163
201
promoteFailure tokenRequest
164
202
$ validateRequest oracle mconfig validation tokenRequest
165
203
WithTxHash txHash _ <- lift
0 commit comments