chore(go): audit root package
Share one request, decode, and error path across the client, public endpoints, and export download; align types with the Backend contract and split types_api.go. Claude-Session: https://claude.ai/code/session_01Agoc9bRVE9KL7mmWtey9Vq
This commit is contained in:
1 parent
f5341ed557
commit
27b720ca69
11 files changed
+528
-663
No files matched your search
@@ -1,9 +1,5 @@
|
||||
package elydora
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Enums
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
type AgentStatus string
|
||||
|
||||
const (
|
||||
@@ -69,7 +65,9 @@ const (
|
||||
ErrorCodeInvalidSignature ErrorCode = "INVALID_SIGNATURE"
|
||||
ErrorCodeUnknownAgent ErrorCode = "UNKNOWN_AGENT"
|
||||
ErrorCodeKeyRevoked ErrorCode = "KEY_REVOKED"
|
||||
ErrorCodeKeyRetired ErrorCode = "KEY_RETIRED"
|
||||
ErrorCodeAgentFrozen ErrorCode = "AGENT_FROZEN"
|
||||
ErrorCodeAgentRevoked ErrorCode = "AGENT_REVOKED"
|
||||
ErrorCodeTTLExpired ErrorCode = "TTL_EXPIRED"
|
||||
ErrorCodeReplayDetected ErrorCode = "REPLAY_DETECTED"
|
||||
ErrorCodePrevHashMismatch ErrorCode = "PREV_HASH_MISMATCH"
|
||||
@@ -82,6 +80,36 @@ const (
|
||||
ErrorCodeValidationError ErrorCode = "VALIDATION_ERROR"
|
||||
)
|
||||
|
||||
type AdminAction string
|
||||
|
||||
const (
|
||||
AdminActionAgentRegister AdminAction = "agent.register"
|
||||
AdminActionAgentUpdate AdminAction = "agent.update"
|
||||
AdminActionAgentFreeze AdminAction = "agent.freeze"
|
||||
AdminActionAgentUnfreeze AdminAction = "agent.unfreeze"
|
||||
AdminActionAgentRevoke AdminAction = "agent.revoke"
|
||||
AdminActionAgentDelete AdminAction = "agent.delete"
|
||||
AdminActionKeyRevoke AdminAction = "key.revoke"
|
||||
AdminActionExportCreate AdminAction = "export.create"
|
||||
AdminActionOrgCreate AdminAction = "org.create"
|
||||
AdminActionOrgUpdate AdminAction = "org.update"
|
||||
AdminActionMemberInvite AdminAction = "member.invite"
|
||||
AdminActionInvitationCancel AdminAction = "invitation.cancel"
|
||||
AdminActionMemberRemove AdminAction = "member.remove"
|
||||
AdminActionMemberRoleChange AdminAction = "member.role_change"
|
||||
AdminActionAgentAssign AdminAction = "agent.assign"
|
||||
AdminActionAgentUnassign AdminAction = "agent.unassign"
|
||||
AdminActionWebhookRegister AdminAction = "webhook.register"
|
||||
AdminActionWebhookDelete AdminAction = "webhook.delete"
|
||||
)
|
||||
|
||||
type WebhookStatus string
|
||||
|
||||
const (
|
||||
WebhookStatusActive WebhookStatus = "active"
|
||||
WebhookStatusDisabled WebhookStatus = "disabled"
|
||||
)
|
||||
|
||||
type ExportFormat string
|
||||
|
||||
const (
|
||||
@@ -89,10 +117,6 @@ const (
|
||||
ExportFormatPDF ExportFormat = "pdf"
|
||||
)
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Entity types
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
type Agent struct {
|
||||
AgentID string `json:"agent_id"`
|
||||
OrgID string `json:"org_id"`
|
||||
@@ -155,7 +179,7 @@ type Epoch struct {
|
||||
type Organization struct {
|
||||
OrgID string `json:"org_id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
Description *string `json:"description"`
|
||||
BAOrgID *string `json:"ba_org_id"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
UpdatedAt int64 `json:"updated_at"`
|
||||
@@ -182,11 +206,7 @@ type Export struct {
|
||||
CompletedAt *int64 `json:"completed_at"`
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Protocol types
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// EOR is the Elydora Operation Record — the fundamental unit of auditable activity.
|
||||
// EOR is the Elydora Operation Record.
|
||||
type EOR struct {
|
||||
OpVersion string `json:"op_version"`
|
||||
OperationID string `json:"operation_id"`
|
||||
@@ -205,7 +225,7 @@ type EOR struct {
|
||||
Signature string `json:"signature"`
|
||||
}
|
||||
|
||||
// EAR is the Elydora Acknowledgment Receipt — server-issued receipt confirming acceptance.
|
||||
// EAR is the Elydora Acknowledgment Receipt.
|
||||
type EAR struct {
|
||||
ReceiptVersion string `json:"receipt_version"`
|
||||
ReceiptID string `json:"receipt_id"`
|
||||
@@ -221,210 +241,6 @@ type EAR struct {
|
||||
ElydoraSignature string `json:"elydora_signature"`
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// API request/response types
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
type RegisterAgentKeyInput struct {
|
||||
KID string `json:"kid"`
|
||||
PublicKey string `json:"public_key"`
|
||||
Algorithm string `json:"algorithm"`
|
||||
}
|
||||
|
||||
type RegisterAgentRequest struct {
|
||||
AgentID string `json:"agent_id"`
|
||||
DisplayName string `json:"display_name,omitempty"`
|
||||
ResponsibleEntity string `json:"responsible_entity,omitempty"`
|
||||
IntegrationType IntegrationType `json:"integration_type"`
|
||||
Keys []RegisterAgentKeyInput `json:"keys"`
|
||||
}
|
||||
|
||||
type RegisterAgentResponse struct {
|
||||
Agent Agent `json:"agent"`
|
||||
Keys []AgentKey `json:"keys"`
|
||||
}
|
||||
|
||||
type GetAgentResponse struct {
|
||||
Agent Agent `json:"agent"`
|
||||
Keys []AgentKey `json:"keys"`
|
||||
}
|
||||
|
||||
type FreezeAgentRequest struct {
|
||||
Reason string `json:"reason"`
|
||||
}
|
||||
|
||||
type FreezeAgentResponse struct {
|
||||
Agent Agent `json:"agent"`
|
||||
PreviousStatus AgentStatus `json:"previous_status"`
|
||||
}
|
||||
|
||||
type RevokeAgentRequest struct {
|
||||
KID string `json:"kid"`
|
||||
Reason string `json:"reason"`
|
||||
}
|
||||
|
||||
type UnfreezeAgentRequest struct {
|
||||
Reason string `json:"reason"`
|
||||
}
|
||||
|
||||
type UnfreezeAgentResponse struct {
|
||||
Agent Agent `json:"agent"`
|
||||
PreviousStatus AgentStatus `json:"previous_status"`
|
||||
}
|
||||
|
||||
type UpdateAgentRequest struct {
|
||||
IntegrationType IntegrationType `json:"integration_type"`
|
||||
}
|
||||
|
||||
type UpdateAgentResponse struct {
|
||||
Agent Agent `json:"agent"`
|
||||
}
|
||||
|
||||
type ListAgentsResponse struct {
|
||||
Agents []Agent `json:"agents"`
|
||||
}
|
||||
|
||||
type DeleteAgentResponse struct {
|
||||
Deleted bool `json:"deleted"`
|
||||
}
|
||||
|
||||
type GetMeResponse struct {
|
||||
User User `json:"user"`
|
||||
}
|
||||
|
||||
type IssueApiTokenRequest struct {
|
||||
TTLSeconds *int `json:"ttl_seconds"`
|
||||
}
|
||||
|
||||
type IssueApiTokenResponse struct {
|
||||
Token string `json:"token"`
|
||||
ExpiresAt *int64 `json:"expires_at"`
|
||||
TokenID string `json:"token_id"`
|
||||
}
|
||||
|
||||
type RotateApiTokenResponse struct {
|
||||
Token string `json:"token"`
|
||||
ExpiresAt *int64 `json:"expires_at"`
|
||||
TokenID string `json:"token_id"`
|
||||
}
|
||||
|
||||
type HealthResponse struct {
|
||||
Status string `json:"status"`
|
||||
Version string `json:"version"`
|
||||
ProtocolVersion string `json:"protocol_version"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
}
|
||||
|
||||
type SubmitOperationResponse struct {
|
||||
Receipt EAR `json:"receipt"`
|
||||
}
|
||||
|
||||
type GetOperationResponse struct {
|
||||
Operation Operation `json:"operation"`
|
||||
Receipt *Receipt `json:"receipt,omitempty"`
|
||||
}
|
||||
|
||||
type VerifyOperationChecks struct {
|
||||
Signature bool `json:"signature"`
|
||||
Chain bool `json:"chain"`
|
||||
Receipt bool `json:"receipt"`
|
||||
Merkle *bool `json:"merkle,omitempty"`
|
||||
}
|
||||
|
||||
type VerifyOperationResponse struct {
|
||||
Valid bool `json:"valid"`
|
||||
Checks VerifyOperationChecks `json:"checks"`
|
||||
Errors []string `json:"errors,omitempty"`
|
||||
}
|
||||
|
||||
type AuditQueryRequest struct {
|
||||
OrgID string `json:"org_id,omitempty"`
|
||||
AgentID string `json:"agent_id,omitempty"`
|
||||
OperationType string `json:"operation_type,omitempty"`
|
||||
StartTime *int64 `json:"start_time,omitempty"`
|
||||
EndTime *int64 `json:"end_time,omitempty"`
|
||||
Cursor string `json:"cursor,omitempty"`
|
||||
Limit *int `json:"limit,omitempty"`
|
||||
}
|
||||
|
||||
type AuditQueryResponse struct {
|
||||
Operations []Operation `json:"operations"`
|
||||
Cursor string `json:"cursor,omitempty"`
|
||||
TotalCount int64 `json:"total_count"`
|
||||
}
|
||||
|
||||
type GetEpochResponse struct {
|
||||
Epoch Epoch `json:"epoch"`
|
||||
Anchor *EpochAnchor `json:"anchor,omitempty"`
|
||||
}
|
||||
|
||||
type EpochAnchor struct {
|
||||
TSAToken string `json:"tsa_token,omitempty"`
|
||||
TSAUrl string `json:"tsa_url,omitempty"`
|
||||
AnchoredAt *int64 `json:"anchored_at,omitempty"`
|
||||
}
|
||||
|
||||
type ListEpochsResponse struct {
|
||||
Epochs []Epoch `json:"epochs"`
|
||||
}
|
||||
|
||||
type CreateExportRequest struct {
|
||||
StartTime int64 `json:"start_time"`
|
||||
EndTime int64 `json:"end_time"`
|
||||
AgentID string `json:"agent_id,omitempty"`
|
||||
OperationType string `json:"operation_type,omitempty"`
|
||||
Format ExportFormat `json:"format"`
|
||||
}
|
||||
|
||||
type CreateExportResponse struct {
|
||||
Export Export `json:"export"`
|
||||
}
|
||||
|
||||
type GetExportResponse struct {
|
||||
Export Export `json:"export"`
|
||||
DownloadURL string `json:"download_url,omitempty"`
|
||||
}
|
||||
|
||||
type ListExportsResponse struct {
|
||||
Exports []Export `json:"exports"`
|
||||
}
|
||||
|
||||
type JWK struct {
|
||||
KTY string `json:"kty"`
|
||||
CRV string `json:"crv,omitempty"`
|
||||
X string `json:"x,omitempty"`
|
||||
KID string `json:"kid"`
|
||||
Use string `json:"use"`
|
||||
Alg string `json:"alg"`
|
||||
}
|
||||
|
||||
type JWKSResponse struct {
|
||||
Keys []JWK `json:"keys"`
|
||||
}
|
||||
|
||||
type AuthRegisterRequest struct {
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
DisplayName string `json:"display_name,omitempty"`
|
||||
OrgName string `json:"org_name,omitempty"`
|
||||
}
|
||||
|
||||
type AuthRegisterResponse struct {
|
||||
User User `json:"user"`
|
||||
Organization Organization `json:"organization"`
|
||||
Token string `json:"token"`
|
||||
}
|
||||
|
||||
type AuthLoginRequest struct {
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
}
|
||||
|
||||
type AuthLoginResponse struct {
|
||||
User User `json:"user"`
|
||||
Token string `json:"token"`
|
||||
}
|
||||
|
||||
// AdminEvent represents an administrative event log entry.
|
||||
type AdminEvent struct {
|
||||
EventID string `json:"event_id"`
|
||||
@@ -449,27 +265,13 @@ type AgentAssignment struct {
|
||||
|
||||
// Webhook represents a registered webhook endpoint.
|
||||
type Webhook struct {
|
||||
WebhookID string `json:"webhook_id"`
|
||||
OrgID string `json:"org_id"`
|
||||
EndpointURL string `json:"endpoint_url"`
|
||||
Events []string `json:"events"`
|
||||
Status string `json:"status"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
UpdatedAt int64 `json:"updated_at"`
|
||||
}
|
||||
|
||||
type ListWebhooksResponse struct {
|
||||
Webhooks []Webhook `json:"webhooks"`
|
||||
}
|
||||
|
||||
type RegisterWebhookRequest struct {
|
||||
EndpointURL string `json:"endpoint_url"`
|
||||
Events []string `json:"events"`
|
||||
Secret string `json:"secret"`
|
||||
}
|
||||
|
||||
type RegisterWebhookResponse struct {
|
||||
Webhook Webhook `json:"webhook"`
|
||||
WebhookID string `json:"webhook_id"`
|
||||
OrgID string `json:"org_id"`
|
||||
EndpointURL string `json:"endpoint_url"`
|
||||
Events []string `json:"events"`
|
||||
Status WebhookStatus `json:"status"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
UpdatedAt int64 `json:"updated_at"`
|
||||
}
|
||||
|
||||
// Member represents a console user returned from the members list endpoint.
|
||||
@@ -482,40 +284,42 @@ type Member struct {
|
||||
DisplayName string `json:"display_name"`
|
||||
}
|
||||
|
||||
type ListMembersResponse struct {
|
||||
Members []Member `json:"members"`
|
||||
// AuthMeUser is the profile returned by GET /v1/auth/me.
|
||||
type AuthMeUser struct {
|
||||
UserID string `json:"user_id"`
|
||||
OrgID *string `json:"org_id"`
|
||||
Email string `json:"email"`
|
||||
DisplayName string `json:"display_name"`
|
||||
Role RbacRole `json:"role"`
|
||||
Status string `json:"status"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
UpdatedAt int64 `json:"updated_at"`
|
||||
OnboardingCompleted bool `json:"onboarding_completed"`
|
||||
}
|
||||
|
||||
type ListAdminEventsResponse struct {
|
||||
Events []AdminEvent `json:"events"`
|
||||
// CurrentOrganization is the active organization of the authenticated user.
|
||||
type CurrentOrganization struct {
|
||||
OrgID *string `json:"org_id"`
|
||||
BAOrgID *string `json:"ba_org_id"`
|
||||
Role RbacRole `json:"role"`
|
||||
}
|
||||
|
||||
// DependencyHealth holds the health status of a single backend dependency.
|
||||
// DependencyHealth is the health of one backend dependency.
|
||||
type DependencyHealth struct {
|
||||
Status string `json:"status"`
|
||||
LatencyMs int64 `json:"latency_ms"`
|
||||
Error *string `json:"error,omitempty"`
|
||||
Status string `json:"status"`
|
||||
LatencyMs int64 `json:"latency_ms"`
|
||||
ContractPhase string `json:"contract_phase,omitempty"`
|
||||
}
|
||||
|
||||
// DeepHealthDependencies lists the health of all backend dependencies.
|
||||
// DeepHealthDependencies lists every backend dependency.
|
||||
type DeepHealthDependencies struct {
|
||||
D1 DependencyHealth `json:"d1"`
|
||||
R2 DependencyHealth `json:"r2"`
|
||||
KV DependencyHealth `json:"kv"`
|
||||
D1 DependencyHealth `json:"d1"`
|
||||
AuthStorage DependencyHealth `json:"auth_storage"`
|
||||
R2 DependencyHealth `json:"r2"`
|
||||
KV DependencyHealth `json:"kv"`
|
||||
}
|
||||
|
||||
// DeepHealthResponse is returned by GET /v1/health/deep.
|
||||
type DeepHealthResponse struct {
|
||||
Status string `json:"status"`
|
||||
Version string `json:"version"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
Dependencies DeepHealthDependencies `json:"dependencies"`
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// CreateOperation params (SDK-specific)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// CreateOperationParams are the inputs for CreateOperation.
|
||||
type CreateOperationParams struct {
|
||||
OperationType string
|
||||
Subject map[string]interface{}
|
||||
|
||||
Reference in new issue
Block a user