4097 lines
242 KiB
Go
4097 lines
242 KiB
Go
// Generated service client for heroku API.
|
||
//
|
||
// To be able to interact with this API, you have to
|
||
// create a new service:
|
||
//
|
||
// s := heroku.NewService(nil)
|
||
//
|
||
// The Service struct has all the methods you need
|
||
// to interact with heroku API.
|
||
//
|
||
package heroku
|
||
|
||
import (
|
||
"bytes"
|
||
"context"
|
||
"encoding/json"
|
||
"fmt"
|
||
"io"
|
||
"net/http"
|
||
"reflect"
|
||
"runtime"
|
||
"strings"
|
||
"time"
|
||
|
||
"github.com/google/go-querystring/query"
|
||
)
|
||
|
||
const (
|
||
Version = "v3"
|
||
DefaultUserAgent = "heroku/" + Version + " (" + runtime.GOOS + "; " + runtime.GOARCH + ")"
|
||
DefaultURL = "https://api.heroku.com"
|
||
)
|
||
|
||
// Service represents your API.
|
||
type Service struct {
|
||
client *http.Client
|
||
URL string
|
||
}
|
||
|
||
// NewService creates a Service using the given, if none is provided
|
||
// it uses http.DefaultClient.
|
||
func NewService(c *http.Client) *Service {
|
||
if c == nil {
|
||
c = http.DefaultClient
|
||
}
|
||
return &Service{
|
||
client: c,
|
||
URL: DefaultURL,
|
||
}
|
||
}
|
||
|
||
// NewRequest generates an HTTP request, but does not perform the request.
|
||
func (s *Service) NewRequest(ctx context.Context, method, path string, body interface{}, q interface{}) (*http.Request, error) {
|
||
var ctype string
|
||
var rbody io.Reader
|
||
switch t := body.(type) {
|
||
case nil:
|
||
case string:
|
||
rbody = bytes.NewBufferString(t)
|
||
case io.Reader:
|
||
rbody = t
|
||
default:
|
||
v := reflect.ValueOf(body)
|
||
if !v.IsValid() {
|
||
break
|
||
}
|
||
if v.Type().Kind() == reflect.Ptr {
|
||
v = reflect.Indirect(v)
|
||
if !v.IsValid() {
|
||
break
|
||
}
|
||
}
|
||
j, err := json.Marshal(body)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
rbody = bytes.NewReader(j)
|
||
ctype = "application/json"
|
||
}
|
||
req, err := http.NewRequest(method, s.URL+path, rbody)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
req = req.WithContext(ctx)
|
||
if q != nil {
|
||
v, err := query.Values(q)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
query := v.Encode()
|
||
if req.URL.RawQuery != "" && query != "" {
|
||
req.URL.RawQuery += "&"
|
||
}
|
||
req.URL.RawQuery += query
|
||
}
|
||
req.Header.Set("Accept", "application/json")
|
||
req.Header.Set("User-Agent", DefaultUserAgent)
|
||
if ctype != "" {
|
||
req.Header.Set("Content-Type", ctype)
|
||
}
|
||
return req, nil
|
||
}
|
||
|
||
// Do sends a request and decodes the response into v.
|
||
func (s *Service) Do(ctx context.Context, v interface{}, method, path string, body interface{}, q interface{}, lr *ListRange) error {
|
||
req, err := s.NewRequest(ctx, method, path, body, q)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
if lr != nil {
|
||
lr.SetHeader(req)
|
||
}
|
||
resp, err := s.client.Do(req)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
defer resp.Body.Close()
|
||
switch t := v.(type) {
|
||
case nil:
|
||
case io.Writer:
|
||
_, err = io.Copy(t, resp.Body)
|
||
default:
|
||
err = json.NewDecoder(resp.Body).Decode(v)
|
||
}
|
||
return err
|
||
}
|
||
|
||
// Get sends a GET request and decodes the response into v.
|
||
func (s *Service) Get(ctx context.Context, v interface{}, path string, query interface{}, lr *ListRange) error {
|
||
return s.Do(ctx, v, "GET", path, nil, query, lr)
|
||
}
|
||
|
||
// Patch sends a Path request and decodes the response into v.
|
||
func (s *Service) Patch(ctx context.Context, v interface{}, path string, body interface{}) error {
|
||
return s.Do(ctx, v, "PATCH", path, body, nil, nil)
|
||
}
|
||
|
||
// Post sends a POST request and decodes the response into v.
|
||
func (s *Service) Post(ctx context.Context, v interface{}, path string, body interface{}) error {
|
||
return s.Do(ctx, v, "POST", path, body, nil, nil)
|
||
}
|
||
|
||
// Put sends a PUT request and decodes the response into v.
|
||
func (s *Service) Put(ctx context.Context, v interface{}, path string, body interface{}) error {
|
||
return s.Do(ctx, v, "PUT", path, body, nil, nil)
|
||
}
|
||
|
||
// Delete sends a DELETE request.
|
||
func (s *Service) Delete(ctx context.Context, v interface{}, path string) error {
|
||
return s.Do(ctx, v, "DELETE", path, nil, nil, nil)
|
||
}
|
||
|
||
// ListRange describes a range.
|
||
type ListRange struct {
|
||
Field string
|
||
Max int
|
||
Descending bool
|
||
FirstID string
|
||
LastID string
|
||
}
|
||
|
||
// SetHeader set headers on the given Request.
|
||
func (lr *ListRange) SetHeader(req *http.Request) {
|
||
var hdrval string
|
||
if lr.Field != "" {
|
||
hdrval += lr.Field + " "
|
||
}
|
||
hdrval += lr.FirstID + ".." + lr.LastID
|
||
params := make([]string, 0, 2)
|
||
if lr.Max != 0 {
|
||
params = append(params, fmt.Sprintf("max=%d", lr.Max))
|
||
}
|
||
if lr.Descending {
|
||
params = append(params, "order=desc")
|
||
}
|
||
if len(params) > 0 {
|
||
hdrval += fmt.Sprintf("; %s", strings.Join(params, ","))
|
||
}
|
||
req.Header.Set("Range", hdrval)
|
||
return
|
||
}
|
||
|
||
// Bool allocates a new int value returns a pointer to it.
|
||
func Bool(v bool) *bool {
|
||
p := new(bool)
|
||
*p = v
|
||
return p
|
||
}
|
||
|
||
// Int allocates a new int value returns a pointer to it.
|
||
func Int(v int) *int {
|
||
p := new(int)
|
||
*p = v
|
||
return p
|
||
}
|
||
|
||
// Float64 allocates a new float64 value returns a pointer to it.
|
||
func Float64(v float64) *float64 {
|
||
p := new(float64)
|
||
*p = v
|
||
return p
|
||
}
|
||
|
||
// String allocates a new string value returns a pointer to it.
|
||
func String(v string) *string {
|
||
p := new(string)
|
||
*p = v
|
||
return p
|
||
}
|
||
|
||
// An account represents an individual signed up to use the Heroku
|
||
// platform.
|
||
type Account struct {
|
||
AllowTracking bool `json:"allow_tracking" url:"allow_tracking,key"` // whether to allow third party web activity tracking
|
||
Beta bool `json:"beta" url:"beta,key"` // whether allowed to utilize beta Heroku features
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account was created
|
||
DefaultOrganization *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of organization
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
} `json:"default_organization" url:"default_organization,key"` // organization selected by default
|
||
DelinquentAt *time.Time `json:"delinquent_at" url:"delinquent_at,key"` // when account became delinquent
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
IdentityProvider *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this identity provider
|
||
Organization struct {
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
} `json:"organization" url:"organization,key"`
|
||
} `json:"identity_provider" url:"identity_provider,key"` // Identity Provider details for federated users.
|
||
LastLogin *time.Time `json:"last_login" url:"last_login,key"` // when account last authorized with Heroku
|
||
Name *string `json:"name" url:"name,key"` // full name of the account owner
|
||
SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account
|
||
SuspendedAt *time.Time `json:"suspended_at" url:"suspended_at,key"` // when account was suspended
|
||
TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether two-factor auth is enabled on the account
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account was updated
|
||
Verified bool `json:"verified" url:"verified,key"` // whether account has been verified with billing information
|
||
}
|
||
|
||
// Info for account.
|
||
func (s *Service) AccountInfo(ctx context.Context) (*Account, error) {
|
||
var account Account
|
||
return &account, s.Get(ctx, &account, fmt.Sprintf("/account"), nil, nil)
|
||
}
|
||
|
||
type AccountUpdateOpts struct {
|
||
AllowTracking *bool `json:"allow_tracking,omitempty" url:"allow_tracking,omitempty,key"` // whether to allow third party web activity tracking
|
||
Beta *bool `json:"beta,omitempty" url:"beta,omitempty,key"` // whether allowed to utilize beta Heroku features
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // full name of the account owner
|
||
}
|
||
|
||
// Update account.
|
||
func (s *Service) AccountUpdate(ctx context.Context, o AccountUpdateOpts) (*Account, error) {
|
||
var account Account
|
||
return &account, s.Patch(ctx, &account, fmt.Sprintf("/account"), o)
|
||
}
|
||
|
||
// Delete account. Note that this action cannot be undone.
|
||
func (s *Service) AccountDelete(ctx context.Context) (*Account, error) {
|
||
var account Account
|
||
return &account, s.Delete(ctx, &account, fmt.Sprintf("/account"))
|
||
}
|
||
|
||
// Info for account.
|
||
func (s *Service) AccountInfoByUser(ctx context.Context, accountIdentity string) (*Account, error) {
|
||
var account Account
|
||
return &account, s.Get(ctx, &account, fmt.Sprintf("/users/%v", accountIdentity), nil, nil)
|
||
}
|
||
|
||
type AccountUpdateByUserOpts struct {
|
||
AllowTracking *bool `json:"allow_tracking,omitempty" url:"allow_tracking,omitempty,key"` // whether to allow third party web activity tracking
|
||
Beta *bool `json:"beta,omitempty" url:"beta,omitempty,key"` // whether allowed to utilize beta Heroku features
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // full name of the account owner
|
||
}
|
||
|
||
// Update account.
|
||
func (s *Service) AccountUpdateByUser(ctx context.Context, accountIdentity string, o AccountUpdateByUserOpts) (*Account, error) {
|
||
var account Account
|
||
return &account, s.Patch(ctx, &account, fmt.Sprintf("/users/%v", accountIdentity), o)
|
||
}
|
||
|
||
// Delete account. Note that this action cannot be undone.
|
||
func (s *Service) AccountDeleteByUser(ctx context.Context, accountIdentity string) (*Account, error) {
|
||
var account Account
|
||
return &account, s.Delete(ctx, &account, fmt.Sprintf("/users/%v", accountIdentity))
|
||
}
|
||
|
||
// An account feature represents a Heroku labs capability that can be
|
||
// enabled or disabled for an account on Heroku.
|
||
type AccountFeature struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account feature was created
|
||
Description string `json:"description" url:"description,key"` // description of account feature
|
||
DisplayName string `json:"display_name" url:"display_name,key"` // user readable feature name
|
||
DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of account feature
|
||
Enabled bool `json:"enabled" url:"enabled,key"` // whether or not account feature has been enabled
|
||
FeedbackEmail string `json:"feedback_email" url:"feedback_email,key"` // e-mail to send feedback about the feature
|
||
ID string `json:"id" url:"id,key"` // unique identifier of account feature
|
||
Name string `json:"name" url:"name,key"` // unique name of account feature
|
||
State string `json:"state" url:"state,key"` // state of account feature
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account feature was updated
|
||
}
|
||
|
||
// Info for an existing account feature.
|
||
func (s *Service) AccountFeatureInfo(ctx context.Context, accountFeatureIdentity string) (*AccountFeature, error) {
|
||
var accountFeature AccountFeature
|
||
return &accountFeature, s.Get(ctx, &accountFeature, fmt.Sprintf("/account/features/%v", accountFeatureIdentity), nil, nil)
|
||
}
|
||
|
||
type AccountFeatureListResult []AccountFeature
|
||
|
||
// List existing account features.
|
||
func (s *Service) AccountFeatureList(ctx context.Context, lr *ListRange) (AccountFeatureListResult, error) {
|
||
var accountFeature AccountFeatureListResult
|
||
return accountFeature, s.Get(ctx, &accountFeature, fmt.Sprintf("/account/features"), nil, lr)
|
||
}
|
||
|
||
type AccountFeatureUpdateOpts struct {
|
||
Enabled bool `json:"enabled" url:"enabled,key"` // whether or not account feature has been enabled
|
||
}
|
||
|
||
// Update an existing account feature.
|
||
func (s *Service) AccountFeatureUpdate(ctx context.Context, accountFeatureIdentity string, o AccountFeatureUpdateOpts) (*AccountFeature, error) {
|
||
var accountFeature AccountFeature
|
||
return &accountFeature, s.Patch(ctx, &accountFeature, fmt.Sprintf("/account/features/%v", accountFeatureIdentity), o)
|
||
}
|
||
|
||
// Add-ons represent add-ons that have been provisioned and attached to
|
||
// one or more apps.
|
||
type AddOn struct {
|
||
Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on
|
||
AddonService struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service
|
||
Name string `json:"name" url:"name,key"` // unique name of this add-on-service
|
||
} `json:"addon_service" url:"addon_service,key"` // identity of add-on service
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // billing application associated with this add-on
|
||
ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of add-on
|
||
Name string `json:"name" url:"name,key"` // globally unique name of the add-on
|
||
Plan struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this plan
|
||
Name string `json:"name" url:"name,key"` // unique name of this plan
|
||
} `json:"plan" url:"plan,key"` // identity of add-on plan
|
||
ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider
|
||
State string `json:"state" url:"state,key"` // state in the add-on's lifecycle
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated
|
||
WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard)
|
||
}
|
||
type AddOnListResult []AddOn
|
||
|
||
// List all existing add-ons.
|
||
func (s *Service) AddOnList(ctx context.Context, lr *ListRange) (AddOnListResult, error) {
|
||
var addOn AddOnListResult
|
||
return addOn, s.Get(ctx, &addOn, fmt.Sprintf("/addons"), nil, lr)
|
||
}
|
||
|
||
// Info for an existing add-on.
|
||
func (s *Service) AddOnInfo(ctx context.Context, addOnIdentity string) (*AddOn, error) {
|
||
var addOn AddOn
|
||
return &addOn, s.Get(ctx, &addOn, fmt.Sprintf("/addons/%v", addOnIdentity), nil, nil)
|
||
}
|
||
|
||
type AddOnCreateOpts struct {
|
||
Attachment *struct{} `json:"attachment,omitempty" url:"attachment,omitempty,key"` // name for add-on's initial attachment
|
||
Config *map[string]string `json:"config,omitempty" url:"config,omitempty,key"` // custom add-on provisioning options
|
||
Plan string `json:"plan" url:"plan,key"` // unique identifier of this plan
|
||
}
|
||
|
||
// Create a new add-on.
|
||
func (s *Service) AddOnCreate(ctx context.Context, appIdentity string, o AddOnCreateOpts) (*AddOn, error) {
|
||
var addOn AddOn
|
||
return &addOn, s.Post(ctx, &addOn, fmt.Sprintf("/apps/%v/addons", appIdentity), o)
|
||
}
|
||
|
||
// Delete an existing add-on.
|
||
func (s *Service) AddOnDelete(ctx context.Context, appIdentity string, addOnIdentity string) (*AddOn, error) {
|
||
var addOn AddOn
|
||
return &addOn, s.Delete(ctx, &addOn, fmt.Sprintf("/apps/%v/addons/%v", appIdentity, addOnIdentity))
|
||
}
|
||
|
||
// Info for an existing add-on.
|
||
func (s *Service) AddOnInfoByApp(ctx context.Context, appIdentity string, addOnIdentity string) (*AddOn, error) {
|
||
var addOn AddOn
|
||
return &addOn, s.Get(ctx, &addOn, fmt.Sprintf("/apps/%v/addons/%v", appIdentity, addOnIdentity), nil, nil)
|
||
}
|
||
|
||
type AddOnListByAppResult []AddOn
|
||
|
||
// List existing add-ons for an app.
|
||
func (s *Service) AddOnListByApp(ctx context.Context, appIdentity string, lr *ListRange) (AddOnListByAppResult, error) {
|
||
var addOn AddOnListByAppResult
|
||
return addOn, s.Get(ctx, &addOn, fmt.Sprintf("/apps/%v/addons", appIdentity), nil, lr)
|
||
}
|
||
|
||
type AddOnUpdateOpts struct {
|
||
Plan string `json:"plan" url:"plan,key"` // unique identifier of this plan
|
||
}
|
||
|
||
// Change add-on plan. Some add-ons may not support changing plans. In
|
||
// that case, an error will be returned.
|
||
func (s *Service) AddOnUpdate(ctx context.Context, appIdentity string, addOnIdentity string, o AddOnUpdateOpts) (*AddOn, error) {
|
||
var addOn AddOn
|
||
return &addOn, s.Patch(ctx, &addOn, fmt.Sprintf("/apps/%v/addons/%v", appIdentity, addOnIdentity), o)
|
||
}
|
||
|
||
type AddOnListByUserResult []AddOn
|
||
|
||
// List all existing add-ons a user has access to
|
||
func (s *Service) AddOnListByUser(ctx context.Context, accountIdentity string, lr *ListRange) (AddOnListByUserResult, error) {
|
||
var addOn AddOnListByUserResult
|
||
return addOn, s.Get(ctx, &addOn, fmt.Sprintf("/users/%v/addons", accountIdentity), nil, lr)
|
||
}
|
||
|
||
type AddOnListByTeamResult []AddOn
|
||
|
||
// List add-ons used across all Team apps
|
||
func (s *Service) AddOnListByTeam(ctx context.Context, teamIdentity string, lr *ListRange) (AddOnListByTeamResult, error) {
|
||
var addOn AddOnListByTeamResult
|
||
return addOn, s.Get(ctx, &addOn, fmt.Sprintf("/teams/%v/addons", teamIdentity), nil, lr)
|
||
}
|
||
|
||
// Add-on Actions are lifecycle operations for add-on provisioning and
|
||
// deprovisioning. They allow whitelisted add-on providers to
|
||
// (de)provision add-ons in the background and then report back when
|
||
// (de)provisioning is complete.
|
||
type AddOnAction struct{}
|
||
type AddOnActionProvisionResult struct {
|
||
Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on
|
||
AddonService struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service
|
||
Name string `json:"name" url:"name,key"` // unique name of this add-on-service
|
||
} `json:"addon_service" url:"addon_service,key"` // identity of add-on service
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // billing application associated with this add-on
|
||
ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of add-on
|
||
Name string `json:"name" url:"name,key"` // globally unique name of the add-on
|
||
Plan struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this plan
|
||
Name string `json:"name" url:"name,key"` // unique name of this plan
|
||
} `json:"plan" url:"plan,key"` // identity of add-on plan
|
||
ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider
|
||
State string `json:"state" url:"state,key"` // state in the add-on's lifecycle
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated
|
||
WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard)
|
||
}
|
||
|
||
// Mark an add-on as provisioned for use.
|
||
func (s *Service) AddOnActionProvision(ctx context.Context, addOnIdentity string) (*AddOnActionProvisionResult, error) {
|
||
var addOnAction AddOnActionProvisionResult
|
||
return &addOnAction, s.Post(ctx, &addOnAction, fmt.Sprintf("/addons/%v/actions/provision", addOnIdentity), nil)
|
||
}
|
||
|
||
type AddOnActionDeprovisionResult struct {
|
||
Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on
|
||
AddonService struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service
|
||
Name string `json:"name" url:"name,key"` // unique name of this add-on-service
|
||
} `json:"addon_service" url:"addon_service,key"` // identity of add-on service
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // billing application associated with this add-on
|
||
ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of add-on
|
||
Name string `json:"name" url:"name,key"` // globally unique name of the add-on
|
||
Plan struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this plan
|
||
Name string `json:"name" url:"name,key"` // unique name of this plan
|
||
} `json:"plan" url:"plan,key"` // identity of add-on plan
|
||
ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider
|
||
State string `json:"state" url:"state,key"` // state in the add-on's lifecycle
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated
|
||
WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard)
|
||
}
|
||
|
||
// Mark an add-on as deprovisioned.
|
||
func (s *Service) AddOnActionDeprovision(ctx context.Context, addOnIdentity string) (*AddOnActionDeprovisionResult, error) {
|
||
var addOnAction AddOnActionDeprovisionResult
|
||
return &addOnAction, s.Post(ctx, &addOnAction, fmt.Sprintf("/addons/%v/actions/deprovision", addOnIdentity), nil)
|
||
}
|
||
|
||
// An add-on attachment represents a connection between an app and an
|
||
// add-on that it has been given access to.
|
||
type AddOnAttachment struct {
|
||
Addon struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // billing application associated with this add-on
|
||
ID string `json:"id" url:"id,key"` // unique identifier of add-on
|
||
Name string `json:"name" url:"name,key"` // globally unique name of the add-on
|
||
Plan struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this plan
|
||
Name string `json:"name" url:"name,key"` // unique name of this plan
|
||
} `json:"plan" url:"plan,key"` // identity of add-on plan
|
||
} `json:"addon" url:"addon,key"` // identity of add-on
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // application that is attached to add-on
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on attachment was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this add-on attachment
|
||
Name string `json:"name" url:"name,key"` // unique name for this add-on attachment to this app
|
||
Namespace *string `json:"namespace" url:"namespace,key"` // attachment namespace
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on attachment was updated
|
||
WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on in attached app context
|
||
}
|
||
type AddOnAttachmentCreateOpts struct {
|
||
Addon string `json:"addon" url:"addon,key"` // unique identifier of add-on
|
||
App string `json:"app" url:"app,key"` // unique identifier of app
|
||
Force *bool `json:"force,omitempty" url:"force,omitempty,key"` // whether or not to allow existing attachment with same name to be
|
||
// replaced
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name for this add-on attachment to this app
|
||
Namespace *string `json:"namespace,omitempty" url:"namespace,omitempty,key"` // attachment namespace
|
||
}
|
||
|
||
// Create a new add-on attachment.
|
||
func (s *Service) AddOnAttachmentCreate(ctx context.Context, o AddOnAttachmentCreateOpts) (*AddOnAttachment, error) {
|
||
var addOnAttachment AddOnAttachment
|
||
return &addOnAttachment, s.Post(ctx, &addOnAttachment, fmt.Sprintf("/addon-attachments"), o)
|
||
}
|
||
|
||
// Delete an existing add-on attachment.
|
||
func (s *Service) AddOnAttachmentDelete(ctx context.Context, addOnAttachmentIdentity string) (*AddOnAttachment, error) {
|
||
var addOnAttachment AddOnAttachment
|
||
return &addOnAttachment, s.Delete(ctx, &addOnAttachment, fmt.Sprintf("/addon-attachments/%v", addOnAttachmentIdentity))
|
||
}
|
||
|
||
// Info for existing add-on attachment.
|
||
func (s *Service) AddOnAttachmentInfo(ctx context.Context, addOnAttachmentIdentity string) (*AddOnAttachment, error) {
|
||
var addOnAttachment AddOnAttachment
|
||
return &addOnAttachment, s.Get(ctx, &addOnAttachment, fmt.Sprintf("/addon-attachments/%v", addOnAttachmentIdentity), nil, nil)
|
||
}
|
||
|
||
type AddOnAttachmentListResult []AddOnAttachment
|
||
|
||
// List existing add-on attachments.
|
||
func (s *Service) AddOnAttachmentList(ctx context.Context, lr *ListRange) (AddOnAttachmentListResult, error) {
|
||
var addOnAttachment AddOnAttachmentListResult
|
||
return addOnAttachment, s.Get(ctx, &addOnAttachment, fmt.Sprintf("/addon-attachments"), nil, lr)
|
||
}
|
||
|
||
type AddOnAttachmentListByAddOnResult []AddOnAttachment
|
||
|
||
// List existing add-on attachments for an add-on.
|
||
func (s *Service) AddOnAttachmentListByAddOn(ctx context.Context, addOnIdentity string, lr *ListRange) (AddOnAttachmentListByAddOnResult, error) {
|
||
var addOnAttachment AddOnAttachmentListByAddOnResult
|
||
return addOnAttachment, s.Get(ctx, &addOnAttachment, fmt.Sprintf("/addons/%v/addon-attachments", addOnIdentity), nil, lr)
|
||
}
|
||
|
||
type AddOnAttachmentListByAppResult []AddOnAttachment
|
||
|
||
// List existing add-on attachments for an app.
|
||
func (s *Service) AddOnAttachmentListByApp(ctx context.Context, appIdentity string, lr *ListRange) (AddOnAttachmentListByAppResult, error) {
|
||
var addOnAttachment AddOnAttachmentListByAppResult
|
||
return addOnAttachment, s.Get(ctx, &addOnAttachment, fmt.Sprintf("/apps/%v/addon-attachments", appIdentity), nil, lr)
|
||
}
|
||
|
||
// Info for existing add-on attachment for an app.
|
||
func (s *Service) AddOnAttachmentInfoByApp(ctx context.Context, appIdentity string, addOnAttachmentScopedIdentity string) (*AddOnAttachment, error) {
|
||
var addOnAttachment AddOnAttachment
|
||
return &addOnAttachment, s.Get(ctx, &addOnAttachment, fmt.Sprintf("/apps/%v/addon-attachments/%v", appIdentity, addOnAttachmentScopedIdentity), nil, nil)
|
||
}
|
||
|
||
// Configuration of an Add-on
|
||
type AddOnConfig struct {
|
||
Name string `json:"name" url:"name,key"` // unique name of the config
|
||
Value *string `json:"value" url:"value,key"` // value of the config
|
||
}
|
||
type AddOnConfigListResult []AddOnConfig
|
||
|
||
// Get an add-on's config. Accessible by customers with access and by
|
||
// the add-on partner providing this add-on.
|
||
func (s *Service) AddOnConfigList(ctx context.Context, addOnIdentity string, lr *ListRange) (AddOnConfigListResult, error) {
|
||
var addOnConfig AddOnConfigListResult
|
||
return addOnConfig, s.Get(ctx, &addOnConfig, fmt.Sprintf("/addons/%v/config", addOnIdentity), nil, lr)
|
||
}
|
||
|
||
type AddOnConfigUpdateOpts struct {
|
||
Config *[]*struct {
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of the config
|
||
Value *string `json:"value,omitempty" url:"value,omitempty,key"` // value of the config
|
||
} `json:"config,omitempty" url:"config,omitempty,key"`
|
||
}
|
||
type AddOnConfigUpdateResult []AddOnConfig
|
||
|
||
// Update an add-on's config. Can only be accessed by the add-on partner
|
||
// providing this add-on.
|
||
func (s *Service) AddOnConfigUpdate(ctx context.Context, addOnIdentity string, o AddOnConfigUpdateOpts) (AddOnConfigUpdateResult, error) {
|
||
var addOnConfig AddOnConfigUpdateResult
|
||
return addOnConfig, s.Patch(ctx, &addOnConfig, fmt.Sprintf("/addons/%v/config", addOnIdentity), o)
|
||
}
|
||
|
||
// Add-on Plan Actions are Provider functionality for specific add-on
|
||
// installations
|
||
type AddOnPlanAction struct {
|
||
Action string `json:"action" url:"action,key"` // identifier of the action to take that is sent via SSO
|
||
ID string `json:"id" url:"id,key"` // a unique identifier
|
||
Label string `json:"label" url:"label,key"` // the display text shown in Dashboard
|
||
RequiresOwner bool `json:"requires_owner" url:"requires_owner,key"` // if the action requires the user to own the app
|
||
URL string `json:"url" url:"url,key"` // absolute URL to use instead of an action
|
||
}
|
||
|
||
// Add-on region capabilities represent the relationship between an
|
||
// Add-on Service and a specific Region. Only Beta and GA add-ons are
|
||
// returned by these endpoints.
|
||
type AddOnRegionCapability struct {
|
||
AddonService struct {
|
||
CliPluginName *string `json:"cli_plugin_name" url:"cli_plugin_name,key"` // npm package name of the add-on service's Heroku CLI plugin
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on-service was created
|
||
HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service
|
||
Name string `json:"name" url:"name,key"` // unique name of this add-on-service
|
||
State string `json:"state" url:"state,key"` // release status for add-on service
|
||
SupportsMultipleInstallations bool `json:"supports_multiple_installations" url:"supports_multiple_installations,key"` // whether or not apps can have access to more than one instance of this
|
||
// add-on at the same time
|
||
SupportsSharing bool `json:"supports_sharing" url:"supports_sharing,key"` // whether or not apps can have access to add-ons billed to a different
|
||
// app
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on-service was updated
|
||
} `json:"addon_service" url:"addon_service,key"` // Add-on services represent add-ons that may be provisioned for apps.
|
||
// Endpoints under add-on services can be accessed without
|
||
// authentication.
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this add-on-region-capability
|
||
Region struct {
|
||
Country string `json:"country" url:"country,key"` // country where the region exists
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when region was created
|
||
Description string `json:"description" url:"description,key"` // description of region
|
||
ID string `json:"id" url:"id,key"` // unique identifier of region
|
||
Locale string `json:"locale" url:"locale,key"` // area in the country where the region exists
|
||
Name string `json:"name" url:"name,key"` // unique name of region
|
||
PrivateCapable bool `json:"private_capable" url:"private_capable,key"` // whether or not region is available for creating a Private Space
|
||
Provider struct {
|
||
Name string `json:"name" url:"name,key"` // name of provider
|
||
Region string `json:"region" url:"region,key"` // region name used by provider
|
||
} `json:"provider" url:"provider,key"` // provider of underlying substrate
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when region was updated
|
||
} `json:"region" url:"region,key"` // A region represents a geographic location in which your application
|
||
// may run.
|
||
SupportsPrivateNetworking bool `json:"supports_private_networking" url:"supports_private_networking,key"` // whether the add-on can be installed to a Space
|
||
}
|
||
type AddOnRegionCapabilityListResult []AddOnRegionCapability
|
||
|
||
// List all existing add-on region capabilities.
|
||
func (s *Service) AddOnRegionCapabilityList(ctx context.Context, lr *ListRange) (AddOnRegionCapabilityListResult, error) {
|
||
var addOnRegionCapability AddOnRegionCapabilityListResult
|
||
return addOnRegionCapability, s.Get(ctx, &addOnRegionCapability, fmt.Sprintf("/addon-region-capabilities"), nil, lr)
|
||
}
|
||
|
||
type AddOnRegionCapabilityListByAddOnServiceResult []AddOnRegionCapability
|
||
|
||
// List existing add-on region capabilities for an add-on-service
|
||
func (s *Service) AddOnRegionCapabilityListByAddOnService(ctx context.Context, addOnServiceIdentity string, lr *ListRange) (AddOnRegionCapabilityListByAddOnServiceResult, error) {
|
||
var addOnRegionCapability AddOnRegionCapabilityListByAddOnServiceResult
|
||
return addOnRegionCapability, s.Get(ctx, &addOnRegionCapability, fmt.Sprintf("/addon-services/%v/region-capabilities", addOnServiceIdentity), nil, lr)
|
||
}
|
||
|
||
type AddOnRegionCapabilityListByRegionResult []AddOnRegionCapability
|
||
|
||
// List existing add-on region capabilities for a region.
|
||
func (s *Service) AddOnRegionCapabilityListByRegion(ctx context.Context, regionIdentity string, lr *ListRange) (AddOnRegionCapabilityListByRegionResult, error) {
|
||
var addOnRegionCapability AddOnRegionCapabilityListByRegionResult
|
||
return addOnRegionCapability, s.Get(ctx, &addOnRegionCapability, fmt.Sprintf("/regions/%v/addon-region-capabilities", regionIdentity), nil, lr)
|
||
}
|
||
|
||
// Add-on services represent add-ons that may be provisioned for apps.
|
||
// Endpoints under add-on services can be accessed without
|
||
// authentication.
|
||
type AddOnService struct {
|
||
CliPluginName *string `json:"cli_plugin_name" url:"cli_plugin_name,key"` // npm package name of the add-on service's Heroku CLI plugin
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on-service was created
|
||
HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service
|
||
Name string `json:"name" url:"name,key"` // unique name of this add-on-service
|
||
State string `json:"state" url:"state,key"` // release status for add-on service
|
||
SupportsMultipleInstallations bool `json:"supports_multiple_installations" url:"supports_multiple_installations,key"` // whether or not apps can have access to more than one instance of this
|
||
// add-on at the same time
|
||
SupportsSharing bool `json:"supports_sharing" url:"supports_sharing,key"` // whether or not apps can have access to add-ons billed to a different
|
||
// app
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on-service was updated
|
||
}
|
||
|
||
// Info for existing add-on-service.
|
||
func (s *Service) AddOnServiceInfo(ctx context.Context, addOnServiceIdentity string) (*AddOnService, error) {
|
||
var addOnService AddOnService
|
||
return &addOnService, s.Get(ctx, &addOnService, fmt.Sprintf("/addon-services/%v", addOnServiceIdentity), nil, nil)
|
||
}
|
||
|
||
type AddOnServiceListResult []AddOnService
|
||
|
||
// List existing add-on-services.
|
||
func (s *Service) AddOnServiceList(ctx context.Context, lr *ListRange) (AddOnServiceListResult, error) {
|
||
var addOnService AddOnServiceListResult
|
||
return addOnService, s.Get(ctx, &addOnService, fmt.Sprintf("/addon-services"), nil, lr)
|
||
}
|
||
|
||
// An app represents the program that you would like to deploy and run
|
||
// on Heroku.
|
||
type App struct {
|
||
ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived
|
||
BuildStack struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of stack
|
||
Name string `json:"name" url:"name,key"` // unique name of stack
|
||
} `json:"build_stack" url:"build_stack,key"` // identity of the stack that will be used for new builds
|
||
BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created
|
||
GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
Organization *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of organization
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
} `json:"organization" url:"organization,key"` // identity of organization
|
||
Owner struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"owner" url:"owner,key"` // identity of app owner
|
||
Region struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of region
|
||
Name string `json:"name" url:"name,key"` // unique name of region
|
||
} `json:"region" url:"region,key"` // identity of app region
|
||
ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released
|
||
RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app
|
||
SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app
|
||
Space *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of space
|
||
Name string `json:"name" url:"name,key"` // unique name of space
|
||
Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled
|
||
} `json:"space" url:"space,key"` // identity of space
|
||
Stack struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of stack
|
||
Name string `json:"name" url:"name,key"` // unique name of stack
|
||
} `json:"stack" url:"stack,key"` // identity of app stack
|
||
Team *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of team
|
||
Name string `json:"name" url:"name,key"` // unique name of team
|
||
} `json:"team" url:"team,key"` // identity of team
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated
|
||
WebURL string `json:"web_url" url:"web_url,key"` // web URL of app
|
||
}
|
||
type AppCreateOpts struct {
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of app
|
||
Region *string `json:"region,omitempty" url:"region,omitempty,key"` // unique identifier of region
|
||
Stack *string `json:"stack,omitempty" url:"stack,omitempty,key"` // unique name of stack
|
||
}
|
||
|
||
// Create a new app.
|
||
func (s *Service) AppCreate(ctx context.Context, o AppCreateOpts) (*App, error) {
|
||
var app App
|
||
return &app, s.Post(ctx, &app, fmt.Sprintf("/apps"), o)
|
||
}
|
||
|
||
// Delete an existing app.
|
||
func (s *Service) AppDelete(ctx context.Context, appIdentity string) (*App, error) {
|
||
var app App
|
||
return &app, s.Delete(ctx, &app, fmt.Sprintf("/apps/%v", appIdentity))
|
||
}
|
||
|
||
// Info for existing app.
|
||
func (s *Service) AppInfo(ctx context.Context, appIdentity string) (*App, error) {
|
||
var app App
|
||
return &app, s.Get(ctx, &app, fmt.Sprintf("/apps/%v", appIdentity), nil, nil)
|
||
}
|
||
|
||
type AppListResult []App
|
||
|
||
// List existing apps.
|
||
func (s *Service) AppList(ctx context.Context, lr *ListRange) (AppListResult, error) {
|
||
var app AppListResult
|
||
return app, s.Get(ctx, &app, fmt.Sprintf("/apps"), nil, lr)
|
||
}
|
||
|
||
type AppListOwnedAndCollaboratedResult []App
|
||
|
||
// List owned and collaborated apps (excludes team apps).
|
||
func (s *Service) AppListOwnedAndCollaborated(ctx context.Context, accountIdentity string, lr *ListRange) (AppListOwnedAndCollaboratedResult, error) {
|
||
var app AppListOwnedAndCollaboratedResult
|
||
return app, s.Get(ctx, &app, fmt.Sprintf("/users/%v/apps", accountIdentity), nil, lr)
|
||
}
|
||
|
||
type AppUpdateOpts struct {
|
||
BuildStack *string `json:"build_stack,omitempty" url:"build_stack,omitempty,key"` // unique name of stack
|
||
Maintenance *bool `json:"maintenance,omitempty" url:"maintenance,omitempty,key"` // maintenance status of app
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of app
|
||
}
|
||
|
||
// Update an existing app.
|
||
func (s *Service) AppUpdate(ctx context.Context, appIdentity string, o AppUpdateOpts) (*App, error) {
|
||
var app App
|
||
return &app, s.Patch(ctx, &app, fmt.Sprintf("/apps/%v", appIdentity), o)
|
||
}
|
||
|
||
// An app feature represents a Heroku labs capability that can be
|
||
// enabled or disabled for an app on Heroku.
|
||
type AppFeature struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app feature was created
|
||
Description string `json:"description" url:"description,key"` // description of app feature
|
||
DisplayName string `json:"display_name" url:"display_name,key"` // user readable feature name
|
||
DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of app feature
|
||
Enabled bool `json:"enabled" url:"enabled,key"` // whether or not app feature has been enabled
|
||
FeedbackEmail string `json:"feedback_email" url:"feedback_email,key"` // e-mail to send feedback about the feature
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app feature
|
||
Name string `json:"name" url:"name,key"` // unique name of app feature
|
||
State string `json:"state" url:"state,key"` // state of app feature
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app feature was updated
|
||
}
|
||
|
||
// Info for an existing app feature.
|
||
func (s *Service) AppFeatureInfo(ctx context.Context, appIdentity string, appFeatureIdentity string) (*AppFeature, error) {
|
||
var appFeature AppFeature
|
||
return &appFeature, s.Get(ctx, &appFeature, fmt.Sprintf("/apps/%v/features/%v", appIdentity, appFeatureIdentity), nil, nil)
|
||
}
|
||
|
||
type AppFeatureListResult []AppFeature
|
||
|
||
// List existing app features.
|
||
func (s *Service) AppFeatureList(ctx context.Context, appIdentity string, lr *ListRange) (AppFeatureListResult, error) {
|
||
var appFeature AppFeatureListResult
|
||
return appFeature, s.Get(ctx, &appFeature, fmt.Sprintf("/apps/%v/features", appIdentity), nil, lr)
|
||
}
|
||
|
||
type AppFeatureUpdateOpts struct {
|
||
Enabled bool `json:"enabled" url:"enabled,key"` // whether or not app feature has been enabled
|
||
}
|
||
|
||
// Update an existing app feature.
|
||
func (s *Service) AppFeatureUpdate(ctx context.Context, appIdentity string, appFeatureIdentity string, o AppFeatureUpdateOpts) (*AppFeature, error) {
|
||
var appFeature AppFeature
|
||
return &appFeature, s.Patch(ctx, &appFeature, fmt.Sprintf("/apps/%v/features/%v", appIdentity, appFeatureIdentity), o)
|
||
}
|
||
|
||
// App formation set describes the combination of process types with
|
||
// their quantities and sizes as well as application process tier
|
||
type AppFormationSet struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // app being described by the formation-set
|
||
Description string `json:"description" url:"description,key"` // a string representation of the formation set
|
||
ProcessTier string `json:"process_tier" url:"process_tier,key"` // application process tier
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // last time fomation-set was updated
|
||
}
|
||
|
||
// An app setup represents an app on Heroku that is setup using an
|
||
// environment, addons, and scripts described in an app.json manifest
|
||
// file.
|
||
type AppSetup struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // identity of app
|
||
Build *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of build
|
||
OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The
|
||
// stream is available as either `text/plain` or `text/event-stream`.
|
||
// Clients should be prepared to handle disconnects and can resume the
|
||
// stream by sending a `Range` header (for `text/plain`) or a
|
||
// `Last-Event-Id` header (for `text/event-stream`).
|
||
Status string `json:"status" url:"status,key"` // status of build
|
||
} `json:"build" url:"build,key"` // identity and status of build
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app setup was created
|
||
FailureMessage *string `json:"failure_message" url:"failure_message,key"` // reason that app setup has failed
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app setup
|
||
ManifestErrors []string `json:"manifest_errors" url:"manifest_errors,key"` // errors associated with invalid app.json manifest file
|
||
Postdeploy *struct {
|
||
ExitCode int `json:"exit_code" url:"exit_code,key"` // The exit code of the postdeploy script
|
||
Output string `json:"output" url:"output,key"` // output of the postdeploy script
|
||
} `json:"postdeploy" url:"postdeploy,key"` // result of postdeploy script
|
||
ResolvedSuccessURL *string `json:"resolved_success_url" url:"resolved_success_url,key"` // fully qualified success url
|
||
Status string `json:"status" url:"status,key"` // the overall status of app setup
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app setup was updated
|
||
}
|
||
type AppSetupCreateOpts struct {
|
||
App *struct {
|
||
Locked *bool `json:"locked,omitempty" url:"locked,omitempty,key"` // are other organization members forbidden from joining this app.
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of app
|
||
Organization *string `json:"organization,omitempty" url:"organization,omitempty,key"` // unique name of organization
|
||
Personal *bool `json:"personal,omitempty" url:"personal,omitempty,key"` // force creation of the app in the user account even if a default org
|
||
// is set.
|
||
Region *string `json:"region,omitempty" url:"region,omitempty,key"` // unique name of region
|
||
Space *string `json:"space,omitempty" url:"space,omitempty,key"` // unique name of space
|
||
Stack *string `json:"stack,omitempty" url:"stack,omitempty,key"` // unique name of stack
|
||
} `json:"app,omitempty" url:"app,omitempty,key"` // optional parameters for created app
|
||
Overrides *struct {
|
||
Buildpacks *[]*struct {
|
||
URL *string `json:"url,omitempty" url:"url,omitempty,key"` // location of the buildpack
|
||
} `json:"buildpacks,omitempty" url:"buildpacks,omitempty,key"` // overrides the buildpacks specified in the app.json manifest file
|
||
Env *map[string]string `json:"env,omitempty" url:"env,omitempty,key"` // overrides of the env specified in the app.json manifest file
|
||
} `json:"overrides,omitempty" url:"overrides,omitempty,key"` // overrides of keys in the app.json manifest file
|
||
SourceBlob struct {
|
||
Checksum *string `json:"checksum,omitempty" url:"checksum,omitempty,key"` // an optional checksum of the gzipped tarball for verifying its
|
||
// integrity
|
||
URL *string `json:"url,omitempty" url:"url,omitempty,key"` // URL of gzipped tarball of source code containing app.json manifest
|
||
// file
|
||
Version *string `json:"version,omitempty" url:"version,omitempty,key"` // Version of the gzipped tarball.
|
||
} `json:"source_blob" url:"source_blob,key"` // gzipped tarball of source code containing app.json manifest file
|
||
}
|
||
|
||
// Create a new app setup from a gzipped tar archive containing an
|
||
// app.json manifest file.
|
||
func (s *Service) AppSetupCreate(ctx context.Context, o AppSetupCreateOpts) (*AppSetup, error) {
|
||
var appSetup AppSetup
|
||
return &appSetup, s.Post(ctx, &appSetup, fmt.Sprintf("/app-setups"), o)
|
||
}
|
||
|
||
// Get the status of an app setup.
|
||
func (s *Service) AppSetupInfo(ctx context.Context, appSetupIdentity string) (*AppSetup, error) {
|
||
var appSetup AppSetup
|
||
return &appSetup, s.Get(ctx, &appSetup, fmt.Sprintf("/app-setups/%v", appSetupIdentity), nil, nil)
|
||
}
|
||
|
||
// An app transfer represents a two party interaction for transferring
|
||
// ownership of an app.
|
||
type AppTransfer struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // app involved in the transfer
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app transfer was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app transfer
|
||
Owner struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"owner" url:"owner,key"` // identity of the owner of the transfer
|
||
Recipient struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"recipient" url:"recipient,key"` // identity of the recipient of the transfer
|
||
State string `json:"state" url:"state,key"` // the current state of an app transfer
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app transfer was updated
|
||
}
|
||
type AppTransferCreateOpts struct {
|
||
App string `json:"app" url:"app,key"` // unique identifier of app
|
||
Recipient string `json:"recipient" url:"recipient,key"` // unique email address of account
|
||
Silent *bool `json:"silent,omitempty" url:"silent,omitempty,key"` // whether to suppress email notification when transferring apps
|
||
}
|
||
|
||
// Create a new app transfer.
|
||
func (s *Service) AppTransferCreate(ctx context.Context, o AppTransferCreateOpts) (*AppTransfer, error) {
|
||
var appTransfer AppTransfer
|
||
return &appTransfer, s.Post(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers"), o)
|
||
}
|
||
|
||
// Delete an existing app transfer
|
||
func (s *Service) AppTransferDelete(ctx context.Context, appTransferIdentity string) (*AppTransfer, error) {
|
||
var appTransfer AppTransfer
|
||
return &appTransfer, s.Delete(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers/%v", appTransferIdentity))
|
||
}
|
||
|
||
// Info for existing app transfer.
|
||
func (s *Service) AppTransferInfo(ctx context.Context, appTransferIdentity string) (*AppTransfer, error) {
|
||
var appTransfer AppTransfer
|
||
return &appTransfer, s.Get(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers/%v", appTransferIdentity), nil, nil)
|
||
}
|
||
|
||
type AppTransferListResult []AppTransfer
|
||
|
||
// List existing apps transfers.
|
||
func (s *Service) AppTransferList(ctx context.Context, lr *ListRange) (AppTransferListResult, error) {
|
||
var appTransfer AppTransferListResult
|
||
return appTransfer, s.Get(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers"), nil, lr)
|
||
}
|
||
|
||
type AppTransferUpdateOpts struct {
|
||
State string `json:"state" url:"state,key"` // the current state of an app transfer
|
||
}
|
||
|
||
// Update an existing app transfer.
|
||
func (s *Service) AppTransferUpdate(ctx context.Context, appTransferIdentity string, o AppTransferUpdateOpts) (*AppTransfer, error) {
|
||
var appTransfer AppTransfer
|
||
return &appTransfer, s.Patch(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers/%v", appTransferIdentity), o)
|
||
}
|
||
|
||
// A build represents the process of transforming a code tarball into a
|
||
// slug
|
||
type Build struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
} `json:"app" url:"app,key"` // app that the build belongs to
|
||
Buildpacks *[]struct {
|
||
URL string `json:"url" url:"url,key"` // location of the buildpack for the app. Either a url (unofficial
|
||
// buildpacks) or an internal urn (heroku official buildpacks).
|
||
} `json:"buildpacks" url:"buildpacks,key"` // buildpacks executed for this build, in order
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when build was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of build
|
||
OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The
|
||
// stream is available as either `text/plain` or `text/event-stream`.
|
||
// Clients should be prepared to handle disconnects and can resume the
|
||
// stream by sending a `Range` header (for `text/plain`) or a
|
||
// `Last-Event-Id` header (for `text/event-stream`).
|
||
Release *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of release
|
||
} `json:"release" url:"release,key"` // release resulting from the build
|
||
Slug *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of slug
|
||
} `json:"slug" url:"slug,key"` // slug created by this build
|
||
SourceBlob struct {
|
||
Checksum *string `json:"checksum" url:"checksum,key"` // an optional checksum of the gzipped tarball for verifying its
|
||
// integrity
|
||
URL string `json:"url" url:"url,key"` // URL where gzipped tar archive of source code for build was
|
||
// downloaded.
|
||
Version *string `json:"version" url:"version,key"` // Version of the gzipped tarball.
|
||
} `json:"source_blob" url:"source_blob,key"` // location of gzipped tarball of source code used to create build
|
||
Status string `json:"status" url:"status,key"` // status of build
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when build was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"user" url:"user,key"` // user that started the build
|
||
}
|
||
type BuildCreateOpts struct {
|
||
Buildpacks *[]*struct {
|
||
URL *string `json:"url,omitempty" url:"url,omitempty,key"` // location of the buildpack for the app. Either a url (unofficial
|
||
// buildpacks) or an internal urn (heroku official buildpacks).
|
||
} `json:"buildpacks,omitempty" url:"buildpacks,omitempty,key"` // buildpacks executed for this build, in order
|
||
SourceBlob struct {
|
||
Checksum *string `json:"checksum,omitempty" url:"checksum,omitempty,key"` // an optional checksum of the gzipped tarball for verifying its
|
||
// integrity
|
||
URL *string `json:"url,omitempty" url:"url,omitempty,key"` // URL where gzipped tar archive of source code for build was
|
||
// downloaded.
|
||
Version *string `json:"version,omitempty" url:"version,omitempty,key"` // Version of the gzipped tarball.
|
||
} `json:"source_blob" url:"source_blob,key"` // location of gzipped tarball of source code used to create build
|
||
}
|
||
|
||
// Create a new build.
|
||
func (s *Service) BuildCreate(ctx context.Context, appIdentity string, o BuildCreateOpts) (*Build, error) {
|
||
var build Build
|
||
return &build, s.Post(ctx, &build, fmt.Sprintf("/apps/%v/builds", appIdentity), o)
|
||
}
|
||
|
||
// Info for existing build.
|
||
func (s *Service) BuildInfo(ctx context.Context, appIdentity string, buildIdentity string) (*Build, error) {
|
||
var build Build
|
||
return &build, s.Get(ctx, &build, fmt.Sprintf("/apps/%v/builds/%v", appIdentity, buildIdentity), nil, nil)
|
||
}
|
||
|
||
type BuildListResult []Build
|
||
|
||
// List existing build.
|
||
func (s *Service) BuildList(ctx context.Context, appIdentity string, lr *ListRange) (BuildListResult, error) {
|
||
var build BuildListResult
|
||
return build, s.Get(ctx, &build, fmt.Sprintf("/apps/%v/builds", appIdentity), nil, lr)
|
||
}
|
||
|
||
// A build result contains the output from a build.
|
||
type BuildResult struct {
|
||
Build struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of build
|
||
OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The
|
||
// stream is available as either `text/plain` or `text/event-stream`.
|
||
// Clients should be prepared to handle disconnects and can resume the
|
||
// stream by sending a `Range` header (for `text/plain`) or a
|
||
// `Last-Event-Id` header (for `text/event-stream`).
|
||
Status string `json:"status" url:"status,key"` // status of build
|
||
} `json:"build" url:"build,key"` // identity of build
|
||
ExitCode float64 `json:"exit_code" url:"exit_code,key"` // status from the build
|
||
Lines []struct {
|
||
Line string `json:"line" url:"line,key"` // A line of output from the build.
|
||
Stream string `json:"stream" url:"stream,key"` // The output stream where the line was sent.
|
||
} `json:"lines" url:"lines,key"` // A list of all the lines of a build's output. This has been replaced
|
||
// by the `output_stream_url` attribute on the build resource.
|
||
}
|
||
|
||
// Info for existing result.
|
||
func (s *Service) BuildResultInfo(ctx context.Context, appIdentity string, buildIdentity string) (*BuildResult, error) {
|
||
var buildResult BuildResult
|
||
return &buildResult, s.Get(ctx, &buildResult, fmt.Sprintf("/apps/%v/builds/%v/result", appIdentity, buildIdentity), nil, nil)
|
||
}
|
||
|
||
// A buildpack installation represents a buildpack that will be run
|
||
// against an app.
|
||
type BuildpackInstallation struct {
|
||
Buildpack struct {
|
||
Name string `json:"name" url:"name,key"` // either the shorthand name (heroku official buildpacks) or url
|
||
// (unofficial buildpacks) of the buildpack for the app
|
||
URL string `json:"url" url:"url,key"` // location of the buildpack for the app. Either a url (unofficial
|
||
// buildpacks) or an internal urn (heroku official buildpacks).
|
||
} `json:"buildpack" url:"buildpack,key"` // buildpack
|
||
Ordinal int `json:"ordinal" url:"ordinal,key"` // determines the order in which the buildpacks will execute
|
||
}
|
||
type BuildpackInstallationUpdateOpts struct {
|
||
Updates []struct {
|
||
Buildpack string `json:"buildpack" url:"buildpack,key"` // location of the buildpack for the app. Either a url (unofficial
|
||
// buildpacks) or an internal urn (heroku official buildpacks).
|
||
} `json:"updates" url:"updates,key"` // The buildpack attribute can accept a name, a url, or a urn.
|
||
}
|
||
type BuildpackInstallationUpdateResult []BuildpackInstallation
|
||
|
||
// Update an app's buildpack installations.
|
||
func (s *Service) BuildpackInstallationUpdate(ctx context.Context, appIdentity string, o BuildpackInstallationUpdateOpts) (BuildpackInstallationUpdateResult, error) {
|
||
var buildpackInstallation BuildpackInstallationUpdateResult
|
||
return buildpackInstallation, s.Put(ctx, &buildpackInstallation, fmt.Sprintf("/apps/%v/buildpack-installations", appIdentity), o)
|
||
}
|
||
|
||
type BuildpackInstallationListResult []BuildpackInstallation
|
||
|
||
// List an app's existing buildpack installations.
|
||
func (s *Service) BuildpackInstallationList(ctx context.Context, appIdentity string, lr *ListRange) (BuildpackInstallationListResult, error) {
|
||
var buildpackInstallation BuildpackInstallationListResult
|
||
return buildpackInstallation, s.Get(ctx, &buildpackInstallation, fmt.Sprintf("/apps/%v/buildpack-installations", appIdentity), nil, lr)
|
||
}
|
||
|
||
// A collaborator represents an account that has been given access to an
|
||
// app on Heroku.
|
||
type Collaborator struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // app collaborator belongs to
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of collaborator
|
||
Permissions []struct {
|
||
Description string `json:"description" url:"description,key"` // A description of what the app permission allows.
|
||
Name string `json:"name" url:"name,key"` // The name of the app permission.
|
||
} `json:"permissions" url:"permissions,key"`
|
||
Role *string `json:"role" url:"role,key"` // role in the team
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"user" url:"user,key"` // identity of collaborated account
|
||
}
|
||
type CollaboratorCreateOpts struct {
|
||
Silent *bool `json:"silent,omitempty" url:"silent,omitempty,key"` // whether to suppress email invitation when creating collaborator
|
||
User string `json:"user" url:"user,key"` // unique email address of account
|
||
}
|
||
|
||
// Create a new collaborator.
|
||
func (s *Service) CollaboratorCreate(ctx context.Context, appIdentity string, o CollaboratorCreateOpts) (*Collaborator, error) {
|
||
var collaborator Collaborator
|
||
return &collaborator, s.Post(ctx, &collaborator, fmt.Sprintf("/apps/%v/collaborators", appIdentity), o)
|
||
}
|
||
|
||
// Delete an existing collaborator.
|
||
func (s *Service) CollaboratorDelete(ctx context.Context, appIdentity string, collaboratorIdentity string) (*Collaborator, error) {
|
||
var collaborator Collaborator
|
||
return &collaborator, s.Delete(ctx, &collaborator, fmt.Sprintf("/apps/%v/collaborators/%v", appIdentity, collaboratorIdentity))
|
||
}
|
||
|
||
// Info for existing collaborator.
|
||
func (s *Service) CollaboratorInfo(ctx context.Context, appIdentity string, collaboratorIdentity string) (*Collaborator, error) {
|
||
var collaborator Collaborator
|
||
return &collaborator, s.Get(ctx, &collaborator, fmt.Sprintf("/apps/%v/collaborators/%v", appIdentity, collaboratorIdentity), nil, nil)
|
||
}
|
||
|
||
type CollaboratorListResult []Collaborator
|
||
|
||
// List existing collaborators.
|
||
func (s *Service) CollaboratorList(ctx context.Context, appIdentity string, lr *ListRange) (CollaboratorListResult, error) {
|
||
var collaborator CollaboratorListResult
|
||
return collaborator, s.Get(ctx, &collaborator, fmt.Sprintf("/apps/%v/collaborators", appIdentity), nil, lr)
|
||
}
|
||
|
||
// Config Vars allow you to manage the configuration information
|
||
// provided to an app on Heroku.
|
||
type ConfigVar map[string]string
|
||
type ConfigVarInfoForAppResult map[string]*string
|
||
|
||
// Get config-vars for app.
|
||
func (s *Service) ConfigVarInfoForApp(ctx context.Context, appIdentity string) (ConfigVarInfoForAppResult, error) {
|
||
var configVar ConfigVarInfoForAppResult
|
||
return configVar, s.Get(ctx, &configVar, fmt.Sprintf("/apps/%v/config-vars", appIdentity), nil, nil)
|
||
}
|
||
|
||
type ConfigVarInfoForAppReleaseResult map[string]*string
|
||
|
||
// Get config-vars for a release.
|
||
func (s *Service) ConfigVarInfoForAppRelease(ctx context.Context, appIdentity string, releaseIdentity string) (ConfigVarInfoForAppReleaseResult, error) {
|
||
var configVar ConfigVarInfoForAppReleaseResult
|
||
return configVar, s.Get(ctx, &configVar, fmt.Sprintf("/apps/%v/releases/%v/config-vars", appIdentity, releaseIdentity), nil, nil)
|
||
}
|
||
|
||
type ConfigVarUpdateResult map[string]*string
|
||
|
||
// Update config-vars for app. You can update existing config-vars by
|
||
// setting them again, and remove by setting it to `null`.
|
||
func (s *Service) ConfigVarUpdate(ctx context.Context, appIdentity string, o map[string]*string) (ConfigVarUpdateResult, error) {
|
||
var configVar ConfigVarUpdateResult
|
||
return configVar, s.Patch(ctx, &configVar, fmt.Sprintf("/apps/%v/config-vars", appIdentity), o)
|
||
}
|
||
|
||
// A credit represents value that will be used up before further charges
|
||
// are assigned to an account.
|
||
type Credit struct {
|
||
Amount float64 `json:"amount" url:"amount,key"` // total value of credit in cents
|
||
Balance float64 `json:"balance" url:"balance,key"` // remaining value of credit in cents
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when credit was created
|
||
ExpiresAt time.Time `json:"expires_at" url:"expires_at,key"` // when credit will expire
|
||
ID string `json:"id" url:"id,key"` // unique identifier of credit
|
||
Title string `json:"title" url:"title,key"` // a name for credit
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when credit was updated
|
||
}
|
||
type CreditCreateOpts struct {
|
||
Code1 *string `json:"code1,omitempty" url:"code1,omitempty,key"` // first code from a discount card
|
||
Code2 *string `json:"code2,omitempty" url:"code2,omitempty,key"` // second code from a discount card
|
||
}
|
||
|
||
// Create a new credit.
|
||
func (s *Service) CreditCreate(ctx context.Context, o CreditCreateOpts) (*Credit, error) {
|
||
var credit Credit
|
||
return &credit, s.Post(ctx, &credit, fmt.Sprintf("/account/credits"), o)
|
||
}
|
||
|
||
// Info for existing credit.
|
||
func (s *Service) CreditInfo(ctx context.Context, creditIdentity string) (*Credit, error) {
|
||
var credit Credit
|
||
return &credit, s.Get(ctx, &credit, fmt.Sprintf("/account/credits/%v", creditIdentity), nil, nil)
|
||
}
|
||
|
||
type CreditListResult []Credit
|
||
|
||
// List existing credits.
|
||
func (s *Service) CreditList(ctx context.Context, lr *ListRange) (CreditListResult, error) {
|
||
var credit CreditListResult
|
||
return credit, s.Get(ctx, &credit, fmt.Sprintf("/account/credits"), nil, lr)
|
||
}
|
||
|
||
// Domains define what web routes should be routed to an app on Heroku.
|
||
type Domain struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // app that owns the domain
|
||
CName *string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when domain was created
|
||
Hostname string `json:"hostname" url:"hostname,key"` // full hostname
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this domain
|
||
Kind string `json:"kind" url:"kind,key"` // type of domain name
|
||
Status string `json:"status" url:"status,key"` // status of this record's cname
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when domain was updated
|
||
}
|
||
type DomainCreateOpts struct {
|
||
Hostname string `json:"hostname" url:"hostname,key"` // full hostname
|
||
}
|
||
|
||
// Create a new domain.
|
||
func (s *Service) DomainCreate(ctx context.Context, appIdentity string, o DomainCreateOpts) (*Domain, error) {
|
||
var domain Domain
|
||
return &domain, s.Post(ctx, &domain, fmt.Sprintf("/apps/%v/domains", appIdentity), o)
|
||
}
|
||
|
||
// Delete an existing domain
|
||
func (s *Service) DomainDelete(ctx context.Context, appIdentity string, domainIdentity string) (*Domain, error) {
|
||
var domain Domain
|
||
return &domain, s.Delete(ctx, &domain, fmt.Sprintf("/apps/%v/domains/%v", appIdentity, domainIdentity))
|
||
}
|
||
|
||
// Info for existing domain.
|
||
func (s *Service) DomainInfo(ctx context.Context, appIdentity string, domainIdentity string) (*Domain, error) {
|
||
var domain Domain
|
||
return &domain, s.Get(ctx, &domain, fmt.Sprintf("/apps/%v/domains/%v", appIdentity, domainIdentity), nil, nil)
|
||
}
|
||
|
||
type DomainListResult []Domain
|
||
|
||
// List existing domains.
|
||
func (s *Service) DomainList(ctx context.Context, appIdentity string, lr *ListRange) (DomainListResult, error) {
|
||
var domain DomainListResult
|
||
return domain, s.Get(ctx, &domain, fmt.Sprintf("/apps/%v/domains", appIdentity), nil, lr)
|
||
}
|
||
|
||
// Dynos encapsulate running processes of an app on Heroku. Detailed
|
||
// information about dyno sizes can be found at:
|
||
// [https://devcenter.heroku.com/articles/dyno-types](https://devcenter.h
|
||
// eroku.com/articles/dyno-types).
|
||
type Dyno struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // app formation belongs to
|
||
AttachURL *string `json:"attach_url" url:"attach_url,key"` // a URL to stream output from for attached processes or null for
|
||
// non-attached processes
|
||
Command string `json:"command" url:"command,key"` // command used to start this process
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when dyno was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this dyno
|
||
Name string `json:"name" url:"name,key"` // the name of this process on this dyno
|
||
Release struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of release
|
||
Version int `json:"version" url:"version,key"` // unique version assigned to the release
|
||
} `json:"release" url:"release,key"` // app release of the dyno
|
||
Size string `json:"size" url:"size,key"` // dyno size (default: "standard-1X")
|
||
State string `json:"state" url:"state,key"` // current status of process (either: crashed, down, idle, starting, or
|
||
// up)
|
||
Type string `json:"type" url:"type,key"` // type of process
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when process last changed state
|
||
}
|
||
type DynoCreateOpts struct {
|
||
Attach *bool `json:"attach,omitempty" url:"attach,omitempty,key"` // whether to stream output or not
|
||
Command string `json:"command" url:"command,key"` // command used to start this process
|
||
Env *map[string]string `json:"env,omitempty" url:"env,omitempty,key"` // custom environment to add to the dyno config vars
|
||
ForceNoTty *bool `json:"force_no_tty,omitempty" url:"force_no_tty,omitempty,key"` // force an attached one-off dyno to not run in a tty
|
||
Size *string `json:"size,omitempty" url:"size,omitempty,key"` // dyno size (default: "standard-1X")
|
||
TimeToLive *int `json:"time_to_live,omitempty" url:"time_to_live,omitempty,key"` // seconds until dyno expires, after which it will soon be killed
|
||
Type *string `json:"type,omitempty" url:"type,omitempty,key"` // type of process
|
||
}
|
||
|
||
// Create a new dyno.
|
||
func (s *Service) DynoCreate(ctx context.Context, appIdentity string, o DynoCreateOpts) (*Dyno, error) {
|
||
var dyno Dyno
|
||
return &dyno, s.Post(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos", appIdentity), o)
|
||
}
|
||
|
||
type DynoRestartResult struct{}
|
||
|
||
// Restart dyno.
|
||
func (s *Service) DynoRestart(ctx context.Context, appIdentity string, dynoIdentity string) (DynoRestartResult, error) {
|
||
var dyno DynoRestartResult
|
||
return dyno, s.Delete(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos/%v", appIdentity, dynoIdentity))
|
||
}
|
||
|
||
type DynoRestartAllResult struct{}
|
||
|
||
// Restart all dynos.
|
||
func (s *Service) DynoRestartAll(ctx context.Context, appIdentity string) (DynoRestartAllResult, error) {
|
||
var dyno DynoRestartAllResult
|
||
return dyno, s.Delete(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos", appIdentity))
|
||
}
|
||
|
||
type DynoStopResult struct{}
|
||
|
||
// Stop dyno.
|
||
func (s *Service) DynoStop(ctx context.Context, appIdentity string, dynoIdentity string) (DynoStopResult, error) {
|
||
var dyno DynoStopResult
|
||
return dyno, s.Post(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos/%v/actions/stop", appIdentity, dynoIdentity), nil)
|
||
}
|
||
|
||
// Info for existing dyno.
|
||
func (s *Service) DynoInfo(ctx context.Context, appIdentity string, dynoIdentity string) (*Dyno, error) {
|
||
var dyno Dyno
|
||
return &dyno, s.Get(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos/%v", appIdentity, dynoIdentity), nil, nil)
|
||
}
|
||
|
||
type DynoListResult []Dyno
|
||
|
||
// List existing dynos.
|
||
func (s *Service) DynoList(ctx context.Context, appIdentity string, lr *ListRange) (DynoListResult, error) {
|
||
var dyno DynoListResult
|
||
return dyno, s.Get(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos", appIdentity), nil, lr)
|
||
}
|
||
|
||
// Dyno sizes are the values and details of sizes that can be assigned
|
||
// to dynos. This information can also be found at :
|
||
// [https://devcenter.heroku.com/articles/dyno-types](https://devcenter.h
|
||
// eroku.com/articles/dyno-types).
|
||
type DynoSize struct {
|
||
Compute int `json:"compute" url:"compute,key"` // minimum vCPUs, non-dedicated may get more depending on load
|
||
Cost *struct{} `json:"cost" url:"cost,key"` // price information for this dyno size
|
||
Dedicated bool `json:"dedicated" url:"dedicated,key"` // whether this dyno will be dedicated to one user
|
||
DynoUnits int `json:"dyno_units" url:"dyno_units,key"` // unit of consumption for Heroku Enterprise customers
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this dyno size
|
||
Memory float64 `json:"memory" url:"memory,key"` // amount of RAM in GB
|
||
Name string `json:"name" url:"name,key"` // the name of this dyno-size
|
||
PrivateSpaceOnly bool `json:"private_space_only" url:"private_space_only,key"` // whether this dyno can only be provisioned in a private space
|
||
}
|
||
|
||
// Info for existing dyno size.
|
||
func (s *Service) DynoSizeInfo(ctx context.Context, dynoSizeIdentity string) (*DynoSize, error) {
|
||
var dynoSize DynoSize
|
||
return &dynoSize, s.Get(ctx, &dynoSize, fmt.Sprintf("/dyno-sizes/%v", dynoSizeIdentity), nil, nil)
|
||
}
|
||
|
||
type DynoSizeListResult []DynoSize
|
||
|
||
// List existing dyno sizes.
|
||
func (s *Service) DynoSizeList(ctx context.Context, lr *ListRange) (DynoSizeListResult, error) {
|
||
var dynoSize DynoSizeListResult
|
||
return dynoSize, s.Get(ctx, &dynoSize, fmt.Sprintf("/dyno-sizes"), nil, lr)
|
||
}
|
||
|
||
// An event represents an action performed on another API resource.
|
||
type Event struct {
|
||
Action string `json:"action" url:"action,key"` // the operation performed on the resource
|
||
Actor struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"actor" url:"actor,key"` // user that performed the operation
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the event was created
|
||
Data struct {
|
||
AllowTracking bool `json:"allow_tracking" url:"allow_tracking,key"` // whether to allow third party web activity tracking
|
||
Beta bool `json:"beta" url:"beta,key"` // whether allowed to utilize beta Heroku features
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account was created
|
||
DefaultOrganization *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of organization
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
} `json:"default_organization" url:"default_organization,key"` // organization selected by default
|
||
DelinquentAt *time.Time `json:"delinquent_at" url:"delinquent_at,key"` // when account became delinquent
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
IdentityProvider *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this identity provider
|
||
Organization struct {
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
} `json:"organization" url:"organization,key"`
|
||
} `json:"identity_provider" url:"identity_provider,key"` // Identity Provider details for federated users.
|
||
LastLogin *time.Time `json:"last_login" url:"last_login,key"` // when account last authorized with Heroku
|
||
Name *string `json:"name" url:"name,key"` // full name of the account owner
|
||
SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account
|
||
SuspendedAt *time.Time `json:"suspended_at" url:"suspended_at,key"` // when account was suspended
|
||
TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether two-factor auth is enabled on the account
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account was updated
|
||
Verified bool `json:"verified" url:"verified,key"` // whether account has been verified with billing information
|
||
} `json:"data" url:"data,key"` // An account represents an individual signed up to use the Heroku
|
||
// platform.
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an event
|
||
PreviousData struct{} `json:"previous_data" url:"previous_data,key"` // data fields that were changed during update with previous values
|
||
PublishedAt *time.Time `json:"published_at" url:"published_at,key"` // when the event was published
|
||
Resource string `json:"resource" url:"resource,key"` // the type of resource affected
|
||
Sequence *string `json:"sequence" url:"sequence,key"` // a numeric string representing the event's sequence
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the event was updated (same as created)
|
||
Version string `json:"version" url:"version,key"` // the event's API version string
|
||
}
|
||
|
||
// A failed event represents a failure of an action performed on another
|
||
// API resource.
|
||
type FailedEvent struct {
|
||
Action string `json:"action" url:"action,key"` // The attempted operation performed on the resource.
|
||
Code *int `json:"code" url:"code,key"` // An HTTP status code.
|
||
ErrorID *string `json:"error_id" url:"error_id,key"` // ID of error raised.
|
||
Message string `json:"message" url:"message,key"` // A detailed error message.
|
||
Method string `json:"method" url:"method,key"` // The HTTP method type of the failed action.
|
||
Path string `json:"path" url:"path,key"` // The path of the attempted operation.
|
||
Resource *struct {
|
||
ID string `json:"id" url:"id,key"` // Unique identifier of a resource.
|
||
Name string `json:"name" url:"name,key"` // the type of resource affected
|
||
} `json:"resource" url:"resource,key"` // The related resource of the failed action.
|
||
}
|
||
|
||
// Filters are special endpoints to allow for API consumers to specify a
|
||
// subset of resources to consume in order to reduce the number of
|
||
// requests that are performed. Each filter endpoint endpoint is
|
||
// responsible for determining its supported request format. The
|
||
// endpoints are over POST in order to handle large request bodies
|
||
// without hitting request uri query length limitations, but the
|
||
// requests themselves are idempotent and will not have side effects.
|
||
type FilterApps struct{}
|
||
type FilterAppsAppsOpts struct {
|
||
In *struct {
|
||
ID *[]*string `json:"id,omitempty" url:"id,omitempty,key"`
|
||
} `json:"in,omitempty" url:"in,omitempty,key"`
|
||
}
|
||
type FilterAppsAppsResult []struct {
|
||
ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived
|
||
BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created
|
||
GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Joined bool `json:"joined" url:"joined,key"` // is the current member a collaborator on this app.
|
||
Locked bool `json:"locked" url:"locked,key"` // are other team members forbidden from joining this app.
|
||
Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
Owner *struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"owner" url:"owner,key"` // identity of app owner
|
||
Region struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of region
|
||
Name string `json:"name" url:"name,key"` // unique name of region
|
||
} `json:"region" url:"region,key"` // identity of app region
|
||
ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released
|
||
RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app
|
||
SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app
|
||
Space *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of space
|
||
Name string `json:"name" url:"name,key"` // unique name of space
|
||
} `json:"space" url:"space,key"` // identity of space
|
||
Stack struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of stack
|
||
Name string `json:"name" url:"name,key"` // unique name of stack
|
||
} `json:"stack" url:"stack,key"` // identity of app stack
|
||
Team *struct {
|
||
Name string `json:"name" url:"name,key"` // unique name of team
|
||
} `json:"team" url:"team,key"` // team that owns this app
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated
|
||
WebURL string `json:"web_url" url:"web_url,key"` // web URL of app
|
||
}
|
||
|
||
// Request an apps list filtered by app id.
|
||
func (s *Service) FilterAppsApps(ctx context.Context, o FilterAppsAppsOpts) (FilterAppsAppsResult, error) {
|
||
var filterApps FilterAppsAppsResult
|
||
return filterApps, s.Post(ctx, &filterApps, fmt.Sprintf("/filters/apps"), o)
|
||
}
|
||
|
||
// The formation of processes that should be maintained for an app.
|
||
// Update the formation to scale processes or change dyno sizes.
|
||
// Available process type names and commands are defined by the
|
||
// `process_types` attribute for the [slug](#slug) currently released on
|
||
// an app.
|
||
type Formation struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // app formation belongs to
|
||
Command string `json:"command" url:"command,key"` // command to use to launch this process
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when process type was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this process type
|
||
Quantity int `json:"quantity" url:"quantity,key"` // number of processes to maintain
|
||
Size string `json:"size" url:"size,key"` // dyno size (default: "standard-1X")
|
||
Type string `json:"type" url:"type,key"` // type of process to maintain
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when dyno type was updated
|
||
}
|
||
|
||
// Info for a process type
|
||
func (s *Service) FormationInfo(ctx context.Context, appIdentity string, formationIdentity string) (*Formation, error) {
|
||
var formation Formation
|
||
return &formation, s.Get(ctx, &formation, fmt.Sprintf("/apps/%v/formation/%v", appIdentity, formationIdentity), nil, nil)
|
||
}
|
||
|
||
type FormationListResult []Formation
|
||
|
||
// List process type formation
|
||
func (s *Service) FormationList(ctx context.Context, appIdentity string, lr *ListRange) (FormationListResult, error) {
|
||
var formation FormationListResult
|
||
return formation, s.Get(ctx, &formation, fmt.Sprintf("/apps/%v/formation", appIdentity), nil, lr)
|
||
}
|
||
|
||
type FormationBatchUpdateOpts struct {
|
||
Updates []struct {
|
||
Quantity *int `json:"quantity,omitempty" url:"quantity,omitempty,key"` // number of processes to maintain
|
||
Size *string `json:"size,omitempty" url:"size,omitempty,key"` // dyno size (default: "standard-1X")
|
||
Type string `json:"type" url:"type,key"` // type of process to maintain
|
||
} `json:"updates" url:"updates,key"` // Array with formation updates. Each element must have "type", the id
|
||
// or name of the process type to be updated, and can optionally update
|
||
// its "quantity" or "size".
|
||
}
|
||
type FormationBatchUpdateResult []Formation
|
||
|
||
// Batch update process types
|
||
func (s *Service) FormationBatchUpdate(ctx context.Context, appIdentity string, o FormationBatchUpdateOpts) (FormationBatchUpdateResult, error) {
|
||
var formation FormationBatchUpdateResult
|
||
return formation, s.Patch(ctx, &formation, fmt.Sprintf("/apps/%v/formation", appIdentity), o)
|
||
}
|
||
|
||
type FormationUpdateOpts struct {
|
||
Quantity *int `json:"quantity,omitempty" url:"quantity,omitempty,key"` // number of processes to maintain
|
||
Size *string `json:"size,omitempty" url:"size,omitempty,key"` // dyno size (default: "standard-1X")
|
||
}
|
||
|
||
// Update process type
|
||
func (s *Service) FormationUpdate(ctx context.Context, appIdentity string, formationIdentity string, o FormationUpdateOpts) (*Formation, error) {
|
||
var formation Formation
|
||
return &formation, s.Patch(ctx, &formation, fmt.Sprintf("/apps/%v/formation/%v", appIdentity, formationIdentity), o)
|
||
}
|
||
|
||
// Identity Providers represent the SAML configuration of an
|
||
// Organization.
|
||
type IdentityProvider struct {
|
||
Certificate string `json:"certificate" url:"certificate,key"` // raw contents of the public certificate (eg: .crt or .pem file)
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when provider record was created
|
||
EntityID string `json:"entity_id" url:"entity_id,key"` // URL identifier provided by the identity provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this identity provider
|
||
Organization *struct {
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
} `json:"organization" url:"organization,key"` // organization associated with this identity provider
|
||
SloTargetURL string `json:"slo_target_url" url:"slo_target_url,key"` // single log out URL for this identity provider
|
||
SsoTargetURL string `json:"sso_target_url" url:"sso_target_url,key"` // single sign on URL for this identity provider
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the identity provider record was updated
|
||
}
|
||
type IdentityProviderListByOrganizationResult []IdentityProvider
|
||
|
||
// Get a list of an organization's Identity Providers
|
||
func (s *Service) IdentityProviderListByOrganization(ctx context.Context, organizationName string, lr *ListRange) (IdentityProviderListByOrganizationResult, error) {
|
||
var identityProvider IdentityProviderListByOrganizationResult
|
||
return identityProvider, s.Get(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers", organizationName), nil, lr)
|
||
}
|
||
|
||
type IdentityProviderCreateByOrganizationOpts struct {
|
||
Certificate string `json:"certificate" url:"certificate,key"` // raw contents of the public certificate (eg: .crt or .pem file)
|
||
EntityID string `json:"entity_id" url:"entity_id,key"` // URL identifier provided by the identity provider
|
||
SloTargetURL *string `json:"slo_target_url,omitempty" url:"slo_target_url,omitempty,key"` // single log out URL for this identity provider
|
||
SsoTargetURL string `json:"sso_target_url" url:"sso_target_url,key"` // single sign on URL for this identity provider
|
||
}
|
||
|
||
// Create an Identity Provider for an organization
|
||
func (s *Service) IdentityProviderCreateByOrganization(ctx context.Context, organizationName string, o IdentityProviderCreateByOrganizationOpts) (*IdentityProvider, error) {
|
||
var identityProvider IdentityProvider
|
||
return &identityProvider, s.Post(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers", organizationName), o)
|
||
}
|
||
|
||
type IdentityProviderUpdateByOrganizationOpts struct {
|
||
Certificate *string `json:"certificate,omitempty" url:"certificate,omitempty,key"` // raw contents of the public certificate (eg: .crt or .pem file)
|
||
EntityID *string `json:"entity_id,omitempty" url:"entity_id,omitempty,key"` // URL identifier provided by the identity provider
|
||
SloTargetURL *string `json:"slo_target_url,omitempty" url:"slo_target_url,omitempty,key"` // single log out URL for this identity provider
|
||
SsoTargetURL *string `json:"sso_target_url,omitempty" url:"sso_target_url,omitempty,key"` // single sign on URL for this identity provider
|
||
}
|
||
|
||
// Update an organization's Identity Provider
|
||
func (s *Service) IdentityProviderUpdateByOrganization(ctx context.Context, organizationName string, identityProviderID string, o IdentityProviderUpdateByOrganizationOpts) (*IdentityProvider, error) {
|
||
var identityProvider IdentityProvider
|
||
return &identityProvider, s.Patch(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers/%v", organizationName, identityProviderID), o)
|
||
}
|
||
|
||
// Delete an organization's Identity Provider
|
||
func (s *Service) IdentityProviderDeleteByOrganization(ctx context.Context, organizationName string, identityProviderID string) (*IdentityProvider, error) {
|
||
var identityProvider IdentityProvider
|
||
return &identityProvider, s.Delete(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers/%v", organizationName, identityProviderID))
|
||
}
|
||
|
||
type IdentityProviderListByTeamResult []IdentityProvider
|
||
|
||
// Get a list of a team's Identity Providers
|
||
func (s *Service) IdentityProviderListByTeam(ctx context.Context, teamIdentity string, lr *ListRange) (IdentityProviderListByTeamResult, error) {
|
||
var identityProvider IdentityProviderListByTeamResult
|
||
return identityProvider, s.Get(ctx, &identityProvider, fmt.Sprintf("/teams/%v/identity-providers", teamIdentity), nil, lr)
|
||
}
|
||
|
||
type IdentityProviderCreateByTeamOpts struct {
|
||
Certificate string `json:"certificate" url:"certificate,key"` // raw contents of the public certificate (eg: .crt or .pem file)
|
||
EntityID string `json:"entity_id" url:"entity_id,key"` // URL identifier provided by the identity provider
|
||
SloTargetURL *string `json:"slo_target_url,omitempty" url:"slo_target_url,omitempty,key"` // single log out URL for this identity provider
|
||
SsoTargetURL string `json:"sso_target_url" url:"sso_target_url,key"` // single sign on URL for this identity provider
|
||
}
|
||
|
||
// Create an Identity Provider for a team
|
||
func (s *Service) IdentityProviderCreateByTeam(ctx context.Context, teamIdentity string, o IdentityProviderCreateByTeamOpts) (*IdentityProvider, error) {
|
||
var identityProvider IdentityProvider
|
||
return &identityProvider, s.Post(ctx, &identityProvider, fmt.Sprintf("/teams/%v/identity-providers", teamIdentity), o)
|
||
}
|
||
|
||
type IdentityProviderUpdateByTeamOpts struct {
|
||
Certificate *string `json:"certificate,omitempty" url:"certificate,omitempty,key"` // raw contents of the public certificate (eg: .crt or .pem file)
|
||
EntityID *string `json:"entity_id,omitempty" url:"entity_id,omitempty,key"` // URL identifier provided by the identity provider
|
||
SloTargetURL *string `json:"slo_target_url,omitempty" url:"slo_target_url,omitempty,key"` // single log out URL for this identity provider
|
||
SsoTargetURL *string `json:"sso_target_url,omitempty" url:"sso_target_url,omitempty,key"` // single sign on URL for this identity provider
|
||
}
|
||
|
||
// Update a team's Identity Provider
|
||
func (s *Service) IdentityProviderUpdateByTeam(ctx context.Context, teamIdentity string, identityProviderID string, o IdentityProviderUpdateByTeamOpts) (*IdentityProvider, error) {
|
||
var identityProvider IdentityProvider
|
||
return &identityProvider, s.Patch(ctx, &identityProvider, fmt.Sprintf("/teams/%v/identity-providers/%v", teamIdentity, identityProviderID), o)
|
||
}
|
||
|
||
// Delete a team's Identity Provider
|
||
func (s *Service) IdentityProviderDeleteByTeam(ctx context.Context, teamName string, identityProviderID string) (*IdentityProvider, error) {
|
||
var identityProvider IdentityProvider
|
||
return &identityProvider, s.Delete(ctx, &identityProvider, fmt.Sprintf("/teams/%v/identity-providers/%v", teamName, identityProviderID))
|
||
}
|
||
|
||
// An inbound-ruleset is a collection of rules that specify what hosts
|
||
// can or cannot connect to an application.
|
||
type InboundRuleset struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when inbound-ruleset was created
|
||
CreatedBy string `json:"created_by" url:"created_by,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an inbound-ruleset
|
||
Rules []struct {
|
||
Action string `json:"action" url:"action,key"` // states whether the connection is allowed or denied
|
||
Source string `json:"source" url:"source,key"` // is the request’s source in CIDR notation
|
||
} `json:"rules" url:"rules,key"`
|
||
}
|
||
|
||
// Current inbound ruleset for a space
|
||
func (s *Service) InboundRulesetCurrent(ctx context.Context, spaceIdentity string) (*InboundRuleset, error) {
|
||
var inboundRuleset InboundRuleset
|
||
return &inboundRuleset, s.Get(ctx, &inboundRuleset, fmt.Sprintf("/spaces/%v/inbound-ruleset", spaceIdentity), nil, nil)
|
||
}
|
||
|
||
// Info on an existing Inbound Ruleset
|
||
func (s *Service) InboundRulesetInfo(ctx context.Context, spaceIdentity string, inboundRulesetIdentity string) (*InboundRuleset, error) {
|
||
var inboundRuleset InboundRuleset
|
||
return &inboundRuleset, s.Get(ctx, &inboundRuleset, fmt.Sprintf("/spaces/%v/inbound-rulesets/%v", spaceIdentity, inboundRulesetIdentity), nil, nil)
|
||
}
|
||
|
||
type InboundRulesetListResult []InboundRuleset
|
||
|
||
// List all inbound rulesets for a space
|
||
func (s *Service) InboundRulesetList(ctx context.Context, spaceIdentity string, lr *ListRange) (InboundRulesetListResult, error) {
|
||
var inboundRuleset InboundRulesetListResult
|
||
return inboundRuleset, s.Get(ctx, &inboundRuleset, fmt.Sprintf("/spaces/%v/inbound-rulesets", spaceIdentity), nil, lr)
|
||
}
|
||
|
||
type InboundRulesetCreateOpts struct {
|
||
Rules *[]*struct {
|
||
Action string `json:"action" url:"action,key"` // states whether the connection is allowed or denied
|
||
Source string `json:"source" url:"source,key"` // is the request’s source in CIDR notation
|
||
} `json:"rules,omitempty" url:"rules,omitempty,key"`
|
||
}
|
||
|
||
// Create a new inbound ruleset
|
||
func (s *Service) InboundRulesetCreate(ctx context.Context, spaceIdentity string, o InboundRulesetCreateOpts) (*InboundRuleset, error) {
|
||
var inboundRuleset InboundRuleset
|
||
return &inboundRuleset, s.Put(ctx, &inboundRuleset, fmt.Sprintf("/spaces/%v/inbound-ruleset", spaceIdentity), o)
|
||
}
|
||
|
||
// An invitation represents an invite sent to a user to use the Heroku
|
||
// platform.
|
||
type Invitation struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invitation was created
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"user" url:"user,key"`
|
||
VerificationRequired bool `json:"verification_required" url:"verification_required,key"` // if the invitation requires verification
|
||
}
|
||
|
||
// Info for invitation.
|
||
func (s *Service) InvitationInfo(ctx context.Context, invitationIdentity string) (*Invitation, error) {
|
||
var invitation Invitation
|
||
return &invitation, s.Get(ctx, &invitation, fmt.Sprintf("/invitations/%v", invitationIdentity), nil, nil)
|
||
}
|
||
|
||
type InvitationCreateOpts struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
Name *string `json:"name" url:"name,key"` // full name of the account owner
|
||
}
|
||
|
||
// Invite a user.
|
||
func (s *Service) InvitationCreate(ctx context.Context, o InvitationCreateOpts) (*Invitation, error) {
|
||
var invitation Invitation
|
||
return &invitation, s.Post(ctx, &invitation, fmt.Sprintf("/invitations"), o)
|
||
}
|
||
|
||
type InvitationSendVerificationCodeOpts struct {
|
||
Method *string `json:"method,omitempty" url:"method,omitempty,key"` // Transport used to send verification code
|
||
PhoneNumber string `json:"phone_number" url:"phone_number,key"` // Phone number to send verification code
|
||
}
|
||
|
||
// Send a verification code for an invitation via SMS/phone call.
|
||
func (s *Service) InvitationSendVerificationCode(ctx context.Context, invitationIdentity string, o InvitationSendVerificationCodeOpts) (*Invitation, error) {
|
||
var invitation Invitation
|
||
return &invitation, s.Post(ctx, &invitation, fmt.Sprintf("/invitations/%v/actions/send-verification", invitationIdentity), o)
|
||
}
|
||
|
||
type InvitationVerifyOpts struct {
|
||
VerificationCode string `json:"verification_code" url:"verification_code,key"` // Value used to verify invitation
|
||
}
|
||
|
||
// Verify an invitation using a verification code.
|
||
func (s *Service) InvitationVerify(ctx context.Context, invitationIdentity string, o InvitationVerifyOpts) (*Invitation, error) {
|
||
var invitation Invitation
|
||
return &invitation, s.Post(ctx, &invitation, fmt.Sprintf("/invitations/%v/actions/verify", invitationIdentity), o)
|
||
}
|
||
|
||
type InvitationFinalizeOpts struct {
|
||
Password string `json:"password" url:"password,key"` // current password on the account
|
||
PasswordConfirmation string `json:"password_confirmation" url:"password_confirmation,key"` // current password on the account
|
||
ReceiveNewsletter *bool `json:"receive_newsletter,omitempty" url:"receive_newsletter,omitempty,key"` // whether this user should receive a newsletter or not
|
||
}
|
||
|
||
// Finalize Invitation and Create Account.
|
||
func (s *Service) InvitationFinalize(ctx context.Context, invitationIdentity string, o InvitationFinalizeOpts) (*Invitation, error) {
|
||
var invitation Invitation
|
||
return &invitation, s.Patch(ctx, &invitation, fmt.Sprintf("/invitations/%v", invitationIdentity), o)
|
||
}
|
||
|
||
// An invoice is an itemized bill of goods for an account which includes
|
||
// pricing and charges.
|
||
type Invoice struct {
|
||
ChargesTotal float64 `json:"charges_total" url:"charges_total,key"` // total charges on this invoice
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invoice was created
|
||
CreditsTotal float64 `json:"credits_total" url:"credits_total,key"` // total credits on this invoice
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this invoice
|
||
Number int `json:"number" url:"number,key"` // human readable invoice number
|
||
PeriodEnd string `json:"period_end" url:"period_end,key"` // the ending date that the invoice covers
|
||
PeriodStart string `json:"period_start" url:"period_start,key"` // the starting date that this invoice covers
|
||
State int `json:"state" url:"state,key"` // payment status for this invoice (pending, successful, failed)
|
||
Total float64 `json:"total" url:"total,key"` // combined total of charges and credits on this invoice
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invoice was updated
|
||
}
|
||
|
||
// Info for existing invoice.
|
||
func (s *Service) InvoiceInfo(ctx context.Context, invoiceIdentity int) (*Invoice, error) {
|
||
var invoice Invoice
|
||
return &invoice, s.Get(ctx, &invoice, fmt.Sprintf("/account/invoices/%v", invoiceIdentity), nil, nil)
|
||
}
|
||
|
||
type InvoiceListResult []Invoice
|
||
|
||
// List existing invoices.
|
||
func (s *Service) InvoiceList(ctx context.Context, lr *ListRange) (InvoiceListResult, error) {
|
||
var invoice InvoiceListResult
|
||
return invoice, s.Get(ctx, &invoice, fmt.Sprintf("/account/invoices"), nil, lr)
|
||
}
|
||
|
||
// An invoice address represents the address that should be listed on an
|
||
// invoice.
|
||
type InvoiceAddress struct {
|
||
Address1 string `json:"address_1" url:"address_1,key"` // invoice street address line 1
|
||
Address2 string `json:"address_2" url:"address_2,key"` // invoice street address line 2
|
||
City string `json:"city" url:"city,key"` // invoice city
|
||
Country string `json:"country" url:"country,key"` // country
|
||
HerokuID string `json:"heroku_id" url:"heroku_id,key"` // heroku_id identifier reference
|
||
Other string `json:"other" url:"other,key"` // metadata / additional information to go on invoice
|
||
PostalCode string `json:"postal_code" url:"postal_code,key"` // invoice zip code
|
||
State string `json:"state" url:"state,key"` // invoice state
|
||
UseInvoiceAddress bool `json:"use_invoice_address" url:"use_invoice_address,key"` // flag to use the invoice address for an account or not
|
||
}
|
||
|
||
// Retrieve existing invoice address.
|
||
func (s *Service) InvoiceAddressInfo(ctx context.Context) (*InvoiceAddress, error) {
|
||
var invoiceAddress InvoiceAddress
|
||
return &invoiceAddress, s.Get(ctx, &invoiceAddress, fmt.Sprintf("/account/invoice-address"), nil, nil)
|
||
}
|
||
|
||
type InvoiceAddressUpdateOpts struct {
|
||
Address1 *string `json:"address_1,omitempty" url:"address_1,omitempty,key"` // invoice street address line 1
|
||
Address2 *string `json:"address_2,omitempty" url:"address_2,omitempty,key"` // invoice street address line 2
|
||
City *string `json:"city,omitempty" url:"city,omitempty,key"` // invoice city
|
||
Country *string `json:"country,omitempty" url:"country,omitempty,key"` // country
|
||
Other *string `json:"other,omitempty" url:"other,omitempty,key"` // metadata / additional information to go on invoice
|
||
PostalCode *string `json:"postal_code,omitempty" url:"postal_code,omitempty,key"` // invoice zip code
|
||
State *string `json:"state,omitempty" url:"state,omitempty,key"` // invoice state
|
||
UseInvoiceAddress *bool `json:"use_invoice_address,omitempty" url:"use_invoice_address,omitempty,key"` // flag to use the invoice address for an account or not
|
||
}
|
||
|
||
// Update invoice address for an account.
|
||
func (s *Service) InvoiceAddressUpdate(ctx context.Context, o InvoiceAddressUpdateOpts) (*InvoiceAddress, error) {
|
||
var invoiceAddress InvoiceAddress
|
||
return &invoiceAddress, s.Put(ctx, &invoiceAddress, fmt.Sprintf("/account/invoice-address"), o)
|
||
}
|
||
|
||
// Keys represent public SSH keys associated with an account and are
|
||
// used to authorize accounts as they are performing git operations.
|
||
type Key struct {
|
||
Comment string `json:"comment" url:"comment,key"` // comment on the key
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when key was created
|
||
Email string `json:"email" url:"email,key"` // deprecated. Please refer to 'comment' instead
|
||
Fingerprint string `json:"fingerprint" url:"fingerprint,key"` // a unique identifying string based on contents
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this key
|
||
PublicKey string `json:"public_key" url:"public_key,key"` // full public_key as uploaded
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when key was updated
|
||
}
|
||
|
||
// Info for existing key.
|
||
func (s *Service) KeyInfo(ctx context.Context, keyIdentity string) (*Key, error) {
|
||
var key Key
|
||
return &key, s.Get(ctx, &key, fmt.Sprintf("/account/keys/%v", keyIdentity), nil, nil)
|
||
}
|
||
|
||
type KeyListResult []Key
|
||
|
||
// List existing keys.
|
||
func (s *Service) KeyList(ctx context.Context, lr *ListRange) (KeyListResult, error) {
|
||
var key KeyListResult
|
||
return key, s.Get(ctx, &key, fmt.Sprintf("/account/keys"), nil, lr)
|
||
}
|
||
|
||
// [Log drains](https://devcenter.heroku.com/articles/log-drains)
|
||
// provide a way to forward your Heroku logs to an external syslog
|
||
// server for long-term archiving. This external service must be
|
||
// configured to receive syslog packets from Heroku, whereupon its URL
|
||
// can be added to an app using this API. Some add-ons will add a log
|
||
// drain when they are provisioned to an app. These drains can only be
|
||
// removed by removing the add-on.
|
||
type LogDrain struct {
|
||
Addon *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of add-on
|
||
Name string `json:"name" url:"name,key"` // globally unique name of the add-on
|
||
} `json:"addon" url:"addon,key"` // add-on that created the drain
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when log drain was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this log drain
|
||
Token string `json:"token" url:"token,key"` // token associated with the log drain
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when log drain was updated
|
||
URL string `json:"url" url:"url,key"` // url associated with the log drain
|
||
}
|
||
type LogDrainCreateOpts struct {
|
||
URL string `json:"url" url:"url,key"` // url associated with the log drain
|
||
}
|
||
|
||
// Create a new log drain.
|
||
func (s *Service) LogDrainCreate(ctx context.Context, appIdentity string, o LogDrainCreateOpts) (*LogDrain, error) {
|
||
var logDrain LogDrain
|
||
return &logDrain, s.Post(ctx, &logDrain, fmt.Sprintf("/apps/%v/log-drains", appIdentity), o)
|
||
}
|
||
|
||
// Delete an existing log drain. Log drains added by add-ons can only be
|
||
// removed by removing the add-on.
|
||
func (s *Service) LogDrainDelete(ctx context.Context, appIdentity string, logDrainQueryIdentity string) (*LogDrain, error) {
|
||
var logDrain LogDrain
|
||
return &logDrain, s.Delete(ctx, &logDrain, fmt.Sprintf("/apps/%v/log-drains/%v", appIdentity, logDrainQueryIdentity))
|
||
}
|
||
|
||
// Info for existing log drain.
|
||
func (s *Service) LogDrainInfo(ctx context.Context, appIdentity string, logDrainQueryIdentity string) (*LogDrain, error) {
|
||
var logDrain LogDrain
|
||
return &logDrain, s.Get(ctx, &logDrain, fmt.Sprintf("/apps/%v/log-drains/%v", appIdentity, logDrainQueryIdentity), nil, nil)
|
||
}
|
||
|
||
type LogDrainListResult []LogDrain
|
||
|
||
// List existing log drains.
|
||
func (s *Service) LogDrainList(ctx context.Context, appIdentity string, lr *ListRange) (LogDrainListResult, error) {
|
||
var logDrain LogDrainListResult
|
||
return logDrain, s.Get(ctx, &logDrain, fmt.Sprintf("/apps/%v/log-drains", appIdentity), nil, lr)
|
||
}
|
||
|
||
// A log session is a reference to the http based log stream for an app.
|
||
type LogSession struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when log connection was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this log session
|
||
LogplexURL string `json:"logplex_url" url:"logplex_url,key"` // URL for log streaming session
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when log session was updated
|
||
}
|
||
type LogSessionCreateOpts struct {
|
||
Dyno *string `json:"dyno,omitempty" url:"dyno,omitempty,key"` // dyno to limit results to
|
||
Lines *int `json:"lines,omitempty" url:"lines,omitempty,key"` // number of log lines to stream at once
|
||
Source *string `json:"source,omitempty" url:"source,omitempty,key"` // log source to limit results to
|
||
Tail *bool `json:"tail,omitempty" url:"tail,omitempty,key"` // whether to stream ongoing logs
|
||
}
|
||
|
||
// Create a new log session.
|
||
func (s *Service) LogSessionCreate(ctx context.Context, appIdentity string, o LogSessionCreateOpts) (*LogSession, error) {
|
||
var logSession LogSession
|
||
return &logSession, s.Post(ctx, &logSession, fmt.Sprintf("/apps/%v/log-sessions", appIdentity), o)
|
||
}
|
||
|
||
// OAuth authorizations represent clients that a Heroku user has
|
||
// authorized to automate, customize or extend their usage of the
|
||
// platform. For more information please refer to the [Heroku OAuth
|
||
// documentation](https://devcenter.heroku.com/articles/oauth)
|
||
type OAuthAuthorization struct {
|
||
AccessToken *struct {
|
||
ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with
|
||
// indefinite lifetime
|
||
ID string `json:"id" url:"id,key"` // unique identifier of OAuth token
|
||
Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization
|
||
} `json:"access_token" url:"access_token,key"` // access token for this authorization
|
||
Client *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client
|
||
Name string `json:"name" url:"name,key"` // OAuth client name
|
||
RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client
|
||
} `json:"client" url:"client,key"` // identifier of the client that obtained this authorization, if any
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth authorization was created
|
||
Grant *struct {
|
||
Code string `json:"code" url:"code,key"` // grant code received from OAuth web application authorization
|
||
ExpiresIn int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth grant expires
|
||
ID string `json:"id" url:"id,key"` // unique identifier of OAuth grant
|
||
} `json:"grant" url:"grant,key"` // this authorization's grant
|
||
ID string `json:"id" url:"id,key"` // unique identifier of OAuth authorization
|
||
RefreshToken *struct {
|
||
ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with
|
||
// indefinite lifetime
|
||
ID string `json:"id" url:"id,key"` // unique identifier of OAuth token
|
||
Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization
|
||
} `json:"refresh_token" url:"refresh_token,key"` // refresh token for this authorization
|
||
Scope []string `json:"scope" url:"scope,key"` // The scope of access OAuth authorization allows
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth authorization was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
FullName *string `json:"full_name" url:"full_name,key"` // full name of the account owner
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"user" url:"user,key"` // authenticated user associated with this authorization
|
||
}
|
||
type OAuthAuthorizationCreateOpts struct {
|
||
Client *string `json:"client,omitempty" url:"client,omitempty,key"` // unique identifier of this OAuth client
|
||
Description *string `json:"description,omitempty" url:"description,omitempty,key"` // human-friendly description of this OAuth authorization
|
||
ExpiresIn *int `json:"expires_in,omitempty" url:"expires_in,omitempty,key"` // seconds until OAuth token expires; may be `null` for tokens with
|
||
// indefinite lifetime
|
||
Scope []string `json:"scope" url:"scope,key"` // The scope of access OAuth authorization allows
|
||
}
|
||
|
||
// Create a new OAuth authorization.
|
||
func (s *Service) OAuthAuthorizationCreate(ctx context.Context, o OAuthAuthorizationCreateOpts) (*OAuthAuthorization, error) {
|
||
var oauthAuthorization OAuthAuthorization
|
||
return &oauthAuthorization, s.Post(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations"), o)
|
||
}
|
||
|
||
// Delete OAuth authorization.
|
||
func (s *Service) OAuthAuthorizationDelete(ctx context.Context, oauthAuthorizationIdentity string) (*OAuthAuthorization, error) {
|
||
var oauthAuthorization OAuthAuthorization
|
||
return &oauthAuthorization, s.Delete(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations/%v", oauthAuthorizationIdentity))
|
||
}
|
||
|
||
// Info for an OAuth authorization.
|
||
func (s *Service) OAuthAuthorizationInfo(ctx context.Context, oauthAuthorizationIdentity string) (*OAuthAuthorization, error) {
|
||
var oauthAuthorization OAuthAuthorization
|
||
return &oauthAuthorization, s.Get(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations/%v", oauthAuthorizationIdentity), nil, nil)
|
||
}
|
||
|
||
type OAuthAuthorizationListResult []OAuthAuthorization
|
||
|
||
// List OAuth authorizations.
|
||
func (s *Service) OAuthAuthorizationList(ctx context.Context, lr *ListRange) (OAuthAuthorizationListResult, error) {
|
||
var oauthAuthorization OAuthAuthorizationListResult
|
||
return oauthAuthorization, s.Get(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations"), nil, lr)
|
||
}
|
||
|
||
// Regenerate OAuth tokens. This endpoint is only available to direct
|
||
// authorizations or privileged OAuth clients.
|
||
func (s *Service) OAuthAuthorizationRegenerate(ctx context.Context, oauthAuthorizationIdentity string) (*OAuthAuthorization, error) {
|
||
var oauthAuthorization OAuthAuthorization
|
||
return &oauthAuthorization, s.Post(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations/%v/actions/regenerate-tokens", oauthAuthorizationIdentity), nil)
|
||
}
|
||
|
||
// OAuth clients are applications that Heroku users can authorize to
|
||
// automate, customize or extend their usage of the platform. For more
|
||
// information please refer to the [Heroku OAuth
|
||
// documentation](https://devcenter.heroku.com/articles/oauth).
|
||
type OAuthClient struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth client was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client
|
||
IgnoresDelinquent *bool `json:"ignores_delinquent" url:"ignores_delinquent,key"` // whether the client is still operable given a delinquent account
|
||
Name string `json:"name" url:"name,key"` // OAuth client name
|
||
RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client
|
||
Secret string `json:"secret" url:"secret,key"` // secret used to obtain OAuth authorizations under this client
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth client was updated
|
||
}
|
||
type OAuthClientCreateOpts struct {
|
||
Name string `json:"name" url:"name,key"` // OAuth client name
|
||
RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client
|
||
}
|
||
|
||
// Create a new OAuth client.
|
||
func (s *Service) OAuthClientCreate(ctx context.Context, o OAuthClientCreateOpts) (*OAuthClient, error) {
|
||
var oauthClient OAuthClient
|
||
return &oauthClient, s.Post(ctx, &oauthClient, fmt.Sprintf("/oauth/clients"), o)
|
||
}
|
||
|
||
// Delete OAuth client.
|
||
func (s *Service) OAuthClientDelete(ctx context.Context, oauthClientIdentity string) (*OAuthClient, error) {
|
||
var oauthClient OAuthClient
|
||
return &oauthClient, s.Delete(ctx, &oauthClient, fmt.Sprintf("/oauth/clients/%v", oauthClientIdentity))
|
||
}
|
||
|
||
// Info for an OAuth client
|
||
func (s *Service) OAuthClientInfo(ctx context.Context, oauthClientIdentity string) (*OAuthClient, error) {
|
||
var oauthClient OAuthClient
|
||
return &oauthClient, s.Get(ctx, &oauthClient, fmt.Sprintf("/oauth/clients/%v", oauthClientIdentity), nil, nil)
|
||
}
|
||
|
||
type OAuthClientListResult []OAuthClient
|
||
|
||
// List OAuth clients
|
||
func (s *Service) OAuthClientList(ctx context.Context, lr *ListRange) (OAuthClientListResult, error) {
|
||
var oauthClient OAuthClientListResult
|
||
return oauthClient, s.Get(ctx, &oauthClient, fmt.Sprintf("/oauth/clients"), nil, lr)
|
||
}
|
||
|
||
type OAuthClientUpdateOpts struct {
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // OAuth client name
|
||
RedirectURI *string `json:"redirect_uri,omitempty" url:"redirect_uri,omitempty,key"` // endpoint for redirection after authorization with OAuth client
|
||
}
|
||
|
||
// Update OAuth client
|
||
func (s *Service) OAuthClientUpdate(ctx context.Context, oauthClientIdentity string, o OAuthClientUpdateOpts) (*OAuthClient, error) {
|
||
var oauthClient OAuthClient
|
||
return &oauthClient, s.Patch(ctx, &oauthClient, fmt.Sprintf("/oauth/clients/%v", oauthClientIdentity), o)
|
||
}
|
||
|
||
// Rotate credentials for an OAuth client
|
||
func (s *Service) OAuthClientRotateCredentials(ctx context.Context, oauthClientIdentity string) (*OAuthClient, error) {
|
||
var oauthClient OAuthClient
|
||
return &oauthClient, s.Post(ctx, &oauthClient, fmt.Sprintf("/oauth/clients/%v/actions/rotate-credentials", oauthClientIdentity), nil)
|
||
}
|
||
|
||
// OAuth grants are used to obtain authorizations on behalf of a user.
|
||
// For more information please refer to the [Heroku OAuth
|
||
// documentation](https://devcenter.heroku.com/articles/oauth)
|
||
type OAuthGrant struct{}
|
||
|
||
// OAuth tokens provide access for authorized clients to act on behalf
|
||
// of a Heroku user to automate, customize or extend their usage of the
|
||
// platform. For more information please refer to the [Heroku OAuth
|
||
// documentation](https://devcenter.heroku.com/articles/oauth)
|
||
type OAuthToken struct {
|
||
AccessToken struct {
|
||
ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with
|
||
// indefinite lifetime
|
||
ID string `json:"id" url:"id,key"` // unique identifier of OAuth token
|
||
Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization
|
||
} `json:"access_token" url:"access_token,key"` // current access token
|
||
Authorization struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of OAuth authorization
|
||
} `json:"authorization" url:"authorization,key"` // authorization for this set of tokens
|
||
Client *struct {
|
||
Secret string `json:"secret" url:"secret,key"` // secret used to obtain OAuth authorizations under this client
|
||
} `json:"client" url:"client,key"` // OAuth client secret used to obtain token
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth token was created
|
||
Grant struct {
|
||
Code string `json:"code" url:"code,key"` // grant code received from OAuth web application authorization
|
||
Type string `json:"type" url:"type,key"` // type of grant requested, one of `authorization_code` or
|
||
// `refresh_token`
|
||
} `json:"grant" url:"grant,key"` // grant used on the underlying authorization
|
||
ID string `json:"id" url:"id,key"` // unique identifier of OAuth token
|
||
RefreshToken struct {
|
||
ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with
|
||
// indefinite lifetime
|
||
ID string `json:"id" url:"id,key"` // unique identifier of OAuth token
|
||
Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization
|
||
} `json:"refresh_token" url:"refresh_token,key"` // refresh token for this authorization
|
||
Session struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of OAuth token
|
||
} `json:"session" url:"session,key"` // OAuth session using this token
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth token was updated
|
||
User struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"user" url:"user,key"` // Reference to the user associated with this token
|
||
}
|
||
type OAuthTokenCreateOpts struct {
|
||
Client struct {
|
||
Secret *string `json:"secret,omitempty" url:"secret,omitempty,key"` // secret used to obtain OAuth authorizations under this client
|
||
} `json:"client" url:"client,key"`
|
||
Grant struct {
|
||
Code *string `json:"code,omitempty" url:"code,omitempty,key"` // grant code received from OAuth web application authorization
|
||
Type *string `json:"type,omitempty" url:"type,omitempty,key"` // type of grant requested, one of `authorization_code` or
|
||
// `refresh_token`
|
||
} `json:"grant" url:"grant,key"`
|
||
RefreshToken struct {
|
||
Token *string `json:"token,omitempty" url:"token,omitempty,key"` // contents of the token to be used for authorization
|
||
} `json:"refresh_token" url:"refresh_token,key"`
|
||
}
|
||
|
||
// Create a new OAuth token.
|
||
func (s *Service) OAuthTokenCreate(ctx context.Context, o OAuthTokenCreateOpts) (*OAuthToken, error) {
|
||
var oauthToken OAuthToken
|
||
return &oauthToken, s.Post(ctx, &oauthToken, fmt.Sprintf("/oauth/tokens"), o)
|
||
}
|
||
|
||
// Revoke OAuth access token.
|
||
func (s *Service) OAuthTokenDelete(ctx context.Context, oauthTokenIdentity string) (*OAuthToken, error) {
|
||
var oauthToken OAuthToken
|
||
return &oauthToken, s.Delete(ctx, &oauthToken, fmt.Sprintf("/oauth/tokens/%v", oauthTokenIdentity))
|
||
}
|
||
|
||
// Deprecated: Organizations allow you to manage access to a shared
|
||
// group of applications across your development team.
|
||
type Organization struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the organization was created
|
||
CreditCardCollections bool `json:"credit_card_collections" url:"credit_card_collections,key"` // whether charges incurred by the org are paid by credit card.
|
||
Default bool `json:"default" url:"default,key"` // whether to use this organization when none is specified
|
||
ID string `json:"id" url:"id,key"` // unique identifier of organization
|
||
MembershipLimit *float64 `json:"membership_limit" url:"membership_limit,key"` // upper limit of members allowed in an organization.
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
ProvisionedLicenses bool `json:"provisioned_licenses" url:"provisioned_licenses,key"` // whether the org is provisioned licenses by salesforce.
|
||
Role *string `json:"role" url:"role,key"` // role in the organization
|
||
Type string `json:"type" url:"type,key"` // type of organization.
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the organization was updated
|
||
}
|
||
type OrganizationListResult []Organization
|
||
|
||
// List organizations in which you are a member.
|
||
func (s *Service) OrganizationList(ctx context.Context, lr *ListRange) (OrganizationListResult, error) {
|
||
var organization OrganizationListResult
|
||
return organization, s.Get(ctx, &organization, fmt.Sprintf("/organizations"), nil, lr)
|
||
}
|
||
|
||
// Info for an organization.
|
||
func (s *Service) OrganizationInfo(ctx context.Context, organizationIdentity string) (*Organization, error) {
|
||
var organization Organization
|
||
return &organization, s.Get(ctx, &organization, fmt.Sprintf("/organizations/%v", organizationIdentity), nil, nil)
|
||
}
|
||
|
||
type OrganizationUpdateOpts struct {
|
||
Default *bool `json:"default,omitempty" url:"default,omitempty,key"` // whether to use this organization when none is specified
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of organization
|
||
}
|
||
|
||
// Update organization properties.
|
||
func (s *Service) OrganizationUpdate(ctx context.Context, organizationIdentity string, o OrganizationUpdateOpts) (*Organization, error) {
|
||
var organization Organization
|
||
return &organization, s.Patch(ctx, &organization, fmt.Sprintf("/organizations/%v", organizationIdentity), o)
|
||
}
|
||
|
||
type OrganizationCreateOpts struct {
|
||
Address1 *string `json:"address_1,omitempty" url:"address_1,omitempty,key"` // street address line 1
|
||
Address2 *string `json:"address_2,omitempty" url:"address_2,omitempty,key"` // street address line 2
|
||
CardNumber *string `json:"card_number,omitempty" url:"card_number,omitempty,key"` // encrypted card number of payment method
|
||
City *string `json:"city,omitempty" url:"city,omitempty,key"` // city
|
||
Country *string `json:"country,omitempty" url:"country,omitempty,key"` // country
|
||
Cvv *string `json:"cvv,omitempty" url:"cvv,omitempty,key"` // card verification value
|
||
ExpirationMonth *string `json:"expiration_month,omitempty" url:"expiration_month,omitempty,key"` // expiration month
|
||
ExpirationYear *string `json:"expiration_year,omitempty" url:"expiration_year,omitempty,key"` // expiration year
|
||
FirstName *string `json:"first_name,omitempty" url:"first_name,omitempty,key"` // the first name for payment method
|
||
LastName *string `json:"last_name,omitempty" url:"last_name,omitempty,key"` // the last name for payment method
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
Other *string `json:"other,omitempty" url:"other,omitempty,key"` // metadata
|
||
PostalCode *string `json:"postal_code,omitempty" url:"postal_code,omitempty,key"` // postal code
|
||
State *string `json:"state,omitempty" url:"state,omitempty,key"` // state
|
||
}
|
||
|
||
// Create a new organization.
|
||
func (s *Service) OrganizationCreate(ctx context.Context, o OrganizationCreateOpts) (*Organization, error) {
|
||
var organization Organization
|
||
return &organization, s.Post(ctx, &organization, fmt.Sprintf("/organizations"), o)
|
||
}
|
||
|
||
// Delete an existing organization.
|
||
func (s *Service) OrganizationDelete(ctx context.Context, organizationIdentity string) (*Organization, error) {
|
||
var organization Organization
|
||
return &organization, s.Delete(ctx, &organization, fmt.Sprintf("/organizations/%v", organizationIdentity))
|
||
}
|
||
|
||
// Deprecated: A list of add-ons the Organization uses across all apps
|
||
type OrganizationAddOn struct{}
|
||
type OrganizationAddOnListForOrganizationResult []struct {
|
||
Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on
|
||
AddonService struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service
|
||
Name string `json:"name" url:"name,key"` // unique name of this add-on-service
|
||
} `json:"addon_service" url:"addon_service,key"` // identity of add-on service
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // billing application associated with this add-on
|
||
ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of add-on
|
||
Name string `json:"name" url:"name,key"` // globally unique name of the add-on
|
||
Plan struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this plan
|
||
Name string `json:"name" url:"name,key"` // unique name of this plan
|
||
} `json:"plan" url:"plan,key"` // identity of add-on plan
|
||
ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider
|
||
State string `json:"state" url:"state,key"` // state in the add-on's lifecycle
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated
|
||
WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard)
|
||
}
|
||
|
||
// List add-ons used across all Organization apps
|
||
func (s *Service) OrganizationAddOnListForOrganization(ctx context.Context, organizationIdentity string, lr *ListRange) (OrganizationAddOnListForOrganizationResult, error) {
|
||
var organizationAddOn OrganizationAddOnListForOrganizationResult
|
||
return organizationAddOn, s.Get(ctx, &organizationAddOn, fmt.Sprintf("/organizations/%v/addons", organizationIdentity), nil, lr)
|
||
}
|
||
|
||
// Deprecated: An organization app encapsulates the organization
|
||
// specific functionality of Heroku apps.
|
||
type OrganizationApp struct {
|
||
ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived
|
||
BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created
|
||
GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Joined bool `json:"joined" url:"joined,key"` // is the current member a collaborator on this app.
|
||
Locked bool `json:"locked" url:"locked,key"` // are other organization members forbidden from joining this app.
|
||
Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
Organization *struct {
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
} `json:"organization" url:"organization,key"` // organization that owns this app
|
||
Owner *struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"owner" url:"owner,key"` // identity of app owner
|
||
Region struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of region
|
||
Name string `json:"name" url:"name,key"` // unique name of region
|
||
} `json:"region" url:"region,key"` // identity of app region
|
||
ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released
|
||
RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app
|
||
SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app
|
||
Space *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of space
|
||
Name string `json:"name" url:"name,key"` // unique name of space
|
||
} `json:"space" url:"space,key"` // identity of space
|
||
Stack struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of stack
|
||
Name string `json:"name" url:"name,key"` // unique name of stack
|
||
} `json:"stack" url:"stack,key"` // identity of app stack
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated
|
||
WebURL string `json:"web_url" url:"web_url,key"` // web URL of app
|
||
}
|
||
type OrganizationAppCreateOpts struct {
|
||
Locked *bool `json:"locked,omitempty" url:"locked,omitempty,key"` // are other organization members forbidden from joining this app.
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of app
|
||
Organization *string `json:"organization,omitempty" url:"organization,omitempty,key"` // unique name of organization
|
||
Personal *bool `json:"personal,omitempty" url:"personal,omitempty,key"` // force creation of the app in the user account even if a default org
|
||
// is set.
|
||
Region *string `json:"region,omitempty" url:"region,omitempty,key"` // unique name of region
|
||
Space *string `json:"space,omitempty" url:"space,omitempty,key"` // unique name of space
|
||
Stack *string `json:"stack,omitempty" url:"stack,omitempty,key"` // unique name of stack
|
||
}
|
||
|
||
// Create a new app in the specified organization, in the default
|
||
// organization if unspecified, or in personal account, if default
|
||
// organization is not set.
|
||
func (s *Service) OrganizationAppCreate(ctx context.Context, o OrganizationAppCreateOpts) (*OrganizationApp, error) {
|
||
var organizationApp OrganizationApp
|
||
return &organizationApp, s.Post(ctx, &organizationApp, fmt.Sprintf("/organizations/apps"), o)
|
||
}
|
||
|
||
type OrganizationAppListResult []OrganizationApp
|
||
|
||
// List apps in the default organization, or in personal account, if
|
||
// default organization is not set.
|
||
func (s *Service) OrganizationAppList(ctx context.Context, lr *ListRange) (OrganizationAppListResult, error) {
|
||
var organizationApp OrganizationAppListResult
|
||
return organizationApp, s.Get(ctx, &organizationApp, fmt.Sprintf("/organizations/apps"), nil, lr)
|
||
}
|
||
|
||
type OrganizationAppListForOrganizationResult []OrganizationApp
|
||
|
||
// List organization apps.
|
||
func (s *Service) OrganizationAppListForOrganization(ctx context.Context, organizationIdentity string, lr *ListRange) (OrganizationAppListForOrganizationResult, error) {
|
||
var organizationApp OrganizationAppListForOrganizationResult
|
||
return organizationApp, s.Get(ctx, &organizationApp, fmt.Sprintf("/organizations/%v/apps", organizationIdentity), nil, lr)
|
||
}
|
||
|
||
// Info for an organization app.
|
||
func (s *Service) OrganizationAppInfo(ctx context.Context, organizationAppIdentity string) (*OrganizationApp, error) {
|
||
var organizationApp OrganizationApp
|
||
return &organizationApp, s.Get(ctx, &organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), nil, nil)
|
||
}
|
||
|
||
type OrganizationAppUpdateLockedOpts struct {
|
||
Locked bool `json:"locked" url:"locked,key"` // are other organization members forbidden from joining this app.
|
||
}
|
||
|
||
// Lock or unlock an organization app.
|
||
func (s *Service) OrganizationAppUpdateLocked(ctx context.Context, organizationAppIdentity string, o OrganizationAppUpdateLockedOpts) (*OrganizationApp, error) {
|
||
var organizationApp OrganizationApp
|
||
return &organizationApp, s.Patch(ctx, &organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), o)
|
||
}
|
||
|
||
type OrganizationAppTransferToAccountOpts struct {
|
||
Owner string `json:"owner" url:"owner,key"` // unique email address of account
|
||
}
|
||
|
||
// Transfer an existing organization app to another Heroku account.
|
||
func (s *Service) OrganizationAppTransferToAccount(ctx context.Context, organizationAppIdentity string, o OrganizationAppTransferToAccountOpts) (*OrganizationApp, error) {
|
||
var organizationApp OrganizationApp
|
||
return &organizationApp, s.Patch(ctx, &organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), o)
|
||
}
|
||
|
||
type OrganizationAppTransferToOrganizationOpts struct {
|
||
Owner string `json:"owner" url:"owner,key"` // unique name of organization
|
||
}
|
||
|
||
// Transfer an existing organization app to another organization.
|
||
func (s *Service) OrganizationAppTransferToOrganization(ctx context.Context, organizationAppIdentity string, o OrganizationAppTransferToOrganizationOpts) (*OrganizationApp, error) {
|
||
var organizationApp OrganizationApp
|
||
return &organizationApp, s.Patch(ctx, &organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), o)
|
||
}
|
||
|
||
// Deprecated: An organization collaborator represents an account that
|
||
// has been given access to an organization app on Heroku.
|
||
type OrganizationAppCollaborator struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // app collaborator belongs to
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of collaborator
|
||
Role *string `json:"role" url:"role,key"` // role in the organization
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"user" url:"user,key"` // identity of collaborated account
|
||
}
|
||
type OrganizationAppCollaboratorCreateOpts struct {
|
||
Permissions *[]*string `json:"permissions,omitempty" url:"permissions,omitempty,key"` // An array of permissions to give to the collaborator.
|
||
Silent *bool `json:"silent,omitempty" url:"silent,omitempty,key"` // whether to suppress email invitation when creating collaborator
|
||
User string `json:"user" url:"user,key"` // unique email address of account
|
||
}
|
||
|
||
// Create a new collaborator on an organization app. Use this endpoint
|
||
// instead of the `/apps/{app_id_or_name}/collaborator` endpoint when
|
||
// you want the collaborator to be granted [permissions]
|
||
// (https://devcenter.heroku.com/articles/org-users-access#roles-and-app-
|
||
// permissions) according to their role in the organization.
|
||
func (s *Service) OrganizationAppCollaboratorCreate(ctx context.Context, appIdentity string, o OrganizationAppCollaboratorCreateOpts) (*OrganizationAppCollaborator, error) {
|
||
var organizationAppCollaborator OrganizationAppCollaborator
|
||
return &organizationAppCollaborator, s.Post(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators", appIdentity), o)
|
||
}
|
||
|
||
// Delete an existing collaborator from an organization app.
|
||
func (s *Service) OrganizationAppCollaboratorDelete(ctx context.Context, organizationAppIdentity string, organizationAppCollaboratorIdentity string) (*OrganizationAppCollaborator, error) {
|
||
var organizationAppCollaborator OrganizationAppCollaborator
|
||
return &organizationAppCollaborator, s.Delete(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators/%v", organizationAppIdentity, organizationAppCollaboratorIdentity))
|
||
}
|
||
|
||
// Info for a collaborator on an organization app.
|
||
func (s *Service) OrganizationAppCollaboratorInfo(ctx context.Context, organizationAppIdentity string, organizationAppCollaboratorIdentity string) (*OrganizationAppCollaborator, error) {
|
||
var organizationAppCollaborator OrganizationAppCollaborator
|
||
return &organizationAppCollaborator, s.Get(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators/%v", organizationAppIdentity, organizationAppCollaboratorIdentity), nil, nil)
|
||
}
|
||
|
||
type OrganizationAppCollaboratorUpdateOpts struct {
|
||
Permissions []string `json:"permissions" url:"permissions,key"` // An array of permissions to give to the collaborator.
|
||
}
|
||
|
||
// Update an existing collaborator from an organization app.
|
||
func (s *Service) OrganizationAppCollaboratorUpdate(ctx context.Context, organizationAppIdentity string, organizationAppCollaboratorIdentity string, o OrganizationAppCollaboratorUpdateOpts) (*OrganizationAppCollaborator, error) {
|
||
var organizationAppCollaborator OrganizationAppCollaborator
|
||
return &organizationAppCollaborator, s.Patch(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators/%v", organizationAppIdentity, organizationAppCollaboratorIdentity), o)
|
||
}
|
||
|
||
type OrganizationAppCollaboratorListResult []OrganizationAppCollaborator
|
||
|
||
// List collaborators on an organization app.
|
||
func (s *Service) OrganizationAppCollaboratorList(ctx context.Context, organizationAppIdentity string, lr *ListRange) (OrganizationAppCollaboratorListResult, error) {
|
||
var organizationAppCollaborator OrganizationAppCollaboratorListResult
|
||
return organizationAppCollaborator, s.Get(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators", organizationAppIdentity), nil, lr)
|
||
}
|
||
|
||
// Deprecated: An organization app permission is a behavior that is
|
||
// assigned to a user in an organization app.
|
||
type OrganizationAppPermission struct {
|
||
Description string `json:"description" url:"description,key"` // A description of what the app permission allows.
|
||
Name string `json:"name" url:"name,key"` // The name of the app permission.
|
||
}
|
||
type OrganizationAppPermissionListResult []OrganizationAppPermission
|
||
|
||
// Lists permissions available to organizations.
|
||
func (s *Service) OrganizationAppPermissionList(ctx context.Context, lr *ListRange) (OrganizationAppPermissionListResult, error) {
|
||
var organizationAppPermission OrganizationAppPermissionListResult
|
||
return organizationAppPermission, s.Get(ctx, &organizationAppPermission, fmt.Sprintf("/organizations/permissions"), nil, lr)
|
||
}
|
||
|
||
// Deprecated: An organization feature represents a feature enabled on
|
||
// an organization account.
|
||
type OrganizationFeature struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when organization feature was created
|
||
Description string `json:"description" url:"description,key"` // description of organization feature
|
||
DisplayName string `json:"display_name" url:"display_name,key"` // user readable feature name
|
||
DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of organization feature
|
||
Enabled bool `json:"enabled" url:"enabled,key"` // whether or not organization feature has been enabled
|
||
FeedbackEmail string `json:"feedback_email" url:"feedback_email,key"` // e-mail to send feedback about the feature
|
||
ID string `json:"id" url:"id,key"` // unique identifier of organization feature
|
||
Name string `json:"name" url:"name,key"` // unique name of organization feature
|
||
State string `json:"state" url:"state,key"` // state of organization feature
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when organization feature was updated
|
||
}
|
||
|
||
// Info for an existing organization feature.
|
||
func (s *Service) OrganizationFeatureInfo(ctx context.Context, organizationIdentity string, organizationFeatureIdentity string) (*OrganizationFeature, error) {
|
||
var organizationFeature OrganizationFeature
|
||
return &organizationFeature, s.Get(ctx, &organizationFeature, fmt.Sprintf("/organizations/%v/features/%v", organizationIdentity, organizationFeatureIdentity), nil, nil)
|
||
}
|
||
|
||
type OrganizationFeatureListResult []OrganizationFeature
|
||
|
||
// List existing organization features.
|
||
func (s *Service) OrganizationFeatureList(ctx context.Context, organizationIdentity string, lr *ListRange) (OrganizationFeatureListResult, error) {
|
||
var organizationFeature OrganizationFeatureListResult
|
||
return organizationFeature, s.Get(ctx, &organizationFeature, fmt.Sprintf("/organizations/%v/features", organizationIdentity), nil, lr)
|
||
}
|
||
|
||
type OrganizationFeatureUpdateOpts struct {
|
||
Enabled bool `json:"enabled" url:"enabled,key"` // whether or not organization feature has been enabled
|
||
}
|
||
|
||
// Update an existing organization feature.
|
||
func (s *Service) OrganizationFeatureUpdate(ctx context.Context, organizationIdentity string, organizationFeatureIdentity string, o OrganizationFeatureUpdateOpts) (*OrganizationFeature, error) {
|
||
var organizationFeature OrganizationFeature
|
||
return &organizationFeature, s.Patch(ctx, &organizationFeature, fmt.Sprintf("/organizations/%v/features/%v", organizationIdentity, organizationFeatureIdentity), o)
|
||
}
|
||
|
||
// Deprecated: An organization invitation represents an invite to an
|
||
// organization.
|
||
type OrganizationInvitation struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invitation was created
|
||
ID string `json:"id" url:"id,key"` // Unique identifier of an invitation
|
||
InvitedBy struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
Name *string `json:"name" url:"name,key"` // full name of the account owner
|
||
} `json:"invited_by" url:"invited_by,key"`
|
||
Organization struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of organization
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
} `json:"organization" url:"organization,key"`
|
||
Role *string `json:"role" url:"role,key"` // role in the organization
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invitation was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
Name *string `json:"name" url:"name,key"` // full name of the account owner
|
||
} `json:"user" url:"user,key"`
|
||
}
|
||
type OrganizationInvitationListResult []OrganizationInvitation
|
||
|
||
// Get a list of an organization's Identity Providers
|
||
func (s *Service) OrganizationInvitationList(ctx context.Context, organizationName string, lr *ListRange) (OrganizationInvitationListResult, error) {
|
||
var organizationInvitation OrganizationInvitationListResult
|
||
return organizationInvitation, s.Get(ctx, &organizationInvitation, fmt.Sprintf("/organizations/%v/invitations", organizationName), nil, lr)
|
||
}
|
||
|
||
type OrganizationInvitationCreateOpts struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
Role *string `json:"role" url:"role,key"` // role in the organization
|
||
}
|
||
|
||
// Create Organization Invitation
|
||
func (s *Service) OrganizationInvitationCreate(ctx context.Context, organizationIdentity string, o OrganizationInvitationCreateOpts) (*OrganizationInvitation, error) {
|
||
var organizationInvitation OrganizationInvitation
|
||
return &organizationInvitation, s.Put(ctx, &organizationInvitation, fmt.Sprintf("/organizations/%v/invitations", organizationIdentity), o)
|
||
}
|
||
|
||
// Revoke an organization invitation.
|
||
func (s *Service) OrganizationInvitationRevoke(ctx context.Context, organizationIdentity string, organizationInvitationIdentity string) (*OrganizationInvitation, error) {
|
||
var organizationInvitation OrganizationInvitation
|
||
return &organizationInvitation, s.Delete(ctx, &organizationInvitation, fmt.Sprintf("/organizations/%v/invitations/%v", organizationIdentity, organizationInvitationIdentity))
|
||
}
|
||
|
||
// Get an invitation by its token
|
||
func (s *Service) OrganizationInvitationGet(ctx context.Context, organizationInvitationToken string, lr *ListRange) (*OrganizationInvitation, error) {
|
||
var organizationInvitation OrganizationInvitation
|
||
return &organizationInvitation, s.Get(ctx, &organizationInvitation, fmt.Sprintf("/organizations/invitations/%v", organizationInvitationToken), nil, lr)
|
||
}
|
||
|
||
type OrganizationInvitationAcceptResult struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the membership record was created
|
||
Email string `json:"email" url:"email,key"` // email address of the organization member
|
||
Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of organization member
|
||
Role *string `json:"role" url:"role,key"` // role in the organization
|
||
TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise organization member has two factor
|
||
// authentication enabled
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the membership record was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
Name *string `json:"name" url:"name,key"` // full name of the account owner
|
||
} `json:"user" url:"user,key"` // user information for the membership
|
||
}
|
||
|
||
// Accept Organization Invitation
|
||
func (s *Service) OrganizationInvitationAccept(ctx context.Context, organizationInvitationToken string) (*OrganizationInvitationAcceptResult, error) {
|
||
var organizationInvitation OrganizationInvitationAcceptResult
|
||
return &organizationInvitation, s.Post(ctx, &organizationInvitation, fmt.Sprintf("/organizations/invitations/%v/accept", organizationInvitationToken), nil)
|
||
}
|
||
|
||
// Deprecated: An organization invoice is an itemized bill of goods for
|
||
// an organization which includes pricing and charges.
|
||
type OrganizationInvoice struct {
|
||
AddonsTotal int `json:"addons_total" url:"addons_total,key"` // total add-ons charges in on this invoice
|
||
ChargesTotal int `json:"charges_total" url:"charges_total,key"` // total charges on this invoice
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invoice was created
|
||
CreditsTotal int `json:"credits_total" url:"credits_total,key"` // total credits on this invoice
|
||
DatabaseTotal int `json:"database_total" url:"database_total,key"` // total database charges on this invoice
|
||
DynoUnits float64 `json:"dyno_units" url:"dyno_units,key"` // The total amount of dyno units consumed across dyno types.
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this invoice
|
||
Number int `json:"number" url:"number,key"` // human readable invoice number
|
||
PaymentStatus string `json:"payment_status" url:"payment_status,key"` // Status of the invoice payment.
|
||
PeriodEnd string `json:"period_end" url:"period_end,key"` // the ending date that the invoice covers
|
||
PeriodStart string `json:"period_start" url:"period_start,key"` // the starting date that this invoice covers
|
||
PlatformTotal int `json:"platform_total" url:"platform_total,key"` // total platform charges on this invoice
|
||
State int `json:"state" url:"state,key"` // payment status for this invoice (pending, successful, failed)
|
||
Total int `json:"total" url:"total,key"` // combined total of charges and credits on this invoice
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invoice was updated
|
||
WeightedDynoHours float64 `json:"weighted_dyno_hours" url:"weighted_dyno_hours,key"` // The total amount of hours consumed across dyno types.
|
||
}
|
||
|
||
// Info for existing invoice.
|
||
func (s *Service) OrganizationInvoiceInfo(ctx context.Context, organizationIdentity string, organizationInvoiceIdentity int) (*OrganizationInvoice, error) {
|
||
var organizationInvoice OrganizationInvoice
|
||
return &organizationInvoice, s.Get(ctx, &organizationInvoice, fmt.Sprintf("/organizations/%v/invoices/%v", organizationIdentity, organizationInvoiceIdentity), nil, nil)
|
||
}
|
||
|
||
type OrganizationInvoiceListResult []OrganizationInvoice
|
||
|
||
// List existing invoices.
|
||
func (s *Service) OrganizationInvoiceList(ctx context.Context, organizationIdentity string, lr *ListRange) (OrganizationInvoiceListResult, error) {
|
||
var organizationInvoice OrganizationInvoiceListResult
|
||
return organizationInvoice, s.Get(ctx, &organizationInvoice, fmt.Sprintf("/organizations/%v/invoices", organizationIdentity), nil, lr)
|
||
}
|
||
|
||
// Deprecated: An organization member is an individual with access to an
|
||
// organization.
|
||
type OrganizationMember struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the membership record was created
|
||
Email string `json:"email" url:"email,key"` // email address of the organization member
|
||
Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of organization member
|
||
Role *string `json:"role" url:"role,key"` // role in the organization
|
||
TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise organization member has two factor
|
||
// authentication enabled
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the membership record was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
Name *string `json:"name" url:"name,key"` // full name of the account owner
|
||
} `json:"user" url:"user,key"` // user information for the membership
|
||
}
|
||
type OrganizationMemberCreateOrUpdateOpts struct {
|
||
Email string `json:"email" url:"email,key"` // email address of the organization member
|
||
Federated *bool `json:"federated,omitempty" url:"federated,omitempty,key"` // whether the user is federated and belongs to an Identity Provider
|
||
Role *string `json:"role" url:"role,key"` // role in the organization
|
||
}
|
||
|
||
// Create a new organization member, or update their role.
|
||
func (s *Service) OrganizationMemberCreateOrUpdate(ctx context.Context, organizationIdentity string, o OrganizationMemberCreateOrUpdateOpts) (*OrganizationMember, error) {
|
||
var organizationMember OrganizationMember
|
||
return &organizationMember, s.Put(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members", organizationIdentity), o)
|
||
}
|
||
|
||
type OrganizationMemberCreateOpts struct {
|
||
Email string `json:"email" url:"email,key"` // email address of the organization member
|
||
Federated *bool `json:"federated,omitempty" url:"federated,omitempty,key"` // whether the user is federated and belongs to an Identity Provider
|
||
Role *string `json:"role" url:"role,key"` // role in the organization
|
||
}
|
||
|
||
// Create a new organization member.
|
||
func (s *Service) OrganizationMemberCreate(ctx context.Context, organizationIdentity string, o OrganizationMemberCreateOpts) (*OrganizationMember, error) {
|
||
var organizationMember OrganizationMember
|
||
return &organizationMember, s.Post(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members", organizationIdentity), o)
|
||
}
|
||
|
||
type OrganizationMemberUpdateOpts struct {
|
||
Email string `json:"email" url:"email,key"` // email address of the organization member
|
||
Federated *bool `json:"federated,omitempty" url:"federated,omitempty,key"` // whether the user is federated and belongs to an Identity Provider
|
||
Role *string `json:"role" url:"role,key"` // role in the organization
|
||
}
|
||
|
||
// Update an organization member.
|
||
func (s *Service) OrganizationMemberUpdate(ctx context.Context, organizationIdentity string, o OrganizationMemberUpdateOpts) (*OrganizationMember, error) {
|
||
var organizationMember OrganizationMember
|
||
return &organizationMember, s.Patch(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members", organizationIdentity), o)
|
||
}
|
||
|
||
// Remove a member from the organization.
|
||
func (s *Service) OrganizationMemberDelete(ctx context.Context, organizationIdentity string, organizationMemberIdentity string) (*OrganizationMember, error) {
|
||
var organizationMember OrganizationMember
|
||
return &organizationMember, s.Delete(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members/%v", organizationIdentity, organizationMemberIdentity))
|
||
}
|
||
|
||
type OrganizationMemberListResult []OrganizationMember
|
||
|
||
// List members of the organization.
|
||
func (s *Service) OrganizationMemberList(ctx context.Context, organizationIdentity string, lr *ListRange) (OrganizationMemberListResult, error) {
|
||
var organizationMember OrganizationMemberListResult
|
||
return organizationMember, s.Get(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members", organizationIdentity), nil, lr)
|
||
}
|
||
|
||
type OrganizationMemberAppListResult []struct {
|
||
ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived
|
||
BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created
|
||
GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Joined bool `json:"joined" url:"joined,key"` // is the current member a collaborator on this app.
|
||
Locked bool `json:"locked" url:"locked,key"` // are other organization members forbidden from joining this app.
|
||
Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
Organization *struct {
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
} `json:"organization" url:"organization,key"` // organization that owns this app
|
||
Owner *struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"owner" url:"owner,key"` // identity of app owner
|
||
Region struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of region
|
||
Name string `json:"name" url:"name,key"` // unique name of region
|
||
} `json:"region" url:"region,key"` // identity of app region
|
||
ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released
|
||
RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app
|
||
SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app
|
||
Space *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of space
|
||
Name string `json:"name" url:"name,key"` // unique name of space
|
||
} `json:"space" url:"space,key"` // identity of space
|
||
Stack struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of stack
|
||
Name string `json:"name" url:"name,key"` // unique name of stack
|
||
} `json:"stack" url:"stack,key"` // identity of app stack
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated
|
||
WebURL string `json:"web_url" url:"web_url,key"` // web URL of app
|
||
}
|
||
|
||
// List the apps of a member.
|
||
func (s *Service) OrganizationMemberAppList(ctx context.Context, organizationIdentity string, organizationMemberIdentity string, lr *ListRange) (OrganizationMemberAppListResult, error) {
|
||
var organizationMember OrganizationMemberAppListResult
|
||
return organizationMember, s.Get(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members/%v/apps", organizationIdentity, organizationMemberIdentity), nil, lr)
|
||
}
|
||
|
||
// Deprecated: Tracks an organization's preferences
|
||
type OrganizationPreferences struct {
|
||
DefaultPermission *string `json:"default-permission" url:"default-permission,key"` // The default permission used when adding new members to the
|
||
// organization
|
||
WhitelistingEnabled *bool `json:"whitelisting-enabled" url:"whitelisting-enabled,key"` // Whether whitelisting rules should be applied to add-on installations
|
||
}
|
||
|
||
// Retrieve Organization Preferences
|
||
func (s *Service) OrganizationPreferencesList(ctx context.Context, organizationPreferencesIdentity string) (*OrganizationPreferences, error) {
|
||
var organizationPreferences OrganizationPreferences
|
||
return &organizationPreferences, s.Get(ctx, &organizationPreferences, fmt.Sprintf("/organizations/%v/preferences", organizationPreferencesIdentity), nil, nil)
|
||
}
|
||
|
||
type OrganizationPreferencesUpdateOpts struct {
|
||
WhitelistingEnabled *bool `json:"whitelisting-enabled,omitempty" url:"whitelisting-enabled,omitempty,key"` // Whether whitelisting rules should be applied to add-on installations
|
||
}
|
||
|
||
// Update Organization Preferences
|
||
func (s *Service) OrganizationPreferencesUpdate(ctx context.Context, organizationPreferencesIdentity string, o OrganizationPreferencesUpdateOpts) (*OrganizationPreferences, error) {
|
||
var organizationPreferences OrganizationPreferences
|
||
return &organizationPreferences, s.Patch(ctx, &organizationPreferences, fmt.Sprintf("/organizations/%v/preferences", organizationPreferencesIdentity), o)
|
||
}
|
||
|
||
// An outbound-ruleset is a collection of rules that specify what hosts
|
||
// Dynos are allowed to communicate with.
|
||
type OutboundRuleset struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when outbound-ruleset was created
|
||
CreatedBy string `json:"created_by" url:"created_by,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an outbound-ruleset
|
||
Rules []struct {
|
||
FromPort int `json:"from_port" url:"from_port,key"` // an endpoint of communication in an operating system.
|
||
Protocol string `json:"protocol" url:"protocol,key"` // formal standards and policies comprised of rules, procedures and
|
||
// formats that define communication between two or more devices over a
|
||
// network
|
||
Target string `json:"target" url:"target,key"` // is the target destination in CIDR notation
|
||
ToPort int `json:"to_port" url:"to_port,key"` // an endpoint of communication in an operating system.
|
||
} `json:"rules" url:"rules,key"`
|
||
}
|
||
|
||
// Current outbound ruleset for a space
|
||
func (s *Service) OutboundRulesetCurrent(ctx context.Context, spaceIdentity string) (*OutboundRuleset, error) {
|
||
var outboundRuleset OutboundRuleset
|
||
return &outboundRuleset, s.Get(ctx, &outboundRuleset, fmt.Sprintf("/spaces/%v/outbound-ruleset", spaceIdentity), nil, nil)
|
||
}
|
||
|
||
// Info on an existing Outbound Ruleset
|
||
func (s *Service) OutboundRulesetInfo(ctx context.Context, spaceIdentity string, outboundRulesetIdentity string) (*OutboundRuleset, error) {
|
||
var outboundRuleset OutboundRuleset
|
||
return &outboundRuleset, s.Get(ctx, &outboundRuleset, fmt.Sprintf("/spaces/%v/outbound-rulesets/%v", spaceIdentity, outboundRulesetIdentity), nil, nil)
|
||
}
|
||
|
||
type OutboundRulesetListResult []OutboundRuleset
|
||
|
||
// List all Outbound Rulesets for a space
|
||
func (s *Service) OutboundRulesetList(ctx context.Context, spaceIdentity string, lr *ListRange) (OutboundRulesetListResult, error) {
|
||
var outboundRuleset OutboundRulesetListResult
|
||
return outboundRuleset, s.Get(ctx, &outboundRuleset, fmt.Sprintf("/spaces/%v/outbound-rulesets", spaceIdentity), nil, lr)
|
||
}
|
||
|
||
type OutboundRulesetCreateOpts struct {
|
||
Rules *[]*struct {
|
||
FromPort int `json:"from_port" url:"from_port,key"` // an endpoint of communication in an operating system.
|
||
Protocol string `json:"protocol" url:"protocol,key"` // formal standards and policies comprised of rules, procedures and
|
||
// formats that define communication between two or more devices over a
|
||
// network
|
||
Target string `json:"target" url:"target,key"` // is the target destination in CIDR notation
|
||
ToPort int `json:"to_port" url:"to_port,key"` // an endpoint of communication in an operating system.
|
||
} `json:"rules,omitempty" url:"rules,omitempty,key"`
|
||
}
|
||
|
||
// Create a new outbound ruleset
|
||
func (s *Service) OutboundRulesetCreate(ctx context.Context, spaceIdentity string, o OutboundRulesetCreateOpts) (*OutboundRuleset, error) {
|
||
var outboundRuleset OutboundRuleset
|
||
return &outboundRuleset, s.Put(ctx, &outboundRuleset, fmt.Sprintf("/spaces/%v/outbound-ruleset", spaceIdentity), o)
|
||
}
|
||
|
||
// A password reset represents a in-process password reset attempt.
|
||
type PasswordReset struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when password reset was created
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"user" url:"user,key"`
|
||
}
|
||
type PasswordResetResetPasswordOpts struct {
|
||
Email *string `json:"email,omitempty" url:"email,omitempty,key"` // unique email address of account
|
||
}
|
||
|
||
// Reset account's password. This will send a reset password link to the
|
||
// user's email address.
|
||
func (s *Service) PasswordResetResetPassword(ctx context.Context, o PasswordResetResetPasswordOpts) (*PasswordReset, error) {
|
||
var passwordReset PasswordReset
|
||
return &passwordReset, s.Post(ctx, &passwordReset, fmt.Sprintf("/password-resets"), o)
|
||
}
|
||
|
||
type PasswordResetCompleteResetPasswordOpts struct {
|
||
Password *string `json:"password,omitempty" url:"password,omitempty,key"` // current password on the account
|
||
PasswordConfirmation *string `json:"password_confirmation,omitempty" url:"password_confirmation,omitempty,key"` // confirmation of the new password
|
||
}
|
||
|
||
// Complete password reset.
|
||
func (s *Service) PasswordResetCompleteResetPassword(ctx context.Context, passwordResetResetPasswordToken string, o PasswordResetCompleteResetPasswordOpts) (*PasswordReset, error) {
|
||
var passwordReset PasswordReset
|
||
return &passwordReset, s.Post(ctx, &passwordReset, fmt.Sprintf("/password-resets/%v/actions/finalize", passwordResetResetPasswordToken), o)
|
||
}
|
||
|
||
// A pipeline allows grouping of apps into different stages.
|
||
type Pipeline struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of pipeline
|
||
Name string `json:"name" url:"name,key"` // name of pipeline
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline was updated
|
||
}
|
||
type PipelineCreateOpts struct {
|
||
Name string `json:"name" url:"name,key"` // name of pipeline
|
||
}
|
||
|
||
// Create a new pipeline.
|
||
func (s *Service) PipelineCreate(ctx context.Context, o PipelineCreateOpts) (*Pipeline, error) {
|
||
var pipeline Pipeline
|
||
return &pipeline, s.Post(ctx, &pipeline, fmt.Sprintf("/pipelines"), o)
|
||
}
|
||
|
||
// Info for existing pipeline.
|
||
func (s *Service) PipelineInfo(ctx context.Context, pipelineIdentity string) (*Pipeline, error) {
|
||
var pipeline Pipeline
|
||
return &pipeline, s.Get(ctx, &pipeline, fmt.Sprintf("/pipelines/%v", pipelineIdentity), nil, nil)
|
||
}
|
||
|
||
// Delete an existing pipeline.
|
||
func (s *Service) PipelineDelete(ctx context.Context, pipelineID string) (*Pipeline, error) {
|
||
var pipeline Pipeline
|
||
return &pipeline, s.Delete(ctx, &pipeline, fmt.Sprintf("/pipelines/%v", pipelineID))
|
||
}
|
||
|
||
type PipelineUpdateOpts struct {
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // name of pipeline
|
||
}
|
||
|
||
// Update an existing pipeline.
|
||
func (s *Service) PipelineUpdate(ctx context.Context, pipelineID string, o PipelineUpdateOpts) (*Pipeline, error) {
|
||
var pipeline Pipeline
|
||
return &pipeline, s.Patch(ctx, &pipeline, fmt.Sprintf("/pipelines/%v", pipelineID), o)
|
||
}
|
||
|
||
type PipelineListResult []Pipeline
|
||
|
||
// List existing pipelines.
|
||
func (s *Service) PipelineList(ctx context.Context, lr *ListRange) (PipelineListResult, error) {
|
||
var pipeline PipelineListResult
|
||
return pipeline, s.Get(ctx, &pipeline, fmt.Sprintf("/pipelines"), nil, lr)
|
||
}
|
||
|
||
// Information about an app's coupling to a pipeline
|
||
type PipelineCoupling struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
} `json:"app" url:"app,key"` // app involved in the pipeline coupling
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline coupling was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of pipeline coupling
|
||
Pipeline struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of pipeline
|
||
} `json:"pipeline" url:"pipeline,key"` // pipeline involved in the coupling
|
||
Stage string `json:"stage" url:"stage,key"` // target pipeline stage
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline coupling was updated
|
||
}
|
||
type PipelineCouplingListByPipelineResult []PipelineCoupling
|
||
|
||
// List couplings for a pipeline
|
||
func (s *Service) PipelineCouplingListByPipeline(ctx context.Context, pipelineID string, lr *ListRange) (PipelineCouplingListByPipelineResult, error) {
|
||
var pipelineCoupling PipelineCouplingListByPipelineResult
|
||
return pipelineCoupling, s.Get(ctx, &pipelineCoupling, fmt.Sprintf("/pipelines/%v/pipeline-couplings", pipelineID), nil, lr)
|
||
}
|
||
|
||
type PipelineCouplingListResult []PipelineCoupling
|
||
|
||
// List pipeline couplings.
|
||
func (s *Service) PipelineCouplingList(ctx context.Context, lr *ListRange) (PipelineCouplingListResult, error) {
|
||
var pipelineCoupling PipelineCouplingListResult
|
||
return pipelineCoupling, s.Get(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings"), nil, lr)
|
||
}
|
||
|
||
type PipelineCouplingCreateOpts struct {
|
||
App string `json:"app" url:"app,key"` // unique identifier of app
|
||
Pipeline string `json:"pipeline" url:"pipeline,key"` // unique identifier of pipeline
|
||
Stage string `json:"stage" url:"stage,key"` // target pipeline stage
|
||
}
|
||
|
||
// Create a new pipeline coupling.
|
||
func (s *Service) PipelineCouplingCreate(ctx context.Context, o PipelineCouplingCreateOpts) (*PipelineCoupling, error) {
|
||
var pipelineCoupling PipelineCoupling
|
||
return &pipelineCoupling, s.Post(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings"), o)
|
||
}
|
||
|
||
// Info for an existing pipeline coupling.
|
||
func (s *Service) PipelineCouplingInfo(ctx context.Context, pipelineCouplingIdentity string) (*PipelineCoupling, error) {
|
||
var pipelineCoupling PipelineCoupling
|
||
return &pipelineCoupling, s.Get(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings/%v", pipelineCouplingIdentity), nil, nil)
|
||
}
|
||
|
||
// Delete an existing pipeline coupling.
|
||
func (s *Service) PipelineCouplingDelete(ctx context.Context, pipelineCouplingIdentity string) (*PipelineCoupling, error) {
|
||
var pipelineCoupling PipelineCoupling
|
||
return &pipelineCoupling, s.Delete(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings/%v", pipelineCouplingIdentity))
|
||
}
|
||
|
||
type PipelineCouplingUpdateOpts struct {
|
||
Stage *string `json:"stage,omitempty" url:"stage,omitempty,key"` // target pipeline stage
|
||
}
|
||
|
||
// Update an existing pipeline coupling.
|
||
func (s *Service) PipelineCouplingUpdate(ctx context.Context, pipelineCouplingIdentity string, o PipelineCouplingUpdateOpts) (*PipelineCoupling, error) {
|
||
var pipelineCoupling PipelineCoupling
|
||
return &pipelineCoupling, s.Patch(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings/%v", pipelineCouplingIdentity), o)
|
||
}
|
||
|
||
// Info for an existing app pipeline coupling.
|
||
func (s *Service) PipelineCouplingInfoByApp(ctx context.Context, appIdentity string) (*PipelineCoupling, error) {
|
||
var pipelineCoupling PipelineCoupling
|
||
return &pipelineCoupling, s.Get(ctx, &pipelineCoupling, fmt.Sprintf("/apps/%v/pipeline-couplings", appIdentity), nil, nil)
|
||
}
|
||
|
||
// Promotions allow you to move code from an app in a pipeline to all
|
||
// targets
|
||
type PipelinePromotion struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when promotion was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of promotion
|
||
Pipeline struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of pipeline
|
||
} `json:"pipeline" url:"pipeline,key"` // the pipeline which the promotion belongs to
|
||
Source struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
} `json:"app" url:"app,key"` // the app which was promoted from
|
||
Release struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of release
|
||
} `json:"release" url:"release,key"` // the release used to promoted from
|
||
} `json:"source" url:"source,key"` // the app being promoted from
|
||
Status string `json:"status" url:"status,key"` // status of promotion
|
||
UpdatedAt *time.Time `json:"updated_at" url:"updated_at,key"` // when promotion was updated
|
||
}
|
||
type PipelinePromotionCreateOpts struct {
|
||
Pipeline struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of pipeline
|
||
} `json:"pipeline" url:"pipeline,key"` // pipeline involved in the promotion
|
||
Source struct {
|
||
App *struct {
|
||
ID *string `json:"id,omitempty" url:"id,omitempty,key"` // unique identifier of app
|
||
} `json:"app,omitempty" url:"app,omitempty,key"` // the app which was promoted from
|
||
} `json:"source" url:"source,key"` // the app being promoted from
|
||
Targets []struct {
|
||
App *struct {
|
||
ID *string `json:"id,omitempty" url:"id,omitempty,key"` // unique identifier of app
|
||
} `json:"app,omitempty" url:"app,omitempty,key"` // the app is being promoted to
|
||
} `json:"targets" url:"targets,key"`
|
||
}
|
||
|
||
// Create a new promotion.
|
||
func (s *Service) PipelinePromotionCreate(ctx context.Context, o PipelinePromotionCreateOpts) (*PipelinePromotion, error) {
|
||
var pipelinePromotion PipelinePromotion
|
||
return &pipelinePromotion, s.Post(ctx, &pipelinePromotion, fmt.Sprintf("/pipeline-promotions"), o)
|
||
}
|
||
|
||
// Info for existing pipeline promotion.
|
||
func (s *Service) PipelinePromotionInfo(ctx context.Context, pipelinePromotionIdentity string) (*PipelinePromotion, error) {
|
||
var pipelinePromotion PipelinePromotion
|
||
return &pipelinePromotion, s.Get(ctx, &pipelinePromotion, fmt.Sprintf("/pipeline-promotions/%v", pipelinePromotionIdentity), nil, nil)
|
||
}
|
||
|
||
// Promotion targets represent an individual app being promoted to
|
||
type PipelinePromotionTarget struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
} `json:"app" url:"app,key"` // the app which was promoted to
|
||
ErrorMessage *string `json:"error_message" url:"error_message,key"` // an error message for why the promotion failed
|
||
ID string `json:"id" url:"id,key"` // unique identifier of promotion target
|
||
PipelinePromotion struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of promotion
|
||
} `json:"pipeline_promotion" url:"pipeline_promotion,key"` // the promotion which the target belongs to
|
||
Release *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of release
|
||
} `json:"release" url:"release,key"` // the release which was created on the target app
|
||
Status string `json:"status" url:"status,key"` // status of promotion
|
||
}
|
||
type PipelinePromotionTargetListResult []PipelinePromotionTarget
|
||
|
||
// List promotion targets belonging to an existing promotion.
|
||
func (s *Service) PipelinePromotionTargetList(ctx context.Context, pipelinePromotionID string, lr *ListRange) (PipelinePromotionTargetListResult, error) {
|
||
var pipelinePromotionTarget PipelinePromotionTargetListResult
|
||
return pipelinePromotionTarget, s.Get(ctx, &pipelinePromotionTarget, fmt.Sprintf("/pipeline-promotions/%v/promotion-targets", pipelinePromotionID), nil, lr)
|
||
}
|
||
|
||
// Plans represent different configurations of add-ons that may be added
|
||
// to apps. Endpoints under add-on services can be accessed without
|
||
// authentication.
|
||
type Plan struct {
|
||
AddonService struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service
|
||
Name string `json:"name" url:"name,key"` // unique name of this add-on-service
|
||
} `json:"addon_service" url:"addon_service,key"` // identity of add-on service
|
||
Compliance *[]string `json:"compliance" url:"compliance,key"` // the compliance regimes applied to an add-on plan
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when plan was created
|
||
Default bool `json:"default" url:"default,key"` // whether this plan is the default for its add-on service
|
||
Description string `json:"description" url:"description,key"` // description of plan
|
||
HumanName string `json:"human_name" url:"human_name,key"` // human readable name of the add-on plan
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this plan
|
||
InstallableInsidePrivateNetwork bool `json:"installable_inside_private_network" url:"installable_inside_private_network,key"` // whether this plan is installable to a Private Spaces app
|
||
InstallableOutsidePrivateNetwork bool `json:"installable_outside_private_network" url:"installable_outside_private_network,key"` // whether this plan is installable to a Common Runtime app
|
||
Name string `json:"name" url:"name,key"` // unique name of this plan
|
||
Price struct {
|
||
Cents int `json:"cents" url:"cents,key"` // price in cents per unit of plan
|
||
Unit string `json:"unit" url:"unit,key"` // unit of price for plan
|
||
} `json:"price" url:"price,key"` // price
|
||
SpaceDefault bool `json:"space_default" url:"space_default,key"` // whether this plan is the default for apps in Private Spaces
|
||
State string `json:"state" url:"state,key"` // release status for plan
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when plan was updated
|
||
Visible bool `json:"visible" url:"visible,key"` // whether this plan is publicly visible
|
||
}
|
||
|
||
// Info for existing plan.
|
||
func (s *Service) PlanInfo(ctx context.Context, planIdentity string) (*Plan, error) {
|
||
var plan Plan
|
||
return &plan, s.Get(ctx, &plan, fmt.Sprintf("/plans/%v", planIdentity), nil, nil)
|
||
}
|
||
|
||
// Info for existing plan by Add-on.
|
||
func (s *Service) PlanInfoByAddOn(ctx context.Context, addOnServiceIdentity string, planIdentity string) (*Plan, error) {
|
||
var plan Plan
|
||
return &plan, s.Get(ctx, &plan, fmt.Sprintf("/addon-services/%v/plans/%v", addOnServiceIdentity, planIdentity), nil, nil)
|
||
}
|
||
|
||
type PlanListByAddOnResult []Plan
|
||
|
||
// List existing plans by Add-on.
|
||
func (s *Service) PlanListByAddOn(ctx context.Context, addOnServiceIdentity string, lr *ListRange) (PlanListByAddOnResult, error) {
|
||
var plan PlanListByAddOnResult
|
||
return plan, s.Get(ctx, &plan, fmt.Sprintf("/addon-services/%v/plans", addOnServiceIdentity), nil, lr)
|
||
}
|
||
|
||
// Rate Limit represents the number of request tokens each account
|
||
// holds. Requests to this endpoint do not count towards the rate limit.
|
||
type RateLimit struct {
|
||
Remaining int `json:"remaining" url:"remaining,key"` // allowed requests remaining in current interval
|
||
}
|
||
|
||
// Info for rate limits.
|
||
func (s *Service) RateLimitInfo(ctx context.Context) (*RateLimit, error) {
|
||
var rateLimit RateLimit
|
||
return &rateLimit, s.Get(ctx, &rateLimit, fmt.Sprintf("/account/rate-limits"), nil, nil)
|
||
}
|
||
|
||
// A region represents a geographic location in which your application
|
||
// may run.
|
||
type Region struct {
|
||
Country string `json:"country" url:"country,key"` // country where the region exists
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when region was created
|
||
Description string `json:"description" url:"description,key"` // description of region
|
||
ID string `json:"id" url:"id,key"` // unique identifier of region
|
||
Locale string `json:"locale" url:"locale,key"` // area in the country where the region exists
|
||
Name string `json:"name" url:"name,key"` // unique name of region
|
||
PrivateCapable bool `json:"private_capable" url:"private_capable,key"` // whether or not region is available for creating a Private Space
|
||
Provider struct {
|
||
Name string `json:"name" url:"name,key"` // name of provider
|
||
Region string `json:"region" url:"region,key"` // region name used by provider
|
||
} `json:"provider" url:"provider,key"` // provider of underlying substrate
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when region was updated
|
||
}
|
||
|
||
// Info for existing region.
|
||
func (s *Service) RegionInfo(ctx context.Context, regionIdentity string) (*Region, error) {
|
||
var region Region
|
||
return ®ion, s.Get(ctx, ®ion, fmt.Sprintf("/regions/%v", regionIdentity), nil, nil)
|
||
}
|
||
|
||
type RegionListResult []Region
|
||
|
||
// List existing regions.
|
||
func (s *Service) RegionList(ctx context.Context, lr *ListRange) (RegionListResult, error) {
|
||
var region RegionListResult
|
||
return region, s.Get(ctx, ®ion, fmt.Sprintf("/regions"), nil, lr)
|
||
}
|
||
|
||
// A release represents a combination of code, config vars and add-ons
|
||
// for an app on Heroku.
|
||
type Release struct {
|
||
AddonPlanNames []string `json:"addon_plan_names" url:"addon_plan_names,key"` // add-on plans installed on the app for this release
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // app involved in the release
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when release was created
|
||
Current bool `json:"current" url:"current,key"` // indicates this release as being the current one for the app
|
||
Description string `json:"description" url:"description,key"` // description of changes in this release
|
||
ID string `json:"id" url:"id,key"` // unique identifier of release
|
||
Slug *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of slug
|
||
} `json:"slug" url:"slug,key"` // slug running in this release
|
||
Status string `json:"status" url:"status,key"` // current status of the release
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when release was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"user" url:"user,key"` // user that created the release
|
||
Version int `json:"version" url:"version,key"` // unique version assigned to the release
|
||
}
|
||
|
||
// Info for existing release.
|
||
func (s *Service) ReleaseInfo(ctx context.Context, appIdentity string, releaseIdentity string) (*Release, error) {
|
||
var release Release
|
||
return &release, s.Get(ctx, &release, fmt.Sprintf("/apps/%v/releases/%v", appIdentity, releaseIdentity), nil, nil)
|
||
}
|
||
|
||
type ReleaseListResult []Release
|
||
|
||
// List existing releases.
|
||
func (s *Service) ReleaseList(ctx context.Context, appIdentity string, lr *ListRange) (ReleaseListResult, error) {
|
||
var release ReleaseListResult
|
||
return release, s.Get(ctx, &release, fmt.Sprintf("/apps/%v/releases", appIdentity), nil, lr)
|
||
}
|
||
|
||
type ReleaseCreateOpts struct {
|
||
Description *string `json:"description,omitempty" url:"description,omitempty,key"` // description of changes in this release
|
||
Slug string `json:"slug" url:"slug,key"` // unique identifier of slug
|
||
}
|
||
|
||
// Create new release.
|
||
func (s *Service) ReleaseCreate(ctx context.Context, appIdentity string, o ReleaseCreateOpts) (*Release, error) {
|
||
var release Release
|
||
return &release, s.Post(ctx, &release, fmt.Sprintf("/apps/%v/releases", appIdentity), o)
|
||
}
|
||
|
||
type ReleaseRollbackOpts struct {
|
||
Release string `json:"release" url:"release,key"` // unique identifier of release
|
||
}
|
||
|
||
// Rollback to an existing release.
|
||
func (s *Service) ReleaseRollback(ctx context.Context, appIdentity string, o ReleaseRollbackOpts) (*Release, error) {
|
||
var release Release
|
||
return &release, s.Post(ctx, &release, fmt.Sprintf("/apps/%v/releases", appIdentity), o)
|
||
}
|
||
|
||
// A slug is a snapshot of your application code that is ready to run on
|
||
// the platform.
|
||
type Slug struct {
|
||
Blob struct {
|
||
Method string `json:"method" url:"method,key"` // method to be used to interact with the slug blob
|
||
URL string `json:"url" url:"url,key"` // URL to interact with the slug blob
|
||
} `json:"blob" url:"blob,key"` // pointer to the url where clients can fetch or store the actual
|
||
// release binary
|
||
BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of slug
|
||
Checksum *string `json:"checksum" url:"checksum,key"` // an optional checksum of the slug for verifying its integrity
|
||
Commit *string `json:"commit" url:"commit,key"` // identification of the code with your version control system (eg: SHA
|
||
// of the git HEAD)
|
||
CommitDescription *string `json:"commit_description" url:"commit_description,key"` // an optional description of the provided commit
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when slug was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of slug
|
||
ProcessTypes map[string]string `json:"process_types" url:"process_types,key"` // hash mapping process type names to their respective command
|
||
Size *int `json:"size" url:"size,key"` // size of slug, in bytes
|
||
Stack struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of stack
|
||
Name string `json:"name" url:"name,key"` // unique name of stack
|
||
} `json:"stack" url:"stack,key"` // identity of slug stack
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when slug was updated
|
||
}
|
||
|
||
// Info for existing slug.
|
||
func (s *Service) SlugInfo(ctx context.Context, appIdentity string, slugIdentity string) (*Slug, error) {
|
||
var slug Slug
|
||
return &slug, s.Get(ctx, &slug, fmt.Sprintf("/apps/%v/slugs/%v", appIdentity, slugIdentity), nil, nil)
|
||
}
|
||
|
||
type SlugCreateOpts struct {
|
||
BuildpackProvidedDescription *string `json:"buildpack_provided_description,omitempty" url:"buildpack_provided_description,omitempty,key"` // description from buildpack of slug
|
||
Checksum *string `json:"checksum,omitempty" url:"checksum,omitempty,key"` // an optional checksum of the slug for verifying its integrity
|
||
Commit *string `json:"commit,omitempty" url:"commit,omitempty,key"` // identification of the code with your version control system (eg: SHA
|
||
// of the git HEAD)
|
||
CommitDescription *string `json:"commit_description,omitempty" url:"commit_description,omitempty,key"` // an optional description of the provided commit
|
||
ProcessTypes map[string]string `json:"process_types" url:"process_types,key"` // hash mapping process type names to their respective command
|
||
Stack *string `json:"stack,omitempty" url:"stack,omitempty,key"` // unique name of stack
|
||
}
|
||
|
||
// Create a new slug. For more information please refer to [Deploying
|
||
// Slugs using the Platform
|
||
// API](https://devcenter.heroku.com/articles/platform-api-deploying-slug
|
||
// s).
|
||
func (s *Service) SlugCreate(ctx context.Context, appIdentity string, o SlugCreateOpts) (*Slug, error) {
|
||
var slug Slug
|
||
return &slug, s.Post(ctx, &slug, fmt.Sprintf("/apps/%v/slugs", appIdentity), o)
|
||
}
|
||
|
||
// SMS numbers are used for recovery on accounts with two-factor
|
||
// authentication enabled.
|
||
type SmsNumber struct {
|
||
SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account
|
||
}
|
||
|
||
// Recover an account using an SMS recovery code
|
||
func (s *Service) SmsNumberSMSNumber(ctx context.Context, accountIdentity string) (*SmsNumber, error) {
|
||
var smsNumber SmsNumber
|
||
return &smsNumber, s.Get(ctx, &smsNumber, fmt.Sprintf("/users/%v/sms-number", accountIdentity), nil, nil)
|
||
}
|
||
|
||
// Recover an account using an SMS recovery code
|
||
func (s *Service) SmsNumberRecover(ctx context.Context, accountIdentity string) (*SmsNumber, error) {
|
||
var smsNumber SmsNumber
|
||
return &smsNumber, s.Post(ctx, &smsNumber, fmt.Sprintf("/users/%v/sms-number/actions/recover", accountIdentity), nil)
|
||
}
|
||
|
||
// Confirm an SMS number change with a confirmation code
|
||
func (s *Service) SmsNumberConfirm(ctx context.Context, accountIdentity string) (*SmsNumber, error) {
|
||
var smsNumber SmsNumber
|
||
return &smsNumber, s.Post(ctx, &smsNumber, fmt.Sprintf("/users/%v/sms-number/actions/confirm", accountIdentity), nil)
|
||
}
|
||
|
||
// SNI Endpoint is a public address serving a custom SSL cert for HTTPS
|
||
// traffic, using the SNI TLS extension, to a Heroku app.
|
||
type SniEndpoint struct {
|
||
CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file)
|
||
CName string `json:"cname" url:"cname,key"` // deprecated; refer to GET /apps/:id/domains for valid CNAMEs for this
|
||
// app
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this SNI endpoint
|
||
Name string `json:"name" url:"name,key"` // unique name for SNI endpoint
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when SNI endpoint was updated
|
||
}
|
||
type SniEndpointCreateOpts struct {
|
||
CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file)
|
||
PrivateKey string `json:"private_key" url:"private_key,key"` // contents of the private key (eg .key file)
|
||
}
|
||
|
||
// Create a new SNI endpoint.
|
||
func (s *Service) SniEndpointCreate(ctx context.Context, appIdentity string, o SniEndpointCreateOpts) (*SniEndpoint, error) {
|
||
var sniEndpoint SniEndpoint
|
||
return &sniEndpoint, s.Post(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints", appIdentity), o)
|
||
}
|
||
|
||
// Delete existing SNI endpoint.
|
||
func (s *Service) SniEndpointDelete(ctx context.Context, appIdentity string, sniEndpointIdentity string) (*SniEndpoint, error) {
|
||
var sniEndpoint SniEndpoint
|
||
return &sniEndpoint, s.Delete(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints/%v", appIdentity, sniEndpointIdentity))
|
||
}
|
||
|
||
// Info for existing SNI endpoint.
|
||
func (s *Service) SniEndpointInfo(ctx context.Context, appIdentity string, sniEndpointIdentity string) (*SniEndpoint, error) {
|
||
var sniEndpoint SniEndpoint
|
||
return &sniEndpoint, s.Get(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints/%v", appIdentity, sniEndpointIdentity), nil, nil)
|
||
}
|
||
|
||
type SniEndpointListResult []SniEndpoint
|
||
|
||
// List existing SNI endpoints.
|
||
func (s *Service) SniEndpointList(ctx context.Context, appIdentity string, lr *ListRange) (SniEndpointListResult, error) {
|
||
var sniEndpoint SniEndpointListResult
|
||
return sniEndpoint, s.Get(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints", appIdentity), nil, lr)
|
||
}
|
||
|
||
type SniEndpointUpdateOpts struct {
|
||
CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file)
|
||
PrivateKey string `json:"private_key" url:"private_key,key"` // contents of the private key (eg .key file)
|
||
}
|
||
|
||
// Update an existing SNI endpoint.
|
||
func (s *Service) SniEndpointUpdate(ctx context.Context, appIdentity string, sniEndpointIdentity string, o SniEndpointUpdateOpts) (*SniEndpoint, error) {
|
||
var sniEndpoint SniEndpoint
|
||
return &sniEndpoint, s.Patch(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints/%v", appIdentity, sniEndpointIdentity), o)
|
||
}
|
||
|
||
// A source is a location for uploading and downloading an application's
|
||
// source code.
|
||
type Source struct {
|
||
SourceBlob struct {
|
||
GetURL string `json:"get_url" url:"get_url,key"` // URL to download the source
|
||
PutURL string `json:"put_url" url:"put_url,key"` // URL to upload the source
|
||
} `json:"source_blob" url:"source_blob,key"` // pointer to the URL where clients can fetch or store the source
|
||
}
|
||
|
||
// Create URLs for uploading and downloading source.
|
||
func (s *Service) SourceCreate(ctx context.Context) (*Source, error) {
|
||
var source Source
|
||
return &source, s.Post(ctx, &source, fmt.Sprintf("/sources"), nil)
|
||
}
|
||
|
||
// Create URLs for uploading and downloading source. Deprecated in favor
|
||
// of `POST /sources`
|
||
func (s *Service) SourceCreateDeprecated(ctx context.Context, appIdentity string) (*Source, error) {
|
||
var source Source
|
||
return &source, s.Post(ctx, &source, fmt.Sprintf("/apps/%v/sources", appIdentity), nil)
|
||
}
|
||
|
||
// A space is an isolated, highly available, secure app execution
|
||
// environments, running in the modern VPC substrate.
|
||
type Space struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of space
|
||
Name string `json:"name" url:"name,key"` // unique name of space
|
||
Organization struct {
|
||
Name string `json:"name" url:"name,key"` // unique name of organization
|
||
} `json:"organization" url:"organization,key"` // organization that owns this space
|
||
Region struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of region
|
||
Name string `json:"name" url:"name,key"` // unique name of region
|
||
} `json:"region" url:"region,key"` // identity of space region
|
||
Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled
|
||
State string `json:"state" url:"state,key"` // availability of this space
|
||
Team struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of team
|
||
Name string `json:"name" url:"name,key"` // unique name of team
|
||
} `json:"team" url:"team,key"` // team that owns this space
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated
|
||
}
|
||
type SpaceListResult []Space
|
||
|
||
// List existing spaces.
|
||
func (s *Service) SpaceList(ctx context.Context, lr *ListRange) (SpaceListResult, error) {
|
||
var space SpaceListResult
|
||
return space, s.Get(ctx, &space, fmt.Sprintf("/spaces"), nil, lr)
|
||
}
|
||
|
||
// Info for existing space.
|
||
func (s *Service) SpaceInfo(ctx context.Context, spaceIdentity string) (*Space, error) {
|
||
var space Space
|
||
return &space, s.Get(ctx, &space, fmt.Sprintf("/spaces/%v", spaceIdentity), nil, nil)
|
||
}
|
||
|
||
type SpaceUpdateOpts struct {
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of space
|
||
}
|
||
|
||
// Update an existing space.
|
||
func (s *Service) SpaceUpdate(ctx context.Context, spaceIdentity string, o SpaceUpdateOpts) (*Space, error) {
|
||
var space Space
|
||
return &space, s.Patch(ctx, &space, fmt.Sprintf("/spaces/%v", spaceIdentity), o)
|
||
}
|
||
|
||
// Delete an existing space.
|
||
func (s *Service) SpaceDelete(ctx context.Context, spaceIdentity string) (*Space, error) {
|
||
var space Space
|
||
return &space, s.Delete(ctx, &space, fmt.Sprintf("/spaces/%v", spaceIdentity))
|
||
}
|
||
|
||
type SpaceCreateOpts struct {
|
||
Name string `json:"name" url:"name,key"` // unique name of space
|
||
Organization string `json:"organization" url:"organization,key"` // unique name of organization
|
||
Region *string `json:"region,omitempty" url:"region,omitempty,key"` // unique identifier of region
|
||
Shield *bool `json:"shield,omitempty" url:"shield,omitempty,key"` // true if this space has shield enabled
|
||
}
|
||
|
||
// Create a new space.
|
||
func (s *Service) SpaceCreate(ctx context.Context, o SpaceCreateOpts) (*Space, error) {
|
||
var space Space
|
||
return &space, s.Post(ctx, &space, fmt.Sprintf("/spaces"), o)
|
||
}
|
||
|
||
// Space access represents the permissions a particular user has on a
|
||
// particular space.
|
||
type SpaceAppAccess struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of space
|
||
Permissions []struct {
|
||
Description string `json:"description" url:"description,key"`
|
||
Name string `json:"name" url:"name,key"`
|
||
} `json:"permissions" url:"permissions,key"` // user space permissions
|
||
Space struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"space" url:"space,key"` // space user belongs to
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"user" url:"user,key"` // identity of user account
|
||
}
|
||
|
||
// List permissions for a given user on a given space.
|
||
func (s *Service) SpaceAppAccessInfo(ctx context.Context, spaceIdentity string, accountIdentity string) (*SpaceAppAccess, error) {
|
||
var spaceAppAccess SpaceAppAccess
|
||
return &spaceAppAccess, s.Get(ctx, &spaceAppAccess, fmt.Sprintf("/spaces/%v/members/%v", spaceIdentity, accountIdentity), nil, nil)
|
||
}
|
||
|
||
type SpaceAppAccessUpdateOpts struct {
|
||
Permissions *[]*struct {
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"`
|
||
} `json:"permissions,omitempty" url:"permissions,omitempty,key"`
|
||
}
|
||
|
||
// Update an existing user's set of permissions on a space.
|
||
func (s *Service) SpaceAppAccessUpdate(ctx context.Context, spaceIdentity string, accountIdentity string, o SpaceAppAccessUpdateOpts) (*SpaceAppAccess, error) {
|
||
var spaceAppAccess SpaceAppAccess
|
||
return &spaceAppAccess, s.Patch(ctx, &spaceAppAccess, fmt.Sprintf("/spaces/%v/members/%v", spaceIdentity, accountIdentity), o)
|
||
}
|
||
|
||
type SpaceAppAccessListResult []SpaceAppAccess
|
||
|
||
// List all users and their permissions on a space.
|
||
func (s *Service) SpaceAppAccessList(ctx context.Context, spaceIdentity string, lr *ListRange) (SpaceAppAccessListResult, error) {
|
||
var spaceAppAccess SpaceAppAccessListResult
|
||
return spaceAppAccess, s.Get(ctx, &spaceAppAccess, fmt.Sprintf("/spaces/%v/members", spaceIdentity), nil, lr)
|
||
}
|
||
|
||
// Network address translation (NAT) for stable outbound IP addresses
|
||
// from a space
|
||
type SpaceNat struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when network address translation for a space was created
|
||
Sources []string `json:"sources" url:"sources,key"` // potential IPs from which outbound network traffic will originate
|
||
State string `json:"state" url:"state,key"` // availability of network address translation for a space
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when network address translation for a space was updated
|
||
}
|
||
|
||
// Current state of network address translation for a space.
|
||
func (s *Service) SpaceNatInfo(ctx context.Context, spaceIdentity string) (*SpaceNat, error) {
|
||
var spaceNat SpaceNat
|
||
return &spaceNat, s.Get(ctx, &spaceNat, fmt.Sprintf("/spaces/%v/nat", spaceIdentity), nil, nil)
|
||
}
|
||
|
||
// [SSL Endpoint](https://devcenter.heroku.com/articles/ssl-endpoint) is
|
||
// a public address serving custom SSL cert for HTTPS traffic to a
|
||
// Heroku app. Note that an app must have the `ssl:endpoint` add-on
|
||
// installed before it can provision an SSL Endpoint using these APIs.
|
||
type SSLEndpoint struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // application associated with this ssl-endpoint
|
||
CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file)
|
||
CName string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this SSL endpoint
|
||
Name string `json:"name" url:"name,key"` // unique name for SSL endpoint
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when endpoint was updated
|
||
}
|
||
type SSLEndpointCreateOpts struct {
|
||
CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file)
|
||
Preprocess *bool `json:"preprocess,omitempty" url:"preprocess,omitempty,key"` // allow Heroku to modify an uploaded public certificate chain if deemed
|
||
// advantageous by adding missing intermediaries, stripping unnecessary
|
||
// ones, etc.
|
||
PrivateKey string `json:"private_key" url:"private_key,key"` // contents of the private key (eg .key file)
|
||
}
|
||
|
||
// Create a new SSL endpoint.
|
||
func (s *Service) SSLEndpointCreate(ctx context.Context, appIdentity string, o SSLEndpointCreateOpts) (*SSLEndpoint, error) {
|
||
var sslEndpoint SSLEndpoint
|
||
return &sslEndpoint, s.Post(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints", appIdentity), o)
|
||
}
|
||
|
||
// Delete existing SSL endpoint.
|
||
func (s *Service) SSLEndpointDelete(ctx context.Context, appIdentity string, sslEndpointIdentity string) (*SSLEndpoint, error) {
|
||
var sslEndpoint SSLEndpoint
|
||
return &sslEndpoint, s.Delete(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints/%v", appIdentity, sslEndpointIdentity))
|
||
}
|
||
|
||
// Info for existing SSL endpoint.
|
||
func (s *Service) SSLEndpointInfo(ctx context.Context, appIdentity string, sslEndpointIdentity string) (*SSLEndpoint, error) {
|
||
var sslEndpoint SSLEndpoint
|
||
return &sslEndpoint, s.Get(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints/%v", appIdentity, sslEndpointIdentity), nil, nil)
|
||
}
|
||
|
||
type SSLEndpointListResult []SSLEndpoint
|
||
|
||
// List existing SSL endpoints.
|
||
func (s *Service) SSLEndpointList(ctx context.Context, appIdentity string, lr *ListRange) (SSLEndpointListResult, error) {
|
||
var sslEndpoint SSLEndpointListResult
|
||
return sslEndpoint, s.Get(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints", appIdentity), nil, lr)
|
||
}
|
||
|
||
type SSLEndpointUpdateOpts struct {
|
||
CertificateChain *string `json:"certificate_chain,omitempty" url:"certificate_chain,omitempty,key"` // raw contents of the public certificate chain (eg: .crt or .pem file)
|
||
Preprocess *bool `json:"preprocess,omitempty" url:"preprocess,omitempty,key"` // allow Heroku to modify an uploaded public certificate chain if deemed
|
||
// advantageous by adding missing intermediaries, stripping unnecessary
|
||
// ones, etc.
|
||
PrivateKey *string `json:"private_key,omitempty" url:"private_key,omitempty,key"` // contents of the private key (eg .key file)
|
||
Rollback *bool `json:"rollback,omitempty" url:"rollback,omitempty,key"` // indicates that a rollback should be performed
|
||
}
|
||
|
||
// Update an existing SSL endpoint.
|
||
func (s *Service) SSLEndpointUpdate(ctx context.Context, appIdentity string, sslEndpointIdentity string, o SSLEndpointUpdateOpts) (*SSLEndpoint, error) {
|
||
var sslEndpoint SSLEndpoint
|
||
return &sslEndpoint, s.Patch(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints/%v", appIdentity, sslEndpointIdentity), o)
|
||
}
|
||
|
||
// Stacks are the different application execution environments available
|
||
// in the Heroku platform.
|
||
type Stack struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when stack was introduced
|
||
ID string `json:"id" url:"id,key"` // unique identifier of stack
|
||
Name string `json:"name" url:"name,key"` // unique name of stack
|
||
State string `json:"state" url:"state,key"` // availability of this stack: beta, deprecated or public
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when stack was last modified
|
||
}
|
||
|
||
// Stack info.
|
||
func (s *Service) StackInfo(ctx context.Context, stackIdentity string) (*Stack, error) {
|
||
var stack Stack
|
||
return &stack, s.Get(ctx, &stack, fmt.Sprintf("/stacks/%v", stackIdentity), nil, nil)
|
||
}
|
||
|
||
type StackListResult []Stack
|
||
|
||
// List available stacks.
|
||
func (s *Service) StackList(ctx context.Context, lr *ListRange) (StackListResult, error) {
|
||
var stack StackListResult
|
||
return stack, s.Get(ctx, &stack, fmt.Sprintf("/stacks"), nil, lr)
|
||
}
|
||
|
||
// Teams allow you to manage access to a shared group of applications
|
||
// and other resources.
|
||
type Team struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the team was created
|
||
CreditCardCollections bool `json:"credit_card_collections" url:"credit_card_collections,key"` // whether charges incurred by the team are paid by credit card.
|
||
Default bool `json:"default" url:"default,key"` // whether to use this team when none is specified
|
||
ID string `json:"id" url:"id,key"` // unique identifier of team
|
||
MembershipLimit *float64 `json:"membership_limit" url:"membership_limit,key"` // upper limit of members allowed in a team.
|
||
Name string `json:"name" url:"name,key"` // unique name of team
|
||
ProvisionedLicenses bool `json:"provisioned_licenses" url:"provisioned_licenses,key"` // whether the team is provisioned licenses by salesforce.
|
||
Role *string `json:"role" url:"role,key"` // role in the team
|
||
Type string `json:"type" url:"type,key"` // type of team.
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the team was updated
|
||
}
|
||
type TeamListResult []Team
|
||
|
||
// List teams in which you are a member.
|
||
func (s *Service) TeamList(ctx context.Context, lr *ListRange) (TeamListResult, error) {
|
||
var team TeamListResult
|
||
return team, s.Get(ctx, &team, fmt.Sprintf("/teams"), nil, lr)
|
||
}
|
||
|
||
// Info for a team.
|
||
func (s *Service) TeamInfo(ctx context.Context, teamIdentity string) (*Team, error) {
|
||
var team Team
|
||
return &team, s.Get(ctx, &team, fmt.Sprintf("/teams/%v", teamIdentity), nil, nil)
|
||
}
|
||
|
||
type TeamUpdateOpts struct {
|
||
Default *bool `json:"default,omitempty" url:"default,omitempty,key"` // whether to use this team when none is specified
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of team
|
||
}
|
||
|
||
// Update team properties.
|
||
func (s *Service) TeamUpdate(ctx context.Context, teamIdentity string, o TeamUpdateOpts) (*Team, error) {
|
||
var team Team
|
||
return &team, s.Patch(ctx, &team, fmt.Sprintf("/teams/%v", teamIdentity), o)
|
||
}
|
||
|
||
type TeamCreateOpts struct {
|
||
Address1 *string `json:"address_1,omitempty" url:"address_1,omitempty,key"` // street address line 1
|
||
Address2 *string `json:"address_2,omitempty" url:"address_2,omitempty,key"` // street address line 2
|
||
CardNumber *string `json:"card_number,omitempty" url:"card_number,omitempty,key"` // encrypted card number of payment method
|
||
City *string `json:"city,omitempty" url:"city,omitempty,key"` // city
|
||
Country *string `json:"country,omitempty" url:"country,omitempty,key"` // country
|
||
Cvv *string `json:"cvv,omitempty" url:"cvv,omitempty,key"` // card verification value
|
||
ExpirationMonth *string `json:"expiration_month,omitempty" url:"expiration_month,omitempty,key"` // expiration month
|
||
ExpirationYear *string `json:"expiration_year,omitempty" url:"expiration_year,omitempty,key"` // expiration year
|
||
FirstName *string `json:"first_name,omitempty" url:"first_name,omitempty,key"` // the first name for payment method
|
||
LastName *string `json:"last_name,omitempty" url:"last_name,omitempty,key"` // the last name for payment method
|
||
Name string `json:"name" url:"name,key"` // unique name of team
|
||
Other *string `json:"other,omitempty" url:"other,omitempty,key"` // metadata
|
||
PostalCode *string `json:"postal_code,omitempty" url:"postal_code,omitempty,key"` // postal code
|
||
State *string `json:"state,omitempty" url:"state,omitempty,key"` // state
|
||
}
|
||
|
||
// Create a new team.
|
||
func (s *Service) TeamCreate(ctx context.Context, o TeamCreateOpts) (*Team, error) {
|
||
var team Team
|
||
return &team, s.Post(ctx, &team, fmt.Sprintf("/teams"), o)
|
||
}
|
||
|
||
// Delete an existing team.
|
||
func (s *Service) TeamDelete(ctx context.Context, teamIdentity string) (*Team, error) {
|
||
var team Team
|
||
return &team, s.Delete(ctx, &team, fmt.Sprintf("/teams/%v", teamIdentity))
|
||
}
|
||
|
||
// An team app encapsulates the team specific functionality of Heroku
|
||
// apps.
|
||
type TeamApp struct {
|
||
ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived
|
||
BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created
|
||
GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Joined bool `json:"joined" url:"joined,key"` // is the current member a collaborator on this app.
|
||
Locked bool `json:"locked" url:"locked,key"` // are other team members forbidden from joining this app.
|
||
Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
Owner *struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"owner" url:"owner,key"` // identity of app owner
|
||
Region struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of region
|
||
Name string `json:"name" url:"name,key"` // unique name of region
|
||
} `json:"region" url:"region,key"` // identity of app region
|
||
ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released
|
||
RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app
|
||
SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app
|
||
Space *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of space
|
||
Name string `json:"name" url:"name,key"` // unique name of space
|
||
} `json:"space" url:"space,key"` // identity of space
|
||
Stack struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of stack
|
||
Name string `json:"name" url:"name,key"` // unique name of stack
|
||
} `json:"stack" url:"stack,key"` // identity of app stack
|
||
Team *struct {
|
||
Name string `json:"name" url:"name,key"` // unique name of team
|
||
} `json:"team" url:"team,key"` // team that owns this app
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated
|
||
WebURL string `json:"web_url" url:"web_url,key"` // web URL of app
|
||
}
|
||
type TeamAppCreateOpts struct {
|
||
Locked *bool `json:"locked,omitempty" url:"locked,omitempty,key"` // are other team members forbidden from joining this app.
|
||
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of app
|
||
Personal *bool `json:"personal,omitempty" url:"personal,omitempty,key"` // force creation of the app in the user account even if a default team
|
||
// is set.
|
||
Region *string `json:"region,omitempty" url:"region,omitempty,key"` // unique name of region
|
||
Space *string `json:"space,omitempty" url:"space,omitempty,key"` // unique name of space
|
||
Stack *string `json:"stack,omitempty" url:"stack,omitempty,key"` // unique name of stack
|
||
Team *string `json:"team,omitempty" url:"team,omitempty,key"` // unique name of team
|
||
}
|
||
|
||
// Create a new app in the specified team, in the default team if
|
||
// unspecified, or in personal account, if default team is not set.
|
||
func (s *Service) TeamAppCreate(ctx context.Context, o TeamAppCreateOpts) (*TeamApp, error) {
|
||
var teamApp TeamApp
|
||
return &teamApp, s.Post(ctx, &teamApp, fmt.Sprintf("/teams/apps"), o)
|
||
}
|
||
|
||
type TeamAppListResult []TeamApp
|
||
|
||
// List apps in the default team, or in personal account, if default
|
||
// team is not set.
|
||
func (s *Service) TeamAppList(ctx context.Context, lr *ListRange) (TeamAppListResult, error) {
|
||
var teamApp TeamAppListResult
|
||
return teamApp, s.Get(ctx, &teamApp, fmt.Sprintf("/teams/apps"), nil, lr)
|
||
}
|
||
|
||
// Info for a team app.
|
||
func (s *Service) TeamAppInfo(ctx context.Context, teamAppIdentity string) (*TeamApp, error) {
|
||
var teamApp TeamApp
|
||
return &teamApp, s.Get(ctx, &teamApp, fmt.Sprintf("/teams/apps/%v", teamAppIdentity), nil, nil)
|
||
}
|
||
|
||
type TeamAppUpdateLockedOpts struct {
|
||
Locked bool `json:"locked" url:"locked,key"` // are other team members forbidden from joining this app.
|
||
}
|
||
|
||
// Lock or unlock a team app.
|
||
func (s *Service) TeamAppUpdateLocked(ctx context.Context, teamAppIdentity string, o TeamAppUpdateLockedOpts) (*TeamApp, error) {
|
||
var teamApp TeamApp
|
||
return &teamApp, s.Patch(ctx, &teamApp, fmt.Sprintf("/teams/apps/%v", teamAppIdentity), o)
|
||
}
|
||
|
||
type TeamAppTransferToAccountOpts struct {
|
||
Owner string `json:"owner" url:"owner,key"` // unique email address of account
|
||
}
|
||
|
||
// Transfer an existing team app to another Heroku account.
|
||
func (s *Service) TeamAppTransferToAccount(ctx context.Context, teamAppIdentity string, o TeamAppTransferToAccountOpts) (*TeamApp, error) {
|
||
var teamApp TeamApp
|
||
return &teamApp, s.Patch(ctx, &teamApp, fmt.Sprintf("/teams/apps/%v", teamAppIdentity), o)
|
||
}
|
||
|
||
type TeamAppTransferToTeamOpts struct {
|
||
Owner string `json:"owner" url:"owner,key"` // unique name of team
|
||
}
|
||
|
||
// Transfer an existing team app to another team.
|
||
func (s *Service) TeamAppTransferToTeam(ctx context.Context, teamAppIdentity string, o TeamAppTransferToTeamOpts) (*TeamApp, error) {
|
||
var teamApp TeamApp
|
||
return &teamApp, s.Patch(ctx, &teamApp, fmt.Sprintf("/teams/apps/%v", teamAppIdentity), o)
|
||
}
|
||
|
||
type TeamAppListByTeamResult []TeamApp
|
||
|
||
// List team apps.
|
||
func (s *Service) TeamAppListByTeam(ctx context.Context, teamIdentity string, lr *ListRange) (TeamAppListByTeamResult, error) {
|
||
var teamApp TeamAppListByTeamResult
|
||
return teamApp, s.Get(ctx, &teamApp, fmt.Sprintf("/teams/%v/apps", teamIdentity), nil, lr)
|
||
}
|
||
|
||
// A team collaborator represents an account that has been given access
|
||
// to a team app on Heroku.
|
||
type TeamAppCollaborator struct {
|
||
App struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
} `json:"app" url:"app,key"` // app collaborator belongs to
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of collaborator
|
||
Role *string `json:"role" url:"role,key"` // role in the team
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"user" url:"user,key"` // identity of collaborated account
|
||
}
|
||
type TeamAppCollaboratorCreateOpts struct {
|
||
Permissions *[]*string `json:"permissions,omitempty" url:"permissions,omitempty,key"` // An array of permissions to give to the collaborator.
|
||
Silent *bool `json:"silent,omitempty" url:"silent,omitempty,key"` // whether to suppress email invitation when creating collaborator
|
||
User string `json:"user" url:"user,key"` // unique email address of account
|
||
}
|
||
|
||
// Create a new collaborator on a team app. Use this endpoint instead of
|
||
// the `/apps/{app_id_or_name}/collaborator` endpoint when you want the
|
||
// collaborator to be granted [permissions]
|
||
// (https://devcenter.heroku.com/articles/org-users-access#roles-and-app-
|
||
// permissions) according to their role in the team.
|
||
func (s *Service) TeamAppCollaboratorCreate(ctx context.Context, appIdentity string, o TeamAppCollaboratorCreateOpts) (*TeamAppCollaborator, error) {
|
||
var teamAppCollaborator TeamAppCollaborator
|
||
return &teamAppCollaborator, s.Post(ctx, &teamAppCollaborator, fmt.Sprintf("/teams/apps/%v/collaborators", appIdentity), o)
|
||
}
|
||
|
||
// Delete an existing collaborator from a team app.
|
||
func (s *Service) TeamAppCollaboratorDelete(ctx context.Context, teamAppIdentity string, teamAppCollaboratorIdentity string) (*TeamAppCollaborator, error) {
|
||
var teamAppCollaborator TeamAppCollaborator
|
||
return &teamAppCollaborator, s.Delete(ctx, &teamAppCollaborator, fmt.Sprintf("/teams/apps/%v/collaborators/%v", teamAppIdentity, teamAppCollaboratorIdentity))
|
||
}
|
||
|
||
// Info for a collaborator on a team app.
|
||
func (s *Service) TeamAppCollaboratorInfo(ctx context.Context, teamAppIdentity string, teamAppCollaboratorIdentity string) (*TeamAppCollaborator, error) {
|
||
var teamAppCollaborator TeamAppCollaborator
|
||
return &teamAppCollaborator, s.Get(ctx, &teamAppCollaborator, fmt.Sprintf("/teams/apps/%v/collaborators/%v", teamAppIdentity, teamAppCollaboratorIdentity), nil, nil)
|
||
}
|
||
|
||
type TeamAppCollaboratorUpdateOpts struct {
|
||
Permissions []string `json:"permissions" url:"permissions,key"` // An array of permissions to give to the collaborator.
|
||
}
|
||
|
||
// Update an existing collaborator from a team app.
|
||
func (s *Service) TeamAppCollaboratorUpdate(ctx context.Context, teamAppIdentity string, teamAppCollaboratorIdentity string, o TeamAppCollaboratorUpdateOpts) (*TeamAppCollaborator, error) {
|
||
var teamAppCollaborator TeamAppCollaborator
|
||
return &teamAppCollaborator, s.Patch(ctx, &teamAppCollaborator, fmt.Sprintf("/teams/apps/%v/collaborators/%v", teamAppIdentity, teamAppCollaboratorIdentity), o)
|
||
}
|
||
|
||
type TeamAppCollaboratorListResult []TeamAppCollaborator
|
||
|
||
// List collaborators on a team app.
|
||
func (s *Service) TeamAppCollaboratorList(ctx context.Context, teamAppIdentity string, lr *ListRange) (TeamAppCollaboratorListResult, error) {
|
||
var teamAppCollaborator TeamAppCollaboratorListResult
|
||
return teamAppCollaborator, s.Get(ctx, &teamAppCollaborator, fmt.Sprintf("/teams/apps/%v/collaborators", teamAppIdentity), nil, lr)
|
||
}
|
||
|
||
// A team app permission is a behavior that is assigned to a user in a
|
||
// team app.
|
||
type TeamAppPermission struct {
|
||
Description string `json:"description" url:"description,key"` // A description of what the app permission allows.
|
||
Name string `json:"name" url:"name,key"` // The name of the app permission.
|
||
}
|
||
type TeamAppPermissionListResult []TeamAppPermission
|
||
|
||
// Lists permissions available to teams.
|
||
func (s *Service) TeamAppPermissionList(ctx context.Context, lr *ListRange) (TeamAppPermissionListResult, error) {
|
||
var teamAppPermission TeamAppPermissionListResult
|
||
return teamAppPermission, s.Get(ctx, &teamAppPermission, fmt.Sprintf("/teams/permissions"), nil, lr)
|
||
}
|
||
|
||
// A team feature represents a feature enabled on a team account.
|
||
type TeamFeature struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when team feature was created
|
||
Description string `json:"description" url:"description,key"` // description of team feature
|
||
DisplayName string `json:"display_name" url:"display_name,key"` // user readable feature name
|
||
DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of team feature
|
||
Enabled bool `json:"enabled" url:"enabled,key"` // whether or not team feature has been enabled
|
||
FeedbackEmail string `json:"feedback_email" url:"feedback_email,key"` // e-mail to send feedback about the feature
|
||
ID string `json:"id" url:"id,key"` // unique identifier of team feature
|
||
Name string `json:"name" url:"name,key"` // unique name of team feature
|
||
State string `json:"state" url:"state,key"` // state of team feature
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when team feature was updated
|
||
}
|
||
|
||
// Info for an existing team feature.
|
||
func (s *Service) TeamFeatureInfo(ctx context.Context, teamIdentity string, teamFeatureIdentity string) (*TeamFeature, error) {
|
||
var teamFeature TeamFeature
|
||
return &teamFeature, s.Get(ctx, &teamFeature, fmt.Sprintf("/teams/%v/features/%v", teamIdentity, teamFeatureIdentity), nil, nil)
|
||
}
|
||
|
||
type TeamFeatureListResult []TeamFeature
|
||
|
||
// List existing team features.
|
||
func (s *Service) TeamFeatureList(ctx context.Context, teamIdentity string, lr *ListRange) (TeamFeatureListResult, error) {
|
||
var teamFeature TeamFeatureListResult
|
||
return teamFeature, s.Get(ctx, &teamFeature, fmt.Sprintf("/teams/%v/features", teamIdentity), nil, lr)
|
||
}
|
||
|
||
// A team invitation represents an invite to a team.
|
||
type TeamInvitation struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invitation was created
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an invitation
|
||
InvitedBy struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
Name *string `json:"name" url:"name,key"` // full name of the account owner
|
||
} `json:"invited_by" url:"invited_by,key"`
|
||
Role *string `json:"role" url:"role,key"` // role in the team
|
||
Team struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of team
|
||
Name string `json:"name" url:"name,key"` // unique name of team
|
||
} `json:"team" url:"team,key"`
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invitation was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
Name *string `json:"name" url:"name,key"` // full name of the account owner
|
||
} `json:"user" url:"user,key"`
|
||
}
|
||
type TeamInvitationListResult []TeamInvitation
|
||
|
||
// Get a list of a team's Identity Providers
|
||
func (s *Service) TeamInvitationList(ctx context.Context, teamName string, lr *ListRange) (TeamInvitationListResult, error) {
|
||
var teamInvitation TeamInvitationListResult
|
||
return teamInvitation, s.Get(ctx, &teamInvitation, fmt.Sprintf("/teams/%v/invitations", teamName), nil, lr)
|
||
}
|
||
|
||
type TeamInvitationCreateOpts struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
Role *string `json:"role" url:"role,key"` // role in the team
|
||
}
|
||
|
||
// Create Team Invitation
|
||
func (s *Service) TeamInvitationCreate(ctx context.Context, teamIdentity string, o TeamInvitationCreateOpts) (*TeamInvitation, error) {
|
||
var teamInvitation TeamInvitation
|
||
return &teamInvitation, s.Put(ctx, &teamInvitation, fmt.Sprintf("/teams/%v/invitations", teamIdentity), o)
|
||
}
|
||
|
||
// Revoke a team invitation.
|
||
func (s *Service) TeamInvitationRevoke(ctx context.Context, teamIdentity string, teamInvitationIdentity string) (*TeamInvitation, error) {
|
||
var teamInvitation TeamInvitation
|
||
return &teamInvitation, s.Delete(ctx, &teamInvitation, fmt.Sprintf("/teams/%v/invitations/%v", teamIdentity, teamInvitationIdentity))
|
||
}
|
||
|
||
// Get an invitation by its token
|
||
func (s *Service) TeamInvitationGet(ctx context.Context, teamInvitationToken string, lr *ListRange) (*TeamInvitation, error) {
|
||
var teamInvitation TeamInvitation
|
||
return &teamInvitation, s.Get(ctx, &teamInvitation, fmt.Sprintf("/teams/invitations/%v", teamInvitationToken), nil, lr)
|
||
}
|
||
|
||
type TeamInvitationAcceptResult struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the membership record was created
|
||
Email string `json:"email" url:"email,key"` // email address of the team member
|
||
Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of the team member
|
||
Role *string `json:"role" url:"role,key"` // role in the team
|
||
TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise team member has two factor authentication
|
||
// enabled
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the membership record was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
Name *string `json:"name" url:"name,key"` // full name of the account owner
|
||
} `json:"user" url:"user,key"` // user information for the membership
|
||
}
|
||
|
||
// Accept Team Invitation
|
||
func (s *Service) TeamInvitationAccept(ctx context.Context, teamInvitationToken string) (*TeamInvitationAcceptResult, error) {
|
||
var teamInvitation TeamInvitationAcceptResult
|
||
return &teamInvitation, s.Post(ctx, &teamInvitation, fmt.Sprintf("/teams/invitations/%v/accept", teamInvitationToken), nil)
|
||
}
|
||
|
||
// A Team Invoice is an itemized bill of goods for a team which includes
|
||
// pricing and charges.
|
||
type TeamInvoice struct {
|
||
AddonsTotal int `json:"addons_total" url:"addons_total,key"` // total add-ons charges in on this invoice
|
||
ChargesTotal int `json:"charges_total" url:"charges_total,key"` // total charges on this invoice
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invoice was created
|
||
CreditsTotal int `json:"credits_total" url:"credits_total,key"` // total credits on this invoice
|
||
DatabaseTotal int `json:"database_total" url:"database_total,key"` // total database charges on this invoice
|
||
DynoUnits float64 `json:"dyno_units" url:"dyno_units,key"` // total amount of dyno units consumed across dyno types.
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this invoice
|
||
Number int `json:"number" url:"number,key"` // human readable invoice number
|
||
PaymentStatus string `json:"payment_status" url:"payment_status,key"` // status of the invoice payment
|
||
PeriodEnd string `json:"period_end" url:"period_end,key"` // the ending date that the invoice covers
|
||
PeriodStart string `json:"period_start" url:"period_start,key"` // the starting date that this invoice covers
|
||
PlatformTotal int `json:"platform_total" url:"platform_total,key"` // total platform charges on this invoice
|
||
State int `json:"state" url:"state,key"` // payment status for this invoice (pending, successful, failed)
|
||
Total int `json:"total" url:"total,key"` // combined total of charges and credits on this invoice
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invoice was updated
|
||
WeightedDynoHours float64 `json:"weighted_dyno_hours" url:"weighted_dyno_hours,key"` // The total amount of hours consumed across dyno types.
|
||
}
|
||
|
||
// Info for existing invoice.
|
||
func (s *Service) TeamInvoiceInfo(ctx context.Context, teamIdentity string, teamInvoiceIdentity int) (*TeamInvoice, error) {
|
||
var teamInvoice TeamInvoice
|
||
return &teamInvoice, s.Get(ctx, &teamInvoice, fmt.Sprintf("/teams/%v/invoices/%v", teamIdentity, teamInvoiceIdentity), nil, nil)
|
||
}
|
||
|
||
type TeamInvoiceListResult []TeamInvoice
|
||
|
||
// List existing invoices.
|
||
func (s *Service) TeamInvoiceList(ctx context.Context, teamIdentity string, lr *ListRange) (TeamInvoiceListResult, error) {
|
||
var teamInvoice TeamInvoiceListResult
|
||
return teamInvoice, s.Get(ctx, &teamInvoice, fmt.Sprintf("/teams/%v/invoices", teamIdentity), nil, lr)
|
||
}
|
||
|
||
// A team member is an individual with access to a team.
|
||
type TeamMember struct {
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the membership record was created
|
||
Email string `json:"email" url:"email,key"` // email address of the team member
|
||
Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of the team member
|
||
Role *string `json:"role" url:"role,key"` // role in the team
|
||
TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise team member has two factor authentication
|
||
// enabled
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the membership record was updated
|
||
User struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
Name *string `json:"name" url:"name,key"` // full name of the account owner
|
||
} `json:"user" url:"user,key"` // user information for the membership
|
||
}
|
||
type TeamMemberCreateOrUpdateOpts struct {
|
||
Email string `json:"email" url:"email,key"` // email address of the team member
|
||
Federated *bool `json:"federated,omitempty" url:"federated,omitempty,key"` // whether the user is federated and belongs to an Identity Provider
|
||
Role *string `json:"role" url:"role,key"` // role in the team
|
||
}
|
||
|
||
// Create a new team member, or update their role.
|
||
func (s *Service) TeamMemberCreateOrUpdate(ctx context.Context, teamIdentity string, o TeamMemberCreateOrUpdateOpts) (*TeamMember, error) {
|
||
var teamMember TeamMember
|
||
return &teamMember, s.Put(ctx, &teamMember, fmt.Sprintf("/teams/%v/members", teamIdentity), o)
|
||
}
|
||
|
||
type TeamMemberCreateOpts struct {
|
||
Email string `json:"email" url:"email,key"` // email address of the team member
|
||
Federated *bool `json:"federated,omitempty" url:"federated,omitempty,key"` // whether the user is federated and belongs to an Identity Provider
|
||
Role *string `json:"role" url:"role,key"` // role in the team
|
||
}
|
||
|
||
// Create a new team member.
|
||
func (s *Service) TeamMemberCreate(ctx context.Context, teamIdentity string, o TeamMemberCreateOpts) (*TeamMember, error) {
|
||
var teamMember TeamMember
|
||
return &teamMember, s.Post(ctx, &teamMember, fmt.Sprintf("/teams/%v/members", teamIdentity), o)
|
||
}
|
||
|
||
type TeamMemberUpdateOpts struct {
|
||
Email string `json:"email" url:"email,key"` // email address of the team member
|
||
Federated *bool `json:"federated,omitempty" url:"federated,omitempty,key"` // whether the user is federated and belongs to an Identity Provider
|
||
Role *string `json:"role" url:"role,key"` // role in the team
|
||
}
|
||
|
||
// Update a team member.
|
||
func (s *Service) TeamMemberUpdate(ctx context.Context, teamIdentity string, o TeamMemberUpdateOpts) (*TeamMember, error) {
|
||
var teamMember TeamMember
|
||
return &teamMember, s.Patch(ctx, &teamMember, fmt.Sprintf("/teams/%v/members", teamIdentity), o)
|
||
}
|
||
|
||
// Remove a member from the team.
|
||
func (s *Service) TeamMemberDelete(ctx context.Context, teamIdentity string, teamMemberIdentity string) (*TeamMember, error) {
|
||
var teamMember TeamMember
|
||
return &teamMember, s.Delete(ctx, &teamMember, fmt.Sprintf("/teams/%v/members/%v", teamIdentity, teamMemberIdentity))
|
||
}
|
||
|
||
type TeamMemberListResult []TeamMember
|
||
|
||
// List members of the team.
|
||
func (s *Service) TeamMemberList(ctx context.Context, teamIdentity string, lr *ListRange) (TeamMemberListResult, error) {
|
||
var teamMember TeamMemberListResult
|
||
return teamMember, s.Get(ctx, &teamMember, fmt.Sprintf("/teams/%v/members", teamIdentity), nil, lr)
|
||
}
|
||
|
||
type TeamMemberListByMemberResult []struct {
|
||
ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived
|
||
BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app
|
||
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created
|
||
GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app
|
||
ID string `json:"id" url:"id,key"` // unique identifier of app
|
||
Joined bool `json:"joined" url:"joined,key"` // is the current member a collaborator on this app.
|
||
Locked bool `json:"locked" url:"locked,key"` // are other team members forbidden from joining this app.
|
||
Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app
|
||
Name string `json:"name" url:"name,key"` // unique name of app
|
||
Owner *struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"owner" url:"owner,key"` // identity of app owner
|
||
Region struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of region
|
||
Name string `json:"name" url:"name,key"` // unique name of region
|
||
} `json:"region" url:"region,key"` // identity of app region
|
||
ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released
|
||
RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app
|
||
SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app
|
||
Space *struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of space
|
||
Name string `json:"name" url:"name,key"` // unique name of space
|
||
} `json:"space" url:"space,key"` // identity of space
|
||
Stack struct {
|
||
ID string `json:"id" url:"id,key"` // unique identifier of stack
|
||
Name string `json:"name" url:"name,key"` // unique name of stack
|
||
} `json:"stack" url:"stack,key"` // identity of app stack
|
||
Team *struct {
|
||
Name string `json:"name" url:"name,key"` // unique name of team
|
||
} `json:"team" url:"team,key"` // team that owns this app
|
||
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated
|
||
WebURL string `json:"web_url" url:"web_url,key"` // web URL of app
|
||
}
|
||
|
||
// List the apps of a team member.
|
||
func (s *Service) TeamMemberListByMember(ctx context.Context, teamIdentity string, teamMemberIdentity string, lr *ListRange) (TeamMemberListByMemberResult, error) {
|
||
var teamMember TeamMemberListByMemberResult
|
||
return teamMember, s.Get(ctx, &teamMember, fmt.Sprintf("/teams/%v/members/%v/apps", teamIdentity, teamMemberIdentity), nil, lr)
|
||
}
|
||
|
||
// Tracks a Team's Preferences
|
||
type TeamPreferences struct {
|
||
DefaultPermission *string `json:"default-permission" url:"default-permission,key"` // The default permission used when adding new members to the team
|
||
WhitelistingEnabled *bool `json:"whitelisting-enabled" url:"whitelisting-enabled,key"` // Whether whitelisting rules should be applied to add-on installations
|
||
}
|
||
|
||
// Retrieve Team Preferences
|
||
func (s *Service) TeamPreferencesList(ctx context.Context, teamPreferencesIdentity string) (*TeamPreferences, error) {
|
||
var teamPreferences TeamPreferences
|
||
return &teamPreferences, s.Get(ctx, &teamPreferences, fmt.Sprintf("/teams/%v/preferences", teamPreferencesIdentity), nil, nil)
|
||
}
|
||
|
||
type TeamPreferencesUpdateOpts struct {
|
||
WhitelistingEnabled *bool `json:"whitelisting-enabled,omitempty" url:"whitelisting-enabled,omitempty,key"` // Whether whitelisting rules should be applied to add-on installations
|
||
}
|
||
|
||
// Update Team Preferences
|
||
func (s *Service) TeamPreferencesUpdate(ctx context.Context, teamPreferencesIdentity string, o TeamPreferencesUpdateOpts) (*TeamPreferences, error) {
|
||
var teamPreferences TeamPreferences
|
||
return &teamPreferences, s.Patch(ctx, &teamPreferences, fmt.Sprintf("/teams/%v/preferences", teamPreferencesIdentity), o)
|
||
}
|
||
|
||
// Tracks a user's preferences and message dismissals
|
||
type UserPreferences struct {
|
||
DefaultOrganization *string `json:"default-organization" url:"default-organization,key"` // User's default organization
|
||
DismissedGettingStarted *bool `json:"dismissed-getting-started" url:"dismissed-getting-started,key"` // Whether the user has dismissed the getting started banner
|
||
DismissedGithubBanner *bool `json:"dismissed-github-banner" url:"dismissed-github-banner,key"` // Whether the user has dismissed the GitHub link banner
|
||
DismissedOrgAccessControls *bool `json:"dismissed-org-access-controls" url:"dismissed-org-access-controls,key"` // Whether the user has dismissed the Organization Access Controls
|
||
// banner
|
||
DismissedOrgWizardNotification *bool `json:"dismissed-org-wizard-notification" url:"dismissed-org-wizard-notification,key"` // Whether the user has dismissed the Organization Wizard
|
||
DismissedPipelinesBanner *bool `json:"dismissed-pipelines-banner" url:"dismissed-pipelines-banner,key"` // Whether the user has dismissed the Pipelines banner
|
||
DismissedPipelinesGithubBanner *bool `json:"dismissed-pipelines-github-banner" url:"dismissed-pipelines-github-banner,key"` // Whether the user has dismissed the GitHub banner on a pipeline
|
||
// overview
|
||
DismissedPipelinesGithubBanners *[]string `json:"dismissed-pipelines-github-banners" url:"dismissed-pipelines-github-banners,key"` // Which pipeline uuids the user has dismissed the GitHub banner for
|
||
DismissedSmsBanner *bool `json:"dismissed-sms-banner" url:"dismissed-sms-banner,key"` // Whether the user has dismissed the 2FA SMS banner
|
||
Timezone *string `json:"timezone" url:"timezone,key"` // User's default timezone
|
||
}
|
||
|
||
// Retrieve User Preferences
|
||
func (s *Service) UserPreferencesList(ctx context.Context, userPreferencesIdentity string) (*UserPreferences, error) {
|
||
var userPreferences UserPreferences
|
||
return &userPreferences, s.Get(ctx, &userPreferences, fmt.Sprintf("/users/%v/preferences", userPreferencesIdentity), nil, nil)
|
||
}
|
||
|
||
type UserPreferencesUpdateOpts struct {
|
||
DefaultOrganization *string `json:"default-organization,omitempty" url:"default-organization,omitempty,key"` // User's default organization
|
||
DismissedGettingStarted *bool `json:"dismissed-getting-started,omitempty" url:"dismissed-getting-started,omitempty,key"` // Whether the user has dismissed the getting started banner
|
||
DismissedGithubBanner *bool `json:"dismissed-github-banner,omitempty" url:"dismissed-github-banner,omitempty,key"` // Whether the user has dismissed the GitHub link banner
|
||
DismissedOrgAccessControls *bool `json:"dismissed-org-access-controls,omitempty" url:"dismissed-org-access-controls,omitempty,key"` // Whether the user has dismissed the Organization Access Controls
|
||
// banner
|
||
DismissedOrgWizardNotification *bool `json:"dismissed-org-wizard-notification,omitempty" url:"dismissed-org-wizard-notification,omitempty,key"` // Whether the user has dismissed the Organization Wizard
|
||
DismissedPipelinesBanner *bool `json:"dismissed-pipelines-banner,omitempty" url:"dismissed-pipelines-banner,omitempty,key"` // Whether the user has dismissed the Pipelines banner
|
||
DismissedPipelinesGithubBanner *bool `json:"dismissed-pipelines-github-banner,omitempty" url:"dismissed-pipelines-github-banner,omitempty,key"` // Whether the user has dismissed the GitHub banner on a pipeline
|
||
// overview
|
||
DismissedPipelinesGithubBanners *[]*string `json:"dismissed-pipelines-github-banners,omitempty" url:"dismissed-pipelines-github-banners,omitempty,key"` // Which pipeline uuids the user has dismissed the GitHub banner for
|
||
DismissedSmsBanner *bool `json:"dismissed-sms-banner,omitempty" url:"dismissed-sms-banner,omitempty,key"` // Whether the user has dismissed the 2FA SMS banner
|
||
Timezone *string `json:"timezone,omitempty" url:"timezone,omitempty,key"` // User's default timezone
|
||
}
|
||
|
||
// Update User Preferences
|
||
func (s *Service) UserPreferencesUpdate(ctx context.Context, userPreferencesIdentity string, o UserPreferencesUpdateOpts) (*UserPreferences, error) {
|
||
var userPreferences UserPreferences
|
||
return &userPreferences, s.Patch(ctx, &userPreferences, fmt.Sprintf("/users/%v/preferences", userPreferencesIdentity), o)
|
||
}
|
||
|
||
// Entities that have been whitelisted to be used by an Organization
|
||
type WhitelistedAddOnService struct {
|
||
AddedAt time.Time `json:"added_at" url:"added_at,key"` // when the add-on service was whitelisted
|
||
AddedBy struct {
|
||
Email string `json:"email" url:"email,key"` // unique email address of account
|
||
ID string `json:"id" url:"id,key"` // unique identifier of an account
|
||
} `json:"added_by" url:"added_by,key"` // the user which whitelisted the Add-on Service
|
||
AddonService struct {
|
||
HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider
|
||
ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service
|
||
Name string `json:"name" url:"name,key"` // unique name of this add-on-service
|
||
} `json:"addon_service" url:"addon_service,key"` // the Add-on Service whitelisted for use
|
||
ID string `json:"id" url:"id,key"` // unique identifier for this whitelisting entity
|
||
}
|
||
type WhitelistedAddOnServiceListByOrganizationResult []WhitelistedAddOnService
|
||
|
||
// List all whitelisted Add-on Services for an Organization
|
||
func (s *Service) WhitelistedAddOnServiceListByOrganization(ctx context.Context, organizationIdentity string, lr *ListRange) (WhitelistedAddOnServiceListByOrganizationResult, error) {
|
||
var whitelistedAddOnService WhitelistedAddOnServiceListByOrganizationResult
|
||
return whitelistedAddOnService, s.Get(ctx, &whitelistedAddOnService, fmt.Sprintf("/organizations/%v/whitelisted-addon-services", organizationIdentity), nil, lr)
|
||
}
|
||
|
||
type WhitelistedAddOnServiceCreateByOrganizationOpts struct {
|
||
AddonService *string `json:"addon_service,omitempty" url:"addon_service,omitempty,key"` // name of the Add-on to whitelist
|
||
}
|
||
type WhitelistedAddOnServiceCreateByOrganizationResult []WhitelistedAddOnService
|
||
|
||
// Whitelist an Add-on Service
|
||
func (s *Service) WhitelistedAddOnServiceCreateByOrganization(ctx context.Context, organizationIdentity string, o WhitelistedAddOnServiceCreateByOrganizationOpts) (WhitelistedAddOnServiceCreateByOrganizationResult, error) {
|
||
var whitelistedAddOnService WhitelistedAddOnServiceCreateByOrganizationResult
|
||
return whitelistedAddOnService, s.Post(ctx, &whitelistedAddOnService, fmt.Sprintf("/organizations/%v/whitelisted-addon-services", organizationIdentity), o)
|
||
}
|
||
|
||
// Remove a whitelisted entity
|
||
func (s *Service) WhitelistedAddOnServiceDeleteByOrganization(ctx context.Context, organizationIdentity string, whitelistedAddOnServiceIdentity string) (*WhitelistedAddOnService, error) {
|
||
var whitelistedAddOnService WhitelistedAddOnService
|
||
return &whitelistedAddOnService, s.Delete(ctx, &whitelistedAddOnService, fmt.Sprintf("/organizations/%v/whitelisted-addon-services/%v", organizationIdentity, whitelistedAddOnServiceIdentity))
|
||
}
|
||
|
||
type WhitelistedAddOnServiceListByTeamResult []WhitelistedAddOnService
|
||
|
||
// List all whitelisted Add-on Services for a Team
|
||
func (s *Service) WhitelistedAddOnServiceListByTeam(ctx context.Context, teamIdentity string, lr *ListRange) (WhitelistedAddOnServiceListByTeamResult, error) {
|
||
var whitelistedAddOnService WhitelistedAddOnServiceListByTeamResult
|
||
return whitelistedAddOnService, s.Get(ctx, &whitelistedAddOnService, fmt.Sprintf("/teams/%v/whitelisted-addon-services", teamIdentity), nil, lr)
|
||
}
|
||
|
||
type WhitelistedAddOnServiceCreateByTeamOpts struct {
|
||
AddonService *string `json:"addon_service,omitempty" url:"addon_service,omitempty,key"` // name of the Add-on to whitelist
|
||
}
|
||
type WhitelistedAddOnServiceCreateByTeamResult []WhitelistedAddOnService
|
||
|
||
// Whitelist an Add-on Service
|
||
func (s *Service) WhitelistedAddOnServiceCreateByTeam(ctx context.Context, teamIdentity string, o WhitelistedAddOnServiceCreateByTeamOpts) (WhitelistedAddOnServiceCreateByTeamResult, error) {
|
||
var whitelistedAddOnService WhitelistedAddOnServiceCreateByTeamResult
|
||
return whitelistedAddOnService, s.Post(ctx, &whitelistedAddOnService, fmt.Sprintf("/teams/%v/whitelisted-addon-services", teamIdentity), o)
|
||
}
|
||
|
||
// Remove a whitelisted entity
|
||
func (s *Service) WhitelistedAddOnServiceDeleteByTeam(ctx context.Context, teamIdentity string, whitelistedAddOnServiceIdentity string) (*WhitelistedAddOnService, error) {
|
||
var whitelistedAddOnService WhitelistedAddOnService
|
||
return &whitelistedAddOnService, s.Delete(ctx, &whitelistedAddOnService, fmt.Sprintf("/teams/%v/whitelisted-addon-services/%v", teamIdentity, whitelistedAddOnServiceIdentity))
|
||
}
|
||
|