module Ecluse.Core.Registry.Npm (
relayPublishDocument,
) where
import Ecluse.Core.Package (PackageName)
import Ecluse.Core.Registry (
FetchFault (FetchUrlUnformable),
PublishRelayResponse,
)
import Ecluse.Core.Registry.Exchange (boundedRelay, formThen)
import Ecluse.Core.Registry.Npm.Publish (publishRequest)
import Ecluse.Core.Registry.Origin (OriginClient (ocLimits, ocManager, ocToken), originBaseUrl)
import Ecluse.Core.Security (BodyLimit (MetadataBodyLimit), Limits (progressFloor), maxMetadataBytes)
relayPublishDocument ::
OriginClient ->
PackageName ->
ByteString ->
IO (Either FetchFault PublishRelayResponse)
relayPublishDocument :: OriginClient
-> PackageName
-> ByteString
-> IO (Either FetchFault PublishRelayResponse)
relayPublishDocument OriginClient
origin PackageName
name ByteString
document =
(UrlFormationError -> FetchFault)
-> (Request -> IO (Either FetchFault PublishRelayResponse))
-> Either UrlFormationError Request
-> IO (Either FetchFault PublishRelayResponse)
forall fault a.
(UrlFormationError -> fault)
-> (Request -> IO (Either fault a))
-> Either UrlFormationError Request
-> IO (Either fault a)
formThen
UrlFormationError -> FetchFault
FetchUrlUnformable
(Manager
-> ProgressFloor
-> BodyLimit
-> Request
-> IO (Either FetchFault PublishRelayResponse)
boundedRelay (OriginClient -> Manager
ocManager OriginClient
origin) (Limits -> ProgressFloor
progressFloor (OriginClient -> Limits
ocLimits OriginClient
origin)) (Int -> BodyLimit
MetadataBodyLimit (Limits -> Int
maxMetadataBytes (OriginClient -> Limits
ocLimits OriginClient
origin))))
(Text
-> Maybe ClientCredential
-> PackageName
-> ByteString
-> Either UrlFormationError Request
publishRequest (OriginClient -> Text
originBaseUrl OriginClient
origin) (OriginClient -> Maybe ClientCredential
ocToken OriginClient
origin) PackageName
name ByteString
document)