Files
cpa-plugin/internal/access/types.go
T

71 lines
2.1 KiB
Go

// Package access defines managed downstream keys and their upstream routing rules.
package access
import (
"crypto/sha256"
"encoding/hex"
"strings"
"time"
)
const (
StatusActive = "active"
StatusDisabled = "disabled"
StatusArchived = "archived"
RouteAuto = "auto"
RouteStrict = "strict"
)
type ManagedKey struct {
ID string `json:"id"`
Name string `json:"name"`
Secret string `json:"secret"`
Status string `json:"status"`
RouteMode string `json:"route_mode"`
UpstreamAccountID string `json:"upstream_account_id,omitempty"`
AllModels bool `json:"all_models"`
Models []string `json:"models"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type UpstreamAccount struct {
ID string `json:"id"`
CPAAuthID string `json:"cpa_auth_id"`
CPAAuthIndex string `json:"cpa_auth_index"`
Provider string `json:"provider"`
DisplayName string `json:"display_name"`
Status string `json:"status"`
StatusMessage string `json:"status_message,omitempty"`
Disabled bool `json:"disabled"`
Unavailable bool `json:"unavailable"`
Priority int `json:"priority"`
LastSeenAt time.Time `json:"last_seen_at"`
}
type KeyStats struct {
KeyID string `json:"key_id"`
Total UsageSummary `json:"total"`
Today UsageSummary `json:"today"`
LastUsedAt *time.Time `json:"last_used_at,omitempty"`
}
type UsageSummary struct {
Requests int64 `json:"requests"`
InputTokens int64 `json:"input_tokens"`
OutputTokens int64 `json:"output_tokens"`
TotalTokens int64 `json:"total_tokens"`
CostMicros int64 `json:"cost_micros"`
}
// CallerScope mirrors CLIProxyAPI's stable downstream principal namespace.
func CallerScope(principal string) string {
principal = strings.TrimSpace(principal)
if principal == "" {
return ""
}
sum := sha256.Sum256([]byte("cli-proxy-api:caller-scope:v1\x00" + principal))
return hex.EncodeToString(sum[:])
}