Documentation
¶
Overview ¶
Package cloudclient 是 Pinax CLI 访问 Pinax Cloud Sync MLP 服务端 REST 合同的客户端。
MLP 合同(pinax-cloud-sync-mlp)使用 vault_id 术语,公开路由:
- POST /v1/auth/bootstrap 账户与设备会话 bootstrap
- GET /v1/auth/principal 当前登录主体(login state)
- POST /v1/vaults 创建 vault
- POST /v1/vaults/{vault_id}/link 设备绑定 vault
- GET /v1/vaults/{vault_id}/changes?since=<revision_id>
- POST /v1/vaults/{vault_id}/blobs:batch-check
- POST /v1/vaults/{vault_id}/blobs:sign-upload
- PUT /v1/vaults/{vault_id}/blobs/{blob_id}
- GET /v1/vaults/{vault_id}/blobs/{blob_id}
- GET /v1/vaults/{vault_id}/head 当前 head revision/manifest
- POST /v1/vaults/{vault_id}/revisions CAS commit
所有写操作携带稳定 error code、idempotency、device 与脱敏要求;Cloud 不读取明文。
Index ¶
- Constants
- func IsCode(err error, code string) bool
- func IsRevisionConflict(err error) bool
- type BlobCheckResult
- type BlobEnvelope
- type BlobFact
- type BootstrapResult
- type ChangesResult
- type Client
- func (c *Client) BatchCheckBlobs(ctx context.Context, blobIDs []string) (BlobCheckResult, error)
- func (c *Client) Bootstrap(ctx context.Context, bootstrapToken, deviceLabel string) (BootstrapResult, error)
- func (c *Client) Changes(ctx context.Context, since string) (ChangesResult, error)
- func (c *Client) CommitRevision(ctx context.Context, req CommitRequest) (CommitResponse, error)
- func (c *Client) CreateVault(ctx context.Context, cryptoMode string) (VaultLinkFacts, error)
- func (c *Client) CurrentPrincipal(ctx context.Context) (Principal, error)
- func (c *Client) CurrentRevision(ctx context.Context) (Revision, error)
- func (c *Client) DownloadBlob(ctx context.Context, blobID string) (BlobEnvelope, error)
- func (c *Client) Health(ctx context.Context) (Health, error)
- func (c *Client) LinkVault(ctx context.Context, vaultID string) (VaultLinkFacts, error)
- func (c *Client) SignUpload(ctx context.Context, blobID, blobHash string, size int64, contentType string) (UploadPlan, error)
- func (c *Client) UploadBlob(ctx context.Context, blobID string, envelope BlobEnvelope) error
- func (c *Client) VaultID() string
- type CommitRequest
- type CommitResponse
- type Config
- type Error
- type ErrorBody
- type Health
- type ObjectRef
- type Principal
- type Revision
- type Transport
- func (t *Transport) BatchCheck(ctx context.Context, blobIDs []string) (cloudsync.BatchCheckResult, error)
- func (t *Transport) CommitRevision(ctx context.Context, req cloudsync.CommitRequest) (cloudsync.CommitResult, error)
- func (t *Transport) CurrentHead(ctx context.Context, vaultID string) (cloudsync.Head, error)
- func (t *Transport) GetBlob(ctx context.Context, blobID string) (cloudsync.Envelope, error)
- func (t *Transport) GetManifest(ctx context.Context, blobID string) (cloudsync.Envelope, error)
- func (t *Transport) PutBlob(ctx context.Context, blobID string, envelope cloudsync.Envelope) error
- func (t *Transport) PutBlobWithEnvelopeMetadata(ctx context.Context, blobID string, envelope cloudsync.Envelope) (string, int64, error)
- func (t *Transport) PutBlobWithMetadata(ctx context.Context, blobID, blobHash string, sizeBytes int64, ...) error
- func (t *Transport) PutManifest(ctx context.Context, blobID string, envelope cloudsync.Envelope) error
- func (t *Transport) RegisterBlobMetadata(ctx context.Context, blobID, blobHash string, sizeBytes int64) error
- type UploadPlan
- type VaultLinkFacts
Constants ¶
const ( CodeUnauthenticated = "UNAUTHENTICATED" CodeDeviceRevoked = "DEVICE_REVOKED" CodeForbiddenScope = "FORBIDDEN_SCOPE" CodeRevisionConflict = "REVISION_CONFLICT" CodeRevisionNotFound = "REVISION_NOT_FOUND" CodeValidationFailed = "VALIDATION_FAILED" CodeBlobMissing = "BLOB_MISSING" CodeBlobTooLarge = "BLOB_TOO_LARGE" CodeBlobHashMismatch = "BLOB_HASH_MISMATCH" CodeBlobSizeMismatch = "BLOB_SIZE_MISMATCH" CodeUploadPlanExpired = "UPLOAD_PLAN_EXPIRED" CodeTransportError = "TRANSPORT_ERROR" CodeCloudHTTPError = "CLOUD_HTTP_ERROR" )
MLP 稳定 error code(大写,与服务端 pinax-cloud-sync-mlp 合同一致)。
Variables ¶
This section is empty.
Functions ¶
func IsRevisionConflict ¶
IsRevisionConflict 判断错误是否为服务端 CAS 冲突(REVISION_CONFLICT)。
Types ¶
type BlobCheckResult ¶
type BlobEnvelope ¶
type BootstrapResult ¶
type BootstrapResult struct {
AccountID string `json:"account_id"`
DeviceID string `json:"device_id"`
VaultID string `json:"vault_id,omitempty"`
TokenRef string `json:"token_ref,omitempty"`
Scope string `json:"scope,omitempty"`
}
BootstrapResult 是 bootstrap/login 成功后返回的会话事实;不含 raw token。
type ChangesResult ¶
type ChangesResult struct {
Revisions []Revision `json:"revisions"`
Objects []ObjectRef `json:"objects"`
HasMore bool `json:"has_more"`
}
ChangesResult 是 GET /changes?since=<revision_id> 的返回。
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func (*Client) BatchCheckBlobs ¶
func (*Client) Bootstrap ¶
func (c *Client) Bootstrap(ctx context.Context, bootstrapToken, deviceLabel string) (BootstrapResult, error)
Bootstrap 调用 POST /v1/auth/bootstrap 完成单账户自托管 bootstrap。 返回的 BootstrapResult 只含脱敏事实;token 由调用方写入 secret ref,不进入日志。
func (*Client) CommitRevision ¶
func (c *Client) CommitRevision(ctx context.Context, req CommitRequest) (CommitResponse, error)
func (*Client) CreateVault ¶
CreateVault 调用 POST /v1/vaults 创建 vault。
func (*Client) CurrentPrincipal ¶
CurrentPrincipal 调用 GET /v1/auth/principal 返回当前登录主体脱敏事实。
func (*Client) CurrentRevision ¶
func (*Client) DownloadBlob ¶
func (*Client) SignUpload ¶
func (c *Client) SignUpload(ctx context.Context, blobID, blobHash string, size int64, contentType string) (UploadPlan, error)
SignUpload 调用 POST /v1/vaults/{vault_id}/blobs:sign-upload 获取服务端拥有的上传计划。
func (*Client) UploadBlob ¶
type CommitRequest ¶
type CommitRequest struct {
BaseRevision string `json:"base_revision"`
RevisionID string `json:"revision_id,omitempty"`
ManifestBlobID string `json:"manifest_blob_id"`
ObjectRefs []ObjectRef `json:"object_refs,omitempty"`
DeviceID string `json:"device_id,omitempty"`
IdempotencyKey string `json:"-"`
}
type CommitResponse ¶
type ObjectRef ¶
type ObjectRef struct {
PathHash string `json:"path_hash"`
BlobID string `json:"blob_id,omitempty"`
BlobHash string `json:"blob_hash"`
Size int64 `json:"size"`
SizeBytes int64 `json:"size_bytes,omitempty"`
Deleted bool `json:"deleted"`
}
ObjectRef 是 changes cursor 返回的对象引用;使用 path_hash/blob_hash 而非明文路径。
type Principal ¶
type Principal struct {
AccountID string `json:"account_id"`
DeviceID string `json:"device_id"`
VaultID string `json:"vault_id,omitempty"`
TokenRef string `json:"token_ref,omitempty"`
Scope string `json:"scope,omitempty"`
}
Principal 描述当前登录主体的脱敏事实,用于 cloud login/doctor/sync status。
type Transport ¶
type Transport struct {
// contains filtered or unexported fields
}
Transport 把 cloudclient.Client(MLP REST)适配为 cloudsync.Transport, 让 Pinax 同步引擎统一通过 server transport 跑 push/pull。 remote_write 只在服务端 CAS commit 成功后才为 true(见 CommitRevision)。
func NewTransport ¶
func (*Transport) BatchCheck ¶
func (*Transport) CommitRevision ¶
func (t *Transport) CommitRevision(ctx context.Context, req cloudsync.CommitRequest) (cloudsync.CommitResult, error)
CommitRevision 只在服务端 CAS commit 成功后返回 RemoteWrite=true。 服务端返回 REVISION_CONFLICT 时透传错误,RemoteWrite 保持 false。
func (*Transport) CurrentHead ¶
func (*Transport) GetManifest ¶
func (*Transport) PutBlobWithEnvelopeMetadata ¶
func (*Transport) PutBlobWithMetadata ¶
func (*Transport) PutManifest ¶
type UploadPlan ¶
type UploadPlan struct {
BlobID string `json:"blob_id"`
ObjectKey string `json:"object_key"`
Method string `json:"method"`
URL string `json:"url"`
Headers map[string]string `json:"headers,omitempty"`
ExpiresAt string `json:"expires_at,omitempty"`
}
UploadPlan 是 sign-upload 返回的服务端拥有对象上传计划。
type VaultLinkFacts ¶
type VaultLinkFacts struct {
VaultID string `json:"vault_id"`
CryptoMode string `json:"crypto_mode"`
CurrentRevision string `json:"current_revision,omitempty"`
}
VaultLinkFacts 是 vault create/link 返回的有界事实。