elm-matrix-sdk-alpha/src/Internal/Api/All.elm

181 lines
5.2 KiB
Elm

module Internal.Api.All exposing (..)
import Hash
import Internal.Api.GetEvent.Main as GetEvent
import Internal.Api.JoinedMembers.Main as JoinedMembers
import Internal.Api.PreApi.Main as PreApi
import Internal.Api.PreApi.Objects.Versions as V
import Internal.Api.SendMessageEvent.Main as SendMessageEvent
import Internal.Api.SendStateKey.Main as SendStateKey
import Internal.Api.Sync.Main as Sync
import Internal.Tools.Exceptions as X
import Internal.Tools.LoginValues exposing (AccessToken)
import Internal.Tools.SpecEnums as Enums
import Internal.Tools.ValueGetter as VG
import Json.Encode as E
import Task exposing (Task)
type alias Future a =
Task X.Error a
type alias GetEventInput =
{ accessToken : AccessToken
, baseUrl : String
, eventId : String
, roomId : String
, versions : Maybe V.Versions
}
{-| Get a specific event from the Matrix API.
-}
getEvent : GetEventInput -> Future GetEvent.EventOutput
getEvent data =
VG.withInfo2
(\accessToken versions ->
GetEvent.getEvent
versions.versions
{ accessToken = accessToken
, baseUrl = data.baseUrl
, eventId = data.eventId
, roomId = data.roomId
}
)
(PreApi.accessToken data.baseUrl data.accessToken)
(PreApi.versions data.baseUrl data.versions)
type alias JoinedMembersInput =
{ accessToken : AccessToken
, baseUrl : String
, roomId : String
, versions : Maybe V.Versions
}
{-| Get a list of members who are part of a Matrix room.
-}
joinedMembers : JoinedMembersInput -> Future JoinedMembers.JoinedMembersOutput
joinedMembers data =
VG.withInfo2
(\accessToken versions ->
JoinedMembers.joinedMembers
versions.versions
{ accessToken = accessToken
, baseUrl = data.baseUrl
, roomId = data.roomId
}
)
(PreApi.accessToken data.baseUrl data.accessToken)
(PreApi.versions data.baseUrl data.versions)
type alias SendMessageEventInput =
{ accessToken : AccessToken
, baseUrl : String
, content : E.Value
, eventType : String
, roomId : String
, versions : Maybe V.Versions
, extraTransactionNoise : String
}
{-| Send a message event into a Matrix room.
-}
sendMessageEvent : SendMessageEventInput -> Future SendMessageEvent.SendMessageEventOutput
sendMessageEvent data =
VG.withInfo3
(\accessToken versions transactionId ->
SendMessageEvent.sendMessageEvent
versions.versions
{ accessToken = accessToken
, baseUrl = data.baseUrl
, content = data.content
, eventType = data.eventType
, roomId = data.roomId
, transactionId = transactionId
}
)
(PreApi.accessToken data.baseUrl data.accessToken)
(PreApi.versions data.baseUrl data.versions)
(PreApi.transactionId
(\timestamp ->
[ Hash.fromInt timestamp
, Hash.fromString data.baseUrl
, Hash.fromString data.eventType
, Hash.fromString data.roomId
, Hash.fromString data.extraTransactionNoise
]
|> List.foldl Hash.dependent (Hash.fromInt 0)
|> Hash.toString
|> (++) "elm"
)
)
type alias SendStateKeyInput =
{ accessToken : AccessToken
, baseUrl : String
, content : E.Value
, eventType : String
, roomId : String
, stateKey : String
, versions : Maybe V.Versions
}
{-| Send a state event into a Matrix room.
-}
sendStateEvent : SendStateKeyInput -> Future SendStateKey.SendStateKeyOutput
sendStateEvent data =
VG.withInfo2
(\accessToken versions ->
SendStateKey.sendStateKey
versions.versions
{ accessToken = accessToken
, baseUrl = data.baseUrl
, content = data.content
, eventType = data.eventType
, roomId = data.roomId
, stateKey = data.stateKey
}
)
(PreApi.accessToken data.baseUrl data.accessToken)
(PreApi.versions data.baseUrl data.versions)
type alias SyncInput =
{ accessToken : AccessToken
, baseUrl : String
, filter : Maybe String
, fullState : Maybe Bool
, setPresence : Maybe Enums.UserPresence
, since : Maybe String
, timeout : Maybe Int
, versions : Maybe V.Versions
}
{-| Get the latest sync from the Matrix API.
-}
syncCredentials : SyncInput -> Future Sync.SyncOutput
syncCredentials data =
VG.withInfo2
(\accessToken versions ->
Sync.sync
versions.versions
{ accessToken = accessToken
, baseUrl = data.baseUrl
, filter = data.filter
, fullState = data.fullState
, setPresence = data.setPresence
, since = data.since
, timeout = data.timeout
}
)
(PreApi.accessToken data.baseUrl data.accessToken)
(PreApi.versions data.baseUrl data.versions)