packages feed

hstratus 0.1.0.0 → 0.1.1.0

raw patch · 8 files changed

+99/−7 lines, 8 filesdep ~hstratus-auth

Dependency ranges changed: hstratus-auth

Files

ChangeLog.md view
@@ -2,6 +2,11 @@  `hstratus` uses [PVP Versioning][1]. +## 0.1.1.0 -- 2026-07-30++* Add `Hstratus.Cli.Common` (parser for shared CLI options).+* Remove dependency on `hstratus-auth-cli` sublibrary.+ ## 0.1.0.0 -- 2026-07-28  * Initial version.
hstratus.cabal view
@@ -1,6 +1,6 @@ cabal-version:      3.0 name:               hstratus-version:            0.1.0.0+version:            0.1.1.0 synopsis:           Unified CLI for iCloud services description:   An @hstratus@ executable that provides subcommands for iCloud authentication,@@ -33,6 +33,7 @@   exposed-modules:     Hstratus.Cli     Hstratus.Cli.Auth+    Hstratus.Cli.Common     Hstratus.Cli.Drive     Hstratus.Cli.Notes   hs-source-dirs:   src@@ -42,8 +43,7 @@     , containers           >=0.6 && <0.8     , directory            >=1.3 && <1.4     , filepath             >=1.4 && <1.6-    , hstratus-auth        >=0.1 && <0.2-    , hstratus-auth:hstratus-auth-cli >=0.1 && <0.2+    , hstratus-auth        >=0.2 && <0.3     , hstratus-drive       >=0.1 && <0.2     , hstratus-notes       >=0.1 && <0.2     , http-client-tls      >=0.3 && <0.4@@ -69,6 +69,7 @@   hs-source-dirs:   test   other-modules:     Hstratus.Cli.AuthSpec+    Hstratus.Cli.CommonSpec     Hstratus.Cli.DriveSpec     Hstratus.Cli.NotesSpec   default-language: Haskell2010@@ -80,7 +81,7 @@     , filepath             >=1.4 && <1.6     , hspec                >=2.1 && <3.0     , hstratus-    , hstratus-auth:hstratus-auth-cli+    , hstratus-auth        >=0.2 && <0.3     , hstratus-drive     , hstratus-notes     , optparse-applicative >=0.18 && <0.19
src/Hstratus/Cli/Auth.hs view
@@ -17,6 +17,7 @@  import Control.Exception (bracket_, catch, displayException) import Data.String (fromString)+import Hstratus.Cli.Common (commonOptsParser) import Network.HStratus.Http   ( AuthError   , login@@ -25,7 +26,6 @@   ) import Network.HStratus.Http.Cli   ( CommonOpts (..)-  , commonOptsParser   , mkLoggerFor   , resolveLogTarget   )
+ src/Hstratus/Cli/Common.hs view
@@ -0,0 +1,27 @@+{- |+Module      : Hstratus.Cli.Common+Copyright   : (c) 2026 Tim Emiola+Maintainer  : Tim Emiola <adetokunbo@emio.la>+SPDX-License-Identifier: BSD-3-Clause++Optparse-applicative parser for the options shared by all iCloud CLI subcommands.+-}+module Hstratus.Cli.Common+  ( commonOptsParser+  )+where++import Network.HStratus.Http.Cli (CommonOpts (..))+import Options.Applicative+++-- | Parser for 'CommonOpts'.+commonOptsParser :: Parser CommonOpts+commonOptsParser =+  CommonOpts+    <$> switch (long "china" <> help "Use mainland China endpoints")+    <*> switch (long "log" <> help "Append HTTP exchanges to the default log file")+    <*> optional+      (strOption (long "log-file" <> metavar "FILE" <> help "Append HTTP exchanges to FILE"))+    <*> switch (long "log-bodies" <> help "Include request bodies in the HTTP exchange log")+    <*> switch (long "redact" <> help "Redact sensitive headers (tokens, cookies) in the log")
src/Hstratus/Cli/Drive.hs view
@@ -43,6 +43,7 @@ import qualified Data.Text as Text import Data.Time (UTCTime) import Data.Time.Format (defaultTimeLocale, formatTime)+import Hstratus.Cli.Common (commonOptsParser) import Network.HStratus.Drive   ( DriveApi   , DriveError@@ -57,7 +58,7 @@   , mkDriveApi   , selectFileNode   )-import Network.HStratus.Http.Cli (CommonOpts (..), commonOptsParser, onServiceError, runWithApi)+import Network.HStratus.Http.Cli (CommonOpts (..), onServiceError, runWithApi) import Options.Applicative import System.Directory (createDirectoryIfMissing, getHomeDirectory) import System.Exit (die)
src/Hstratus/Cli/Notes.hs view
@@ -35,7 +35,8 @@ import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.IO as TIO-import Network.HStratus.Http.Cli (CommonOpts (..), commonOptsParser, onServiceError, runWithApi)+import Hstratus.Cli.Common (commonOptsParser)+import Network.HStratus.Http.Cli (CommonOpts (..), onServiceError, runWithApi) import Network.HStratus.Notes import Network.HStratus.Notes.Markdown (noteToMarkdown) import Options.Applicative
+ test/Hstratus/Cli/CommonSpec.hs view
@@ -0,0 +1,55 @@+{-# LANGUAGE OverloadedStrings #-}++{- |+Module      : Hstratus.Cli.CommonSpec+Copyright   : (c) 2026 Tim Emiola+Maintainer  : Tim Emiola <adetokunbo@emio.la>+SPDX-License-Identifier: BSD-3-Clause++Tests for the shared CLI options parser in 'Hstratus.Cli.Common'.+-}+module Hstratus.Cli.CommonSpec (spec) where++import Hstratus.Cli.Common (commonOptsParser)+import Network.HStratus.Http.Cli (CommonOpts (..))+import Options.Applicative (ParserResult (..), defaultPrefs, execParserPure, fullDesc, info, renderFailure)+import Test.Hspec+import Test.Hspec.Benri (endsRight)+++defaultOpts :: CommonOpts+defaultOpts = CommonOpts False False Nothing False False+++spec :: Spec+spec = describe "Hstratus.Cli.Common.commonOptsParser" $ do+  it "defaults all flags to False with no log file" $+    pure (parseOpts []) `endsRight` defaultOpts++  it "sets optChina when --china is given" $+    fmap optChina (parseOpts ["--china"]) `shouldBe` Right True++  it "sets optLog when --log is given" $+    fmap optLog (parseOpts ["--log"]) `shouldBe` Right True++  it "sets optLogFile when --log-file is given" $+    fmap optLogFile (parseOpts ["--log-file", "/tmp/test.log"])+      `shouldBe` Right (Just "/tmp/test.log")++  it "sets optLogBodies when --log-bodies is given" $+    fmap optLogBodies (parseOpts ["--log-bodies"]) `shouldBe` Right True++  it "sets optRedact when --redact is given" $+    fmap optRedact (parseOpts ["--redact"]) `shouldBe` Right True++  it "accepts multiple flags together" $+    pure (parseOpts ["--log", "--redact", "--china"])+      `endsRight` defaultOpts{optChina = True, optLog = True, optRedact = True}+++parseOpts :: [String] -> Either String CommonOpts+parseOpts args =+  case execParserPure defaultPrefs (info commonOptsParser fullDesc) args of+    Success opts -> Right opts+    Failure failure -> Left (fst (renderFailure failure "test"))+    CompletionInvoked _ -> Left "completion invoked"
test/Spec.hs view
@@ -1,6 +1,7 @@ module Main where  import qualified Hstratus.Cli.AuthSpec as Auth+import qualified Hstratus.Cli.CommonSpec as Common import qualified Hstratus.Cli.DriveSpec as Drive import qualified Hstratus.Cli.NotesSpec as Notes import System.IO@@ -18,5 +19,6 @@   hSetBuffering stderr NoBuffering   hspec $ do     Auth.spec+    Common.spec     Drive.spec     Notes.spec