Files

112 lines
3.5 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"
ResetNone = "none"
ResetDaily = "daily"
ResetWeekly = "weekly"
ResetMonthly = "monthly"
)
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"`
ShowInStats bool `json:"show_in_stats"`
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"`
}
type BillingState struct {
KeyID string `json:"key_id"`
QuotaMicros int64 `json:"-"`
SpentMicros int64 `json:"-"`
LifetimeSpentMicros int64 `json:"-"`
BalanceMicros int64 `json:"-"`
ResetPeriod string `json:"reset_period"`
NextResetAt *time.Time `json:"next_reset_at,omitempty"`
MaxConcurrency int `json:"max_concurrency"`
ActiveRequests int `json:"active_requests"`
CycleSequence int64 `json:"cycle_sequence"`
CycleStartedAt time.Time `json:"cycle_started_at"`
}
type BillingSettings struct {
QuotaMicros int64
ResetPeriod string
NextResetAt *time.Time
MaxConcurrency int
}
type LedgerEntry struct {
ID int64 `json:"id"`
KeyID string `json:"key_id"`
CycleSequence int64 `json:"cycle_sequence"`
Kind string `json:"kind"`
AmountMicros int64 `json:"-"`
BalanceAfterMicros int64 `json:"-"`
RequestID string `json:"request_id,omitempty"`
ExecutionID string `json:"execution_id,omitempty"`
Model string `json:"model,omitempty"`
OccurredAt time.Time `json:"occurred_at"`
CreatedAt time.Time `json:"created_at"`
}
// 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[:])
}