181 lines
5.2 KiB
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)
|