Rename CredUpdate -> VaultUpdate
parent
e90f823000
commit
10903b0e05
|
@ -14,18 +14,18 @@ submodule, this can lead to indentation hell.
|
|||
This module aims to allow for simple task chaining without adding too much complexity
|
||||
if you wish to pass on values.
|
||||
|
||||
The model is like a snake: _____
|
||||
/ o \
|
||||
/-|------------ | ------- | ------------- | -------- | |\/\/
|
||||
< | accessToken | baseUrl | transactionId | API call | |------< Final API call
|
||||
\-|------------ | ------- | ------------- | -------- | |/\/\
|
||||
\-----/
|
||||
The model is like a snake: \_\_\_\_\_
|
||||
/ o \\
|
||||
/-|------------ | ------- | ------------- | -------- | |//
|
||||
< | accessToken | baseUrl | transactionId | API call | |------< Final API call
|
||||
-|------------ | ------- | ------------- | -------- | |//\\
|
||||
-----/
|
||||
|
||||
(You're not allowed to judge my ASCII art skills unless you submit a PR with a
|
||||
superior ASCII snake model.)
|
||||
|
||||
Every task will add another value to an extensible record, which can be used
|
||||
by later tasks in the chain. Additionally, every subtask can leave a `CredUpdate`
|
||||
by later tasks in the chain. Additionally, every subtask can leave a `VaultUpdate`
|
||||
type as a message to the Credentials to update certain information.
|
||||
|
||||
-}
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
module Internal.Api.GetEvent.Main exposing (..)
|
||||
|
||||
import Internal.Api.GetEvent.Api as Api
|
||||
import Internal.Tools.Context as Context exposing (Context, VBA)
|
||||
import Internal.Tools.Exceptions as X
|
||||
import Internal.Tools.VersionControl as VC
|
||||
import Task exposing (Task)
|
||||
|
||||
|
||||
getEvent : List String -> EventInput -> Task X.Error EventOutput
|
||||
getEvent versions =
|
||||
getEvent : Context (VBA a) -> EventInput -> Task X.Error EventOutput
|
||||
getEvent context input =
|
||||
VC.withBottomLayer
|
||||
{ current = Api.getEventInputV1
|
||||
, version = "r0.5.0"
|
||||
|
@ -19,8 +20,10 @@ getEvent versions =
|
|||
|> VC.sameForVersion "v1.3"
|
||||
|> VC.sameForVersion "v1.4"
|
||||
|> VC.sameForVersion "v1.5"
|
||||
|> VC.mostRecentFromVersionList versions
|
||||
|> Maybe.withDefault (always <| Task.fail X.UnsupportedSpecVersion)
|
||||
|> VC.mostRecentFromVersionList (Context.getVersions context)
|
||||
|> Maybe.withDefault (always <| always <| Task.fail X.UnsupportedSpecVersion)
|
||||
|> (|>) input
|
||||
|> (|>) context
|
||||
|
||||
|
||||
type alias EventOutput =
|
||||
|
|
|
@ -18,7 +18,9 @@ sync context input =
|
|||
|> VC.addMiddleLayer
|
||||
{ current = Api.syncV2
|
||||
, downcast = identity
|
||||
, upcast = Task.map U2.upcastSync
|
||||
, upcast =
|
||||
\f c ->
|
||||
Task.map U2.upcastSync (f c)
|
||||
, version = "v1.4"
|
||||
}
|
||||
|> VC.sameForVersion "v1.5"
|
||||
|
|
|
@ -5,8 +5,13 @@ module Internal.Api.Task exposing (..)
|
|||
|
||||
import Hash
|
||||
import Internal.Api.Chain as Chain
|
||||
import Internal.Api.CredUpdate as C
|
||||
import Internal.Api.Credentials exposing (Credentials)
|
||||
import Internal.Api.GetEvent.Main exposing (EventInput)
|
||||
import Internal.Api.Invite.Main exposing (InviteInput)
|
||||
import Internal.Api.JoinedMembers.Main exposing (JoinedMembersInput)
|
||||
import Internal.Api.SendStateKey.Main exposing (SendStateKeyInput)
|
||||
import Internal.Api.Sync.Main exposing (SyncInput)
|
||||
import Internal.Api.VaultUpdate as C
|
||||
import Json.Encode as E
|
||||
|
||||
|
||||
|
@ -14,21 +19,21 @@ type alias FutureTask =
|
|||
C.FutureTask
|
||||
|
||||
|
||||
getEvent : C.GetEventInput -> Credentials -> FutureTask
|
||||
getEvent : EventInput -> Credentials -> FutureTask
|
||||
getEvent data cred =
|
||||
C.makeVBA cred
|
||||
|> Chain.andThen (C.getEvent data)
|
||||
|> C.toTask
|
||||
|
||||
|
||||
invite : C.InviteInput -> Credentials -> FutureTask
|
||||
invite : InviteInput -> Credentials -> FutureTask
|
||||
invite data cred =
|
||||
C.makeVBA cred
|
||||
|> Chain.andThen (C.invite data)
|
||||
|> C.toTask
|
||||
|
||||
|
||||
joinedMembers : C.JoinedMembersInput -> Credentials -> FutureTask
|
||||
joinedMembers : JoinedMembersInput -> Credentials -> FutureTask
|
||||
joinedMembers data cred =
|
||||
C.makeVBA cred
|
||||
|> Chain.andThen (C.joinedMembers data)
|
||||
|
@ -90,15 +95,15 @@ sendMessageEvent { content, eventType, extraTransactionNoise, roomId } cred =
|
|||
|> C.toTask
|
||||
|
||||
|
||||
sendStateKey : C.SendStateEventInput -> Credentials -> FutureTask
|
||||
sendStateKey data cred =
|
||||
sendStateEvent : SendStateKeyInput -> Credentials -> FutureTask
|
||||
sendStateEvent data cred =
|
||||
C.makeVBA cred
|
||||
|> Chain.andThen (C.sendStateEvent data)
|
||||
-- TODO: Get event from API to see what it looks like
|
||||
|> C.toTask
|
||||
|
||||
|
||||
sync : C.SyncInput -> Credentials -> FutureTask
|
||||
sync : SyncInput -> Credentials -> FutureTask
|
||||
sync data cred =
|
||||
C.makeVBA cred
|
||||
|> Chain.andThen (C.sync data)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
module Internal.Api.CredUpdate exposing (..)
|
||||
module Internal.Api.VaultUpdate exposing (..)
|
||||
|
||||
import Internal.Api.Chain as Chain exposing (IdemChain, TaskChain)
|
||||
import Internal.Api.Credentials as Credentials exposing (Credentials)
|
||||
|
@ -15,14 +15,12 @@ import Internal.Api.Versions.V1.Versions as V
|
|||
import Internal.Tools.Context as Context exposing (VB, VBA, VBAT)
|
||||
import Internal.Tools.Exceptions as X
|
||||
import Internal.Tools.LoginValues exposing (AccessToken(..))
|
||||
import Internal.Tools.SpecEnums as Enums
|
||||
import Json.Encode as E
|
||||
import Task exposing (Task)
|
||||
import Time
|
||||
|
||||
|
||||
type CredUpdate
|
||||
= MultipleUpdates (List CredUpdate)
|
||||
type VaultUpdate
|
||||
= MultipleUpdates (List VaultUpdate)
|
||||
-- Updates as a result of API calls
|
||||
| GetEvent GetEvent.EventInput GetEvent.EventOutput
|
||||
| InviteSent Invite.InviteInput Invite.InviteOutput
|
||||
|
@ -38,12 +36,12 @@ type CredUpdate
|
|||
|
||||
|
||||
type alias FutureTask =
|
||||
Task X.Error CredUpdate
|
||||
Task X.Error VaultUpdate
|
||||
|
||||
|
||||
{-| Turn an API Task into a taskchain.
|
||||
-}
|
||||
toChain : (cout -> Chain.TaskChainPiece CredUpdate ph1 ph2) -> (Context.Context ph1 -> cin -> Task X.Error cout) -> cin -> TaskChain CredUpdate ph1 ph2
|
||||
toChain : (cout -> Chain.TaskChainPiece VaultUpdate ph1 ph2) -> (Context.Context ph1 -> cin -> Task X.Error cout) -> cin -> TaskChain VaultUpdate ph1 ph2
|
||||
toChain transform task input context =
|
||||
task context input
|
||||
|> Task.map transform
|
||||
|
@ -51,7 +49,7 @@ toChain transform task input context =
|
|||
|
||||
{-| Turn a chain of tasks into a full executable task.
|
||||
-}
|
||||
toTask : TaskChain CredUpdate {} b -> FutureTask
|
||||
toTask : TaskChain VaultUpdate {} b -> FutureTask
|
||||
toTask =
|
||||
Chain.toTask
|
||||
>> Task.map
|
||||
|
@ -67,7 +65,7 @@ toTask =
|
|||
|
||||
{-| Get a functional access token.
|
||||
-}
|
||||
accessToken : AccessToken -> TaskChain CredUpdate (VB a) (VBA a)
|
||||
accessToken : AccessToken -> TaskChain VaultUpdate (VB a) (VBA a)
|
||||
accessToken ctoken =
|
||||
case ctoken of
|
||||
NoAccess ->
|
||||
|
@ -96,7 +94,7 @@ accessToken ctoken =
|
|||
|
||||
{-| Get an event from the API.
|
||||
-}
|
||||
getEvent : GetEvent.EventInput -> IdemChain CredUpdate (VBA a)
|
||||
getEvent : GetEvent.EventInput -> IdemChain VaultUpdate (VBA a)
|
||||
getEvent input =
|
||||
toChain
|
||||
(\output ->
|
||||
|
@ -111,7 +109,7 @@ getEvent input =
|
|||
|
||||
{-| Get the supported spec versions from the homeserver.
|
||||
-}
|
||||
getVersions : TaskChain CredUpdate { a | baseUrl : () } (VB a)
|
||||
getVersions : TaskChain VaultUpdate { a | baseUrl : () } (VB a)
|
||||
getVersions =
|
||||
toChain
|
||||
(\output ->
|
||||
|
@ -126,7 +124,7 @@ getVersions =
|
|||
|
||||
{-| Invite a user to a room.
|
||||
-}
|
||||
invite : Invite.InviteInput -> IdemChain CredUpdate (VBA a)
|
||||
invite : Invite.InviteInput -> IdemChain VaultUpdate (VBA a)
|
||||
invite input =
|
||||
toChain
|
||||
(\output ->
|
||||
|
@ -139,7 +137,7 @@ invite input =
|
|||
input
|
||||
|
||||
|
||||
joinedMembers : JoinedMembers.JoinedMembersInput -> IdemChain CredUpdate (VBA a)
|
||||
joinedMembers : JoinedMembers.JoinedMembersInput -> IdemChain VaultUpdate (VBA a)
|
||||
joinedMembers input =
|
||||
toChain
|
||||
(\output ->
|
||||
|
@ -152,7 +150,7 @@ joinedMembers input =
|
|||
input
|
||||
|
||||
|
||||
loginWithUsernameAndPassword : LoginWithUsernameAndPassword.LoginWithUsernameAndPasswordInput -> TaskChain CredUpdate (VB a) (VBA a)
|
||||
loginWithUsernameAndPassword : LoginWithUsernameAndPassword.LoginWithUsernameAndPasswordInput -> TaskChain VaultUpdate (VB a) (VBA a)
|
||||
loginWithUsernameAndPassword input =
|
||||
toChain
|
||||
(\output ->
|
||||
|
@ -171,7 +169,7 @@ loginWithUsernameAndPassword input =
|
|||
|
||||
{-| Make a VB-context based chain.
|
||||
-}
|
||||
makeVB : Credentials -> TaskChain CredUpdate {} (VB {})
|
||||
makeVB : Credentials -> TaskChain VaultUpdate {} (VB {})
|
||||
makeVB cred =
|
||||
cred
|
||||
|> Credentials.baseUrl
|
||||
|
@ -181,7 +179,7 @@ makeVB cred =
|
|||
|
||||
{-| Make a VBA-context based chain.
|
||||
-}
|
||||
makeVBA : Credentials -> TaskChain CredUpdate {} (VBA {})
|
||||
makeVBA : Credentials -> TaskChain VaultUpdate {} (VBA {})
|
||||
makeVBA cred =
|
||||
cred
|
||||
|> makeVB
|
||||
|
@ -190,7 +188,7 @@ makeVBA cred =
|
|||
|
||||
{-| Make a VBAT-context based chain.
|
||||
-}
|
||||
makeVBAT : (Int -> String) -> Credentials -> TaskChain CredUpdate {} (VBAT {})
|
||||
makeVBAT : (Int -> String) -> Credentials -> TaskChain VaultUpdate {} (VBAT {})
|
||||
makeVBAT toString cred =
|
||||
cred
|
||||
|> makeVBA
|
||||
|
@ -199,7 +197,7 @@ makeVBAT toString cred =
|
|||
|
||||
{-| Redact an event from a room.
|
||||
-}
|
||||
redact : Redact.RedactInput -> TaskChain CredUpdate (VBAT a) (VBA a)
|
||||
redact : Redact.RedactInput -> TaskChain VaultUpdate (VBAT a) (VBA a)
|
||||
redact input =
|
||||
toChain
|
||||
(\output ->
|
||||
|
@ -214,7 +212,7 @@ redact input =
|
|||
|
||||
{-| Send a message event to a room.
|
||||
-}
|
||||
sendMessageEvent : SendMessageEvent.SendMessageEventInput -> TaskChain CredUpdate (VBAT a) (VBA a)
|
||||
sendMessageEvent : SendMessageEvent.SendMessageEventInput -> TaskChain VaultUpdate (VBAT a) (VBA a)
|
||||
sendMessageEvent input =
|
||||
toChain
|
||||
(\output ->
|
||||
|
@ -229,7 +227,7 @@ sendMessageEvent input =
|
|||
|
||||
{-| Send a state key event to a room.
|
||||
-}
|
||||
sendStateEvent : SendStateKey.SendStateKeyInput -> IdemChain CredUpdate (VBA a)
|
||||
sendStateEvent : SendStateKey.SendStateKeyInput -> IdemChain VaultUpdate (VBA a)
|
||||
sendStateEvent input =
|
||||
toChain
|
||||
(\output ->
|
||||
|
@ -244,7 +242,7 @@ sendStateEvent input =
|
|||
|
||||
{-| Sync the latest updates.
|
||||
-}
|
||||
sync : Sync.SyncInput -> IdemChain CredUpdate (VBA a)
|
||||
sync : Sync.SyncInput -> IdemChain VaultUpdate (VBA a)
|
||||
sync input =
|
||||
toChain
|
||||
(\output ->
|
||||
|
@ -259,7 +257,7 @@ sync input =
|
|||
|
||||
{-| Insert versions, or get them if they are not provided.
|
||||
-}
|
||||
versions : Maybe V.Versions -> TaskChain CredUpdate { a | baseUrl : () } (VB a)
|
||||
versions : Maybe V.Versions -> TaskChain VaultUpdate { a | baseUrl : () } (VB a)
|
||||
versions mVersions =
|
||||
case mVersions of
|
||||
Just vs ->
|
||||
|
@ -271,7 +269,7 @@ versions mVersions =
|
|||
|
||||
{-| Create a task that insert the base URL into the context.
|
||||
-}
|
||||
withBaseUrl : String -> TaskChain CredUpdate a { a | baseUrl : () }
|
||||
withBaseUrl : String -> TaskChain VaultUpdate a { a | baseUrl : () }
|
||||
withBaseUrl baseUrl =
|
||||
{ contextChange = Context.setBaseUrl baseUrl
|
||||
, messages = []
|
||||
|
@ -283,7 +281,7 @@ withBaseUrl baseUrl =
|
|||
|
||||
{-| Create a task that inserts a transaction id into the context.
|
||||
-}
|
||||
withTransactionId : (Int -> String) -> TaskChain CredUpdate a { a | transactionId : () }
|
||||
withTransactionId : (Int -> String) -> TaskChain VaultUpdate a { a | transactionId : () }
|
||||
withTransactionId toString =
|
||||
Time.now
|
||||
|> Task.map
|
||||
|
@ -302,7 +300,7 @@ withTransactionId toString =
|
|||
|
||||
{-| Create a task that inserts versions into the context.
|
||||
-}
|
||||
withVersions : V.Versions -> TaskChain CredUpdate { a | baseUrl : () } (VB a)
|
||||
withVersions : V.Versions -> TaskChain VaultUpdate { a | baseUrl : () } (VB a)
|
||||
withVersions vs =
|
||||
{ contextChange = Context.setVersions vs.versions
|
||||
, messages = []
|
|
@ -4,10 +4,10 @@ module Internal.Room exposing (..)
|
|||
-}
|
||||
|
||||
import Dict
|
||||
import Internal.Api.CredUpdate exposing (CredUpdate)
|
||||
import Internal.Api.Credentials as Credentials exposing (Credentials)
|
||||
import Internal.Api.Sync.V2.SpecObjects as Sync
|
||||
import Internal.Api.Task as Api
|
||||
import Internal.Api.VaultUpdate exposing (VaultUpdate)
|
||||
import Internal.Event as Event exposing (Event)
|
||||
import Internal.Tools.Exceptions as X
|
||||
import Internal.Tools.Hashdict as Hashdict
|
||||
|
@ -136,33 +136,29 @@ roomId =
|
|||
|
||||
{-| Sends a new event to the Matrix room associated with the given `Room`.
|
||||
-}
|
||||
sendEvent : Room -> { eventType : String, content : E.Value } -> Task X.Error CredUpdate
|
||||
sendEvent : Room -> { eventType : String, content : E.Value } -> Task X.Error VaultUpdate
|
||||
sendEvent (Room { context, room }) { eventType, content } =
|
||||
Api.sendMessageEvent
|
||||
{ accessToken = Credentials.accessToken context
|
||||
, baseUrl = Credentials.baseUrl context
|
||||
, content = content
|
||||
{ content = content
|
||||
, eventType = eventType
|
||||
, roomId = Internal.roomId room
|
||||
, versions = Credentials.versions context
|
||||
, extraTransactionNoise = "content-value:<object>"
|
||||
, roomId = Internal.roomId room
|
||||
}
|
||||
context
|
||||
|
||||
|
||||
{-| Sends a new text message to the Matrix room associated with the given `Room`.
|
||||
-}
|
||||
sendMessage : Room -> String -> Task X.Error CredUpdate
|
||||
sendMessage : Room -> String -> Task X.Error VaultUpdate
|
||||
sendMessage (Room { context, room }) text =
|
||||
Api.sendMessageEvent
|
||||
{ accessToken = Credentials.accessToken context
|
||||
, baseUrl = Credentials.baseUrl context
|
||||
, content =
|
||||
{ content =
|
||||
E.object
|
||||
[ ( "msgtype", E.string "m.text" )
|
||||
, ( "body", E.string text )
|
||||
]
|
||||
, eventType = "m.room.message"
|
||||
, roomId = Internal.roomId room
|
||||
, versions = Credentials.versions context
|
||||
, extraTransactionNoise = "literal-message:" ++ text
|
||||
, roomId = Internal.roomId room
|
||||
}
|
||||
context
|
||||
|
|
|
@ -8,9 +8,9 @@ This file combines the internal functions with the API endpoints to create a ful
|
|||
-}
|
||||
|
||||
import Dict
|
||||
import Internal.Api.CredUpdate exposing (CredUpdate(..))
|
||||
import Internal.Api.Credentials as Credentials exposing (Credentials)
|
||||
import Internal.Api.Task as Api
|
||||
import Internal.Api.VaultUpdate exposing (VaultUpdate(..))
|
||||
import Internal.Event as Event
|
||||
import Internal.Room as Room
|
||||
import Internal.Tools.Exceptions as X
|
||||
|
@ -88,9 +88,9 @@ insertRoom =
|
|||
|
||||
{-| Update the Vault type with new values
|
||||
-}
|
||||
updateWith : CredUpdate -> Vault -> Vault
|
||||
updateWith credUpdate ((Vault ({ cred, context } as data)) as credentials) =
|
||||
case credUpdate of
|
||||
updateWith : VaultUpdate -> Vault -> Vault
|
||||
updateWith vaultUpdate ((Vault ({ cred, context } as data)) as credentials) =
|
||||
case vaultUpdate of
|
||||
MultipleUpdates updates ->
|
||||
List.foldl updateWith credentials updates
|
||||
|
||||
|
@ -193,18 +193,16 @@ updateWith credUpdate ((Vault ({ cred, context } as data)) as credentials) =
|
|||
|
||||
{-| Synchronize credentials
|
||||
-}
|
||||
sync : Vault -> Task X.Error CredUpdate
|
||||
sync : Vault -> Task X.Error VaultUpdate
|
||||
sync (Vault { cred, context }) =
|
||||
Api.sync
|
||||
{ accessToken = Credentials.accessToken context
|
||||
, baseUrl = Credentials.baseUrl context
|
||||
, filter = Nothing
|
||||
{ filter = Nothing
|
||||
, fullState = Nothing
|
||||
, setPresence = Nothing
|
||||
, since = Internal.getSince cred
|
||||
, timeout = Just 30
|
||||
, versions = Credentials.versions context
|
||||
}
|
||||
context
|
||||
|
||||
|
||||
{-| Get a list of all synchronised rooms.
|
||||
|
|
Loading…
Reference in New Issue