relay

package
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Apr 17, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func HashToken

func HashToken(token string) string

HashToken computes the SHA-256 hash of a mnemonic token for relay storage.

Types

type BlobInfo

type BlobInfo struct {
	BlobID             string `json:"blob_id"`
	TeamID             string `json:"team_id"`
	SenderFingerprint  string `json:"sender_fingerprint"`
	EphemeralPublicKey string `json:"ephemeral_public_key"`
	Size               int    `json:"size"`
	UploadedAt         int64  `json:"uploaded_at"`
	Filename           string `json:"filename"`
}

BlobInfo describes a pending blob.

type BootstrapTeamRequest

type BootstrapTeamRequest struct {
	Username             string `json:"username"`
	Fingerprint          string `json:"fingerprint"`
	PublicKey            string `json:"public_key"`
	TransportPublicKey   string `json:"transport_public_key"`
	TransportFingerprint string `json:"transport_fingerprint"`
	TeamName             string `json:"team_name,omitempty"`
	BootstrapNonce       string `json:"bootstrap_nonce"`
	ContractHash         string `json:"contract_hash,omitempty"`
}

type Client

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

Client is an HTTP client for the DevContract relay API.

func NewClient

func NewClient(baseURL string, kp *crypto.KeyPair) *Client

NewClient creates a new relay client.

func (*Client) AddTeamMember

func (c *Client) AddTeamMember(teamID, username, fingerprint, publicKey, transportPublicKey, transportFingerprint, role string) error

AddTeamMember adds or updates a member on the relay.

func (*Client) BootstrapTeam

func (c *Client) BootstrapTeam(teamID string, req BootstrapTeamRequest) error

BootstrapTeam creates the initial relay-side project record with an explicit founder.

func (*Client) ConsumeInvite

func (c *Client) ConsumeInvite(tokenHash, joinerLabel string) (*InviteResponse, error)

ConsumeInvite consumes (redeems) an invite.

func (*Client) CreateInvite

func (c *Client) CreateInvite(req InviteRequest) error

CreateInvite creates a new invite on the relay.

func (*Client) DeleteBlob

func (c *Client) DeleteBlob(teamID, blobID string) error

DeleteBlob removes a blob after download.

func (*Client) DownloadBlob

func (c *Client) DownloadBlob(teamID, blobID string) ([]byte, string, string, string, error)

DownloadBlob downloads an encrypted blob from the relay.

func (*Client) GetInvite

func (c *Client) GetInvite(tokenHash string) (*InviteResponse, error)

GetInvite retrieves an invite by token hash.

func (*Client) GetLimitsStatus

func (c *Client) GetLimitsStatus(teamID string) (*LimitsStatus, error)

GetLimitsStatus retrieves the current relay limits and usage for a team.

func (*Client) GetTeamMetrics

func (c *Client) GetTeamMetrics(teamID string) (*TeamMetrics, error)

GetTeamMetrics returns operator-facing relay metrics for a project team.

func (*Client) GetTierStatus

func (c *Client) GetTierStatus(teamID string) (*LimitsStatus, error)

GetTierStatus is retained as a compatibility alias for older callers.

func (*Client) Health

func (c *Client) Health() (map[string]interface{}, error)

Health checks the relay health.

func (*Client) JoinInvite

func (c *Client) JoinInvite(tokenHash string, req JoinInviteRequest) (*JoinInviteResponse, error)

JoinInvite atomically redeems an invite and registers the authenticated member.

func (*Client) ListPending

func (c *Client) ListPending(teamID string) ([]BlobInfo, error)

ListPending lists pending blobs for the current identity.

func (*Client) ListRejectedBlobs

func (c *Client) ListRejectedBlobs(teamID string) ([]RejectedBlobInfo, error)

ListRejectedBlobs returns rejected/quarantined relay metadata for operators.

func (*Client) ListTeamAudit

func (c *Client) ListTeamAudit(teamID string, limit int) ([]TeamAuditEvent, error)

ListTeamAudit returns relay-side administrative history for the current project.

func (*Client) ListTeamInvites

func (c *Client) ListTeamInvites(teamID string) ([]TeamInvite, error)

ListTeamInvites returns relay-side invite lifecycle data for project administrators.

func (*Client) ListTeamMembers

func (c *Client) ListTeamMembers(teamID string) ([]TeamMember, error)

ListTeamMembers returns the current relay-side project member list.

func (*Client) RejectBlob

func (c *Client) RejectBlob(teamID, blobID, reason string) error

RejectBlob retires a malformed relay payload so it does not keep resurfacing.

func (*Client) RemoveTeamMemberByFingerprint

func (c *Client) RemoveTeamMemberByFingerprint(teamID, fingerprint string) error

RemoveTeamMemberByFingerprint removes a member from a team using the stable identity fingerprint.

func (*Client) RevokeInvite

func (c *Client) RevokeInvite(teamID, tokenHash, reason string) error

RevokeInvite retires a relay invite before it is consumed.

func (*Client) RotateSelf

func (c *Client) RotateSelf(teamID string, req RotateSelfRequest) error

RotateSelf atomically swaps the authenticated member to a replacement identity.

func (*Client) TransferOwnership

func (c *Client) TransferOwnership(teamID, fingerprint string) error

TransferOwnership promotes another human member and demotes the caller to member.

func (*Client) UploadBlob

func (c *Client) UploadBlob(teamID, blobID string, data []byte, senderFP, recipientFP, ephemeralKey, filename, senderSig string) error

UploadBlob uploads an encrypted blob to the relay.

func (*Client) UpsertTeamMember

func (c *Client) UpsertTeamMember(teamID string, req UpsertTeamMemberRequest) error

UpsertTeamMember adds or updates a principal on the relay.

type InviteRequest

type InviteRequest struct {
	TokenHash          string `json:"token_hash"`
	TeamID             string `json:"team_id"`
	Inviter            string `json:"inviter"`
	InviterFingerprint string `json:"inviter_fingerprint"`
	Invitee            string `json:"invitee"`
}

InviteRequest is the request body for creating an invite.

type InviteResponse

type InviteResponse struct {
	TeamID             string `json:"team_id"`
	Inviter            string `json:"inviter"`
	InviterFingerprint string `json:"inviter_fingerprint"`
	ExpiresAt          int64  `json:"expires_at"`
}

InviteResponse is the response from the invite endpoint.

type JoinInviteRequest

type JoinInviteRequest struct {
	Username             string `json:"username"`
	Fingerprint          string `json:"fingerprint"`
	PublicKey            string `json:"public_key"`
	TransportPublicKey   string `json:"transport_public_key"`
	TransportFingerprint string `json:"transport_fingerprint"`
}

type JoinInviteResponse

type JoinInviteResponse struct {
	TeamID             string       `json:"team_id"`
	Inviter            string       `json:"inviter"`
	InviterFingerprint string       `json:"inviter_fingerprint"`
	JoinerFingerprint  string       `json:"joiner_fingerprint"`
	Members            []TeamMember `json:"members"`
}

type LimitsStatus

type LimitsStatus struct {
	TeamID             string      `json:"team_id"`
	Tier               string      `json:"tier"`
	StripeSubscription string      `json:"stripe_subscription"`
	Usage              RelayUsage  `json:"usage"`
	Limits             RelayLimits `json:"limits"`
}

LimitsStatus describes the relay policy and current usage for a team.

type RejectedBlobInfo

type RejectedBlobInfo struct {
	BlobID               string `json:"blob_id"`
	TeamID               string `json:"team_id"`
	SenderFingerprint    string `json:"sender_fingerprint"`
	RecipientFingerprint string `json:"recipient_fingerprint"`
	Status               string `json:"status"`
	FailureReason        string `json:"failure_reason,omitempty"`
	RejectedAt           int64  `json:"rejected_at,omitempty"`
	Filename             string `json:"filename"`
}

type RelayLimits

type RelayLimits struct {
	Members     int `json:"members"`       // -1 = unlimited
	BlobsPerDay int `json:"blobs_per_day"` // -1 = unlimited
	HistoryDays int `json:"history_days"`
}

RelayLimits describes the deployment-configured relay limits.

type RelayUsage

type RelayUsage struct {
	Members    int `json:"members"`
	BlobsToday int `json:"blobs_today"`
}

RelayUsage tracks current relay-side usage.

type RotateSelfRequest

type RotateSelfRequest struct {
	Username             string `json:"username"`
	Fingerprint          string `json:"fingerprint"`
	PublicKey            string `json:"public_key"`
	TransportPublicKey   string `json:"transport_public_key"`
	TransportFingerprint string `json:"transport_fingerprint"`
	Proof                string `json:"proof"`
}

type TeamAuditEvent

type TeamAuditEvent struct {
	ID                 string   `json:"id"`
	TeamID             string   `json:"team_id"`
	Action             string   `json:"action"`
	ActorFingerprint   string   `json:"actor_fingerprint,omitempty"`
	ActorPrincipalType string   `json:"actor_principal_type,omitempty"`
	ActorScopes        []string `json:"actor_scopes,omitempty"`
	TargetFingerprint  string   `json:"target_fingerprint,omitempty"`
	InviteHash         string   `json:"invite_hash,omitempty"`
	BlobID             string   `json:"blob_id,omitempty"`
	Result             string   `json:"result"`
	Details            string   `json:"details,omitempty"`
	CreatedAt          int64    `json:"created_at"`
}

type TeamInvite

type TeamInvite struct {
	TokenHash             string `json:"token_hash"`
	TeamID                string `json:"team_id"`
	Inviter               string `json:"inviter"`
	InviterFingerprint    string `json:"inviter_fingerprint"`
	Invitee               string `json:"invitee"`
	CreatedAt             int64  `json:"created_at"`
	ExpiresAt             int64  `json:"expires_at"`
	Consumed              bool   `json:"consumed"`
	ConsumedAt            int64  `json:"consumed_at,omitempty"`
	ConsumedByFingerprint string `json:"consumed_by_fingerprint,omitempty"`
	RevokedAt             int64  `json:"revoked_at,omitempty"`
	RevokedByFingerprint  string `json:"revoked_by_fingerprint,omitempty"`
	RevokeReason          string `json:"revoke_reason,omitempty"`
	Status                string `json:"status,omitempty"`
}

type TeamMember

type TeamMember struct {
	Username             string   `json:"username"`
	Fingerprint          string   `json:"fingerprint"`
	PublicKey            string   `json:"public_key"`
	TransportPublicKey   string   `json:"transport_public_key"`
	TransportFingerprint string   `json:"transport_fingerprint"`
	Role                 string   `json:"role"`
	PrincipalType        string   `json:"principal_type,omitempty"`
	Scopes               []string `json:"scopes,omitempty"`
	AddedAt              int64    `json:"added_at"`
}

TeamMember represents a registered project member on the relay.

type TeamMetrics

type TeamMetrics struct {
	TeamID             string         `json:"team_id"`
	MemberCount        int            `json:"member_count"`
	PendingCount       int            `json:"pending_count"`
	PendingByRecipient map[string]int `json:"pending_by_recipient"`
	UploadsToday       int            `json:"uploads_today"`
	EventTotals        map[string]int `json:"event_totals"`
	EventsToday        map[string]int `json:"events_today"`
	RecordedAt         string         `json:"recorded_at"`
}

type TierLimits

type TierLimits = RelayLimits

TierLimits is retained as a compatibility alias for older callers.

type TierStatus

type TierStatus = LimitsStatus

TierStatus is retained as a compatibility alias for older callers.

type TierUsage

type TierUsage = RelayUsage

TierUsage is retained as a compatibility alias for older callers.

type UpsertTeamMemberRequest

type UpsertTeamMemberRequest struct {
	Username             string   `json:"username"`
	Fingerprint          string   `json:"fingerprint"`
	PublicKey            string   `json:"public_key"`
	TransportPublicKey   string   `json:"transport_public_key"`
	TransportFingerprint string   `json:"transport_fingerprint"`
	Role                 string   `json:"role,omitempty"`
	PrincipalType        string   `json:"principal_type,omitempty"`
	Scopes               []string `json:"scopes,omitempty"`
}

Jump to

Keyboard shortcuts

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