Documentation
¶
Index ¶
- Variables
- type AcceptableRestriction
- func (*AcceptableRestriction) Descriptor() ([]byte, []int)deprecated
- func (x *AcceptableRestriction) GetAxis() RestrictionKind
- func (x *AcceptableRestriction) GetValues() []string
- func (*AcceptableRestriction) ProtoMessage()
- func (x *AcceptableRestriction) ProtoReflect() protoreflect.Message
- func (x *AcceptableRestriction) Reset()
- func (x *AcceptableRestriction) String() string
- type AccountRegistration
- func (*AccountRegistration) Descriptor() ([]byte, []int)deprecated
- func (x *AccountRegistration) GetDataSchema() *structpb.Struct
- func (*AccountRegistration) ProtoMessage()
- func (x *AccountRegistration) ProtoReflect() protoreflect.Message
- func (x *AccountRegistration) Reset()
- func (x *AccountRegistration) String() string
- type AgentAcceptance
- func (*AgentAcceptance) Descriptor() ([]byte, []int)deprecated
- func (x *AgentAcceptance) GetSignature() string
- func (x *AgentAcceptance) GetSignatureAlgorithm() string
- func (*AgentAcceptance) ProtoMessage()
- func (x *AgentAcceptance) ProtoReflect() protoreflect.Message
- func (x *AgentAcceptance) Reset()
- func (x *AgentAcceptance) String() string
- type AgentAcceptancePayload
- func (*AgentAcceptancePayload) Descriptor() ([]byte, []int)deprecated
- func (x *AgentAcceptancePayload) GetIdempotencyKey() string
- func (x *AgentAcceptancePayload) GetOfferSig() string
- func (x *AgentAcceptancePayload) GetRequesterDomain() string
- func (x *AgentAcceptancePayload) GetRequesterId() string
- func (*AgentAcceptancePayload) ProtoMessage()
- func (x *AgentAcceptancePayload) ProtoReflect() protoreflect.Message
- func (x *AgentAcceptancePayload) Reset()
- func (x *AgentAcceptancePayload) String() string
- type AgentRequestAcceptance
- func (*AgentRequestAcceptance) Descriptor() ([]byte, []int)deprecated
- func (x *AgentRequestAcceptance) GetPayload() *AgentRequestAcceptancePayload
- func (x *AgentRequestAcceptance) GetSignature() string
- func (x *AgentRequestAcceptance) GetSignatureAlgorithm() string
- func (*AgentRequestAcceptance) ProtoMessage()
- func (x *AgentRequestAcceptance) ProtoReflect() protoreflect.Message
- func (x *AgentRequestAcceptance) Reset()
- func (x *AgentRequestAcceptance) String() string
- type AgentRequestAcceptanceItem
- func (*AgentRequestAcceptanceItem) Descriptor() ([]byte, []int)deprecated
- func (x *AgentRequestAcceptanceItem) GetExchange() string
- func (x *AgentRequestAcceptanceItem) GetOfferSig() string
- func (*AgentRequestAcceptanceItem) ProtoMessage()
- func (x *AgentRequestAcceptanceItem) ProtoReflect() protoreflect.Message
- func (x *AgentRequestAcceptanceItem) Reset()
- func (x *AgentRequestAcceptanceItem) String() string
- type AgentRequestAcceptancePayload
- func (*AgentRequestAcceptancePayload) Descriptor() ([]byte, []int)deprecated
- func (x *AgentRequestAcceptancePayload) GetIdempotencyKey() string
- func (x *AgentRequestAcceptancePayload) GetItems() []*AgentRequestAcceptanceItem
- func (x *AgentRequestAcceptancePayload) GetRequesterDomain() string
- func (x *AgentRequestAcceptancePayload) GetRequesterId() string
- func (*AgentRequestAcceptancePayload) ProtoMessage()
- func (x *AgentRequestAcceptancePayload) ProtoReflect() protoreflect.Message
- func (x *AgentRequestAcceptancePayload) Reset()
- func (x *AgentRequestAcceptancePayload) String() string
- type AttributionDetail
- func (*AttributionDetail) Descriptor() ([]byte, []int)deprecated
- func (x *AttributionDetail) GetDisplayedUrl() string
- func (x *AttributionDetail) GetFormat() CitationFormat
- func (x *AttributionDetail) GetVisibleToUser() bool
- func (*AttributionDetail) ProtoMessage()
- func (x *AttributionDetail) ProtoReflect() protoreflect.Message
- func (x *AttributionDetail) Reset()
- func (x *AttributionDetail) String() string
- type AuthMethod
- type AuthorizedExchange
- func (*AuthorizedExchange) Descriptor() ([]byte, []int)deprecated
- func (x *AuthorizedExchange) GetDomain() string
- func (x *AuthorizedExchange) GetEndpoint() string
- func (x *AuthorizedExchange) GetExt() *structpb.Struct
- func (x *AuthorizedExchange) GetExtCritical() []string
- func (x *AuthorizedExchange) GetRelationship() ProviderRelationship
- func (*AuthorizedExchange) ProtoMessage()
- func (x *AuthorizedExchange) ProtoReflect() protoreflect.Message
- func (x *AuthorizedExchange) Reset()
- func (x *AuthorizedExchange) String() string
- type C2PAStatus
- type CatalogContributor
- func (*CatalogContributor) Descriptor() ([]byte, []int)deprecated
- func (x *CatalogContributor) GetDomain() string
- func (x *CatalogContributor) GetRelationship() string
- func (*CatalogContributor) ProtoMessage()
- func (x *CatalogContributor) ProtoReflect() protoreflect.Message
- func (x *CatalogContributor) Reset()
- func (x *CatalogContributor) String() string
- type CatalogRejection
- func (*CatalogRejection) Descriptor() ([]byte, []int)deprecated
- func (x *CatalogRejection) GetReason() CatalogRejectionReason
- func (x *CatalogRejection) GetRejectedPaths() []string
- func (*CatalogRejection) ProtoMessage()
- func (x *CatalogRejection) ProtoReflect() protoreflect.Message
- func (x *CatalogRejection) Reset()
- func (x *CatalogRejection) String() string
- type CatalogRejectionReason
- func (CatalogRejectionReason) Descriptor() protoreflect.EnumDescriptor
- func (x CatalogRejectionReason) Enum() *CatalogRejectionReason
- func (CatalogRejectionReason) EnumDescriptor() ([]byte, []int)deprecated
- func (x CatalogRejectionReason) Number() protoreflect.EnumNumber
- func (x CatalogRejectionReason) String() string
- func (CatalogRejectionReason) Type() protoreflect.EnumType
- type CitationFormat
- func (CitationFormat) Descriptor() protoreflect.EnumDescriptor
- func (x CitationFormat) Enum() *CitationFormat
- func (CitationFormat) EnumDescriptor() ([]byte, []int)deprecated
- func (x CitationFormat) Number() protoreflect.EnumNumber
- func (x CitationFormat) String() string
- func (CitationFormat) Type() protoreflect.EnumType
- type Cost
- type Delegation
- func (*Delegation) Descriptor() ([]byte, []int)deprecated
- func (x *Delegation) GetExpiresAt() *timestamppb.Timestamp
- func (x *Delegation) GetExt() *structpb.Struct
- func (x *Delegation) GetExtCritical() []string
- func (x *Delegation) GetIssuer() string
- func (x *Delegation) GetMaxAccesses() int32
- func (x *Delegation) GetMaxSpendCents() int64
- func (x *Delegation) GetPrincipalDomain() string
- func (x *Delegation) GetPrincipalId() string
- func (x *Delegation) GetQuotaPeriod() *durationpb.Duration
- func (x *Delegation) GetRevocationUri() string
- func (x *Delegation) GetScopes() []string
- func (x *Delegation) GetToken() []byte
- func (x *Delegation) GetTokenFormat() string
- func (*Delegation) ProtoMessage()
- func (x *Delegation) ProtoReflect() protoreflect.Message
- func (x *Delegation) Reset()
- func (x *Delegation) String() string
- type DeliveryMethod
- func (DeliveryMethod) Descriptor() protoreflect.EnumDescriptor
- func (x DeliveryMethod) Enum() *DeliveryMethod
- func (DeliveryMethod) EnumDescriptor() ([]byte, []int)deprecated
- func (x DeliveryMethod) Number() protoreflect.EnumNumber
- func (x DeliveryMethod) String() string
- func (DeliveryMethod) Type() protoreflect.EnumType
- type DenialReason
- func (DenialReason) Descriptor() protoreflect.EnumDescriptor
- func (x DenialReason) Enum() *DenialReason
- func (DenialReason) EnumDescriptor() ([]byte, []int)deprecated
- func (x DenialReason) Number() protoreflect.EnumNumber
- func (x DenialReason) String() string
- func (DenialReason) Type() protoreflect.EnumType
- type DiscoveryMethod
- func (DiscoveryMethod) Descriptor() protoreflect.EnumDescriptor
- func (x DiscoveryMethod) Enum() *DiscoveryMethod
- func (DiscoveryMethod) EnumDescriptor() ([]byte, []int)deprecated
- func (x DiscoveryMethod) Number() protoreflect.EnumNumber
- func (x DiscoveryMethod) String() string
- func (DiscoveryMethod) Type() protoreflect.EnumType
- type DiscoveryRequest
- func (*DiscoveryRequest) Descriptor() ([]byte, []int)deprecated
- func (x *DiscoveryRequest) GetAcceptableRestrictions() []*AcceptableRestriction
- func (x *DiscoveryRequest) GetConstraints() *RequestConstraints
- func (x *DiscoveryRequest) GetExt() *structpb.Struct
- func (x *DiscoveryRequest) GetExtCritical() []string
- func (x *DiscoveryRequest) GetQuery() string
- func (x *DiscoveryRequest) GetRequester() *Requester
- func (x *DiscoveryRequest) GetSearchFilters() *structpb.Struct
- func (x *DiscoveryRequest) GetSupportedProfiles() []string
- func (x *DiscoveryRequest) GetUris() []string
- func (x *DiscoveryRequest) GetVer() string
- func (*DiscoveryRequest) ProtoMessage()
- func (x *DiscoveryRequest) ProtoReflect() protoreflect.Message
- func (x *DiscoveryRequest) Reset()
- func (x *DiscoveryRequest) String() string
- type DiscoveryResponse
- func (*DiscoveryResponse) Descriptor() ([]byte, []int)deprecated
- func (x *DiscoveryResponse) GetAbsenceReason() OfferAbsenceReason
- func (x *DiscoveryResponse) GetExt() *structpb.Struct
- func (x *DiscoveryResponse) GetExtCritical() []string
- func (x *DiscoveryResponse) GetOfferGroups() []*OfferGroup
- func (x *DiscoveryResponse) GetVer() string
- func (*DiscoveryResponse) ProtoMessage()
- func (x *DiscoveryResponse) ProtoReflect() protoreflect.Message
- func (x *DiscoveryResponse) Reset()
- func (x *DiscoveryResponse) String() string
- type DisputeFailure
- type DisputeFailureReason
- func (DisputeFailureReason) Descriptor() protoreflect.EnumDescriptor
- func (x DisputeFailureReason) Enum() *DisputeFailureReason
- func (DisputeFailureReason) EnumDescriptor() ([]byte, []int)deprecated
- func (x DisputeFailureReason) Number() protoreflect.EnumNumber
- func (x DisputeFailureReason) String() string
- func (DisputeFailureReason) Type() protoreflect.EnumType
- type DisputeReason
- func (DisputeReason) Descriptor() protoreflect.EnumDescriptor
- func (x DisputeReason) Enum() *DisputeReason
- func (DisputeReason) EnumDescriptor() ([]byte, []int)deprecated
- func (x DisputeReason) Number() protoreflect.EnumNumber
- func (x DisputeReason) String() string
- func (DisputeReason) Type() protoreflect.EnumType
- type DisputeRequest
- func (*DisputeRequest) Descriptor() ([]byte, []int)deprecated
- func (x *DisputeRequest) GetBillingId() string
- func (x *DisputeRequest) GetDescription() string
- func (x *DisputeRequest) GetExchange() string
- func (x *DisputeRequest) GetExt() *structpb.Struct
- func (x *DisputeRequest) GetExtCritical() []string
- func (x *DisputeRequest) GetIdempotencyKey() string
- func (x *DisputeRequest) GetReason() DisputeReason
- func (x *DisputeRequest) GetReceivedContentHash() string
- func (x *DisputeRequest) GetReceivedHashMethod() string
- func (x *DisputeRequest) GetReportId() string
- func (x *DisputeRequest) GetTransactionId() string
- func (x *DisputeRequest) GetVer() string
- func (*DisputeRequest) ProtoMessage()
- func (x *DisputeRequest) ProtoReflect() protoreflect.Message
- func (x *DisputeRequest) Reset()
- func (x *DisputeRequest) String() string
- type DisputeResponse
- func (*DisputeResponse) Descriptor() ([]byte, []int)deprecated
- func (x *DisputeResponse) GetDisputeId() string
- func (x *DisputeResponse) GetEstimatedResolution() *durationpb.Duration
- func (x *DisputeResponse) GetExt() *structpb.Struct
- func (x *DisputeResponse) GetExtCritical() []string
- func (x *DisputeResponse) GetResolution() ResolutionType
- func (x *DisputeResponse) GetStatus() DisputeStatus
- func (x *DisputeResponse) GetVer() string
- func (*DisputeResponse) ProtoMessage()
- func (x *DisputeResponse) ProtoReflect() protoreflect.Message
- func (x *DisputeResponse) Reset()
- func (x *DisputeResponse) String() string
- type DisputeStatus
- func (DisputeStatus) Descriptor() protoreflect.EnumDescriptor
- func (x DisputeStatus) Enum() *DisputeStatus
- func (DisputeStatus) EnumDescriptor() ([]byte, []int)deprecated
- func (x DisputeStatus) Number() protoreflect.EnumNumber
- func (x DisputeStatus) String() string
- func (DisputeStatus) Type() protoreflect.EnumType
- type DomainVerificationChallenge
- func (*DomainVerificationChallenge) Descriptor() ([]byte, []int)deprecated
- func (x *DomainVerificationChallenge) GetExpiresAt() *timestamppb.Timestamp
- func (x *DomainVerificationChallenge) GetExt() *structpb.Struct
- func (x *DomainVerificationChallenge) GetExtCritical() []string
- func (x *DomainVerificationChallenge) GetToken() string
- func (x *DomainVerificationChallenge) GetVer() string
- func (x *DomainVerificationChallenge) GetVerificationUrl() string
- func (*DomainVerificationChallenge) ProtoMessage()
- func (x *DomainVerificationChallenge) ProtoReflect() protoreflect.Message
- func (x *DomainVerificationChallenge) Reset()
- func (x *DomainVerificationChallenge) String() string
- type DomainVerificationConfirmation
- func (*DomainVerificationConfirmation) Descriptor() ([]byte, []int)deprecated
- func (x *DomainVerificationConfirmation) GetCdnType() string
- func (x *DomainVerificationConfirmation) GetDomain() string
- func (x *DomainVerificationConfirmation) GetExchange() string
- func (x *DomainVerificationConfirmation) GetExt() *structpb.Struct
- func (x *DomainVerificationConfirmation) GetExtCritical() []string
- func (x *DomainVerificationConfirmation) GetSigningKey() string
- func (x *DomainVerificationConfirmation) GetToken() string
- func (x *DomainVerificationConfirmation) GetVer() string
- func (*DomainVerificationConfirmation) ProtoMessage()
- func (x *DomainVerificationConfirmation) ProtoReflect() protoreflect.Message
- func (x *DomainVerificationConfirmation) Reset()
- func (x *DomainVerificationConfirmation) String() string
- type DomainVerificationFailure
- func (*DomainVerificationFailure) Descriptor() ([]byte, []int)deprecated
- func (x *DomainVerificationFailure) GetReason() DomainVerificationFailureReason
- func (*DomainVerificationFailure) ProtoMessage()
- func (x *DomainVerificationFailure) ProtoReflect() protoreflect.Message
- func (x *DomainVerificationFailure) Reset()
- func (x *DomainVerificationFailure) String() string
- type DomainVerificationFailureReason
- func (DomainVerificationFailureReason) Descriptor() protoreflect.EnumDescriptor
- func (x DomainVerificationFailureReason) Enum() *DomainVerificationFailureReason
- func (DomainVerificationFailureReason) EnumDescriptor() ([]byte, []int)deprecated
- func (x DomainVerificationFailureReason) Number() protoreflect.EnumNumber
- func (x DomainVerificationFailureReason) String() string
- func (DomainVerificationFailureReason) Type() protoreflect.EnumType
- type DomainVerificationRequest
- func (*DomainVerificationRequest) Descriptor() ([]byte, []int)deprecated
- func (x *DomainVerificationRequest) GetCallerId() string
- func (x *DomainVerificationRequest) GetDomain() string
- func (x *DomainVerificationRequest) GetExchange() string
- func (x *DomainVerificationRequest) GetExt() *structpb.Struct
- func (x *DomainVerificationRequest) GetExtCritical() []string
- func (x *DomainVerificationRequest) GetVer() string
- func (*DomainVerificationRequest) ProtoMessage()
- func (x *DomainVerificationRequest) ProtoReflect() protoreflect.Message
- func (x *DomainVerificationRequest) Reset()
- func (x *DomainVerificationRequest) String() string
- type DomainVerificationResult
- func (*DomainVerificationResult) Descriptor() ([]byte, []int)deprecated
- func (x *DomainVerificationResult) GetExt() *structpb.Struct
- func (x *DomainVerificationResult) GetExtCritical() []string
- func (x *DomainVerificationResult) GetKeyId() string
- func (x *DomainVerificationResult) GetValidUntil() *timestamppb.Timestamp
- func (x *DomainVerificationResult) GetVer() string
- func (*DomainVerificationResult) ProtoMessage()
- func (x *DomainVerificationResult) ProtoReflect() protoreflect.Message
- func (x *DomainVerificationResult) Reset()
- func (x *DomainVerificationResult) String() string
- type ErrorDetail
- func (*ErrorDetail) Descriptor() ([]byte, []int)deprecated
- func (x *ErrorDetail) GetCatalogRejection() *CatalogRejection
- func (x *ErrorDetail) GetDisputeFailure() *DisputeFailure
- func (x *ErrorDetail) GetDomain() string
- func (x *ErrorDetail) GetDomainVerificationFailure() *DomainVerificationFailure
- func (x *ErrorDetail) GetMessage() string
- func (x *ErrorDetail) GetMetadata() map[string]string
- func (x *ErrorDetail) GetReason() isErrorDetail_Reason
- func (x *ErrorDetail) GetRegistrationFailure() *RegistrationFailure
- func (x *ErrorDetail) GetRetrievalAuthFailure() *RetrievalAuthFailure
- func (x *ErrorDetail) GetTransactionDenial() *TransactionDenial
- func (x *ErrorDetail) GetUsageReportRejection() *UsageReportRejection
- func (*ErrorDetail) ProtoMessage()
- func (x *ErrorDetail) ProtoReflect() protoreflect.Message
- func (x *ErrorDetail) Reset()
- func (x *ErrorDetail) String() string
- type ErrorDetail_CatalogRejection
- type ErrorDetail_DisputeFailure
- type ErrorDetail_DomainVerificationFailure
- type ErrorDetail_RegistrationFailure
- type ErrorDetail_RetrievalAuthFailure
- type ErrorDetail_TransactionDenial
- type ErrorDetail_UsageReportRejection
- type GetAccountStatusRequest
- func (*GetAccountStatusRequest) Descriptor() ([]byte, []int)deprecated
- func (x *GetAccountStatusRequest) GetExchange() string
- func (x *GetAccountStatusRequest) GetExt() *structpb.Struct
- func (x *GetAccountStatusRequest) GetExtCritical() []string
- func (x *GetAccountStatusRequest) GetVer() string
- func (*GetAccountStatusRequest) ProtoMessage()
- func (x *GetAccountStatusRequest) ProtoReflect() protoreflect.Message
- func (x *GetAccountStatusRequest) Reset()
- func (x *GetAccountStatusRequest) String() string
- type GetAccountStatusResponse
- func (*GetAccountStatusResponse) Descriptor() ([]byte, []int)deprecated
- func (x *GetAccountStatusResponse) GetActive() bool
- func (x *GetAccountStatusResponse) GetBillingRef() string
- func (x *GetAccountStatusResponse) GetExt() *structpb.Struct
- func (x *GetAccountStatusResponse) GetExtCritical() []string
- func (x *GetAccountStatusResponse) GetTermsDigest() string
- func (x *GetAccountStatusResponse) GetVer() string
- func (*GetAccountStatusResponse) ProtoMessage()
- func (x *GetAccountStatusResponse) ProtoReflect() protoreflect.Message
- func (x *GetAccountStatusResponse) Reset()
- func (x *GetAccountStatusResponse) String() string
- type IngestionSource
- func (IngestionSource) Descriptor() protoreflect.EnumDescriptor
- func (x IngestionSource) Enum() *IngestionSource
- func (IngestionSource) EnumDescriptor() ([]byte, []int)deprecated
- func (x IngestionSource) Number() protoreflect.EnumNumber
- func (x IngestionSource) String() string
- func (IngestionSource) Type() protoreflect.EnumType
- type JsonWebKey
- func (*JsonWebKey) Descriptor() ([]byte, []int)deprecated
- func (x *JsonWebKey) GetAlg() string
- func (x *JsonWebKey) GetCrv() string
- func (x *JsonWebKey) GetKty() string
- func (x *JsonWebKey) GetNotAfter() string
- func (x *JsonWebKey) GetNotBefore() string
- func (x *JsonWebKey) GetUse() string
- func (x *JsonWebKey) GetX() string
- func (*JsonWebKey) ProtoMessage()
- func (x *JsonWebKey) ProtoReflect() protoreflect.Message
- func (x *JsonWebKey) Reset()
- func (x *JsonWebKey) String() string
- type KeyRevocationList
- func (*KeyRevocationList) Descriptor() ([]byte, []int)deprecated
- func (x *KeyRevocationList) GetAsOf() *timestamppb.Timestamp
- func (x *KeyRevocationList) GetRevoked() []string
- func (*KeyRevocationList) ProtoMessage()
- func (x *KeyRevocationList) ProtoReflect() protoreflect.Message
- func (x *KeyRevocationList) Reset()
- func (x *KeyRevocationList) String() string
- type License
- func (*License) Descriptor() ([]byte, []int)deprecated
- func (x *License) GetId() string
- func (x *License) GetImmutable() bool
- func (x *License) GetName() string
- func (x *License) GetUri() string
- func (x *License) GetUriDigest() string
- func (*License) ProtoMessage()
- func (x *License) ProtoReflect() protoreflect.Message
- func (x *License) Reset()
- func (x *License) String() string
- type LicenseTerm
- func (*LicenseTerm) Descriptor() ([]byte, []int)deprecated
- func (x *LicenseTerm) GetLicense() *License
- func (x *LicenseTerm) GetObligations() []*Obligation
- func (x *LicenseTerm) GetPartLabel() string
- func (x *LicenseTerm) GetPricing() *Pricing
- func (x *LicenseTerm) GetQuotas() []*Quota
- func (x *LicenseTerm) GetRestrictions() []*Restriction
- func (x *LicenseTerm) GetScopes() []string
- func (x *LicenseTerm) GetSemantics() TermSemantics
- func (*LicenseTerm) ProtoMessage()
- func (x *LicenseTerm) ProtoReflect() protoreflect.Message
- func (x *LicenseTerm) Reset()
- func (x *LicenseTerm) String() string
- type Obligation
- func (*Obligation) Descriptor() ([]byte, []int)deprecated
- func (x *Obligation) GetDetail() string
- func (x *Obligation) GetKind() ObligationKind
- func (x *Obligation) GetScopeLicense() *License
- func (x *Obligation) GetTrigger() ObligationTrigger
- func (*Obligation) ProtoMessage()
- func (x *Obligation) ProtoReflect() protoreflect.Message
- func (x *Obligation) Reset()
- func (x *Obligation) String() string
- type ObligationKind
- func (ObligationKind) Descriptor() protoreflect.EnumDescriptor
- func (x ObligationKind) Enum() *ObligationKind
- func (ObligationKind) EnumDescriptor() ([]byte, []int)deprecated
- func (x ObligationKind) Number() protoreflect.EnumNumber
- func (x ObligationKind) String() string
- func (ObligationKind) Type() protoreflect.EnumType
- type ObligationTrigger
- func (ObligationTrigger) Descriptor() protoreflect.EnumDescriptor
- func (x ObligationTrigger) Enum() *ObligationTrigger
- func (ObligationTrigger) EnumDescriptor() ([]byte, []int)deprecated
- func (x ObligationTrigger) Number() protoreflect.EnumNumber
- func (x ObligationTrigger) String() string
- func (ObligationTrigger) Type() protoreflect.EnumType
- type Offer
- func (*Offer) Descriptor() ([]byte, []int)deprecated
- func (x *Offer) GetAttestations() []*ResourceAttestation
- func (x *Offer) GetDataAsOf() *timestamppb.Timestamp
- func (x *Offer) GetDeliveryMethod() DeliveryMethod
- func (x *Offer) GetExchange() string
- func (x *Offer) GetExpiresAt() *timestamppb.Timestamp
- func (x *Offer) GetExt() *structpb.Struct
- func (x *Offer) GetExtCritical() []string
- func (x *Offer) GetIabCategories() []string
- func (x *Offer) GetIdentity() *ResourceIdentity
- func (x *Offer) GetOfferId() string
- func (x *Offer) GetPreviews() []*Preview
- func (x *Offer) GetPricing() *Pricing
- func (x *Offer) GetReporting() *ReportingObligation
- func (x *Offer) GetSignature() string
- func (x *Offer) GetSignatureAlgorithm() string
- func (x *Offer) GetSubscriptionId() string
- func (x *Offer) GetSubscriptionQuota() []*SubscriptionQuotaInfo
- func (x *Offer) GetTerms() []*LicenseTerm
- func (x *Offer) GetTitle() string
- func (*Offer) ProtoMessage()
- func (x *Offer) ProtoReflect() protoreflect.Message
- func (x *Offer) Reset()
- func (x *Offer) String() string
- type OfferAbsenceReason
- func (OfferAbsenceReason) Descriptor() protoreflect.EnumDescriptor
- func (x OfferAbsenceReason) Enum() *OfferAbsenceReason
- func (OfferAbsenceReason) EnumDescriptor() ([]byte, []int)deprecated
- func (x OfferAbsenceReason) Number() protoreflect.EnumNumber
- func (x OfferAbsenceReason) String() string
- func (OfferAbsenceReason) Type() protoreflect.EnumType
- type OfferGroup
- func (*OfferGroup) Descriptor() ([]byte, []int)deprecated
- func (x *OfferGroup) GetAbsenceReason() OfferAbsenceReason
- func (x *OfferGroup) GetDiscoveryMethod() DiscoveryMethod
- func (x *OfferGroup) GetOffers() []*Offer
- func (x *OfferGroup) GetRestrictionFilters() []RestrictionKind
- func (x *OfferGroup) GetUri() string
- func (*OfferGroup) ProtoMessage()
- func (x *OfferGroup) ProtoReflect() protoreflect.Message
- func (x *OfferGroup) Reset()
- func (x *OfferGroup) String() string
- type Preview
- func (*Preview) Descriptor() ([]byte, []int)deprecated
- func (x *Preview) GetDuration() int32
- func (x *Preview) GetHeight() int32
- func (x *Preview) GetMediaType() string
- func (x *Preview) GetSize() string
- func (x *Preview) GetUrl() string
- func (x *Preview) GetWidth() int32
- func (*Preview) ProtoMessage()
- func (x *Preview) ProtoReflect() protoreflect.Message
- func (x *Preview) Reset()
- func (x *Preview) String() string
- type Pricing
- func (*Pricing) Descriptor() ([]byte, []int)deprecated
- func (x *Pricing) GetCurrency() string
- func (x *Pricing) GetEstimatedQuantity() int32
- func (x *Pricing) GetLicenseDurationMonths() int32
- func (x *Pricing) GetMetering() PricingMetering
- func (x *Pricing) GetModel() PricingModel
- func (x *Pricing) GetRate() string
- func (x *Pricing) GetUnit() string
- func (x *Pricing) GetUnitCost() string
- func (*Pricing) ProtoMessage()
- func (x *Pricing) ProtoReflect() protoreflect.Message
- func (x *Pricing) Reset()
- func (x *Pricing) String() string
- type PricingMetering
- func (PricingMetering) Descriptor() protoreflect.EnumDescriptor
- func (x PricingMetering) Enum() *PricingMetering
- func (PricingMetering) EnumDescriptor() ([]byte, []int)deprecated
- func (x PricingMetering) Number() protoreflect.EnumNumber
- func (x PricingMetering) String() string
- func (PricingMetering) Type() protoreflect.EnumType
- type PricingModel
- func (PricingModel) Descriptor() protoreflect.EnumDescriptor
- func (x PricingModel) Enum() *PricingModel
- func (PricingModel) EnumDescriptor() ([]byte, []int)deprecated
- func (x PricingModel) Number() protoreflect.EnumNumber
- func (x PricingModel) String() string
- func (PricingModel) Type() protoreflect.EnumType
- type ProviderRelationship
- func (ProviderRelationship) Descriptor() protoreflect.EnumDescriptor
- func (x ProviderRelationship) Enum() *ProviderRelationship
- func (ProviderRelationship) EnumDescriptor() ([]byte, []int)deprecated
- func (x ProviderRelationship) Number() protoreflect.EnumNumber
- func (x ProviderRelationship) String() string
- func (ProviderRelationship) Type() protoreflect.EnumType
- type PushResourcesRequest
- func (*PushResourcesRequest) Descriptor() ([]byte, []int)deprecated
- func (x *PushResourcesRequest) GetCallerId() string
- func (x *PushResourcesRequest) GetEntries() []*ResourceEntry
- func (x *PushResourcesRequest) GetExchange() string
- func (x *PushResourcesRequest) GetExt() *structpb.Struct
- func (x *PushResourcesRequest) GetExtCritical() []string
- func (x *PushResourcesRequest) GetTenantId() string
- func (x *PushResourcesRequest) GetVer() string
- func (*PushResourcesRequest) ProtoMessage()
- func (x *PushResourcesRequest) ProtoReflect() protoreflect.Message
- func (x *PushResourcesRequest) Reset()
- func (x *PushResourcesRequest) String() string
- type PushResourcesResponse
- func (*PushResourcesResponse) Descriptor() ([]byte, []int)deprecated
- func (x *PushResourcesResponse) GetAccepted() int32
- func (x *PushResourcesResponse) GetExt() *structpb.Struct
- func (x *PushResourcesResponse) GetExtCritical() []string
- func (x *PushResourcesResponse) GetRejected() int32
- func (x *PushResourcesResponse) GetVer() string
- func (x *PushResourcesResponse) GetWarnings() []string
- func (*PushResourcesResponse) ProtoMessage()
- func (x *PushResourcesResponse) ProtoReflect() protoreflect.Message
- func (x *PushResourcesResponse) Reset()
- func (x *PushResourcesResponse) String() string
- type Quota
- type QuotaWindow
- func (QuotaWindow) Descriptor() protoreflect.EnumDescriptor
- func (x QuotaWindow) Enum() *QuotaWindow
- func (QuotaWindow) EnumDescriptor() ([]byte, []int)deprecated
- func (x QuotaWindow) Number() protoreflect.EnumNumber
- func (x QuotaWindow) String() string
- func (QuotaWindow) Type() protoreflect.EnumType
- type RateLimitInfo
- func (*RateLimitInfo) Descriptor() ([]byte, []int)deprecated
- func (x *RateLimitInfo) GetLimit() int32
- func (x *RateLimitInfo) GetRemaining() int32
- func (x *RateLimitInfo) GetResetAt() *timestamppb.Timestamp
- func (x *RateLimitInfo) GetWindow() *durationpb.Duration
- func (*RateLimitInfo) ProtoMessage()
- func (x *RateLimitInfo) ProtoReflect() protoreflect.Message
- func (x *RateLimitInfo) Reset()
- func (x *RateLimitInfo) String() string
- type RefreshCatalogRequest
- func (*RefreshCatalogRequest) Descriptor() ([]byte, []int)deprecated
- func (x *RefreshCatalogRequest) GetExchange() string
- func (x *RefreshCatalogRequest) GetTenantId() string
- func (x *RefreshCatalogRequest) GetVer() string
- func (*RefreshCatalogRequest) ProtoMessage()
- func (x *RefreshCatalogRequest) ProtoReflect() protoreflect.Message
- func (x *RefreshCatalogRequest) Reset()
- func (x *RefreshCatalogRequest) String() string
- type RefreshCatalogResponse
- func (*RefreshCatalogResponse) Descriptor() ([]byte, []int)deprecated
- func (x *RefreshCatalogResponse) GetStarted() bool
- func (x *RefreshCatalogResponse) GetVer() string
- func (*RefreshCatalogResponse) ProtoMessage()
- func (x *RefreshCatalogResponse) ProtoReflect() protoreflect.Message
- func (x *RefreshCatalogResponse) Reset()
- func (x *RefreshCatalogResponse) String() string
- type RegisterRequest
- func (*RegisterRequest) Descriptor() ([]byte, []int)deprecated
- func (x *RegisterRequest) GetExchange() string
- func (x *RegisterRequest) GetExt() *structpb.Struct
- func (x *RegisterRequest) GetExtCritical() []string
- func (x *RegisterRequest) GetRegistrationData() *structpb.Struct
- func (x *RegisterRequest) GetTermsDigest() string
- func (x *RegisterRequest) GetVer() string
- func (*RegisterRequest) ProtoMessage()
- func (x *RegisterRequest) ProtoReflect() protoreflect.Message
- func (x *RegisterRequest) Reset()
- func (x *RegisterRequest) String() string
- type RegisterResponse
- func (*RegisterResponse) Descriptor() ([]byte, []int)deprecated
- func (x *RegisterResponse) GetActive() bool
- func (x *RegisterResponse) GetBillingRef() string
- func (x *RegisterResponse) GetExt() *structpb.Struct
- func (x *RegisterResponse) GetExtCritical() []string
- func (x *RegisterResponse) GetVer() string
- func (*RegisterResponse) ProtoMessage()
- func (x *RegisterResponse) ProtoReflect() protoreflect.Message
- func (x *RegisterResponse) Reset()
- func (x *RegisterResponse) String() string
- type RegistrationFailure
- func (*RegistrationFailure) Descriptor() ([]byte, []int)deprecated
- func (x *RegistrationFailure) GetFieldErrors() []*RegistrationFieldError
- func (x *RegistrationFailure) GetReason() RegistrationFailureReason
- func (*RegistrationFailure) ProtoMessage()
- func (x *RegistrationFailure) ProtoReflect() protoreflect.Message
- func (x *RegistrationFailure) Reset()
- func (x *RegistrationFailure) String() string
- type RegistrationFailureReason
- func (RegistrationFailureReason) Descriptor() protoreflect.EnumDescriptor
- func (x RegistrationFailureReason) Enum() *RegistrationFailureReason
- func (RegistrationFailureReason) EnumDescriptor() ([]byte, []int)deprecated
- func (x RegistrationFailureReason) Number() protoreflect.EnumNumber
- func (x RegistrationFailureReason) String() string
- func (RegistrationFailureReason) Type() protoreflect.EnumType
- type RegistrationFieldError
- func (*RegistrationFieldError) Descriptor() ([]byte, []int)deprecated
- func (x *RegistrationFieldError) GetError() string
- func (x *RegistrationFieldError) GetPath() string
- func (*RegistrationFieldError) ProtoMessage()
- func (x *RegistrationFieldError) ProtoReflect() protoreflect.Message
- func (x *RegistrationFieldError) Reset()
- func (x *RegistrationFieldError) String() string
- type RemoveResourcesRequest
- func (*RemoveResourcesRequest) Descriptor() ([]byte, []int)deprecated
- func (x *RemoveResourcesRequest) GetExchange() string
- func (x *RemoveResourcesRequest) GetPaths() []string
- func (x *RemoveResourcesRequest) GetTenantId() string
- func (x *RemoveResourcesRequest) GetVer() string
- func (*RemoveResourcesRequest) ProtoMessage()
- func (x *RemoveResourcesRequest) ProtoReflect() protoreflect.Message
- func (x *RemoveResourcesRequest) Reset()
- func (x *RemoveResourcesRequest) String() string
- type RemoveResourcesResponse
- func (*RemoveResourcesResponse) Descriptor() ([]byte, []int)deprecated
- func (x *RemoveResourcesResponse) GetRemoved() int32
- func (x *RemoveResourcesResponse) GetVer() string
- func (*RemoveResourcesResponse) ProtoMessage()
- func (x *RemoveResourcesResponse) ProtoReflect() protoreflect.Message
- func (x *RemoveResourcesResponse) Reset()
- func (x *RemoveResourcesResponse) String() string
- type ReportingObligation
- func (*ReportingObligation) Descriptor() ([]byte, []int)deprecated
- func (x *ReportingObligation) GetEndpoint() string
- func (x *ReportingObligation) GetExt() *structpb.Struct
- func (x *ReportingObligation) GetExtCritical() []string
- func (x *ReportingObligation) GetRequired() bool
- func (x *ReportingObligation) GetRequiredFields() []string
- func (x *ReportingObligation) GetWindow() *durationpb.Duration
- func (*ReportingObligation) ProtoMessage()
- func (x *ReportingObligation) ProtoReflect() protoreflect.Message
- func (x *ReportingObligation) Reset()
- func (x *ReportingObligation) String() string
- type RequestConstraints
- func (*RequestConstraints) Descriptor() ([]byte, []int)deprecated
- func (x *RequestConstraints) GetBudgetPeriod() *durationpb.Duration
- func (x *RequestConstraints) GetBudgetScope() string
- func (x *RequestConstraints) GetDeliveryPreference() []DeliveryMethod
- func (x *RequestConstraints) GetExchanges() []string
- func (x *RequestConstraints) GetMaxDataAge() *durationpb.Duration
- func (x *RequestConstraints) GetMaxHops() int32
- func (x *RequestConstraints) GetMaxPrice() *Cost
- func (x *RequestConstraints) GetMaxUnitCost() string
- func (x *RequestConstraints) GetPeriodBudget() *Cost
- func (x *RequestConstraints) GetPreferredExchanges() []string
- func (x *RequestConstraints) GetReportingCapable() bool
- func (*RequestConstraints) ProtoMessage()
- func (x *RequestConstraints) ProtoReflect() protoreflect.Message
- func (x *RequestConstraints) Reset()
- func (x *RequestConstraints) String() string
- type Requester
- func (*Requester) Descriptor() ([]byte, []int)deprecated
- func (x *Requester) GetDelegation() *Delegation
- func (x *Requester) GetDomain() string
- func (x *Requester) GetExt() *structpb.Struct
- func (x *Requester) GetExtCritical() []string
- func (x *Requester) GetId() string
- func (x *Requester) GetName() string
- func (x *Requester) GetScopes() []string
- func (x *Requester) GetType() RequesterType
- func (*Requester) ProtoMessage()
- func (x *Requester) ProtoReflect() protoreflect.Message
- func (x *Requester) Reset()
- func (x *Requester) String() string
- type RequesterType
- func (RequesterType) Descriptor() protoreflect.EnumDescriptor
- func (x RequesterType) Enum() *RequesterType
- func (RequesterType) EnumDescriptor() ([]byte, []int)deprecated
- func (x RequesterType) Number() protoreflect.EnumNumber
- func (x RequesterType) String() string
- func (RequesterType) Type() protoreflect.EnumType
- type ResolutionType
- func (ResolutionType) Descriptor() protoreflect.EnumDescriptor
- func (x ResolutionType) Enum() *ResolutionType
- func (ResolutionType) EnumDescriptor() ([]byte, []int)deprecated
- func (x ResolutionType) Number() protoreflect.EnumNumber
- func (x ResolutionType) String() string
- func (ResolutionType) Type() protoreflect.EnumType
- type ResourceAttestation
- func (*ResourceAttestation) Descriptor() ([]byte, []int)deprecated
- func (x *ResourceAttestation) GetAttestedAt() *timestamppb.Timestamp
- func (x *ResourceAttestation) GetClaims() *structpb.Struct
- func (x *ResourceAttestation) GetKeyid() string
- func (x *ResourceAttestation) GetSignature() string
- func (x *ResourceAttestation) GetUri() string
- func (x *ResourceAttestation) GetVerifier() string
- func (*ResourceAttestation) ProtoMessage()
- func (x *ResourceAttestation) ProtoReflect() protoreflect.Message
- func (x *ResourceAttestation) Reset()
- func (x *ResourceAttestation) String() string
- type ResourceEntry
- func (*ResourceEntry) Descriptor() ([]byte, []int)deprecated
- func (x *ResourceEntry) GetAttestations() []*ResourceAttestation
- func (x *ResourceEntry) GetContentHash() string
- func (x *ResourceEntry) GetContentId() string
- func (x *ResourceEntry) GetDomain() string
- func (x *ResourceEntry) GetEstimatedQuantity() int32
- func (x *ResourceEntry) GetExt() *structpb.Struct
- func (x *ResourceEntry) GetExtCritical() []string
- func (x *ResourceEntry) GetHashMethod() string
- func (x *ResourceEntry) GetPath() string
- func (x *ResourceEntry) GetProvenanceSource() string
- func (x *ResourceEntry) GetProvenanceTimestamp() *timestamppb.Timestamp
- func (x *ResourceEntry) GetResourceMutability() ResourceMutability
- func (x *ResourceEntry) GetSource() IngestionSource
- func (x *ResourceEntry) GetTerms() []*LicenseTerm
- func (x *ResourceEntry) GetTitle() string
- func (x *ResourceEntry) GetWordCount() int32
- func (*ResourceEntry) ProtoMessage()
- func (x *ResourceEntry) ProtoReflect() protoreflect.Message
- func (x *ResourceEntry) Reset()
- func (x *ResourceEntry) String() string
- type ResourceIdentity
- func (*ResourceIdentity) Descriptor() ([]byte, []int)deprecated
- func (x *ResourceIdentity) GetC2PaManifest() string
- func (x *ResourceIdentity) GetC2PaStatus() C2PAStatus
- func (x *ResourceIdentity) GetCanonicalUrl() string
- func (x *ResourceIdentity) GetContentHash() string
- func (x *ResourceIdentity) GetDoi() string
- func (x *ResourceIdentity) GetExt() *structpb.Struct
- func (x *ResourceIdentity) GetExtCritical() []string
- func (x *ResourceIdentity) GetHashMethod() string
- func (x *ResourceIdentity) GetIptcGuid() string
- func (x *ResourceIdentity) GetIsni() string
- func (x *ResourceIdentity) GetResourceMutability() ResourceMutability
- func (x *ResourceIdentity) GetSoftBinding() string
- func (x *ResourceIdentity) GetSoftBindingMethod() string
- func (*ResourceIdentity) ProtoMessage()
- func (x *ResourceIdentity) ProtoReflect() protoreflect.Message
- func (x *ResourceIdentity) Reset()
- func (x *ResourceIdentity) String() string
- type ResourceMutability
- func (ResourceMutability) Descriptor() protoreflect.EnumDescriptor
- func (x ResourceMutability) Enum() *ResourceMutability
- func (ResourceMutability) EnumDescriptor() ([]byte, []int)deprecated
- func (x ResourceMutability) Number() protoreflect.EnumNumber
- func (x ResourceMutability) String() string
- func (ResourceMutability) Type() protoreflect.EnumType
- type ResourceQuery
- func (*ResourceQuery) Descriptor() ([]byte, []int)deprecated
- func (x *ResourceQuery) GetAcceptableRestrictions() []*AcceptableRestriction
- func (x *ResourceQuery) GetDeadline() *durationpb.Duration
- func (x *ResourceQuery) GetExchange() string
- func (x *ResourceQuery) GetExt() *structpb.Struct
- func (x *ResourceQuery) GetExtCritical() []string
- func (x *ResourceQuery) GetRequester() *Requester
- func (x *ResourceQuery) GetSupportedProfiles() []string
- func (x *ResourceQuery) GetUris() []string
- func (x *ResourceQuery) GetVer() string
- func (*ResourceQuery) ProtoMessage()
- func (x *ResourceQuery) ProtoReflect() protoreflect.Message
- func (x *ResourceQuery) Reset()
- func (x *ResourceQuery) String() string
- type ResourceResponse
- func (*ResourceResponse) Descriptor() ([]byte, []int)deprecated
- func (x *ResourceResponse) GetExchange() string
- func (x *ResourceResponse) GetExt() *structpb.Struct
- func (x *ResourceResponse) GetExtCritical() []string
- func (x *ResourceResponse) GetOfferGroups() []*OfferGroup
- func (x *ResourceResponse) GetOffers() []*Offer
- func (x *ResourceResponse) GetRateLimit() *RateLimitInfo
- func (x *ResourceResponse) GetVer() string
- func (*ResourceResponse) ProtoMessage()
- func (x *ResourceResponse) ProtoReflect() protoreflect.Message
- func (x *ResourceResponse) Reset()
- func (x *ResourceResponse) String() string
- type Restriction
- func (*Restriction) Descriptor() ([]byte, []int)deprecated
- func (x *Restriction) GetAdvisory() bool
- func (x *Restriction) GetKind() RestrictionKind
- func (x *Restriction) GetPermitted() []string
- func (x *Restriction) GetProhibited() []string
- func (*Restriction) ProtoMessage()
- func (x *Restriction) ProtoReflect() protoreflect.Message
- func (x *Restriction) Reset()
- func (x *Restriction) String() string
- type RestrictionKind
- func (RestrictionKind) Descriptor() protoreflect.EnumDescriptor
- func (x RestrictionKind) Enum() *RestrictionKind
- func (RestrictionKind) EnumDescriptor() ([]byte, []int)deprecated
- func (x RestrictionKind) Number() protoreflect.EnumNumber
- func (x RestrictionKind) String() string
- func (RestrictionKind) Type() protoreflect.EnumType
- type RetrievalAuthFailure
- func (*RetrievalAuthFailure) Descriptor() ([]byte, []int)deprecated
- func (x *RetrievalAuthFailure) GetReason() RetrievalAuthFailureReason
- func (*RetrievalAuthFailure) ProtoMessage()
- func (x *RetrievalAuthFailure) ProtoReflect() protoreflect.Message
- func (x *RetrievalAuthFailure) Reset()
- func (x *RetrievalAuthFailure) String() string
- type RetrievalAuthFailureReason
- func (RetrievalAuthFailureReason) Descriptor() protoreflect.EnumDescriptor
- func (x RetrievalAuthFailureReason) Enum() *RetrievalAuthFailureReason
- func (RetrievalAuthFailureReason) EnumDescriptor() ([]byte, []int)deprecated
- func (x RetrievalAuthFailureReason) Number() protoreflect.EnumNumber
- func (x RetrievalAuthFailureReason) String() string
- func (RetrievalAuthFailureReason) Type() protoreflect.EnumType
- type Role
- type SubscriptionQuotaInfo
- func (*SubscriptionQuotaInfo) Descriptor() ([]byte, []int)deprecated
- func (x *SubscriptionQuotaInfo) GetQuotaLimit() int32
- func (x *SubscriptionQuotaInfo) GetQuotaRemaining() int32
- func (x *SubscriptionQuotaInfo) GetQuotaUsed() int32
- func (x *SubscriptionQuotaInfo) GetResetsAt() *timestamppb.Timestamp
- func (x *SubscriptionQuotaInfo) GetSubscriptionId() string
- func (x *SubscriptionQuotaInfo) GetUnit() string
- func (*SubscriptionQuotaInfo) ProtoMessage()
- func (x *SubscriptionQuotaInfo) ProtoReflect() protoreflect.Message
- func (x *SubscriptionQuotaInfo) Reset()
- func (x *SubscriptionQuotaInfo) String() string
- type TermSemantics
- func (TermSemantics) Descriptor() protoreflect.EnumDescriptor
- func (x TermSemantics) Enum() *TermSemantics
- func (TermSemantics) EnumDescriptor() ([]byte, []int)deprecated
- func (x TermSemantics) Number() protoreflect.EnumNumber
- func (x TermSemantics) String() string
- func (TermSemantics) Type() protoreflect.EnumType
- type TransactionDenial
- func (*TransactionDenial) Descriptor() ([]byte, []int)deprecated
- func (x *TransactionDenial) GetExchange() string
- func (x *TransactionDenial) GetOfferId() string
- func (x *TransactionDenial) GetReason() DenialReason
- func (x *TransactionDenial) GetRestrictionMismatches() []RestrictionKind
- func (*TransactionDenial) ProtoMessage()
- func (x *TransactionDenial) ProtoReflect() protoreflect.Message
- func (x *TransactionDenial) Reset()
- func (x *TransactionDenial) String() string
- type TransactionItem
- func (*TransactionItem) Descriptor() ([]byte, []int)deprecated
- func (x *TransactionItem) GetAgentAcceptance() *AgentAcceptance
- func (x *TransactionItem) GetOffer() *Offer
- func (*TransactionItem) ProtoMessage()
- func (x *TransactionItem) ProtoReflect() protoreflect.Message
- func (x *TransactionItem) Reset()
- func (x *TransactionItem) String() string
- type TransactionRequest
- func (*TransactionRequest) Descriptor() ([]byte, []int)deprecated
- func (x *TransactionRequest) GetAgentRequestAcceptance() *AgentRequestAcceptance
- func (x *TransactionRequest) GetExt() *structpb.Struct
- func (x *TransactionRequest) GetExtCritical() []string
- func (x *TransactionRequest) GetIdempotencyKey() string
- func (x *TransactionRequest) GetItems() []*TransactionItem
- func (x *TransactionRequest) GetRequester() *Requester
- func (x *TransactionRequest) GetVer() string
- func (*TransactionRequest) ProtoMessage()
- func (x *TransactionRequest) ProtoReflect() protoreflect.Message
- func (x *TransactionRequest) Reset()
- func (x *TransactionRequest) String() string
- type TransactionResponse
- func (*TransactionResponse) Descriptor() ([]byte, []int)deprecated
- func (x *TransactionResponse) GetAgentIdentityHash() string
- func (x *TransactionResponse) GetExt() *structpb.Struct
- func (x *TransactionResponse) GetExtCritical() []string
- func (x *TransactionResponse) GetItems() []*TransactionResultItem
- func (x *TransactionResponse) GetSubscriptionQuota() []*SubscriptionQuotaInfo
- func (x *TransactionResponse) GetTotalCost() *Cost
- func (x *TransactionResponse) GetVer() string
- func (*TransactionResponse) ProtoMessage()
- func (x *TransactionResponse) ProtoReflect() protoreflect.Message
- func (x *TransactionResponse) Reset()
- func (x *TransactionResponse) String() string
- type TransactionResultItem
- func (*TransactionResultItem) Descriptor() ([]byte, []int)deprecated
- func (x *TransactionResultItem) GetBillingId() string
- func (x *TransactionResultItem) GetCost() *Cost
- func (x *TransactionResultItem) GetDeliveryMethod() DeliveryMethod
- func (x *TransactionResultItem) GetDenialReason() DenialReason
- func (x *TransactionResultItem) GetExpiresAt() *timestamppb.Timestamp
- func (x *TransactionResultItem) GetOfferId() string
- func (x *TransactionResultItem) GetReportingObligation() *ReportingObligation
- func (x *TransactionResultItem) GetResourceTitle() string
- func (x *TransactionResultItem) GetRestrictionMismatches() []RestrictionKind
- func (x *TransactionResultItem) GetRetrievalEndpoint() string
- func (x *TransactionResultItem) GetSubscriptionId() string
- func (x *TransactionResultItem) GetSubscriptionUnitValue() *Cost
- func (x *TransactionResultItem) GetTransactionId() string
- func (*TransactionResultItem) ProtoMessage()
- func (x *TransactionResultItem) ProtoReflect() protoreflect.Message
- func (x *TransactionResultItem) Reset()
- func (x *TransactionResultItem) String() string
- type Usage
- func (*Usage) Descriptor() ([]byte, []int)deprecated
- func (x *Usage) GetAttribution() []*AttributionDetail
- func (x *Usage) GetCitationIncluded() bool
- func (x *Usage) GetConsumedQuantity() int32
- func (x *Usage) GetConsumedUnit() string
- func (x *Usage) GetDisplayedToUser() bool
- func (x *Usage) GetFunction() []string
- func (x *Usage) GetSubfn() []string
- func (*Usage) ProtoMessage()
- func (x *Usage) ProtoReflect() protoreflect.Message
- func (x *Usage) Reset()
- func (x *Usage) String() string
- type UsageAsset
- func (*UsageAsset) Descriptor() ([]byte, []int)deprecated
- func (x *UsageAsset) GetPackageId() string
- func (x *UsageAsset) GetTitle() string
- func (x *UsageAsset) GetUri() string
- func (*UsageAsset) ProtoMessage()
- func (x *UsageAsset) ProtoReflect() protoreflect.Message
- func (x *UsageAsset) Reset()
- func (x *UsageAsset) String() string
- type UsageReport
- func (*UsageReport) Descriptor() ([]byte, []int)deprecated
- func (x *UsageReport) GetAssets() []*UsageAsset
- func (x *UsageReport) GetBillingId() string
- func (x *UsageReport) GetExchange() string
- func (x *UsageReport) GetExt() *structpb.Struct
- func (x *UsageReport) GetExtCritical() []string
- func (x *UsageReport) GetIdempotencyKey() string
- func (x *UsageReport) GetTimestamp() *timestamppb.Timestamp
- func (x *UsageReport) GetTransactionId() string
- func (x *UsageReport) GetUsage() *Usage
- func (x *UsageReport) GetVer() string
- func (*UsageReport) ProtoMessage()
- func (x *UsageReport) ProtoReflect() protoreflect.Message
- func (x *UsageReport) Reset()
- func (x *UsageReport) String() string
- type UsageReportRejection
- func (*UsageReportRejection) Descriptor() ([]byte, []int)deprecated
- func (x *UsageReportRejection) GetReason() UsageReportRejectionReason
- func (*UsageReportRejection) ProtoMessage()
- func (x *UsageReportRejection) ProtoReflect() protoreflect.Message
- func (x *UsageReportRejection) Reset()
- func (x *UsageReportRejection) String() string
- type UsageReportRejectionReason
- func (UsageReportRejectionReason) Descriptor() protoreflect.EnumDescriptor
- func (x UsageReportRejectionReason) Enum() *UsageReportRejectionReason
- func (UsageReportRejectionReason) EnumDescriptor() ([]byte, []int)deprecated
- func (x UsageReportRejectionReason) Number() protoreflect.EnumNumber
- func (x UsageReportRejectionReason) String() string
- func (UsageReportRejectionReason) Type() protoreflect.EnumType
- type UsageReportResponse
- func (*UsageReportResponse) Descriptor() ([]byte, []int)deprecated
- func (x *UsageReportResponse) GetExt() *structpb.Struct
- func (x *UsageReportResponse) GetExtCritical() []string
- func (x *UsageReportResponse) GetReportId() string
- func (x *UsageReportResponse) GetVer() string
- func (*UsageReportResponse) ProtoMessage()
- func (x *UsageReportResponse) ProtoReflect() protoreflect.Message
- func (x *UsageReportResponse) Reset()
- func (x *UsageReportResponse) String() string
- type WBAFile
- type WellKnownManifest
- func (*WellKnownManifest) Descriptor() ([]byte, []int)deprecated
- func (x *WellKnownManifest) GetAcceptedVerifiers() []string
- func (x *WellKnownManifest) GetAccountRegistration() *AccountRegistration
- func (x *WellKnownManifest) GetBaseCurrency() string
- func (x *WellKnownManifest) GetCatalogContributors() []*CatalogContributor
- func (x *WellKnownManifest) GetCatalogEndpoint() string
- func (x *WellKnownManifest) GetContact() string
- func (x *WellKnownManifest) GetDeliveryMethodsSupported() []DeliveryMethod
- func (x *WellKnownManifest) GetDomain() string
- func (x *WellKnownManifest) GetEndpoint() string
- func (x *WellKnownManifest) GetExchanges() []*AuthorizedExchange
- func (x *WellKnownManifest) GetExt() *structpb.Struct
- func (x *WellKnownManifest) GetExtCritical() []string
- func (x *WellKnownManifest) GetGnapGrantEndpoint() string
- func (x *WellKnownManifest) GetHashMethodsSupported() []string
- func (x *WellKnownManifest) GetHealthEndpoint() string
- func (x *WellKnownManifest) GetMaxIntermediaryHops() int32
- func (x *WellKnownManifest) GetName() string
- func (x *WellKnownManifest) GetOidcIssuer() string
- func (x *WellKnownManifest) GetOperator() string
- func (x *WellKnownManifest) GetOperatorDomain() string
- func (x *WellKnownManifest) GetPricingModelsSupported() []PricingModel
- func (x *WellKnownManifest) GetPrivacyUri() string
- func (x *WellKnownManifest) GetProtocolVersionsSupported() []string
- func (x *WellKnownManifest) GetRole() Role
- func (x *WellKnownManifest) GetSupportedAuthMethods() []AuthMethod
- func (x *WellKnownManifest) GetSupportedProfiles() []string
- func (x *WellKnownManifest) GetTermsDigest() string
- func (x *WellKnownManifest) GetTermsUri() string
- func (x *WellKnownManifest) GetVer() string
- func (*WellKnownManifest) ProtoMessage()
- func (x *WellKnownManifest) ProtoReflect() protoreflect.Message
- func (x *WellKnownManifest) Reset()
- func (x *WellKnownManifest) String() string
Constants ¶
This section is empty.
Variables ¶
var ( DiscoveryMethod_name = map[int32]string{ 0: "DISCOVERY_METHOD_UNSPECIFIED", 1: "DISCOVERY_METHOD_EXCHANGE", 2: "DISCOVERY_METHOD_SEARCH", 3: "DISCOVERY_METHOD_RECOMMENDATION", 4: "DISCOVERY_METHOD_SYNDICATION", } DiscoveryMethod_value = map[string]int32{ "DISCOVERY_METHOD_UNSPECIFIED": 0, "DISCOVERY_METHOD_EXCHANGE": 1, "DISCOVERY_METHOD_SEARCH": 2, "DISCOVERY_METHOD_RECOMMENDATION": 3, "DISCOVERY_METHOD_SYNDICATION": 4, } )
Enum value maps for DiscoveryMethod.
var ( OfferAbsenceReason_name = map[int32]string{ 0: "OFFER_ABSENCE_REASON_UNSPECIFIED", 1: "OFFER_ABSENCE_REASON_NOT_IN_CATALOG", 2: "OFFER_ABSENCE_REASON_CONTENT_BLOCKED", 3: "OFFER_ABSENCE_REASON_RESTRICTION_FILTERED", 4: "OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE", 5: "OFFER_ABSENCE_REASON_NOT_AUTHORIZED", 6: "OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT", 7: "OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION", 8: "OFFER_ABSENCE_REASON_BUDGET_EXCEEDED", } OfferAbsenceReason_value = map[string]int32{ "OFFER_ABSENCE_REASON_UNSPECIFIED": 0, "OFFER_ABSENCE_REASON_NOT_IN_CATALOG": 1, "OFFER_ABSENCE_REASON_CONTENT_BLOCKED": 2, "OFFER_ABSENCE_REASON_RESTRICTION_FILTERED": 3, "OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE": 4, "OFFER_ABSENCE_REASON_NOT_AUTHORIZED": 5, "OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT": 6, "OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION": 7, "OFFER_ABSENCE_REASON_BUDGET_EXCEEDED": 8, } )
Enum value maps for OfferAbsenceReason.
var ( TermSemantics_name = map[int32]string{ 0: "TERM_SEMANTICS_UNSPECIFIED", 1: "TERM_SEMANTICS_ENUMERATED", 2: "TERM_SEMANTICS_REFERENCE_ONLY", } TermSemantics_value = map[string]int32{ "TERM_SEMANTICS_UNSPECIFIED": 0, "TERM_SEMANTICS_ENUMERATED": 1, "TERM_SEMANTICS_REFERENCE_ONLY": 2, } )
Enum value maps for TermSemantics.
var ( RestrictionKind_name = map[int32]string{ 0: "RESTRICTION_KIND_UNSPECIFIED", 1: "RESTRICTION_KIND_FUNCTION", 2: "RESTRICTION_KIND_GEOGRAPHY", 3: "RESTRICTION_KIND_USER_TYPE", 4: "RESTRICTION_KIND_OTHER", } RestrictionKind_value = map[string]int32{ "RESTRICTION_KIND_UNSPECIFIED": 0, "RESTRICTION_KIND_FUNCTION": 1, "RESTRICTION_KIND_GEOGRAPHY": 2, "RESTRICTION_KIND_USER_TYPE": 3, "RESTRICTION_KIND_OTHER": 4, } )
Enum value maps for RestrictionKind.
var ( QuotaWindow_name = map[int32]string{ 0: "QUOTA_WINDOW_UNSPECIFIED", 1: "QUOTA_WINDOW_HOURLY", 2: "QUOTA_WINDOW_DAILY", 3: "QUOTA_WINDOW_MONTHLY", 4: "QUOTA_WINDOW_TOTAL", } QuotaWindow_value = map[string]int32{ "QUOTA_WINDOW_UNSPECIFIED": 0, "QUOTA_WINDOW_HOURLY": 1, "QUOTA_WINDOW_DAILY": 2, "QUOTA_WINDOW_MONTHLY": 3, "QUOTA_WINDOW_TOTAL": 4, } )
Enum value maps for QuotaWindow.
var ( ObligationKind_name = map[int32]string{ 0: "OBLIGATION_KIND_UNSPECIFIED", 1: "OBLIGATION_KIND_ATTRIBUTION", 2: "OBLIGATION_KIND_CONTRIBUTION", 3: "OBLIGATION_KIND_SHARE_ALIKE", 4: "OBLIGATION_KIND_NETWORK_COPYLEFT", 5: "OBLIGATION_KIND_NOTICE", 6: "OBLIGATION_KIND_OTHER", } ObligationKind_value = map[string]int32{ "OBLIGATION_KIND_UNSPECIFIED": 0, "OBLIGATION_KIND_ATTRIBUTION": 1, "OBLIGATION_KIND_CONTRIBUTION": 2, "OBLIGATION_KIND_SHARE_ALIKE": 3, "OBLIGATION_KIND_NETWORK_COPYLEFT": 4, "OBLIGATION_KIND_NOTICE": 5, "OBLIGATION_KIND_OTHER": 6, } )
Enum value maps for ObligationKind.
var ( ObligationTrigger_name = map[int32]string{ 0: "OBLIGATION_TRIGGER_UNSPECIFIED", 1: "OBLIGATION_TRIGGER_ON_USE", 2: "OBLIGATION_TRIGGER_ON_DISTRIBUTION", 3: "OBLIGATION_TRIGGER_ON_NETWORK_SERVICE", 4: "OBLIGATION_TRIGGER_ON_DERIVATIVE", } ObligationTrigger_value = map[string]int32{ "OBLIGATION_TRIGGER_UNSPECIFIED": 0, "OBLIGATION_TRIGGER_ON_USE": 1, "OBLIGATION_TRIGGER_ON_DISTRIBUTION": 2, "OBLIGATION_TRIGGER_ON_NETWORK_SERVICE": 3, "OBLIGATION_TRIGGER_ON_DERIVATIVE": 4, } )
Enum value maps for ObligationTrigger.
var ( PricingModel_name = map[int32]string{ 0: "PRICING_MODEL_UNSPECIFIED", 1: "PRICING_MODEL_FREE", 2: "PRICING_MODEL_PER_UNIT", 3: "PRICING_MODEL_FLAT", } PricingModel_value = map[string]int32{ "PRICING_MODEL_UNSPECIFIED": 0, "PRICING_MODEL_FREE": 1, "PRICING_MODEL_PER_UNIT": 2, "PRICING_MODEL_FLAT": 3, } )
Enum value maps for PricingModel.
var ( PricingMetering_name = map[int32]string{ 0: "PRICING_METERING_ONLINE", 1: "PRICING_METERING_NONE", 2: "PRICING_METERING_OFFLINE_SELF_REPORTED", } PricingMetering_value = map[string]int32{ "PRICING_METERING_ONLINE": 0, "PRICING_METERING_NONE": 1, "PRICING_METERING_OFFLINE_SELF_REPORTED": 2, } )
Enum value maps for PricingMetering.
var ( DeliveryMethod_name = map[int32]string{ 0: "DELIVERY_METHOD_UNSPECIFIED", 1: "DELIVERY_METHOD_DIRECT", 2: "DELIVERY_METHOD_INSTRUCTIONS", 3: "DELIVERY_METHOD_STREAMING", } DeliveryMethod_value = map[string]int32{ "DELIVERY_METHOD_UNSPECIFIED": 0, "DELIVERY_METHOD_DIRECT": 1, "DELIVERY_METHOD_INSTRUCTIONS": 2, "DELIVERY_METHOD_STREAMING": 3, } )
Enum value maps for DeliveryMethod.
var ( RequesterType_name = map[int32]string{ 0: "REQUESTER_TYPE_UNSPECIFIED", 1: "REQUESTER_TYPE_AGENT", 2: "REQUESTER_TYPE_HUMAN_TOOL", 3: "REQUESTER_TYPE_SERVICE", 4: "REQUESTER_TYPE_DELEGATED", 5: "REQUESTER_TYPE_RESEARCH", } RequesterType_value = map[string]int32{ "REQUESTER_TYPE_UNSPECIFIED": 0, "REQUESTER_TYPE_AGENT": 1, "REQUESTER_TYPE_HUMAN_TOOL": 2, "REQUESTER_TYPE_SERVICE": 3, "REQUESTER_TYPE_DELEGATED": 4, "REQUESTER_TYPE_RESEARCH": 5, } )
Enum value maps for RequesterType.
var ( C2PAStatus_name = map[int32]string{ 0: "C2PA_STATUS_UNSPECIFIED", 1: "C2PA_STATUS_TRUSTED", 2: "C2PA_STATUS_VALID", 3: "C2PA_STATUS_INVALID", 4: "C2PA_STATUS_ABSENT", } C2PAStatus_value = map[string]int32{ "C2PA_STATUS_UNSPECIFIED": 0, "C2PA_STATUS_TRUSTED": 1, "C2PA_STATUS_VALID": 2, "C2PA_STATUS_INVALID": 3, "C2PA_STATUS_ABSENT": 4, } )
Enum value maps for C2PAStatus.
var ( ResourceMutability_name = map[int32]string{ 0: "RESOURCE_MUTABILITY_UNSPECIFIED", 1: "RESOURCE_MUTABILITY_STATIC", 2: "RESOURCE_MUTABILITY_DYNAMIC", 3: "RESOURCE_MUTABILITY_LIVE", } ResourceMutability_value = map[string]int32{ "RESOURCE_MUTABILITY_UNSPECIFIED": 0, "RESOURCE_MUTABILITY_STATIC": 1, "RESOURCE_MUTABILITY_DYNAMIC": 2, "RESOURCE_MUTABILITY_LIVE": 3, } )
Enum value maps for ResourceMutability.
var ( DenialReason_name = map[int32]string{ 0: "DENIAL_REASON_UNSPECIFIED", 1: "DENIAL_REASON_ACCOUNT_INACTIVE", 2: "DENIAL_REASON_INSUFFICIENT_BALANCE", 3: "DENIAL_REASON_RATE_LIMITED", 4: "DENIAL_REASON_CONTENT_UNAVAILABLE", 5: "DENIAL_REASON_RESTRICTION_NOT_SATISFIED", 6: "DENIAL_REASON_REPORTING_OVERDUE", 7: "DENIAL_REASON_OFFER_EXPIRED", 8: "DENIAL_REASON_SIGNATURE_INVALID", 9: "DENIAL_REASON_QUOTA_EXCEEDED", 10: "DENIAL_REASON_DELEGATION_INVALID", 11: "DENIAL_REASON_SCOPE_INSUFFICIENT", 12: "DENIAL_REASON_ENTITLEMENT_MISSING", 13: "DENIAL_REASON_ENTITLEMENT_MALFORMED", 14: "DENIAL_REASON_ENTITLEMENT_EXPIRED", 15: "DENIAL_REASON_ENTITLEMENT_WRONG_BUYER", 16: "DENIAL_REASON_SUBSCRIPTION_LAPSED", 17: "DENIAL_REASON_ENTITLEMENT_NOT_GRANTED", 18: "DENIAL_REASON_ACCOUNT_NOT_REGISTERED", } DenialReason_value = map[string]int32{ "DENIAL_REASON_UNSPECIFIED": 0, "DENIAL_REASON_ACCOUNT_INACTIVE": 1, "DENIAL_REASON_INSUFFICIENT_BALANCE": 2, "DENIAL_REASON_RATE_LIMITED": 3, "DENIAL_REASON_CONTENT_UNAVAILABLE": 4, "DENIAL_REASON_RESTRICTION_NOT_SATISFIED": 5, "DENIAL_REASON_REPORTING_OVERDUE": 6, "DENIAL_REASON_OFFER_EXPIRED": 7, "DENIAL_REASON_SIGNATURE_INVALID": 8, "DENIAL_REASON_QUOTA_EXCEEDED": 9, "DENIAL_REASON_DELEGATION_INVALID": 10, "DENIAL_REASON_SCOPE_INSUFFICIENT": 11, "DENIAL_REASON_ENTITLEMENT_MISSING": 12, "DENIAL_REASON_ENTITLEMENT_MALFORMED": 13, "DENIAL_REASON_ENTITLEMENT_EXPIRED": 14, "DENIAL_REASON_ENTITLEMENT_WRONG_BUYER": 15, "DENIAL_REASON_SUBSCRIPTION_LAPSED": 16, "DENIAL_REASON_ENTITLEMENT_NOT_GRANTED": 17, "DENIAL_REASON_ACCOUNT_NOT_REGISTERED": 18, } )
Enum value maps for DenialReason.
var ( IngestionSource_name = map[int32]string{ 0: "INGESTION_SOURCE_UNSPECIFIED", 1: "INGESTION_SOURCE_FORA_SITEMAP", 2: "INGESTION_SOURCE_RSL", 3: "INGESTION_SOURCE_SITEMAP", 4: "INGESTION_SOURCE_HTML_CRAWL", 5: "INGESTION_SOURCE_CMS_API", 6: "INGESTION_SOURCE_MANUAL", 7: "INGESTION_SOURCE_CATALOG_API", } IngestionSource_value = map[string]int32{ "INGESTION_SOURCE_UNSPECIFIED": 0, "INGESTION_SOURCE_FORA_SITEMAP": 1, "INGESTION_SOURCE_RSL": 2, "INGESTION_SOURCE_SITEMAP": 3, "INGESTION_SOURCE_HTML_CRAWL": 4, "INGESTION_SOURCE_CMS_API": 5, "INGESTION_SOURCE_MANUAL": 6, "INGESTION_SOURCE_CATALOG_API": 7, } )
Enum value maps for IngestionSource.
var ( CitationFormat_name = map[int32]string{ 0: "CITATION_FORMAT_LINK", 1: "CITATION_FORMAT_FOOTNOTE", 2: "CITATION_FORMAT_INLINE", } CitationFormat_value = map[string]int32{ "CITATION_FORMAT_LINK": 0, "CITATION_FORMAT_FOOTNOTE": 1, "CITATION_FORMAT_INLINE": 2, } )
Enum value maps for CitationFormat.
var ( Role_name = map[int32]string{ 0: "ROLE_UNSPECIFIED", 1: "ROLE_AGENT", 2: "ROLE_EXCHANGE", 3: "ROLE_BROKER", 4: "ROLE_PUBLISHER", } Role_value = map[string]int32{ "ROLE_UNSPECIFIED": 0, "ROLE_AGENT": 1, "ROLE_EXCHANGE": 2, "ROLE_BROKER": 3, "ROLE_PUBLISHER": 4, } )
Enum value maps for Role.
var ( ProviderRelationship_name = map[int32]string{ 0: "PROVIDER_RELATIONSHIP_UNSPECIFIED", 1: "PROVIDER_RELATIONSHIP_DIRECT", 2: "PROVIDER_RELATIONSHIP_RESELLER", } ProviderRelationship_value = map[string]int32{ "PROVIDER_RELATIONSHIP_UNSPECIFIED": 0, "PROVIDER_RELATIONSHIP_DIRECT": 1, "PROVIDER_RELATIONSHIP_RESELLER": 2, } )
Enum value maps for ProviderRelationship.
var ( AuthMethod_name = map[int32]string{ 0: "AUTH_METHOD_UNSPECIFIED", 1: "AUTH_METHOD_GNAP", 2: "AUTH_METHOD_OAUTH_DPOP", 3: "AUTH_METHOD_OAUTH_BEARER", 4: "AUTH_METHOD_OAUTH_MTLS", } AuthMethod_value = map[string]int32{ "AUTH_METHOD_UNSPECIFIED": 0, "AUTH_METHOD_GNAP": 1, "AUTH_METHOD_OAUTH_DPOP": 2, "AUTH_METHOD_OAUTH_BEARER": 3, "AUTH_METHOD_OAUTH_MTLS": 4, } )
Enum value maps for AuthMethod.
var ( DisputeReason_name = map[int32]string{ 0: "DISPUTE_REASON_UNSPECIFIED", 1: "DISPUTE_REASON_CONTENT_MISMATCH", 2: "DISPUTE_REASON_DELIVERY_FAILED", 3: "DISPUTE_REASON_WRONG_CONTENT", 4: "DISPUTE_REASON_EXPIRED_BEFORE_FETCH", 5: "DISPUTE_REASON_INCOMPLETE_CONTENT", } DisputeReason_value = map[string]int32{ "DISPUTE_REASON_UNSPECIFIED": 0, "DISPUTE_REASON_CONTENT_MISMATCH": 1, "DISPUTE_REASON_DELIVERY_FAILED": 2, "DISPUTE_REASON_WRONG_CONTENT": 3, "DISPUTE_REASON_EXPIRED_BEFORE_FETCH": 4, "DISPUTE_REASON_INCOMPLETE_CONTENT": 5, } )
Enum value maps for DisputeReason.
var ( DisputeStatus_name = map[int32]string{ 0: "DISPUTE_STATUS_UNSPECIFIED", 1: "DISPUTE_STATUS_FILED", 2: "DISPUTE_STATUS_AUTO_RESOLVED", 3: "DISPUTE_STATUS_EVIDENCE_NEEDED", 4: "DISPUTE_STATUS_UNDER_REVIEW", 5: "DISPUTE_STATUS_ESCALATED", 6: "DISPUTE_STATUS_RESOLVED", 7: "DISPUTE_STATUS_APPEALED", 8: "DISPUTE_STATUS_SETTLED", 9: "DISPUTE_STATUS_FINAL", } DisputeStatus_value = map[string]int32{ "DISPUTE_STATUS_UNSPECIFIED": 0, "DISPUTE_STATUS_FILED": 1, "DISPUTE_STATUS_AUTO_RESOLVED": 2, "DISPUTE_STATUS_EVIDENCE_NEEDED": 3, "DISPUTE_STATUS_UNDER_REVIEW": 4, "DISPUTE_STATUS_ESCALATED": 5, "DISPUTE_STATUS_RESOLVED": 6, "DISPUTE_STATUS_APPEALED": 7, "DISPUTE_STATUS_SETTLED": 8, "DISPUTE_STATUS_FINAL": 9, } )
Enum value maps for DisputeStatus.
var ( ResolutionType_name = map[int32]string{ 0: "RESOLUTION_TYPE_UNSPECIFIED", 1: "RESOLUTION_TYPE_CREDIT", 2: "RESOLUTION_TYPE_REDELIVERY", 3: "RESOLUTION_TYPE_REJECTED", 4: "RESOLUTION_TYPE_INVESTIGATION", } ResolutionType_value = map[string]int32{ "RESOLUTION_TYPE_UNSPECIFIED": 0, "RESOLUTION_TYPE_CREDIT": 1, "RESOLUTION_TYPE_REDELIVERY": 2, "RESOLUTION_TYPE_REJECTED": 3, "RESOLUTION_TYPE_INVESTIGATION": 4, } )
Enum value maps for ResolutionType.
var ( CatalogRejectionReason_name = map[int32]string{ 0: "CATALOG_REJECTION_REASON_UNSPECIFIED", 1: "CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR", 2: "CATALOG_REJECTION_REASON_TENANT_MISMATCH", 3: "CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED", 4: "CATALOG_REJECTION_REASON_SIGNATURE_INVALID", 5: "CATALOG_REJECTION_REASON_MALFORMED_ENTRY", 6: "CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN", 7: "CATALOG_REJECTION_REASON_QUOTA_EXCEEDED", 8: "CATALOG_REJECTION_REASON_TERMS_LIMIT_EXCEEDED", 9: "CATALOG_REJECTION_REASON_URI_UNAVAILABLE", } CatalogRejectionReason_value = map[string]int32{ "CATALOG_REJECTION_REASON_UNSPECIFIED": 0, "CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR": 1, "CATALOG_REJECTION_REASON_TENANT_MISMATCH": 2, "CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED": 3, "CATALOG_REJECTION_REASON_SIGNATURE_INVALID": 4, "CATALOG_REJECTION_REASON_MALFORMED_ENTRY": 5, "CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN": 6, "CATALOG_REJECTION_REASON_QUOTA_EXCEEDED": 7, "CATALOG_REJECTION_REASON_TERMS_LIMIT_EXCEEDED": 8, "CATALOG_REJECTION_REASON_URI_UNAVAILABLE": 9, } )
Enum value maps for CatalogRejectionReason.
var ( RegistrationFailureReason_name = map[int32]string{ 0: "REGISTRATION_FAILURE_REASON_UNSPECIFIED", 1: "REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED", 2: "REGISTRATION_FAILURE_REASON_INVALID_KEY", 3: "REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID", 4: "REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED", 5: "REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED", 6: "REGISTRATION_FAILURE_REASON_INVALID_REGISTRATION_DATA", 7: "REGISTRATION_FAILURE_REASON_TERMS_DIGEST_STALE", } RegistrationFailureReason_value = map[string]int32{ "REGISTRATION_FAILURE_REASON_UNSPECIFIED": 0, "REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED": 1, "REGISTRATION_FAILURE_REASON_INVALID_KEY": 2, "REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID": 3, "REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED": 4, "REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED": 5, "REGISTRATION_FAILURE_REASON_INVALID_REGISTRATION_DATA": 6, "REGISTRATION_FAILURE_REASON_TERMS_DIGEST_STALE": 7, } )
Enum value maps for RegistrationFailureReason.
var ( DisputeFailureReason_name = map[int32]string{ 0: "DISPUTE_FAILURE_REASON_UNSPECIFIED", 1: "DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND", 2: "DISPUTE_FAILURE_REASON_REPORT_NOT_FILED", 3: "DISPUTE_FAILURE_REASON_WINDOW_EXPIRED", 4: "DISPUTE_FAILURE_REASON_DUPLICATE", 5: "DISPUTE_FAILURE_REASON_INELIGIBLE", } DisputeFailureReason_value = map[string]int32{ "DISPUTE_FAILURE_REASON_UNSPECIFIED": 0, "DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND": 1, "DISPUTE_FAILURE_REASON_REPORT_NOT_FILED": 2, "DISPUTE_FAILURE_REASON_WINDOW_EXPIRED": 3, "DISPUTE_FAILURE_REASON_DUPLICATE": 4, "DISPUTE_FAILURE_REASON_INELIGIBLE": 5, } )
Enum value maps for DisputeFailureReason.
var ( DomainVerificationFailureReason_name = map[int32]string{ 0: "DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED", 1: "DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND", 2: "DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH", 3: "DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED", 4: "DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED", 5: "DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED", 6: "DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED", } DomainVerificationFailureReason_value = map[string]int32{ "DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED": 0, "DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND": 1, "DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH": 2, "DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED": 3, "DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED": 4, "DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED": 5, "DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED": 6, } )
Enum value maps for DomainVerificationFailureReason.
var ( RetrievalAuthFailureReason_name = map[int32]string{ 0: "RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED", 1: "RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED", 2: "RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING", 3: "RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING", 4: "RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH", 5: "RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING", 6: "RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING", 7: "RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH", 8: "RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH", 9: "RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING", 10: "RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING", 11: "RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED", 12: "RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID", } RetrievalAuthFailureReason_value = map[string]int32{ "RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED": 0, "RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED": 1, "RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING": 2, "RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING": 3, "RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH": 4, "RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING": 5, "RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING": 6, "RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH": 7, "RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH": 8, "RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING": 9, "RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING": 10, "RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED": 11, "RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID": 12, } )
Enum value maps for RetrievalAuthFailureReason.
var ( UsageReportRejectionReason_name = map[int32]string{ 0: "USAGE_REPORT_REJECTION_REASON_UNSPECIFIED", 1: "USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND", 2: "USAGE_REPORT_REJECTION_REASON_DUPLICATE", 3: "USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED", 4: "USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS", 5: "USAGE_REPORT_REJECTION_REASON_MALFORMED", } UsageReportRejectionReason_value = map[string]int32{ "USAGE_REPORT_REJECTION_REASON_UNSPECIFIED": 0, "USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND": 1, "USAGE_REPORT_REJECTION_REASON_DUPLICATE": 2, "USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED": 3, "USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS": 4, "USAGE_REPORT_REJECTION_REASON_MALFORMED": 5, } )
Enum value maps for UsageReportRejectionReason.
var ( // vocab carries the registered bare tokens for an open vocabulary axis, // authored directly on the field that uses it as a repeated custom option. // Number 50001 sits in the internal extension range (50000–99999). Field // axes (Pricing.unit, Quota.metric) carry their tokens here; axes selected // by an enum value (function, geography, user-type, selected by // RestrictionKind) carry their tokens on the enum-value extension below. // // repeated string vocab = 50001; E_Vocab = &file_fora_v1_vocab_proto_extTypes[0] // vocab_package names the generated SDK package/module for this field's axis // (e.g. "pricingunits", "quotametrics"). It lives on the field — alongside the // tokens — so the axis→package mapping is part of the single proto source and // protoc-gen-foravocab needs no hand-maintained mapping table. Required on any // field that carries (fora.v1.vocab). // // optional string vocab_package = 50003; E_VocabPackage = &file_fora_v1_vocab_proto_extTypes[1] )
Extension fields to descriptorpb.FieldOptions.
var ( // vocab_enum is the enum-value-scoped twin of (fora.v1.vocab) above. Axes // whose token list is selected by an enum value — the function / geography / // user-type tokens carried in Restriction.permitted/prohibited and selected // by Restriction.kind — author their tokens directly on the corresponding // RestrictionKind enum value. Same registry mechanism: protoc-gen-foravocab // reads these entries structurally off the enum-value descriptor and emits // the per-axis constants + IsRegistered. This is a separate extension because // an extend block targets one options message — 50001 cannot also extend // EnumValueOptions; 50002 is the next slot in the same internal block. // // repeated string vocab_enum = 50002; E_VocabEnum = &file_fora_v1_vocab_proto_extTypes[2] // vocab_enum_package is the enum-value twin of (fora.v1.vocab_package): it // names the generated package/module for an axis selected by an enum value // (e.g. "functiontokens"). Required on any enum value that carries // (fora.v1.vocab_enum). // // optional string vocab_enum_package = 50004; E_VocabEnumPackage = &file_fora_v1_vocab_proto_extTypes[3] // vocab_enum_alias carries the accepted alias spellings of an axis, one // "alias=canonical" entry each, authored beside the tokens they resolve to. // An alias is a spelling another vocabulary uses for a registered token // (AIPREF's "train-ai" for "ai-train", the industry's "generative-ai" for // "ai-input"); a consumer canonicalises it to the registered token at ingest // and never stores or emits it. The plugin refuses an alias that is itself // a token, a canonical that is not one, a duplicate, and a spelling that is // not already trimmed and lowercase — the SDK folds a token before it looks // it up, so any other spelling could never match. Enum-value axes only; the // field-axis twin takes 50006 when an axis needs one. // // repeated string vocab_enum_alias = 50005; E_VocabEnumAlias = &file_fora_v1_vocab_proto_extTypes[4] )
Extension fields to descriptorpb.EnumValueOptions.
var File_fora_v1_fora_proto protoreflect.FileDescriptor
var File_fora_v1_vocab_proto protoreflect.FileDescriptor
Functions ¶
This section is empty.
Types ¶
type AcceptableRestriction ¶
type AcceptableRestriction struct {
// Which axis (same enum as Restriction.kind): FUNCTION / GEOGRAPHY /
// USER_TYPE / OTHER.
Axis RestrictionKind `protobuf:"varint,1,opt,name=axis,proto3,enum=fora.v1.RestrictionKind" json:"axis,omitempty"`
// The values the query operates within on this axis — same token vocabulary
// as the terms (e.g. FUNCTION ["ai-train"], GEOGRAPHY ["US", "EU"]).
Values []string `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"`
// contains filtered or unexported fields
}
AcceptableRestriction — the limits a query operates within on one restriction axis, expressed in the same RestrictionKind vocabulary that terms use. The Exchange/Broker MAY pre-select offers whose term restrictions fall within these as a convenience (see Restriction); it is NOT enforcement — the agent self-selects and bears compliance.
func (*AcceptableRestriction) Descriptor
deprecated
func (*AcceptableRestriction) Descriptor() ([]byte, []int)
Deprecated: Use AcceptableRestriction.ProtoReflect.Descriptor instead.
func (*AcceptableRestriction) GetAxis ¶
func (x *AcceptableRestriction) GetAxis() RestrictionKind
func (*AcceptableRestriction) GetValues ¶
func (x *AcceptableRestriction) GetValues() []string
func (*AcceptableRestriction) ProtoMessage ¶
func (*AcceptableRestriction) ProtoMessage()
func (*AcceptableRestriction) ProtoReflect ¶
func (x *AcceptableRestriction) ProtoReflect() protoreflect.Message
func (*AcceptableRestriction) Reset ¶
func (x *AcceptableRestriction) Reset()
func (*AcceptableRestriction) String ¶
func (x *AcceptableRestriction) String() string
type AccountRegistration ¶
type AccountRegistration struct {
// JSON Schema (draft 2020-12) describing the RegisterRequest.registration_data
// object this Exchange expects. This field is the single home of the
// enforce/pass-through contract, and publishing it IS the enforcement switch.
// Present: this Exchange validates registration_data against the schema and
// refuses a non-conforming payload with
// REGISTRATION_FAILURE_REASON_INVALID_REGISTRATION_DATA, naming the offending
// members in RegistrationFailure.field_errors. Absent: registration_data is
// passed through to the system of record uninspected, so an Exchange that
// publishes no schema needs no change to stay conformant.
//
// The gate above runs on ACCOUNT CREATION ONLY. A repeat registration, for an
// agent that already holds an account, is answered from the stored record and
// runs no schema check at all — it discards registration_data rather than
// validating it. That exception is stated here rather than left to the section
// above, because this field calls itself the single home of the contract and a
// reader who comes here for the whole rule would otherwise leave with the wrong
// one. See "Repeat registration" in the Agent Account Registration section for
// why, and for the other gates it applies to.
//
// Absent means the field carries no bytes, or only JSON whitespace — space, tab,
// carriage return and line feed, RFC 8259's four and no others. Nothing else
// counts, and the distinction is load-bearing rather than pedantic: this is the
// enforcement switch, so a byte sequence read as absent is one that turns
// validation OFF. A consumer that asked its own language what "blank" means got
// three different answers to the same document — U+00A0 and U+3000 are whitespace
// to some runtimes and not others, and a decoder that strips a byte order mark
// makes a mark followed by a space look like nothing at all. A document that is
// not empty and not JSON is malformed, which is a refusal; it is never silence.
//
// Safety rules, because a consumer reads this schema out of a THIRD PARTY's
// manifest and validates against it before any signature has been checked. A
// publisher MUST satisfy every rule below and a consumer MUST refuse a schema
// that does not. The bounds are stated here as numbers rather than left to each
// implementation on purpose: a schema is validated at both ends of the same
// registration, and a limit chosen privately by one side refuses payloads the
// other accepts.
//
// Self-contained. Every $ref, $dynamicRef and $recursiveRef MUST be a
// same-document reference — it begins with "#". A consumer MUST NOT resolve a
// reference that leaves the document: doing so turns every reader into an
// SSRF vector aimed at a URL the schema's author chose.
//
// One dialect. $schema, wherever it appears in the document, MUST name
// https://json-schema.org/draft/2020-12/schema (an empty fragment on the end
// is the same value). A document declaring none is read as that dialect. An
// older draft is refused rather than validated under semantics its author did
// not intend.
//
// Data is not schema. `const`, `enum`, `default` and `examples` hold arbitrary
// JSON VALUES, and their contents are never read as keywords: a `const` whose
// value happens to carry a "$ref" or "$schema" member states a value a payload
// may equal, not a reference to resolve or a dialect to honour. Both rules
// above therefore stop at those four keywords, and so does the pattern
// alphabet. Their nesting still counts against the depth cap. Likewise the
// child keys of `properties`, `patternProperties`, `$defs`, `definitions` and
// `dependentSchemas` are NAMES rather than keywords, so a property called
// "$ref" is a property.
//
// Bounded size: 16KB, measured as the UTF-8 bytes of this member AS SERVED in
// fora.json.
//
// One encoding. The bytes MUST be well-formed UTF-8 (RFC 8259 requires it for
// interchange) and MUST NOT begin with a byte order mark. RFC 8259 forbids
// ADDING a mark and lets a parser ignore one, so both policies conform and the
// choice is made here rather than left to each implementation: parsers differ,
// and one that strips a mark validates a different document — and counts three
// bytes against the size cap that the schema does not contain. A consumer MUST
// NOT repair ill-formed bytes either; substituting U+FFFD silently enforces a
// schema nobody published. A mark is in any case only valid at the start of a
// JSON text, and this is a member inside one.
//
// Bounded depth: 32 nested JSON containers, counting the schema itself as the
// first.
//
// Bounded WORK: 10000 evaluations, counted statically over the SCHEMA — each
// anyOf/oneOf/allOf branch and prefixItems entry costs its own subschema, and a
// $ref costs its target. It is the cost of applying the schema at ONE location
// in a payload, not of a whole payload: a subschema under `items` is counted
// once here and evaluated once per element at runtime. The size and depth caps
// do not bound it and are not a substitute for it: branches multiply along a
// reference chain, so a 1.6KB schema five containers deep can cost tens of
// millions of evaluations and tens of seconds against a two-member payload. A
// definition nobody references costs nothing, so a document may carry a library
// of them.
//
// Bounded reference chains: 100 hops, counted as the longest path of $ref hops
// rather than as the number of references the document contains. This is a
// THIRD axis, and a flat chain of definitions shows why it has to be: each one
// referring to the next is three JSON containers deep however long it is, so
// the depth cap never sees it, and it costs one evaluation per link, so the
// work cap does not either. What it does reach is the recursion a validator
// performs while resolving the chain — a chain of a few hundred exhausted one
// implementation's stack outright, on a document every other rule had passed.
// A schema describing a business entity chains one or two references.
//
// No reference cycles. A $ref chain MUST NOT return to a schema already on it.
// The construct is legal JSON Schema and is how a recursive structure is
// written, but its evaluation cost has no static bound and it is what makes a
// validator recurse until it aborts. Registration data describes a business
// entity, which is not a recursive shape.
//
// A portable `pattern` alphabet, stated as what a pattern MAY contain rather
// than as what it may not. A group MUST open with "(" or "(?:" and nothing
// else; only the escapes \$, \(, \), \*, \+, \., \/, \?, \D, \W, \[, \\, \],
// \^, \d, \f, \n, \r, \t, \v, \w, \{, \| and \} MAY appear, together with \xHH
// carrying exactly two hexadecimal digits (spelled out rather than ranged, so a
// conformance guard can check the set character by character); a counted repeat
// MUST NOT exceed 1000 and MUST state its first bound, so "a{2,}" is admitted
// and "a{,5}" is not; a "}" outside a bracket expression MUST close a counted
// repeat, so a literal brace is written "\}"; "[:" MUST NOT appear inside a
// bracket expression; a bracket expression MUST close and MUST NOT open with
// "]"; and a range endpoint MUST NOT be one of the shorthand classes ("[\w-x]").
//
// The two brace rules are there for the same reason as the bracket ones, and
// were found the same way. "a{,5}" is five literal characters to RE2 and a
// repeat of zero to five to Python, so both engines compile it and then
// disagree about which payloads match — the silent kind. An unmatched "}" is a
// literal to RE2 and to Python and a syntax error to ECMA-262 under the `u`
// flag, which is the loud kind, and exactly what the unmatched "]" rule above
// already refuses.
//
// The direction of that rule is the rule. Draft 2020-12 patterns are ECMA-262,
// but the engines implementations run do not agree on it, and the set they
// disagree about has no end: it grows with every dialect and every library
// version, so a list of forbidden escapes needs a new entry each time somebody
// finds one, and until then the gap is open. The portable set is small and
// closed, and an author who wants a construct outside it writes the characters
// out instead.
//
// Some of the disagreement is loud — RE2 refuses the lookaround, atomic groups
// and backreferences ECMA allows, so a schema using them compiles for one
// implementation and fails for another. The rest is SILENT, and is why this is
// a MUST rather than a SHOULD: inline flags, Unicode property classes, text
// anchors and POSIX bracket names are accepted by one engine and either refused
// or read DIFFERENTLY by the next, so two conformant validators both compile
// the pattern and then disagree about which payloads match it, with nothing
// logged. `\s` and `\B` are the plainest examples — RE2 reads `\s` as
// [\t\n\f\r ], Python adds the vertical tab, and ECMA-262 adds that plus every
// Unicode space separator; `\B` finds no word boundary in the empty string for
// RE2 and ECMA-262 and finds one for Python. An explicit character class says
// what was meant and means it everywhere.
//
// Where a pattern may appear. `pattern` states its regex as a value and
// `patternProperties` states its regexes as KEYS; both are patterns and both
// are held to the alphabet above. They are the only two keywords in the dialect
// that carry one — `propertyNames` reaches the rule through the subschema it
// applies.
//
// No nested quantifiers. A quantified group MUST NOT have a body that can
// itself repeat or branch: `(a+)+`, `(a|a)*` and `([a-z]+)*` are refused, while
// `(?:ab)+` is admitted. This is the denial-of-service half of the pattern
// rule, and it is deliberately SEPARATE from the alphabet above, because
// excluding lookaround and backreferences does not cover it — catastrophic
// backtracking needs neither. It has to be a publishing rule rather than a
// runtime bound: a regex spin holds its interpreter, so a consumer cannot
// reliably interrupt one it has already started.
//
// Annotations stay annotations. A consumer MUST NOT assert format,
// contentEncoding or contentMediaType. Libraries default differently on each,
// and a schema whose verdict depends on which library read it has no single
// answer.
//
// The value MUST be a JSON object. Draft 2020-12 also admits a bare boolean as a
// schema, but this field is a Struct and cannot carry one.
//
// A consumer that finds a schema breaking any of these MUST refuse it, and MUST
// then SKIP its local pre-check rather than repair or truncate the schema —
// leaving the Exchange's own enforcement the deciding check, exactly as when no
// schema is published. Refusing locally and declining to send would turn a rule
// about reading a third party's document into a denial of service against the
// consumer's own user. That is the CLIENT side. An Exchange that cannot compile
// its OWN configured schema is looking at a misconfiguration of its deployment,
// and MUST NOT advertise a schema it is not itself enforcing.
DataSchema *structpb.Struct `protobuf:"bytes,1,opt,name=data_schema,json=dataSchema,proto3" json:"data_schema,omitempty"`
// contains filtered or unexported fields
}
AccountRegistration — how to open an account at this Exchange. Published as an optional block on WellKnownManifest; an Exchange that omits the whole block keeps today's behaviour, accepting RegisterRequest.registration_data uninspected. The block exists rather than a flat field because registration has more than one publishable facet: `data_schema` describes the API mode below, and field 2 is deliberately left free for a future web mode — a URL to a registration page on the Exchange's own site, where a human completes the steps an API call cannot carry (explicit terms confirmation, identity checks, manual review). Flat siblings on a manifest this size would give a reader no signal that they are one subject. Precedence between the modes is fixed now, before both can be published: an Exchange that publishes `data_schema` MUST accept registration through the API, and a registration URL is an additional option an agent MAY offer its user instead — never a replacement for the API path. An Exchange that wants web-only registration publishes the URL and no schema. Note that terms versioning is NOT in this block: WellKnownManifest. terms_digest sits at the top level so an Exchange with pass-through registration can still pin which terms document it is serving.
func (*AccountRegistration) Descriptor
deprecated
func (*AccountRegistration) Descriptor() ([]byte, []int)
Deprecated: Use AccountRegistration.ProtoReflect.Descriptor instead.
func (*AccountRegistration) GetDataSchema ¶
func (x *AccountRegistration) GetDataSchema() *structpb.Struct
func (*AccountRegistration) ProtoMessage ¶
func (*AccountRegistration) ProtoMessage()
func (*AccountRegistration) ProtoReflect ¶
func (x *AccountRegistration) ProtoReflect() protoreflect.Message
func (*AccountRegistration) Reset ¶
func (x *AccountRegistration) Reset()
func (*AccountRegistration) String ¶
func (x *AccountRegistration) String() string
type AgentAcceptance ¶
type AgentAcceptance struct {
// Hex-encoded detached Ed25519 signature over the canonical AgentAcceptancePayload
// bytes (see the canonical-signing definition on Offer.signature).
Signature string `protobuf:"bytes,1,opt,name=signature,proto3" json:"signature,omitempty"`
// Signature algorithm; "EdDSA" for Ed25519.
SignatureAlgorithm string `protobuf:"bytes,2,opt,name=signature_algorithm,json=signatureAlgorithm,proto3" json:"signature_algorithm,omitempty"`
// contains filtered or unexported fields
}
AgentAcceptance — the agent's DETACHED acceptance signature over an accepted Offer. Distinct from the transport (RFC 9421) request signature: it is topology-independent and content-bound, so it stays valid no matter how many brokers relay the request, and binds the agent to THIS specific offer + requester + transaction. It travels in the execute body alongside the reflected Offer; the Exchange verifies it and binds the delivery URL to the agent's key (RFC 7638 thumbprint of the acceptance key).
`signature` is a hex-encoded detached Ed25519 signature (NOT a JWS) over the CANONICAL SIGNING form of `AgentAcceptancePayload` — RFC 8785 JCS over canonical proto-JSON. That form, including the pinned proto-JSON option set, is defined once on `Offer.signature` and is the single normative definition; there is no second recipe. `AgentAcceptancePayload` carries no signature fields, so the clear-then-render step of that definition reduces here to JCS(protojson(AgentAcceptancePayload)). Same hex/Ed25519 convention as `Offer.signature`; `signature_algorithm` is "EdDSA".
func (*AgentAcceptance) Descriptor
deprecated
func (*AgentAcceptance) Descriptor() ([]byte, []int)
Deprecated: Use AgentAcceptance.ProtoReflect.Descriptor instead.
func (*AgentAcceptance) GetSignature ¶
func (x *AgentAcceptance) GetSignature() string
func (*AgentAcceptance) GetSignatureAlgorithm ¶
func (x *AgentAcceptance) GetSignatureAlgorithm() string
func (*AgentAcceptance) ProtoMessage ¶
func (*AgentAcceptance) ProtoMessage()
func (*AgentAcceptance) ProtoReflect ¶
func (x *AgentAcceptance) ProtoReflect() protoreflect.Message
func (*AgentAcceptance) Reset ¶
func (x *AgentAcceptance) Reset()
func (*AgentAcceptance) String ¶
func (x *AgentAcceptance) String() string
type AgentAcceptancePayload ¶
type AgentAcceptancePayload struct {
// The accepted Offer's signature (Offer.signature). Anchors the whole signed
// offer without re-serializing its terms/pricing/expiry.
OfferSig string `protobuf:"bytes,1,opt,name=offer_sig,json=offerSig,proto3" json:"offer_sig,omitempty"`
// Requester identity (Requester.id) the acceptance is bound to.
RequesterId string `protobuf:"bytes,2,opt,name=requester_id,json=requesterId,proto3" json:"requester_id,omitempty"`
// Requester domain (Requester.domain) the acceptance is bound to.
RequesterDomain string `protobuf:"bytes,3,opt,name=requester_domain,json=requesterDomain,proto3" json:"requester_domain,omitempty"`
// The transaction's idempotency key — binds the acceptance to a single
// execute so it cannot be replayed under a different transaction.
IdempotencyKey string `protobuf:"bytes,4,opt,name=idempotency_key,json=idempotencyKey,proto3" json:"idempotency_key,omitempty"`
// contains filtered or unexported fields
}
AgentAcceptancePayload — the canonical signing structure for AgentAcceptance. It is NEVER sent on the wire; it exists solely so the signer (SDK) and the verifier (Exchange) derive BYTE-IDENTICAL signed bytes from the same proto schema. This message fixes the FIELD SET; the byte layout is the canonical signing form defined on Offer.signature — RFC 8785 JCS over canonical proto-JSON with the pinned option set. Underspecifying either half is the top cross-implementation drift risk, so both are pinned normatively.
Field provenance when building the payload for an execute request:
- offer_sig = the accepted Offer.signature (the Exchange's hex signature; transitively binds pricing, terms, expires_at, and — via the offer — the issuing Exchange)
- requester_id = TransactionRequest.requester.id
- requester_domain = TransactionRequest.requester.domain
- idempotency_key = TransactionRequest.idempotency_key
For batch mode, requester_* and idempotency_key come from the ENCLOSING TransactionRequest (a TransactionItem carries neither); offer_sig is the per-item Offer.signature.
func (*AgentAcceptancePayload) Descriptor
deprecated
func (*AgentAcceptancePayload) Descriptor() ([]byte, []int)
Deprecated: Use AgentAcceptancePayload.ProtoReflect.Descriptor instead.
func (*AgentAcceptancePayload) GetIdempotencyKey ¶
func (x *AgentAcceptancePayload) GetIdempotencyKey() string
func (*AgentAcceptancePayload) GetOfferSig ¶
func (x *AgentAcceptancePayload) GetOfferSig() string
func (*AgentAcceptancePayload) GetRequesterDomain ¶
func (x *AgentAcceptancePayload) GetRequesterDomain() string
func (*AgentAcceptancePayload) GetRequesterId ¶
func (x *AgentAcceptancePayload) GetRequesterId() string
func (*AgentAcceptancePayload) ProtoMessage ¶
func (*AgentAcceptancePayload) ProtoMessage()
func (*AgentAcceptancePayload) ProtoReflect ¶
func (x *AgentAcceptancePayload) ProtoReflect() protoreflect.Message
func (*AgentAcceptancePayload) Reset ¶
func (x *AgentAcceptancePayload) Reset()
func (*AgentAcceptancePayload) String ¶
func (x *AgentAcceptancePayload) String() string
type AgentRequestAcceptance ¶
type AgentRequestAcceptance struct {
// The signed payload is carried because a projected subrequest does not carry
// offers addressed to other Exchanges and therefore cannot reconstruct the
// original complete set by itself.
Payload *AgentRequestAcceptancePayload `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"`
// Hex-encoded detached Ed25519 signature over the canonical payload bytes.
Signature string `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"`
// Signature algorithm; "EdDSA" for Ed25519.
SignatureAlgorithm string `protobuf:"bytes,3,opt,name=signature_algorithm,json=signatureAlgorithm,proto3" json:"signature_algorithm,omitempty"`
// contains filtered or unexported fields
}
AgentRequestAcceptance — the agent's topology-independent authorization of one complete ordered execute set. A Broker forwards this envelope unchanged when it projects a mixed-Exchange request into per-Exchange subrequests. Each receiving Exchange verifies the signature, then requires its subrequest to equal the complete in-order projection of payload.items whose exchange names that Exchange. This is what makes removal, append, and reorder visible before request-level idempotency state is claimed.
A projected subrequest is a NEW HTTP request its sender authors. The party that projects — a Broker, or the agent itself when it splits its own mixed-Exchange set — computes that subrequest's Content-Digest and signs it with its own RFC 9421 request signature. The agent's original RFC 9421 signature covered the body the agent sent and does not travel with a projected body; that is expected, not a gap, and it is why this proof exists: like AgentAcceptance, it is a detached body signature that stays valid however the request travels. The hop-signature stack applies only to requests forwarded byte-for-byte. If a delegation rides the request, the holder-binding rule is unchanged — the wire signer must be the delegation's terminal holder — so a Broker may project a delegated request only when the agent has delegated to the Broker's key.
The verification key is the agent key published for the requester the signed payload names. payload.requester_domain must equal the request's requester.domain, and the Exchange accepts the signature only if it verifies against an Ed25519 key currently valid in that domain's WBA directory ({requester_domain}/.well-known/http-message-signatures-directory), fetched under the same SSRF discipline as every directory fetch. The envelope carries no keyid, so the verifier tries the currently-valid Ed25519 keys of that directory; rotation overlap keeps that set small. When the requester itself signed the arriving request, the request-signing key the Exchange already resolved is that key, and no second fetch is needed. A signature that verifies against a key the requester's domain publishes is what turns the claimed requester identity into an authenticated one.
func (*AgentRequestAcceptance) Descriptor
deprecated
func (*AgentRequestAcceptance) Descriptor() ([]byte, []int)
Deprecated: Use AgentRequestAcceptance.ProtoReflect.Descriptor instead.
func (*AgentRequestAcceptance) GetPayload ¶
func (x *AgentRequestAcceptance) GetPayload() *AgentRequestAcceptancePayload
func (*AgentRequestAcceptance) GetSignature ¶
func (x *AgentRequestAcceptance) GetSignature() string
func (*AgentRequestAcceptance) GetSignatureAlgorithm ¶
func (x *AgentRequestAcceptance) GetSignatureAlgorithm() string
func (*AgentRequestAcceptance) ProtoMessage ¶
func (*AgentRequestAcceptance) ProtoMessage()
func (*AgentRequestAcceptance) ProtoReflect ¶
func (x *AgentRequestAcceptance) ProtoReflect() protoreflect.Message
func (*AgentRequestAcceptance) Reset ¶
func (x *AgentRequestAcceptance) Reset()
func (*AgentRequestAcceptance) String ¶
func (x *AgentRequestAcceptance) String() string
type AgentRequestAcceptanceItem ¶
type AgentRequestAcceptanceItem struct {
OfferSig string `protobuf:"bytes,1,opt,name=offer_sig,json=offerSig,proto3" json:"offer_sig,omitempty"`
Exchange string `protobuf:"bytes,2,opt,name=exchange,proto3" json:"exchange,omitempty"`
// contains filtered or unexported fields
}
AgentRequestAcceptanceItem is the minimum reference needed to authorize an offer's membership, order, and fan-out destination without repeating the full Offer in every projected subrequest. Offer.signature transitively binds the full offer, including its exchange field; the explicit exchange lets a recipient derive which signed references must appear in its projection.
func (*AgentRequestAcceptanceItem) Descriptor
deprecated
func (*AgentRequestAcceptanceItem) Descriptor() ([]byte, []int)
Deprecated: Use AgentRequestAcceptanceItem.ProtoReflect.Descriptor instead.
func (*AgentRequestAcceptanceItem) GetExchange ¶
func (x *AgentRequestAcceptanceItem) GetExchange() string
func (*AgentRequestAcceptanceItem) GetOfferSig ¶
func (x *AgentRequestAcceptanceItem) GetOfferSig() string
func (*AgentRequestAcceptanceItem) ProtoMessage ¶
func (*AgentRequestAcceptanceItem) ProtoMessage()
func (*AgentRequestAcceptanceItem) ProtoReflect ¶
func (x *AgentRequestAcceptanceItem) ProtoReflect() protoreflect.Message
func (*AgentRequestAcceptanceItem) Reset ¶
func (x *AgentRequestAcceptanceItem) Reset()
func (*AgentRequestAcceptanceItem) String ¶
func (x *AgentRequestAcceptanceItem) String() string
type AgentRequestAcceptancePayload ¶
type AgentRequestAcceptancePayload struct {
// Complete original request order, before Broker fan-out. Capped at 256 —
// the same ceiling a discovery query's uris list carries, so one request
// can reference at most one offer per queried URI at the query cap. The Go
// verification helper enforces the same bound itself before doing any
// canonicalization work, because a verifier may run with wire validation
// off and the canonical rendering of an unbounded list is the expensive
// step an unauthenticated caller could otherwise buy for free.
Items []*AgentRequestAcceptanceItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
RequesterId string `protobuf:"bytes,2,opt,name=requester_id,json=requesterId,proto3" json:"requester_id,omitempty"`
RequesterDomain string `protobuf:"bytes,3,opt,name=requester_domain,json=requesterDomain,proto3" json:"requester_domain,omitempty"`
IdempotencyKey string `protobuf:"bytes,4,opt,name=idempotency_key,json=idempotencyKey,proto3" json:"idempotency_key,omitempty"`
// contains filtered or unexported fields
}
AgentRequestAcceptancePayload fixes the field set signed by an AgentRequestAcceptance. Its canonical bytes are JCS(protojson(AgentRequestAcceptancePayload)) using the canonical-signing rules defined on Offer.signature.
func (*AgentRequestAcceptancePayload) Descriptor
deprecated
func (*AgentRequestAcceptancePayload) Descriptor() ([]byte, []int)
Deprecated: Use AgentRequestAcceptancePayload.ProtoReflect.Descriptor instead.
func (*AgentRequestAcceptancePayload) GetIdempotencyKey ¶
func (x *AgentRequestAcceptancePayload) GetIdempotencyKey() string
func (*AgentRequestAcceptancePayload) GetItems ¶
func (x *AgentRequestAcceptancePayload) GetItems() []*AgentRequestAcceptanceItem
func (*AgentRequestAcceptancePayload) GetRequesterDomain ¶
func (x *AgentRequestAcceptancePayload) GetRequesterDomain() string
func (*AgentRequestAcceptancePayload) GetRequesterId ¶
func (x *AgentRequestAcceptancePayload) GetRequesterId() string
func (*AgentRequestAcceptancePayload) ProtoMessage ¶
func (*AgentRequestAcceptancePayload) ProtoMessage()
func (*AgentRequestAcceptancePayload) ProtoReflect ¶
func (x *AgentRequestAcceptancePayload) ProtoReflect() protoreflect.Message
func (*AgentRequestAcceptancePayload) Reset ¶
func (x *AgentRequestAcceptancePayload) Reset()
func (*AgentRequestAcceptancePayload) String ¶
func (x *AgentRequestAcceptancePayload) String() string
type AttributionDetail ¶
type AttributionDetail struct {
// URL displayed to the user as the attribution link.
DisplayedUrl *string `protobuf:"bytes,1,opt,name=displayed_url,json=displayedUrl,proto3,oneof" json:"displayed_url,omitempty"`
// How the citation was presented.
Format *CitationFormat `protobuf:"varint,2,opt,name=format,proto3,enum=fora.v1.CitationFormat,oneof" json:"format,omitempty"`
// Whether the attribution was visible to the end user.
VisibleToUser *bool `protobuf:"varint,3,opt,name=visible_to_user,json=visibleToUser,proto3,oneof" json:"visible_to_user,omitempty"`
// contains filtered or unexported fields
}
AttributionDetail — Structured attribution metadata for usage reporting.
func (*AttributionDetail) Descriptor
deprecated
func (*AttributionDetail) Descriptor() ([]byte, []int)
Deprecated: Use AttributionDetail.ProtoReflect.Descriptor instead.
func (*AttributionDetail) GetDisplayedUrl ¶
func (x *AttributionDetail) GetDisplayedUrl() string
func (*AttributionDetail) GetFormat ¶
func (x *AttributionDetail) GetFormat() CitationFormat
func (*AttributionDetail) GetVisibleToUser ¶
func (x *AttributionDetail) GetVisibleToUser() bool
func (*AttributionDetail) ProtoMessage ¶
func (*AttributionDetail) ProtoMessage()
func (*AttributionDetail) ProtoReflect ¶
func (x *AttributionDetail) ProtoReflect() protoreflect.Message
func (*AttributionDetail) Reset ¶
func (x *AttributionDetail) Reset()
func (*AttributionDetail) String ¶
func (x *AttributionDetail) String() string
type AuthMethod ¶
type AuthMethod int32
AuthMethod — Authorization methods an Exchange can support. Advertised in WellKnownManifest.supported_auth_methods (ordered by preference).
const ( AuthMethod_AUTH_METHOD_UNSPECIFIED AuthMethod = 0 // unset — zero allowed on WellKnownManifest.supported_auth_methods (capability list); no discriminator carrier // GNAP (RFC 9635) — key-first identity, key-bound tokens. Recommended. AuthMethod_AUTH_METHOD_GNAP AuthMethod = 1 // OAuth 2.0 + DPoP (RFC 9449) — sender-constrained tokens. Enterprise recommended. AuthMethod_AUTH_METHOD_OAUTH_DPOP AuthMethod = 2 // OAuth 2.0 Bearer JWT — acceptable, widely deployed. AuthMethod_AUTH_METHOD_OAUTH_BEARER AuthMethod = 3 // OAuth 2.0 + mTLS — high-security environments. AuthMethod_AUTH_METHOD_OAUTH_MTLS AuthMethod = 4 )
func (AuthMethod) Descriptor ¶
func (AuthMethod) Descriptor() protoreflect.EnumDescriptor
func (AuthMethod) Enum ¶
func (x AuthMethod) Enum() *AuthMethod
func (AuthMethod) EnumDescriptor
deprecated
func (AuthMethod) EnumDescriptor() ([]byte, []int)
Deprecated: Use AuthMethod.Descriptor instead.
func (AuthMethod) Number ¶
func (x AuthMethod) Number() protoreflect.EnumNumber
func (AuthMethod) String ¶
func (x AuthMethod) String() string
func (AuthMethod) Type ¶
func (AuthMethod) Type() protoreflect.EnumType
type AuthorizedExchange ¶
type AuthorizedExchange struct {
// Canonical domain of the Exchange, in the shape "Request recipient" defines
// in the file header.
Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"`
// FORA ExchangeService endpoint URL.
Endpoint string `protobuf:"bytes,2,opt,name=endpoint,proto3" json:"endpoint,omitempty"`
// Relationship type (mirrors ads.txt DIRECT/RESELLER).
Relationship ProviderRelationship `protobuf:"varint,3,opt,name=relationship,proto3,enum=fora.v1.ProviderRelationship" json:"relationship,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
AuthorizedExchange — A Exchange authorized to sell this provider's resources.
func (*AuthorizedExchange) Descriptor
deprecated
func (*AuthorizedExchange) Descriptor() ([]byte, []int)
Deprecated: Use AuthorizedExchange.ProtoReflect.Descriptor instead.
func (*AuthorizedExchange) GetDomain ¶
func (x *AuthorizedExchange) GetDomain() string
func (*AuthorizedExchange) GetEndpoint ¶
func (x *AuthorizedExchange) GetEndpoint() string
func (*AuthorizedExchange) GetExt ¶
func (x *AuthorizedExchange) GetExt() *structpb.Struct
func (*AuthorizedExchange) GetExtCritical ¶
func (x *AuthorizedExchange) GetExtCritical() []string
func (*AuthorizedExchange) GetRelationship ¶
func (x *AuthorizedExchange) GetRelationship() ProviderRelationship
func (*AuthorizedExchange) ProtoMessage ¶
func (*AuthorizedExchange) ProtoMessage()
func (*AuthorizedExchange) ProtoReflect ¶
func (x *AuthorizedExchange) ProtoReflect() protoreflect.Message
func (*AuthorizedExchange) Reset ¶
func (x *AuthorizedExchange) Reset()
func (*AuthorizedExchange) String ¶
func (x *AuthorizedExchange) String() string
type C2PAStatus ¶
type C2PAStatus int32
C2PAStatus — Summary validation status of a C2PA content credentials manifest.
Populated by the Exchange or a C2PA verification vendor after validating the manifest against the C2PA specification (§15 Validation Algorithm). Maps to C2PA's three validation states: well-formed, valid, trusted.
Trust is determined by the C2PA Trust List (curated X.509 roots). FORA bridges this trust via ResourceAttestation: a FORA-trusted verification vendor validates the C2PA manifest and publishes the results as attestation claims signed with Ed25519.
const ( C2PAStatus_C2PA_STATUS_UNSPECIFIED C2PAStatus = 0 // unset — output/optional; zero is a valid not-applicable/unset state // Manifest is valid AND signer certificate chains to a C2PA Trust List root. // Highest assurance: provenance is cryptographically verified by a trusted CA. C2PAStatus_C2PA_STATUS_TRUSTED C2PAStatus = 1 // Manifest is structurally correct and signature verifies, but signer // certificate does NOT chain to a C2PA Trust List root. The content // has provenance, but the signer is not institutionally vouched for. C2PAStatus_C2PA_STATUS_VALID C2PAStatus = 2 // Manifest is present but validation failed (signature mismatch, // malformed JUMBF, certificate expired, hard binding broken). C2PAStatus_C2PA_STATUS_INVALID C2PAStatus = 3 // Content was checked and has no C2PA manifest. C2PAStatus_C2PA_STATUS_ABSENT C2PAStatus = 4 )
func (C2PAStatus) Descriptor ¶
func (C2PAStatus) Descriptor() protoreflect.EnumDescriptor
func (C2PAStatus) Enum ¶
func (x C2PAStatus) Enum() *C2PAStatus
func (C2PAStatus) EnumDescriptor
deprecated
func (C2PAStatus) EnumDescriptor() ([]byte, []int)
Deprecated: Use C2PAStatus.Descriptor instead.
func (C2PAStatus) Number ¶
func (x C2PAStatus) Number() protoreflect.EnumNumber
func (C2PAStatus) String ¶
func (x C2PAStatus) String() string
func (C2PAStatus) Type ¶
func (C2PAStatus) Type() protoreflect.EnumType
type CatalogContributor ¶
type CatalogContributor struct {
// Canonical domain of the authorized contributor (e.g., "doubleverify.com").
Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"`
// Relationship of this contributor to the provider.
// Examples: "verifier" (resource intelligence vendor that attests to resource
// properties), "exchange" (an Exchange that enriches catalog entries).
Relationship string `protobuf:"bytes,2,opt,name=relationship,proto3" json:"relationship,omitempty"`
// contains filtered or unexported fields
}
CatalogContributor — A third party authorized to push catalog metadata (including attestations) on behalf of a provider.
func (*CatalogContributor) Descriptor
deprecated
func (*CatalogContributor) Descriptor() ([]byte, []int)
Deprecated: Use CatalogContributor.ProtoReflect.Descriptor instead.
func (*CatalogContributor) GetDomain ¶
func (x *CatalogContributor) GetDomain() string
func (*CatalogContributor) GetRelationship ¶
func (x *CatalogContributor) GetRelationship() string
func (*CatalogContributor) ProtoMessage ¶
func (*CatalogContributor) ProtoMessage()
func (*CatalogContributor) ProtoReflect ¶
func (x *CatalogContributor) ProtoReflect() protoreflect.Message
func (*CatalogContributor) Reset ¶
func (x *CatalogContributor) Reset()
func (*CatalogContributor) String ¶
func (x *CatalogContributor) String() string
type CatalogRejection ¶
type CatalogRejection struct {
// The rejection reason (defined-only, non-zero)
Reason CatalogRejectionReason `protobuf:"varint,1,opt,name=reason,proto3,enum=fora.v1.CatalogRejectionReason" json:"reason,omitempty"`
// The entry paths the refusal is about. A catalog push is all-or-nothing, so
// these name which entries failed inside a submission that persisted nothing —
// they are not a list of what was dropped from an otherwise applied batch.
RejectedPaths []string `protobuf:"bytes,2,rep,name=rejected_paths,json=rejectedPaths,proto3" json:"rejected_paths,omitempty"`
// contains filtered or unexported fields
}
CatalogRejection — a CatalogService call could not be applied.
func (*CatalogRejection) Descriptor
deprecated
func (*CatalogRejection) Descriptor() ([]byte, []int)
Deprecated: Use CatalogRejection.ProtoReflect.Descriptor instead.
func (*CatalogRejection) GetReason ¶
func (x *CatalogRejection) GetReason() CatalogRejectionReason
func (*CatalogRejection) GetRejectedPaths ¶
func (x *CatalogRejection) GetRejectedPaths() []string
func (*CatalogRejection) ProtoMessage ¶
func (*CatalogRejection) ProtoMessage()
func (*CatalogRejection) ProtoReflect ¶
func (x *CatalogRejection) ProtoReflect() protoreflect.Message
func (*CatalogRejection) Reset ¶
func (x *CatalogRejection) Reset()
func (*CatalogRejection) String ¶
func (x *CatalogRejection) String() string
type CatalogRejectionReason ¶
type CatalogRejectionReason int32
CatalogRejectionReason — why a CatalogService call was rejected. Replaces the hand-rolled catalog reason strings ("caller not in catalog contributors", "tenant mismatch", "signature middleware missing").
const ( CatalogRejectionReason_CATALOG_REJECTION_REASON_UNSPECIFIED CatalogRejectionReason = 0 // unset — rejected at ingest CatalogRejectionReason_CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR CatalogRejectionReason = 1 // caller is not an authorized contributor for the domain CatalogRejectionReason_CATALOG_REJECTION_REASON_TENANT_MISMATCH CatalogRejectionReason = 2 // tenant_id does not match the authenticated caller CatalogRejectionReason_CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED CatalogRejectionReason = 3 // contributing domain is not verified CatalogRejectionReason_CATALOG_REJECTION_REASON_SIGNATURE_INVALID CatalogRejectionReason = 4 // request signature missing or invalid CatalogRejectionReason_CATALOG_REJECTION_REASON_MALFORMED_ENTRY CatalogRejectionReason = 5 // a resource entry failed schema/validation CatalogRejectionReason_CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN CatalogRejectionReason = 6 // an unregistered vocab token in a restriction/term CatalogRejectionReason_CATALOG_REJECTION_REASON_QUOTA_EXCEEDED CatalogRejectionReason = 7 // contributor push quota exceeded (per-caller) // A single entry carries more license terms than ResourceEntry.terms allows. // Retired on the PushResources path: the cap is a wire rule now, so a push // carrying an over-cap entry is refused whole, before any per-entry // classification runs, and no rejection naming this reason can be produced for // it. Kept for a deployment that applies the cap somewhere the wire rules do // not reach — an entry that arrived by some other route than PushResources. CatalogRejectionReason_CATALOG_REJECTION_REASON_TERMS_LIMIT_EXCEEDED CatalogRejectionReason = 8 // The URI cannot be claimed by this caller's entries. Named from the caller's // own perspective ON PURPOSE: it MUST NOT disclose that another resource/ // contributor already owns the URI. Within one publisher, mutually-untrusting // contributors share a catalog, so an "owned by another" reason would be a // confirmed-existence oracle a contributor could use to map a competitor's // catalog. The conflict is resolvable only by the publisher (who is authorized // to see full ownership); the human-readable message routes the caller there // without confirming who, if anyone, holds the URI. CatalogRejectionReason_CATALOG_REJECTION_REASON_URI_UNAVAILABLE CatalogRejectionReason = 9 )
func (CatalogRejectionReason) Descriptor ¶
func (CatalogRejectionReason) Descriptor() protoreflect.EnumDescriptor
func (CatalogRejectionReason) Enum ¶
func (x CatalogRejectionReason) Enum() *CatalogRejectionReason
func (CatalogRejectionReason) EnumDescriptor
deprecated
func (CatalogRejectionReason) EnumDescriptor() ([]byte, []int)
Deprecated: Use CatalogRejectionReason.Descriptor instead.
func (CatalogRejectionReason) Number ¶
func (x CatalogRejectionReason) Number() protoreflect.EnumNumber
func (CatalogRejectionReason) String ¶
func (x CatalogRejectionReason) String() string
func (CatalogRejectionReason) Type ¶
func (CatalogRejectionReason) Type() protoreflect.EnumType
type CitationFormat ¶
type CitationFormat int32
CitationFormat — How the citation is presented to the user.
const ( CitationFormat_CITATION_FORMAT_LINK CitationFormat = 0 // Hyperlink citation CitationFormat_CITATION_FORMAT_FOOTNOTE CitationFormat = 1 // Footnote citation CitationFormat_CITATION_FORMAT_INLINE CitationFormat = 2 // Inline text citation )
func (CitationFormat) Descriptor ¶
func (CitationFormat) Descriptor() protoreflect.EnumDescriptor
func (CitationFormat) Enum ¶
func (x CitationFormat) Enum() *CitationFormat
func (CitationFormat) EnumDescriptor
deprecated
func (CitationFormat) EnumDescriptor() ([]byte, []int)
Deprecated: Use CitationFormat.Descriptor instead.
func (CitationFormat) Number ¶
func (x CitationFormat) Number() protoreflect.EnumNumber
func (CitationFormat) String ¶
func (x CitationFormat) String() string
func (CitationFormat) Type ¶
func (CitationFormat) Type() protoreflect.EnumType
type Cost ¶
type Cost struct {
// Exact decimal string (not a float), e.g. "19.99". Denominated in `currency`.
Amount string `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"`
Currency string `protobuf:"bytes,2,opt,name=currency,proto3" json:"currency,omitempty"` // ISO 4217
UnitCost *string `protobuf:"bytes,3,opt,name=unit_cost,json=unitCost,proto3,oneof" json:"unit_cost,omitempty"` // Effective cost per unit (decimal string)
// contains filtered or unexported fields
}
Cost — Actual transaction cost.
func (*Cost) Descriptor
deprecated
func (*Cost) GetCurrency ¶
func (*Cost) GetUnitCost ¶
func (*Cost) ProtoMessage ¶
func (*Cost) ProtoMessage()
func (*Cost) ProtoReflect ¶
func (x *Cost) ProtoReflect() protoreflect.Message
type Delegation ¶
type Delegation struct {
// Who granted this delegation (domain for public key lookup).
PrincipalDomain string `protobuf:"bytes,1,opt,name=principal_domain,json=principalDomain,proto3" json:"principal_domain,omitempty"`
// Principal's identifier (e.g., "user@acme.com", "marketdata.example.com").
PrincipalId string `protobuf:"bytes,2,opt,name=principal_id,json=principalId,proto3" json:"principal_id,omitempty"`
// Scopes granted by this delegation. MUST be a subset of the
// principal's own scopes (attenuation — can only narrow, not widen).
Scopes []string `protobuf:"bytes,3,rep,name=scopes,proto3" json:"scopes,omitempty"`
// When this delegation expires. Exchange MUST reject expired tokens.
ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"`
// Maximum spend in currency minor units (e.g., cents for USD).
// Exchange tracks cumulative spend against this cap.
MaxSpendCents *int64 `protobuf:"varint,5,opt,name=max_spend_cents,json=maxSpendCents,proto3,oneof" json:"max_spend_cents,omitempty"`
// Maximum number of accesses allowed under this delegation.
// Exchange tracks cumulative access count against this cap.
// Deny with DENIAL_REASON_QUOTA_EXCEEDED when count >= limit.
// For subscriptions with "10,000 accesses/month", this carries the ceiling.
MaxAccesses *int32 `protobuf:"varint,9,opt,name=max_accesses,json=maxAccesses,proto3,oneof" json:"max_accesses,omitempty"`
// Quota reset period. How often the access/spend counters reset.
// Example: 30 days for monthly subscriptions — "2592000s" on the wire
// (proto-JSON encodes Duration as seconds; "720h" is not accepted).
// When absent, the quota is lifetime (bounded only by expires_at).
QuotaPeriod *durationpb.Duration `protobuf:"bytes,10,opt,name=quota_period,json=quotaPeriod,proto3,oneof" json:"quota_period,omitempty"`
// Token bytes. A JWT (base64url-encoded JWS).
Token []byte `protobuf:"bytes,6,opt,name=token,proto3" json:"token,omitempty"`
// Token format: "jwt" (default). Empty is treated as "jwt". The field stays
// open for a future format.
TokenFormat string `protobuf:"bytes,7,opt,name=token_format,json=tokenFormat,proto3" json:"token_format,omitempty"`
// Optional: URI for real-time revocation checking.
// Exchange MAY check this for high-value transactions.
// Not checked for routine low-value access (performance tradeoff).
RevocationUri *string `protobuf:"bytes,8,opt,name=revocation_uri,json=revocationUri,proto3,oneof" json:"revocation_uri,omitempty"`
// Token issuer. OIDC issuer URL or GNAP grant server URL.
// Exchange uses this for JWT validation (OIDC discovery → JWKS)
// or GNAP token introspection.
Issuer *string `protobuf:"bytes,11,opt,name=issuer,proto3,oneof" json:"issuer,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
Delegation — Scoped, time-limited, spend-capped credential.
The token is an opaque, signed credential. The format is a JWT (token_format "jwt"); the field stays open for a future format. Its claims are the AUTHORITATIVE source of the grant; the plaintext fields below (scopes, expires_at, max_spend_cents, …) are a convenience mirror the Exchange MAY use for fast pre-filtering before it verifies the token.
Holder binding (the load-bearing property). The grant is bound to a holder key via the RFC 7800 `cnf` confirmation claim — `cnf.jkt`, the RFC 7638 JWK thumbprint of the holder's key. Verification MUST check that the key signing the request (RFC 9421) hashes to that thumbprint; a token possessed without the matching private key is rejected. This is what makes a leaked token NOT bearer-usable. Delegation is a chain of cnf-linked JWTs: a principal narrows a grant by issuing a child JWT (cnf = the next holder, scopes ⊆ parent), signed by the key the parent's cnf named — the chain-linkage invariant. Verifiers need only the root issuer's public key; intermediate keys ride inside the chain (JOSE header `jwk`), so verification is offline.
The claim schema is a small registered vocabulary — see the FORA delegation-claims profile in the auth spec. All claims are OPTIONAL except the holder binding (cnf). Vendors MAY add namespaced claims (their own "vendor:" namespace; "fora_"-prefixed names are reserved for the registered vocabulary and MUST NOT be redefined); any constraint a verifier cannot evaluate is binding by default (fail closed) unless the issuer marks it advisory — mirroring Restriction.advisory.
Scope/time/spend caps are defense-in-depth that bound the blast radius only in the residual case where the holder's signing key is also compromised; the primary protection against theft is the holder binding above.
func (*Delegation) Descriptor
deprecated
func (*Delegation) Descriptor() ([]byte, []int)
Deprecated: Use Delegation.ProtoReflect.Descriptor instead.
func (*Delegation) GetExpiresAt ¶
func (x *Delegation) GetExpiresAt() *timestamppb.Timestamp
func (*Delegation) GetExt ¶
func (x *Delegation) GetExt() *structpb.Struct
func (*Delegation) GetExtCritical ¶
func (x *Delegation) GetExtCritical() []string
func (*Delegation) GetIssuer ¶
func (x *Delegation) GetIssuer() string
func (*Delegation) GetMaxAccesses ¶
func (x *Delegation) GetMaxAccesses() int32
func (*Delegation) GetMaxSpendCents ¶
func (x *Delegation) GetMaxSpendCents() int64
func (*Delegation) GetPrincipalDomain ¶
func (x *Delegation) GetPrincipalDomain() string
func (*Delegation) GetPrincipalId ¶
func (x *Delegation) GetPrincipalId() string
func (*Delegation) GetQuotaPeriod ¶
func (x *Delegation) GetQuotaPeriod() *durationpb.Duration
func (*Delegation) GetRevocationUri ¶
func (x *Delegation) GetRevocationUri() string
func (*Delegation) GetScopes ¶
func (x *Delegation) GetScopes() []string
func (*Delegation) GetToken ¶
func (x *Delegation) GetToken() []byte
func (*Delegation) GetTokenFormat ¶
func (x *Delegation) GetTokenFormat() string
func (*Delegation) ProtoMessage ¶
func (*Delegation) ProtoMessage()
func (*Delegation) ProtoReflect ¶
func (x *Delegation) ProtoReflect() protoreflect.Message
func (*Delegation) Reset ¶
func (x *Delegation) Reset()
func (*Delegation) String ¶
func (x *Delegation) String() string
type DeliveryMethod ¶
type DeliveryMethod int32
const ( DeliveryMethod_DELIVERY_METHOD_UNSPECIFIED DeliveryMethod = 0 // unset — output/optional and capability-list; zero is a valid not-applicable/unset state // Exchange returns resource inline or via its own endpoint. DeliveryMethod_DELIVERY_METHOD_DIRECT DeliveryMethod = 1 // Exchange returns access info (signed URL, token) for retrieval // from a Resource Owner / Resource Delivery Endpoint. DeliveryMethod_DELIVERY_METHOD_INSTRUCTIONS DeliveryMethod = 2 // Resource delivered via real-time streaming connection (WebSocket, SSE, gRPC stream). // The signed URL points to a streaming endpoint. Agent connects and receives // continuous data for the duration of the session. DeliveryMethod_DELIVERY_METHOD_STREAMING DeliveryMethod = 3 )
func (DeliveryMethod) Descriptor ¶
func (DeliveryMethod) Descriptor() protoreflect.EnumDescriptor
func (DeliveryMethod) Enum ¶
func (x DeliveryMethod) Enum() *DeliveryMethod
func (DeliveryMethod) EnumDescriptor
deprecated
func (DeliveryMethod) EnumDescriptor() ([]byte, []int)
Deprecated: Use DeliveryMethod.Descriptor instead.
func (DeliveryMethod) Number ¶
func (x DeliveryMethod) Number() protoreflect.EnumNumber
func (DeliveryMethod) String ¶
func (x DeliveryMethod) String() string
func (DeliveryMethod) Type ¶
func (DeliveryMethod) Type() protoreflect.EnumType
type DenialReason ¶
type DenialReason int32
DenialReason — Standard vocabulary for transaction denial. Logged as enum values, not strings. Enables automated processing of denial patterns across the ecosystem.
const ( DenialReason_DENIAL_REASON_UNSPECIFIED DenialReason = 0 // output enum; zero = not-applicable on TransactionResultItem.denial_reason, rejected (not_in:[0]) where set on TransactionDenial.reason DenialReason_DENIAL_REASON_ACCOUNT_INACTIVE DenialReason = 1 // the requester's account (the billing_ref minted at Register) exists but is not active — typically awaiting the Exchange operator's out-of-band activation; the remedy is to wait or contact the operator, NOT to register again DenialReason_DENIAL_REASON_INSUFFICIENT_BALANCE DenialReason = 2 // Requester's balance too low DenialReason_DENIAL_REASON_RATE_LIMITED DenialReason = 3 // Too many requests DenialReason_DENIAL_REASON_CONTENT_UNAVAILABLE DenialReason = 4 // Resource no longer available DenialReason_DENIAL_REASON_RESTRICTION_NOT_SATISFIED DenialReason = 5 // Accepted term's restriction not satisfied by the request; the axes are in TransactionDenial.restriction_mismatches (single) / TransactionResultItem.restriction_mismatches (batch), same RestrictionKind vocabulary as the terms DenialReason_DENIAL_REASON_REPORTING_OVERDUE DenialReason = 6 // Requester has >20% overdue reports (MAY threshold) DenialReason_DENIAL_REASON_OFFER_EXPIRED DenialReason = 7 // Offer TTL exceeded DenialReason_DENIAL_REASON_SIGNATURE_INVALID DenialReason = 8 // Offer signature verification failed DenialReason_DENIAL_REASON_QUOTA_EXCEEDED DenialReason = 9 // Subscription access count exhausted for this period DenialReason_DENIAL_REASON_DELEGATION_INVALID DenialReason = 10 // Delegation missing, unverifiable, expired, holder binding failed, or scopes/caps do not cover the request DenialReason_DENIAL_REASON_SCOPE_INSUFFICIENT DenialReason = 11 // Requester scopes don't cover this resource // Entitlement family — subscription/entitlement access failures on a // subscription-gated offer. Finer-grained than DELEGATION_INVALID so callers // and operator tooling can triage each mode. These single-source the // Exchange's KindEntitlement* refusal taxonomy, which today is distinguishable // only by a server-side tag (all collapse to UNAUTHENTICATED on the wire). // Format-neutral: they classify a JWT/opaque entitlement-token failure, not a // format-specific one. DenialReason_DENIAL_REASON_ENTITLEMENT_MISSING DenialReason = 12 // no entitlement token presented for a subscription-only offer DenialReason_DENIAL_REASON_ENTITLEMENT_MALFORMED DenialReason = 13 // entitlement token failed to decode (malformed) DenialReason_DENIAL_REASON_ENTITLEMENT_EXPIRED DenialReason = 14 // entitlement token's validity window has passed DenialReason_DENIAL_REASON_ENTITLEMENT_WRONG_BUYER DenialReason = 15 // token's subscriber_org does not match the asserted requester DenialReason_DENIAL_REASON_SUBSCRIPTION_LAPSED DenialReason = 16 // the covering subscription contract has lapsed DenialReason_DENIAL_REASON_ENTITLEMENT_NOT_GRANTED DenialReason = 17 // subscription exists but no buyer-side grant ties this caller to it // Split out of the former single billing-reference reason. An agent hits the // wall at execute, not at register, and "no account here" and "account awaiting // activation" are two different states of the caller with two different // remedies — call Register, which an agent can do unattended, versus wait for // a human. Neither value discloses the Exchange's internal billing state; both // describe the caller's own account, which it may already query with // GetAccountStatus. TransactionDenial.exchange names WHERE to register, so the // agent converges without fetching a manifest first. DenialReason_DENIAL_REASON_ACCOUNT_NOT_REGISTERED DenialReason = 18 // no account exists for this caller at this Exchange — the remedy is to call Register )
func (DenialReason) Descriptor ¶
func (DenialReason) Descriptor() protoreflect.EnumDescriptor
func (DenialReason) Enum ¶
func (x DenialReason) Enum() *DenialReason
func (DenialReason) EnumDescriptor
deprecated
func (DenialReason) EnumDescriptor() ([]byte, []int)
Deprecated: Use DenialReason.Descriptor instead.
func (DenialReason) Number ¶
func (x DenialReason) Number() protoreflect.EnumNumber
func (DenialReason) String ¶
func (x DenialReason) String() string
func (DenialReason) Type ¶
func (DenialReason) Type() protoreflect.EnumType
type DiscoveryMethod ¶
type DiscoveryMethod int32
DiscoveryMethod — How the Broker discovered this resource URI. Metadata for the agent; does not affect transaction flow.
const ( DiscoveryMethod_DISCOVERY_METHOD_UNSPECIFIED DiscoveryMethod = 0 // unset — output/optional; zero is a valid not-applicable/unset state // URI was requested by the agent directly or found via Exchange query. DiscoveryMethod_DISCOVERY_METHOD_EXCHANGE DiscoveryMethod = 1 // URI was discovered via a search engine (e.g., Exa, Tavily, Brave Search). // The Broker searched on the agent's behalf, then routed through Exchange. DiscoveryMethod_DISCOVERY_METHOD_SEARCH DiscoveryMethod = 2 // URI was recommended by a resource recommendation service. DiscoveryMethod_DISCOVERY_METHOD_RECOMMENDATION DiscoveryMethod = 3 // URI was found via resource syndication tracking (e.g., same article on another domain). DiscoveryMethod_DISCOVERY_METHOD_SYNDICATION DiscoveryMethod = 4 )
func (DiscoveryMethod) Descriptor ¶
func (DiscoveryMethod) Descriptor() protoreflect.EnumDescriptor
func (DiscoveryMethod) Enum ¶
func (x DiscoveryMethod) Enum() *DiscoveryMethod
func (DiscoveryMethod) EnumDescriptor
deprecated
func (DiscoveryMethod) EnumDescriptor() ([]byte, []int)
Deprecated: Use DiscoveryMethod.Descriptor instead.
func (DiscoveryMethod) Number ¶
func (x DiscoveryMethod) Number() protoreflect.EnumNumber
func (DiscoveryMethod) String ¶
func (x DiscoveryMethod) String() string
func (DiscoveryMethod) Type ¶
func (DiscoveryMethod) Type() protoreflect.EnumType
type DiscoveryRequest ¶
type DiscoveryRequest struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Requester identity — who is making this request, what scopes they have.
// The Broker forwards this to Exchanges in ResourceQuery.requester.
Requester *Requester `protobuf:"bytes,3,opt,name=requester,proto3" json:"requester,omitempty"`
// Resource URIs the agent wants. The Broker forwards these to Exchanges in
// ResourceQuery.uris. Optional when `query` / `search_filters` drive
// Broker-side discovery instead.
Uris []string `protobuf:"bytes,8,rep,name=uris,proto3" json:"uris,omitempty"`
// The limits the agent will operate within, per restriction axis — see
// AcceptableRestriction. The Broker forwards these to Exchanges in
// ResourceQuery.acceptable_restrictions. Advisory selection inputs, not
// enforcement.
AcceptableRestrictions []*AcceptableRestriction `` /* 127-byte string literal not displayed */
// Constraints for exchange filtering and offer selection.
Constraints *RequestConstraints `protobuf:"bytes,4,opt,name=constraints,proto3,oneof" json:"constraints,omitempty"`
// Domain extension profiles the agent understands.
//
// The Broker uses this to:
// 1. Route queries to Exchanges that support these profiles
// 2. Forward the profiles in ResourceQuery.supported_profiles
// 3. Include profile-specific ext fields when returning results
//
// Examples: ["fora-academic-v1"] — agent working on literature review
SupportedProfiles []string `protobuf:"bytes,5,rep,name=supported_profiles,json=supportedProfiles,proto3" json:"supported_profiles,omitempty"`
// Search query for Broker-side resource discovery.
// Used when the agent doesn't know specific URIs but wants the Broker
// to find matching resources across Exchanges.
// When present, the Broker interprets the query and discovers resources
// across Exchanges on the agent's behalf. Results returned as Offers
// in DiscoveryResponse, same as for specific URI requests.
// Can be used alongside uris (specific URIs + search in one request).
Query *string `protobuf:"bytes,6,opt,name=query,proto3,oneof" json:"query,omitempty"`
// Structured search filters (optional, alongside or instead of query).
// Keys are profile-specific: "academic.topic", "news.category",
// "legal.jurisdiction", etc. The Broker maps these to Exchange-specific
// query parameters.
SearchFilters *structpb.Struct `protobuf:"bytes,7,opt,name=search_filters,json=searchFilters,proto3,oneof" json:"search_filters,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
DiscoveryRequest — Agent sends to Broker (Step 1).
func (*DiscoveryRequest) Descriptor
deprecated
func (*DiscoveryRequest) Descriptor() ([]byte, []int)
Deprecated: Use DiscoveryRequest.ProtoReflect.Descriptor instead.
func (*DiscoveryRequest) GetAcceptableRestrictions ¶
func (x *DiscoveryRequest) GetAcceptableRestrictions() []*AcceptableRestriction
func (*DiscoveryRequest) GetConstraints ¶
func (x *DiscoveryRequest) GetConstraints() *RequestConstraints
func (*DiscoveryRequest) GetExt ¶
func (x *DiscoveryRequest) GetExt() *structpb.Struct
func (*DiscoveryRequest) GetExtCritical ¶
func (x *DiscoveryRequest) GetExtCritical() []string
func (*DiscoveryRequest) GetQuery ¶
func (x *DiscoveryRequest) GetQuery() string
func (*DiscoveryRequest) GetRequester ¶
func (x *DiscoveryRequest) GetRequester() *Requester
func (*DiscoveryRequest) GetSearchFilters ¶
func (x *DiscoveryRequest) GetSearchFilters() *structpb.Struct
func (*DiscoveryRequest) GetSupportedProfiles ¶
func (x *DiscoveryRequest) GetSupportedProfiles() []string
func (*DiscoveryRequest) GetUris ¶
func (x *DiscoveryRequest) GetUris() []string
func (*DiscoveryRequest) GetVer ¶
func (x *DiscoveryRequest) GetVer() string
func (*DiscoveryRequest) ProtoMessage ¶
func (*DiscoveryRequest) ProtoMessage()
func (*DiscoveryRequest) ProtoReflect ¶
func (x *DiscoveryRequest) ProtoReflect() protoreflect.Message
func (*DiscoveryRequest) Reset ¶
func (x *DiscoveryRequest) Reset()
func (*DiscoveryRequest) String ¶
func (x *DiscoveryRequest) String() string
type DiscoveryResponse ¶
type DiscoveryResponse struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Offers grouped by requested URI — the sole offer representation in this
// response. One OfferGroup per URI the agent asked for (echoed in
// OfferGroup.uri); a group with no offers carries OfferGroup.absence_reason
// explaining why. Each contained Offer is the full signed Offer the Exchange
// issued (including Offer.exchange, the execute-routing target), forwarded by
// the Broker unchanged so the agent can verify the signature end to end.
OfferGroups []*OfferGroup `protobuf:"bytes,4,rep,name=offer_groups,json=offerGroups,proto3" json:"offer_groups,omitempty"`
// Why the resolve produced no offers at all. Set (and offer_groups empty) on a
// successful "no result" answer; unset when offer_groups is non-empty. Same
// vocabulary DiscoverResources uses for OfferGroup.absence_reason.
// RESTRICTION_FILTERED may appear here, but Resolve does not surface the
// per-axis detail: DiscoveryResponse has no restriction_filters companion
// (unlike OfferGroup). A consumer needing the filtered axes calls
// DiscoverResources.
//
// Existence-oracle note: an authorization-flavored reason (SCOPE_INSUFFICIENT,
// NOT_AUTHORIZED, NOT_IN_CATALOG, CONTENT_BLOCKED) confirms a resource exists
// and why access was refused. Resolve surfaces the same oracle at the broker
// that OfferGroup.absence_reason does at the Exchange, so the same mitigation
// applies: where existence itself must stay hidden, the Broker MAY omit the
// reason (leave this unset) rather than reveal it. See the threat model.
AbsenceReason *OfferAbsenceReason `` /* 140-byte string literal not displayed */
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
DiscoveryResponse — Broker returns to Agent (Step 6).
Carries discovery results only: the offers the Broker gathered across Exchanges, grouped by the URI they were requested for. Committing to an offer is a separate exchange on the execute path; that per-transaction result (transaction_id, billing_id, cost, delivery_method, retrieval endpoint, …) is returned by TransactionResponse, not here.
func (*DiscoveryResponse) Descriptor
deprecated
func (*DiscoveryResponse) Descriptor() ([]byte, []int)
Deprecated: Use DiscoveryResponse.ProtoReflect.Descriptor instead.
func (*DiscoveryResponse) GetAbsenceReason ¶
func (x *DiscoveryResponse) GetAbsenceReason() OfferAbsenceReason
func (*DiscoveryResponse) GetExt ¶
func (x *DiscoveryResponse) GetExt() *structpb.Struct
func (*DiscoveryResponse) GetExtCritical ¶
func (x *DiscoveryResponse) GetExtCritical() []string
func (*DiscoveryResponse) GetOfferGroups ¶
func (x *DiscoveryResponse) GetOfferGroups() []*OfferGroup
func (*DiscoveryResponse) GetVer ¶
func (x *DiscoveryResponse) GetVer() string
func (*DiscoveryResponse) ProtoMessage ¶
func (*DiscoveryResponse) ProtoMessage()
func (*DiscoveryResponse) ProtoReflect ¶
func (x *DiscoveryResponse) ProtoReflect() protoreflect.Message
func (*DiscoveryResponse) Reset ¶
func (x *DiscoveryResponse) Reset()
func (*DiscoveryResponse) String ¶
func (x *DiscoveryResponse) String() string
type DisputeFailure ¶
type DisputeFailure struct {
// The failure reason (defined-only, non-zero)
Reason DisputeFailureReason `protobuf:"varint,1,opt,name=reason,proto3,enum=fora.v1.DisputeFailureReason" json:"reason,omitempty"`
// contains filtered or unexported fields
}
DisputeFailure — a dispute could not be filed.
func (*DisputeFailure) Descriptor
deprecated
func (*DisputeFailure) Descriptor() ([]byte, []int)
Deprecated: Use DisputeFailure.ProtoReflect.Descriptor instead.
func (*DisputeFailure) GetReason ¶
func (x *DisputeFailure) GetReason() DisputeFailureReason
func (*DisputeFailure) ProtoMessage ¶
func (*DisputeFailure) ProtoMessage()
func (*DisputeFailure) ProtoReflect ¶
func (x *DisputeFailure) ProtoReflect() protoreflect.Message
func (*DisputeFailure) Reset ¶
func (x *DisputeFailure) Reset()
func (*DisputeFailure) String ¶
func (x *DisputeFailure) String() string
type DisputeFailureReason ¶
type DisputeFailureReason int32
DisputeFailureReason — why a DisputeTransaction filing was refused. Distinct from DisputeReason (why the agent disputes) and DisputeStatus (an accepted dispute's lifecycle).
const ( DisputeFailureReason_DISPUTE_FAILURE_REASON_UNSPECIFIED DisputeFailureReason = 0 // unset — rejected at ingest DisputeFailureReason_DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND DisputeFailureReason = 1 // transaction_id is unknown DisputeFailureReason_DISPUTE_FAILURE_REASON_REPORT_NOT_FILED DisputeFailureReason = 2 // no UsageReport precedes the dispute (report_id missing/unknown) DisputeFailureReason_DISPUTE_FAILURE_REASON_WINDOW_EXPIRED DisputeFailureReason = 3 // filed outside the allowed dispute window DisputeFailureReason_DISPUTE_FAILURE_REASON_DUPLICATE DisputeFailureReason = 4 // a dispute already exists for this transaction DisputeFailureReason_DISPUTE_FAILURE_REASON_INELIGIBLE DisputeFailureReason = 5 // the transaction/state is not disputable )
func (DisputeFailureReason) Descriptor ¶
func (DisputeFailureReason) Descriptor() protoreflect.EnumDescriptor
func (DisputeFailureReason) Enum ¶
func (x DisputeFailureReason) Enum() *DisputeFailureReason
func (DisputeFailureReason) EnumDescriptor
deprecated
func (DisputeFailureReason) EnumDescriptor() ([]byte, []int)
Deprecated: Use DisputeFailureReason.Descriptor instead.
func (DisputeFailureReason) Number ¶
func (x DisputeFailureReason) Number() protoreflect.EnumNumber
func (DisputeFailureReason) String ¶
func (x DisputeFailureReason) String() string
func (DisputeFailureReason) Type ¶
func (DisputeFailureReason) Type() protoreflect.EnumType
type DisputeReason ¶
type DisputeReason int32
const ( DisputeReason_DISPUTE_REASON_UNSPECIFIED DisputeReason = 0 // unset — rejected at ingest // Content hash does not match what was promised in the Offer. DisputeReason_DISPUTE_REASON_CONTENT_MISMATCH DisputeReason = 1 // Resource was not delivered (signed URL returned 404/403/5xx). DisputeReason_DISPUTE_REASON_DELIVERY_FAILED DisputeReason = 2 // Resource was delivered but is entirely different from what was described. DisputeReason_DISPUTE_REASON_WRONG_CONTENT DisputeReason = 3 // Signed URL expired before the agent could fetch the resource. DisputeReason_DISPUTE_REASON_EXPIRED_BEFORE_FETCH DisputeReason = 4 // Resource was truncated or incomplete. DisputeReason_DISPUTE_REASON_INCOMPLETE_CONTENT DisputeReason = 5 )
func (DisputeReason) Descriptor ¶
func (DisputeReason) Descriptor() protoreflect.EnumDescriptor
func (DisputeReason) Enum ¶
func (x DisputeReason) Enum() *DisputeReason
func (DisputeReason) EnumDescriptor
deprecated
func (DisputeReason) EnumDescriptor() ([]byte, []int)
Deprecated: Use DisputeReason.Descriptor instead.
func (DisputeReason) Number ¶
func (x DisputeReason) Number() protoreflect.EnumNumber
func (DisputeReason) String ¶
func (x DisputeReason) String() string
func (DisputeReason) Type ¶
func (DisputeReason) Type() protoreflect.EnumType
type DisputeRequest ¶
type DisputeRequest struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Idempotency key (REQUIRED). The server MUST dedupe on this so a replayed
// filing does not open a duplicate case. The dispute's durable identity is the
// Exchange-assigned dispute_id in DisputeResponse.
// Uniqueness is scoped to the verified RFC 9421 signer: the server dedupes per
// (authenticated caller, key), never globally, so a key chosen by one caller
// cannot collide with another's cached result.
IdempotencyKey string `protobuf:"bytes,2,opt,name=idempotency_key,json=idempotencyKey,proto3" json:"idempotency_key,omitempty"`
// Transaction being disputed.
TransactionId string `protobuf:"bytes,3,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"`
// Billing record identifier from the disputed transaction
// (TransactionResultItem.billing_id).
BillingId string `protobuf:"bytes,4,opt,name=billing_id,json=billingId,proto3" json:"billing_id,omitempty"`
// Reason for the dispute.
Reason DisputeReason `protobuf:"varint,5,opt,name=reason,proto3,enum=fora.v1.DisputeReason" json:"reason,omitempty"`
// Human-readable description of the issue.
Description *string `protobuf:"bytes,6,opt,name=description,proto3,oneof" json:"description,omitempty"`
// Evidence: content hash of what was actually received.
// Exchange compares against the hash promised in ResourceIdentity.
ReceivedContentHash *string `` /* 126-byte string literal not displayed */
// Hash algorithm the agent used
ReceivedHashMethod *string `protobuf:"bytes,8,opt,name=received_hash_method,json=receivedHashMethod,proto3,oneof" json:"received_hash_method,omitempty"`
// Must reference a filed UsageReport. The agent MUST file a UsageReport
// (via ReportUsage RPC) and receive a report_id BEFORE filing a dispute.
// This prevents fire-and-forget disputes and ensures the Exchange has
// the complete evidence chain: what was offered, what was transacted,
// what the agent reported using, and what the agent disputes.
// The dispute chain: Transaction → UsageReport → Dispute.
ReportId string `protobuf:"bytes,9,opt,name=report_id,json=reportId,proto3" json:"report_id,omitempty"`
// REQUIRED. Bare host of the recipient this request is addressed to (e.g.
// "exchange.example" or "exchange.example:8081"). See "Request recipient" in
// the file header. The dispute's subject identifiers above cannot stand in for
// it: transaction_id, billing_id and report_id are opaque and Exchange-scoped,
// so verifying one means a database lookup, while the recipient check must run
// before any lookup happens.
Exchange string `protobuf:"bytes,10,opt,name=exchange,proto3" json:"exchange,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
DisputeRequest — Agent signals a problem with delivered resource.
func (*DisputeRequest) Descriptor
deprecated
func (*DisputeRequest) Descriptor() ([]byte, []int)
Deprecated: Use DisputeRequest.ProtoReflect.Descriptor instead.
func (*DisputeRequest) GetBillingId ¶
func (x *DisputeRequest) GetBillingId() string
func (*DisputeRequest) GetDescription ¶
func (x *DisputeRequest) GetDescription() string
func (*DisputeRequest) GetExchange ¶
func (x *DisputeRequest) GetExchange() string
func (*DisputeRequest) GetExt ¶
func (x *DisputeRequest) GetExt() *structpb.Struct
func (*DisputeRequest) GetExtCritical ¶
func (x *DisputeRequest) GetExtCritical() []string
func (*DisputeRequest) GetIdempotencyKey ¶
func (x *DisputeRequest) GetIdempotencyKey() string
func (*DisputeRequest) GetReason ¶
func (x *DisputeRequest) GetReason() DisputeReason
func (*DisputeRequest) GetReceivedContentHash ¶
func (x *DisputeRequest) GetReceivedContentHash() string
func (*DisputeRequest) GetReceivedHashMethod ¶
func (x *DisputeRequest) GetReceivedHashMethod() string
func (*DisputeRequest) GetReportId ¶
func (x *DisputeRequest) GetReportId() string
func (*DisputeRequest) GetTransactionId ¶
func (x *DisputeRequest) GetTransactionId() string
func (*DisputeRequest) GetVer ¶
func (x *DisputeRequest) GetVer() string
func (*DisputeRequest) ProtoMessage ¶
func (*DisputeRequest) ProtoMessage()
func (*DisputeRequest) ProtoReflect ¶
func (x *DisputeRequest) ProtoReflect() protoreflect.Message
func (*DisputeRequest) Reset ¶
func (x *DisputeRequest) Reset()
func (*DisputeRequest) String ¶
func (x *DisputeRequest) String() string
type DisputeResponse ¶
type DisputeResponse struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Exchange-assigned dispute case identifier.
DisputeId *string `protobuf:"bytes,2,opt,name=dispute_id,json=disputeId,proto3,oneof" json:"dispute_id,omitempty"`
// Expected resolution timeline.
EstimatedResolution *durationpb.Duration `protobuf:"bytes,4,opt,name=estimated_resolution,json=estimatedResolution,proto3,oneof" json:"estimated_resolution,omitempty"`
// Current lifecycle status of the dispute. Tracks progression through
// the three-tier resolution process:
//
// Tier 1 (automated, <1s): FILED → AUTO_RESOLVED or EVIDENCE_NEEDED
// Tier 2 (rule-based, <24h): UNDER_REVIEW → RESOLVED
// Tier 3 (pattern investigation, async): ESCALATED → SETTLED → FINAL
//
// Losing party may appeal: RESOLVED → APPEALED → back to UNDER_REVIEW.
Status DisputeStatus `protobuf:"varint,5,opt,name=status,proto3,enum=fora.v1.DisputeStatus" json:"status,omitempty"`
// Resolution outcome, populated when the dispute reaches a terminal
// state (RESOLVED, SETTLED, or FINAL). Absent while dispute is in
// progress (FILED, UNDER_REVIEW, ESCALATED, etc.).
Resolution *ResolutionType `protobuf:"varint,6,opt,name=resolution,proto3,enum=fora.v1.ResolutionType,oneof" json:"resolution,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
DisputeResponse — Exchange acknowledges the dispute.
func (*DisputeResponse) Descriptor
deprecated
func (*DisputeResponse) Descriptor() ([]byte, []int)
Deprecated: Use DisputeResponse.ProtoReflect.Descriptor instead.
func (*DisputeResponse) GetDisputeId ¶
func (x *DisputeResponse) GetDisputeId() string
func (*DisputeResponse) GetEstimatedResolution ¶
func (x *DisputeResponse) GetEstimatedResolution() *durationpb.Duration
func (*DisputeResponse) GetExt ¶
func (x *DisputeResponse) GetExt() *structpb.Struct
func (*DisputeResponse) GetExtCritical ¶
func (x *DisputeResponse) GetExtCritical() []string
func (*DisputeResponse) GetResolution ¶
func (x *DisputeResponse) GetResolution() ResolutionType
func (*DisputeResponse) GetStatus ¶
func (x *DisputeResponse) GetStatus() DisputeStatus
func (*DisputeResponse) GetVer ¶
func (x *DisputeResponse) GetVer() string
func (*DisputeResponse) ProtoMessage ¶
func (*DisputeResponse) ProtoMessage()
func (*DisputeResponse) ProtoReflect ¶
func (x *DisputeResponse) ProtoReflect() protoreflect.Message
func (*DisputeResponse) Reset ¶
func (x *DisputeResponse) Reset()
func (*DisputeResponse) String ¶
func (x *DisputeResponse) String() string
type DisputeStatus ¶
type DisputeStatus int32
DisputeStatus — Lifecycle state of a resource dispute.
Disputes progress through a three-tier resolution process:
Tier 1 (automated, <1 second, ~99% of cases): Auto-credit when evidence is independently verifiable (CDN logs, cryptographic hash comparison). FILED → AUTO_RESOLVED. Tier 2 (rule-based review, <24 hours, ~0.9%): Exchange applies concrete resolution rules when Tier 1 evidence is inconclusive. FILED → EVIDENCE_NEEDED → UNDER_REVIEW → RESOLVED. Tier 3 (pattern investigation, async, ~0.1%): Triggered by aggregate patterns (e.g., agent dispute rate >5%, provider token discrepancy >2%). ESCALATED → SETTLED → FINAL.
Appeals: losing party may appeal with new evidence.
RESOLVED → APPEALED → UNDER_REVIEW (re-enters Tier 2).
const ( DisputeStatus_DISPUTE_STATUS_UNSPECIFIED DisputeStatus = 0 // unset — output/optional; zero is a valid not-applicable/unset state // Agent submitted DisputeRequest. Initial state. DisputeStatus_DISPUTE_STATUS_FILED DisputeStatus = 1 // Exchange auto-resolved via Tier 1 rules (CDN logs, hash comparison). DisputeStatus_DISPUTE_STATUS_AUTO_RESOLVED DisputeStatus = 2 // Exchange requests additional evidence from the agent or provider. DisputeStatus_DISPUTE_STATUS_EVIDENCE_NEEDED DisputeStatus = 3 // Exchange is reviewing with Tier 2 resolution rules. DisputeStatus_DISPUTE_STATUS_UNDER_REVIEW DisputeStatus = 4 // Escalated to Tier 3 pattern-based investigation. DisputeStatus_DISPUTE_STATUS_ESCALATED DisputeStatus = 5 // Decision made (credit, redelivery, rejected). See resolution field. DisputeStatus_DISPUTE_STATUS_RESOLVED DisputeStatus = 6 // Losing party appealed with new evidence. Re-enters review. DisputeStatus_DISPUTE_STATUS_APPEALED DisputeStatus = 7 // Financial settlement applied. DisputeStatus_DISPUTE_STATUS_SETTLED DisputeStatus = 8 // No further appeals. Dispute closed. DisputeStatus_DISPUTE_STATUS_FINAL DisputeStatus = 9 )
func (DisputeStatus) Descriptor ¶
func (DisputeStatus) Descriptor() protoreflect.EnumDescriptor
func (DisputeStatus) Enum ¶
func (x DisputeStatus) Enum() *DisputeStatus
func (DisputeStatus) EnumDescriptor
deprecated
func (DisputeStatus) EnumDescriptor() ([]byte, []int)
Deprecated: Use DisputeStatus.Descriptor instead.
func (DisputeStatus) Number ¶
func (x DisputeStatus) Number() protoreflect.EnumNumber
func (DisputeStatus) String ¶
func (x DisputeStatus) String() string
func (DisputeStatus) Type ¶
func (DisputeStatus) Type() protoreflect.EnumType
type DomainVerificationChallenge ¶
type DomainVerificationChallenge struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Opaque challenge token. Provider must serve this at:
// https://{domain}/.well-known/fora-verify/{token}
Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"`
// When this challenge expires. Provider must confirm before this time.
ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"`
// The exact URL the Exchange will fetch to verify.
VerificationUrl string `protobuf:"bytes,4,opt,name=verification_url,json=verificationUrl,proto3" json:"verification_url,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
DomainVerificationChallenge — Exchange returns a challenge.
func (*DomainVerificationChallenge) Descriptor
deprecated
func (*DomainVerificationChallenge) Descriptor() ([]byte, []int)
Deprecated: Use DomainVerificationChallenge.ProtoReflect.Descriptor instead.
func (*DomainVerificationChallenge) GetExpiresAt ¶
func (x *DomainVerificationChallenge) GetExpiresAt() *timestamppb.Timestamp
func (*DomainVerificationChallenge) GetExt ¶
func (x *DomainVerificationChallenge) GetExt() *structpb.Struct
func (*DomainVerificationChallenge) GetExtCritical ¶
func (x *DomainVerificationChallenge) GetExtCritical() []string
func (*DomainVerificationChallenge) GetToken ¶
func (x *DomainVerificationChallenge) GetToken() string
func (*DomainVerificationChallenge) GetVer ¶
func (x *DomainVerificationChallenge) GetVer() string
func (*DomainVerificationChallenge) GetVerificationUrl ¶
func (x *DomainVerificationChallenge) GetVerificationUrl() string
func (*DomainVerificationChallenge) ProtoMessage ¶
func (*DomainVerificationChallenge) ProtoMessage()
func (*DomainVerificationChallenge) ProtoReflect ¶
func (x *DomainVerificationChallenge) ProtoReflect() protoreflect.Message
func (*DomainVerificationChallenge) Reset ¶
func (x *DomainVerificationChallenge) Reset()
func (*DomainVerificationChallenge) String ¶
func (x *DomainVerificationChallenge) String() string
type DomainVerificationConfirmation ¶
type DomainVerificationConfirmation struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// The domain being verified.
Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
// The challenge token (echoed from DomainVerificationChallenge).
Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"`
// Optional: the delivery endpoint's verification key, registered atomically
// with the domain on successful verification. PUBLIC key material only.
// The Exchange signs delivery URLs with a private key it holds and never
// publishes; a delivery endpoint verifies with the public half and holds
// nothing secret. Where the Exchange has to sign with a key the provider
// generated -- a CloudFront trusted key group is the provider's own AWS
// resource -- the private half is provisioned to the Exchange out of band
// and never travels in this field.
//
// Format follows cdn_type: a PEM-encoded RSA public key for "cloudfront", or
// the base64url-encoded raw Ed25519 public key (the JWK "x" value) for
// "edge-ed25519".
SigningKey *string `protobuf:"bytes,4,opt,name=signing_key,json=signingKey,proto3,oneof" json:"signing_key,omitempty"`
// Which delivery-URL verification scheme this key is for: "edge-ed25519" (a
// code-capable edge that verifies the Ed25519 URL signature itself) or
// "cloudfront" (AWS CloudFront trusted key groups, RSA, verified natively by
// the CDN). One value per Exchange-side tenant signing scheme:
// "edge-ed25519" is ED25519, "cloudfront" is AWS_CLOUDFRONT_RSA.
CdnType *string `protobuf:"bytes,5,opt,name=cdn_type,json=cdnType,proto3,oneof" json:"cdn_type,omitempty"`
// REQUIRED. Bare host of the recipient this request is addressed to (e.g.
// "exchange.example" or "exchange.example:8081"). See "Request recipient" in
// the file header. Distinct from `domain` above, which is the provider domain
// being verified — the subject of the request, not its recipient.
Exchange string `protobuf:"bytes,6,opt,name=exchange,proto3" json:"exchange,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
DomainVerificationConfirmation — Provider confirms the challenge is placed.
func (*DomainVerificationConfirmation) Descriptor
deprecated
func (*DomainVerificationConfirmation) Descriptor() ([]byte, []int)
Deprecated: Use DomainVerificationConfirmation.ProtoReflect.Descriptor instead.
func (*DomainVerificationConfirmation) GetCdnType ¶
func (x *DomainVerificationConfirmation) GetCdnType() string
func (*DomainVerificationConfirmation) GetDomain ¶
func (x *DomainVerificationConfirmation) GetDomain() string
func (*DomainVerificationConfirmation) GetExchange ¶
func (x *DomainVerificationConfirmation) GetExchange() string
func (*DomainVerificationConfirmation) GetExt ¶
func (x *DomainVerificationConfirmation) GetExt() *structpb.Struct
func (*DomainVerificationConfirmation) GetExtCritical ¶
func (x *DomainVerificationConfirmation) GetExtCritical() []string
func (*DomainVerificationConfirmation) GetSigningKey ¶
func (x *DomainVerificationConfirmation) GetSigningKey() string
func (*DomainVerificationConfirmation) GetToken ¶
func (x *DomainVerificationConfirmation) GetToken() string
func (*DomainVerificationConfirmation) GetVer ¶
func (x *DomainVerificationConfirmation) GetVer() string
func (*DomainVerificationConfirmation) ProtoMessage ¶
func (*DomainVerificationConfirmation) ProtoMessage()
func (*DomainVerificationConfirmation) ProtoReflect ¶
func (x *DomainVerificationConfirmation) ProtoReflect() protoreflect.Message
func (*DomainVerificationConfirmation) Reset ¶
func (x *DomainVerificationConfirmation) Reset()
func (*DomainVerificationConfirmation) String ¶
func (x *DomainVerificationConfirmation) String() string
type DomainVerificationFailure ¶
type DomainVerificationFailure struct {
// The failure reason (defined-only, non-zero)
Reason DomainVerificationFailureReason `protobuf:"varint,1,opt,name=reason,proto3,enum=fora.v1.DomainVerificationFailureReason" json:"reason,omitempty"`
// contains filtered or unexported fields
}
DomainVerificationFailure — RequestDomainVerification / ConfirmDomainVerification failed.
func (*DomainVerificationFailure) Descriptor
deprecated
func (*DomainVerificationFailure) Descriptor() ([]byte, []int)
Deprecated: Use DomainVerificationFailure.ProtoReflect.Descriptor instead.
func (*DomainVerificationFailure) GetReason ¶
func (x *DomainVerificationFailure) GetReason() DomainVerificationFailureReason
func (*DomainVerificationFailure) ProtoMessage ¶
func (*DomainVerificationFailure) ProtoMessage()
func (*DomainVerificationFailure) ProtoReflect ¶
func (x *DomainVerificationFailure) ProtoReflect() protoreflect.Message
func (*DomainVerificationFailure) Reset ¶
func (x *DomainVerificationFailure) Reset()
func (*DomainVerificationFailure) String ¶
func (x *DomainVerificationFailure) String() string
type DomainVerificationFailureReason ¶
type DomainVerificationFailureReason int32
DomainVerificationFailureReason — why provider domain verification failed.
const ( DomainVerificationFailureReason_DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED DomainVerificationFailureReason = 0 // unset — rejected at ingest DomainVerificationFailureReason_DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND DomainVerificationFailureReason = 1 // token not served at the well-known path DomainVerificationFailureReason_DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH DomainVerificationFailureReason = 2 // served token does not match the issued token DomainVerificationFailureReason_DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED DomainVerificationFailureReason = 3 // confirmation arrived after the challenge expired DomainVerificationFailureReason_DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED DomainVerificationFailureReason = 4 // Exchange could not fetch the verification URL DomainVerificationFailureReason_DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED DomainVerificationFailureReason = 5 // fora.json does not list this Exchange DomainVerificationFailureReason_DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED DomainVerificationFailureReason = 6 // signing-key registration failed during confirmation )
func (DomainVerificationFailureReason) Descriptor ¶
func (DomainVerificationFailureReason) Descriptor() protoreflect.EnumDescriptor
func (DomainVerificationFailureReason) Enum ¶
func (x DomainVerificationFailureReason) Enum() *DomainVerificationFailureReason
func (DomainVerificationFailureReason) EnumDescriptor
deprecated
func (DomainVerificationFailureReason) EnumDescriptor() ([]byte, []int)
Deprecated: Use DomainVerificationFailureReason.Descriptor instead.
func (DomainVerificationFailureReason) Number ¶
func (x DomainVerificationFailureReason) Number() protoreflect.EnumNumber
func (DomainVerificationFailureReason) String ¶
func (x DomainVerificationFailureReason) String() string
func (DomainVerificationFailureReason) Type ¶
func (DomainVerificationFailureReason) Type() protoreflect.EnumType
type DomainVerificationRequest ¶
type DomainVerificationRequest struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// The provider domain to verify (e.g., "techcrunch.com").
Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
// Caller identity (registered with the Exchange).
CallerId *string `protobuf:"bytes,3,opt,name=caller_id,json=callerId,proto3,oneof" json:"caller_id,omitempty"`
// REQUIRED. Bare host of the recipient this request is addressed to (e.g.
// "exchange.example" or "exchange.example:8081"). See "Request recipient" in
// the file header. Distinct from `domain` above, which is the provider domain
// being verified — the subject of the request, not its recipient.
Exchange string `protobuf:"bytes,4,opt,name=exchange,proto3" json:"exchange,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
DomainVerificationRequest — Provider requests a verification challenge.
func (*DomainVerificationRequest) Descriptor
deprecated
func (*DomainVerificationRequest) Descriptor() ([]byte, []int)
Deprecated: Use DomainVerificationRequest.ProtoReflect.Descriptor instead.
func (*DomainVerificationRequest) GetCallerId ¶
func (x *DomainVerificationRequest) GetCallerId() string
func (*DomainVerificationRequest) GetDomain ¶
func (x *DomainVerificationRequest) GetDomain() string
func (*DomainVerificationRequest) GetExchange ¶
func (x *DomainVerificationRequest) GetExchange() string
func (*DomainVerificationRequest) GetExt ¶
func (x *DomainVerificationRequest) GetExt() *structpb.Struct
func (*DomainVerificationRequest) GetExtCritical ¶
func (x *DomainVerificationRequest) GetExtCritical() []string
func (*DomainVerificationRequest) GetVer ¶
func (x *DomainVerificationRequest) GetVer() string
func (*DomainVerificationRequest) ProtoMessage ¶
func (*DomainVerificationRequest) ProtoMessage()
func (*DomainVerificationRequest) ProtoReflect ¶
func (x *DomainVerificationRequest) ProtoReflect() protoreflect.Message
func (*DomainVerificationRequest) Reset ¶
func (x *DomainVerificationRequest) Reset()
func (*DomainVerificationRequest) String ¶
func (x *DomainVerificationRequest) String() string
type DomainVerificationResult ¶
type DomainVerificationResult struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// If signing_key was provided: confirmation of key registration.
KeyId *string `protobuf:"bytes,2,opt,name=key_id,json=keyId,proto3,oneof" json:"key_id,omitempty"`
// Verification is valid until this time. Provider must re-verify periodically.
ValidUntil *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=valid_until,json=validUntil,proto3,oneof" json:"valid_until,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
DomainVerificationResult — Exchange confirms verification.
func (*DomainVerificationResult) Descriptor
deprecated
func (*DomainVerificationResult) Descriptor() ([]byte, []int)
Deprecated: Use DomainVerificationResult.ProtoReflect.Descriptor instead.
func (*DomainVerificationResult) GetExt ¶
func (x *DomainVerificationResult) GetExt() *structpb.Struct
func (*DomainVerificationResult) GetExtCritical ¶
func (x *DomainVerificationResult) GetExtCritical() []string
func (*DomainVerificationResult) GetKeyId ¶
func (x *DomainVerificationResult) GetKeyId() string
func (*DomainVerificationResult) GetValidUntil ¶
func (x *DomainVerificationResult) GetValidUntil() *timestamppb.Timestamp
func (*DomainVerificationResult) GetVer ¶
func (x *DomainVerificationResult) GetVer() string
func (*DomainVerificationResult) ProtoMessage ¶
func (*DomainVerificationResult) ProtoMessage()
func (*DomainVerificationResult) ProtoReflect ¶
func (x *DomainVerificationResult) ProtoReflect() protoreflect.Message
func (*DomainVerificationResult) Reset ¶
func (x *DomainVerificationResult) Reset()
func (*DomainVerificationResult) String ¶
func (x *DomainVerificationResult) String() string
type ErrorDetail ¶
type ErrorDetail struct {
// Developer-facing, NON-authoritative human message. Clients MUST branch on
// the typed reason below, never on this text. Servers SHOULD NOT place secrets,
// PII, or existence/authorization detail here that the closed typed reason
// deliberately withholds: unlike the enum, this free text is unbounded and
// easily becomes an existence oracle or leak channel (see `metadata`).
Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
// Stable grouping for the failing surface, e.g. "fora.v1.ExchangeService".
// Mirrors google.rpc.ErrorInfo.domain so generic tooling can group errors.
Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
// Dynamic key/value context that also appears in `message` (ids, limits,
// axes). Mirrors google.rpc.ErrorInfo.metadata. Strongly-typed context rides
// in the per-domain reason block below instead. Same leakage rule as `message`:
// servers SHOULD NOT put secrets, PII, or withheld existence/authorization
// detail here — it is the same potential side channel as the absence oracle.
Metadata map[string]string `` /* 143-byte string literal not displayed */
// Exactly one typed reason block, selected by the failing method. Absent for
// generic transport-class failures (e.g. INVALID_ARGUMENT, INTERNAL) that
// carry no domain-specific reason.
//
// Types that are valid to be assigned to Reason:
//
// *ErrorDetail_TransactionDenial
// *ErrorDetail_CatalogRejection
// *ErrorDetail_RegistrationFailure
// *ErrorDetail_DisputeFailure
// *ErrorDetail_DomainVerificationFailure
// *ErrorDetail_RetrievalAuthFailure
// *ErrorDetail_UsageReportRejection
Reason isErrorDetail_Reason `protobuf_oneof:"reason"`
// contains filtered or unexported fields
}
ErrorDetail — the structured detail attached to every non-OK transport error.
func (*ErrorDetail) Descriptor
deprecated
func (*ErrorDetail) Descriptor() ([]byte, []int)
Deprecated: Use ErrorDetail.ProtoReflect.Descriptor instead.
func (*ErrorDetail) GetCatalogRejection ¶
func (x *ErrorDetail) GetCatalogRejection() *CatalogRejection
func (*ErrorDetail) GetDisputeFailure ¶
func (x *ErrorDetail) GetDisputeFailure() *DisputeFailure
func (*ErrorDetail) GetDomain ¶
func (x *ErrorDetail) GetDomain() string
func (*ErrorDetail) GetDomainVerificationFailure ¶
func (x *ErrorDetail) GetDomainVerificationFailure() *DomainVerificationFailure
func (*ErrorDetail) GetMessage ¶
func (x *ErrorDetail) GetMessage() string
func (*ErrorDetail) GetMetadata ¶
func (x *ErrorDetail) GetMetadata() map[string]string
func (*ErrorDetail) GetReason ¶
func (x *ErrorDetail) GetReason() isErrorDetail_Reason
func (*ErrorDetail) GetRegistrationFailure ¶
func (x *ErrorDetail) GetRegistrationFailure() *RegistrationFailure
func (*ErrorDetail) GetRetrievalAuthFailure ¶
func (x *ErrorDetail) GetRetrievalAuthFailure() *RetrievalAuthFailure
func (*ErrorDetail) GetTransactionDenial ¶
func (x *ErrorDetail) GetTransactionDenial() *TransactionDenial
func (*ErrorDetail) GetUsageReportRejection ¶
func (x *ErrorDetail) GetUsageReportRejection() *UsageReportRejection
func (*ErrorDetail) ProtoMessage ¶
func (*ErrorDetail) ProtoMessage()
func (*ErrorDetail) ProtoReflect ¶
func (x *ErrorDetail) ProtoReflect() protoreflect.Message
func (*ErrorDetail) Reset ¶
func (x *ErrorDetail) Reset()
func (*ErrorDetail) String ¶
func (x *ErrorDetail) String() string
type ErrorDetail_CatalogRejection ¶
type ErrorDetail_CatalogRejection struct {
// `reason` oneof — CatalogService rejection
CatalogRejection *CatalogRejection `protobuf:"bytes,11,opt,name=catalog_rejection,json=catalogRejection,proto3,oneof"`
}
type ErrorDetail_DisputeFailure ¶
type ErrorDetail_DisputeFailure struct {
// `reason` oneof — DisputeTransaction filing refused
DisputeFailure *DisputeFailure `protobuf:"bytes,13,opt,name=dispute_failure,json=disputeFailure,proto3,oneof"`
}
type ErrorDetail_DomainVerificationFailure ¶
type ErrorDetail_DomainVerificationFailure struct {
// `reason` oneof — domain verification failed
DomainVerificationFailure *DomainVerificationFailure `protobuf:"bytes,14,opt,name=domain_verification_failure,json=domainVerificationFailure,proto3,oneof"`
}
type ErrorDetail_RegistrationFailure ¶
type ErrorDetail_RegistrationFailure struct {
// `reason` oneof — agent/provider registration refused
RegistrationFailure *RegistrationFailure `protobuf:"bytes,12,opt,name=registration_failure,json=registrationFailure,proto3,oneof"`
}
type ErrorDetail_RetrievalAuthFailure ¶
type ErrorDetail_RetrievalAuthFailure struct {
// `reason` oneof — signed-URL / proof-of-possession check failed
RetrievalAuthFailure *RetrievalAuthFailure `protobuf:"bytes,15,opt,name=retrieval_auth_failure,json=retrievalAuthFailure,proto3,oneof"`
}
type ErrorDetail_TransactionDenial ¶
type ErrorDetail_TransactionDenial struct {
// `reason` oneof — ExecuteTransaction denial
TransactionDenial *TransactionDenial `protobuf:"bytes,10,opt,name=transaction_denial,json=transactionDenial,proto3,oneof"`
}
type ErrorDetail_UsageReportRejection ¶
type ErrorDetail_UsageReportRejection struct {
// `reason` oneof — ReportUsage filing rejected
UsageReportRejection *UsageReportRejection `protobuf:"bytes,16,opt,name=usage_report_rejection,json=usageReportRejection,proto3,oneof"`
}
type GetAccountStatusRequest ¶
type GetAccountStatusRequest struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// REQUIRED. Bare host of the recipient this request is addressed to (e.g.
// "exchange.example" or "exchange.example:8081"). See "Request recipient" in
// the file header. Accounts are per-Exchange, so "which Exchange am I asking
// about" is not derivable from anything else in this message.
Exchange string `protobuf:"bytes,2,opt,name=exchange,proto3" json:"exchange,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
GetAccountStatusRequest — Agent asks whether its account is active.
func (*GetAccountStatusRequest) Descriptor
deprecated
func (*GetAccountStatusRequest) Descriptor() ([]byte, []int)
Deprecated: Use GetAccountStatusRequest.ProtoReflect.Descriptor instead.
func (*GetAccountStatusRequest) GetExchange ¶
func (x *GetAccountStatusRequest) GetExchange() string
func (*GetAccountStatusRequest) GetExt ¶
func (x *GetAccountStatusRequest) GetExt() *structpb.Struct
func (*GetAccountStatusRequest) GetExtCritical ¶
func (x *GetAccountStatusRequest) GetExtCritical() []string
func (*GetAccountStatusRequest) GetVer ¶
func (x *GetAccountStatusRequest) GetVer() string
func (*GetAccountStatusRequest) ProtoMessage ¶
func (*GetAccountStatusRequest) ProtoMessage()
func (*GetAccountStatusRequest) ProtoReflect ¶
func (x *GetAccountStatusRequest) ProtoReflect() protoreflect.Message
func (*GetAccountStatusRequest) Reset ¶
func (x *GetAccountStatusRequest) Reset()
func (*GetAccountStatusRequest) String ¶
func (x *GetAccountStatusRequest) String() string
type GetAccountStatusResponse ¶
type GetAccountStatusResponse struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// The account handle minted at registration (see RegisterResponse.billing_ref).
// Empty when the calling agent has no account yet.
BillingRef string `protobuf:"bytes,2,opt,name=billing_ref,json=billingRef,proto3" json:"billing_ref,omitempty"`
// Whether the account is currently active.
Active bool `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"`
// The terms document this account ACCEPTED: the "method:hexdigest" value the
// agent echoed in RegisterRequest.terms_digest, which the Exchange recorded
// with the account. This is the read side of that record. Without it the
// protocol required an Exchange to store the acceptance and named the question
// the record exists to answer — "which terms did this operator accept" — while
// giving no way to ask it, so the only party who could check what it had agreed
// to was the party holding the database.
//
// An Exchange that holds a recorded digest for this account MUST return it
// here. Absence has exactly ONE meaning: no acceptance is recorded. Two
// situations produce it — the Exchange publishes no terms_digest, so nothing
// was ever accepted (and per RegisterRequest.terms_digest it MUST NOT record a
// presented value in that case), or the account was created before the operator
// began publishing one. It does NOT mean "this account has no terms", and an
// Exchange MUST NOT withhold a digest it holds: absence is already spoken for,
// so withholding would make the field state something untrue.
//
// The value is what was ACCEPTED, not what is published now. The two differ as
// soon as the operator revises its terms, and that difference is the point:
// comparing this against a freshly fetched WellKnownManifest.terms_digest is how
// an agent discovers that the terms moved under an account it already holds. A
// repeat Register will not tell it — a repeat is answered from the stored record
// and runs no gate at all.
TermsDigest *string `protobuf:"bytes,4,opt,name=terms_digest,json=termsDigest,proto3,oneof" json:"terms_digest,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
GetAccountStatusResponse — Exchange reports the account's current state.
func (*GetAccountStatusResponse) Descriptor
deprecated
func (*GetAccountStatusResponse) Descriptor() ([]byte, []int)
Deprecated: Use GetAccountStatusResponse.ProtoReflect.Descriptor instead.
func (*GetAccountStatusResponse) GetActive ¶
func (x *GetAccountStatusResponse) GetActive() bool
func (*GetAccountStatusResponse) GetBillingRef ¶
func (x *GetAccountStatusResponse) GetBillingRef() string
func (*GetAccountStatusResponse) GetExt ¶
func (x *GetAccountStatusResponse) GetExt() *structpb.Struct
func (*GetAccountStatusResponse) GetExtCritical ¶
func (x *GetAccountStatusResponse) GetExtCritical() []string
func (*GetAccountStatusResponse) GetTermsDigest ¶
func (x *GetAccountStatusResponse) GetTermsDigest() string
func (*GetAccountStatusResponse) GetVer ¶
func (x *GetAccountStatusResponse) GetVer() string
func (*GetAccountStatusResponse) ProtoMessage ¶
func (*GetAccountStatusResponse) ProtoMessage()
func (*GetAccountStatusResponse) ProtoReflect ¶
func (x *GetAccountStatusResponse) ProtoReflect() protoreflect.Message
func (*GetAccountStatusResponse) Reset ¶
func (x *GetAccountStatusResponse) Reset()
func (*GetAccountStatusResponse) String ¶
func (x *GetAccountStatusResponse) String() string
type IngestionSource ¶
type IngestionSource int32
IngestionSource — How the catalog entry was discovered. Used by the Content Ingestion Pipeline to track provenance.
const ( IngestionSource_INGESTION_SOURCE_UNSPECIFIED IngestionSource = 0 // unset — output/optional; zero is a valid not-applicable/unset state IngestionSource_INGESTION_SOURCE_FORA_SITEMAP IngestionSource = 1 // FORA XML namespace in sitemap IngestionSource_INGESTION_SOURCE_RSL IngestionSource = 2 // RSL rsl.txt IngestionSource_INGESTION_SOURCE_SITEMAP IngestionSource = 3 // Standard sitemap.xml IngestionSource_INGESTION_SOURCE_HTML_CRAWL IngestionSource = 4 // HTML crawl + readability extraction IngestionSource_INGESTION_SOURCE_CMS_API IngestionSource = 5 // CMS REST API (WordPress, etc.) IngestionSource_INGESTION_SOURCE_MANUAL IngestionSource = 6 // Manual configuration IngestionSource_INGESTION_SOURCE_CATALOG_API IngestionSource = 7 // Third-party CatalogService push )
func (IngestionSource) Descriptor ¶
func (IngestionSource) Descriptor() protoreflect.EnumDescriptor
func (IngestionSource) Enum ¶
func (x IngestionSource) Enum() *IngestionSource
func (IngestionSource) EnumDescriptor
deprecated
func (IngestionSource) EnumDescriptor() ([]byte, []int)
Deprecated: Use IngestionSource.Descriptor instead.
func (IngestionSource) Number ¶
func (x IngestionSource) Number() protoreflect.EnumNumber
func (IngestionSource) String ¶
func (x IngestionSource) String() string
func (IngestionSource) Type ¶
func (IngestionSource) Type() protoreflect.EnumType
type JsonWebKey ¶
type JsonWebKey struct {
// Key type. FORA v1.0: MUST be "OKP".
Kty string `protobuf:"bytes,2,opt,name=kty,proto3" json:"kty,omitempty"`
// Curve. FORA v1.0: MUST be "Ed25519".
Crv string `protobuf:"bytes,3,opt,name=crv,proto3" json:"crv,omitempty"`
// Intended key use. FORA v1.0: MUST be "sig".
Use string `protobuf:"bytes,4,opt,name=use,proto3" json:"use,omitempty"`
// Signing algorithm. FORA v1.0: MUST be "EdDSA".
Alg string `protobuf:"bytes,5,opt,name=alg,proto3" json:"alg,omitempty"`
// base64url-encoded 32-byte Ed25519 public key.
X string `protobuf:"bytes,6,opt,name=x,proto3" json:"x,omitempty"`
// RFC3339 timestamp. Key is invalid before this instant.
NotBefore string `protobuf:"bytes,7,opt,name=not_before,json=notBefore,proto3" json:"not_before,omitempty"`
// RFC3339 timestamp. Key is invalid at and after this instant
// (strict upper bound).
NotAfter string `protobuf:"bytes,8,opt,name=not_after,json=notAfter,proto3" json:"not_after,omitempty"`
// contains filtered or unexported fields
}
JsonWebKey — Inline RFC 7517 JWK object.
FORA v1.0 supports Ed25519 only: kty="OKP", crv="Ed25519", alg="EdDSA". Additional curves are a later concern.
Time bounds are RFC3339 strings (sortable, ops-debuggable, avoids the JWT nbf/exp collision). At least one key in the served key set (WBAFile.keys) MUST have `not_before <= now < not_after`. Verification MUST reject signatures whose key falls outside its window.
Keys carry no `kid`: the RFC 9421 keyid is the RFC 7638 JWK Thumbprint, computed locally by the verifier. Carrying a kid alongside the thumbprint created a drift surface and is removed.
func (*JsonWebKey) Descriptor
deprecated
func (*JsonWebKey) Descriptor() ([]byte, []int)
Deprecated: Use JsonWebKey.ProtoReflect.Descriptor instead.
func (*JsonWebKey) GetAlg ¶
func (x *JsonWebKey) GetAlg() string
func (*JsonWebKey) GetCrv ¶
func (x *JsonWebKey) GetCrv() string
func (*JsonWebKey) GetKty ¶
func (x *JsonWebKey) GetKty() string
func (*JsonWebKey) GetNotAfter ¶
func (x *JsonWebKey) GetNotAfter() string
func (*JsonWebKey) GetNotBefore ¶
func (x *JsonWebKey) GetNotBefore() string
func (*JsonWebKey) GetUse ¶
func (x *JsonWebKey) GetUse() string
func (*JsonWebKey) GetX ¶
func (x *JsonWebKey) GetX() string
func (*JsonWebKey) ProtoMessage ¶
func (*JsonWebKey) ProtoMessage()
func (*JsonWebKey) ProtoReflect ¶
func (x *JsonWebKey) ProtoReflect() protoreflect.Message
func (*JsonWebKey) Reset ¶
func (x *JsonWebKey) Reset()
func (*JsonWebKey) String ¶
func (x *JsonWebKey) String() string
type KeyRevocationList ¶
type KeyRevocationList struct {
// Server's response time (RFC3339, UTC). Consumers use this to detect
// clock skew.
AsOf *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=as_of,json=asOf,proto3" json:"as_of,omitempty"`
// Complete list of revoked key thumbprints (RFC 7638, base64url-no-pad) at
// `as_of`.
Revoked []string `protobuf:"bytes,2,rep,name=revoked,proto3" json:"revoked,omitempty"`
// contains filtered or unexported fields
}
KeyRevocationList — Body served at WBAFile.revocation_url.
Snapshot semantics: `revoked` is the complete list of revoked key thumbprints (RFC 7638, base64url-no-pad) at `as_of`. Consumers replace their local revocation set on each successful poll (no diff protocol). A revoked thumbprint stays revoked permanently; once dropped from the list, consumers MAY drop it from their local set but the corresponding key SHOULD NOT be re-introduced into WBAFile.keys.
func (*KeyRevocationList) Descriptor
deprecated
func (*KeyRevocationList) Descriptor() ([]byte, []int)
Deprecated: Use KeyRevocationList.ProtoReflect.Descriptor instead.
func (*KeyRevocationList) GetAsOf ¶
func (x *KeyRevocationList) GetAsOf() *timestamppb.Timestamp
func (*KeyRevocationList) GetRevoked ¶
func (x *KeyRevocationList) GetRevoked() []string
func (*KeyRevocationList) ProtoMessage ¶
func (*KeyRevocationList) ProtoMessage()
func (*KeyRevocationList) ProtoReflect ¶
func (x *KeyRevocationList) ProtoReflect() protoreflect.Message
func (*KeyRevocationList) Reset ¶
func (x *KeyRevocationList) Reset()
func (*KeyRevocationList) String ¶
func (x *KeyRevocationList) String() string
type License ¶
type License struct {
// Canonical identity of the license document (RFC 3986). MUST NOT be
// URL-validated — data-labels TDL identifiers use non-URL schemes.
// For REFERENCE_ONLY terms this is the authoritative specification.
// Examples:
//
// "https://creativecommons.org/licenses/by/4.0/"
// "https://techcrunch.com/licensing/ai-terms-2026"
//
// "MUST NOT URL-validate" means do not REJECT non-URL schemes — it does NOT
// mean fetch blindly. A consumer that dereferences this URI MUST apply the
// SSRF countermeasures in the security threat model (T-LIC-1): scheme
// allowlist, block loopback/private/metadata addresses (resolve-then-check),
// fetch via an egress proxy, and treat the response as untrusted content.
// Verify the fetched bytes against `uri_digest` before use.
Uri *string `protobuf:"bytes,1,opt,name=uri,proto3,oneof" json:"uri,omitempty"`
// Stable short identifier: SPDX short-id ("GPL-3.0-only"), TollBit cuid,
// or catalog doc-id. Used by agents and the vocab linter for known-license
// lookup; SHARE_ALIKE derivatives default their scope_license to this.
Id *string `protobuf:"bytes,2,opt,name=id,proto3,oneof" json:"id,omitempty"`
// Human-readable name (licenseType, schema.org node name).
Name *string `protobuf:"bytes,3,opt,name=name,proto3,oneof" json:"name,omitempty"`
// Data-labels TDL: the document at uri is versioned and will not change.
Immutable *bool `protobuf:"varint,4,opt,name=immutable,proto3,oneof" json:"immutable,omitempty"`
// Cryptographic digest of the document at `uri`, in "method:hexdigest" form
// (e.g. "sha256:9f86d081..."). Pins the referenced document so a consumer can
// verify the bytes it fetches match what was offered; covered by the offer
// signature, so it is tamper-evident end to end. REQUIRED whenever `uri` is
// non-empty — any semantics, mutable or not: without a pinned digest a MitM
// (or the publisher) can swap the document the agent reads. The Exchange pins
// it at ingestion (computing it over the safely-fetched document, or
// accepting a publisher-supplied value when uri is not HTTP-fetchable, e.g. a
// non-URL TDL scheme).
//
// The method MUST be a collision-resistant hash — sha256, sha384, or sha512.
// Legacy md5/sha1 are rejected on the wire: a forgeable digest would defeat
// the swap-protection this field exists for. The CEL is STRUCTURE ONLY
// (allowlisted prefix + matching hex length); presence (digest-when-uri) is
// enforced at ingest.
UriDigest *string `protobuf:"bytes,5,opt,name=uri_digest,json=uriDigest,proto3,oneof" json:"uri_digest,omitempty"`
// contains filtered or unexported fields
}
License — Identifies the governing license document for a LicenseTerm.
func (*License) Descriptor
deprecated
func (*License) GetImmutable ¶
func (*License) GetUriDigest ¶
func (*License) ProtoMessage ¶
func (*License) ProtoMessage()
func (*License) ProtoReflect ¶
func (x *License) ProtoReflect() protoreflect.Message
type LicenseTerm ¶
type LicenseTerm struct {
// Governing license document. Authoritative for REFERENCE_ONLY terms, which
// MUST carry a License with a non-empty uri — a REFERENCE_ONLY term that
// references nothing is rejected at ingest.
License *License `protobuf:"bytes,1,opt,name=license,proto3,oneof" json:"license,omitempty"`
// How to interpret the machine fields.
Semantics TermSemantics `protobuf:"varint,2,opt,name=semantics,proto3,enum=fora.v1.TermSemantics" json:"semantics,omitempty"`
// Usage restrictions (function, geography, user-type).
// Multiple restrictions are AND-combined — the agent must satisfy all of them.
// At most 8, and this list is the one of the three that does NOT carry the
// contract's usual 64: only one restriction per axis is valid, the axis enum
// is defined-only, so four is the longest conformant list and eight leaves
// room for an axis this version does not have. Like the caps on quotas and
// obligations, this one bounds the DOCUMENT — how many restrictions one term
// may carry — and not the work of checking it: a validator walks every element
// it is handed before any cardinality rule is reported, so an over-cap list is
// traversed in full on its way to being refused.
//
// What makes this list different is that one rule walks it against ITSELF. The
// one-per-kind rule below is quadratic, so it carries its own size test and
// stays silent above this cap; a conformance guard holds the two numbers equal,
// because a cap raised without the test would leave the lists in between
// unchecked for duplicate axes and accepted. The neighbouring disjointness rule
// on each element is quadratic only in that element's two token lists, both
// capped at 64, so its cost is bounded per restriction and linear across the
// list — it needs no such test.
Restrictions []*Restriction `protobuf:"bytes,3,rep,name=restrictions,proto3" json:"restrictions,omitempty"`
// Usage caps. The agent must not exceed any individual Quota.
// At most 64, the bound every per-message list in this contract carries when
// no rule walks it more than once. It bounds what one term may carry, not the
// work of checking one — a validator walks every element it is handed before
// the cap is reported, so the cost of checking is bounded at the transport.
Quotas []*Quota `protobuf:"bytes,4,rep,name=quotas,proto3" json:"quotas,omitempty"`
// Post-use behavioral requirements.
// At most 64, for the reason quotas carries.
Obligations []*Obligation `protobuf:"bytes,5,rep,name=obligations,proto3" json:"obligations,omitempty"`
// Pricing for this term. REQUIRED for every term regardless of semantics —
// an agent cannot act on a priceless term, so absent Pricing is a validation
// error at ingest. model = FREE must be stated explicitly (absent Pricing is
// not free). A REFERENCE_ONLY term states its price here too; its License
// governs the human-readable terms but does not replace the machine-readable
// price.
Pricing *Pricing `protobuf:"bytes,6,opt,name=pricing,proto3,oneof" json:"pricing,omitempty"`
// Delegation scope-gating: the Exchange returns this term to an agent iff the
// agent's delegation grant covers ALL of these scopes (AND-semantics).
// Empty = public. A subscription term is Pricing{model:FREE} +
// scopes:["subscription:..."].
//
// Coverage uses the SAME matching rule as Requester/delegation scopes:
// segment-wise (":" separated), each granted segment must equal the
// corresponding required segment or be "*", a terminal "*" matches all
// remaining segments, and there is NO implicit prefix match (a grant
// narrower than the requirement does not cover it). "dist:*" covers
// "dist:US" and "dist:US:CA"; "dist" covers only "dist". There is exactly
// one scope-matching algorithm across the protocol.
Scopes []string `protobuf:"bytes,7,rep,name=scopes,proto3" json:"scopes,omitempty"`
// Informational human-readable name for this sub-part (sub-part terms).
PartLabel *string `protobuf:"bytes,8,opt,name=part_label,json=partLabel,proto3,oneof" json:"part_label,omitempty"`
// contains filtered or unexported fields
}
LicenseTerm — Universal licensing unit.
One LicenseTerm describes one complete access arrangement for a resource. A resource carries zero or more terms; having multiple terms is the normal case (one per use category, user type, or commercial arrangement).
The same LicenseTerm shape appears at ingestion (ResourceEntry.terms) and at emission (Offer.terms). The Exchange stores what the publisher pushed and surfaces it on discovery, so agents see the same terms the publisher declared — no translation or reformulation.
Validation rules:
- Pricing MUST be present on EVERY term, regardless of semantics. Absent Pricing → reject at ingest: an agent cannot act on a term with no price. This holds for REFERENCE_ONLY too — its License governs the human-readable terms, but the machine-readable price is still stated here, not deferred to the document.
- model=FREE must be explicit. Absent Pricing ≠ free. A term may be FREE under an arbitrary license; the agent still needs the price stated so it knows the access is free rather than unpriced.
- REFERENCE_ONLY terms MUST carry a License with a non-empty uri. A REFERENCE_ONLY term that references no document is meaningless → reject at ingest.
- Restriction tokens are validated against the vocab registry. Unknown tokens produce a PushResourcesResponse.warnings[] entry but do NOT cause rejection (forward-compatible).
func (*LicenseTerm) Descriptor
deprecated
func (*LicenseTerm) Descriptor() ([]byte, []int)
Deprecated: Use LicenseTerm.ProtoReflect.Descriptor instead.
func (*LicenseTerm) GetLicense ¶
func (x *LicenseTerm) GetLicense() *License
func (*LicenseTerm) GetObligations ¶
func (x *LicenseTerm) GetObligations() []*Obligation
func (*LicenseTerm) GetPartLabel ¶
func (x *LicenseTerm) GetPartLabel() string
func (*LicenseTerm) GetPricing ¶
func (x *LicenseTerm) GetPricing() *Pricing
func (*LicenseTerm) GetQuotas ¶
func (x *LicenseTerm) GetQuotas() []*Quota
func (*LicenseTerm) GetRestrictions ¶
func (x *LicenseTerm) GetRestrictions() []*Restriction
func (*LicenseTerm) GetScopes ¶
func (x *LicenseTerm) GetScopes() []string
func (*LicenseTerm) GetSemantics ¶
func (x *LicenseTerm) GetSemantics() TermSemantics
func (*LicenseTerm) ProtoMessage ¶
func (*LicenseTerm) ProtoMessage()
func (*LicenseTerm) ProtoReflect ¶
func (x *LicenseTerm) ProtoReflect() protoreflect.Message
func (*LicenseTerm) Reset ¶
func (x *LicenseTerm) Reset()
func (*LicenseTerm) String ¶
func (x *LicenseTerm) String() string
type Obligation ¶
type Obligation struct {
// What the agent must do.
Kind ObligationKind `protobuf:"varint,1,opt,name=kind,proto3,enum=fora.v1.ObligationKind" json:"kind,omitempty"`
// When the obligation activates.
Trigger ObligationTrigger `protobuf:"varint,2,opt,name=trigger,proto3,enum=fora.v1.ObligationTrigger" json:"trigger,omitempty"`
// The license that derivatives must be released under. REQUIRED for
// SHARE_ALIKE (rejected if absent), where it MUST identify a license — set
// `id` (SPDX short-id, the common copyleft case, often the term's own
// License.id) and/or `uri`. Because it is a License, a referenced `uri`
// inherits the uri_digest swap-protection rule: a uri without a digest is
// rejected, exactly as for any other license reference.
ScopeLicense *License `protobuf:"bytes,3,opt,name=scope_license,json=scopeLicense,proto3,oneof" json:"scope_license,omitempty"`
// Free-form detail: attribution string, notice file URI, etc.
// OBLIGATION_KIND_OTHER without it → lint warning.
Detail *string `protobuf:"bytes,4,opt,name=detail,proto3,oneof" json:"detail,omitempty"`
// contains filtered or unexported fields
}
Obligation — A post-use behavioral requirement attached to a LicenseTerm.
Examples:
Attribution on display: cite the author whenever content is shown to a user. Share-alike on derivative: AI-generated content that incorporates this work must be released under the same license. Notice on distribution: include the copyright notice when distributing copies.
func (*Obligation) Descriptor
deprecated
func (*Obligation) Descriptor() ([]byte, []int)
Deprecated: Use Obligation.ProtoReflect.Descriptor instead.
func (*Obligation) GetDetail ¶
func (x *Obligation) GetDetail() string
func (*Obligation) GetKind ¶
func (x *Obligation) GetKind() ObligationKind
func (*Obligation) GetScopeLicense ¶
func (x *Obligation) GetScopeLicense() *License
func (*Obligation) GetTrigger ¶
func (x *Obligation) GetTrigger() ObligationTrigger
func (*Obligation) ProtoMessage ¶
func (*Obligation) ProtoMessage()
func (*Obligation) ProtoReflect ¶
func (x *Obligation) ProtoReflect() protoreflect.Message
func (*Obligation) Reset ¶
func (x *Obligation) Reset()
func (*Obligation) String ¶
func (x *Obligation) String() string
type ObligationKind ¶
type ObligationKind int32
ObligationKind — What the agent must do after use.
const ( ObligationKind_OBLIGATION_KIND_UNSPECIFIED ObligationKind = 0 // unset — rejected at ingest ObligationKind_OBLIGATION_KIND_ATTRIBUTION ObligationKind = 1 // Credit the author or publisher whenever the resource is used ObligationKind_OBLIGATION_KIND_CONTRIBUTION ObligationKind = 2 // Good-faith payment — amount suggested, not contractually fixed ObligationKind_OBLIGATION_KIND_SHARE_ALIKE ObligationKind = 3 // Derivatives must be released under the same / compatible license (CC-BY-SA / GPL style); scope_license required ObligationKind_OBLIGATION_KIND_NETWORK_COPYLEFT ObligationKind = 4 // Network service triggers copyleft (AGPL style) ObligationKind_OBLIGATION_KIND_NOTICE ObligationKind = 5 // Include the specified copyright notice ObligationKind_OBLIGATION_KIND_OTHER ObligationKind = 6 // Custom requirement, described in Obligation.detail )
func (ObligationKind) Descriptor ¶
func (ObligationKind) Descriptor() protoreflect.EnumDescriptor
func (ObligationKind) Enum ¶
func (x ObligationKind) Enum() *ObligationKind
func (ObligationKind) EnumDescriptor
deprecated
func (ObligationKind) EnumDescriptor() ([]byte, []int)
Deprecated: Use ObligationKind.Descriptor instead.
func (ObligationKind) Number ¶
func (x ObligationKind) Number() protoreflect.EnumNumber
func (ObligationKind) String ¶
func (x ObligationKind) String() string
func (ObligationKind) Type ¶
func (ObligationKind) Type() protoreflect.EnumType
type ObligationTrigger ¶
type ObligationTrigger int32
ObligationTrigger — When the obligation activates.
const ( ObligationTrigger_OBLIGATION_TRIGGER_UNSPECIFIED ObligationTrigger = 0 // unset — rejected at ingest ObligationTrigger_OBLIGATION_TRIGGER_ON_USE ObligationTrigger = 1 // Triggered on any use ObligationTrigger_OBLIGATION_TRIGGER_ON_DISTRIBUTION ObligationTrigger = 2 // Triggered when copies are distributed ObligationTrigger_OBLIGATION_TRIGGER_ON_NETWORK_SERVICE ObligationTrigger = 3 // Triggered when served over a network (AGPL) ObligationTrigger_OBLIGATION_TRIGGER_ON_DERIVATIVE ObligationTrigger = 4 // Triggered when a derivative work is produced )
func (ObligationTrigger) Descriptor ¶
func (ObligationTrigger) Descriptor() protoreflect.EnumDescriptor
func (ObligationTrigger) Enum ¶
func (x ObligationTrigger) Enum() *ObligationTrigger
func (ObligationTrigger) EnumDescriptor
deprecated
func (ObligationTrigger) EnumDescriptor() ([]byte, []int)
Deprecated: Use ObligationTrigger.Descriptor instead.
func (ObligationTrigger) Number ¶
func (x ObligationTrigger) Number() protoreflect.EnumNumber
func (ObligationTrigger) String ¶
func (x ObligationTrigger) String() string
func (ObligationTrigger) Type ¶
func (ObligationTrigger) Type() protoreflect.EnumType
type Offer ¶
type Offer struct {
// Unique identifier for this offer, assigned by the Exchange.
// Opaque to the caller: not derived from the resource, its URL, or any
// other field, and carries no meaning beyond identifying this offer.
// Two offers for the same resource have different offer_ids.
OfferId string `protobuf:"bytes,1,opt,name=offer_id,json=offerId,proto3" json:"offer_id,omitempty"`
// Resource title (human-readable, for display/logging).
Title *string `protobuf:"bytes,2,opt,name=title,proto3,oneof" json:"title,omitempty"`
// Pricing for this offer. An offer represents a single licensing
// arrangement: each projected LicenseTerm yields its own offer, so this is
// that term's pricing (the authoritative copy lives in `terms[].pricing`).
// Used for cross-exchange comparison and Broker ranking. A resource with
// multiple alternative terms (e.g. dual-licensed) produces multiple separate
// offers, one per term — never one offer with a "headline" picked among them.
Pricing *Pricing `protobuf:"bytes,3,opt,name=pricing,proto3" json:"pricing,omitempty"`
// How resource will be delivered.
DeliveryMethod DeliveryMethod `` /* 132-byte string literal not displayed */
// Post-usage reporting requirements for this offer.
Reporting *ReportingObligation `protobuf:"bytes,5,opt,name=reporting,proto3,oneof" json:"reporting,omitempty"`
// When this offer expires (ISO 8601).
ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=expires_at,json=expiresAt,proto3,oneof" json:"expires_at,omitempty"`
// Resource identity for cross-exchange deduplication.
// Enables Brokers to recognize the same resource offered by
// different Exchanges and compare pricing.
Identity *ResourceIdentity `protobuf:"bytes,7,opt,name=identity,proto3,oneof" json:"identity,omitempty"`
// REQUIRED. Bare host of the Exchange that issued this offer (e.g.
// "exchange.example" or "exchange.example:8081"), in the form "Request
// recipient" defines in the file header. This is the execute-routing target:
// the agent, or a relaying Broker, sends the ExecuteTransaction call for this
// offer to this Exchange, and a Broker relaying a mixed batch groups the items
// by this value. Because it is an ordinary Offer field it falls inside the
// signed bytes (see `signature` below — the signature covers every field
// except `signature` / `signature_algorithm`), so an intermediary cannot
// redirect the execute call to a different Exchange without invalidating the
// offer, and it is what retires the X-FORA-Exchange-Endpoint transport header.
// It is also the audience statement of an ExecuteTransaction, which is why
// TransactionRequest carries no top-level `exchange`: on receipt, an Exchange
// MUST reject the request unless EVERY item's offer.exchange names its own
// domain. Presence is enforced because an empty value is unroutable — a
// relaying Broker has nothing to group or dial on, and the swap-protection
// above is vacuous when the signed bytes carry no recipient at all.
Exchange string `protobuf:"bytes,8,opt,name=exchange,proto3" json:"exchange,omitempty"`
// REQUIRED. Hex-encoded detached Ed25519 signature over the canonical
// serialization of the ENTIRE Offer — every field, including `pricing`,
// `terms` (the full licensing payload), `expires_at`, and `exchange`. Only
// `signature` and `signature_algorithm` are excluded from the signed bytes.
// `expires_at` is signed so the offer's validity window is
// integrity-protected: a relaying Broker cannot extend (or shorten) the TTL
// of a signed offer to replay it outside the window the Exchange intended.
//
// CANONICAL SIGNING (RFC 8785 JCS over canonical proto-JSON). The signed bytes
// are:
//
// signed_payload = JCS( protojson(msg with signature +
// signature_algorithm cleared) )
//
// i.e. render the message to canonical proto-JSON with the PINNED option set
// below, then apply RFC 8785 (JSON Canonicalization Scheme). Deterministic
// protobuf BINARY marshaling is explicitly NOT canonical across languages and
// versions (protobuf's own caveat), so it cannot be a cross-language signing
// primitive; JCS over proto-JSON can be reproduced by ANY language (Go, TS,
// Python) without a protobuf binary codec, so a broker/exchange/client in any
// language signs and verifies byte-identically. This same definition applies to
// the agent offer-acceptance signature (AgentAcceptance.signature).
//
// PINNED proto-JSON option set (the arbiter is the Go-emitted golden vector —
// whatever these options render MUST be byte-identical across all languages):
// - enum values as NAME strings (not numbers);
// - int64 / uint64 / fixed64 as decimal STRINGS;
// - bytes as standard (padded) base64;
// - google.protobuf.Timestamp / Duration per the proto-JSON WKT rules
// (RFC 3339 string for Timestamp);
// - unpopulated fields are OMITTED (never emitted as defaults);
// - field naming is snake_case (the proto field name, UseProtoNames=true),
// the naming every SDK target shares — wire, corpus, and signed form are all
// snake_case;
// - google.protobuf.Struct (`ext`) → a plain JSON object; JCS then sorts its
// keys recursively, so the Struct case needs no special handling.
//
// UNKNOWN FIELDS. A canonicalizer either OMITS content it has no schema for or
// PRESERVES it, and the rule follows from which:
//
// - OMITTING (e.g. proto-JSON, which emits only schema-defined fields): such a
// canonicalizer CANNOT reproduce the signed bytes of a message carrying
// unknown fields — what it renders silently drops part of what the signer
// covered. It MUST refuse the message rather than emit the reduced bytes,
// and a verifier built on it MUST reject rather than verify over them. The
// refusal binds at EVERY depth: a nested message and each element of a
// repeated or map field carries its own unknown-field set.
// - PRESERVING (a canonicalizer that carries unrecognized members through):
// it reproduces the signed bytes faithfully, so there is nothing to refuse.
//
// Either way an APPENDED field cannot pass: an omitting canonicalizer refuses
// the message, and a preserving one renders the appended member into bytes the
// signer never covered, so the signature fails. Without the refusal the omitting
// case would fail OPEN — an intermediary could add unknown fields to an
// already-signed message and leave its signature verifying, smuggling
// unauthenticated content through a message the recipient treats as verified.
//
// Extensions therefore ride in `ext` / `ext_critical`, which are defined fields
// and inside the signed bytes — never as undeclared field numbers.
//
// Because the signature covers `terms`, `pricing`, `expires_at`, and
// `exchange`, an intermediary (Broker) cannot tamper with price, restrictions,
// quotas, obligations, the expiry, the execute-routing target, or any
// licensing term without invalidating it.
// Agent SHOULD verify the signature (RFC 2119) against the Exchange's public
// key, and MUST reject an offer whose `expires_at` is in the past.
Signature string `protobuf:"bytes,9,opt,name=signature,proto3" json:"signature,omitempty"`
// JOSE/JWA algorithm identifier (RFC 8037 §3.1). Always 'EdDSA' for
// Ed25519. Advisory only: this field is cleared before the canonical
// payload is signed, so it is not covered by the signature.
SignatureAlgorithm string `protobuf:"bytes,10,opt,name=signature_algorithm,json=signatureAlgorithm,proto3" json:"signature_algorithm,omitempty"`
// If set, this offer is available under an existing subscription/deal.
// No per-request billing — usage tracked against subscription quota.
// Pricing.rate = "0" for subscription offers (zero marginal cost).
// The Broker SHOULD prefer subscription offers when available.
SubscriptionId *string `protobuf:"bytes,11,opt,name=subscription_id,json=subscriptionId,proto3,oneof" json:"subscription_id,omitempty"`
// IAB Content Taxonomy category codes.
// Enables agents to filter offers by topic (e.g., "only finance resources").
// Uses IAB Content Taxonomy 3.1 codes.
IabCategories []string `protobuf:"bytes,13,rep,name=iab_categories,json=iabCategories,proto3" json:"iab_categories,omitempty"`
// Signed attestations about the resource at this URI.
// Attestations provide cryptographic proof of
// resource properties from trusted parties (providers or verification vendors).
//
// Three verification levels determine what is independently verifiable:
//
// Level 0 (no attestations): Resource may carry identifiers (DOI, IPTC GUID)
// for identification, but nothing is cryptographically verifiable.
// Only CDN delivery failure is auto-disputable.
// Level 1 (self-attested): Provider signs own claims with Ed25519 key.
// Agent can independently verify content hash and token count.
// CDN delivery failure + content hash mismatch are auto-disputable.
// Level 2 (third-party attested): Independent verification vendor crawled
// the resource and attested to its properties. Agent trusts the attestation
// (does not re-verify hash). Token count discrepancy is auto-disputable
// when corroborated by CDN response size.
//
// Multiple attestations may be present (e.g., provider self-attestation
// plus a third-party verification). Agents choose which to trust.
Attestations []*ResourceAttestation `protobuf:"bytes,14,rep,name=attestations,proto3" json:"attestations,omitempty"`
// When the offered data was current. For dynamic resources
// (resource_mutability = DYNAMIC), this is the snapshot timestamp.
// Enables the Broker to evaluate freshness: "this credit report
// reflects data as of March 18" or "this drug database was updated today."
//
// Not set for STATIC resources (content doesn't change) or LIVE
// resources (content doesn't exist yet).
//
// The Broker compares this against RequestConstraints.max_data_age
// to filter stale offers. Example: agent requests max_data_age = 7 days,
// Broker drops offers where now() - data_as_of > 7 days.
DataAsOf *timestamppb.Timestamp `protobuf:"bytes,16,opt,name=data_as_of,json=dataAsOf,proto3,oneof" json:"data_as_of,omitempty"`
// Subscription quota state, when this offer is under a subscription.
// Enables the agent to see remaining quota before committing.
// Multiple entries when the subscription has independent quotas
// (e.g., access count + spend cap).
SubscriptionQuota []*SubscriptionQuotaInfo `protobuf:"bytes,17,rep,name=subscription_quota,json=subscriptionQuota,proto3" json:"subscription_quota,omitempty"`
// Lightweight previews for offer evaluation.
// The Exchange holds URLs (50–200 bytes each); the provider's CDN serves
// the actual bytes. Agents fetch previews only when evaluating offers —
// not on every discovery query. Multiple previews at different sizes
// allow agents to pick the cheapest fetch for their evaluation needs.
//
// Per content type:
//
// Image: watermarked thumbnail (150–450px JPEG)
// Video: short clip (10–30s MP4, watermarked)
// Audio: short clip (15–30s MP3, low-bitrate or watermarked)
// Text: snippet or abstract (first 200 words as text/plain)
// Data: sample records (1–3 rows as application/json)
// Stream: optional frame capture or none (streams are priced by time)
//
// Modeled after Shutterstock (multi-size thumbnail URLs),
// Spotify (preview_url to 30s clip), IIIF (parameterized image URLs),
// and OpenRTB native (img.url + dimensions).
Previews []*Preview `protobuf:"bytes,18,rep,name=previews,proto3" json:"previews,omitempty"`
// Licensing terms for this offer, sourced from the publisher's ResourceEntry.
// Multiple terms when the resource has different arrangements by use case.
// See: Universal Licensing Core section.
Terms []*LicenseTerm `protobuf:"bytes,19,rep,name=terms,proto3" json:"terms,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
Offer — A single resource offer from an Exchange.
Combines pricing, delivery method, resource identity, and reporting terms. CoMP-specific metadata (Package, Function) available via fora-comp-v1 extension profile.
func (*Offer) Descriptor
deprecated
func (*Offer) GetAttestations ¶
func (x *Offer) GetAttestations() []*ResourceAttestation
func (*Offer) GetDataAsOf ¶
func (x *Offer) GetDataAsOf() *timestamppb.Timestamp
func (*Offer) GetDeliveryMethod ¶
func (x *Offer) GetDeliveryMethod() DeliveryMethod
func (*Offer) GetExchange ¶
func (*Offer) GetExpiresAt ¶
func (x *Offer) GetExpiresAt() *timestamppb.Timestamp
func (*Offer) GetExtCritical ¶
func (*Offer) GetIabCategories ¶
func (*Offer) GetIdentity ¶
func (x *Offer) GetIdentity() *ResourceIdentity
func (*Offer) GetOfferId ¶
func (*Offer) GetPreviews ¶
func (*Offer) GetPricing ¶
func (*Offer) GetReporting ¶
func (x *Offer) GetReporting() *ReportingObligation
func (*Offer) GetSignature ¶
func (*Offer) GetSignatureAlgorithm ¶
func (*Offer) GetSubscriptionId ¶
func (*Offer) GetSubscriptionQuota ¶
func (x *Offer) GetSubscriptionQuota() []*SubscriptionQuotaInfo
func (*Offer) GetTerms ¶
func (x *Offer) GetTerms() []*LicenseTerm
func (*Offer) ProtoMessage ¶
func (*Offer) ProtoMessage()
func (*Offer) ProtoReflect ¶
func (x *Offer) ProtoReflect() protoreflect.Message
type OfferAbsenceReason ¶
type OfferAbsenceReason int32
OfferAbsenceReason — Why no offers are available for a requested URI. Used in OfferGroup.absence_reason when offers is empty. Enables diagnostic feedback without requiring a transaction attempt.
const ( OfferAbsenceReason_OFFER_ABSENCE_REASON_UNSPECIFIED OfferAbsenceReason = 0 // unset — output/optional; zero is a valid not-applicable/unset state // Resource URI is not in this Exchange's catalog. OfferAbsenceReason_OFFER_ABSENCE_REASON_NOT_IN_CATALOG OfferAbsenceReason = 1 // Resource exists but the provider has opted out of AI access for it (the // provider's consent/opt-out signal blocks licensing). OfferAbsenceReason_OFFER_ABSENCE_REASON_CONTENT_BLOCKED OfferAbsenceReason = 2 // Resource exists but its offers were pre-filtered out for one or more // restriction axes the requester stated (a convenience filter matched to the // query, not an enforcement verdict — see Restriction). The filtered axes are // listed in OfferGroup.restriction_filters, in the same RestrictionKind // vocabulary the terms use. The agent MAY still be eligible. OfferAbsenceReason_OFFER_ABSENCE_REASON_RESTRICTION_FILTERED OfferAbsenceReason = 3 // Resource is temporarily unavailable (e.g., provider feed refresh in progress). OfferAbsenceReason_OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE OfferAbsenceReason = 4 // Exchange is not authorized by the provider to sell this resource. OfferAbsenceReason_OFFER_ABSENCE_REASON_NOT_AUTHORIZED OfferAbsenceReason = 5 // Requester's scopes/subscription do not cover this resource. Applies wherever // access is gated by subscription or scope entitlements (not only enterprise // deployments): the resource exists but the requester's delegation token or // subscription does not grant it. The Exchange returns this so the requester // learns the resource is reachable under the right subscription/scope. (Where // existence itself must stay hidden, the Exchange MAY omit it silently instead.) OfferAbsenceReason_OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT OfferAbsenceReason = 6 // Consumer encountered ext_critical keys it does not recognize. // The unrecognized keys SHOULD be listed in the OfferGroup's ext field // under "unrecognized_critical_extensions" for diagnostic purposes. OfferAbsenceReason_OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION OfferAbsenceReason = 7 // Offers exist, but none fit within the requester's budget (e.g. every offer's // price exceeds RequestConstraints.period_budget). Returned by Resolve as a // successful "no result" answer when a budget/price ceiling filtered out every // otherwise-licensable offer. OfferAbsenceReason_OFFER_ABSENCE_REASON_BUDGET_EXCEEDED OfferAbsenceReason = 8 )
func (OfferAbsenceReason) Descriptor ¶
func (OfferAbsenceReason) Descriptor() protoreflect.EnumDescriptor
func (OfferAbsenceReason) Enum ¶
func (x OfferAbsenceReason) Enum() *OfferAbsenceReason
func (OfferAbsenceReason) EnumDescriptor
deprecated
func (OfferAbsenceReason) EnumDescriptor() ([]byte, []int)
Deprecated: Use OfferAbsenceReason.Descriptor instead.
func (OfferAbsenceReason) Number ¶
func (x OfferAbsenceReason) Number() protoreflect.EnumNumber
func (OfferAbsenceReason) String ¶
func (x OfferAbsenceReason) String() string
func (OfferAbsenceReason) Type ¶
func (OfferAbsenceReason) Type() protoreflect.EnumType
type OfferGroup ¶
type OfferGroup struct {
// The URI this group of offers is for (echoed from ResourceQuery.uris).
Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
// Zero or more offers for this URI. Empty = resource not available.
Offers []*Offer `protobuf:"bytes,2,rep,name=offers,proto3" json:"offers,omitempty"`
// How this URI was discovered by the Broker (v2 extension point).
// v1: always DISCOVERY_METHOD_EXCHANGE (Broker queried an Exchange).
// v2: may include DISCOVERY_METHOD_SEARCH (URI found via search engine like Exa),
//
// DISCOVERY_METHOD_RECOMMENDATION, etc. The Broker discovers URIs
// through any source, then routes through Exchange for pricing/transaction.
// The discovery method does not affect the transaction flow — it's metadata
// for the agent to understand how the resource was found.
DiscoveryMethod *DiscoveryMethod `` /* 142-byte string literal not displayed */
// Why no offers are available for this URI.
// Present when `offers` is empty. Enables agents/Brokers to distinguish
// "resource not in catalog" from "resource blocked for your use case" without
// trial-and-error transactions. Analogous to OpenRTB nbr codes and
// Shutterstock per-item error metadata in batch responses.
AbsenceReason *OfferAbsenceReason `` /* 139-byte string literal not displayed */
// When absence_reason = RESTRICTION_FILTERED, the restriction axes that drove
// the convenience pre-filter, in the same RestrictionKind vocabulary the terms
// use (e.g. [GEOGRAPHY] when the requester's stated geography matched no term).
// Advisory diagnostics, not an enforcement verdict.
RestrictionFilters []RestrictionKind `` /* 152-byte string literal not displayed */
// contains filtered or unexported fields
}
OfferGroup — Offers for a single requested URI. Enables multi-URI batch queries where the caller needs to know which offers correspond to which requested resource.
func (*OfferGroup) Descriptor
deprecated
func (*OfferGroup) Descriptor() ([]byte, []int)
Deprecated: Use OfferGroup.ProtoReflect.Descriptor instead.
func (*OfferGroup) GetAbsenceReason ¶
func (x *OfferGroup) GetAbsenceReason() OfferAbsenceReason
func (*OfferGroup) GetDiscoveryMethod ¶
func (x *OfferGroup) GetDiscoveryMethod() DiscoveryMethod
func (*OfferGroup) GetOffers ¶
func (x *OfferGroup) GetOffers() []*Offer
func (*OfferGroup) GetRestrictionFilters ¶
func (x *OfferGroup) GetRestrictionFilters() []RestrictionKind
func (*OfferGroup) GetUri ¶
func (x *OfferGroup) GetUri() string
func (*OfferGroup) ProtoMessage ¶
func (*OfferGroup) ProtoMessage()
func (*OfferGroup) ProtoReflect ¶
func (x *OfferGroup) ProtoReflect() protoreflect.Message
func (*OfferGroup) Reset ¶
func (x *OfferGroup) Reset()
func (*OfferGroup) String ¶
func (x *OfferGroup) String() string
type Preview ¶
type Preview struct {
// URL to a preview asset (thumbnail, clip, snippet, sample).
// Served by the provider's CDN, not by the Exchange.
Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
// MIME type of the preview.
// Examples: "image/jpeg", "image/webp", "audio/mpeg", "video/mp4",
//
// "text/plain", "application/json"
MediaType string `protobuf:"bytes,2,opt,name=media_type,json=mediaType,proto3" json:"media_type,omitempty"`
// Dimensions in pixels (for images and video).
Width *int32 `protobuf:"varint,3,opt,name=width,proto3,oneof" json:"width,omitempty"`
// Height in pixels (images and video)
Height *int32 `protobuf:"varint,4,opt,name=height,proto3,oneof" json:"height,omitempty"`
// Duration in seconds (for audio and video clips).
Duration *int32 `protobuf:"varint,5,opt,name=duration,proto3,oneof" json:"duration,omitempty"`
// Size category hint. Agents use this to select the right preview
// without fetching all of them.
// Standard values:
//
// "thumbnail" — smallest useful preview (100–150px or 5–10s)
// "preview" — mid-size for evaluation (300–500px or 15–30s)
// "sample" — larger / more detailed (for data: 1–3 sample records)
Size *string `protobuf:"bytes,6,opt,name=size,proto3,oneof" json:"size,omitempty"`
// contains filtered or unexported fields
}
Preview — Lightweight resource preview for offer evaluation.
The Exchange holds URLs (50–200 bytes per preview); the provider's CDN serves the actual bytes. This follows the universal pattern: Shutterstock (multi-size thumbnail URLs), Spotify (preview_url to 30s clip), IIIF (parameterized image URLs), OpenRTB (img.url + dims).
Previews are free to fetch — no FORA transaction required. They are the equivalent of looking at a book cover before buying. Providers MAY watermark visual previews or truncate text/audio previews.
The Exchange populates preview URLs during catalog ingestion. Preview URLs MAY be signed with a short TTL to prevent hotlinking, or public (provider's choice). Agents fetch previews only when evaluating offers, not on every discovery query.
func (*Preview) Descriptor
deprecated
func (*Preview) GetDuration ¶
func (*Preview) GetMediaType ¶
func (*Preview) ProtoMessage ¶
func (*Preview) ProtoMessage()
func (*Preview) ProtoReflect ¶
func (x *Preview) ProtoReflect() protoreflect.Message
type Pricing ¶
type Pricing struct {
// Provider's pricing model.
Model PricingModel `protobuf:"varint,1,opt,name=model,proto3,enum=fora.v1.PricingModel" json:"model,omitempty"`
// Price in the provider's model, as an exact decimal string — e.g. "0.05" =
// $0.05 per article. NOT a float: money is decimal to avoid binary rounding and
// to allow arbitrary sub-cent precision (e.g. "0.0001234"). Denominated in `currency`.
Rate string `protobuf:"bytes,2,opt,name=rate,proto3" json:"rate,omitempty"`
// ISO 4217 currency code (e.g. "USD", "EUR").
Currency string `protobuf:"bytes,3,opt,name=currency,proto3" json:"currency,omitempty"`
// Normalized cost per unit — the universal comparison metric, exact decimal string.
// For text: cost per token. For video: cost per second.
// For data: cost per record. For APIs: cost per call.
// Denominated in the Exchange's base_currency (from its WellKnownManifest).
UnitCost *string `protobuf:"bytes,4,opt,name=unit_cost,json=unitCost,proto3,oneof" json:"unit_cost,omitempty"`
// Estimated quantity in the metering unit.
// For text: token count. For video: duration in seconds.
// For documents: page count. For data: record count.
EstimatedQuantity *int32 `protobuf:"varint,5,opt,name=estimated_quantity,json=estimatedQuantity,proto3,oneof" json:"estimated_quantity,omitempty"`
// License duration in months. How long the granted access remains valid.
LicenseDurationMonths *int32 `` /* 133-byte string literal not displayed */
// Metering basis — the "per what" of PER_UNIT pricing. REQUIRED when
// model = PER_UNIT. Custom units namespace as "vendor:unit". Ignored for
// FREE / FLAT.
//
// The (fora.v1.vocab) entries below are the SOLE authored source of the
// registered bare tokens. A buf plugin reads them structurally and emits the
// pricingunits constants + IsRegistered; ingest enforces membership from
// those. The CEL is STRUCTURE ONLY (empty / bare-form / vendor:namespaced) —
// it never lists the tokens, so it cannot drift from the registry.
Unit *string `protobuf:"bytes,8,opt,name=unit,proto3,oneof" json:"unit,omitempty"`
// How usage is tracked for billing reconciliation.
// Absent = PRICING_METERING_ONLINE (default real-time tracking).
// NONE = one-time perpetual sale; no ReportUsage required after ExecuteTransaction.
// OFFLINE_SELF_REPORTED = agent self-reports physical-world consumption.
Metering *PricingMetering `protobuf:"varint,9,opt,name=metering,proto3,enum=fora.v1.PricingMetering,oneof" json:"metering,omitempty"`
// contains filtered or unexported fields
}
Pricing — Terms for a resource offer.
Providers set prices in their preferred model. The Exchange normalizes to unit cost (effective cost per unit) for cross-exchange comparison — analogous to eCPM in programmatic advertising. Unit cost is denominated in the Exchange's base currency.
Fields: model, rate, currency, unit_cost, estimated_quantity, license_duration_months, unit, metering.
func (*Pricing) Descriptor
deprecated
func (*Pricing) GetCurrency ¶
func (*Pricing) GetEstimatedQuantity ¶
func (*Pricing) GetLicenseDurationMonths ¶
func (*Pricing) GetMetering ¶
func (x *Pricing) GetMetering() PricingMetering
func (*Pricing) GetModel ¶
func (x *Pricing) GetModel() PricingModel
func (*Pricing) GetUnitCost ¶
func (*Pricing) ProtoMessage ¶
func (*Pricing) ProtoMessage()
func (*Pricing) ProtoReflect ¶
func (x *Pricing) ProtoReflect() protoreflect.Message
type PricingMetering ¶
type PricingMetering int32
PricingMetering — How usage is tracked for billing reconciliation.
ONLINE (default, field absent or = 0): Exchange tracks usage events in real time. NONE: one-time transaction; no ongoing metering required (stock image perpetual
license, CAD file one-time download). Billing_id is issued at ExecuteTransaction and the ledger entry is closed — no ReportUsage required.
OFFLINE_SELF_REPORTED: agent self-reports consumption (e.g., units-manufactured
for 3D-printed items from a licensed design). Exchange audits; metering is not possible online because the event occurs in the physical world.
const ( PricingMetering_PRICING_METERING_ONLINE PricingMetering = 0 // Default. Exchange tracks usage events in real time. `ReportUsage` is required. PricingMetering_PRICING_METERING_NONE PricingMetering = 1 // One-time perpetual sale. No ongoing metering; `billing_id` is issued at `ExecuteTransaction` and the ledger entry is closed. No `ReportUsage` required. PricingMetering_PRICING_METERING_OFFLINE_SELF_REPORTED PricingMetering = 2 // Agent self-reports physical-world consumption (e.g. units manufactured from a licensed design). Exchange audits. )
func (PricingMetering) Descriptor ¶
func (PricingMetering) Descriptor() protoreflect.EnumDescriptor
func (PricingMetering) Enum ¶
func (x PricingMetering) Enum() *PricingMetering
func (PricingMetering) EnumDescriptor
deprecated
func (PricingMetering) EnumDescriptor() ([]byte, []int)
Deprecated: Use PricingMetering.Descriptor instead.
func (PricingMetering) Number ¶
func (x PricingMetering) Number() protoreflect.EnumNumber
func (PricingMetering) String ¶
func (x PricingMetering) String() string
func (PricingMetering) Type ¶
func (PricingMetering) Type() protoreflect.EnumType
type PricingModel ¶
type PricingModel int32
PricingModel — the charging STRUCTURE only (a genuinely closed, small set; changes far less than yearly, so an enum is correct per Google AIP-126). The open-ended metering basis ("per what") is NOT enumerated here — it lives in Pricing.unit as a registry-governed vocabulary (the (fora.v1.vocab) field options on Pricing.unit; see vocab.proto). Subscription = model=FREE + scopes (see LicenseTerm); attribution/contribution are obligations (see ObligationKind); revenue-share settlement is off-protocol.
const ( PricingModel_PRICING_MODEL_UNSPECIFIED PricingModel = 0 // unset — zero allowed on WellKnownManifest.pricing_models_supported (capability list); rejected (not_in:[0]) as the Pricing.model discriminator (omission cannot default to FREE) PricingModel_PRICING_MODEL_FREE PricingModel = 1 // no charge; rate must be 0 (state FREE explicitly — absent Pricing is not free) PricingModel_PRICING_MODEL_PER_UNIT PricingModel = 2 // rate per Pricing.unit; unit REQUIRED (registered token or vendor:custom) PricingModel_PRICING_MODEL_FLAT PricingModel = 3 // one-time flat fee; rate is the total, no unit )
func (PricingModel) Descriptor ¶
func (PricingModel) Descriptor() protoreflect.EnumDescriptor
func (PricingModel) Enum ¶
func (x PricingModel) Enum() *PricingModel
func (PricingModel) EnumDescriptor
deprecated
func (PricingModel) EnumDescriptor() ([]byte, []int)
Deprecated: Use PricingModel.Descriptor instead.
func (PricingModel) Number ¶
func (x PricingModel) Number() protoreflect.EnumNumber
func (PricingModel) String ¶
func (x PricingModel) String() string
func (PricingModel) Type ¶
func (PricingModel) Type() protoreflect.EnumType
type ProviderRelationship ¶
type ProviderRelationship int32
const ( ProviderRelationship_PROVIDER_RELATIONSHIP_UNSPECIFIED ProviderRelationship = 0 // unset — rejected at ingest // Provider has a direct contract with this Exchange. ProviderRelationship_PROVIDER_RELATIONSHIP_DIRECT ProviderRelationship = 1 // Exchange resells resources via another authorized party. ProviderRelationship_PROVIDER_RELATIONSHIP_RESELLER ProviderRelationship = 2 )
func (ProviderRelationship) Descriptor ¶
func (ProviderRelationship) Descriptor() protoreflect.EnumDescriptor
func (ProviderRelationship) Enum ¶
func (x ProviderRelationship) Enum() *ProviderRelationship
func (ProviderRelationship) EnumDescriptor
deprecated
func (ProviderRelationship) EnumDescriptor() ([]byte, []int)
Deprecated: Use ProviderRelationship.Descriptor instead.
func (ProviderRelationship) Number ¶
func (x ProviderRelationship) Number() protoreflect.EnumNumber
func (ProviderRelationship) String ¶
func (x ProviderRelationship) String() string
func (ProviderRelationship) Type ¶
func (ProviderRelationship) Type() protoreflect.EnumType
type PushResourcesRequest ¶
type PushResourcesRequest struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Tenant identifier
TenantId string `protobuf:"bytes,2,opt,name=tenant_id,json=tenantId,proto3" json:"tenant_id,omitempty"`
// Content entries to push. At least one: an empty push asks for nothing and
// is refused rather than answered with zero counts. At most 256, the bound a
// caller-chosen batch carries elsewhere in this contract (see ResourceQuery.uris)
// — it bounds one submission, so a larger feed is pushed in several. The cap is
// over entries because a submission is stored or refused whole, and a refusal
// names each entry that failed; it does not bound the work of checking a
// submission, which the recipient bounds at the transport.
Entries []*ResourceEntry `protobuf:"bytes,3,rep,name=entries,proto3" json:"entries,omitempty"`
// Identity of the caller (who is pushing this data).
// The Exchange verifies this matches a registered CatalogService client.
CallerId string `protobuf:"bytes,4,opt,name=caller_id,json=callerId,proto3" json:"caller_id,omitempty"`
// REQUIRED. Bare host of the recipient this request is addressed to (e.g.
// "exchange.example" or "exchange.example:8081"). See "Request recipient" in
// the file header. Distinct from `tenant_id` above, which names a publisher
// tenant WITHIN an Exchange, not the Exchange itself.
Exchange string `protobuf:"bytes,5,opt,name=exchange,proto3" json:"exchange,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
func (*PushResourcesRequest) Descriptor
deprecated
func (*PushResourcesRequest) Descriptor() ([]byte, []int)
Deprecated: Use PushResourcesRequest.ProtoReflect.Descriptor instead.
func (*PushResourcesRequest) GetCallerId ¶
func (x *PushResourcesRequest) GetCallerId() string
func (*PushResourcesRequest) GetEntries ¶
func (x *PushResourcesRequest) GetEntries() []*ResourceEntry
func (*PushResourcesRequest) GetExchange ¶
func (x *PushResourcesRequest) GetExchange() string
func (*PushResourcesRequest) GetExt ¶
func (x *PushResourcesRequest) GetExt() *structpb.Struct
func (*PushResourcesRequest) GetExtCritical ¶
func (x *PushResourcesRequest) GetExtCritical() []string
func (*PushResourcesRequest) GetTenantId ¶
func (x *PushResourcesRequest) GetTenantId() string
func (*PushResourcesRequest) GetVer ¶
func (x *PushResourcesRequest) GetVer() string
func (*PushResourcesRequest) ProtoMessage ¶
func (*PushResourcesRequest) ProtoMessage()
func (*PushResourcesRequest) ProtoReflect ¶
func (x *PushResourcesRequest) ProtoReflect() protoreflect.Message
func (*PushResourcesRequest) Reset ¶
func (x *PushResourcesRequest) Reset()
func (*PushResourcesRequest) String ¶
func (x *PushResourcesRequest) String() string
type PushResourcesResponse ¶
type PushResourcesResponse struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Number of entries accepted. A push is all-or-nothing, so a successful push
// stored every entry it carried and this is the submission's own size. A push
// that could not be applied is not a response at all: it travels as a non-OK
// transport error carrying ErrorDetail.catalog_rejection.
Accepted int32 `protobuf:"varint,2,opt,name=accepted,proto3" json:"accepted,omitempty"`
// Number of entries rejected. Structurally always 0 on this path, and kept for
// the same reason CATALOG_REJECTION_REASON_TERMS_LIMIT_EXCEEDED is kept: a
// rejection returns an error rather than a response, so there is no successful
// answer in which this can be non-zero. It remains meaningful only for a
// deployment that applies catalog rules somewhere the all-or-nothing rule above
// does not front. Do NOT read a zero here as "nothing failed" — read `accepted`.
Rejected int32 `protobuf:"varint,3,opt,name=rejected,proto3" json:"rejected,omitempty"`
// Non-fatal issues encountered during ingestion — the ingest tier's lint, which
// accepts the term and flags it. Examples: an unregistered bare restriction
// token on any axis, and an OBLIGATION_KIND_OTHER obligation with no detail.
// Warnings do not cause rejection; they are surfaced so publishers can fix their
// feeds without a hard failure. A condition that rejects is not a warning — a
// REFERENCE_ONLY term with no License.uri, for instance, is refused by
// license_term.reference_only.requires_uri and never reaches this list.
Warnings []string `protobuf:"bytes,4,rep,name=warnings,proto3" json:"warnings,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
func (*PushResourcesResponse) Descriptor
deprecated
func (*PushResourcesResponse) Descriptor() ([]byte, []int)
Deprecated: Use PushResourcesResponse.ProtoReflect.Descriptor instead.
func (*PushResourcesResponse) GetAccepted ¶
func (x *PushResourcesResponse) GetAccepted() int32
func (*PushResourcesResponse) GetExt ¶
func (x *PushResourcesResponse) GetExt() *structpb.Struct
func (*PushResourcesResponse) GetExtCritical ¶
func (x *PushResourcesResponse) GetExtCritical() []string
func (*PushResourcesResponse) GetRejected ¶
func (x *PushResourcesResponse) GetRejected() int32
func (*PushResourcesResponse) GetVer ¶
func (x *PushResourcesResponse) GetVer() string
func (*PushResourcesResponse) GetWarnings ¶
func (x *PushResourcesResponse) GetWarnings() []string
func (*PushResourcesResponse) ProtoMessage ¶
func (*PushResourcesResponse) ProtoMessage()
func (*PushResourcesResponse) ProtoReflect ¶
func (x *PushResourcesResponse) ProtoReflect() protoreflect.Message
func (*PushResourcesResponse) Reset ¶
func (x *PushResourcesResponse) Reset()
func (*PushResourcesResponse) String ¶
func (x *PushResourcesResponse) String() string
type Quota ¶
type Quota struct {
// The unit being capped — an open vocabulary axis.
//
// The (fora.v1.vocab) entries below are the SOLE authored source of the
// registered bare metric tokens. A buf plugin reads them structurally and
// emits the quotametrics constants + IsRegistered; ingest enforces membership
// from those. The CEL is STRUCTURE ONLY (non-empty bare token or
// vendor:namespaced) — it never lists the tokens, so it cannot drift.
//
// Token meanings:
//
// display-words Words of content text rendered to an end user.
// impressions Times the content is displayed to an end user.
// tokens LLM output tokens generated using this content.
// input-tokens LLM input tokens consumed from this content.
// units-manufactured Physical units manufactured from this design/pattern.
// accesses Distinct content access / retrieval events.
// copies Digital or physical copies produced.
// seats Distinct named users licensed to access the content.
Metric string `protobuf:"bytes,1,opt,name=metric,proto3" json:"metric,omitempty"`
// Maximum allowed value in the given window. A quota of 0 grants
// nothing — express "no access" by omitting the term, not a zero quota.
Limit int64 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"`
// Time window over which the limit accumulates.
Window QuotaWindow `protobuf:"varint,3,opt,name=window,proto3,enum=fora.v1.QuotaWindow" json:"window,omitempty"`
// contains filtered or unexported fields
}
Quota — A usage cap that gates whether this LicenseTerm remains valid.
Quotas limit how much a licensee may consume before the term expires or must be renegotiated. They are NOT billing quantities — billing is in Pricing.
The metric vocabulary is authored ONLY in the (fora.v1.vocab) entries on Quota.metric below; the quotametrics constants + IsRegistered derive from it.
func (*Quota) Descriptor
deprecated
func (*Quota) GetWindow ¶
func (x *Quota) GetWindow() QuotaWindow
func (*Quota) ProtoMessage ¶
func (*Quota) ProtoMessage()
func (*Quota) ProtoReflect ¶
func (x *Quota) ProtoReflect() protoreflect.Message
type QuotaWindow ¶
type QuotaWindow int32
QuotaWindow — Time window over which a Quota.limit accumulates.
const ( QuotaWindow_QUOTA_WINDOW_UNSPECIFIED QuotaWindow = 0 // unset — rejected at ingest QuotaWindow_QUOTA_WINDOW_HOURLY QuotaWindow = 1 // Resets each hour QuotaWindow_QUOTA_WINDOW_DAILY QuotaWindow = 2 // Resets each day QuotaWindow_QUOTA_WINDOW_MONTHLY QuotaWindow = 3 // Resets each month QuotaWindow_QUOTA_WINDOW_TOTAL QuotaWindow = 4 // Lifetime cap — never resets )
func (QuotaWindow) Descriptor ¶
func (QuotaWindow) Descriptor() protoreflect.EnumDescriptor
func (QuotaWindow) Enum ¶
func (x QuotaWindow) Enum() *QuotaWindow
func (QuotaWindow) EnumDescriptor
deprecated
func (QuotaWindow) EnumDescriptor() ([]byte, []int)
Deprecated: Use QuotaWindow.Descriptor instead.
func (QuotaWindow) Number ¶
func (x QuotaWindow) Number() protoreflect.EnumNumber
func (QuotaWindow) String ¶
func (x QuotaWindow) String() string
func (QuotaWindow) Type ¶
func (QuotaWindow) Type() protoreflect.EnumType
type RateLimitInfo ¶
type RateLimitInfo struct {
// Maximum requests allowed in the current window.
Limit int32 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"`
// Requests remaining in the current window.
Remaining int32 `protobuf:"varint,2,opt,name=remaining,proto3" json:"remaining,omitempty"`
// When the current window resets (UTC). After this time, `remaining` resets to `limit`.
ResetAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=reset_at,json=resetAt,proto3" json:"reset_at,omitempty"`
// Duration of the rate limit window (e.g. 60s = per-minute limit).
Window *durationpb.Duration `protobuf:"bytes,4,opt,name=window,proto3,oneof" json:"window,omitempty"`
// contains filtered or unexported fields
}
RateLimitInfo — Caller's rate limit status on this Exchange. Modeled after IETF RateLimit header fields (RFC 9110 §15.5.30) and Shutterstock's rate limit response pattern.
func (*RateLimitInfo) Descriptor
deprecated
func (*RateLimitInfo) Descriptor() ([]byte, []int)
Deprecated: Use RateLimitInfo.ProtoReflect.Descriptor instead.
func (*RateLimitInfo) GetLimit ¶
func (x *RateLimitInfo) GetLimit() int32
func (*RateLimitInfo) GetRemaining ¶
func (x *RateLimitInfo) GetRemaining() int32
func (*RateLimitInfo) GetResetAt ¶
func (x *RateLimitInfo) GetResetAt() *timestamppb.Timestamp
func (*RateLimitInfo) GetWindow ¶
func (x *RateLimitInfo) GetWindow() *durationpb.Duration
func (*RateLimitInfo) ProtoMessage ¶
func (*RateLimitInfo) ProtoMessage()
func (*RateLimitInfo) ProtoReflect ¶
func (x *RateLimitInfo) ProtoReflect() protoreflect.Message
func (*RateLimitInfo) Reset ¶
func (x *RateLimitInfo) Reset()
func (*RateLimitInfo) String ¶
func (x *RateLimitInfo) String() string
type RefreshCatalogRequest ¶
type RefreshCatalogRequest struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Tenant identifier
TenantId string `protobuf:"bytes,2,opt,name=tenant_id,json=tenantId,proto3" json:"tenant_id,omitempty"`
// REQUIRED. Bare host of the recipient this request is addressed to (e.g.
// "exchange.example" or "exchange.example:8081"). See "Request recipient" in
// the file header. Distinct from `tenant_id` above, which names a publisher
// tenant WITHIN an Exchange, not the Exchange itself.
Exchange string `protobuf:"bytes,3,opt,name=exchange,proto3" json:"exchange,omitempty"`
// contains filtered or unexported fields
}
func (*RefreshCatalogRequest) Descriptor
deprecated
func (*RefreshCatalogRequest) Descriptor() ([]byte, []int)
Deprecated: Use RefreshCatalogRequest.ProtoReflect.Descriptor instead.
func (*RefreshCatalogRequest) GetExchange ¶
func (x *RefreshCatalogRequest) GetExchange() string
func (*RefreshCatalogRequest) GetTenantId ¶
func (x *RefreshCatalogRequest) GetTenantId() string
func (*RefreshCatalogRequest) GetVer ¶
func (x *RefreshCatalogRequest) GetVer() string
func (*RefreshCatalogRequest) ProtoMessage ¶
func (*RefreshCatalogRequest) ProtoMessage()
func (*RefreshCatalogRequest) ProtoReflect ¶
func (x *RefreshCatalogRequest) ProtoReflect() protoreflect.Message
func (*RefreshCatalogRequest) Reset ¶
func (x *RefreshCatalogRequest) Reset()
func (*RefreshCatalogRequest) String ¶
func (x *RefreshCatalogRequest) String() string
type RefreshCatalogResponse ¶
type RefreshCatalogResponse struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Whether the refresh was started
Started bool `protobuf:"varint,2,opt,name=started,proto3" json:"started,omitempty"`
// contains filtered or unexported fields
}
func (*RefreshCatalogResponse) Descriptor
deprecated
func (*RefreshCatalogResponse) Descriptor() ([]byte, []int)
Deprecated: Use RefreshCatalogResponse.ProtoReflect.Descriptor instead.
func (*RefreshCatalogResponse) GetStarted ¶
func (x *RefreshCatalogResponse) GetStarted() bool
func (*RefreshCatalogResponse) GetVer ¶
func (x *RefreshCatalogResponse) GetVer() string
func (*RefreshCatalogResponse) ProtoMessage ¶
func (*RefreshCatalogResponse) ProtoMessage()
func (*RefreshCatalogResponse) ProtoReflect ¶
func (x *RefreshCatalogResponse) ProtoReflect() protoreflect.Message
func (*RefreshCatalogResponse) Reset ¶
func (x *RefreshCatalogResponse) Reset()
func (*RefreshCatalogResponse) String ¶
func (x *RefreshCatalogResponse) String() string
type RegisterRequest ¶
type RegisterRequest struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Business-registration data about the operator behind this agent — the
// details an Exchange needs to open a commercial account (legal entity,
// address, jurisdiction, tax identifiers and the like). The specific members
// are operator-defined and not fixed in the wire contract; whether the
// Exchange inspects them follows its manifest — see
// AccountRegistration.data_schema. This is NOT an identity claim: the caller's
// identity is taken from the verified request signature, never from this
// payload, so nothing here is trusted as authentication.
//
// Bounded, because a published data_schema is applied to THIS. The schema's own
// caps bound the schema; the cost of checking a payload against it is roughly
// that cost multiplied by the elements in the payload, and the multiplier was
// unbounded — a subschema under `items` is counted once by the schema's
// evaluation cap and evaluated once per element at runtime.
//
// At most 64 members at the top level. Top level rather than every level:
// nested bulk is already bounded by the byte cap below, and a recursive count
// would refuse a small document that merely nests, which a business entity
// legitimately does — an address is an object.
//
// At most 32 nested JSON containers, counting this member itself as the first —
// the same number and the same counting rule as the schema's own depth cap,
// because it is the same question asked of the other document. It is bounded
// for a reason the other two caps do not cover: a deeply nested payload is
// small and has few top-level members, and canonicalising it walks it
// RECURSIVELY, so without a stated bound the verdict was a property of the
// reader's runtime rather than of the payload — one implementation refused
// past roughly five hundred containers on one release of its language and
// accepted nine hundred on the next, while two others accepted every depth
// tried. Checked before the payload is canonicalised, so the bound precedes
// the walk it exists to bound.
//
// At most 16384 bytes, measured as this member's RFC 8785 (JCS) CANONICAL JSON
// encoding. The unit is named on purpose and is the load-bearing half of the
// rule: every other cap in this contract is over bytes a party actually served,
// and this member is never served as bytes — it is a Struct, decoded before any
// consumer sees it. "16KB" therefore means nothing until an encoding is chosen,
// and two implementations choosing privately is the same both-ends disagreement
// the schema rules exist to prevent. JCS also pins number formatting, which is
// not a detail: a payload carrying 1e300 is seven bytes under one renderer and
// three hundred under another.
//
// A payload with NO JSON REPRESENTATION at all is refused in the same class as
// the three bounds: it has no canonical encoding, so the byte cap above has
// nothing to measure. This member is a Struct, and a Struct can carry two such
// values — both of which the protobuf binary decoder accepts and proto-JSON
// refuses to render:
//
// a NON-FINITE NUMBER. JSON can represent neither NaN nor an infinity, while
// Struct's number_value is an IEEE-754 double that carries one perfectly well.
//
// a VALUE WITH NO KIND SET. google.protobuf.Value holds its payload in a
// oneof, and a oneof with no member set is well-formed on the wire. There is
// no JSON value it denotes, so there is nothing to write.
//
// That check MUST read the decoded protobuf value, never a native map converted
// from it. This is stated because two conformant implementations already
// answered the same signed request differently, and because NEITHER value
// survives the conversion. Some runtimes render a non-finite double as the
// STRING "NaN", "Infinity" or "-Infinity", and once that has happened the
// payload cannot be told apart from one that legitimately carries that text —
// an operator legally named NaN is a valid string value that has to be
// accepted. A value with no kind set converts to the same empty result as a
// JSON null, which is a value the payload may legitimately carry. In both cases
// the conversion destroys the information, so the check has to precede it.
//
// ORDER. The four checks on this member run in this sequence, and the sequence
// is not free choice:
//
// 1. top-level member count
// 2. nesting depth
// 3. canonicalizability, which is where both no-JSON-form checks live
// 4. canonical byte size
//
// The first two are counts, and they bound the document the third then has to
// walk. The third precedes the fourth because the byte cap is DEFINED as the
// length of the canonical encoding: until that encoding exists there is no
// number to compare against, and answering "too large" for a payload that has
// no encoding at all would state something untrue about it.
//
// All four are checked BEFORE the schema runs, for the reason the schema's own
// size cap is checked before the document is parsed — a check that exists to
// stop work has to precede the work. A payload breaking any of them is a
// malformed request, NOT REGISTRATION_FAILURE_REASON_INVALID_REGISTRATION_DATA:
// that reason names non-conformance to a published schema and applies only
// where one is published, while these four hold either way. The terms_digest
// gate sits between these four and the schema — see
// RegisterRequest.terms_digest for why that order is also fixed.
RegistrationData *structpb.Struct `protobuf:"bytes,2,opt,name=registration_data,json=registrationData,proto3" json:"registration_data,omitempty"`
// REQUIRED. Bare host of the recipient this request is addressed to (e.g.
// "exchange.example" or "exchange.example:8081"). See "Request recipient" in
// the file header. It matters most here: the caller reaches this endpoint by
// resolving a fetched, cached manifest, so the RFC 9421 signature covers only
// the URL that was dialled — this field is what lets the genuine Exchange
// refuse a registration that was meant for a different one.
Exchange string `protobuf:"bytes,3,opt,name=exchange,proto3" json:"exchange,omitempty"`
// Echo of WellKnownManifest.terms_digest, stating WHICH terms document the
// operator accepted. The request signature covers this statement, so it is the
// durable record a later dispute asks for; the Exchange stores the accepted
// value with the account. Four cases, all defined: the Exchange publishes a
// digest and this matches — registration proceeds; it publishes one and this
// differs — refused with REGISTRATION_FAILURE_REASON_TERMS_DIGEST_STALE; it
// publishes one and this is absent — refused with the SAME reason, because the
// caller's remedy is identical (read the manifest, echo, retry) and a second
// reason would split one fix in two; it publishes none and this is present —
// the Exchange MUST ignore the value and MUST NOT record it as an acceptance,
// since it publishes no digest and therefore cannot verify what document the
// value refers to, and storing it would put an unverifiable claim exactly
// where this field exists to hold a verified one. A registering client MUST
// read the digest from a FRESHLY fetched manifest rather than a cached copy —
// a cached endpoint is fine, a cached digest is not, because a client cannot
// detect staleness locally and a warm cache would otherwise make it retry a
// refused value until the cache expired. Registration happens once per
// Exchange, so the extra fetch is cheap.
//
// GATE ORDER. This gate runs AFTER the four registration_data checks (see
// RegisterRequest.registration_data) and BEFORE the published data_schema.
// Terms before schema is not arbitrary: the schema may itself have changed in
// the revision the caller has not read yet. Validating a stale-terms caller
// against the CURRENT schema hands back field errors describing a document it
// has never seen, so it fixes those members, re-fetches, and finds the
// requirements have moved. Terms first means a caller is always told to go read
// the current manifest before it is told anything about that manifest's
// contents. It also keeps one refusal to one remedy: TERMS_DIGEST_STALE says
// re-fetch and echo, INVALID_REGISTRATION_DATA says fix the payload, and a
// request that would earn both is given the one that has to be done first.
// The whole order applies only when an account is being CREATED: a repeat
// registration is answered from the stored record and runs no gate at all, so
// the four cases above are the four cases of a FIRST registration. See
// "Repeat registration" in the Agent Account Registration section header.
TermsDigest *string `protobuf:"bytes,4,opt,name=terms_digest,json=termsDigest,proto3,oneof" json:"terms_digest,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
RegisterRequest — Agent asks the Exchange to create its account.
func (*RegisterRequest) Descriptor
deprecated
func (*RegisterRequest) Descriptor() ([]byte, []int)
Deprecated: Use RegisterRequest.ProtoReflect.Descriptor instead.
func (*RegisterRequest) GetExchange ¶
func (x *RegisterRequest) GetExchange() string
func (*RegisterRequest) GetExt ¶
func (x *RegisterRequest) GetExt() *structpb.Struct
func (*RegisterRequest) GetExtCritical ¶
func (x *RegisterRequest) GetExtCritical() []string
func (*RegisterRequest) GetRegistrationData ¶
func (x *RegisterRequest) GetRegistrationData() *structpb.Struct
func (*RegisterRequest) GetTermsDigest ¶
func (x *RegisterRequest) GetTermsDigest() string
func (*RegisterRequest) GetVer ¶
func (x *RegisterRequest) GetVer() string
func (*RegisterRequest) ProtoMessage ¶
func (*RegisterRequest) ProtoMessage()
func (*RegisterRequest) ProtoReflect ¶
func (x *RegisterRequest) ProtoReflect() protoreflect.Message
func (*RegisterRequest) Reset ¶
func (x *RegisterRequest) Reset()
func (*RegisterRequest) String ¶
func (x *RegisterRequest) String() string
type RegisterResponse ¶
type RegisterResponse struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Opaque, long-lived, per-Exchange account handle minted by the Exchange.
// Means nothing on its own and is never accepted as caller input. A repeat
// Register for the same agent returns the same value.
BillingRef string `protobuf:"bytes,2,opt,name=billing_ref,json=billingRef,proto3" json:"billing_ref,omitempty"`
// Whether the account is currently active. Accounts may start inactive
// and be activated out-of-band by the Exchange operator.
Active bool `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
RegisterResponse — Exchange returns the minted account handle.
func (*RegisterResponse) Descriptor
deprecated
func (*RegisterResponse) Descriptor() ([]byte, []int)
Deprecated: Use RegisterResponse.ProtoReflect.Descriptor instead.
func (*RegisterResponse) GetActive ¶
func (x *RegisterResponse) GetActive() bool
func (*RegisterResponse) GetBillingRef ¶
func (x *RegisterResponse) GetBillingRef() string
func (*RegisterResponse) GetExt ¶
func (x *RegisterResponse) GetExt() *structpb.Struct
func (*RegisterResponse) GetExtCritical ¶
func (x *RegisterResponse) GetExtCritical() []string
func (*RegisterResponse) GetVer ¶
func (x *RegisterResponse) GetVer() string
func (*RegisterResponse) ProtoMessage ¶
func (*RegisterResponse) ProtoMessage()
func (*RegisterResponse) ProtoReflect ¶
func (x *RegisterResponse) ProtoReflect() protoreflect.Message
func (*RegisterResponse) Reset ¶
func (x *RegisterResponse) Reset()
func (*RegisterResponse) String ¶
func (x *RegisterResponse) String() string
type RegistrationFailure ¶
type RegistrationFailure struct {
// The failure reason (defined-only, non-zero)
Reason RegistrationFailureReason `protobuf:"varint,1,opt,name=reason,proto3,enum=fora.v1.RegistrationFailureReason" json:"reason,omitempty"`
// When reason = INVALID_REGISTRATION_DATA: the registration_data members
// that are missing or do not conform. Empty for every other reason — enforced
// by the message rule above, not left to prose.
FieldErrors []*RegistrationFieldError `protobuf:"bytes,2,rep,name=field_errors,json=fieldErrors,proto3" json:"field_errors,omitempty"`
// contains filtered or unexported fields
}
RegistrationFailure — a registration request could not be completed.
func (*RegistrationFailure) Descriptor
deprecated
func (*RegistrationFailure) Descriptor() ([]byte, []int)
Deprecated: Use RegistrationFailure.ProtoReflect.Descriptor instead.
func (*RegistrationFailure) GetFieldErrors ¶
func (x *RegistrationFailure) GetFieldErrors() []*RegistrationFieldError
func (*RegistrationFailure) GetReason ¶
func (x *RegistrationFailure) GetReason() RegistrationFailureReason
func (*RegistrationFailure) ProtoMessage ¶
func (*RegistrationFailure) ProtoMessage()
func (*RegistrationFailure) ProtoReflect ¶
func (x *RegistrationFailure) ProtoReflect() protoreflect.Message
func (*RegistrationFailure) Reset ¶
func (x *RegistrationFailure) Reset()
func (*RegistrationFailure) String ¶
func (x *RegistrationFailure) String() string
type RegistrationFailureReason ¶
type RegistrationFailureReason int32
RegistrationFailureReason — why agent/provider registration was refused. Replaces the hand-rolled errors on POST /exchange/v1/agents/register.
const ( RegistrationFailureReason_REGISTRATION_FAILURE_REASON_UNSPECIFIED RegistrationFailureReason = 0 // unset — rejected at ingest RegistrationFailureReason_REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED RegistrationFailureReason = 1 // caller domain is not verified RegistrationFailureReason_REGISTRATION_FAILURE_REASON_INVALID_KEY RegistrationFailureReason = 2 // signing key malformed or unsupported RegistrationFailureReason_REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID RegistrationFailureReason = 3 // request signature invalid // LEGACY, never emitted. Register MUST NOT emit this reason. Registering again // for an agent that already holds an account SUCCEEDS: it is answered from the // stored record and returns the existing billing_ref, so there is no refusal to // report. See "Repeat registration" in the Agent Account Registration section. // // The number is retained and MUST NOT be reused, and this value MUST NOT be // given a new meaning. It reads like a natural home for a future cross-account // identity collision — one agent key claiming a business identity another // account already holds — and that is exactly why it is closed off here: this // contract defines no way for an Exchange to correlate business identity across // accounts, since registration_data is operator-defined and passed through // uninspected unless a schema is published. Repurposing 4 later would silently // change what it means for every client already built against this text. If // that case is ever specified, it needs its own identity model and its own // named reason. // // Deprecated: Marked as deprecated in fora/v1/fora.proto. RegistrationFailureReason_REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED RegistrationFailureReason = 4 RegistrationFailureReason_REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED RegistrationFailureReason = 5 // registration quota exceeded RegistrationFailureReason_REGISTRATION_FAILURE_REASON_INVALID_REGISTRATION_DATA RegistrationFailureReason = 6 // registration_data does not conform to the Exchange's published AccountRegistration.data_schema RegistrationFailureReason_REGISTRATION_FAILURE_REASON_TERMS_DIGEST_STALE RegistrationFailureReason = 7 // terms_digest does not match the currently published WellKnownManifest.terms_digest, or was omitted while the Exchange publishes one )
func (RegistrationFailureReason) Descriptor ¶
func (RegistrationFailureReason) Descriptor() protoreflect.EnumDescriptor
func (RegistrationFailureReason) Enum ¶
func (x RegistrationFailureReason) Enum() *RegistrationFailureReason
func (RegistrationFailureReason) EnumDescriptor
deprecated
func (RegistrationFailureReason) EnumDescriptor() ([]byte, []int)
Deprecated: Use RegistrationFailureReason.Descriptor instead.
func (RegistrationFailureReason) Number ¶
func (x RegistrationFailureReason) Number() protoreflect.EnumNumber
func (RegistrationFailureReason) String ¶
func (x RegistrationFailureReason) String() string
func (RegistrationFailureReason) Type ¶
func (RegistrationFailureReason) Type() protoreflect.EnumType
type RegistrationFieldError ¶
type RegistrationFieldError struct {
// RFC 6901 JSON Pointer to the offending member, relative to
// registration_data (e.g. "/vat_id", "/address/postal_code"). The empty
// string addresses registration_data itself, for whole-object failures
// (oneOf, minProperties) that belong to no single member.
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
// Developer-facing, NON-authoritative description of what failed
// (e.g. "required", "must match ^[A-Z]{2}[0-9]+$"). Wording is
// validator-defined and not stable across Exchanges; clients branch on
// `reason`, never on this text. States the constraint, NEVER the submitted
// value — the ErrorDetail leakage rule applies here too.
Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
// contains filtered or unexported fields
}
RegistrationFieldError — one registration_data member that failed the Exchange's published schema (AccountRegistration.data_schema).
func (*RegistrationFieldError) Descriptor
deprecated
func (*RegistrationFieldError) Descriptor() ([]byte, []int)
Deprecated: Use RegistrationFieldError.ProtoReflect.Descriptor instead.
func (*RegistrationFieldError) GetError ¶
func (x *RegistrationFieldError) GetError() string
func (*RegistrationFieldError) GetPath ¶
func (x *RegistrationFieldError) GetPath() string
func (*RegistrationFieldError) ProtoMessage ¶
func (*RegistrationFieldError) ProtoMessage()
func (*RegistrationFieldError) ProtoReflect ¶
func (x *RegistrationFieldError) ProtoReflect() protoreflect.Message
func (*RegistrationFieldError) Reset ¶
func (x *RegistrationFieldError) Reset()
func (*RegistrationFieldError) String ¶
func (x *RegistrationFieldError) String() string
type RemoveResourcesRequest ¶
type RemoveResourcesRequest struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Tenant identifier
TenantId string `protobuf:"bytes,2,opt,name=tenant_id,json=tenantId,proto3" json:"tenant_id,omitempty"`
// Paths to remove — the absolute-path shape ResourceEntry.path carries, at
// least one and at most 256, the same batch bound PushResourcesRequest.entries
// carries and for the same reason.
Paths []string `protobuf:"bytes,3,rep,name=paths,proto3" json:"paths,omitempty"`
// REQUIRED. Bare host of the recipient this request is addressed to (e.g.
// "exchange.example" or "exchange.example:8081"). See "Request recipient" in
// the file header. Distinct from `tenant_id` above, which names a publisher
// tenant WITHIN an Exchange, not the Exchange itself.
Exchange string `protobuf:"bytes,4,opt,name=exchange,proto3" json:"exchange,omitempty"`
// contains filtered or unexported fields
}
func (*RemoveResourcesRequest) Descriptor
deprecated
func (*RemoveResourcesRequest) Descriptor() ([]byte, []int)
Deprecated: Use RemoveResourcesRequest.ProtoReflect.Descriptor instead.
func (*RemoveResourcesRequest) GetExchange ¶
func (x *RemoveResourcesRequest) GetExchange() string
func (*RemoveResourcesRequest) GetPaths ¶
func (x *RemoveResourcesRequest) GetPaths() []string
func (*RemoveResourcesRequest) GetTenantId ¶
func (x *RemoveResourcesRequest) GetTenantId() string
func (*RemoveResourcesRequest) GetVer ¶
func (x *RemoveResourcesRequest) GetVer() string
func (*RemoveResourcesRequest) ProtoMessage ¶
func (*RemoveResourcesRequest) ProtoMessage()
func (*RemoveResourcesRequest) ProtoReflect ¶
func (x *RemoveResourcesRequest) ProtoReflect() protoreflect.Message
func (*RemoveResourcesRequest) Reset ¶
func (x *RemoveResourcesRequest) Reset()
func (*RemoveResourcesRequest) String ¶
func (x *RemoveResourcesRequest) String() string
type RemoveResourcesResponse ¶
type RemoveResourcesResponse struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Number of entries removed
Removed int32 `protobuf:"varint,2,opt,name=removed,proto3" json:"removed,omitempty"`
// contains filtered or unexported fields
}
func (*RemoveResourcesResponse) Descriptor
deprecated
func (*RemoveResourcesResponse) Descriptor() ([]byte, []int)
Deprecated: Use RemoveResourcesResponse.ProtoReflect.Descriptor instead.
func (*RemoveResourcesResponse) GetRemoved ¶
func (x *RemoveResourcesResponse) GetRemoved() int32
func (*RemoveResourcesResponse) GetVer ¶
func (x *RemoveResourcesResponse) GetVer() string
func (*RemoveResourcesResponse) ProtoMessage ¶
func (*RemoveResourcesResponse) ProtoMessage()
func (*RemoveResourcesResponse) ProtoReflect ¶
func (x *RemoveResourcesResponse) ProtoReflect() protoreflect.Message
func (*RemoveResourcesResponse) Reset ¶
func (x *RemoveResourcesResponse) Reset()
func (*RemoveResourcesResponse) String ¶
func (x *RemoveResourcesResponse) String() string
type ReportingObligation ¶
type ReportingObligation struct {
// Whether post-usage reporting is required.
Required bool `protobuf:"varint,1,opt,name=required,proto3" json:"required,omitempty"`
// Duration within which the report must be submitted (e.g. "86400s" = 24
// hours; proto-JSON encodes Duration as seconds).
Window *durationpb.Duration `protobuf:"bytes,2,opt,name=window,proto3,oneof" json:"window,omitempty"`
// URL to submit the usage report to (if different from Exchange).
Endpoint *string `protobuf:"bytes,3,opt,name=endpoint,proto3,oneof" json:"endpoint,omitempty"`
// Field names that must be present in the report.
RequiredFields []string `protobuf:"bytes,4,rep,name=required_fields,json=requiredFields,proto3" json:"required_fields,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
ReportingObligation — Requirements attached to a delivery.
func (*ReportingObligation) Descriptor
deprecated
func (*ReportingObligation) Descriptor() ([]byte, []int)
Deprecated: Use ReportingObligation.ProtoReflect.Descriptor instead.
func (*ReportingObligation) GetEndpoint ¶
func (x *ReportingObligation) GetEndpoint() string
func (*ReportingObligation) GetExt ¶
func (x *ReportingObligation) GetExt() *structpb.Struct
func (*ReportingObligation) GetExtCritical ¶
func (x *ReportingObligation) GetExtCritical() []string
func (*ReportingObligation) GetRequired ¶
func (x *ReportingObligation) GetRequired() bool
func (*ReportingObligation) GetRequiredFields ¶
func (x *ReportingObligation) GetRequiredFields() []string
func (*ReportingObligation) GetWindow ¶
func (x *ReportingObligation) GetWindow() *durationpb.Duration
func (*ReportingObligation) ProtoMessage ¶
func (*ReportingObligation) ProtoMessage()
func (*ReportingObligation) ProtoReflect ¶
func (x *ReportingObligation) ProtoReflect() protoreflect.Message
func (*ReportingObligation) Reset ¶
func (x *ReportingObligation) Reset()
func (*ReportingObligation) String ¶
func (x *ReportingObligation) String() string
type RequestConstraints ¶
type RequestConstraints struct {
// Authorized Exchange domains, in the shape "Request recipient" defines in the
// file header. Broker queries only these. This is a FILTER over third parties,
// not an address — the recipient of the request carrying it is a separate
// question.
Exchanges []string `protobuf:"bytes,1,rep,name=exchanges,proto3" json:"exchanges,omitempty"`
// Maximum price the agent is willing to pay.
MaxPrice *Cost `protobuf:"bytes,2,opt,name=max_price,json=maxPrice,proto3,oneof" json:"max_price,omitempty"`
// Maximum effective cost per unit, as an exact decimal string (not a float).
MaxUnitCost *string `protobuf:"bytes,3,opt,name=max_unit_cost,json=maxUnitCost,proto3,oneof" json:"max_unit_cost,omitempty"`
// Preferred delivery methods, in order of preference.
DeliveryPreference []DeliveryMethod `` /* 151-byte string literal not displayed */
// Whether the agent supports post-usage reporting.
ReportingCapable *bool `protobuf:"varint,5,opt,name=reporting_capable,json=reportingCapable,proto3,oneof" json:"reporting_capable,omitempty"`
// Exchanges the agent has existing relationships with (subscriptions,
// contracts). The Broker SHOULD prefer these when resource is
// available — subscription resource has zero marginal cost.
PreferredExchanges []string `protobuf:"bytes,6,rep,name=preferred_exchanges,json=preferredExchanges,proto3" json:"preferred_exchanges,omitempty"`
// Budget scope identifier for per-period tracking.
// E.g. "user:u-12345" for per-user budgets, "team:eng" for per-team.
// The Broker tracks cumulative spend per scope across sessions.
BudgetScope *string `protobuf:"bytes,7,opt,name=budget_scope,json=budgetScope,proto3,oneof" json:"budget_scope,omitempty"`
// Per-period budget limit. The Broker tracks spend against this
// for the budget_scope. Transactions that would exceed are denied.
PeriodBudget *Cost `protobuf:"bytes,8,opt,name=period_budget,json=periodBudget,proto3,oneof" json:"period_budget,omitempty"`
// Budget period (e.g. "2592000s" = 30 days; proto-JSON encodes Duration
// as seconds). Resets at period boundary.
BudgetPeriod *durationpb.Duration `protobuf:"bytes,9,opt,name=budget_period,json=budgetPeriod,proto3,oneof" json:"budget_period,omitempty"`
// Maximum acceptable age of resource data. The Broker SHOULD
// exclude offers where (now - Offer.data_as_of) exceeds this duration.
//
// Only relevant for DYNAMIC resources. Ignored for STATIC (content is
// immutable) and LIVE (content doesn't exist yet).
//
// Examples:
//
// 7 days — "credit report updated within the last week"
// 1 hour — "stock snapshot from the last hour"
// 30 days — "drug interaction database updated this month"
MaxDataAge *durationpb.Duration `protobuf:"bytes,10,opt,name=max_data_age,json=maxDataAge,proto3,oneof" json:"max_data_age,omitempty"`
// Maximum forwarding hops the agent will allow (Agent → Broker → … →
// Exchange), counted as the number of RFC 9421 HTTP Message Signatures on the
// request. Caps chain depth so a request is not relayed through more brokers
// than the agent is willing to trust or pay. A Broker MUST NOT forward a
// request whose signature count would exceed this. Absent = agent imposes no
// cap (the Exchange's max_intermediary_hops still applies).
MaxHops *int32 `protobuf:"varint,11,opt,name=max_hops,json=maxHops,proto3,oneof" json:"max_hops,omitempty"`
// contains filtered or unexported fields
}
RequestConstraints — Budget and preference constraints.
func (*RequestConstraints) Descriptor
deprecated
func (*RequestConstraints) Descriptor() ([]byte, []int)
Deprecated: Use RequestConstraints.ProtoReflect.Descriptor instead.
func (*RequestConstraints) GetBudgetPeriod ¶
func (x *RequestConstraints) GetBudgetPeriod() *durationpb.Duration
func (*RequestConstraints) GetBudgetScope ¶
func (x *RequestConstraints) GetBudgetScope() string
func (*RequestConstraints) GetDeliveryPreference ¶
func (x *RequestConstraints) GetDeliveryPreference() []DeliveryMethod
func (*RequestConstraints) GetExchanges ¶
func (x *RequestConstraints) GetExchanges() []string
func (*RequestConstraints) GetMaxDataAge ¶
func (x *RequestConstraints) GetMaxDataAge() *durationpb.Duration
func (*RequestConstraints) GetMaxHops ¶
func (x *RequestConstraints) GetMaxHops() int32
func (*RequestConstraints) GetMaxPrice ¶
func (x *RequestConstraints) GetMaxPrice() *Cost
func (*RequestConstraints) GetMaxUnitCost ¶
func (x *RequestConstraints) GetMaxUnitCost() string
func (*RequestConstraints) GetPeriodBudget ¶
func (x *RequestConstraints) GetPeriodBudget() *Cost
func (*RequestConstraints) GetPreferredExchanges ¶
func (x *RequestConstraints) GetPreferredExchanges() []string
func (*RequestConstraints) GetReportingCapable ¶
func (x *RequestConstraints) GetReportingCapable() bool
func (*RequestConstraints) ProtoMessage ¶
func (*RequestConstraints) ProtoMessage()
func (*RequestConstraints) ProtoReflect ¶
func (x *RequestConstraints) ProtoReflect() protoreflect.Message
func (*RequestConstraints) Reset ¶
func (x *RequestConstraints) Reset()
func (*RequestConstraints) String ¶
func (x *RequestConstraints) String() string
type Requester ¶
type Requester struct {
// Unique requester identifier (e.g., "agent-research-bot-001").
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// Domain the requester belongs to. It carries the same bare-host shape
// "Request recipient" defines in the file header, for the same structural
// reason: a scheme, path or query smuggled in here would choose what gets
// fetched, not merely from where. It is NOT how a verifier finds this
// requester's keys: those live in the WBA directory, and verification resolves
// that directory from the COVERED `Signature-Agent` header, never from this
// self-asserted value.
Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
// What kind of entity is making this request.
Type RequesterType `protobuf:"varint,3,opt,name=type,proto3,enum=fora.v1.RequesterType" json:"type,omitempty"`
// Human-readable name (e.g., "Acme Research Assistant").
Name *string `protobuf:"bytes,4,opt,name=name,proto3,oneof" json:"name,omitempty"`
// Entitlement scopes. Declare what the requester can access.
//
// The Exchange filters its catalog to resources matching these scopes.
// Resources outside the scopes are not returned — the requester never
// learns they exist. This is the enforcement mechanism for both enterprise
// RBAC and open-market subscription entitlements.
//
// Scope format: colon-separated segments, "{domain}:{permission}" or
// "{profile}:{permission}", optionally multi-segment ("dist:US:CA");
// matching is segment-wise per the rule below (no implicit hierarchy).
// Examples:
//
// "credit:read" — can access credit reports
// "subscription:marketdata-2026" — has active MarketData subscription
// "academic:*" — full access to academic resources
// "internal:reports" — can access internal reports
// "*" — unrestricted (public Exchange default)
//
// Matching is SEGMENT-WISE (":" separated). A granted scope G covers a
// required scope R iff, segment by segment, each G segment equals the
// corresponding R segment or is "*"; a terminal "*" matches all remaining
// segments. There is NO implicit prefix match, and a grant NARROWER than
// the requirement does not cover it (G must be equal-to-or-broader than R).
// Examples: "dist:*" covers "dist:US" and "dist:US:CA"; "dist:US:*" covers
// "dist:US:CA" but not "dist:EU"; bare "dist" covers only "dist"; granted
// "dist:US:CA" does NOT cover required "dist:US"; "*" covers everything.
// This same rule governs LicenseTerm.scopes — one algorithm protocol-wide.
//
// When empty, Exchange applies its default access policy (typically
// returns all publicly available resources).
Scopes []string `protobuf:"bytes,6,rep,name=scopes,proto3" json:"scopes,omitempty"`
// Optional delegation — present when the requester acts on behalf of
// another entity (user, organization, upstream agent).
Delegation *Delegation `protobuf:"bytes,7,opt,name=delegation,proto3,oneof" json:"delegation,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
Requester — Universal identity for any FORA client.
Carries identity and entitlements ONLY — who is asking and what they are entitled to (scopes, delegation). What they are asking for (uris) and the limits they will operate within (acceptable_restrictions) belong to the ask, not the identity, and live on ResourceQuery / DiscoveryRequest. The Exchange verifies identity via the RFC 9421 request signature, then filters its catalog by the requester's scopes. Billing needs nothing from this message: the Exchange resolves the caller's account (RegisterResponse.billing_ref) from the verified signature, never from anything the caller sends.
func (*Requester) Descriptor
deprecated
func (*Requester) GetDelegation ¶
func (x *Requester) GetDelegation() *Delegation
func (*Requester) GetExtCritical ¶
func (*Requester) GetType ¶
func (x *Requester) GetType() RequesterType
func (*Requester) ProtoMessage ¶
func (*Requester) ProtoMessage()
func (*Requester) ProtoReflect ¶
func (x *Requester) ProtoReflect() protoreflect.Message
type RequesterType ¶
type RequesterType int32
RequesterType — What kind of entity is making the request.
const ( RequesterType_REQUESTER_TYPE_UNSPECIFIED RequesterType = 0 // unset — rejected at ingest // Autonomous AI agent (LLM, RAG system, research bot). RequesterType_REQUESTER_TYPE_AGENT RequesterType = 1 // Human using an AI-powered tool (copilot, assistant). RequesterType_REQUESTER_TYPE_HUMAN_TOOL RequesterType = 2 // Enterprise service account (automated pipeline, cron job). RequesterType_REQUESTER_TYPE_SERVICE RequesterType = 3 // Agent acting on behalf of a user (delegated identity). RequesterType_REQUESTER_TYPE_DELEGATED RequesterType = 4 // Research pipeline (batch data collection, model training). RequesterType_REQUESTER_TYPE_RESEARCH RequesterType = 5 )
func (RequesterType) Descriptor ¶
func (RequesterType) Descriptor() protoreflect.EnumDescriptor
func (RequesterType) Enum ¶
func (x RequesterType) Enum() *RequesterType
func (RequesterType) EnumDescriptor
deprecated
func (RequesterType) EnumDescriptor() ([]byte, []int)
Deprecated: Use RequesterType.Descriptor instead.
func (RequesterType) Number ¶
func (x RequesterType) Number() protoreflect.EnumNumber
func (RequesterType) String ¶
func (x RequesterType) String() string
func (RequesterType) Type ¶
func (RequesterType) Type() protoreflect.EnumType
type ResolutionType ¶
type ResolutionType int32
ResolutionType — Outcome of a resolved dispute.
Populated in DisputeResponse.resolution when the dispute reaches a terminal state (RESOLVED, SETTLED, or FINAL).
const ( ResolutionType_RESOLUTION_TYPE_UNSPECIFIED ResolutionType = 0 // unset — output/optional; zero is a valid not-applicable/unset state // Account credit applied to the agent's next billing cycle. ResolutionType_RESOLUTION_TYPE_CREDIT ResolutionType = 1 // New signed URL issued for the same resource (e.g., when content hash // now matches after provider correction). ResolutionType_RESOLUTION_TYPE_REDELIVERY ResolutionType = 2 // Dispute reviewed and rejected; no remedy applied. ResolutionType_RESOLUTION_TYPE_REJECTED ResolutionType = 3 // Escalated to Tier 3 pattern analysis for further investigation. ResolutionType_RESOLUTION_TYPE_INVESTIGATION ResolutionType = 4 )
func (ResolutionType) Descriptor ¶
func (ResolutionType) Descriptor() protoreflect.EnumDescriptor
func (ResolutionType) Enum ¶
func (x ResolutionType) Enum() *ResolutionType
func (ResolutionType) EnumDescriptor
deprecated
func (ResolutionType) EnumDescriptor() ([]byte, []int)
Deprecated: Use ResolutionType.Descriptor instead.
func (ResolutionType) Number ¶
func (x ResolutionType) Number() protoreflect.EnumNumber
func (ResolutionType) String ¶
func (x ResolutionType) String() string
func (ResolutionType) Type ¶
func (ResolutionType) Type() protoreflect.EnumType
type ResourceAttestation ¶
type ResourceAttestation struct {
// Canonical domain of the attesting party (e.g., "nytimes.com" for
// self-attestation, "doubleverify.com" for third-party attestation).
// Used to look up the verifier's attestation-signing keys in its WBA
// directory (WBAFile.keys) at
//
// https://{verifier}/.well-known/http-message-signatures-directory
Verifier string `protobuf:"bytes,1,opt,name=verifier,proto3" json:"verifier,omitempty"`
// RFC 7638 JWK Thumbprint (the RFC 9421 keyid) of the verifier's
// attestation-signing key, resolved against the verifier's WBA directory
// (WBAFile.keys). Identifies which Ed25519 key signed this attestation.
// Enables key rotation: new keys are published with overlapping validity,
// new attestations use the new key's thumbprint, old attestations remain
// verifiable while the old key is still published.
Keyid string `protobuf:"bytes,2,opt,name=keyid,proto3" json:"keyid,omitempty"`
// When this attestation was created. Agents use this to assess freshness
// (e.g., "I accept attestations up to N hours old for breaking news").
AttestedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=attested_at,json=attestedAt,proto3" json:"attested_at,omitempty"`
// The resource URI this attestation covers. Must match the URI in the
// Offer or ResourceEntry this attestation is attached to.
Uri string `protobuf:"bytes,4,opt,name=uri,proto3" json:"uri,omitempty"`
// Signed claims about the resource (max 4KB). A JSON object containing
// whatever properties the attesting party can determine about the resource.
// Recommended claim names for interoperability:
//
// estimated_quantity (integer): estimated consumption quantity (e.g., token count for text)
// word_count (integer): word count (estimated_quantity ~ word_count * 1.32 for text)
// language (string): ISO 639-1 language code
// iab_categories (string[]): IAB Content Taxonomy 3.1 codes
// content_hash (string): hash of content in "method:hexdigest" format
// hash_method (string): algorithm used for content_hash
//
// Vendors MAY add vendor-specific claims (e.g., brand_safety, sentiment).
// The protocol does NOT define "quality score" — it is inherently subjective.
// If a vendor provides a proprietary score, the vendor defines what it means
// via their WellKnownManifest ext["fora.attestation.claims_schema"].
Claims *structpb.Struct `protobuf:"bytes,5,opt,name=claims,proto3" json:"claims,omitempty"`
// Ed25519 signature over JCS-canonicalized (RFC 8785) representation of
// {verifier, keyid, attested_at, uri, claims}. JCS (JSON Canonicalization
// Scheme) produces deterministic UTF-8 bytes: lexicographic key sorting,
// ECMAScript number serialization, strict string escaping, no whitespace.
// Each attestation is self-contained — new claim fields do not invalidate
// old attestations because the signature covers the specific claims instance.
Signature string `protobuf:"bytes,6,opt,name=signature,proto3" json:"signature,omitempty"`
// contains filtered or unexported fields
}
ResourceAttestation — Signed envelope of claims from a trusted party.
A provider or third-party verification vendor (GumGum, DoubleVerify, IAS) attests to properties of the resource at a specific URI at a specific time. The signature covers all fields, proving origin and integrity of the claims.
Verification levels (determined by who the verifier is):
Level 0: No attestation present. Resource may carry identifiers
(DOI, IPTC GUID via ResourceIdentity) but nothing is cryptographically
verifiable. Only CDN delivery failure is auto-disputable.
Level 1 (self-attested): verifier == provider domain. Provider signs
own claims with their Ed25519 key. Agent can independently verify
content_hash by re-computing it from delivered bytes. Requires the
provider to serve deterministic content at the delivery endpoint.
Level 2 (third-party attested): verifier == verification vendor domain.
Vendor independently crawled the resource and attested to its properties.
Agent trusts the attestation — does NOT re-verify the content hash
(agent lacks the vendor's extraction algorithm). The Ed25519 signature
proves the vendor made the attestation; trust is binary ("do I trust
this vendor?").
Claims are limited to 4KB. Attestations are carried in-memory in the Exchange catalog and in Offer responses — strict size limits protect against payload poisoning and ensure catalog performance at scale.
Verifiers MUST publish their attestation-signing keys in their WBA directory (WBAFile.keys) at:
https://{verifier-domain}/.well-known/http-message-signatures-directory
identified by RFC 7638 thumbprint. Verifiers publish the claims-schema structure at WellKnownManifest.ext["fora.attestation.claims_schema"].
func (*ResourceAttestation) Descriptor
deprecated
func (*ResourceAttestation) Descriptor() ([]byte, []int)
Deprecated: Use ResourceAttestation.ProtoReflect.Descriptor instead.
func (*ResourceAttestation) GetAttestedAt ¶
func (x *ResourceAttestation) GetAttestedAt() *timestamppb.Timestamp
func (*ResourceAttestation) GetClaims ¶
func (x *ResourceAttestation) GetClaims() *structpb.Struct
func (*ResourceAttestation) GetKeyid ¶
func (x *ResourceAttestation) GetKeyid() string
func (*ResourceAttestation) GetSignature ¶
func (x *ResourceAttestation) GetSignature() string
func (*ResourceAttestation) GetUri ¶
func (x *ResourceAttestation) GetUri() string
func (*ResourceAttestation) GetVerifier ¶
func (x *ResourceAttestation) GetVerifier() string
func (*ResourceAttestation) ProtoMessage ¶
func (*ResourceAttestation) ProtoMessage()
func (*ResourceAttestation) ProtoReflect ¶
func (x *ResourceAttestation) ProtoReflect() protoreflect.Message
func (*ResourceAttestation) Reset ¶
func (x *ResourceAttestation) Reset()
func (*ResourceAttestation) String ¶
func (x *ResourceAttestation) String() string
type ResourceEntry ¶
type ResourceEntry struct {
// Provider domain — the bare host the resource lives on, in the shape
// "Request recipient" defines in the file header: a port is allowed, a
// scheme, path, query or userinfo is not. With path it forms the catalog URI
// by concatenation, so a value carrying anything but a host would choose the
// URI rather than merely name the host.
Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"`
// Content path — an absolute URL path such as "/premium/article-42.html":
// starts with "/", carries no query or fragment delimiter, no whitespace and
// no control character, and is at most 2048 characters. Characters, not bytes:
// protovalidate's max_len counts Unicode code points, and the pattern admits
// non-ASCII, so a conformant path can exceed 2048 bytes.
Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
// Content identifier
ContentId *string `protobuf:"bytes,3,opt,name=content_id,json=contentId,proto3,oneof" json:"content_id,omitempty"`
// Content title
Title *string `protobuf:"bytes,4,opt,name=title,proto3,oneof" json:"title,omitempty"`
// Word count
WordCount *int32 `protobuf:"varint,5,opt,name=word_count,json=wordCount,proto3,oneof" json:"word_count,omitempty"`
// Estimated quantity in the metering unit
EstimatedQuantity *int32 `protobuf:"varint,6,opt,name=estimated_quantity,json=estimatedQuantity,proto3,oneof" json:"estimated_quantity,omitempty"`
// Content hash, carried as the publisher computed it — a bare hex digest or a
// "method:hexdigest" form; bounded in length, never format-checked, because
// hash_method names the algorithm.
ContentHash *string `protobuf:"bytes,7,opt,name=content_hash,json=contentHash,proto3,oneof" json:"content_hash,omitempty"`
// Hash algorithm
HashMethod *string `protobuf:"bytes,8,opt,name=hash_method,json=hashMethod,proto3,oneof" json:"hash_method,omitempty"`
// How the entry was discovered
Source *IngestionSource `protobuf:"varint,9,opt,name=source,proto3,enum=fora.v1.IngestionSource,oneof" json:"source,omitempty"`
// Who provided this resource metadata. Creates audit trail for
// "where did this catalog entry come from?"
ProvenanceSource *string `protobuf:"bytes,10,opt,name=provenance_source,json=provenanceSource,proto3,oneof" json:"provenance_source,omitempty"` // e.g., "gumgum.com", "ssp-alpha.com", "wordpress-plugin"
// When this metadata was collected/generated.
ProvenanceTimestamp *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=provenance_timestamp,json=provenanceTimestamp,proto3,oneof" json:"provenance_timestamp,omitempty"`
// Signed attestations about this resource entry.
// Same semantics as Offer.attestations — see ResourceAttestation message
// for verification levels and claim vocabulary. Attestations pushed via
// CatalogService are verified at push time: the Exchange checks that
// the attestation verifier is authorized to push for this provider
// (via catalog_contributors in the provider's WellKnownManifest) and validates the
// attestation signature against the verifier's public key from its WBA
// directory (the JWK Set at /.well-known/http-message-signatures-directory;
// the keyid is the key's RFC 7638 thumbprint). The verifier's fora.json
// carries only its role, determined by the verifier's operator.
Attestations []*ResourceAttestation `protobuf:"bytes,12,rep,name=attestations,proto3" json:"attestations,omitempty"`
// Publisher-declared licensing terms for this resource.
// See LicenseTerm for the full model. For ENUMERATED terms, Pricing MUST
// be present. For REFERENCE_ONLY terms, License.uri is authoritative.
// The Exchange validates ENUMERATED terms at push time and surfaces them
// in Offer.terms on discovery. At most 32 terms per entry, stated on the wire
// so every implementation refuses the same size. An over-cap entry refuses the
// whole submission, as every catalog rejection does; what being a wire rule
// changes is WHEN — the refusal now happens at the boundary, before any
// per-entry classification runs, which is why the rejection reason that named
// this cap can no longer be produced for a push.
Terms []*LicenseTerm `protobuf:"bytes,13,rep,name=terms,proto3" json:"terms,omitempty"`
// Optional mutability hint. When omitted, the Exchange applies the `STATIC`
// default at Offer build; an explicit `UNSPECIFIED` is rejected. A value in
// `ext` is not read — the typed field is authoritative, so an ext-only value
// is treated as omitted. Mirrors the required Offer-side
// `ResourceIdentity.resource_mutability`.
ResourceMutability *ResourceMutability `` /* 155-byte string literal not displayed */
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
ResourceEntry — one catalog row as a publisher (or an authorised contributor) pushes it. The envelope fields carry their own wire rules, so an entry that cannot become a catalog URI is refused at the boundary rather than after ingestion; the licensing terms inside carry the LicenseTerm rules. See CatalogService for the second, ingest-time tier (token canonicalisation and registry membership).
The list caps here and on LicenseTerm bound HOW MANY, never how large: how many terms one entry may carry, how many entries a push can store, and how many paths a rejection has to name back. They do not bound the entry's SIZE either — several members inside one carry no length rule — and they do NOT bound the work of checking a push, and must not be read as doing so — a validator walks every element it is handed and reports every violation before any cardinality rule is applied, so an over-cap list is fully traversed on its way to being refused. The work is bounded one layer down, by the maximum request size the recipient will read; a deployment that exposes CatalogService sets that cap, and the SDK's server binding sets a default.
func (*ResourceEntry) Descriptor
deprecated
func (*ResourceEntry) Descriptor() ([]byte, []int)
Deprecated: Use ResourceEntry.ProtoReflect.Descriptor instead.
func (*ResourceEntry) GetAttestations ¶
func (x *ResourceEntry) GetAttestations() []*ResourceAttestation
func (*ResourceEntry) GetContentHash ¶
func (x *ResourceEntry) GetContentHash() string
func (*ResourceEntry) GetContentId ¶
func (x *ResourceEntry) GetContentId() string
func (*ResourceEntry) GetDomain ¶
func (x *ResourceEntry) GetDomain() string
func (*ResourceEntry) GetEstimatedQuantity ¶
func (x *ResourceEntry) GetEstimatedQuantity() int32
func (*ResourceEntry) GetExt ¶
func (x *ResourceEntry) GetExt() *structpb.Struct
func (*ResourceEntry) GetExtCritical ¶
func (x *ResourceEntry) GetExtCritical() []string
func (*ResourceEntry) GetHashMethod ¶
func (x *ResourceEntry) GetHashMethod() string
func (*ResourceEntry) GetPath ¶
func (x *ResourceEntry) GetPath() string
func (*ResourceEntry) GetProvenanceSource ¶
func (x *ResourceEntry) GetProvenanceSource() string
func (*ResourceEntry) GetProvenanceTimestamp ¶
func (x *ResourceEntry) GetProvenanceTimestamp() *timestamppb.Timestamp
func (*ResourceEntry) GetResourceMutability ¶
func (x *ResourceEntry) GetResourceMutability() ResourceMutability
func (*ResourceEntry) GetSource ¶
func (x *ResourceEntry) GetSource() IngestionSource
func (*ResourceEntry) GetTerms ¶
func (x *ResourceEntry) GetTerms() []*LicenseTerm
func (*ResourceEntry) GetTitle ¶
func (x *ResourceEntry) GetTitle() string
func (*ResourceEntry) GetWordCount ¶
func (x *ResourceEntry) GetWordCount() int32
func (*ResourceEntry) ProtoMessage ¶
func (*ResourceEntry) ProtoMessage()
func (*ResourceEntry) ProtoReflect ¶
func (x *ResourceEntry) ProtoReflect() protoreflect.Message
func (*ResourceEntry) Reset ¶
func (x *ResourceEntry) Reset()
func (*ResourceEntry) String ¶
func (x *ResourceEntry) String() string
type ResourceIdentity ¶
type ResourceIdentity struct {
// Provider's authoritative URL for this resource (rel="canonical").
// Always available. Different per provider for syndicated content.
CanonicalUrl *string `protobuf:"bytes,1,opt,name=canonical_url,json=canonicalUrl,proto3,oneof" json:"canonical_url,omitempty"`
// Digital Object Identifier — persistent, never changes.
Doi *string `protobuf:"bytes,2,opt,name=doi,proto3,oneof" json:"doi,omitempty"`
// IPTC NewsML-G2 globally unique identifier.
// Present when resource flows through news wire syndication (AP, Reuters).
IptcGuid *string `protobuf:"bytes,3,opt,name=iptc_guid,json=iptcGuid,proto3,oneof" json:"iptc_guid,omitempty"`
// International Standard Name Identifier for the creator.
Isni *string `protobuf:"bytes,4,opt,name=isni,proto3,oneof" json:"isni,omitempty"`
// Hash of the content. Interpretation depends on hash_method:
//
// "simhash-v1" → locality-sensitive hash, for fuzzy dedup (Level 1)
// "sha256" → exact-match integrity hash (Level 2)
//
// Level 1 (SimHash): computed by Exchange from extracted text.
//
// Agent verifies that fetched content is "substantially similar."
// Tolerates dynamic page elements.
//
// Level 2 (SHA-256): computed by provider from deterministic payload.
//
// Agent verifies exact match. Requires provider to serve consistent
// content (e.g., API endpoint, static HTML, structured JSON).
// Mismatch = dispute. Commands premium pricing.
ContentHash *string `protobuf:"bytes,5,opt,name=content_hash,json=contentHash,proto3,oneof" json:"content_hash,omitempty"`
// Hash algorithm and verification level.
// Examples: "simhash-v1", "minhash-v1", "sha256", "sha384"
HashMethod *string `protobuf:"bytes,6,opt,name=hash_method,json=hashMethod,proto3,oneof" json:"hash_method,omitempty"`
// Signals whether this resource's content is stable, changes over time,
// or does not exist at offer time (live streaming).
//
// Drives hash verification behavior:
//
// STATIC: content_hash is stable. Agent SHOULD verify delivered content matches.
// DYNAMIC: content changes between offer and fetch (credit reports, drug databases).
// content_hash reflects state at offer generation time. Hash mismatch is
// expected and MUST NOT trigger automatic dispute.
// LIVE: content does not exist at offer time (streaming feeds, live broadcasts).
// content_hash is not applicable. The "resource" is the stream endpoint.
//
// Validated across 18 use cases: static content (articles, patents, legislation),
// dynamic data (credit reports, drug interactions, stock snapshots), and live
// streams (MarketData quotes, NPR broadcast, news monitoring feeds).
ResourceMutability ResourceMutability `` /* 148-byte string literal not displayed */
// C2PA content credentials manifest URI.
// Points to a sidecar or embedded C2PA manifest for this resource.
// C2PA-aware agents MAY follow this URI to validate the full provenance
// chain (creator identity, transformation history, ingredient composition)
// using C2PA libraries (JUMBF/COSE Sign1). C2PA-unaware agents can rely
// on c2pa_status and c2pa-bridged attestation claims instead.
//
// Formats:
//
// Sidecar: HTTPS URI to a .c2pa manifest file
// Embedded: same URI as canonical_url (manifest is inside the asset)
// Content Credentials Cloud: https://contentcredentials.org/verify?uri=...
C2PaManifest *string `protobuf:"bytes,7,opt,name=c2pa_manifest,json=c2paManifest,proto3,oneof" json:"c2pa_manifest,omitempty"`
// Summary validation status of the C2PA manifest.
// Populated by the Exchange or a verification vendor after validating
// the C2PA manifest. Enables agents to filter for provenance-verified
// content without parsing JUMBF/COSE themselves.
//
// The full C2PA validation details (signer identity, trust list,
// action history, training/mining status) are carried in a
// ResourceAttestation with c2pa.* claims — see fora-c2pa-v1 profile.
C2PaStatus *C2PAStatus `protobuf:"varint,9,opt,name=c2pa_status,json=c2paStatus,proto3,enum=fora.v1.C2PAStatus,oneof" json:"c2pa_status,omitempty"`
// Soft binding hash — content-derived identifier that survives format
// transcoding (resolution changes, compression, PDF-to-text extraction).
// Extracted from C2PA soft binding assertion when present.
// Enables post-delivery verification when the hard binding hash breaks
// due to legitimate format conversion.
//
// Algorithm specified in soft_binding_method. Values are algorithm-specific
// (e.g., perceptual hash hex string, watermark identifier).
SoftBinding *string `protobuf:"bytes,10,opt,name=soft_binding,json=softBinding,proto3,oneof" json:"soft_binding,omitempty"`
// Algorithm used for soft_binding.
// Examples: "phash-v1" (perceptual hash), "c2pa-watermark" (C2PA invisible
// watermark), "chromaprint" (audio fingerprint).
SoftBindingMethod *string `protobuf:"bytes,11,opt,name=soft_binding_method,json=softBindingMethod,proto3,oneof" json:"soft_binding_method,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
ResourceIdentity — Layered resource identification and verification.
Serves two purposes:
- Cross-exchange deduplication (Broker groups offers for the same underlying resource to compare pricing).
- Resource integrity verification (agent checks that delivered resource matches what was promised).
Providers declare what verification level they support via content_hash + hash_method. Higher verification = higher trust = resource can command premium pricing.
Level 0: No hash (canonical_url only). Agent gets what it gets.
Level 1: SimHash (fuzzy match). Tolerates minor page changes
(ads, nav, timestamps). Catches bait-and-switch.
Level 2: SHA-256 (exact match). Provider serves a clean,
deterministic payload. Agent verifies exact content.
This is non-blocking on current infrastructure: providers who serve dynamic pages use Level 0-1. Providers who invest in consistent resource delivery reach Level 2 and earn more.
CoMP's Package.id identifies the *package* (exchange-specific); ResourceIdentity identifies the *resource* (cross-exchange).
func (*ResourceIdentity) Descriptor
deprecated
func (*ResourceIdentity) Descriptor() ([]byte, []int)
Deprecated: Use ResourceIdentity.ProtoReflect.Descriptor instead.
func (*ResourceIdentity) GetC2PaManifest ¶
func (x *ResourceIdentity) GetC2PaManifest() string
func (*ResourceIdentity) GetC2PaStatus ¶
func (x *ResourceIdentity) GetC2PaStatus() C2PAStatus
func (*ResourceIdentity) GetCanonicalUrl ¶
func (x *ResourceIdentity) GetCanonicalUrl() string
func (*ResourceIdentity) GetContentHash ¶
func (x *ResourceIdentity) GetContentHash() string
func (*ResourceIdentity) GetDoi ¶
func (x *ResourceIdentity) GetDoi() string
func (*ResourceIdentity) GetExt ¶
func (x *ResourceIdentity) GetExt() *structpb.Struct
func (*ResourceIdentity) GetExtCritical ¶
func (x *ResourceIdentity) GetExtCritical() []string
func (*ResourceIdentity) GetHashMethod ¶
func (x *ResourceIdentity) GetHashMethod() string
func (*ResourceIdentity) GetIptcGuid ¶
func (x *ResourceIdentity) GetIptcGuid() string
func (*ResourceIdentity) GetIsni ¶
func (x *ResourceIdentity) GetIsni() string
func (*ResourceIdentity) GetResourceMutability ¶
func (x *ResourceIdentity) GetResourceMutability() ResourceMutability
func (*ResourceIdentity) GetSoftBinding ¶
func (x *ResourceIdentity) GetSoftBinding() string
func (*ResourceIdentity) GetSoftBindingMethod ¶
func (x *ResourceIdentity) GetSoftBindingMethod() string
func (*ResourceIdentity) ProtoMessage ¶
func (*ResourceIdentity) ProtoMessage()
func (*ResourceIdentity) ProtoReflect ¶
func (x *ResourceIdentity) ProtoReflect() protoreflect.Message
func (*ResourceIdentity) Reset ¶
func (x *ResourceIdentity) Reset()
func (*ResourceIdentity) String ¶
func (x *ResourceIdentity) String() string
type ResourceMutability ¶
type ResourceMutability int32
ResourceMutability — Signals whether resource content changes over time.
Drives hash verification behavior and Broker expectations. Cross-cutting: validated across 18 use cases spanning 10 industries.
Examples by level:
STATIC: NYT article, academic paper, patent, EU regulation, podcast episode DYNAMIC: D&B credit report, DrugBank interactions, satellite catalog, news article (corrections) LIVE: MarketData quote stream, NPR live broadcast, news monitoring feed
const ( ResourceMutability_RESOURCE_MUTABILITY_UNSPECIFIED ResourceMutability = 0 // unset — the Exchange defaults to `STATIC` at Offer build; an explicit `UNSPECIFIED` is rejected on `ResourceEntry.resource_mutability` and the Offer's `ResourceIdentity.resource_mutability` (both `{not_in:[0]}`) // Content is immutable. Hash computed at offer time will match at delivery time. // Agent SHOULD verify content_hash on delivery. Mismatch is disputable. ResourceMutability_RESOURCE_MUTABILITY_STATIC ResourceMutability = 1 // Content changes between offer generation and agent fetch. // Hash reflects state at offer time — mismatch is expected, not disputable. // Offer.data_as_of indicates when the snapshot was taken. ResourceMutability_RESOURCE_MUTABILITY_DYNAMIC ResourceMutability = 2 // Content does not exist at offer time (real-time streaming). // No content_hash is applicable. The "resource" is the stream endpoint/channel. // Metering is time-based (per-minute, per-hour). ResourceMutability_RESOURCE_MUTABILITY_LIVE ResourceMutability = 3 )
func (ResourceMutability) Descriptor ¶
func (ResourceMutability) Descriptor() protoreflect.EnumDescriptor
func (ResourceMutability) Enum ¶
func (x ResourceMutability) Enum() *ResourceMutability
func (ResourceMutability) EnumDescriptor
deprecated
func (ResourceMutability) EnumDescriptor() ([]byte, []int)
Deprecated: Use ResourceMutability.Descriptor instead.
func (ResourceMutability) Number ¶
func (x ResourceMutability) Number() protoreflect.EnumNumber
func (ResourceMutability) String ¶
func (x ResourceMutability) String() string
func (ResourceMutability) Type ¶
func (ResourceMutability) Type() protoreflect.EnumType
type ResourceQuery ¶
type ResourceQuery struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Requester identity — who is making this request, what scopes they have,
// and optional delegation chain.
Requester *Requester `protobuf:"bytes,3,opt,name=requester,proto3" json:"requester,omitempty"`
// Resource URIs being queried.
Uris []string `protobuf:"bytes,8,rep,name=uris,proto3" json:"uris,omitempty"`
// The limits this query operates within, per restriction axis (function,
// geography, user-type, …) — see AcceptableRestriction. Advisory selection
// inputs the Exchange/Broker MAY pre-select offers against (convenience, not
// enforcement); the agent self-selects and bears compliance.
AcceptableRestrictions []*AcceptableRestriction `` /* 127-byte string literal not displayed */
// Maximum time the caller will wait for a response.
// Exchange SHOULD prioritize speed over completeness when tight.
// Absent = "0.5s" default (proto-JSON encodes Duration as seconds).
Deadline *durationpb.Duration `protobuf:"bytes,6,opt,name=deadline,proto3,oneof" json:"deadline,omitempty"`
// Domain extension profiles the caller understands.
//
// Declares which ext field vocabularies the caller can parse and act on.
// The Exchange SHOULD include profile-specific ext fields in Offers
// when the caller declares support. The Exchange MAY skip expensive
// metadata computation (e.g., retraction checking, consolidation
// verification) when the caller does not declare the relevant profile.
//
// Absence means "send all available metadata" — Exchange MUST NOT
// withhold ext fields solely because the caller omitted this field.
//
// Values match the Exchange's WellKnownManifest.supported_profiles entries.
// Examples: ["fora-news-v1", "fora-academic-v1", "fora-legal-v1"]
SupportedProfiles []string `protobuf:"bytes,7,rep,name=supported_profiles,json=supportedProfiles,proto3" json:"supported_profiles,omitempty"`
// REQUIRED. Bare host of the recipient this request is addressed to (e.g.
// "exchange.example" or "exchange.example:8081"). See "Request recipient" in
// the file header for the full contract, including the recipient's duty to
// reject a request that names someone else.
Exchange string `protobuf:"bytes,10,opt,name=exchange,proto3" json:"exchange,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
ResourceQuery — Query an Exchange for available resource offers.
Sent by a Broker or directly by an AI agent. The Exchange evaluates its access policies, available inventory, and reporting requirements before responding.
func (*ResourceQuery) Descriptor
deprecated
func (*ResourceQuery) Descriptor() ([]byte, []int)
Deprecated: Use ResourceQuery.ProtoReflect.Descriptor instead.
func (*ResourceQuery) GetAcceptableRestrictions ¶
func (x *ResourceQuery) GetAcceptableRestrictions() []*AcceptableRestriction
func (*ResourceQuery) GetDeadline ¶
func (x *ResourceQuery) GetDeadline() *durationpb.Duration
func (*ResourceQuery) GetExchange ¶
func (x *ResourceQuery) GetExchange() string
func (*ResourceQuery) GetExt ¶
func (x *ResourceQuery) GetExt() *structpb.Struct
func (*ResourceQuery) GetExtCritical ¶
func (x *ResourceQuery) GetExtCritical() []string
func (*ResourceQuery) GetRequester ¶
func (x *ResourceQuery) GetRequester() *Requester
func (*ResourceQuery) GetSupportedProfiles ¶
func (x *ResourceQuery) GetSupportedProfiles() []string
func (*ResourceQuery) GetUris ¶
func (x *ResourceQuery) GetUris() []string
func (*ResourceQuery) GetVer ¶
func (x *ResourceQuery) GetVer() string
func (*ResourceQuery) ProtoMessage ¶
func (*ResourceQuery) ProtoMessage()
func (*ResourceQuery) ProtoReflect ¶
func (x *ResourceQuery) ProtoReflect() protoreflect.Message
func (*ResourceQuery) Reset ¶
func (x *ResourceQuery) Reset()
func (*ResourceQuery) String ¶
func (x *ResourceQuery) String() string
type ResourceResponse ¶
type ResourceResponse struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Canonical domain of the responding Exchange, in the shape "Request
// recipient" defines in the file header. The response counterpart of the
// recipient field on the request: it names who answered.
Exchange string `protobuf:"bytes,3,opt,name=exchange,proto3" json:"exchange,omitempty"`
// Flat list of offers (for single-URI queries).
Offers []*Offer `protobuf:"bytes,4,rep,name=offers,proto3" json:"offers,omitempty"`
// Offers grouped by requested URI (for multi-URI batch queries).
// When populated, `offers` SHOULD be empty to avoid ambiguity.
OfferGroups []*OfferGroup `protobuf:"bytes,5,rep,name=offer_groups,json=offerGroups,proto3" json:"offer_groups,omitempty"`
// Rate limit status for this caller.
// Present when the Exchange enforces per-caller rate limits on discovery.
// Enables agents/Brokers to throttle proactively rather than hitting
// hard limits. Particularly important when a Broker fans out the
// same batch query to multiple Exchanges — mid-batch rate limiting
// can cause partial results if not signaled early.
RateLimit *RateLimitInfo `protobuf:"bytes,6,opt,name=rate_limit,json=rateLimit,proto3,oneof" json:"rate_limit,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
ResourceResponse — Exchange returns candidate resource offers.
When the ResourceQuery contains multiple URIs, offers are grouped by URI via OfferGroup. When a single URI is queried, the Exchange MAY use either the flat `offers` field or a single OfferGroup.
func (*ResourceResponse) Descriptor
deprecated
func (*ResourceResponse) Descriptor() ([]byte, []int)
Deprecated: Use ResourceResponse.ProtoReflect.Descriptor instead.
func (*ResourceResponse) GetExchange ¶
func (x *ResourceResponse) GetExchange() string
func (*ResourceResponse) GetExt ¶
func (x *ResourceResponse) GetExt() *structpb.Struct
func (*ResourceResponse) GetExtCritical ¶
func (x *ResourceResponse) GetExtCritical() []string
func (*ResourceResponse) GetOfferGroups ¶
func (x *ResourceResponse) GetOfferGroups() []*OfferGroup
func (*ResourceResponse) GetOffers ¶
func (x *ResourceResponse) GetOffers() []*Offer
func (*ResourceResponse) GetRateLimit ¶
func (x *ResourceResponse) GetRateLimit() *RateLimitInfo
func (*ResourceResponse) GetVer ¶
func (x *ResourceResponse) GetVer() string
func (*ResourceResponse) ProtoMessage ¶
func (*ResourceResponse) ProtoMessage()
func (*ResourceResponse) ProtoReflect ¶
func (x *ResourceResponse) ProtoReflect() protoreflect.Message
func (*ResourceResponse) Reset ¶
func (x *ResourceResponse) Reset()
func (*ResourceResponse) String ¶
func (x *ResourceResponse) String() string
type Restriction ¶
type Restriction struct {
// Which dimension this restriction applies to. Defined-only: the axis set is
// CLOSED, and a number outside it is refused rather than ignored. A custom
// axis is RESTRICTION_KIND_OTHER, whose meaning rides in permitted/prohibited,
// so a new number was never the extension mechanism — accepting one would
// admit a restriction no consumer can evaluate onto a term whose default is
// BINDING (see advisory below), which fails open on the axis a publisher most
// needs enforced. Closing the axis does NOT bound the cost of the one-per-kind
// rule below, and must not be read as doing so: a number this rule refuses is
// still distinct from every other, so that rule's all() finds no duplicate to
// stop on and walks the list in full anyway. Its cost is bounded by the size
// test the rule itself carries.
Kind RestrictionKind `protobuf:"varint,1,opt,name=kind,proto3,enum=fora.v1.RestrictionKind" json:"kind,omitempty"`
// Tokens allowed on this axis. Empty = all permitted.
// For FUNCTION: "ai-input", "ai-train", "search", "editorial", "commercial", …
// For GEOGRAPHY: "US", "DE", "EU", "EEA", "*", …
// For USER_TYPE: "individual", "academic", "commercial_entity", …
Permitted []string `protobuf:"bytes,2,rep,name=permitted,proto3" json:"permitted,omitempty"`
// Tokens blocked on this axis. Takes precedence over permitted[].
Prohibited []string `protobuf:"bytes,3,rep,name=prohibited,proto3" json:"prohibited,omitempty"`
// Fail-closed by default. When false (the default), this restriction is
// BINDING: an agent that cannot evaluate every token in it — including an
// unknown vendor token — MUST decline the term. Set advisory = true to
// downgrade an unverifiable restriction to non-blocking. This deliberately
// inverts the COSE-`crit` opt-in default: a license restriction a consumer
// does not understand should stop it, not be silently ignored.
Advisory bool `protobuf:"varint,4,opt,name=advisory,proto3" json:"advisory,omitempty"`
// contains filtered or unexported fields
}
Restriction — A single constraint on one licensing dimension.
Restrictions model allowed and prohibited values on one axis (function, geography, or user-type). They are validated and normalized at ingest and RIDE ON THE OFFER: the AGENT is the responsible party — it self-selects the term whose restrictions it can honour and bears compliance, and enforcement happens downstream at accept → report → reconcile. Restrictions are NOT an Exchange-side gate the requester must pass to see a term.
An Exchange or Broker MAY, purely as a CONVENIENCE, pre-filter the offers it returns against the limits the query states in ResourceQuery.acceptable_restrictions (the same RestrictionKind axes/vocabulary the terms use) — e.g. an agent that only wants US-eligible content can ask the Exchange to skip the rest so it doesn't pay to discover offers it would never accept. That filter is advisory and optional: a different Broker may not apply it, and it is a recommendation matched to the request, never an enforcement verdict. When an Exchange does drop offers this way it MAY signal it via OfferAbsenceReason.RESTRICTION_FILTERED (with the axes in OfferGroup.restriction_filters). Term visibility is otherwise gated only by resource_id/URI and delegation scope coverage — see LicenseTerm.scopes.
Reading a restriction:
A value is in-scope when it matches at least one permitted[] token AND matches none of the prohibited[] tokens. Empty permitted[] = any value is permitted on this axis. Empty prohibited[] = nothing is explicitly prohibited.
Vocabulary sources (authored on the RestrictionKind enum values via (fora.v1.vocab_enum); the functiontokens / geographytokens / usertypes constants + IsRegistered derive from them):
FUNCTION — RSL 1.0 AI-use vocabulary + established IP/copyright terms GEOGRAPHY — ISO 3166-1 alpha-2 (structural) + the specials *, EU, EEA USER_TYPE — FORA user/organization categories
func (*Restriction) Descriptor
deprecated
func (*Restriction) Descriptor() ([]byte, []int)
Deprecated: Use Restriction.ProtoReflect.Descriptor instead.
func (*Restriction) GetAdvisory ¶
func (x *Restriction) GetAdvisory() bool
func (*Restriction) GetKind ¶
func (x *Restriction) GetKind() RestrictionKind
func (*Restriction) GetPermitted ¶
func (x *Restriction) GetPermitted() []string
func (*Restriction) GetProhibited ¶
func (x *Restriction) GetProhibited() []string
func (*Restriction) ProtoMessage ¶
func (*Restriction) ProtoMessage()
func (*Restriction) ProtoReflect ¶
func (x *Restriction) ProtoReflect() protoreflect.Message
func (*Restriction) Reset ¶
func (x *Restriction) Reset()
func (*Restriction) String ¶
func (x *Restriction) String() string
type RestrictionKind ¶
type RestrictionKind int32
RestrictionKind — Which dimension a Restriction constrains.
The token vocabulary for each open axis is authored ONLY in the (fora.v1.vocab_enum) entries on the corresponding enum value below, and its accepted aliases ONLY in the (fora.v1.vocab_enum_alias) entries beside them; the functiontokens / geographytokens / usertypes constants, IsRegistered, Aliases and Canonical derive from them. GEOGRAPHY lists only the non-ISO specials (*, EU, EEA) — ISO 3166-1 alpha-2 codes are validated structurally (two-letter uppercase), not enumerated.
const ( RestrictionKind_RESTRICTION_KIND_UNSPECIFIED RestrictionKind = 0 // unset — zero allowed on AcceptableRestriction.axis / OfferGroup.restriction_filters / *.restriction_mismatches; rejected (not_in:[0]) as the Restriction.kind discriminator // What the agent may do with the content. Seeded from RSL 1.0 AI-use // vocabulary and extended with established IP/copyright terms. RestrictionKind_RESTRICTION_KIND_FUNCTION RestrictionKind = 1 // Where the agent may use the content. ISO 3166-1 alpha-2 codes (US, DE, GB) // are valid structurally; only the non-ISO specials are registered here. RestrictionKind_RESTRICTION_KIND_GEOGRAPHY RestrictionKind = 2 // Who may access and use the content. RestrictionKind_RESTRICTION_KIND_USER_TYPE RestrictionKind = 3 RestrictionKind_RESTRICTION_KIND_OTHER RestrictionKind = 4 // Custom axis; values carried in permitted/prohibited )
func (RestrictionKind) Descriptor ¶
func (RestrictionKind) Descriptor() protoreflect.EnumDescriptor
func (RestrictionKind) Enum ¶
func (x RestrictionKind) Enum() *RestrictionKind
func (RestrictionKind) EnumDescriptor
deprecated
func (RestrictionKind) EnumDescriptor() ([]byte, []int)
Deprecated: Use RestrictionKind.Descriptor instead.
func (RestrictionKind) Number ¶
func (x RestrictionKind) Number() protoreflect.EnumNumber
func (RestrictionKind) String ¶
func (x RestrictionKind) String() string
func (RestrictionKind) Type ¶
func (RestrictionKind) Type() protoreflect.EnumType
type RetrievalAuthFailure ¶
type RetrievalAuthFailure struct {
// The failure reason (defined-only, non-zero)
Reason RetrievalAuthFailureReason `protobuf:"varint,1,opt,name=reason,proto3,enum=fora.v1.RetrievalAuthFailureReason" json:"reason,omitempty"`
// contains filtered or unexported fields
}
RetrievalAuthFailure — a signed-URL retrieval / proof-of-possession check failed.
func (*RetrievalAuthFailure) Descriptor
deprecated
func (*RetrievalAuthFailure) Descriptor() ([]byte, []int)
Deprecated: Use RetrievalAuthFailure.ProtoReflect.Descriptor instead.
func (*RetrievalAuthFailure) GetReason ¶
func (x *RetrievalAuthFailure) GetReason() RetrievalAuthFailureReason
func (*RetrievalAuthFailure) ProtoMessage ¶
func (*RetrievalAuthFailure) ProtoMessage()
func (*RetrievalAuthFailure) ProtoReflect ¶
func (x *RetrievalAuthFailure) ProtoReflect() protoreflect.Message
func (*RetrievalAuthFailure) Reset ¶
func (x *RetrievalAuthFailure) Reset()
func (*RetrievalAuthFailure) String ¶
func (x *RetrievalAuthFailure) String() string
type RetrievalAuthFailureReason ¶
type RetrievalAuthFailureReason int32
RetrievalAuthFailureReason — why a signed-URL retrieval or its proof-of- possession was rejected at the delivery edge. Single-sources the edge TypeScript token unions in verify.ts (signed-URL) and pop.ts (RFC 9421 PoP).
const ( RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED RetrievalAuthFailureReason = 0 // unset — rejected at ingest // Signed-URL checks (verify.ts). RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED RetrievalAuthFailureReason = 1 // 'expired' RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING RetrievalAuthFailureReason = 2 // 'missing_sig' RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING RetrievalAuthFailureReason = 3 // 'missing_exp' RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH RetrievalAuthFailureReason = 4 // 'signature_mismatch' // Proof-of-possession checks (pop.ts). RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING RetrievalAuthFailureReason = 5 // 'missing_agent_key' RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING RetrievalAuthFailureReason = 6 // 'missing_sig' RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH RetrievalAuthFailureReason = 7 // 'keyid_mismatch' RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH RetrievalAuthFailureReason = 8 // 'thumbprint_mismatch' RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING RetrievalAuthFailureReason = 9 // 'pop_missing_created' RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING RetrievalAuthFailureReason = 10 // 'pop_missing_exp' RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED RetrievalAuthFailureReason = 11 // 'pop_expired' RetrievalAuthFailureReason_RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID RetrievalAuthFailureReason = 12 // 'pop_sig_invalid' )
func (RetrievalAuthFailureReason) Descriptor ¶
func (RetrievalAuthFailureReason) Descriptor() protoreflect.EnumDescriptor
func (RetrievalAuthFailureReason) Enum ¶
func (x RetrievalAuthFailureReason) Enum() *RetrievalAuthFailureReason
func (RetrievalAuthFailureReason) EnumDescriptor
deprecated
func (RetrievalAuthFailureReason) EnumDescriptor() ([]byte, []int)
Deprecated: Use RetrievalAuthFailureReason.Descriptor instead.
func (RetrievalAuthFailureReason) Number ¶
func (x RetrievalAuthFailureReason) Number() protoreflect.EnumNumber
func (RetrievalAuthFailureReason) String ¶
func (x RetrievalAuthFailureReason) String() string
func (RetrievalAuthFailureReason) Type ¶
func (RetrievalAuthFailureReason) Type() protoreflect.EnumType
type Role ¶
type Role int32
Role — Identifies which kind of FORA participant a WellKnownManifest describes. Verifiers fold into the role of the domain that operates them (typically EXCHANGE or PUBLISHER); they are not a distinct role.
func (Role) Descriptor ¶
func (Role) Descriptor() protoreflect.EnumDescriptor
func (Role) EnumDescriptor
deprecated
func (Role) Number ¶
func (x Role) Number() protoreflect.EnumNumber
func (Role) Type ¶
func (Role) Type() protoreflect.EnumType
type SubscriptionQuotaInfo ¶
type SubscriptionQuotaInfo struct {
// Subscription this quota applies to.
SubscriptionId string `protobuf:"bytes,1,opt,name=subscription_id,json=subscriptionId,proto3" json:"subscription_id,omitempty"`
// Total allowed in the current period.
QuotaLimit int32 `protobuf:"varint,2,opt,name=quota_limit,json=quotaLimit,proto3" json:"quota_limit,omitempty"`
// Used so far in the current period.
QuotaUsed int32 `protobuf:"varint,3,opt,name=quota_used,json=quotaUsed,proto3" json:"quota_used,omitempty"`
// Remaining in the current period.
QuotaRemaining int32 `protobuf:"varint,4,opt,name=quota_remaining,json=quotaRemaining,proto3" json:"quota_remaining,omitempty"`
// When the quota counter resets (UTC).
ResetsAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=resets_at,json=resetsAt,proto3,oneof" json:"resets_at,omitempty"`
// What is being metered. Distinguishes access count quotas from
// spend quotas from burst limits.
// Standard values: "accesses", "tokens", "spend_cents", "burst"
Unit *string `protobuf:"bytes,6,opt,name=unit,proto3,oneof" json:"unit,omitempty"`
// contains filtered or unexported fields
}
SubscriptionQuotaInfo — Proactive quota signaling for subscription access.
Analogous to RateLimitInfo (which signals API request rate limits), this signals subscription consumption quotas. Enables agents to throttle proactively instead of discovering exhaustion via denial.
Returned on Offer (per-offer quota visibility) and TransactionResponse (post-transaction remaining quota). A subscription may have multiple independent quotas (access count + spend cap + burst limit), so this message is used as a repeated field.
Quota decrement timing: the counter increments at ExecuteTransaction (optimistic decrement, before delivery). If delivery fails, the agent files a DisputeTransaction which may reverse the decrement. This is consistent with the billing model (billing_id created at transaction time).
func (*SubscriptionQuotaInfo) Descriptor
deprecated
func (*SubscriptionQuotaInfo) Descriptor() ([]byte, []int)
Deprecated: Use SubscriptionQuotaInfo.ProtoReflect.Descriptor instead.
func (*SubscriptionQuotaInfo) GetQuotaLimit ¶
func (x *SubscriptionQuotaInfo) GetQuotaLimit() int32
func (*SubscriptionQuotaInfo) GetQuotaRemaining ¶
func (x *SubscriptionQuotaInfo) GetQuotaRemaining() int32
func (*SubscriptionQuotaInfo) GetQuotaUsed ¶
func (x *SubscriptionQuotaInfo) GetQuotaUsed() int32
func (*SubscriptionQuotaInfo) GetResetsAt ¶
func (x *SubscriptionQuotaInfo) GetResetsAt() *timestamppb.Timestamp
func (*SubscriptionQuotaInfo) GetSubscriptionId ¶
func (x *SubscriptionQuotaInfo) GetSubscriptionId() string
func (*SubscriptionQuotaInfo) GetUnit ¶
func (x *SubscriptionQuotaInfo) GetUnit() string
func (*SubscriptionQuotaInfo) ProtoMessage ¶
func (*SubscriptionQuotaInfo) ProtoMessage()
func (*SubscriptionQuotaInfo) ProtoReflect ¶
func (x *SubscriptionQuotaInfo) ProtoReflect() protoreflect.Message
func (*SubscriptionQuotaInfo) Reset ¶
func (x *SubscriptionQuotaInfo) Reset()
func (*SubscriptionQuotaInfo) String ¶
func (x *SubscriptionQuotaInfo) String() string
type TermSemantics ¶
type TermSemantics int32
TermSemantics — How the Exchange interprets a LicenseTerm's machine fields.
const ( TermSemantics_TERM_SEMANTICS_UNSPECIFIED TermSemantics = 0 // unset — rejected at ingest TermSemantics_TERM_SEMANTICS_ENUMERATED TermSemantics = 1 // Machine `restrictions`/`quotas`/`obligations` are the complete, authoritative expression of the term (internally consistent, no self-contradiction) and are enforced. `Pricing` MUST be present. TermSemantics_TERM_SEMANTICS_REFERENCE_ONLY TermSemantics = 2 // The document at `License.uri` (MUST be non-empty) is the authoritative, complete source; the agent reads it before using. Machine `restrictions`/`quotas`/`obligations` are optional here (the publisher MAY send `Pricing` alone) but any that are sent must be accurate (MUST NOT contradict the referenced document) and are enforced just like ENUMERATED. `Pricing` is still required. )
func (TermSemantics) Descriptor ¶
func (TermSemantics) Descriptor() protoreflect.EnumDescriptor
func (TermSemantics) Enum ¶
func (x TermSemantics) Enum() *TermSemantics
func (TermSemantics) EnumDescriptor
deprecated
func (TermSemantics) EnumDescriptor() ([]byte, []int)
Deprecated: Use TermSemantics.Descriptor instead.
func (TermSemantics) Number ¶
func (x TermSemantics) Number() protoreflect.EnumNumber
func (TermSemantics) String ¶
func (x TermSemantics) String() string
func (TermSemantics) Type ¶
func (TermSemantics) Type() protoreflect.EnumType
type TransactionDenial ¶
type TransactionDenial struct {
// The denial reason (defined-only, non-zero)
Reason DenialReason `protobuf:"varint,1,opt,name=reason,proto3,enum=fora.v1.DenialReason" json:"reason,omitempty"`
// When reason = RESTRICTION_NOT_SATISFIED, the failed axes (same
// RestrictionKind vocabulary the terms use).
RestrictionMismatches []RestrictionKind `` /* 161-byte string literal not displayed */
// Batch mode: the offer this denial pertains to.
OfferId *string `protobuf:"bytes,3,opt,name=offer_id,json=offerId,proto3,oneof" json:"offer_id,omitempty"`
// Bare host of the Exchange that PRODUCED this denial, in the form "Request
// recipient" defines in the file header. Not an echo of what the caller sent:
// on a relayed or fanned-out execute the request went to a Broker, so the
// Exchange that refused may not be one the agent named. Carrying it here is
// what lets ACCOUNT_NOT_REGISTERED be actionable — the agent learns where to
// call Register without fetching a manifest to work it out. NOTHING SIGNS THIS
// VALUE: it rides in a response, and on a relayed path the response passed
// through an intermediary, so this field is exactly the unsigned addressing
// the request-side `exchange` field exists to refuse. Treat it as a HINT, not
// an instruction. Before acting on it — and registering is a consequential act,
// handing an operator's business data and a signed acceptance of that
// Exchange's terms to whoever answers — a caller MUST check the value against
// a domain it already trusts for this transaction: the signed `offer.exchange`
// of the denied item, or its own RequestConstraints.exchanges set. A value
// matching neither is reported to the caller and never dialled, because a
// hostile intermediary that could choose it would be choosing where an
// unattended agent registers.
Exchange *string `protobuf:"bytes,4,opt,name=exchange,proto3,oneof" json:"exchange,omitempty"`
// contains filtered or unexported fields
}
TransactionDenial — ExecuteTransaction could not complete. Carries the denial reason the response body no longer holds (denial_reason / restriction_mismatches move here in the response-shape normalization). Reuses the DenialReason vocab.
func (*TransactionDenial) Descriptor
deprecated
func (*TransactionDenial) Descriptor() ([]byte, []int)
Deprecated: Use TransactionDenial.ProtoReflect.Descriptor instead.
func (*TransactionDenial) GetExchange ¶
func (x *TransactionDenial) GetExchange() string
func (*TransactionDenial) GetOfferId ¶
func (x *TransactionDenial) GetOfferId() string
func (*TransactionDenial) GetReason ¶
func (x *TransactionDenial) GetReason() DenialReason
func (*TransactionDenial) GetRestrictionMismatches ¶
func (x *TransactionDenial) GetRestrictionMismatches() []RestrictionKind
func (*TransactionDenial) ProtoMessage ¶
func (*TransactionDenial) ProtoMessage()
func (*TransactionDenial) ProtoReflect ¶
func (x *TransactionDenial) ProtoReflect() protoreflect.Message
func (*TransactionDenial) Reset ¶
func (x *TransactionDenial) Reset()
func (*TransactionDenial) String ¶
func (x *TransactionDenial) String() string
type TransactionItem ¶
type TransactionItem struct {
// The FULL signed Offer for this batch entry, reflected back exactly as
// received at discovery. The Exchange verifies `offer.signature` over these
// presented bytes — stateless, no reconstruct-from-catalog. REQUIRED: every
// batch item carries its offer.
Offer *Offer `protobuf:"bytes,3,opt,name=offer,proto3" json:"offer,omitempty"`
// The agent's detached acceptance signature over this item's `offer`.
// Optional on the wire; the Exchange enforces presence per
// item at the service layer for relayed batches. Signed bytes = the canonical
// AgentAcceptancePayload form, with requester_* and idempotency_key
// taken from the ENCLOSING TransactionRequest and offer_sig = offer.signature.
AgentAcceptance *AgentAcceptance `protobuf:"bytes,4,opt,name=agent_acceptance,json=agentAcceptance,proto3,oneof" json:"agent_acceptance,omitempty"`
// contains filtered or unexported fields
}
TransactionItem — A single offer commitment within a batch transaction.
func (*TransactionItem) Descriptor
deprecated
func (*TransactionItem) Descriptor() ([]byte, []int)
Deprecated: Use TransactionItem.ProtoReflect.Descriptor instead.
func (*TransactionItem) GetAgentAcceptance ¶
func (x *TransactionItem) GetAgentAcceptance() *AgentAcceptance
func (*TransactionItem) GetOffer ¶
func (x *TransactionItem) GetOffer() *Offer
func (*TransactionItem) ProtoMessage ¶
func (*TransactionItem) ProtoMessage()
func (*TransactionItem) ProtoReflect ¶
func (x *TransactionItem) ProtoReflect() protoreflect.Message
func (*TransactionItem) Reset ¶
func (x *TransactionItem) Reset()
func (*TransactionItem) String ¶
func (x *TransactionItem) String() string
type TransactionRequest ¶
type TransactionRequest struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Idempotency key (REQUIRED). The server MUST dedupe on this: a replay returns
// the original result rather than re-executing. The transaction's durable
// identity is the Exchange-assigned transaction_id in the response.
// Uniqueness is scoped to the verified RFC 9421 signer: the server dedupes per
// (authenticated caller, key), never globally, so a key chosen by one caller
// cannot collide with another's cached result.
IdempotencyKey string `protobuf:"bytes,2,opt,name=idempotency_key,json=idempotencyKey,proto3" json:"idempotency_key,omitempty"`
// Requester identity — forwarded for authorization and audit.
Requester *Requester `protobuf:"bytes,4,opt,name=requester,proto3" json:"requester,omitempty"`
// The offers committed in this request (REQUIRED, min 1), each carrying its
// own reflected signed Offer + detached acceptance. A single offer is the
// degenerate 1-element list. The Exchange verifies each item's
// `offer.signature` (which covers pricing, terms, and expires_at) over the
// presented bytes against its own key — stateless, self-contained bearer
// tokens, with no reconstruct-from-catalog.
Items []*TransactionItem `protobuf:"bytes,7,rep,name=items,proto3" json:"items,omitempty"`
// Optional for wire compatibility. When present, an Exchange verifies this
// before creating or serving request-level idempotency state. A Broker MUST
// forward it unchanged on every projected subrequest. Older clients that omit
// it retain per-item execution semantics but receive no request-level claim.
AgentRequestAcceptance *AgentRequestAcceptance `` /* 135-byte string literal not displayed */
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
TransactionRequest — Commit to one or more offers.
After selecting offers, the caller commits by sending this to the Exchange. Supports both single-offer and batch (multi-offer) modes. The Exchange validates eligibility, authorizes billing, creates delivery, and logs each transaction.
func (*TransactionRequest) Descriptor
deprecated
func (*TransactionRequest) Descriptor() ([]byte, []int)
Deprecated: Use TransactionRequest.ProtoReflect.Descriptor instead.
func (*TransactionRequest) GetAgentRequestAcceptance ¶
func (x *TransactionRequest) GetAgentRequestAcceptance() *AgentRequestAcceptance
func (*TransactionRequest) GetExt ¶
func (x *TransactionRequest) GetExt() *structpb.Struct
func (*TransactionRequest) GetExtCritical ¶
func (x *TransactionRequest) GetExtCritical() []string
func (*TransactionRequest) GetIdempotencyKey ¶
func (x *TransactionRequest) GetIdempotencyKey() string
func (*TransactionRequest) GetItems ¶
func (x *TransactionRequest) GetItems() []*TransactionItem
func (*TransactionRequest) GetRequester ¶
func (x *TransactionRequest) GetRequester() *Requester
func (*TransactionRequest) GetVer ¶
func (x *TransactionRequest) GetVer() string
func (*TransactionRequest) ProtoMessage ¶
func (*TransactionRequest) ProtoMessage()
func (*TransactionRequest) ProtoReflect ¶
func (x *TransactionRequest) ProtoReflect() protoreflect.Message
func (*TransactionRequest) Reset ¶
func (x *TransactionRequest) Reset()
func (*TransactionRequest) String ¶
func (x *TransactionRequest) String() string
type TransactionResponse ¶
type TransactionResponse struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Identity that a delivered retrieval_endpoint is bound to: the RFC 7638 JWK
// Thumbprint of the agent's Ed25519 request-signing key (see "Retrieval-URL
// identity binding" above). Shared across the request; set once.
AgentIdentityHash string `protobuf:"bytes,10,opt,name=agent_identity_hash,json=agentIdentityHash,proto3" json:"agent_identity_hash,omitempty"`
// Per-offer results (one entry per committed item, in original order).
Items []*TransactionResultItem `protobuf:"bytes,13,rep,name=items,proto3" json:"items,omitempty"`
// Aggregate cost across all items.
TotalCost *Cost `protobuf:"bytes,14,opt,name=total_cost,json=totalCost,proto3,oneof" json:"total_cost,omitempty"`
// Post-transaction quota state. Tells the agent how much quota remains
// after this transaction. Enables proactive throttling ("1 access left").
// Multiple entries for multi-dimensional quotas.
SubscriptionQuota []*SubscriptionQuotaInfo `protobuf:"bytes,17,rep,name=subscription_quota,json=subscriptionQuota,proto3" json:"subscription_quota,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
TransactionResponse — Exchange confirms the transaction(s).
Items-only: every per-result datum lives in `items` (one TransactionResultItem per committed offer, in original order); the top-level fields carry only the shared aggregate state. A single offer is the degenerate 1-element `items`. The per-item denials remain in-body on TransactionResultItem as partial results of a successful request.
func (*TransactionResponse) Descriptor
deprecated
func (*TransactionResponse) Descriptor() ([]byte, []int)
Deprecated: Use TransactionResponse.ProtoReflect.Descriptor instead.
func (*TransactionResponse) GetAgentIdentityHash ¶
func (x *TransactionResponse) GetAgentIdentityHash() string
func (*TransactionResponse) GetExt ¶
func (x *TransactionResponse) GetExt() *structpb.Struct
func (*TransactionResponse) GetExtCritical ¶
func (x *TransactionResponse) GetExtCritical() []string
func (*TransactionResponse) GetItems ¶
func (x *TransactionResponse) GetItems() []*TransactionResultItem
func (*TransactionResponse) GetSubscriptionQuota ¶
func (x *TransactionResponse) GetSubscriptionQuota() []*SubscriptionQuotaInfo
func (*TransactionResponse) GetTotalCost ¶
func (x *TransactionResponse) GetTotalCost() *Cost
func (*TransactionResponse) GetVer ¶
func (x *TransactionResponse) GetVer() string
func (*TransactionResponse) ProtoMessage ¶
func (*TransactionResponse) ProtoMessage()
func (*TransactionResponse) ProtoReflect ¶
func (x *TransactionResponse) ProtoReflect() protoreflect.Message
func (*TransactionResponse) Reset ¶
func (x *TransactionResponse) Reset()
func (*TransactionResponse) String ¶
func (x *TransactionResponse) String() string
type TransactionResultItem ¶
type TransactionResultItem struct {
// The offer_id this result is for.
OfferId string `protobuf:"bytes,1,opt,name=offer_id,json=offerId,proto3" json:"offer_id,omitempty"`
// Exchange-assigned transaction identifier.
TransactionId string `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"`
// Billing record identifier minted by the Exchange's billing adapter for
// this transaction (not the account handle — see RegisterResponse.billing_ref).
BillingId string `protobuf:"bytes,3,opt,name=billing_id,json=billingId,proto3" json:"billing_id,omitempty"`
// Resource title echoed from the Offer.
ResourceTitle *string `protobuf:"bytes,4,opt,name=resource_title,json=resourceTitle,proto3,oneof" json:"resource_title,omitempty"`
// Cost for this item.
Cost *Cost `protobuf:"bytes,5,opt,name=cost,proto3" json:"cost,omitempty"`
// If under subscription, no per-request charge.
SubscriptionId *string `protobuf:"bytes,6,opt,name=subscription_id,json=subscriptionId,proto3,oneof" json:"subscription_id,omitempty"`
// Computed per-unit cost for financial attribution on subscription transactions.
// Even when cost.amount="0" (subscription), this field carries the value
// of the access for accounting purposes (e.g., ASC 606 prepaid drawdown).
SubscriptionUnitValue *Cost `` /* 133-byte string literal not displayed */
// Set if this specific item was denied (others may succeed).
DenialReason *DenialReason `` /* 130-byte string literal not displayed */
// When denial_reason = RESTRICTION_NOT_SATISFIED, the restriction axes the
// request failed, in the same RestrictionKind vocabulary the terms use.
RestrictionMismatches []RestrictionKind `` /* 162-byte string literal not displayed */
// When retrieval_endpoint expires.
ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=expires_at,json=expiresAt,proto3,oneof" json:"expires_at,omitempty"`
// Signed retrieval URL for this item. Bound to the requesting agent's identity
// via the parent TransactionResponse.agent_identity_hash (shared across all
// batch items); expires at expires_at. Absent if this item was denied or its
// delivery_method is not signed-URL-based.
RetrievalEndpoint *string `protobuf:"bytes,12,opt,name=retrieval_endpoint,json=retrievalEndpoint,proto3,oneof" json:"retrieval_endpoint,omitempty"`
// How resource is delivered for this item.
DeliveryMethod DeliveryMethod `` /* 132-byte string literal not displayed */
// Reporting requirements for this item.
ReportingObligation *ReportingObligation `protobuf:"bytes,10,opt,name=reporting_obligation,json=reportingObligation,proto3,oneof" json:"reporting_obligation,omitempty"`
// contains filtered or unexported fields
}
TransactionResultItem — Result for a single offer in a batch transaction.
func (*TransactionResultItem) Descriptor
deprecated
func (*TransactionResultItem) Descriptor() ([]byte, []int)
Deprecated: Use TransactionResultItem.ProtoReflect.Descriptor instead.
func (*TransactionResultItem) GetBillingId ¶
func (x *TransactionResultItem) GetBillingId() string
func (*TransactionResultItem) GetCost ¶
func (x *TransactionResultItem) GetCost() *Cost
func (*TransactionResultItem) GetDeliveryMethod ¶
func (x *TransactionResultItem) GetDeliveryMethod() DeliveryMethod
func (*TransactionResultItem) GetDenialReason ¶
func (x *TransactionResultItem) GetDenialReason() DenialReason
func (*TransactionResultItem) GetExpiresAt ¶
func (x *TransactionResultItem) GetExpiresAt() *timestamppb.Timestamp
func (*TransactionResultItem) GetOfferId ¶
func (x *TransactionResultItem) GetOfferId() string
func (*TransactionResultItem) GetReportingObligation ¶
func (x *TransactionResultItem) GetReportingObligation() *ReportingObligation
func (*TransactionResultItem) GetResourceTitle ¶
func (x *TransactionResultItem) GetResourceTitle() string
func (*TransactionResultItem) GetRestrictionMismatches ¶
func (x *TransactionResultItem) GetRestrictionMismatches() []RestrictionKind
func (*TransactionResultItem) GetRetrievalEndpoint ¶
func (x *TransactionResultItem) GetRetrievalEndpoint() string
func (*TransactionResultItem) GetSubscriptionId ¶
func (x *TransactionResultItem) GetSubscriptionId() string
func (*TransactionResultItem) GetSubscriptionUnitValue ¶
func (x *TransactionResultItem) GetSubscriptionUnitValue() *Cost
func (*TransactionResultItem) GetTransactionId ¶
func (x *TransactionResultItem) GetTransactionId() string
func (*TransactionResultItem) ProtoMessage ¶
func (*TransactionResultItem) ProtoMessage()
func (*TransactionResultItem) ProtoReflect ¶
func (x *TransactionResultItem) ProtoReflect() protoreflect.Message
func (*TransactionResultItem) Reset ¶
func (x *TransactionResultItem) Reset()
func (*TransactionResultItem) String ¶
func (x *TransactionResultItem) String() string
type Usage ¶
type Usage struct {
// How the resource was used. Standard values: "ai-train", "ai-input",
// "ai-index", "search", "display". Multiple allowed.
// CoMP-specific values available via fora-comp-v1 extension profile.
Function []string `protobuf:"bytes,1,rep,name=function,proto3" json:"function,omitempty"`
// Sub-function detail. Standard values: "training", "rag", "grounding",
// "agent_view", "agent_actions".
Subfn []string `protobuf:"bytes,2,rep,name=subfn,proto3" json:"subfn,omitempty"`
// REQUIRED. Actual quantity consumed, in the metering unit from the Offer's Pricing.
// For text: tokens consumed. For video: seconds watched. For data: records accessed.
// Exchange cross-references against Offer.pricing.estimated_quantity.
ConsumedQuantity int32 `protobuf:"varint,3,opt,name=consumed_quantity,json=consumedQuantity,proto3" json:"consumed_quantity,omitempty"`
// Whether resource/output was displayed to a human.
DisplayedToUser *bool `protobuf:"varint,4,opt,name=displayed_to_user,json=displayedToUser,proto3,oneof" json:"displayed_to_user,omitempty"`
// Whether citation was included as required by the offer terms.
CitationIncluded *bool `protobuf:"varint,5,opt,name=citation_included,json=citationIncluded,proto3,oneof" json:"citation_included,omitempty"`
// Structured attribution details for each citation provided.
Attribution []*AttributionDetail `protobuf:"bytes,6,rep,name=attribution,proto3" json:"attribution,omitempty"`
// Metering unit for consumed_quantity. Must match the Offer's Pricing.unit.
// If omitted, defaults to "tokens". Same token format as Pricing.unit:
// a bare registered token or a vendor:namespaced token.
ConsumedUnit *string `protobuf:"bytes,8,opt,name=consumed_unit,json=consumedUnit,proto3,oneof" json:"consumed_unit,omitempty"`
// contains filtered or unexported fields
}
Usage — How resource was actually used by the AI system.
func (*Usage) Descriptor
deprecated
func (*Usage) GetAttribution ¶
func (x *Usage) GetAttribution() []*AttributionDetail
func (*Usage) GetCitationIncluded ¶
func (*Usage) GetConsumedQuantity ¶
func (*Usage) GetConsumedUnit ¶
func (*Usage) GetDisplayedToUser ¶
func (*Usage) GetFunction ¶
func (*Usage) ProtoMessage ¶
func (*Usage) ProtoMessage()
func (*Usage) ProtoReflect ¶
func (x *Usage) ProtoReflect() protoreflect.Message
type UsageAsset ¶
type UsageAsset struct {
// Asset URI
Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
// Asset title
Title *string `protobuf:"bytes,2,opt,name=title,proto3,oneof" json:"title,omitempty"`
// Package identifier
PackageId *string `protobuf:"bytes,3,opt,name=package_id,json=packageId,proto3,oneof" json:"package_id,omitempty"`
// contains filtered or unexported fields
}
UsageAsset — A single asset included in the usage report.
func (*UsageAsset) Descriptor
deprecated
func (*UsageAsset) Descriptor() ([]byte, []int)
Deprecated: Use UsageAsset.ProtoReflect.Descriptor instead.
func (*UsageAsset) GetPackageId ¶
func (x *UsageAsset) GetPackageId() string
func (*UsageAsset) GetTitle ¶
func (x *UsageAsset) GetTitle() string
func (*UsageAsset) GetUri ¶
func (x *UsageAsset) GetUri() string
func (*UsageAsset) ProtoMessage ¶
func (*UsageAsset) ProtoMessage()
func (*UsageAsset) ProtoReflect ¶
func (x *UsageAsset) ProtoReflect() protoreflect.Message
func (*UsageAsset) Reset ¶
func (x *UsageAsset) Reset()
func (*UsageAsset) String ¶
func (x *UsageAsset) String() string
type UsageReport ¶
type UsageReport struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Idempotency key (REQUIRED). The server MUST dedupe on this so a replayed
// report does not double-count usage. The report's durable identity is the
// Exchange-assigned report_id in UsageReportResponse.
// Uniqueness is scoped to the verified RFC 9421 signer: the server dedupes per
// (authenticated caller, key), never globally, so a key chosen by one caller
// cannot collide with another's cached result.
IdempotencyKey string `protobuf:"bytes,2,opt,name=idempotency_key,json=idempotencyKey,proto3" json:"idempotency_key,omitempty"`
// Transaction ID from the delivery.
TransactionId string `protobuf:"bytes,3,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"`
// Billing record identifier from the delivery (TransactionResultItem.billing_id).
BillingId string `protobuf:"bytes,4,opt,name=billing_id,json=billingId,proto3" json:"billing_id,omitempty"`
// How the resource was actually used.
Usage *Usage `protobuf:"bytes,5,opt,name=usage,proto3" json:"usage,omitempty"`
// When the resource was used (ISO 8601).
Timestamp *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
// REQUIRED. Bare host of the recipient this report is addressed to (e.g.
// "exchange.example" or "exchange.example:8081") — the Exchange that issued
// the offer and therefore holds the reporting obligation. See "Request
// recipient" in the file header for the full contract. Promoted from optional:
// an absent or empty value used to skip the recipient check entirely, which
// made the check opt-in for the caller.
Exchange string `protobuf:"bytes,8,opt,name=exchange,proto3" json:"exchange,omitempty"`
// Assets that were delivered and used.
Assets []*UsageAsset `protobuf:"bytes,9,rep,name=assets,proto3" json:"assets,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
UsageReport — Post-usage report for a completed transaction.
Filed by the agent or Broker after resource is used. Failure to report may result in the Exchange blocking subsequent access.
func (*UsageReport) Descriptor
deprecated
func (*UsageReport) Descriptor() ([]byte, []int)
Deprecated: Use UsageReport.ProtoReflect.Descriptor instead.
func (*UsageReport) GetAssets ¶
func (x *UsageReport) GetAssets() []*UsageAsset
func (*UsageReport) GetBillingId ¶
func (x *UsageReport) GetBillingId() string
func (*UsageReport) GetExchange ¶
func (x *UsageReport) GetExchange() string
func (*UsageReport) GetExt ¶
func (x *UsageReport) GetExt() *structpb.Struct
func (*UsageReport) GetExtCritical ¶
func (x *UsageReport) GetExtCritical() []string
func (*UsageReport) GetIdempotencyKey ¶
func (x *UsageReport) GetIdempotencyKey() string
func (*UsageReport) GetTimestamp ¶
func (x *UsageReport) GetTimestamp() *timestamppb.Timestamp
func (*UsageReport) GetTransactionId ¶
func (x *UsageReport) GetTransactionId() string
func (*UsageReport) GetUsage ¶
func (x *UsageReport) GetUsage() *Usage
func (*UsageReport) GetVer ¶
func (x *UsageReport) GetVer() string
func (*UsageReport) ProtoMessage ¶
func (*UsageReport) ProtoMessage()
func (*UsageReport) ProtoReflect ¶
func (x *UsageReport) ProtoReflect() protoreflect.Message
func (*UsageReport) Reset ¶
func (x *UsageReport) Reset()
func (*UsageReport) String ¶
func (x *UsageReport) String() string
type UsageReportRejection ¶
type UsageReportRejection struct {
// The rejection reason (defined-only, non-zero)
Reason UsageReportRejectionReason `protobuf:"varint,1,opt,name=reason,proto3,enum=fora.v1.UsageReportRejectionReason" json:"reason,omitempty"`
// contains filtered or unexported fields
}
UsageReportRejection — a usage report could not be accepted.
func (*UsageReportRejection) Descriptor
deprecated
func (*UsageReportRejection) Descriptor() ([]byte, []int)
Deprecated: Use UsageReportRejection.ProtoReflect.Descriptor instead.
func (*UsageReportRejection) GetReason ¶
func (x *UsageReportRejection) GetReason() UsageReportRejectionReason
func (*UsageReportRejection) ProtoMessage ¶
func (*UsageReportRejection) ProtoMessage()
func (*UsageReportRejection) ProtoReflect ¶
func (x *UsageReportRejection) ProtoReflect() protoreflect.Message
func (*UsageReportRejection) Reset ¶
func (x *UsageReportRejection) Reset()
func (*UsageReportRejection) String ¶
func (x *UsageReportRejection) String() string
type UsageReportRejectionReason ¶
type UsageReportRejectionReason int32
UsageReportRejectionReason — why a ReportUsage filing was rejected. Replaces the free-text UsageReportResponse.rejection_reason string.
const ( UsageReportRejectionReason_USAGE_REPORT_REJECTION_REASON_UNSPECIFIED UsageReportRejectionReason = 0 // unset — rejected at ingest UsageReportRejectionReason_USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND UsageReportRejectionReason = 1 // transaction_id is unknown UsageReportRejectionReason_USAGE_REPORT_REJECTION_REASON_DUPLICATE UsageReportRejectionReason = 2 // a report was already filed for this transaction UsageReportRejectionReason_USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED UsageReportRejectionReason = 3 // filed outside the reporting window UsageReportRejectionReason_USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS UsageReportRejectionReason = 4 // ReportingObligation.required_fields not satisfied UsageReportRejectionReason_USAGE_REPORT_REJECTION_REASON_MALFORMED UsageReportRejectionReason = 5 // report payload failed validation )
func (UsageReportRejectionReason) Descriptor ¶
func (UsageReportRejectionReason) Descriptor() protoreflect.EnumDescriptor
func (UsageReportRejectionReason) Enum ¶
func (x UsageReportRejectionReason) Enum() *UsageReportRejectionReason
func (UsageReportRejectionReason) EnumDescriptor
deprecated
func (UsageReportRejectionReason) EnumDescriptor() ([]byte, []int)
Deprecated: Use UsageReportRejectionReason.Descriptor instead.
func (UsageReportRejectionReason) Number ¶
func (x UsageReportRejectionReason) Number() protoreflect.EnumNumber
func (UsageReportRejectionReason) String ¶
func (x UsageReportRejectionReason) String() string
func (UsageReportRejectionReason) Type ¶
func (UsageReportRejectionReason) Type() protoreflect.EnumType
type UsageReportResponse ¶
type UsageReportResponse struct {
// FORA protocol version — "1.0". Stamped by the sender from a single
// constant; advisory on receive. See "Protocol version" in the file header.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Exchange-assigned report identifier. Required for the dispute chain —
// the agent must reference this report_id in DisputeRequest to prove that
// a usage report was filed before disputing. The complete evidence chain:
//
// Offer → Transaction (transaction_id, billing_id)
// → UsageReport → UsageReportResponse (report_id)
// → DisputeRequest (transaction_id + report_id)
ReportId string `protobuf:"bytes,3,opt,name=report_id,json=reportId,proto3" json:"report_id,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052).
// Lists keys within ext that the consumer MUST understand.
// Unknown keys in this list → reject with UNKNOWN_CRITICAL_EXTENSION.
// Empty (default) → all ext keys are safe to ignore.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
UsageReportResponse — Acknowledgment of a usage report.
func (*UsageReportResponse) Descriptor
deprecated
func (*UsageReportResponse) Descriptor() ([]byte, []int)
Deprecated: Use UsageReportResponse.ProtoReflect.Descriptor instead.
func (*UsageReportResponse) GetExt ¶
func (x *UsageReportResponse) GetExt() *structpb.Struct
func (*UsageReportResponse) GetExtCritical ¶
func (x *UsageReportResponse) GetExtCritical() []string
func (*UsageReportResponse) GetReportId ¶
func (x *UsageReportResponse) GetReportId() string
func (*UsageReportResponse) GetVer ¶
func (x *UsageReportResponse) GetVer() string
func (*UsageReportResponse) ProtoMessage ¶
func (*UsageReportResponse) ProtoMessage()
func (*UsageReportResponse) ProtoReflect ¶
func (x *UsageReportResponse) ProtoReflect() protoreflect.Message
func (*UsageReportResponse) Reset ¶
func (x *UsageReportResponse) Reset()
func (*UsageReportResponse) String ¶
func (x *UsageReportResponse) String() string
type WBAFile ¶
type WBAFile struct {
// RFC 7517 JWK Set "keys" member. FORA v1: Ed25519 (OKP) keys, each with
// not_before/not_after FORA extension members.
Keys []*JsonWebKey `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"`
// Directory-level emergency revocation channel. One per directory; the list
// it points to enumerates revoked key thumbprints. Consumers poll on a 300s
// cadence (±10% jitter) and replace their local revoked set with the response.
RevocationUrl *string `protobuf:"bytes,2,opt,name=revocation_url,json=revocationUrl,proto3,oneof" json:"revocation_url,omitempty"`
// contains filtered or unexported fields
}
WBAFile — Pure Web Bot Auth directory served at the WBA-canonical well-known path (/.well-known/http-message-signatures-directory). A JOSE JWK Set per RFC 7517 §5 plus a directory-level revocation pointer. JWKs carry no kid; the RFC 9421 keyid is the RFC 7638 JWK Thumbprint. Off-the-shelf WBA verifiers read the `keys` array and ignore FORA's extra members (per-key not_before/not_after, and revocation_url) per RFC 7517 §5.
func (*WBAFile) Descriptor
deprecated
func (*WBAFile) GetKeys ¶
func (x *WBAFile) GetKeys() []*JsonWebKey
func (*WBAFile) GetRevocationUrl ¶
func (*WBAFile) ProtoMessage ¶
func (*WBAFile) ProtoMessage()
func (*WBAFile) ProtoReflect ¶
func (x *WBAFile) ProtoReflect() protoreflect.Message
type WellKnownManifest ¶
type WellKnownManifest struct {
// Version of THIS MANIFEST DOCUMENT's layout — "1.0", stamped by the party
// that serves the document from the SDK's WellKnownManifestVersion, never from
// ProtocolVersion. A namespace separate from the RPC envelope `ver`: a change
// to this document's layout bumps both numbers, a protocol change that leaves
// the document untouched bumps only the envelope's, so a reader that parses
// only manifests upgrades when the manifest changes and at no other time.
//
// Consumers read `ver` before any other member. They ACCEPT a recognised
// MAJOR version whatever the MINOR — a minor revision of the manifest is
// additive, and a reader ignores members it does not know. They REJECT an
// unrecognised MAJOR, a value that is not MAJOR.MINOR, and an ABSENT `ver`:
// the document sits at a fixed, unversioned path and is read before any
// signature is checked, so a layout the reader cannot classify must not
// supply anything a signed call then carries — the endpoint that call is sent
// to, or the terms_digest it echoes and its signature covers.
//
// It binds every consumer of this document rather than one use of it. In the
// SDK that is both manifest-reading faces, in all three languages — the
// endpoint resolver and the registration-requirements reader — each applying
// it at its own call site, pinned to one corpus. The key face is exempt
// because it reads a plain JWK Set, which carries no version of this document
// and never will.
Ver string `protobuf:"bytes,1,opt,name=ver,proto3" json:"ver,omitempty"`
// Role this manifest describes.
Role Role `protobuf:"varint,2,opt,name=role,proto3,enum=fora.v1.Role" json:"role,omitempty"`
// Canonical domain serving this manifest.
Domain string `protobuf:"bytes,3,opt,name=domain,proto3" json:"domain,omitempty"`
// Contact email (licensing, integration, security).
Contact *string `protobuf:"bytes,4,opt,name=contact,proto3,oneof" json:"contact,omitempty"`
// Publisher-only. Authorized exchanges for this publisher's resources.
// Like ads.txt — declares who may sell. MUST be empty for non-publisher
// roles.
Exchanges []*AuthorizedExchange `protobuf:"bytes,7,rep,name=exchanges,proto3" json:"exchanges,omitempty"`
// Publisher-only. Authorized third-party catalog contributors.
// MUST be empty for non-publisher roles.
CatalogContributors []*CatalogContributor `protobuf:"bytes,8,rep,name=catalog_contributors,json=catalogContributors,proto3" json:"catalog_contributors,omitempty"`
// Exchange-only. Human-readable Exchange name.
Name *string `protobuf:"bytes,9,opt,name=name,proto3,oneof" json:"name,omitempty"`
// Exchange-only. Organization operating this Exchange.
Operator *string `protobuf:"bytes,10,opt,name=operator,proto3,oneof" json:"operator,omitempty"`
// Exchange-only. Operator's corporate domain (may differ from domain).
OperatorDomain *string `protobuf:"bytes,11,opt,name=operator_domain,json=operatorDomain,proto3,oneof" json:"operator_domain,omitempty"`
// Exchange-only. ExchangeService endpoint URL. MUST be on the same host AND
// PORT that serve this manifest, or on a subdomain of that host on that port,
// and MUST NOT carry userinfo. A consumer refuses an endpoint anywhere else:
// this document is only as trustworthy as the host that served it, so an
// endpoint naming an unrelated host would let whoever answers for the manifest
// redirect a signed call to a party the signature never covered, and another
// port is another service the publisher of the manifest need not control. The
// host match is on a full dot-delimited label boundary, so evil-a.com is not a
// subdomain of a.com. A port equal to the scheme's default and an omitted port
// are the SAME port, so https://x, https://x:443 and x all match. An Exchange
// reachable on a non-default port names that port on both sides.
Endpoint *string `protobuf:"bytes,12,opt,name=endpoint,proto3,oneof" json:"endpoint,omitempty"`
// Exchange-only. Health check endpoint URL.
HealthEndpoint *string `protobuf:"bytes,13,opt,name=health_endpoint,json=healthEndpoint,proto3,oneof" json:"health_endpoint,omitempty"`
// Exchange-only. CatalogService endpoint URL (if exposed). It carries the
// same binding as endpoint: it MUST be on the same host AND PORT that serve
// this manifest, or on a subdomain of that host on that port, and MUST NOT
// carry userinfo. A consumer refuses a catalog endpoint anywhere else — a
// publisher's push is a signed call, and a manifest naming an unrelated host
// would redirect it to a party the signature never covered. The host match is
// on a full dot-delimited label boundary, and a port equal to the scheme's
// default and an omitted port are the SAME port. Absent means this Exchange
// does not expose CatalogService; a consumer does not fall back to endpoint.
CatalogEndpoint *string `protobuf:"bytes,14,opt,name=catalog_endpoint,json=catalogEndpoint,proto3,oneof" json:"catalog_endpoint,omitempty"`
// Exchange-only. Supported FORA protocol versions (e.g. ["1.0"]).
ProtocolVersionsSupported []string `` /* 139-byte string literal not displayed */
// Exchange-only. Supported pricing models.
PricingModelsSupported []PricingModel `` /* 164-byte string literal not displayed */
// Exchange-only. Supported delivery methods.
DeliveryMethodsSupported []DeliveryMethod `` /* 172-byte string literal not displayed */
// Exchange-only. Accepted resource hash methods for attestation
// verification.
HashMethodsSupported []string `protobuf:"bytes,19,rep,name=hash_methods_supported,json=hashMethodsSupported,proto3" json:"hash_methods_supported,omitempty"`
// Exchange-only. Trusted attestation verification vendors (domains).
AcceptedVerifiers []string `protobuf:"bytes,20,rep,name=accepted_verifiers,json=acceptedVerifiers,proto3" json:"accepted_verifiers,omitempty"`
// Exchange-only. Terms of service URL.
TermsUri *string `protobuf:"bytes,21,opt,name=terms_uri,json=termsUri,proto3,oneof" json:"terms_uri,omitempty"`
// Exchange-only. Privacy policy URL.
PrivacyUri *string `protobuf:"bytes,22,opt,name=privacy_uri,json=privacyUri,proto3,oneof" json:"privacy_uri,omitempty"`
// Exchange-only. Domain extension profiles this Exchange conforms to.
// See standards-layering docs.
SupportedProfiles []string `protobuf:"bytes,23,rep,name=supported_profiles,json=supportedProfiles,proto3" json:"supported_profiles,omitempty"`
// Exchange-only. Authorization methods this Exchange supports
// (ordered by preference).
SupportedAuthMethods []AuthMethod `` /* 156-byte string literal not displayed */
// Exchange-only. OIDC Discovery URL when OAuth methods are supported.
OidcIssuer *string `protobuf:"bytes,25,opt,name=oidc_issuer,json=oidcIssuer,proto3,oneof" json:"oidc_issuer,omitempty"`
// Exchange-only. GNAP grant endpoint when GNAP is supported.
GnapGrantEndpoint *string `protobuf:"bytes,26,opt,name=gnap_grant_endpoint,json=gnapGrantEndpoint,proto3,oneof" json:"gnap_grant_endpoint,omitempty"`
// Exchange-only. Base currency for pricing (ISO 4217). All unit_cost
// values from this Exchange are denominated in this currency.
BaseCurrency *string `protobuf:"bytes,27,opt,name=base_currency,json=baseCurrency,proto3,oneof" json:"base_currency,omitempty"`
// Exchange-only. Maximum forwarding hops this Exchange tolerates on an inbound
// request (Agent → Broker → … → Exchange), counted as RFC 9421 HTTP Message
// Signatures. A request carrying more SHOULD be rejected. Lets Exchanges
// publish their chain-depth tolerance so Brokers prune before forwarding.
// Absent = no published limit (Exchange applies its own default policy).
MaxIntermediaryHops *int32 `` /* 128-byte string literal not displayed */
// Exchange-only. How to open an account here — see AccountRegistration, which
// owns the contract. Absent: registration_data is accepted uninspected,
// exactly as before this field existed.
AccountRegistration *AccountRegistration `protobuf:"bytes,30,opt,name=account_registration,json=accountRegistration,proto3,oneof" json:"account_registration,omitempty"`
// Exchange-only. Digest of the document served at `terms_uri`, in
// "method:hexdigest" form (e.g. "sha256:9f86d081..."), pinning WHICH terms
// document this manifest is currently offering. `terms_uri` alone cannot
// answer that: it is a URL, and its content changes, so after the first
// revision every earlier registration points at a document that no longer says
// what was agreed. RegisterRequest.terms_digest echoes this value, the request
// signature covers that echo, and the Exchange records the accepted digest
// with the account — which is what makes "which terms did this operator
// accept" answerable later, through GetAccountStatusResponse.terms_digest, which
// is where the accepted value is read back. Because a digest identifies a
// document only while
// a copy of it still exists, keeping the historical terms documents
// retrievable is the Exchange's obligation. It sits at the top level rather
// than inside account_registration on purpose: an Exchange with pass-through
// registration publishes no block yet still needs to pin its terms version,
// and coupling "I enforce a schema" to "I version my terms" would tie together
// two independent decisions. Operator note: publishing this field for the
// first time refuses every client that does not yet echo it, so it is a
// coordinated change rather than a safe addition.
TermsDigest *string `protobuf:"bytes,31,opt,name=terms_digest,json=termsDigest,proto3,oneof" json:"terms_digest,omitempty"`
// Extension point
Ext *structpb.Struct `protobuf:"bytes,15,opt,name=ext,proto3" json:"ext,omitempty"`
// Critical extension keys (COSE crit pattern, RFC 9052). Lists keys
// within ext that the consumer MUST understand. Unknown values reject
// with UNKNOWN_CRITICAL_EXTENSION. Empty (default) → ignore-unknown.
ExtCritical []string `protobuf:"bytes,90,rep,name=ext_critical,json=extCritical,proto3" json:"ext_critical,omitempty"`
// contains filtered or unexported fields
}
WellKnownManifest — FORA commercial overlay, served at /.well-known/fora.json by every FORA participant (agent, exchange, broker, publisher).
Commercial graph only: role, authorized exchanges/contributors, and exchange capability fields. Identity keys are NOT here — they live in the WBA directory (WBAFile) served at /.well-known/http-message-signatures-directory and are referenced by RFC 7638 thumbprint, never republished here. Per-role fields are populated only when that role applies; consumers MUST ignore non-applicable fields based on `role`.
func (*WellKnownManifest) Descriptor
deprecated
func (*WellKnownManifest) Descriptor() ([]byte, []int)
Deprecated: Use WellKnownManifest.ProtoReflect.Descriptor instead.
func (*WellKnownManifest) GetAcceptedVerifiers ¶
func (x *WellKnownManifest) GetAcceptedVerifiers() []string
func (*WellKnownManifest) GetAccountRegistration ¶
func (x *WellKnownManifest) GetAccountRegistration() *AccountRegistration
func (*WellKnownManifest) GetBaseCurrency ¶
func (x *WellKnownManifest) GetBaseCurrency() string
func (*WellKnownManifest) GetCatalogContributors ¶
func (x *WellKnownManifest) GetCatalogContributors() []*CatalogContributor
func (*WellKnownManifest) GetCatalogEndpoint ¶
func (x *WellKnownManifest) GetCatalogEndpoint() string
func (*WellKnownManifest) GetContact ¶
func (x *WellKnownManifest) GetContact() string
func (*WellKnownManifest) GetDeliveryMethodsSupported ¶
func (x *WellKnownManifest) GetDeliveryMethodsSupported() []DeliveryMethod
func (*WellKnownManifest) GetDomain ¶
func (x *WellKnownManifest) GetDomain() string
func (*WellKnownManifest) GetEndpoint ¶
func (x *WellKnownManifest) GetEndpoint() string
func (*WellKnownManifest) GetExchanges ¶
func (x *WellKnownManifest) GetExchanges() []*AuthorizedExchange
func (*WellKnownManifest) GetExt ¶
func (x *WellKnownManifest) GetExt() *structpb.Struct
func (*WellKnownManifest) GetExtCritical ¶
func (x *WellKnownManifest) GetExtCritical() []string
func (*WellKnownManifest) GetGnapGrantEndpoint ¶
func (x *WellKnownManifest) GetGnapGrantEndpoint() string
func (*WellKnownManifest) GetHashMethodsSupported ¶
func (x *WellKnownManifest) GetHashMethodsSupported() []string
func (*WellKnownManifest) GetHealthEndpoint ¶
func (x *WellKnownManifest) GetHealthEndpoint() string
func (*WellKnownManifest) GetMaxIntermediaryHops ¶
func (x *WellKnownManifest) GetMaxIntermediaryHops() int32
func (*WellKnownManifest) GetName ¶
func (x *WellKnownManifest) GetName() string
func (*WellKnownManifest) GetOidcIssuer ¶
func (x *WellKnownManifest) GetOidcIssuer() string
func (*WellKnownManifest) GetOperator ¶
func (x *WellKnownManifest) GetOperator() string
func (*WellKnownManifest) GetOperatorDomain ¶
func (x *WellKnownManifest) GetOperatorDomain() string
func (*WellKnownManifest) GetPricingModelsSupported ¶
func (x *WellKnownManifest) GetPricingModelsSupported() []PricingModel
func (*WellKnownManifest) GetPrivacyUri ¶
func (x *WellKnownManifest) GetPrivacyUri() string
func (*WellKnownManifest) GetProtocolVersionsSupported ¶
func (x *WellKnownManifest) GetProtocolVersionsSupported() []string
func (*WellKnownManifest) GetRole ¶
func (x *WellKnownManifest) GetRole() Role
func (*WellKnownManifest) GetSupportedAuthMethods ¶
func (x *WellKnownManifest) GetSupportedAuthMethods() []AuthMethod
func (*WellKnownManifest) GetSupportedProfiles ¶
func (x *WellKnownManifest) GetSupportedProfiles() []string
func (*WellKnownManifest) GetTermsDigest ¶
func (x *WellKnownManifest) GetTermsDigest() string
func (*WellKnownManifest) GetTermsUri ¶
func (x *WellKnownManifest) GetTermsUri() string
func (*WellKnownManifest) GetVer ¶
func (x *WellKnownManifest) GetVer() string
func (*WellKnownManifest) ProtoMessage ¶
func (*WellKnownManifest) ProtoMessage()
func (*WellKnownManifest) ProtoReflect ¶
func (x *WellKnownManifest) ProtoReflect() protoreflect.Message
func (*WellKnownManifest) Reset ¶
func (x *WellKnownManifest) Reset()
func (*WellKnownManifest) String ¶
func (x *WellKnownManifest) String() string