Documentation ¶
Index ¶
- Constants
- Variables
- func Expand(m []Feature, names ...string) ([]refs.FeaturePlan, error)
- func FeaturePlans(fs []Feature) []refs.FeaturePlan
- func WithClock(ctx context.Context, clockID string) context.Context
- type Account
- type CheckoutParams
- type Client
- func (c *Client) Checkout(ctx context.Context, org string, successURL string, p *CheckoutParams) (link string, err error)
- func (c *Client) ClockFromID(id string) *Clock
- func (c *Client) Isolated() bool
- func (c *Client) ListOrgs(ctx context.Context) ([]Org, error)
- func (c *Client) Live() bool
- func (c *Client) LookupInvoices(ctx context.Context, org string) ([]Invoice, error)
- func (c *Client) LookupLimits(ctx context.Context, org string) ([]Usage, error)
- func (c *Client) LookupOrg(ctx context.Context, org string) (*OrgInfo, error)
- func (c *Client) LookupPaymentMethods(ctx context.Context, org string) ([]payment.Method, error)
- func (c *Client) LookupPhases(ctx context.Context, org string) (ps *Schedule, err error)
- func (c *Client) LookupStatus(ctx context.Context, org string) (string, error)
- func (c *Client) NewClock(ctx context.Context, name string, start time.Time) (*Clock, error)
- func (c *Client) Pull(ctx context.Context, limit int) ([]Feature, error)
- func (c *Client) Push(ctx context.Context, fs []Feature, cb PushReportFunc) error
- func (c *Client) PutCustomer(ctx context.Context, org string, info *OrgInfo) error
- func (c *Client) ReportUsage(ctx context.Context, org string, feature refs.Name, use Report) error
- func (c *Client) Schedule(ctx context.Context, org string, p ScheduleParams) error
- func (c *Client) SubscribeTo(ctx context.Context, org string, fs []refs.FeaturePlan) error
- func (c *Client) WhoAmI(ctx context.Context) (Account, error)
- func (c *Client) WhoIs(ctx context.Context, org string) (id string, err error)
- type Clock
- type Coupon
- type Feature
- type Invoice
- type InvoiceLineItem
- type InvoiceSettings
- type Org
- type OrgInfo
- type Period
- type Phase
- type PushReportFunc
- type Report
- type Schedule
- type ScheduleParams
- type Tier
- type Usage
- type ValidationError
Constants ¶
const Inf = 1<<63 - 1
Variables ¶
var ( ErrFeatureExists = errors.New("feature already exists") ErrFeatureNotFound = errors.New("feature not found") ErrNoFeatures = errors.New("no features") ErrFeatureNotMetered = errors.New("feature is not metered") ErrPlanExists = errors.New("plan already exists") ErrInvalidEmail = errors.New("invalid email") ErrTooManyItems = errors.New("too many subscription items") ErrInvalidPrice = errors.New("invalid price") )
Errors
var ( ErrOrgNotFound = errors.New("org not found") ErrInvalidMetadata = errors.New("invalid metadata") ErrInvalidPhase = errors.New("invalid phase") ErrInvalidCancel = errors.New("invalid cancel") // ErrInvalidFeature is returned when a customer that should have been // created is not found after "creating" it. This can happen in Test // Mode if the test data was cleared but the idempotency key is still // cached at Stripe. ErrUnexpectedMissingOrg = errors.New("unexpected missing org") )
Errors
Functions ¶
func FeaturePlans ¶
func FeaturePlans(fs []Feature) []refs.FeaturePlan
Types ¶
type Account ¶ added in v0.5.0
type CheckoutParams ¶ added in v0.7.1
type Client ¶
type Client struct { Logf func(format string, args ...any) Stripe *stripe.Client KeySource string // the source of the API key // contains filtered or unexported fields }
func (*Client) ClockFromID ¶ added in v0.10.0
ClockFromID returns a Clock for the given clock ID. It does not check that the clock exists or what its status is. If the status or present time are needed, clients should call Sync.
func (*Client) LookupInvoices ¶ added in v0.7.0
func (*Client) LookupLimits ¶
func (*Client) LookupOrg ¶ added in v0.6.0
LookupOrg returns the org information on file with Stripe, uncached.
func (*Client) LookupPaymentMethods ¶ added in v0.9.0
LookupPaymentMethods returns the payment methods for the given org.
func (*Client) LookupPhases ¶
func (*Client) LookupStatus ¶ added in v0.7.0
func (*Client) NewClock ¶ added in v0.10.0
NewClock creates a new clock in the Stripe account associated with the client and returns a Clock ready to use.
func (*Client) Push ¶
Push pushes each feature in fs to Stripe as a product and price combination. A new price and product are created in Stripe if one does not already exist.
All features intended to be in the same plan must all be pushed in a single call to Push. Any subsequent calls attempting to push a feature in a plan that has already been pushed, will result in ErrPlanExists, and no attempt to push any feature in fs will be made. This constraint keeps plan immutable.
Each call to push is subject to rate limiting via the clients shared rate limit.
It returns the first error encountered if any.
func (*Client) PutCustomer ¶ added in v0.6.0
PutCustomer safely creates or updates a customer in Stripe. It does this being careful to not duplicate customer records. If the customer already exists, it will be updated with the provided info.
func (*Client) ReportUsage ¶
func (*Client) SubscribeTo ¶
SubscribeTo subscribes org to the provided features effective immediately, taking over any in-progress schedule. The customer is billed immediately with prorations if any.
type Clock ¶ added in v0.10.0
type Clock struct {
// contains filtered or unexported fields
}
type Coupon ¶ added in v0.12.0
type Coupon struct { ID string `json:"id"` Metadata map[string]string Created time.Time AmountOff int `json:"amount_off"` Currency string `json:"currency"` Duration string `json:"duration"` DurationInMonths int `json:"duration_in_months"` MaxRedemptions int `json:"max_redemptions"` Name string `json:"name"` PercentOff float64 `json:"percent_off"` RedeemBy time.Time TimesRedeemed int `json:"times_redeemed"` Valid bool `json:"valid"` }
type Feature ¶
type Feature struct { refs.FeaturePlan // the feature name prefixed with ("feature:") ProviderID string // identifier set by the billing engine provider PlanTitle string // a human readable title for the plan Title string // a human readable title for the feature // Interval specifies the billing interval for the feature. // // Known intervals are "@daily", "@weekly", "@monthly", and "@yearly". Interval string // Currency is the ISO 4217 currency code for the feature. // // Known currencies look like "usd", "eur", "gbp", "cad", "aud", "jpy", "chf", // etc. Please see your billing engine provider for a complete list. Currency string // Base is the base price for the feature. If Tiers is not empty, then Base // is ignored. Base float64 // Mode specifies the billing mode for use with Tiers. // // Known modes are "graduated" and "volume". Mode string // Aggregate specifies the usage aggregation method for use with Tiers. // // Known aggregates are "sum", "max", "last", and "perpetual". Aggregate string // Tiers optionally specifies the pricing tiers for this feature. If // empty, feature is billed at the beginning of each billing period at // the flat rate specified by Base. If non-empty, the feature is billed // at the end of each billing period based on usage, and at a price // determined by Tiers, Mode, and Aggregate. Tiers []Tier // ReportID is the ID for reporting usage to the billing provider. ReportID string TransformDenominator int // the denominator for transforming usage TransformRoundUp bool // whether to round up transformed usage; otherwise round down }
func ExpandPlans ¶ added in v0.7.1
ExpandPlans parses each ref in refs and adds it to the result. If the ref is a plan ref, Expand will append all features in fs for that plan to the result. returns an error if any ref is invalid or not availabe in the
The parameter fs is assumed to have no two features with the same FeaturePlan.
It returns an error if any.
type InvoiceLineItem ¶ added in v0.7.0
type InvoiceSettings ¶ added in v0.7.1
type InvoiceSettings struct {
DefaultPaymentMethod string `json:"default_payment_method"`
}
type OrgInfo ¶ added in v0.6.0
type Phase ¶
type Phase struct { Org string // set on read Effective time.Time Features []refs.FeaturePlan Current bool Trial bool // Marks the phase as a trial phase. No fees will be incurred during a trial phase. // Plans is the set of plans that are currently active for the phase. A // plan is considered active in a phase if all of its features are // listed in the phase. If any features from a plan is in the phase // without the other features in the plan, this phase is considered // "fragmented". Plans []refs.Plan AutomaticTax bool Coupon string // deprecated // CouponData is the coupon that was applied to the subscription. It is // nil if no coupon was applied. CouponData *Coupon }
func (*Phase) Fragments ¶
func (p *Phase) Fragments() []refs.FeaturePlan
type PushReportFunc ¶ added in v0.5.2
PushReportFunc is called for each feature pushed to Stripe. Implementations must be safe to use accross goroutines.
type ScheduleParams ¶ added in v0.9.0
type Tier ¶
type Tier struct { Upto int // the upper limit of the tier Price float64 // the price of the tier Base int // the base price of the tier }
Tier holds the pricing information for a single tier.
type ValidationError ¶
type ValidationError struct {
Message string
}
func (*ValidationError) Error ¶
func (e *ValidationError) Error() string