packages feed

stripe-servant 0.1.0.0 → 0.1.1.0

raw patch · 3 files changed

+80/−4 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Stripe.Api: type SubscriptionApi = StripeAuth :> ReqBody '[FormUrlEncoded] SubscriptionCreate :> Post '[JSON] Subscription :<|> StripeAuth :> Capture ":subscription_id" SubscriptionId :> Get '[JSON] Subscription :<|> StripeAuth :> QueryParam "customer" CustomerId :> Get '[JSON] (StripeList Subscription)
+ Stripe.Resources: Subscription :: SubscriptionId -> Bool -> TimeStamp -> TimeStamp -> CustomerId -> StripeList SubscriptionItem -> Text -> Subscription
+ Stripe.Resources: SubscriptionCreate :: CustomerId -> [SubscriptionCreateItem] -> Maybe Bool -> Maybe TimeStamp -> SubscriptionCreate
+ Stripe.Resources: SubscriptionCreateItem :: PriceId -> Maybe Int -> SubscriptionCreateItem
+ Stripe.Resources: SubscriptionItem :: SubscriptionItemId -> Price -> Maybe Int -> SubscriptionId -> SubscriptionItem
+ Stripe.Resources: [sCancelAtPeriodEnd] :: Subscription -> Bool
+ Stripe.Resources: [sCurrentPeriodEnd] :: Subscription -> TimeStamp
+ Stripe.Resources: [sCurrentPeriodStart] :: Subscription -> TimeStamp
+ Stripe.Resources: [sCustomer] :: Subscription -> CustomerId
+ Stripe.Resources: [sId] :: Subscription -> SubscriptionId
+ Stripe.Resources: [sItems] :: Subscription -> StripeList SubscriptionItem
+ Stripe.Resources: [sStatus] :: Subscription -> Text
+ Stripe.Resources: [scCancelAtPeriodEnd] :: SubscriptionCreate -> Maybe Bool
+ Stripe.Resources: [scCustomer] :: SubscriptionCreate -> CustomerId
+ Stripe.Resources: [scItems] :: SubscriptionCreate -> [SubscriptionCreateItem]
+ Stripe.Resources: [scTrialEnd] :: SubscriptionCreate -> Maybe TimeStamp
+ Stripe.Resources: [sciPrice] :: SubscriptionCreateItem -> PriceId
+ Stripe.Resources: [sciQuantity] :: SubscriptionCreateItem -> Maybe Int
+ Stripe.Resources: [siId] :: SubscriptionItem -> SubscriptionItemId
+ Stripe.Resources: [siPrice] :: SubscriptionItem -> Price
+ Stripe.Resources: [siQuantity] :: SubscriptionItem -> Maybe Int
+ Stripe.Resources: [siSubscription] :: SubscriptionItem -> SubscriptionId
+ Stripe.Resources: data Subscription
+ Stripe.Resources: data SubscriptionCreate
+ Stripe.Resources: data SubscriptionCreateItem
+ Stripe.Resources: data SubscriptionItem
+ Stripe.Resources: instance Data.Aeson.Types.FromJSON.FromJSON Stripe.Resources.Subscription
+ Stripe.Resources: instance Data.Aeson.Types.FromJSON.FromJSON Stripe.Resources.SubscriptionItem
+ Stripe.Resources: instance Data.Aeson.Types.FromJSON.FromJSON Stripe.Resources.SubscriptionItemId
+ Stripe.Resources: instance Data.Aeson.Types.ToJSON.ToJSON Stripe.Resources.Subscription
+ Stripe.Resources: instance Data.Aeson.Types.ToJSON.ToJSON Stripe.Resources.SubscriptionItem
+ Stripe.Resources: instance Data.Aeson.Types.ToJSON.ToJSON Stripe.Resources.SubscriptionItemId
+ Stripe.Resources: instance GHC.Base.Applicative Stripe.Resources.StripeList
+ Stripe.Resources: instance GHC.Base.Functor Stripe.Resources.StripeList
+ Stripe.Resources: instance GHC.Base.Monoid (Stripe.Resources.StripeList a)
+ Stripe.Resources: instance GHC.Base.Semigroup (Stripe.Resources.StripeList a)
+ Stripe.Resources: instance GHC.Classes.Eq Stripe.Resources.Subscription
+ Stripe.Resources: instance GHC.Classes.Eq Stripe.Resources.SubscriptionCreate
+ Stripe.Resources: instance GHC.Classes.Eq Stripe.Resources.SubscriptionCreateItem
+ Stripe.Resources: instance GHC.Classes.Eq Stripe.Resources.SubscriptionItem
+ Stripe.Resources: instance GHC.Classes.Eq Stripe.Resources.SubscriptionItemId
+ Stripe.Resources: instance GHC.Generics.Generic Stripe.Resources.SubscriptionCreate
+ Stripe.Resources: instance GHC.Generics.Generic Stripe.Resources.SubscriptionCreateItem
+ Stripe.Resources: instance GHC.Show.Show Stripe.Resources.Subscription
+ Stripe.Resources: instance GHC.Show.Show Stripe.Resources.SubscriptionCreate
+ Stripe.Resources: instance GHC.Show.Show Stripe.Resources.SubscriptionCreateItem
+ Stripe.Resources: instance GHC.Show.Show Stripe.Resources.SubscriptionItem
+ Stripe.Resources: instance GHC.Show.Show Stripe.Resources.SubscriptionItemId
+ Stripe.Resources: instance Web.Internal.FormUrlEncoded.ToForm Stripe.Resources.SubscriptionCreate
+ Stripe.Resources: instance Web.Internal.HttpApiData.ToHttpApiData Stripe.Resources.SubscriptionItemId
+ Stripe.Resources: instance Web.Internal.HttpApiData.ToHttpApiData Stripe.Resources.TimeStamp
- Stripe.Api: type StripeApiInternal = "customers" :> CustomerApi :<|> "products" :> ProductApi :<|> "prices" :> PriceApi :<|> "checkout" :> "sessions" :> CheckoutApi :<|> "billing_portal" :> "sessions" :> CustomerPortalApi :<|> "events" :> EventApi
+ Stripe.Api: type StripeApiInternal = "customers" :> CustomerApi :<|> "products" :> ProductApi :<|> "prices" :> PriceApi :<|> "subscriptions" :> SubscriptionApi :<|> "checkout" :> "sessions" :> CheckoutApi :<|> "billing_portal" :> "sessions" :> CustomerPortalApi :<|> "events" :> EventApi

Files

src/Stripe/Api.hs view
@@ -16,6 +16,7 @@   = "customers" :> CustomerApi   :<|> "products" :> ProductApi   :<|> "prices" :> PriceApi+  :<|> "subscriptions" :> SubscriptionApi   :<|> "checkout" :> "sessions" :> CheckoutApi   :<|> "billing_portal" :> "sessions" :> CustomerPortalApi   :<|> "events" :> EventApi@@ -38,6 +39,11 @@   = StripeAuth :> ReqBody '[FormUrlEncoded] PriceCreate :> Post '[JSON] Price   :<|> StripeAuth :> Capture ":product_id" PriceId :> Get '[JSON] Price   :<|> StripeAuth :> QueryParam "lookup_keys[]" T.Text :> Get '[JSON] (StripeList Price)++type SubscriptionApi+  = StripeAuth :> ReqBody '[FormUrlEncoded] SubscriptionCreate :> Post '[JSON] Subscription+  :<|> StripeAuth :> Capture ":subscription_id" SubscriptionId :> Get '[JSON] Subscription+  :<|> StripeAuth :> QueryParam "customer" CustomerId :> Get '[JSON] (StripeList Subscription)  type CheckoutApi   = StripeAuth :> ReqBody '[FormUrlEncoded] CheckoutSessionCreate :> Post '[JSON] CheckoutSession
src/Stripe/Resources.hs view
@@ -10,7 +10,7 @@   , Product(..), ProductCreate(..)   , Price(..), PriceRecurring(..), PriceCreate(..), PriceCreateRecurring(..)     -- * Subscriptions-  , SubscriptionId(..)+  , SubscriptionId(..), Subscription(..), SubscriptionItem(..), SubscriptionCreate(..), SubscriptionCreateItem(..)     -- * Customer Portal   , CustomerPortalId(..), CustomerPortal(..), CustomerPortalCreate(..)     -- * Checkout@@ -52,13 +52,29 @@     A.withScientific "unix timestamp" $ \sci ->     pure $ TimeStamp $ posixSecondsToUTCTime (fromRational $ toRational sci) +instance ToHttpApiData TimeStamp where+  toUrlPiece x =+    let unix :: Int+        unix = round . utcTimeToPOSIXSeconds . unTimeStamp $ x+    in T.pack (show unix)+ -- | A 'V.Vector' wrapper with an indication is there are more items available through pagination. data StripeList a   = StripeList   { slHasMore :: Bool   , slData :: V.Vector a-  } deriving (Show, Eq)+  } deriving (Show, Eq, Functor) +instance Semigroup (StripeList a) where+ (<>) a b = StripeList (slHasMore a || slHasMore b) (slData a <> slData b)++instance Monoid (StripeList a) where+  mempty = StripeList False mempty++instance Applicative StripeList where+  pure = StripeList False . pure+  (<*>) go x = StripeList (slHasMore go || slHasMore x) (slData go <*> slData x)+ newtype CustomerId   = CustomerId { unCustomerId :: T.Text }   deriving (Show, Eq, ToJSON, FromJSON, ToHttpApiData)@@ -164,6 +180,43 @@   = SubscriptionId { unSubscriptionId :: T.Text }   deriving (Show, Eq, ToJSON, FromJSON, ToHttpApiData) +data Subscription+  = Subscription+  { sId :: SubscriptionId+  , sCancelAtPeriodEnd :: Bool+  , sCurrentPeriodEnd :: TimeStamp+  , sCurrentPeriodStart :: TimeStamp+  , sCustomer :: CustomerId+  , sItems :: StripeList SubscriptionItem+  , sStatus :: T.Text -- TODO: make enum+  } deriving (Show, Eq)++newtype SubscriptionItemId+  = SubscriptionItemId { unSubscriptionItemId :: T.Text }+  deriving (Show, Eq, ToJSON, FromJSON, ToHttpApiData)++data SubscriptionItem+  = SubscriptionItem+  { siId :: SubscriptionItemId+  , siPrice :: Price+  , siQuantity :: Maybe Int+  , siSubscription :: SubscriptionId+  } deriving (Show, Eq)++data SubscriptionCreateItem+  = SubscriptionCreateItem+  { sciPrice :: PriceId+  , sciQuantity :: Maybe Int+  } deriving (Show, Eq, Generic)++data SubscriptionCreate+  = SubscriptionCreate+  { scCustomer :: CustomerId+  , scItems :: [SubscriptionCreateItem]+  , scCancelAtPeriodEnd :: Maybe Bool+  , scTrialEnd :: Maybe TimeStamp+  } deriving (Show, Eq, Generic)+ newtype CheckoutSessionId   = CheckoutSessionId { unCheckoutSessionId :: T.Text }   deriving (Show, Eq, ToJSON, FromJSON, ToHttpApiData)@@ -224,6 +277,8 @@ $(deriveJSON (jsonOpts 1) ''Price) $(deriveJSON (jsonOpts 2) ''PriceRecurring) $(deriveJSON (jsonOpts 2) ''Product)+$(deriveJSON (jsonOpts 1) ''Subscription)+$(deriveJSON (jsonOpts 2) ''SubscriptionItem) $(deriveJSON (jsonOpts 2) ''CustomerPortal)  instance ToForm CustomerCreate where@@ -254,6 +309,21 @@        , ("lookup_key", maybeToList $ pcLookupKey pc)        , ("transfer_lookup_key", [toUrlPiece $ pcTransferLookupKey pc])        ] <> recurringPiece++instance ToForm SubscriptionCreate where+  toForm sc =+    let convertItem (idx, itm) =+          [ ("items[" <> toUrlPiece idx <> "][price]", [toUrlPiece $ sciPrice itm])+          , ("items[" <> toUrlPiece idx <> "][quantity]", maybeToList $ toUrlPiece <$> sciQuantity itm)+          ]+        lineItems =+          concatMap convertItem (zip ([0..] :: [Int]) (scItems sc))+    in Form $ HM.fromList $+       [ ("customer", [toUrlPiece $ scCustomer sc])+       , ("cancel_at_period_end", maybeToList $ toUrlPiece <$> scCancelAtPeriodEnd sc)+       , ("trial_end", maybeToList $ toUrlPiece <$> scTrialEnd sc)+       ] <> lineItems+  instance ToForm CheckoutSessionCreate where   toForm csc =
stripe-servant.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 44759c17c1b913f08638e1ae86cf9a71e9a090db0772cb4d9da196ae9447d461+-- hash: 1f5f0b69e2e75cbd3ee8f140d941a1803f791d24425d21b0cdb669d63e9ab462  name:           stripe-servant-version:        0.1.0.0+version:        0.1.1.0 synopsis:       Unofficial Stripe servant types description:    Unofficial description of the Stripe API using servant types category:       Web