diff --git a/api.md b/api.md index 2c0a5971f0e..21544435c34 100644 --- a/api.md +++ b/api.md @@ -2497,6 +2497,7 @@ Methods: Response Types: +- api_gateway.DiscoveryOperation - api_gateway.DiscoveryGetResponse Methods: @@ -2507,13 +2508,12 @@ Methods: Response Types: -- api_gateway.DiscoveryOperationListResponse - api_gateway.DiscoveryOperationBulkEditResponse - api_gateway.DiscoveryOperationEditResponse Methods: -- client.APIGateway.Discovery.Operations.List(ctx context.Context, params api_gateway.DiscoveryOperationListParams) (pagination.V4PagePaginationArray[api_gateway.DiscoveryOperationListResponse], error) +- client.APIGateway.Discovery.Operations.List(ctx context.Context, params api_gateway.DiscoveryOperationListParams) (pagination.V4PagePaginationArray[api_gateway.DiscoveryOperation], error) - client.APIGateway.Discovery.Operations.BulkEdit(ctx context.Context, params api_gateway.DiscoveryOperationBulkEditParams) (api_gateway.DiscoveryOperationBulkEditResponse, error) - client.APIGateway.Discovery.Operations.Edit(ctx context.Context, operationID string, params api_gateway.DiscoveryOperationEditParams) (api_gateway.DiscoveryOperationEditResponse, error) diff --git a/api_gateway/discovery.go b/api_gateway/discovery.go index 763626263fa..798c41d796a 100644 --- a/api_gateway/discovery.go +++ b/api_gateway/discovery.go @@ -54,6 +54,164 @@ func (r *DiscoveryService) Get(ctx context.Context, query DiscoveryGetParams, op return } +type DiscoveryOperation struct { + // UUID + ID string `json:"id,required"` + // The endpoint which can contain path parameter templates in curly braces, each + // will be replaced from left to right with {varN}, starting with {var1}, during + // insertion. This will further be Cloudflare-normalized upon insertion. See: + // https://developers.cloudflare.com/rules/normalization/how-it-works/. + Endpoint string `json:"endpoint,required" format:"uri-template"` + // RFC3986-compliant host. + Host string `json:"host,required" format:"hostname"` + LastUpdated time.Time `json:"last_updated,required" format:"date-time"` + // The HTTP method used to access the endpoint. + Method DiscoveryOperationMethod `json:"method,required"` + // API discovery engine(s) that discovered this operation + Origin []DiscoveryOperationOrigin `json:"origin,required"` + // State of operation in API Discovery + // + // - `review` - Operation is not saved into API Shield Endpoint Management + // - `saved` - Operation is saved into API Shield Endpoint Management + // - `ignored` - Operation is marked as ignored + State DiscoveryOperationState `json:"state,required"` + Features DiscoveryOperationFeatures `json:"features"` + JSON discoveryOperationJSON `json:"-"` +} + +// discoveryOperationJSON contains the JSON metadata for the struct +// [DiscoveryOperation] +type discoveryOperationJSON struct { + ID apijson.Field + Endpoint apijson.Field + Host apijson.Field + LastUpdated apijson.Field + Method apijson.Field + Origin apijson.Field + State apijson.Field + Features apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *DiscoveryOperation) UnmarshalJSON(data []byte) (err error) { + return apijson.UnmarshalRoot(data, r) +} + +func (r discoveryOperationJSON) RawJSON() string { + return r.raw +} + +// The HTTP method used to access the endpoint. +type DiscoveryOperationMethod string + +const ( + DiscoveryOperationMethodGet DiscoveryOperationMethod = "GET" + DiscoveryOperationMethodPost DiscoveryOperationMethod = "POST" + DiscoveryOperationMethodHead DiscoveryOperationMethod = "HEAD" + DiscoveryOperationMethodOptions DiscoveryOperationMethod = "OPTIONS" + DiscoveryOperationMethodPut DiscoveryOperationMethod = "PUT" + DiscoveryOperationMethodDelete DiscoveryOperationMethod = "DELETE" + DiscoveryOperationMethodConnect DiscoveryOperationMethod = "CONNECT" + DiscoveryOperationMethodPatch DiscoveryOperationMethod = "PATCH" + DiscoveryOperationMethodTrace DiscoveryOperationMethod = "TRACE" +) + +func (r DiscoveryOperationMethod) IsKnown() bool { + switch r { + case DiscoveryOperationMethodGet, DiscoveryOperationMethodPost, DiscoveryOperationMethodHead, DiscoveryOperationMethodOptions, DiscoveryOperationMethodPut, DiscoveryOperationMethodDelete, DiscoveryOperationMethodConnect, DiscoveryOperationMethodPatch, DiscoveryOperationMethodTrace: + return true + } + return false +} + +// - `ML` - Discovered operation was sourced using ML API Discovery \* +// `SessionIdentifier` - Discovered operation was sourced using Session +// Identifier API Discovery +type DiscoveryOperationOrigin string + +const ( + DiscoveryOperationOriginMl DiscoveryOperationOrigin = "ML" + DiscoveryOperationOriginSessionIdentifier DiscoveryOperationOrigin = "SessionIdentifier" +) + +func (r DiscoveryOperationOrigin) IsKnown() bool { + switch r { + case DiscoveryOperationOriginMl, DiscoveryOperationOriginSessionIdentifier: + return true + } + return false +} + +// State of operation in API Discovery +// +// - `review` - Operation is not saved into API Shield Endpoint Management +// - `saved` - Operation is saved into API Shield Endpoint Management +// - `ignored` - Operation is marked as ignored +type DiscoveryOperationState string + +const ( + DiscoveryOperationStateReview DiscoveryOperationState = "review" + DiscoveryOperationStateSaved DiscoveryOperationState = "saved" + DiscoveryOperationStateIgnored DiscoveryOperationState = "ignored" +) + +func (r DiscoveryOperationState) IsKnown() bool { + switch r { + case DiscoveryOperationStateReview, DiscoveryOperationStateSaved, DiscoveryOperationStateIgnored: + return true + } + return false +} + +type DiscoveryOperationFeatures struct { + TrafficStats DiscoveryOperationFeaturesTrafficStats `json:"traffic_stats"` + JSON discoveryOperationFeaturesJSON `json:"-"` +} + +// discoveryOperationFeaturesJSON contains the JSON metadata for the struct +// [DiscoveryOperationFeatures] +type discoveryOperationFeaturesJSON struct { + TrafficStats apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *DiscoveryOperationFeatures) UnmarshalJSON(data []byte) (err error) { + return apijson.UnmarshalRoot(data, r) +} + +func (r discoveryOperationFeaturesJSON) RawJSON() string { + return r.raw +} + +type DiscoveryOperationFeaturesTrafficStats struct { + LastUpdated time.Time `json:"last_updated,required" format:"date-time"` + // The period in seconds these statistics were computed over + PeriodSeconds int64 `json:"period_seconds,required"` + // The average number of requests seen during this period + Requests float64 `json:"requests,required"` + JSON discoveryOperationFeaturesTrafficStatsJSON `json:"-"` +} + +// discoveryOperationFeaturesTrafficStatsJSON contains the JSON metadata for the +// struct [DiscoveryOperationFeaturesTrafficStats] +type discoveryOperationFeaturesTrafficStatsJSON struct { + LastUpdated apijson.Field + PeriodSeconds apijson.Field + Requests apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *DiscoveryOperationFeaturesTrafficStats) UnmarshalJSON(data []byte) (err error) { + return apijson.UnmarshalRoot(data, r) +} + +func (r discoveryOperationFeaturesTrafficStatsJSON) RawJSON() string { + return r.raw +} + type DiscoveryGetResponse struct { Schemas []interface{} `json:"schemas,required"` Timestamp time.Time `json:"timestamp,required" format:"date-time"` diff --git a/api_gateway/discoveryoperation.go b/api_gateway/discoveryoperation.go index d3ea351cc66..a8901569b14 100644 --- a/api_gateway/discoveryoperation.go +++ b/api_gateway/discoveryoperation.go @@ -8,7 +8,6 @@ import ( "fmt" "net/http" "net/url" - "time" "github.com/cloudflare/cloudflare-go/v3/internal/apijson" "github.com/cloudflare/cloudflare-go/v3/internal/apiquery" @@ -38,7 +37,7 @@ func NewDiscoveryOperationService(opts ...option.RequestOption) (r *DiscoveryOpe } // Retrieve the most up to date view of discovered operations -func (r *DiscoveryOperationService) List(ctx context.Context, params DiscoveryOperationListParams, opts ...option.RequestOption) (res *pagination.V4PagePaginationArray[DiscoveryOperationListResponse], err error) { +func (r *DiscoveryOperationService) List(ctx context.Context, params DiscoveryOperationListParams, opts ...option.RequestOption) (res *pagination.V4PagePaginationArray[DiscoveryOperation], err error) { var raw *http.Response opts = append(r.Options[:], opts...) opts = append([]option.RequestOption{option.WithResponseInto(&raw)}, opts...) @@ -60,7 +59,7 @@ func (r *DiscoveryOperationService) List(ctx context.Context, params DiscoveryOp } // Retrieve the most up to date view of discovered operations -func (r *DiscoveryOperationService) ListAutoPaging(ctx context.Context, params DiscoveryOperationListParams, opts ...option.RequestOption) *pagination.V4PagePaginationArrayAutoPager[DiscoveryOperationListResponse] { +func (r *DiscoveryOperationService) ListAutoPaging(ctx context.Context, params DiscoveryOperationListParams, opts ...option.RequestOption) *pagination.V4PagePaginationArrayAutoPager[DiscoveryOperation] { return pagination.NewV4PagePaginationArrayAutoPager(r.List(ctx, params, opts...)) } @@ -102,164 +101,6 @@ func (r *DiscoveryOperationService) Edit(ctx context.Context, operationID string return } -type DiscoveryOperationListResponse struct { - // UUID - ID string `json:"id,required"` - // The endpoint which can contain path parameter templates in curly braces, each - // will be replaced from left to right with {varN}, starting with {var1}, during - // insertion. This will further be Cloudflare-normalized upon insertion. See: - // https://developers.cloudflare.com/rules/normalization/how-it-works/. - Endpoint string `json:"endpoint,required" format:"uri-template"` - // RFC3986-compliant host. - Host string `json:"host,required" format:"hostname"` - LastUpdated time.Time `json:"last_updated,required" format:"date-time"` - // The HTTP method used to access the endpoint. - Method DiscoveryOperationListResponseMethod `json:"method,required"` - // API discovery engine(s) that discovered this operation - Origin []DiscoveryOperationListResponseOrigin `json:"origin,required"` - // State of operation in API Discovery - // - // - `review` - Operation is not saved into API Shield Endpoint Management - // - `saved` - Operation is saved into API Shield Endpoint Management - // - `ignored` - Operation is marked as ignored - State DiscoveryOperationListResponseState `json:"state,required"` - Features DiscoveryOperationListResponseFeatures `json:"features"` - JSON discoveryOperationListResponseJSON `json:"-"` -} - -// discoveryOperationListResponseJSON contains the JSON metadata for the struct -// [DiscoveryOperationListResponse] -type discoveryOperationListResponseJSON struct { - ID apijson.Field - Endpoint apijson.Field - Host apijson.Field - LastUpdated apijson.Field - Method apijson.Field - Origin apijson.Field - State apijson.Field - Features apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *DiscoveryOperationListResponse) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r discoveryOperationListResponseJSON) RawJSON() string { - return r.raw -} - -// The HTTP method used to access the endpoint. -type DiscoveryOperationListResponseMethod string - -const ( - DiscoveryOperationListResponseMethodGet DiscoveryOperationListResponseMethod = "GET" - DiscoveryOperationListResponseMethodPost DiscoveryOperationListResponseMethod = "POST" - DiscoveryOperationListResponseMethodHead DiscoveryOperationListResponseMethod = "HEAD" - DiscoveryOperationListResponseMethodOptions DiscoveryOperationListResponseMethod = "OPTIONS" - DiscoveryOperationListResponseMethodPut DiscoveryOperationListResponseMethod = "PUT" - DiscoveryOperationListResponseMethodDelete DiscoveryOperationListResponseMethod = "DELETE" - DiscoveryOperationListResponseMethodConnect DiscoveryOperationListResponseMethod = "CONNECT" - DiscoveryOperationListResponseMethodPatch DiscoveryOperationListResponseMethod = "PATCH" - DiscoveryOperationListResponseMethodTrace DiscoveryOperationListResponseMethod = "TRACE" -) - -func (r DiscoveryOperationListResponseMethod) IsKnown() bool { - switch r { - case DiscoveryOperationListResponseMethodGet, DiscoveryOperationListResponseMethodPost, DiscoveryOperationListResponseMethodHead, DiscoveryOperationListResponseMethodOptions, DiscoveryOperationListResponseMethodPut, DiscoveryOperationListResponseMethodDelete, DiscoveryOperationListResponseMethodConnect, DiscoveryOperationListResponseMethodPatch, DiscoveryOperationListResponseMethodTrace: - return true - } - return false -} - -// - `ML` - Discovered operation was sourced using ML API Discovery \* -// `SessionIdentifier` - Discovered operation was sourced using Session -// Identifier API Discovery -type DiscoveryOperationListResponseOrigin string - -const ( - DiscoveryOperationListResponseOriginMl DiscoveryOperationListResponseOrigin = "ML" - DiscoveryOperationListResponseOriginSessionIdentifier DiscoveryOperationListResponseOrigin = "SessionIdentifier" -) - -func (r DiscoveryOperationListResponseOrigin) IsKnown() bool { - switch r { - case DiscoveryOperationListResponseOriginMl, DiscoveryOperationListResponseOriginSessionIdentifier: - return true - } - return false -} - -// State of operation in API Discovery -// -// - `review` - Operation is not saved into API Shield Endpoint Management -// - `saved` - Operation is saved into API Shield Endpoint Management -// - `ignored` - Operation is marked as ignored -type DiscoveryOperationListResponseState string - -const ( - DiscoveryOperationListResponseStateReview DiscoveryOperationListResponseState = "review" - DiscoveryOperationListResponseStateSaved DiscoveryOperationListResponseState = "saved" - DiscoveryOperationListResponseStateIgnored DiscoveryOperationListResponseState = "ignored" -) - -func (r DiscoveryOperationListResponseState) IsKnown() bool { - switch r { - case DiscoveryOperationListResponseStateReview, DiscoveryOperationListResponseStateSaved, DiscoveryOperationListResponseStateIgnored: - return true - } - return false -} - -type DiscoveryOperationListResponseFeatures struct { - TrafficStats DiscoveryOperationListResponseFeaturesTrafficStats `json:"traffic_stats"` - JSON discoveryOperationListResponseFeaturesJSON `json:"-"` -} - -// discoveryOperationListResponseFeaturesJSON contains the JSON metadata for the -// struct [DiscoveryOperationListResponseFeatures] -type discoveryOperationListResponseFeaturesJSON struct { - TrafficStats apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *DiscoveryOperationListResponseFeatures) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r discoveryOperationListResponseFeaturesJSON) RawJSON() string { - return r.raw -} - -type DiscoveryOperationListResponseFeaturesTrafficStats struct { - LastUpdated time.Time `json:"last_updated,required" format:"date-time"` - // The period in seconds these statistics were computed over - PeriodSeconds int64 `json:"period_seconds,required"` - // The average number of requests seen during this period - Requests float64 `json:"requests,required"` - JSON discoveryOperationListResponseFeaturesTrafficStatsJSON `json:"-"` -} - -// discoveryOperationListResponseFeaturesTrafficStatsJSON contains the JSON -// metadata for the struct [DiscoveryOperationListResponseFeaturesTrafficStats] -type discoveryOperationListResponseFeaturesTrafficStatsJSON struct { - LastUpdated apijson.Field - PeriodSeconds apijson.Field - Requests apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *DiscoveryOperationListResponseFeaturesTrafficStats) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r discoveryOperationListResponseFeaturesTrafficStatsJSON) RawJSON() string { - return r.raw -} - type DiscoveryOperationBulkEditResponse map[string]DiscoveryOperationBulkEditResponseItem // Mappings of discovered operations (keys) to objects describing their state