api

package
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 29, 2026 License: MIT Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Algorithm           = "JDCLOUD2-HMAC-SHA256"
	SigningTerm         = "jdcloud2_request"
	TimeFormat          = "20060102T150405Z"
	HeaderAuthorization = "Authorization"
	HeaderXJdcloudDate  = "X-Jdcloud-Date"
	HeaderXJdcloudNonce = "X-Jdcloud-Nonce"
	HeaderXJdcloudToken = "X-Jdcloud-Security-Token"
)
View Source
const DefaultSigningRegion = "jdcloud-api"
View Source
const (
	DefaultTimeout = 30 * time.Second
)

Variables

This section is empty.

Functions

func DecodeError

func DecodeError(statusCode int, body []byte) error

func ErrorCode

func ErrorCode(err error) int

func EscapePath added in v0.2.6

func EscapePath(path string) string

EscapePath percent-encodes every byte that is not in the RFC 3986 unreserved set (A-Z / a-z / 0-9 / '-' / '.' / '_' / '~') or '/'. This matches JDCloud's official SDK (`core.EscapePath(path, false)`) so the canonical URI fed into the signer is byte-identical to what the service recomputes, including reserved characters like ':' that Go's default EscapedPath leaves alone.

func IsInvalidRegion added in v0.2.6

func IsInvalidRegion(err error) bool

func NewHTTPClient

func NewHTTPClient() *http.Client

func NewLAVMDescribeImagesQuery added in v0.2.6

func NewLAVMDescribeImagesQuery(imageIDs string) url.Values

func NewTransport

func NewTransport() *http.Transport

func NewUUIDv4

func NewUUIDv4() (string, error)

NewUUIDv4 returns a random UUIDv4 in canonical 8-4-4-4-12 form.

func ResolveHost

func ResolveHost(service string) string

ResolveHost returns the service endpoint host used by J1 actions.

func ResolveSigningRegion

func ResolveSigningRegion(region string) string

ResolveSigningRegion returns the region that participates in signature derivation. Global IAM calls fall back to the literal "jdcloud-api".

Types

type APIError

type APIError struct {
	HTTPStatus int
	Code       int
	Status     string
	Message    string
	RequestID  string
	Service    string
	Action     string
}

func (*APIError) Error

func (e *APIError) Error() string

func (*APIError) IsAuthFailure

func (e *APIError) IsAuthFailure() bool

type APIErrorBody

type APIErrorBody struct {
	Status  string `json:"status"`
	Code    int    `json:"code"`
	Message string `json:"message"`
}

func (*APIErrorBody) UnmarshalJSON

func (b *APIErrorBody) UnmarshalJSON(data []byte) error

type AttachSubUserPolicyRequest added in v0.2.6

type AttachSubUserPolicyRequest struct {
	SubUser        string `json:"subUser"`
	PolicyName     string `json:"policyName"`
	ScopeID        string `json:"scopeId,omitempty"`
	AllowAddPolicy string `json:"allowAddPolicy,omitempty"`
}

type AttachSubUserPolicyResponse added in v0.2.6

type AttachSubUserPolicyResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct{}      `json:"result"`
}

type Bucket

type Bucket struct {
	Name string `json:"name"`
}

type Client

type Client struct {
	// contains filtered or unexported fields
}

func NewClient

func NewClient(credential auth.Credential, opts ...Option) *Client

func (*Client) DoJSON

func (c *Client) DoJSON(ctx context.Context, req Request, out any) error

type CreateCommandRequest added in v0.2.6

type CreateCommandRequest struct {
	RegionID           string `json:"regionId"`
	CommandName        string `json:"commandName"`
	CommandType        string `json:"commandType,omitempty"`
	CommandContent     string `json:"commandContent"`
	Timeout            int    `json:"timeout,omitempty"`
	Username           string `json:"username,omitempty"`
	Workdir            string `json:"workdir,omitempty"`
	CommandDescription string `json:"commandDescription,omitempty"`
	EnableParameter    *bool  `json:"enableParameter,omitempty"`
}

type CreateCommandResponse added in v0.2.6

type CreateCommandResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		CommandID string `json:"commandId"`
	} `json:"result"`
}

type CreateSubUserInfo added in v0.2.6

type CreateSubUserInfo struct {
	Name              string `json:"name"`
	Password          string `json:"password"`
	ConsoleLogin      *bool  `json:"consoleLogin,omitempty"`
	CreateAk          *bool  `json:"createAk,omitempty"`
	NeedResetPassword *bool  `json:"needResetPassword,omitempty"`
	Description       string `json:"description,omitempty"`
}

CreateSubUserInfo mirrors the SDK's CreateSubUserInfo payload. Only the fields relevant to the validation flow are serialised; the rest are omitted so JDCloud applies the documented defaults.

type CreateSubUserRequest added in v0.2.6

type CreateSubUserRequest struct {
	CreateSubUserInfo CreateSubUserInfo `json:"createSubUserInfo"`
}

type CreateSubUserResponse added in v0.2.6

type CreateSubUserResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		SubUser CreateSubUserResult `json:"subUser"`
	} `json:"result"`
}

type CreateSubUserResult added in v0.2.6

type CreateSubUserResult struct {
	Pin          string `json:"pin"`
	Name         string `json:"name"`
	Account      string `json:"account"`
	AccessKey    string `json:"accessKey"`
	SecretKey    string `json:"secretKey"`
	ConsoleLogin *bool  `json:"consoleLogin,omitempty"`
}

type DeleteCommandsRequest added in v0.2.6

type DeleteCommandsRequest struct {
	RegionID   string   `json:"regionId"`
	CommandIDs []string `json:"commandIds"`
}

type DeleteCommandsResponse added in v0.2.6

type DeleteCommandsResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		CommandID string `json:"commandId"`
	} `json:"result"`
}

type DeleteSubUserResponse added in v0.2.6

type DeleteSubUserResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct{}      `json:"result"`
}

type DescribeAccountAmountResponse added in v0.2.6

type DescribeAccountAmountResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		TotalAmount          string `json:"totalAmount"`
		AvailableAmount      string `json:"availableAmount"`
		FrozenAmount         string `json:"frozenAmount"`
		EnableWithdrawAmount string `json:"enableWithdrawAmount"`
		WithdrawingAmount    string `json:"withdrawingAmount"`
	} `json:"result"`
}

type DescribeInstancesResponse

type DescribeInstancesResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		Instances  []Instance `json:"instances"`
		TotalCount int        `json:"totalCount"`
	} `json:"result"`
}

type DescribeInvocationsRequest added in v0.2.6

type DescribeInvocationsRequest struct {
	RegionID   string   `json:"regionId"`
	PageNumber int      `json:"pageNumber,omitempty"`
	PageSize   int      `json:"pageSize,omitempty"`
	InvokeIDs  []string `json:"invokeIds,omitempty"`
}

type DescribeInvocationsResponse added in v0.2.6

type DescribeInvocationsResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		TotalCount  int          `json:"totalCount"`
		Invocations []Invocation `json:"invocations"`
	} `json:"result"`
}

type DescribeLAVMImagesResponse added in v0.2.6

type DescribeLAVMImagesResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		Images []LAVMImage `json:"images"`
	} `json:"result"`
}

type DescribeLAVMInstancesResponse added in v0.2.6

type DescribeLAVMInstancesResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		Instances  []LAVMInstance `json:"instances"`
		TotalCount int            `json:"totalCount"`
	} `json:"result"`
}

type DescribeSubUserResponse

type DescribeSubUserResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		SubUser SubUser `json:"subUser"`
	} `json:"result"`
}

type DescribeSubUsersResponse

type DescribeSubUsersResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		SubUsers []SubUser `json:"subUsers"`
		Total    int       `json:"total"`
	} `json:"result"`
}

type DescribeUserPinResponse added in v0.2.6

type DescribeUserPinResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		Pin string `json:"pin"`
	} `json:"result"`
}

DescribeUserPinResponse maps GET /regions/{regionId}/user:describeUserPin. When called with master AK/SK the returned pin is the master account's pin, which is what the JDCloud sub-account login URL expects.

type DetachSubUserPolicyRequest added in v0.2.6

type DetachSubUserPolicyRequest struct {
	SubUser              string `json:"subUser"`
	PolicyName           string `json:"policyName"`
	ScopeID              string `json:"scopeId,omitempty"`
	AllowDetachAddPolicy string `json:"allowDetachAddPolicy,omitempty"`
}

type DetachSubUserPolicyResponse added in v0.2.6

type DetachSubUserPolicyResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct{}      `json:"result"`
}

type Instance

type Instance struct {
	InstanceID       string `json:"instanceId"`
	Hostname         string `json:"hostname"`
	Status           string `json:"status"`
	OSType           string `json:"osType"`
	PrivateIPAddress string `json:"privateIpAddress"`
	ElasticIPAddress string `json:"elasticIpAddress"`
}

type Invocation added in v0.2.6

type Invocation struct {
	Status              string               `json:"status"`
	CommandID           string               `json:"commandId"`
	InvokeID            string               `json:"invokeId"`
	CommandType         string               `json:"commandType"`
	InvocationInstances []InvocationInstance `json:"invocationInstances"`
	ErrorInfo           string               `json:"errorInfo"`
	CreateTime          string               `json:"createTime"`
}

Invocation mirrors the assistant's Invocation model. Only the fields used by the console validation flow are kept; the rest of the schema is omitted.

type InvocationInstance added in v0.2.6

type InvocationInstance struct {
	InstanceID string `json:"instanceId"`
	Status     string `json:"status"`
	ExitCode   string `json:"exitCode"`
	ErrorInfo  string `json:"errorInfo"`
	StartTime  string `json:"startTime"`
	EndTime    string `json:"endTime"`
	Output     string `json:"output"`
}

type InvokeCommandRequest added in v0.2.6

type InvokeCommandRequest struct {
	RegionID  string   `json:"regionId"`
	CommandID string   `json:"commandId"`
	Instances []string `json:"instances,omitempty"`
	Timeout   int      `json:"timeout,omitempty"`
	Username  string   `json:"username,omitempty"`
	Workdir   string   `json:"workdir,omitempty"`
}

type InvokeCommandResponse added in v0.2.6

type InvokeCommandResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		InvokeID string `json:"invokeId"`
	} `json:"result"`
}

type LAVMDomain added in v0.2.6

type LAVMDomain struct {
	DomainName string `json:"domainName"`
}

type LAVMImage added in v0.2.6

type LAVMImage struct {
	ImageID  string `json:"imageId"`
	OSType   string `json:"osType"`
	Platform string `json:"platform"`
}

type LAVMInstance added in v0.2.6

type LAVMInstance struct {
	InstanceID       string       `json:"instanceId"`
	Status           string       `json:"status"`
	PrivateIPAddress string       `json:"innerIpAddress"`
	PublicIPAddress  string       `json:"publicIpAddress"`
	RegionID         string       `json:"regionId"`
	InstanceName     string       `json:"instanceName"`
	BusinessStatus   string       `json:"businessStatus"`
	ImageID          string       `json:"imageId"`
	Domains          []LAVMDomain `json:"domains"`
}

type ListBucketsResponse

type ListBucketsResponse struct {
	RequestID string        `json:"requestId"`
	Error     *APIErrorBody `json:"error,omitempty"`
	Result    struct {
		Buckets []Bucket `json:"buckets"`
	} `json:"result"`
}

type Option

type Option func(*Client)

func WithBaseURL

func WithBaseURL(rawURL string) Option

func WithClock

func WithClock(now func() time.Time) Option

func WithHTTPClient

func WithHTTPClient(client *http.Client) Option

func WithNonceFunc

func WithNonceFunc(fn func() string) Option

func WithRetryPolicy

func WithRetryPolicy(policy RetryPolicy) Option

type Request

type Request struct {
	Service    string
	Region     string
	Method     string
	Version    string
	Path       string
	Query      url.Values
	Body       []byte
	Headers    http.Header
	Idempotent bool
}

type RetryPolicy

type RetryPolicy = httpclient.RetryPolicy

func DefaultRetryPolicy

func DefaultRetryPolicy() RetryPolicy

type SignInput

type SignInput struct {
	Method       string
	Host         string
	Path         string
	Query        url.Values
	Body         []byte
	ContentType  string
	Service      string
	Region       string
	AccessKey    string
	SecretKey    string
	SessionToken string
	Nonce        string
	Timestamp    time.Time
	Headers      http.Header
}

type Signature

type Signature struct {
	Authorization    string
	SignedHeaders    string
	CredentialScope  string
	CanonicalRequest string
	StringToSign     string
	XJdcloudDate     string
	XJdcloudNonce    string
	BodyDigest       string
}

func Sign

func Sign(input SignInput) (Signature, error)

type SubUser

type SubUser struct {
	Pin        string `json:"pin"`
	Name       string `json:"name"`
	Account    string `json:"account"`
	CreateTime string `json:"createTime"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL