Add `src/Internal/Api`

pull/1/head
Bram van den Heuvel 2023-01-09 16:57:25 +01:00
parent 206353b583
commit c673372534
162 changed files with 10220 additions and 10 deletions

View File

@ -0,0 +1,32 @@
module Internal.Api.GetEvent.Api exposing (..)
import Internal.Api.Request as R
import Internal.Tools.Exceptions as X
import Json.Decode as D
import Task exposing (Task)
type alias GetEventInputV1 =
{ accessToken : String
, baseUrl : String
, eventId : String
, roomId : String
}
getEventInputV1 : D.Decoder a -> (a -> b) -> GetEventInputV1 -> Task X.Error b
getEventInputV1 decoder mapping data =
R.rawApiCall
{ headers = R.WithAccessToken data.accessToken
, method = "GET"
, baseUrl = data.baseUrl
, path = "/_matrix/client/v3/rooms/{roomId}/event/{eventId}"
, pathParams =
[ ( "eventId", data.eventId )
, ( "roomId", data.roomId )
]
, queryParams = []
, bodyParams = []
, timeout = Nothing
, decoder = \_ -> D.map mapping decoder
}

View File

@ -0,0 +1,28 @@
module Internal.Api.GetEvent.Main exposing (..)
import Internal.Api.GetEvent.Api as Api
import Internal.Api.GetEvent.V1_2.Api as V1_2
import Internal.Api.GetEvent.V1_3.Api as V1_3
import Internal.Api.GetEvent.V1_4.Api as V1_4
import Internal.Api.GetEvent.V1_5.Api as V1_5
import Internal.Api.GetEvent.V1_5.Objects as O
import Internal.Api.VersionControl as V
import Internal.Tools.Exceptions as X
import Task exposing (Task)
getEvent : List String -> EventInput -> EventOutput
getEvent =
V.firstVersion V1_2.packet
|> V.updateWith V1_3.packet
|> V.updateWith V1_4.packet
|> V.updateWith V1_5.packet
|> V.toFunction
type alias EventOutput =
Task X.Error O.ClientEvent
type alias EventInput =
Api.GetEventInputV1

View File

@ -0,0 +1,17 @@
module Internal.Api.GetEvent.V1_2.Api exposing (..)
import Internal.Api.GetEvent.Api as Api
import Internal.Api.GetEvent.V1_2.Convert as C
import Internal.Api.GetEvent.V1_2.Objects as O
import Internal.Api.GetEvent.V1_2.SpecObjects as SO
import Internal.Api.GetEvent.V1_2.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion () () Api.GetEventInputV1 O.ClientEvent
packet =
{ version = "v1.2"
, downcast = \_ -> ()
, current = Api.getEventInputV1 SO.clientEventDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,27 @@
module Internal.Api.GetEvent.V1_2.Convert exposing (..)
import Internal.Api.GetEvent.V1_2.Objects as O
import Internal.Api.GetEvent.V1_2.SpecObjects as SO
convert : SO.ClientEvent -> O.ClientEvent
convert e =
{ content = e.content
, eventId = e.eventId
, originServerTs = e.originServerTs
, roomId = e.roomId
, sender = e.sender
, stateKey = e.stateKey
, contentType = e.contentType
, unsigned = Maybe.map convertUnsigned e.unsigned
}
convertUnsigned : SO.UnsignedData -> O.UnsignedData
convertUnsigned (SO.UnsignedData u) =
O.UnsignedData
{ age = u.age
, prevContent = u.prevContent
, redactedBecause = Maybe.map convert u.redactedBecause
, transactionId = u.transactionId
}

View File

@ -0,0 +1,97 @@
module Internal.Api.GetEvent.V1_2.Objects exposing
( ClientEvent
, UnsignedData(..)
, clientEventDecoder
, encodeClientEvent
, encodeUnsignedData
, unsignedDataDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.DecodeExtra exposing (opField)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Internal.Tools.Timestamp exposing (Timestamp, encodeTimestamp, timestampDecoder)
import Json.Decode as D
import Json.Encode as E
{-| Client Event containing all data on an event.
-}
type alias ClientEvent =
{ content : E.Value
, eventId : String
, originServerTs : Timestamp
, roomId : String
, sender : String
, stateKey : Maybe String
, contentType : String
, unsigned : Maybe UnsignedData
}
encodeClientEvent : ClientEvent -> E.Value
encodeClientEvent data =
maybeObject
[ ( "content", Just <| data.content )
, ( "event_id", Just <| E.string data.eventId )
, ( "origin_server_ts", Just <| encodeTimestamp data.originServerTs )
, ( "room_id", Just <| E.string data.roomId )
, ( "sender", Just <| E.string data.sender )
, ( "state_key", Maybe.map E.string data.stateKey )
, ( "type", Just <| E.string data.contentType )
, ( "unsigned", Maybe.map encodeUnsignedData data.unsigned )
]
clientEventDecoder : D.Decoder ClientEvent
clientEventDecoder =
D.map8
(\a b c d e f g h ->
{ content = a, eventId = b, originServerTs = c, roomId = d, sender = e, stateKey = f, contentType = g, unsigned = h }
)
(D.field "content" D.value)
(D.field "event_id" D.string)
(D.field "origin_server_ts" timestampDecoder)
(D.field "room_id" D.string)
(D.field "sender" D.string)
(opField "state_key" D.string)
(D.field "type" D.string)
(opField "unsigned" (D.lazy (\_ -> unsignedDataDecoder)))
{-| Extra information about the event.
-}
type UnsignedData
= UnsignedData
{ age : Maybe Int
, prevContent : Maybe E.Value
, redactedBecause : Maybe ClientEvent
, transactionId : Maybe String
}
encodeUnsignedData : UnsignedData -> E.Value
encodeUnsignedData (UnsignedData data) =
maybeObject
[ ( "age", Maybe.map E.int data.age )
, ( "prev_content", data.prevContent )
, ( "redacted_because", Maybe.map encodeClientEvent data.redactedBecause )
, ( "transaction_id", Maybe.map E.string data.transactionId )
]
unsignedDataDecoder : D.Decoder UnsignedData
unsignedDataDecoder =
D.map4
(\a b c d ->
UnsignedData { age = a, prevContent = b, redactedBecause = c, transactionId = d }
)
(opField "age" D.int)
(opField "prev_content" D.value)
(opField "redacted_because" clientEventDecoder)
(opField "transaction_id" D.string)

View File

@ -0,0 +1,40 @@
version: v1.2
name: Objects
objects:
ClientEvent:
description: Client Event containing all data on an event.
fields:
content:
type: value
required: true
event_id:
type: string
required: true
origin_server_ts:
type: timestamp
required: true
room_id:
type: string
required: true
sender:
type: string
required: true
state_key:
type: string
type:
type: string
required: true
unsigned:
type: UnsignedData
UnsignedData:
anti_recursion: true
description: Extra information about the event.
fields:
age:
type: int
prev_content:
type: value
redacted_because:
type: ClientEvent
transaction_id:
type: string

View File

@ -0,0 +1,97 @@
module Internal.Api.GetEvent.V1_2.SpecObjects exposing
( ClientEvent
, UnsignedData(..)
, clientEventDecoder
, encodeClientEvent
, encodeUnsignedData
, unsignedDataDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.DecodeExtra exposing (opField)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Internal.Tools.Timestamp exposing (Timestamp, encodeTimestamp, timestampDecoder)
import Json.Decode as D
import Json.Encode as E
{-| Client Event containing all data on an event.
-}
type alias ClientEvent =
{ content : E.Value
, eventId : String
, originServerTs : Timestamp
, roomId : String
, sender : String
, stateKey : Maybe String
, contentType : String
, unsigned : Maybe UnsignedData
}
encodeClientEvent : ClientEvent -> E.Value
encodeClientEvent data =
maybeObject
[ ( "content", Just <| data.content )
, ( "event_id", Just <| E.string data.eventId )
, ( "origin_server_ts", Just <| encodeTimestamp data.originServerTs )
, ( "room_id", Just <| E.string data.roomId )
, ( "sender", Just <| E.string data.sender )
, ( "state_key", Maybe.map E.string data.stateKey )
, ( "type", Just <| E.string data.contentType )
, ( "unsigned", Maybe.map encodeUnsignedData data.unsigned )
]
clientEventDecoder : D.Decoder ClientEvent
clientEventDecoder =
D.map8
(\a b c d e f g h ->
{ content = a, eventId = b, originServerTs = c, roomId = d, sender = e, stateKey = f, contentType = g, unsigned = h }
)
(D.field "content" D.value)
(D.field "event_id" D.string)
(D.field "origin_server_ts" timestampDecoder)
(D.field "room_id" D.string)
(D.field "sender" D.string)
(opField "state_key" D.string)
(D.field "type" D.string)
(opField "unsigned" (D.lazy (\_ -> unsignedDataDecoder)))
{-| Extra information about the event.
-}
type UnsignedData
= UnsignedData
{ age : Maybe Int
, prevContent : Maybe E.Value
, redactedBecause : Maybe ClientEvent
, transactionId : Maybe String
}
encodeUnsignedData : UnsignedData -> E.Value
encodeUnsignedData (UnsignedData data) =
maybeObject
[ ( "age", Maybe.map E.int data.age )
, ( "prev_content", data.prevContent )
, ( "redacted_because", Maybe.map encodeClientEvent data.redactedBecause )
, ( "transaction_id", Maybe.map E.string data.transactionId )
]
unsignedDataDecoder : D.Decoder UnsignedData
unsignedDataDecoder =
D.map4
(\a b c d ->
UnsignedData { age = a, prevContent = b, redactedBecause = c, transactionId = d }
)
(opField "age" D.int)
(opField "prev_content" D.value)
(opField "redacted_because" clientEventDecoder)
(opField "transaction_id" D.string)

View File

@ -0,0 +1,40 @@
version: v1.2
name: SpecObjects
objects:
ClientEvent:
description: Client Event containing all data on an event.
fields:
content:
type: value
required: true
event_id:
type: string
required: true
origin_server_ts:
type: timestamp
required: true
room_id:
type: string
required: true
sender:
type: string
required: true
state_key:
type: string
type:
type: string
required: true
unsigned:
type: UnsignedData
UnsignedData:
anti_recursion: true
description: Extra information about the event.
fields:
age:
type: int
prev_content:
type: value
redacted_because:
type: ClientEvent
transaction_id:
type: string

View File

@ -0,0 +1,18 @@
module Internal.Api.GetEvent.V1_2.Upcast exposing (..)
import Internal.Api.GetEvent.V1_2.Objects as O
import Internal.Config.Leaking as L
import Json.Encode as E
upcast : () -> O.ClientEvent
upcast _ =
{ content = E.object []
, eventId = L.eventId
, originServerTs = L.originServerTs
, roomId = L.roomId
, sender = L.sender
, stateKey = Nothing
, contentType = L.eventType
, unsigned = Nothing
}

View File

@ -0,0 +1,18 @@
module Internal.Api.GetEvent.V1_3.Api exposing (..)
import Internal.Api.GetEvent.Api as Api
import Internal.Api.GetEvent.V1_2.Objects as PO
import Internal.Api.GetEvent.V1_3.Convert as C
import Internal.Api.GetEvent.V1_3.Objects as O
import Internal.Api.GetEvent.V1_3.SpecObjects as SO
import Internal.Api.GetEvent.V1_3.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion Api.GetEventInputV1 PO.ClientEvent Api.GetEventInputV1 O.ClientEvent
packet =
{ version = "v1.3"
, downcast = identity
, current = Api.getEventInputV1 SO.clientEventDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,27 @@
module Internal.Api.GetEvent.V1_3.Convert exposing (..)
import Internal.Api.GetEvent.V1_3.Objects as O
import Internal.Api.GetEvent.V1_3.SpecObjects as SO
convert : SO.ClientEvent -> O.ClientEvent
convert e =
{ content = e.content
, eventId = e.eventId
, originServerTs = e.originServerTs
, roomId = e.roomId
, sender = e.sender
, stateKey = e.stateKey
, contentType = e.contentType
, unsigned = Maybe.map convertUnsigned e.unsigned
}
convertUnsigned : SO.UnsignedData -> O.UnsignedData
convertUnsigned (SO.UnsignedData u) =
O.UnsignedData
{ age = u.age
, prevContent = u.prevContent
, redactedBecause = Maybe.map convert u.redactedBecause
, transactionId = u.transactionId
}

View File

@ -0,0 +1,97 @@
module Internal.Api.GetEvent.V1_3.Objects exposing
( ClientEvent
, UnsignedData(..)
, clientEventDecoder
, encodeClientEvent
, encodeUnsignedData
, unsignedDataDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.DecodeExtra exposing (opField)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Internal.Tools.Timestamp exposing (Timestamp, encodeTimestamp, timestampDecoder)
import Json.Decode as D
import Json.Encode as E
{-| Client Event containing all data on an event.
-}
type alias ClientEvent =
{ content : E.Value
, eventId : String
, originServerTs : Timestamp
, roomId : String
, sender : String
, stateKey : Maybe String
, contentType : String
, unsigned : Maybe UnsignedData
}
encodeClientEvent : ClientEvent -> E.Value
encodeClientEvent data =
maybeObject
[ ( "content", Just <| data.content )
, ( "event_id", Just <| E.string data.eventId )
, ( "origin_server_ts", Just <| encodeTimestamp data.originServerTs )
, ( "room_id", Just <| E.string data.roomId )
, ( "sender", Just <| E.string data.sender )
, ( "state_key", Maybe.map E.string data.stateKey )
, ( "type", Just <| E.string data.contentType )
, ( "unsigned", Maybe.map encodeUnsignedData data.unsigned )
]
clientEventDecoder : D.Decoder ClientEvent
clientEventDecoder =
D.map8
(\a b c d e f g h ->
{ content = a, eventId = b, originServerTs = c, roomId = d, sender = e, stateKey = f, contentType = g, unsigned = h }
)
(D.field "content" D.value)
(D.field "event_id" D.string)
(D.field "origin_server_ts" timestampDecoder)
(D.field "room_id" D.string)
(D.field "sender" D.string)
(opField "state_key" D.string)
(D.field "type" D.string)
(opField "unsigned" (D.lazy (\_ -> unsignedDataDecoder)))
{-| Extra information about the event.
-}
type UnsignedData
= UnsignedData
{ age : Maybe Int
, prevContent : Maybe E.Value
, redactedBecause : Maybe ClientEvent
, transactionId : Maybe String
}
encodeUnsignedData : UnsignedData -> E.Value
encodeUnsignedData (UnsignedData data) =
maybeObject
[ ( "age", Maybe.map E.int data.age )
, ( "prev_content", data.prevContent )
, ( "redacted_because", Maybe.map encodeClientEvent data.redactedBecause )
, ( "transaction_id", Maybe.map E.string data.transactionId )
]
unsignedDataDecoder : D.Decoder UnsignedData
unsignedDataDecoder =
D.map4
(\a b c d ->
UnsignedData { age = a, prevContent = b, redactedBecause = c, transactionId = d }
)
(opField "age" D.int)
(opField "prev_content" D.value)
(opField "redacted_because" clientEventDecoder)
(opField "transaction_id" D.string)

View File

@ -0,0 +1,40 @@
version: v1.3
name: Objects
objects:
ClientEvent:
description: Client Event containing all data on an event.
fields:
content:
type: value
required: true
event_id:
type: string
required: true
origin_server_ts:
type: timestamp
required: true
room_id:
type: string
required: true
sender:
type: string
required: true
state_key:
type: string
type:
type: string
required: true
unsigned:
type: UnsignedData
UnsignedData:
anti_recursion: true
description: Extra information about the event.
fields:
age:
type: int
prev_content:
type: value
redacted_because:
type: ClientEvent
transaction_id:
type: string

View File

@ -0,0 +1,97 @@
module Internal.Api.GetEvent.V1_3.SpecObjects exposing
( ClientEvent
, UnsignedData(..)
, clientEventDecoder
, encodeClientEvent
, encodeUnsignedData
, unsignedDataDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.DecodeExtra exposing (opField)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Internal.Tools.Timestamp exposing (Timestamp, encodeTimestamp, timestampDecoder)
import Json.Decode as D
import Json.Encode as E
{-| Client Event containing all data on an event.
-}
type alias ClientEvent =
{ content : E.Value
, eventId : String
, originServerTs : Timestamp
, roomId : String
, sender : String
, stateKey : Maybe String
, contentType : String
, unsigned : Maybe UnsignedData
}
encodeClientEvent : ClientEvent -> E.Value
encodeClientEvent data =
maybeObject
[ ( "content", Just <| data.content )
, ( "event_id", Just <| E.string data.eventId )
, ( "origin_server_ts", Just <| encodeTimestamp data.originServerTs )
, ( "room_id", Just <| E.string data.roomId )
, ( "sender", Just <| E.string data.sender )
, ( "state_key", Maybe.map E.string data.stateKey )
, ( "type", Just <| E.string data.contentType )
, ( "unsigned", Maybe.map encodeUnsignedData data.unsigned )
]
clientEventDecoder : D.Decoder ClientEvent
clientEventDecoder =
D.map8
(\a b c d e f g h ->
{ content = a, eventId = b, originServerTs = c, roomId = d, sender = e, stateKey = f, contentType = g, unsigned = h }
)
(D.field "content" D.value)
(D.field "event_id" D.string)
(D.field "origin_server_ts" timestampDecoder)
(D.field "room_id" D.string)
(D.field "sender" D.string)
(opField "state_key" D.string)
(D.field "type" D.string)
(opField "unsigned" (D.lazy (\_ -> unsignedDataDecoder)))
{-| Extra information about the event.
-}
type UnsignedData
= UnsignedData
{ age : Maybe Int
, prevContent : Maybe E.Value
, redactedBecause : Maybe ClientEvent
, transactionId : Maybe String
}
encodeUnsignedData : UnsignedData -> E.Value
encodeUnsignedData (UnsignedData data) =
maybeObject
[ ( "age", Maybe.map E.int data.age )
, ( "prev_content", data.prevContent )
, ( "redacted_because", Maybe.map encodeClientEvent data.redactedBecause )
, ( "transaction_id", Maybe.map E.string data.transactionId )
]
unsignedDataDecoder : D.Decoder UnsignedData
unsignedDataDecoder =
D.map4
(\a b c d ->
UnsignedData { age = a, prevContent = b, redactedBecause = c, transactionId = d }
)
(opField "age" D.int)
(opField "prev_content" D.value)
(opField "redacted_because" clientEventDecoder)
(opField "transaction_id" D.string)

View File

@ -0,0 +1,40 @@
version: v1.3
name: SpecObjects
objects:
ClientEvent:
description: Client Event containing all data on an event.
fields:
content:
type: value
required: true
event_id:
type: string
required: true
origin_server_ts:
type: timestamp
required: true
room_id:
type: string
required: true
sender:
type: string
required: true
state_key:
type: string
type:
type: string
required: true
unsigned:
type: UnsignedData
UnsignedData:
anti_recursion: true
description: Extra information about the event.
fields:
age:
type: int
prev_content:
type: value
redacted_because:
type: ClientEvent
transaction_id:
type: string

View File

@ -0,0 +1,27 @@
module Internal.Api.GetEvent.V1_3.Upcast exposing (..)
import Internal.Api.GetEvent.V1_2.Objects as PO
import Internal.Api.GetEvent.V1_3.Objects as O
upcast : PO.ClientEvent -> O.ClientEvent
upcast e =
{ content = e.content
, eventId = e.eventId
, originServerTs = e.originServerTs
, roomId = e.roomId
, sender = e.sender
, stateKey = e.stateKey
, contentType = e.contentType
, unsigned = Maybe.map upcastUnsigned e.unsigned
}
upcastUnsigned : PO.UnsignedData -> O.UnsignedData
upcastUnsigned (PO.UnsignedData u) =
O.UnsignedData
{ age = u.age
, prevContent = u.prevContent
, redactedBecause = Maybe.map upcast u.redactedBecause
, transactionId = u.transactionId
}

View File

@ -0,0 +1,18 @@
module Internal.Api.GetEvent.V1_4.Api exposing (..)
import Internal.Api.GetEvent.Api as Api
import Internal.Api.GetEvent.V1_3.Objects as PO
import Internal.Api.GetEvent.V1_4.Convert as C
import Internal.Api.GetEvent.V1_4.Objects as O
import Internal.Api.GetEvent.V1_4.SpecObjects as SO
import Internal.Api.GetEvent.V1_4.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion Api.GetEventInputV1 PO.ClientEvent Api.GetEventInputV1 O.ClientEvent
packet =
{ version = "v1.4"
, downcast = identity
, current = Api.getEventInputV1 SO.clientEventDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,27 @@
module Internal.Api.GetEvent.V1_4.Convert exposing (..)
import Internal.Api.GetEvent.V1_4.Objects as O
import Internal.Api.GetEvent.V1_4.SpecObjects as SO
convert : SO.ClientEvent -> O.ClientEvent
convert e =
{ content = e.content
, eventId = e.eventId
, originServerTs = e.originServerTs
, roomId = e.roomId
, sender = e.sender
, stateKey = e.stateKey
, contentType = e.contentType
, unsigned = Maybe.map convertUnsigned e.unsigned
}
convertUnsigned : SO.UnsignedData -> O.UnsignedData
convertUnsigned (SO.UnsignedData u) =
O.UnsignedData
{ age = u.age
, prevContent = u.prevContent
, redactedBecause = Maybe.map convert u.redactedBecause
, transactionId = u.transactionId
}

View File

@ -0,0 +1,97 @@
module Internal.Api.GetEvent.V1_4.Objects exposing
( ClientEvent
, UnsignedData(..)
, clientEventDecoder
, encodeClientEvent
, encodeUnsignedData
, unsignedDataDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.DecodeExtra exposing (opField)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Internal.Tools.Timestamp exposing (Timestamp, encodeTimestamp, timestampDecoder)
import Json.Decode as D
import Json.Encode as E
{-| Client Event containing all data on an event.
-}
type alias ClientEvent =
{ content : E.Value
, eventId : String
, originServerTs : Timestamp
, roomId : String
, sender : String
, stateKey : Maybe String
, contentType : String
, unsigned : Maybe UnsignedData
}
encodeClientEvent : ClientEvent -> E.Value
encodeClientEvent data =
maybeObject
[ ( "content", Just <| data.content )
, ( "event_id", Just <| E.string data.eventId )
, ( "origin_server_ts", Just <| encodeTimestamp data.originServerTs )
, ( "room_id", Just <| E.string data.roomId )
, ( "sender", Just <| E.string data.sender )
, ( "state_key", Maybe.map E.string data.stateKey )
, ( "type", Just <| E.string data.contentType )
, ( "unsigned", Maybe.map encodeUnsignedData data.unsigned )
]
clientEventDecoder : D.Decoder ClientEvent
clientEventDecoder =
D.map8
(\a b c d e f g h ->
{ content = a, eventId = b, originServerTs = c, roomId = d, sender = e, stateKey = f, contentType = g, unsigned = h }
)
(D.field "content" D.value)
(D.field "event_id" D.string)
(D.field "origin_server_ts" timestampDecoder)
(D.field "room_id" D.string)
(D.field "sender" D.string)
(opField "state_key" D.string)
(D.field "type" D.string)
(opField "unsigned" (D.lazy (\_ -> unsignedDataDecoder)))
{-| Extra information about the event.
-}
type UnsignedData
= UnsignedData
{ age : Maybe Int
, prevContent : Maybe E.Value
, redactedBecause : Maybe ClientEvent
, transactionId : Maybe String
}
encodeUnsignedData : UnsignedData -> E.Value
encodeUnsignedData (UnsignedData data) =
maybeObject
[ ( "age", Maybe.map E.int data.age )
, ( "prev_content", data.prevContent )
, ( "redacted_because", Maybe.map encodeClientEvent data.redactedBecause )
, ( "transaction_id", Maybe.map E.string data.transactionId )
]
unsignedDataDecoder : D.Decoder UnsignedData
unsignedDataDecoder =
D.map4
(\a b c d ->
UnsignedData { age = a, prevContent = b, redactedBecause = c, transactionId = d }
)
(opField "age" D.int)
(opField "prev_content" D.value)
(opField "redacted_because" clientEventDecoder)
(opField "transaction_id" D.string)

View File

@ -0,0 +1,40 @@
version: v1.4
name: Objects
objects:
ClientEvent:
description: Client Event containing all data on an event.
fields:
content:
type: value
required: true
event_id:
type: string
required: true
origin_server_ts:
type: timestamp
required: true
room_id:
type: string
required: true
sender:
type: string
required: true
state_key:
type: string
type:
type: string
required: true
unsigned:
type: UnsignedData
UnsignedData:
anti_recursion: true
description: Extra information about the event.
fields:
age:
type: int
prev_content:
type: value
redacted_because:
type: ClientEvent
transaction_id:
type: string

View File

@ -0,0 +1,97 @@
module Internal.Api.GetEvent.V1_4.SpecObjects exposing
( ClientEvent
, UnsignedData(..)
, clientEventDecoder
, encodeClientEvent
, encodeUnsignedData
, unsignedDataDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.DecodeExtra exposing (opField)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Internal.Tools.Timestamp exposing (Timestamp, encodeTimestamp, timestampDecoder)
import Json.Decode as D
import Json.Encode as E
{-| Client Event containing all data on an event.
-}
type alias ClientEvent =
{ content : E.Value
, eventId : String
, originServerTs : Timestamp
, roomId : String
, sender : String
, stateKey : Maybe String
, contentType : String
, unsigned : Maybe UnsignedData
}
encodeClientEvent : ClientEvent -> E.Value
encodeClientEvent data =
maybeObject
[ ( "content", Just <| data.content )
, ( "event_id", Just <| E.string data.eventId )
, ( "origin_server_ts", Just <| encodeTimestamp data.originServerTs )
, ( "room_id", Just <| E.string data.roomId )
, ( "sender", Just <| E.string data.sender )
, ( "state_key", Maybe.map E.string data.stateKey )
, ( "type", Just <| E.string data.contentType )
, ( "unsigned", Maybe.map encodeUnsignedData data.unsigned )
]
clientEventDecoder : D.Decoder ClientEvent
clientEventDecoder =
D.map8
(\a b c d e f g h ->
{ content = a, eventId = b, originServerTs = c, roomId = d, sender = e, stateKey = f, contentType = g, unsigned = h }
)
(D.field "content" D.value)
(D.field "event_id" D.string)
(D.field "origin_server_ts" timestampDecoder)
(D.field "room_id" D.string)
(D.field "sender" D.string)
(opField "state_key" D.string)
(D.field "type" D.string)
(opField "unsigned" (D.lazy (\_ -> unsignedDataDecoder)))
{-| Extra information about the event.
-}
type UnsignedData
= UnsignedData
{ age : Maybe Int
, prevContent : Maybe E.Value
, redactedBecause : Maybe ClientEvent
, transactionId : Maybe String
}
encodeUnsignedData : UnsignedData -> E.Value
encodeUnsignedData (UnsignedData data) =
maybeObject
[ ( "age", Maybe.map E.int data.age )
, ( "prev_content", data.prevContent )
, ( "redacted_because", Maybe.map encodeClientEvent data.redactedBecause )
, ( "transaction_id", Maybe.map E.string data.transactionId )
]
unsignedDataDecoder : D.Decoder UnsignedData
unsignedDataDecoder =
D.map4
(\a b c d ->
UnsignedData { age = a, prevContent = b, redactedBecause = c, transactionId = d }
)
(opField "age" D.int)
(opField "prev_content" D.value)
(opField "redacted_because" clientEventDecoder)
(opField "transaction_id" D.string)

View File

@ -0,0 +1,40 @@
version: v1.4
name: SpecObjects
objects:
ClientEvent:
description: Client Event containing all data on an event.
fields:
content:
type: value
required: true
event_id:
type: string
required: true
origin_server_ts:
type: timestamp
required: true
room_id:
type: string
required: true
sender:
type: string
required: true
state_key:
type: string
type:
type: string
required: true
unsigned:
type: UnsignedData
UnsignedData:
anti_recursion: true
description: Extra information about the event.
fields:
age:
type: int
prev_content:
type: value
redacted_because:
type: ClientEvent
transaction_id:
type: string

View File

@ -0,0 +1,27 @@
module Internal.Api.GetEvent.V1_4.Upcast exposing (..)
import Internal.Api.GetEvent.V1_3.Objects as PO
import Internal.Api.GetEvent.V1_4.Objects as O
upcast : PO.ClientEvent -> O.ClientEvent
upcast e =
{ content = e.content
, eventId = e.eventId
, originServerTs = e.originServerTs
, roomId = e.roomId
, sender = e.sender
, stateKey = e.stateKey
, contentType = e.contentType
, unsigned = Maybe.map upcastUnsigned e.unsigned
}
upcastUnsigned : PO.UnsignedData -> O.UnsignedData
upcastUnsigned (PO.UnsignedData u) =
O.UnsignedData
{ age = u.age
, prevContent = u.prevContent
, redactedBecause = Maybe.map upcast u.redactedBecause
, transactionId = u.transactionId
}

View File

@ -0,0 +1,18 @@
module Internal.Api.GetEvent.V1_5.Api exposing (..)
import Internal.Api.GetEvent.Api as Api
import Internal.Api.GetEvent.V1_4.Objects as PO
import Internal.Api.GetEvent.V1_5.Convert as C
import Internal.Api.GetEvent.V1_5.Objects as O
import Internal.Api.GetEvent.V1_5.SpecObjects as SO
import Internal.Api.GetEvent.V1_5.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion Api.GetEventInputV1 PO.ClientEvent Api.GetEventInputV1 O.ClientEvent
packet =
{ version = "v1.5"
, downcast = identity
, current = Api.getEventInputV1 SO.clientEventDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,27 @@
module Internal.Api.GetEvent.V1_5.Convert exposing (..)
import Internal.Api.GetEvent.V1_5.Objects as O
import Internal.Api.GetEvent.V1_5.SpecObjects as SO
convert : SO.ClientEvent -> O.ClientEvent
convert e =
{ content = e.content
, eventId = e.eventId
, originServerTs = e.originServerTs
, roomId = e.roomId
, sender = e.sender
, stateKey = e.stateKey
, contentType = e.contentType
, unsigned = Maybe.map convertUnsigned e.unsigned
}
convertUnsigned : SO.UnsignedData -> O.UnsignedData
convertUnsigned (SO.UnsignedData u) =
O.UnsignedData
{ age = u.age
, prevContent = u.prevContent
, redactedBecause = Maybe.map convert u.redactedBecause
, transactionId = u.transactionId
}

View File

@ -0,0 +1,97 @@
module Internal.Api.GetEvent.V1_5.Objects exposing
( ClientEvent
, UnsignedData(..)
, clientEventDecoder
, encodeClientEvent
, encodeUnsignedData
, unsignedDataDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.DecodeExtra exposing (opField)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Internal.Tools.Timestamp exposing (Timestamp, encodeTimestamp, timestampDecoder)
import Json.Decode as D
import Json.Encode as E
{-| Client Event containing all data on an event.
-}
type alias ClientEvent =
{ content : E.Value
, eventId : String
, originServerTs : Timestamp
, roomId : String
, sender : String
, stateKey : Maybe String
, contentType : String
, unsigned : Maybe UnsignedData
}
encodeClientEvent : ClientEvent -> E.Value
encodeClientEvent data =
maybeObject
[ ( "content", Just <| data.content )
, ( "event_id", Just <| E.string data.eventId )
, ( "origin_server_ts", Just <| encodeTimestamp data.originServerTs )
, ( "room_id", Just <| E.string data.roomId )
, ( "sender", Just <| E.string data.sender )
, ( "state_key", Maybe.map E.string data.stateKey )
, ( "type", Just <| E.string data.contentType )
, ( "unsigned", Maybe.map encodeUnsignedData data.unsigned )
]
clientEventDecoder : D.Decoder ClientEvent
clientEventDecoder =
D.map8
(\a b c d e f g h ->
{ content = a, eventId = b, originServerTs = c, roomId = d, sender = e, stateKey = f, contentType = g, unsigned = h }
)
(D.field "content" D.value)
(D.field "event_id" D.string)
(D.field "origin_server_ts" timestampDecoder)
(D.field "room_id" D.string)
(D.field "sender" D.string)
(opField "state_key" D.string)
(D.field "type" D.string)
(opField "unsigned" (D.lazy (\_ -> unsignedDataDecoder)))
{-| Extra information about the event.
-}
type UnsignedData
= UnsignedData
{ age : Maybe Int
, prevContent : Maybe E.Value
, redactedBecause : Maybe ClientEvent
, transactionId : Maybe String
}
encodeUnsignedData : UnsignedData -> E.Value
encodeUnsignedData (UnsignedData data) =
maybeObject
[ ( "age", Maybe.map E.int data.age )
, ( "prev_content", data.prevContent )
, ( "redacted_because", Maybe.map encodeClientEvent data.redactedBecause )
, ( "transaction_id", Maybe.map E.string data.transactionId )
]
unsignedDataDecoder : D.Decoder UnsignedData
unsignedDataDecoder =
D.map4
(\a b c d ->
UnsignedData { age = a, prevContent = b, redactedBecause = c, transactionId = d }
)
(opField "age" D.int)
(opField "prev_content" D.value)
(opField "redacted_because" clientEventDecoder)
(opField "transaction_id" D.string)

View File

@ -0,0 +1,40 @@
version: v1.5
name: Objects
objects:
ClientEvent:
description: Client Event containing all data on an event.
fields:
content:
type: value
required: true
event_id:
type: string
required: true
origin_server_ts:
type: timestamp
required: true
room_id:
type: string
required: true
sender:
type: string
required: true
state_key:
type: string
type:
type: string
required: true
unsigned:
type: UnsignedData
UnsignedData:
anti_recursion: true
description: Extra information about the event.
fields:
age:
type: int
prev_content:
type: value
redacted_because:
type: ClientEvent
transaction_id:
type: string

View File

@ -0,0 +1,97 @@
module Internal.Api.GetEvent.V1_5.SpecObjects exposing
( ClientEvent
, UnsignedData(..)
, clientEventDecoder
, encodeClientEvent
, encodeUnsignedData
, unsignedDataDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.DecodeExtra exposing (opField)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Internal.Tools.Timestamp exposing (Timestamp, encodeTimestamp, timestampDecoder)
import Json.Decode as D
import Json.Encode as E
{-| Client Event containing all data on an event.
-}
type alias ClientEvent =
{ content : E.Value
, eventId : String
, originServerTs : Timestamp
, roomId : String
, sender : String
, stateKey : Maybe String
, contentType : String
, unsigned : Maybe UnsignedData
}
encodeClientEvent : ClientEvent -> E.Value
encodeClientEvent data =
maybeObject
[ ( "content", Just <| data.content )
, ( "event_id", Just <| E.string data.eventId )
, ( "origin_server_ts", Just <| encodeTimestamp data.originServerTs )
, ( "room_id", Just <| E.string data.roomId )
, ( "sender", Just <| E.string data.sender )
, ( "state_key", Maybe.map E.string data.stateKey )
, ( "type", Just <| E.string data.contentType )
, ( "unsigned", Maybe.map encodeUnsignedData data.unsigned )
]
clientEventDecoder : D.Decoder ClientEvent
clientEventDecoder =
D.map8
(\a b c d e f g h ->
{ content = a, eventId = b, originServerTs = c, roomId = d, sender = e, stateKey = f, contentType = g, unsigned = h }
)
(D.field "content" D.value)
(D.field "event_id" D.string)
(D.field "origin_server_ts" timestampDecoder)
(D.field "room_id" D.string)
(D.field "sender" D.string)
(opField "state_key" D.string)
(D.field "type" D.string)
(opField "unsigned" (D.lazy (\_ -> unsignedDataDecoder)))
{-| Extra information about the event.
-}
type UnsignedData
= UnsignedData
{ age : Maybe Int
, prevContent : Maybe E.Value
, redactedBecause : Maybe ClientEvent
, transactionId : Maybe String
}
encodeUnsignedData : UnsignedData -> E.Value
encodeUnsignedData (UnsignedData data) =
maybeObject
[ ( "age", Maybe.map E.int data.age )
, ( "prev_content", data.prevContent )
, ( "redacted_because", Maybe.map encodeClientEvent data.redactedBecause )
, ( "transaction_id", Maybe.map E.string data.transactionId )
]
unsignedDataDecoder : D.Decoder UnsignedData
unsignedDataDecoder =
D.map4
(\a b c d ->
UnsignedData { age = a, prevContent = b, redactedBecause = c, transactionId = d }
)
(opField "age" D.int)
(opField "prev_content" D.value)
(opField "redacted_because" clientEventDecoder)
(opField "transaction_id" D.string)

View File

@ -0,0 +1,40 @@
version: v1.5
name: SpecObjects
objects:
ClientEvent:
description: Client Event containing all data on an event.
fields:
content:
type: value
required: true
event_id:
type: string
required: true
origin_server_ts:
type: timestamp
required: true
room_id:
type: string
required: true
sender:
type: string
required: true
state_key:
type: string
type:
type: string
required: true
unsigned:
type: UnsignedData
UnsignedData:
anti_recursion: true
description: Extra information about the event.
fields:
age:
type: int
prev_content:
type: value
redacted_because:
type: ClientEvent
transaction_id:
type: string

View File

@ -0,0 +1,27 @@
module Internal.Api.GetEvent.V1_5.Upcast exposing (..)
import Internal.Api.GetEvent.V1_4.Objects as PO
import Internal.Api.GetEvent.V1_5.Objects as O
upcast : PO.ClientEvent -> O.ClientEvent
upcast e =
{ content = e.content
, eventId = e.eventId
, originServerTs = e.originServerTs
, roomId = e.roomId
, sender = e.sender
, stateKey = e.stateKey
, contentType = e.contentType
, unsigned = Maybe.map upcastUnsigned e.unsigned
}
upcastUnsigned : PO.UnsignedData -> O.UnsignedData
upcastUnsigned (PO.UnsignedData u) =
O.UnsignedData
{ age = u.age
, prevContent = u.prevContent
, redactedBecause = Maybe.map upcast u.redactedBecause
, transactionId = u.transactionId
}

View File

@ -0,0 +1,30 @@
module Internal.Api.JoinedMembers.Api exposing (..)
import Internal.Api.Request as R
import Internal.Tools.Exceptions as X
import Json.Decode as D
import Task exposing (Task)
type alias JoinedMembersInputV1 =
{ accessToken : String
, baseUrl : String
, roomId : String
}
joinedMembersInputV1 : D.Decoder a -> (a -> b) -> JoinedMembersInputV1 -> Task X.Error b
joinedMembersInputV1 decoder mapping data =
R.rawApiCall
{ headers = R.WithAccessToken data.accessToken
, method = "GET"
, baseUrl = data.baseUrl
, path = "/_matrix/client/v3/rooms/{roomId}/joined_members"
, pathParams =
[ ( "roomId", data.roomId )
]
, queryParams = []
, bodyParams = []
, timeout = Nothing
, decoder = \_ -> D.map mapping decoder
}

View File

@ -0,0 +1,28 @@
module Internal.Api.JoinedMembers.Main exposing (..)
import Internal.Api.JoinedMembers.Api as Api
import Internal.Api.JoinedMembers.V1_2.Api as V1_2
import Internal.Api.JoinedMembers.V1_3.Api as V1_3
import Internal.Api.JoinedMembers.V1_4.Api as V1_4
import Internal.Api.JoinedMembers.V1_5.Api as V1_5
import Internal.Api.JoinedMembers.V1_5.Objects as O
import Internal.Api.VersionControl as V
import Internal.Tools.Exceptions as X
import Task exposing (Task)
joinedMembers : List String -> JoinedMembersInput -> JoinedMembersOutput
joinedMembers =
V.firstVersion V1_2.packet
|> V.updateWith V1_3.packet
|> V.updateWith V1_4.packet
|> V.updateWith V1_5.packet
|> V.toFunction
type alias JoinedMembersInput =
Api.JoinedMembersInputV1
type alias JoinedMembersOutput =
Task X.Error O.RoomMemberList

View File

@ -0,0 +1,17 @@
module Internal.Api.JoinedMembers.V1_2.Api exposing (..)
import Internal.Api.JoinedMembers.Api as Api
import Internal.Api.JoinedMembers.V1_2.Convert as C
import Internal.Api.JoinedMembers.V1_2.Objects as O
import Internal.Api.JoinedMembers.V1_2.SpecObjects as SO
import Internal.Api.JoinedMembers.V1_2.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion () () Api.JoinedMembersInputV1 O.RoomMemberList
packet =
{ version = "v1.2"
, downcast = \_ -> ()
, current = Api.joinedMembersInputV1 SO.roomMemberListDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,9 @@
module Internal.Api.JoinedMembers.V1_2.Convert exposing (..)
import Internal.Api.JoinedMembers.V1_2.Objects as O
import Internal.Api.JoinedMembers.V1_2.SpecObjects as SO
convert : SO.RoomMemberList -> O.RoomMemberList
convert =
identity

View File

@ -0,0 +1,69 @@
module Internal.Api.JoinedMembers.V1_2.Objects exposing
( RoomMember
, RoomMemberList
, encodeRoomMember
, encodeRoomMemberList
, roomMemberDecoder
, roomMemberListDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Dict exposing (Dict)
import Internal.Tools.DecodeExtra exposing (opField, opFieldWithDefault)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| User information of joined users.
-}
type alias RoomMember =
{ avatarUrl : Maybe String
, displayName : Maybe String
}
encodeRoomMember : RoomMember -> E.Value
encodeRoomMember data =
maybeObject
[ ( "avatar_url", Maybe.map E.string data.avatarUrl )
, ( "display_name", Maybe.map E.string data.displayName )
]
roomMemberDecoder : D.Decoder RoomMember
roomMemberDecoder =
D.map2
(\a b ->
{ avatarUrl = a, displayName = b }
)
(opField "avatar_url" D.string)
(opField "display_name" D.string)
{-| The dictionary containing all room member data.
-}
type alias RoomMemberList =
{ joined : Dict String RoomMember
}
encodeRoomMemberList : RoomMemberList -> E.Value
encodeRoomMemberList data =
maybeObject
[ ( "joined", Just <| E.dict identity encodeRoomMember data.joined )
]
roomMemberListDecoder : D.Decoder RoomMemberList
roomMemberListDecoder =
D.map
(\a ->
{ joined = a }
)
(opFieldWithDefault "joined" Dict.empty (D.dict roomMemberDecoder))

View File

@ -0,0 +1,17 @@
version: v1.2
name: Objects
objects:
RoomMemberList:
description: The dictionary containing all room member data.
fields:
joined:
type: "{RoomMember}"
required: false
default: Dict.empty
RoomMember:
description: User information of joined users.
fields:
avatar_url:
type: string
display_name:
type: string

View File

@ -0,0 +1,69 @@
module Internal.Api.JoinedMembers.V1_2.SpecObjects exposing
( RoomMember
, RoomMemberList
, encodeRoomMember
, encodeRoomMemberList
, roomMemberDecoder
, roomMemberListDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Dict exposing (Dict)
import Internal.Tools.DecodeExtra exposing (opField, opFieldWithDefault)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| User information of joined users.
-}
type alias RoomMember =
{ avatarUrl : Maybe String
, displayName : Maybe String
}
encodeRoomMember : RoomMember -> E.Value
encodeRoomMember data =
maybeObject
[ ( "avatar_url", Maybe.map E.string data.avatarUrl )
, ( "display_name", Maybe.map E.string data.displayName )
]
roomMemberDecoder : D.Decoder RoomMember
roomMemberDecoder =
D.map2
(\a b ->
{ avatarUrl = a, displayName = b }
)
(opField "avatar_url" D.string)
(opField "display_name" D.string)
{-| The dictionary containing all room member data.
-}
type alias RoomMemberList =
{ joined : Dict String RoomMember
}
encodeRoomMemberList : RoomMemberList -> E.Value
encodeRoomMemberList data =
maybeObject
[ ( "joined", Just <| E.dict identity encodeRoomMember data.joined )
]
roomMemberListDecoder : D.Decoder RoomMemberList
roomMemberListDecoder =
D.map
(\a ->
{ joined = a }
)
(opFieldWithDefault "joined" Dict.empty (D.dict roomMemberDecoder))

View File

@ -0,0 +1,17 @@
version: v1.2
name: SpecObjects
objects:
RoomMemberList:
description: The dictionary containing all room member data.
fields:
joined:
type: "{RoomMember}"
required: false
default: Dict.empty
RoomMember:
description: User information of joined users.
fields:
avatar_url:
type: string
display_name:
type: string

View File

@ -0,0 +1,9 @@
module Internal.Api.JoinedMembers.V1_2.Upcast exposing (..)
import Dict
import Internal.Api.JoinedMembers.V1_2.Objects as O
upcast : () -> O.RoomMemberList
upcast _ =
{ joined = Dict.empty }

View File

@ -0,0 +1,18 @@
module Internal.Api.JoinedMembers.V1_3.Api exposing (..)
import Internal.Api.JoinedMembers.Api as Api
import Internal.Api.JoinedMembers.V1_2.Objects as PO
import Internal.Api.JoinedMembers.V1_3.Convert as C
import Internal.Api.JoinedMembers.V1_3.Objects as O
import Internal.Api.JoinedMembers.V1_3.SpecObjects as SO
import Internal.Api.JoinedMembers.V1_3.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion Api.JoinedMembersInputV1 PO.RoomMemberList Api.JoinedMembersInputV1 O.RoomMemberList
packet =
{ version = "v1.3"
, downcast = identity
, current = Api.joinedMembersInputV1 SO.roomMemberListDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,9 @@
module Internal.Api.JoinedMembers.V1_3.Convert exposing (..)
import Internal.Api.JoinedMembers.V1_3.Objects as O
import Internal.Api.JoinedMembers.V1_3.SpecObjects as SO
convert : SO.RoomMemberList -> O.RoomMemberList
convert =
identity

View File

@ -0,0 +1,69 @@
module Internal.Api.JoinedMembers.V1_3.Objects exposing
( RoomMember
, RoomMemberList
, encodeRoomMember
, encodeRoomMemberList
, roomMemberDecoder
, roomMemberListDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Dict exposing (Dict)
import Internal.Tools.DecodeExtra exposing (opField, opFieldWithDefault)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| User information of joined users.
-}
type alias RoomMember =
{ avatarUrl : Maybe String
, displayName : Maybe String
}
encodeRoomMember : RoomMember -> E.Value
encodeRoomMember data =
maybeObject
[ ( "avatar_url", Maybe.map E.string data.avatarUrl )
, ( "display_name", Maybe.map E.string data.displayName )
]
roomMemberDecoder : D.Decoder RoomMember
roomMemberDecoder =
D.map2
(\a b ->
{ avatarUrl = a, displayName = b }
)
(opField "avatar_url" D.string)
(opField "display_name" D.string)
{-| The dictionary containing all room member data.
-}
type alias RoomMemberList =
{ joined : Dict String RoomMember
}
encodeRoomMemberList : RoomMemberList -> E.Value
encodeRoomMemberList data =
maybeObject
[ ( "joined", Just <| E.dict identity encodeRoomMember data.joined )
]
roomMemberListDecoder : D.Decoder RoomMemberList
roomMemberListDecoder =
D.map
(\a ->
{ joined = a }
)
(opFieldWithDefault "joined" Dict.empty (D.dict roomMemberDecoder))

View File

@ -0,0 +1,17 @@
version: v1.3
name: Objects
objects:
RoomMemberList:
description: The dictionary containing all room member data.
fields:
joined:
type: "{RoomMember}"
required: false
default: Dict.empty
RoomMember:
description: User information of joined users.
fields:
avatar_url:
type: string
display_name:
type: string

View File

@ -0,0 +1,69 @@
module Internal.Api.JoinedMembers.V1_3.SpecObjects exposing
( RoomMember
, RoomMemberList
, encodeRoomMember
, encodeRoomMemberList
, roomMemberDecoder
, roomMemberListDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Dict exposing (Dict)
import Internal.Tools.DecodeExtra exposing (opField, opFieldWithDefault)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| User information of joined users.
-}
type alias RoomMember =
{ avatarUrl : Maybe String
, displayName : Maybe String
}
encodeRoomMember : RoomMember -> E.Value
encodeRoomMember data =
maybeObject
[ ( "avatar_url", Maybe.map E.string data.avatarUrl )
, ( "display_name", Maybe.map E.string data.displayName )
]
roomMemberDecoder : D.Decoder RoomMember
roomMemberDecoder =
D.map2
(\a b ->
{ avatarUrl = a, displayName = b }
)
(opField "avatar_url" D.string)
(opField "display_name" D.string)
{-| The dictionary containing all room member data.
-}
type alias RoomMemberList =
{ joined : Dict String RoomMember
}
encodeRoomMemberList : RoomMemberList -> E.Value
encodeRoomMemberList data =
maybeObject
[ ( "joined", Just <| E.dict identity encodeRoomMember data.joined )
]
roomMemberListDecoder : D.Decoder RoomMemberList
roomMemberListDecoder =
D.map
(\a ->
{ joined = a }
)
(opFieldWithDefault "joined" Dict.empty (D.dict roomMemberDecoder))

View File

@ -0,0 +1,17 @@
version: v1.3
name: SpecObjects
objects:
RoomMemberList:
description: The dictionary containing all room member data.
fields:
joined:
type: "{RoomMember}"
required: false
default: Dict.empty
RoomMember:
description: User information of joined users.
fields:
avatar_url:
type: string
display_name:
type: string

View File

@ -0,0 +1,9 @@
module Internal.Api.JoinedMembers.V1_3.Upcast exposing (..)
import Internal.Api.JoinedMembers.V1_2.Objects as PO
import Internal.Api.JoinedMembers.V1_3.Objects as O
upcast : PO.RoomMemberList -> O.RoomMemberList
upcast =
identity

View File

@ -0,0 +1,18 @@
module Internal.Api.JoinedMembers.V1_4.Api exposing (..)
import Internal.Api.JoinedMembers.Api as Api
import Internal.Api.JoinedMembers.V1_3.Objects as PO
import Internal.Api.JoinedMembers.V1_4.Convert as C
import Internal.Api.JoinedMembers.V1_4.Objects as O
import Internal.Api.JoinedMembers.V1_4.SpecObjects as SO
import Internal.Api.JoinedMembers.V1_4.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion Api.JoinedMembersInputV1 PO.RoomMemberList Api.JoinedMembersInputV1 O.RoomMemberList
packet =
{ version = "v1.4"
, downcast = identity
, current = Api.joinedMembersInputV1 SO.roomMemberListDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,9 @@
module Internal.Api.JoinedMembers.V1_4.Convert exposing (..)
import Internal.Api.JoinedMembers.V1_4.Objects as O
import Internal.Api.JoinedMembers.V1_4.SpecObjects as SO
convert : SO.RoomMemberList -> O.RoomMemberList
convert =
identity

View File

@ -0,0 +1,69 @@
module Internal.Api.JoinedMembers.V1_4.Objects exposing
( RoomMember
, RoomMemberList
, encodeRoomMember
, encodeRoomMemberList
, roomMemberDecoder
, roomMemberListDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Dict exposing (Dict)
import Internal.Tools.DecodeExtra exposing (opField, opFieldWithDefault)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| User information of joined users.
-}
type alias RoomMember =
{ avatarUrl : Maybe String
, displayName : Maybe String
}
encodeRoomMember : RoomMember -> E.Value
encodeRoomMember data =
maybeObject
[ ( "avatar_url", Maybe.map E.string data.avatarUrl )
, ( "display_name", Maybe.map E.string data.displayName )
]
roomMemberDecoder : D.Decoder RoomMember
roomMemberDecoder =
D.map2
(\a b ->
{ avatarUrl = a, displayName = b }
)
(opField "avatar_url" D.string)
(opField "display_name" D.string)
{-| The dictionary containing all room member data.
-}
type alias RoomMemberList =
{ joined : Dict String RoomMember
}
encodeRoomMemberList : RoomMemberList -> E.Value
encodeRoomMemberList data =
maybeObject
[ ( "joined", Just <| E.dict identity encodeRoomMember data.joined )
]
roomMemberListDecoder : D.Decoder RoomMemberList
roomMemberListDecoder =
D.map
(\a ->
{ joined = a }
)
(opFieldWithDefault "joined" Dict.empty (D.dict roomMemberDecoder))

View File

@ -0,0 +1,17 @@
version: v1.4
name: Objects
objects:
RoomMemberList:
description: The dictionary containing all room member data.
fields:
joined:
type: "{RoomMember}"
required: false
default: Dict.empty
RoomMember:
description: User information of joined users.
fields:
avatar_url:
type: string
display_name:
type: string

View File

@ -0,0 +1,69 @@
module Internal.Api.JoinedMembers.V1_4.SpecObjects exposing
( RoomMember
, RoomMemberList
, encodeRoomMember
, encodeRoomMemberList
, roomMemberDecoder
, roomMemberListDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Dict exposing (Dict)
import Internal.Tools.DecodeExtra exposing (opField, opFieldWithDefault)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| User information of joined users.
-}
type alias RoomMember =
{ avatarUrl : Maybe String
, displayName : Maybe String
}
encodeRoomMember : RoomMember -> E.Value
encodeRoomMember data =
maybeObject
[ ( "avatar_url", Maybe.map E.string data.avatarUrl )
, ( "display_name", Maybe.map E.string data.displayName )
]
roomMemberDecoder : D.Decoder RoomMember
roomMemberDecoder =
D.map2
(\a b ->
{ avatarUrl = a, displayName = b }
)
(opField "avatar_url" D.string)
(opField "display_name" D.string)
{-| The dictionary containing all room member data.
-}
type alias RoomMemberList =
{ joined : Dict String RoomMember
}
encodeRoomMemberList : RoomMemberList -> E.Value
encodeRoomMemberList data =
maybeObject
[ ( "joined", Just <| E.dict identity encodeRoomMember data.joined )
]
roomMemberListDecoder : D.Decoder RoomMemberList
roomMemberListDecoder =
D.map
(\a ->
{ joined = a }
)
(opFieldWithDefault "joined" Dict.empty (D.dict roomMemberDecoder))

View File

@ -0,0 +1,17 @@
version: v1.4
name: SpecObjects
objects:
RoomMemberList:
description: The dictionary containing all room member data.
fields:
joined:
type: "{RoomMember}"
required: false
default: Dict.empty
RoomMember:
description: User information of joined users.
fields:
avatar_url:
type: string
display_name:
type: string

View File

@ -0,0 +1,9 @@
module Internal.Api.JoinedMembers.V1_4.Upcast exposing (..)
import Internal.Api.JoinedMembers.V1_3.Objects as PO
import Internal.Api.JoinedMembers.V1_4.Objects as O
upcast : PO.RoomMemberList -> O.RoomMemberList
upcast =
identity

View File

@ -0,0 +1,18 @@
module Internal.Api.JoinedMembers.V1_5.Api exposing (..)
import Internal.Api.JoinedMembers.Api as Api
import Internal.Api.JoinedMembers.V1_4.Objects as PO
import Internal.Api.JoinedMembers.V1_5.Convert as C
import Internal.Api.JoinedMembers.V1_5.Objects as O
import Internal.Api.JoinedMembers.V1_5.SpecObjects as SO
import Internal.Api.JoinedMembers.V1_5.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion Api.JoinedMembersInputV1 PO.RoomMemberList Api.JoinedMembersInputV1 O.RoomMemberList
packet =
{ version = "v1.5"
, downcast = identity
, current = Api.joinedMembersInputV1 SO.roomMemberListDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,9 @@
module Internal.Api.JoinedMembers.V1_5.Convert exposing (..)
import Internal.Api.JoinedMembers.V1_5.Objects as O
import Internal.Api.JoinedMembers.V1_5.SpecObjects as SO
convert : SO.RoomMemberList -> O.RoomMemberList
convert =
identity

View File

@ -0,0 +1,69 @@
module Internal.Api.JoinedMembers.V1_5.Objects exposing
( RoomMember
, RoomMemberList
, encodeRoomMember
, encodeRoomMemberList
, roomMemberDecoder
, roomMemberListDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Dict exposing (Dict)
import Internal.Tools.DecodeExtra exposing (opField, opFieldWithDefault)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| User information of joined users.
-}
type alias RoomMember =
{ avatarUrl : Maybe String
, displayName : Maybe String
}
encodeRoomMember : RoomMember -> E.Value
encodeRoomMember data =
maybeObject
[ ( "avatar_url", Maybe.map E.string data.avatarUrl )
, ( "display_name", Maybe.map E.string data.displayName )
]
roomMemberDecoder : D.Decoder RoomMember
roomMemberDecoder =
D.map2
(\a b ->
{ avatarUrl = a, displayName = b }
)
(opField "avatar_url" D.string)
(opField "display_name" D.string)
{-| The dictionary containing all room member data.
-}
type alias RoomMemberList =
{ joined : Dict String RoomMember
}
encodeRoomMemberList : RoomMemberList -> E.Value
encodeRoomMemberList data =
maybeObject
[ ( "joined", Just <| E.dict identity encodeRoomMember data.joined )
]
roomMemberListDecoder : D.Decoder RoomMemberList
roomMemberListDecoder =
D.map
(\a ->
{ joined = a }
)
(opFieldWithDefault "joined" Dict.empty (D.dict roomMemberDecoder))

View File

@ -0,0 +1,17 @@
version: v1.5
name: Objects
objects:
RoomMemberList:
description: The dictionary containing all room member data.
fields:
joined:
type: "{RoomMember}"
required: false
default: Dict.empty
RoomMember:
description: User information of joined users.
fields:
avatar_url:
type: string
display_name:
type: string

View File

@ -0,0 +1,69 @@
module Internal.Api.JoinedMembers.V1_5.SpecObjects exposing
( RoomMember
, RoomMemberList
, encodeRoomMember
, encodeRoomMemberList
, roomMemberDecoder
, roomMemberListDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Dict exposing (Dict)
import Internal.Tools.DecodeExtra exposing (opField, opFieldWithDefault)
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| User information of joined users.
-}
type alias RoomMember =
{ avatarUrl : Maybe String
, displayName : Maybe String
}
encodeRoomMember : RoomMember -> E.Value
encodeRoomMember data =
maybeObject
[ ( "avatar_url", Maybe.map E.string data.avatarUrl )
, ( "display_name", Maybe.map E.string data.displayName )
]
roomMemberDecoder : D.Decoder RoomMember
roomMemberDecoder =
D.map2
(\a b ->
{ avatarUrl = a, displayName = b }
)
(opField "avatar_url" D.string)
(opField "display_name" D.string)
{-| The dictionary containing all room member data.
-}
type alias RoomMemberList =
{ joined : Dict String RoomMember
}
encodeRoomMemberList : RoomMemberList -> E.Value
encodeRoomMemberList data =
maybeObject
[ ( "joined", Just <| E.dict identity encodeRoomMember data.joined )
]
roomMemberListDecoder : D.Decoder RoomMemberList
roomMemberListDecoder =
D.map
(\a ->
{ joined = a }
)
(opFieldWithDefault "joined" Dict.empty (D.dict roomMemberDecoder))

View File

@ -0,0 +1,17 @@
version: v1.5
name: SpecObjects
objects:
RoomMemberList:
description: The dictionary containing all room member data.
fields:
joined:
type: "{RoomMember}"
required: false
default: Dict.empty
RoomMember:
description: User information of joined users.
fields:
avatar_url:
type: string
display_name:
type: string

View File

@ -0,0 +1,9 @@
module Internal.Api.JoinedMembers.V1_5.Upcast exposing (..)
import Internal.Api.JoinedMembers.V1_4.Objects as PO
import Internal.Api.JoinedMembers.V1_5.Objects as O
upcast : PO.RoomMemberList -> O.RoomMemberList
upcast =
identity

View File

@ -0,0 +1,284 @@
module Internal.Api.Request exposing (..)
import Http
import Internal.Tools.Exceptions as X
import Json.Decode as D
import Json.Encode as E
import Process
import Task exposing (Task)
import Time
import Url.Builder as UrlBuilder
{-| Make a raw API call to a Matrix API.
-}
rawApiCall :
{ headers : Headers
, method : String
, baseUrl : String
, path : String
, pathParams : List ( String, String )
, queryParams : List QueryParam
, bodyParams : List BodyParam
, timeout : Maybe Float
, decoder : Int -> D.Decoder a
}
-> Task X.Error a
rawApiCall data =
Http.task
{ method = data.method
, headers = fromHeaders data.headers
, url = buildUrl data.baseUrl data.path data.pathParams data.queryParams
, body = toBody data.bodyParams
, resolver = rawApiCallResolver data.decoder
, timeout = data.timeout
}
withRateLimits : Int -> Task X.Error a -> Task X.Error a
withRateLimits timeout task =
Time.now
|> Task.onError
(\_ -> X.CouldntGetTimestamp |> X.SDKException |> Task.fail)
|> Task.andThen
(\now ->
task
|> Task.onError
(\err ->
case err of
X.ServerException (X.M_LIMIT_EXCEEDED data) ->
case data.retryAfterMs of
Just t ->
Process.sleep (toFloat t)
|> Task.andThen (\_ -> Time.now)
|> Task.andThen
(\newNow ->
let
diff : Int
diff =
timeout - (Time.posixToMillis newNow - Time.posixToMillis now)
in
if diff <= 0 then
Task.fail err
else
withRateLimits diff task
)
Nothing ->
Task.fail err
_ ->
Task.fail err
)
)
{-| Potential headers to go along with a Matrix API call.
-}
type Headers
= NoHeaders
| WithAccessToken String
| WithContentType String
| WithBoth { accessToken : String, contentType : String }
{-| Turn Headers into useful values
-}
fromHeaders : Headers -> List Http.Header
fromHeaders h =
(case h of
NoHeaders ->
[ ( "Content-Type", "application/json" ) ]
WithAccessToken token ->
[ ( "Content-Type", "application/json" ), ( "Authorization", "Bearer " ++ token ) ]
WithContentType contentType ->
[ ( "Content-Type", contentType ) ]
WithBoth data ->
[ ( "Content-Type", data.contentType ), ( "Authorization", "Bearer " ++ data.accessToken ) ]
)
|> List.map (\( a, b ) -> Http.header a b)
{-| -}
type QueryParam
= QueryParamString String String
| OpQueryParamString String (Maybe String)
| QueryParamInt String Int
| OpQueryParamInt String (Maybe Int)
| QueryParamBool String Bool
| OpQueryParamBool String (Maybe Bool)
fromQueryParam : QueryParam -> Maybe UrlBuilder.QueryParameter
fromQueryParam param =
case param of
QueryParamString key value ->
Just <| UrlBuilder.string key value
OpQueryParamString key value ->
Maybe.map (UrlBuilder.string key) value
QueryParamInt key value ->
Just <| UrlBuilder.int key value
OpQueryParamInt key value ->
Maybe.map (UrlBuilder.int key) value
QueryParamBool key value ->
if value then
Just <| UrlBuilder.string key "true"
else
Just <| UrlBuilder.string key "false"
OpQueryParamBool key value ->
Maybe.andThen (QueryParamBool key >> fromQueryParam) value
fromQueryParams : List QueryParam -> List UrlBuilder.QueryParameter
fromQueryParams =
List.map fromQueryParam
>> List.filterMap identity
buildUrl : String -> String -> List ( String, String ) -> List QueryParam -> String
buildUrl baseUrl path pathParams queryParams =
let
fullPath : String
fullPath =
List.foldl
(\( a, b ) -> String.replace ("{" ++ a ++ "}") b)
path
pathParams
|> (\s ->
if String.startsWith "/" s then
String.dropLeft 1 s
else
s
)
in
UrlBuilder.crossOrigin baseUrl [ fullPath ] (fromQueryParams queryParams)
{-| Type that gathers all parameters that go in the request body.
-}
type BodyParam
= OptionalString String (Maybe String)
| RequiredString String String
| OptionalInt String (Maybe Int)
| RequiredInt String Int
| OptionalValue String (Maybe E.Value)
| RequiredValue String E.Value
encodeBodyParam : BodyParam -> ( String, Maybe E.Value )
encodeBodyParam b =
case b of
OptionalString h s ->
( h, Maybe.map E.string s )
RequiredString h s ->
( h, Just <| E.string s )
OptionalInt h i ->
( h, Maybe.map E.int i )
RequiredInt h i ->
( h, Just <| E.int i )
OptionalValue h v ->
( h, v )
RequiredValue h v ->
( h, Just v )
toBody : List BodyParam -> Http.Body
toBody params =
case params of
(RequiredValue "*" v) :: [] ->
Http.jsonBody v
_ ->
List.map encodeBodyParam params
|> maybeObject
|> Http.jsonBody
{-| Create a body object based on optionally provided values.
-}
maybeObject : List ( String, Maybe E.Value ) -> E.Value
maybeObject =
List.filterMap
(\( name, value ) ->
case value of
Just v ->
Just ( name, v )
_ ->
Nothing
)
>> E.object
rawApiCallResolver : (Int -> D.Decoder a) -> Http.Resolver X.Error a
rawApiCallResolver decoder =
Http.stringResolver
(\response ->
case response of
Http.BadUrl_ s ->
Http.BadUrl s
|> X.InternetException
|> Err
Http.Timeout_ ->
Http.Timeout
|> X.InternetException
|> Err
Http.NetworkError_ ->
Http.NetworkError
|> X.InternetException
|> Err
Http.BadStatus_ metadata body ->
decodeServerResponse (decoder metadata.statusCode) body
Http.GoodStatus_ metadata body ->
decodeServerResponse (decoder metadata.statusCode) body
)
decodeServerResponse : D.Decoder a -> String -> Result X.Error a
decodeServerResponse decoder body =
case D.decodeString D.value body of
Err e ->
e
|> D.errorToString
|> X.ServerReturnsBadJSON
|> X.SDKException
|> Err
Ok _ ->
case D.decodeString decoder body of
Ok v ->
Ok v
Err err ->
-- The response is not valid!
-- Check if it is a valid error type as defined in spec.
case D.decodeString X.errorCatches body of
Ok v ->
Err (X.ServerException v)
Err _ ->
err
|> D.errorToString
|> X.ServerReturnsBadJSON
|> X.SDKException
|> Err

View File

@ -0,0 +1,35 @@
module Internal.Api.SendMessageEvent.Api exposing (..)
import Internal.Api.Request as R
import Internal.Tools.Exceptions as X
import Json.Decode as D
import Task exposing (Task)
type alias SendMessageEventInputV1 =
{ accessToken : String
, baseUrl : String
, content : D.Value
, eventType : String
, roomId : String
, transactionId : String
}
sendMessageEventV1 : D.Decoder a -> (a -> b) -> SendMessageEventInputV1 -> Task X.Error b
sendMessageEventV1 decoder mapping data =
R.rawApiCall
{ headers = R.WithAccessToken data.accessToken
, method = "PUT"
, baseUrl = data.baseUrl
, path = "/_matrix/client/v3/rooms/{roomId}/send/{eventType}/{txnId}"
, pathParams =
[ ( "eventType", data.eventType )
, ( "roomId", data.roomId )
, ( "txnId", data.transactionId )
]
, queryParams = []
, bodyParams = [ R.RequiredValue "*" data.content ]
, timeout = Nothing
, decoder = \_ -> D.map mapping decoder
}

View File

@ -0,0 +1,28 @@
module Internal.Api.SendMessageEvent.Main exposing (..)
import Internal.Api.SendMessageEvent.Api as Api
import Internal.Api.SendMessageEvent.V1_2.Api as V1_2
import Internal.Api.SendMessageEvent.V1_3.Api as V1_3
import Internal.Api.SendMessageEvent.V1_4.Api as V1_4
import Internal.Api.SendMessageEvent.V1_5.Api as V1_5
import Internal.Api.SendMessageEvent.V1_5.Objects as O
import Internal.Api.VersionControl as V
import Internal.Tools.Exceptions as X
import Task exposing (Task)
sendMessageEvent : List String -> SendMessageEventInput -> SendMessageEventOutput
sendMessageEvent =
V.firstVersion V1_2.packet
|> V.updateWith V1_3.packet
|> V.updateWith V1_4.packet
|> V.updateWith V1_5.packet
|> V.toFunction
type alias SendMessageEventInput =
Api.SendMessageEventInputV1
type alias SendMessageEventOutput =
Task X.Error O.EventResponse

View File

@ -0,0 +1,16 @@
module Internal.Api.SendMessageEvent.V1_2.Api exposing (..)
import Internal.Api.SendMessageEvent.Api as Api
import Internal.Api.SendMessageEvent.V1_2.Convert as C
import Internal.Api.SendMessageEvent.V1_2.Objects as O
import Internal.Api.SendMessageEvent.V1_2.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion () () Api.SendMessageEventInputV1 O.EventResponse
packet =
{ version = "v1.2"
, downcast = \_ -> ()
, current = Api.sendMessageEventV1 O.eventResponseDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,9 @@
module Internal.Api.SendMessageEvent.V1_2.Convert exposing (..)
import Internal.Api.SendMessageEvent.V1_2.Objects as O
import Internal.Api.SendMessageEvent.V1_2.SpecObjects as SO
convert : SO.EventResponse -> O.EventResponse
convert =
identity

View File

@ -0,0 +1,38 @@
module Internal.Api.SendMessageEvent.V1_2.Objects exposing
( EventResponse
, encodeEventResponse
, eventResponseDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| A response confirming that an event has been sent.
-}
type alias EventResponse =
{ eventId : String
}
encodeEventResponse : EventResponse -> E.Value
encodeEventResponse data =
maybeObject
[ ( "event_id", Just <| E.string data.eventId )
]
eventResponseDecoder : D.Decoder EventResponse
eventResponseDecoder =
D.map
(\a ->
{ eventId = a }
)
(D.field "event_id" D.string)

View File

@ -0,0 +1,9 @@
version: v1.2
name: Objects
objects:
EventResponse:
description: A response confirming that an event has been sent.
fields:
event_id:
type: string
required: true

View File

@ -0,0 +1,38 @@
module Internal.Api.SendMessageEvent.V1_2.SpecObjects exposing
( EventResponse
, encodeEventResponse
, eventResponseDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| A response confirming that an event has been sent.
-}
type alias EventResponse =
{ eventId : String
}
encodeEventResponse : EventResponse -> E.Value
encodeEventResponse data =
maybeObject
[ ( "event_id", Just <| E.string data.eventId )
]
eventResponseDecoder : D.Decoder EventResponse
eventResponseDecoder =
D.map
(\a ->
{ eventId = a }
)
(D.field "event_id" D.string)

View File

@ -0,0 +1,9 @@
version: v1.2
name: SpecObjects
objects:
EventResponse:
description: A response confirming that an event has been sent.
fields:
event_id:
type: string
required: true

View File

@ -0,0 +1,9 @@
module Internal.Api.SendMessageEvent.V1_2.Upcast exposing (..)
import Internal.Api.SendMessageEvent.V1_2.Objects as O
import Internal.Config.Leaking as L
upcast : () -> O.EventResponse
upcast _ =
{ eventId = L.eventId }

View File

@ -0,0 +1,17 @@
module Internal.Api.SendMessageEvent.V1_3.Api exposing (..)
import Internal.Api.SendMessageEvent.Api as Api
import Internal.Api.SendMessageEvent.V1_2.Objects as PO
import Internal.Api.SendMessageEvent.V1_3.Convert as C
import Internal.Api.SendMessageEvent.V1_3.Objects as O
import Internal.Api.SendMessageEvent.V1_3.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion Api.SendMessageEventInputV1 PO.EventResponse Api.SendMessageEventInputV1 O.EventResponse
packet =
{ version = "v1.3"
, downcast = identity
, current = Api.sendMessageEventV1 O.eventResponseDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,9 @@
module Internal.Api.SendMessageEvent.V1_3.Convert exposing (..)
import Internal.Api.SendMessageEvent.V1_3.Objects as O
import Internal.Api.SendMessageEvent.V1_3.SpecObjects as SO
convert : SO.EventResponse -> O.EventResponse
convert =
identity

View File

@ -0,0 +1,38 @@
module Internal.Api.SendMessageEvent.V1_3.Objects exposing
( EventResponse
, encodeEventResponse
, eventResponseDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| A response confirming that an event has been sent.
-}
type alias EventResponse =
{ eventId : String
}
encodeEventResponse : EventResponse -> E.Value
encodeEventResponse data =
maybeObject
[ ( "event_id", Just <| E.string data.eventId )
]
eventResponseDecoder : D.Decoder EventResponse
eventResponseDecoder =
D.map
(\a ->
{ eventId = a }
)
(D.field "event_id" D.string)

View File

@ -0,0 +1,9 @@
version: v1.3
name: Objects
objects:
EventResponse:
description: A response confirming that an event has been sent.
fields:
event_id:
type: string
required: true

View File

@ -0,0 +1,38 @@
module Internal.Api.SendMessageEvent.V1_3.SpecObjects exposing
( EventResponse
, encodeEventResponse
, eventResponseDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| A response confirming that an event has been sent.
-}
type alias EventResponse =
{ eventId : String
}
encodeEventResponse : EventResponse -> E.Value
encodeEventResponse data =
maybeObject
[ ( "event_id", Just <| E.string data.eventId )
]
eventResponseDecoder : D.Decoder EventResponse
eventResponseDecoder =
D.map
(\a ->
{ eventId = a }
)
(D.field "event_id" D.string)

View File

@ -0,0 +1,9 @@
version: v1.3
name: SpecObjects
objects:
EventResponse:
description: A response confirming that an event has been sent.
fields:
event_id:
type: string
required: true

View File

@ -0,0 +1,9 @@
module Internal.Api.SendMessageEvent.V1_3.Upcast exposing (..)
import Internal.Api.SendMessageEvent.V1_2.Objects as PO
import Internal.Api.SendMessageEvent.V1_3.Objects as O
upcast : PO.EventResponse -> O.EventResponse
upcast =
identity

View File

@ -0,0 +1,17 @@
module Internal.Api.SendMessageEvent.V1_4.Api exposing (..)
import Internal.Api.SendMessageEvent.Api as Api
import Internal.Api.SendMessageEvent.V1_3.Objects as PO
import Internal.Api.SendMessageEvent.V1_4.Convert as C
import Internal.Api.SendMessageEvent.V1_4.Objects as O
import Internal.Api.SendMessageEvent.V1_4.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion Api.SendMessageEventInputV1 PO.EventResponse Api.SendMessageEventInputV1 O.EventResponse
packet =
{ version = "v1.4"
, downcast = identity
, current = Api.sendMessageEventV1 O.eventResponseDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,9 @@
module Internal.Api.SendMessageEvent.V1_4.Convert exposing (..)
import Internal.Api.SendMessageEvent.V1_4.Objects as O
import Internal.Api.SendMessageEvent.V1_4.SpecObjects as SO
convert : SO.EventResponse -> O.EventResponse
convert =
identity

View File

@ -0,0 +1,38 @@
module Internal.Api.SendMessageEvent.V1_4.Objects exposing
( EventResponse
, encodeEventResponse
, eventResponseDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| A response confirming that an event has been sent.
-}
type alias EventResponse =
{ eventId : String
}
encodeEventResponse : EventResponse -> E.Value
encodeEventResponse data =
maybeObject
[ ( "event_id", Just <| E.string data.eventId )
]
eventResponseDecoder : D.Decoder EventResponse
eventResponseDecoder =
D.map
(\a ->
{ eventId = a }
)
(D.field "event_id" D.string)

View File

@ -0,0 +1,9 @@
version: v1.4
name: Objects
objects:
EventResponse:
description: A response confirming that an event has been sent.
fields:
event_id:
type: string
required: true

View File

@ -0,0 +1,38 @@
module Internal.Api.SendMessageEvent.V1_4.SpecObjects exposing
( EventResponse
, encodeEventResponse
, eventResponseDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| A response confirming that an event has been sent.
-}
type alias EventResponse =
{ eventId : String
}
encodeEventResponse : EventResponse -> E.Value
encodeEventResponse data =
maybeObject
[ ( "event_id", Just <| E.string data.eventId )
]
eventResponseDecoder : D.Decoder EventResponse
eventResponseDecoder =
D.map
(\a ->
{ eventId = a }
)
(D.field "event_id" D.string)

View File

@ -0,0 +1,9 @@
version: v1.4
name: SpecObjects
objects:
EventResponse:
description: A response confirming that an event has been sent.
fields:
event_id:
type: string
required: true

View File

@ -0,0 +1,9 @@
module Internal.Api.SendMessageEvent.V1_4.Upcast exposing (..)
import Internal.Api.SendMessageEvent.V1_3.Objects as PO
import Internal.Api.SendMessageEvent.V1_4.Objects as O
upcast : PO.EventResponse -> O.EventResponse
upcast =
identity

View File

@ -0,0 +1,17 @@
module Internal.Api.SendMessageEvent.V1_5.Api exposing (..)
import Internal.Api.SendMessageEvent.Api as Api
import Internal.Api.SendMessageEvent.V1_4.Objects as PO
import Internal.Api.SendMessageEvent.V1_5.Convert as C
import Internal.Api.SendMessageEvent.V1_5.Objects as O
import Internal.Api.SendMessageEvent.V1_5.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion Api.SendMessageEventInputV1 PO.EventResponse Api.SendMessageEventInputV1 O.EventResponse
packet =
{ version = "v1.5"
, downcast = identity
, current = Api.sendMessageEventV1 O.eventResponseDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,9 @@
module Internal.Api.SendMessageEvent.V1_5.Convert exposing (..)
import Internal.Api.SendMessageEvent.V1_5.Objects as O
import Internal.Api.SendMessageEvent.V1_5.SpecObjects as SO
convert : SO.EventResponse -> O.EventResponse
convert =
identity

View File

@ -0,0 +1,38 @@
module Internal.Api.SendMessageEvent.V1_5.Objects exposing
( EventResponse
, encodeEventResponse
, eventResponseDecoder
)
{-| Automatically generated 'Objects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| A response confirming that an event has been sent.
-}
type alias EventResponse =
{ eventId : String
}
encodeEventResponse : EventResponse -> E.Value
encodeEventResponse data =
maybeObject
[ ( "event_id", Just <| E.string data.eventId )
]
eventResponseDecoder : D.Decoder EventResponse
eventResponseDecoder =
D.map
(\a ->
{ eventId = a }
)
(D.field "event_id" D.string)

View File

@ -0,0 +1,9 @@
version: v1.5
name: Objects
objects:
EventResponse:
description: A response confirming that an event has been sent.
fields:
event_id:
type: string
required: true

View File

@ -0,0 +1,38 @@
module Internal.Api.SendMessageEvent.V1_5.SpecObjects exposing
( EventResponse
, encodeEventResponse
, eventResponseDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| A response confirming that an event has been sent.
-}
type alias EventResponse =
{ eventId : String
}
encodeEventResponse : EventResponse -> E.Value
encodeEventResponse data =
maybeObject
[ ( "event_id", Just <| E.string data.eventId )
]
eventResponseDecoder : D.Decoder EventResponse
eventResponseDecoder =
D.map
(\a ->
{ eventId = a }
)
(D.field "event_id" D.string)

View File

@ -0,0 +1,9 @@
version: v1.5
name: SpecObjects
objects:
EventResponse:
description: A response confirming that an event has been sent.
fields:
event_id:
type: string
required: true

View File

@ -0,0 +1,9 @@
module Internal.Api.SendMessageEvent.V1_5.Upcast exposing (..)
import Internal.Api.SendMessageEvent.V1_4.Objects as PO
import Internal.Api.SendMessageEvent.V1_5.Objects as O
upcast : PO.EventResponse -> O.EventResponse
upcast =
identity

View File

@ -0,0 +1,35 @@
module Internal.Api.SendStateKey.Api exposing (..)
import Internal.Api.Request as R
import Internal.Tools.Exceptions as X
import Json.Decode as D
import Task exposing (Task)
type alias SendStateKeyInputV1 =
{ accessToken : String
, baseUrl : String
, content : D.Value
, eventType : String
, roomId : String
, stateKey : String
}
sendStateKeyV1 : D.Decoder a -> (a -> b) -> SendStateKeyInputV1 -> Task X.Error b
sendStateKeyV1 decoder mapping data =
R.rawApiCall
{ headers = R.WithAccessToken data.accessToken
, method = "PUT"
, baseUrl = data.baseUrl
, path = "/_matrix/client/v3/rooms/{roomId}/state/{eventType}/{stateKey}"
, pathParams =
[ ( "eventType", data.eventType )
, ( "roomId", data.roomId )
, ( "stateKey", data.stateKey )
]
, queryParams = []
, bodyParams = [ R.RequiredValue "*" data.content ]
, timeout = Nothing
, decoder = \_ -> D.map mapping decoder
}

View File

@ -0,0 +1,28 @@
module Internal.Api.SendStateKey.Main exposing (..)
import Internal.Api.SendStateKey.Api as Api
import Internal.Api.SendStateKey.V1_2.Api as V1_2
import Internal.Api.SendStateKey.V1_3.Api as V1_3
import Internal.Api.SendStateKey.V1_4.Api as V1_4
import Internal.Api.SendStateKey.V1_5.Api as V1_5
import Internal.Api.SendStateKey.V1_5.Objects as O
import Internal.Api.VersionControl as V
import Internal.Tools.Exceptions as X
import Task exposing (Task)
sendStateKey : List String -> SendStateKeyInput -> SendStateKeyOutput
sendStateKey =
V.firstVersion V1_2.packet
|> V.updateWith V1_3.packet
|> V.updateWith V1_4.packet
|> V.updateWith V1_5.packet
|> V.toFunction
type alias SendStateKeyInput =
Api.SendStateKeyInputV1
type alias SendStateKeyOutput =
Task X.Error O.EventResponse

View File

@ -0,0 +1,16 @@
module Internal.Api.SendStateKey.V1_2.Api exposing (..)
import Internal.Api.SendStateKey.Api as Api
import Internal.Api.SendStateKey.V1_2.Convert as C
import Internal.Api.SendStateKey.V1_2.Objects as O
import Internal.Api.SendStateKey.V1_2.Upcast as U
import Internal.Api.VersionControl as V
packet : V.SingleVersion () () Api.SendStateKeyInputV1 O.EventResponse
packet =
{ version = "v1.2"
, downcast = \_ -> ()
, current = Api.sendStateKeyV1 O.eventResponseDecoder C.convert
, upcast = U.upcast
}

View File

@ -0,0 +1,9 @@
module Internal.Api.SendStateKey.V1_2.Convert exposing (..)
import Internal.Api.SendStateKey.V1_2.Objects as O
import Internal.Api.SendStateKey.V1_2.SpecObjects as SO
convert : SO.EventResponse -> O.EventResponse
convert =
identity

View File

@ -0,0 +1,38 @@
module Internal.Api.SendStateKey.V1_2.Objects exposing
( EventResponse
, encodeEventResponse
, eventResponseDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| A response confirming that an event has been sent.
-}
type alias EventResponse =
{ eventId : String
}
encodeEventResponse : EventResponse -> E.Value
encodeEventResponse data =
maybeObject
[ ( "event_id", Just <| E.string data.eventId )
]
eventResponseDecoder : D.Decoder EventResponse
eventResponseDecoder =
D.map
(\a ->
{ eventId = a }
)
(D.field "event_id" D.string)

View File

@ -0,0 +1,9 @@
version: v1.2
name: SpecObjects
objects:
EventResponse:
description: A response confirming that an event has been sent.
fields:
event_id:
type: string
required: true

View File

@ -0,0 +1,38 @@
module Internal.Api.SendStateKey.V1_2.SpecObjects exposing
( EventResponse
, encodeEventResponse
, eventResponseDecoder
)
{-| Automatically generated 'SpecObjects'
Last generated at Unix time 1673279712
-}
import Internal.Tools.EncodeExtra exposing (maybeObject)
import Json.Decode as D
import Json.Encode as E
{-| A response confirming that an event has been sent.
-}
type alias EventResponse =
{ eventId : String
}
encodeEventResponse : EventResponse -> E.Value
encodeEventResponse data =
maybeObject
[ ( "event_id", Just <| E.string data.eventId )
]
eventResponseDecoder : D.Decoder EventResponse
eventResponseDecoder =
D.map
(\a ->
{ eventId = a }
)
(D.field "event_id" D.string)

View File

@ -0,0 +1,9 @@
version: v1.2
name: SpecObjects
objects:
EventResponse:
description: A response confirming that an event has been sent.
fields:
event_id:
type: string
required: true

View File

@ -0,0 +1,9 @@
module Internal.Api.SendStateKey.V1_2.Upcast exposing (..)
import Internal.Api.SendStateKey.V1_2.Objects as O
import Internal.Config.Leaking as L
upcast : () -> O.EventResponse
upcast _ =
{ eventId = L.eventId }

Some files were not shown because too many files have changed in this diff Show More