# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

from typing import List, Optional
from datetime import datetime
from typing_extensions import Literal

from ...._models import BaseModel

__all__ = [
    "Worker",
    "Observability",
    "ObservabilityLogs",
    "ObservabilityTraces",
    "References",
    "ReferencesDispatchNamespaceOutbound",
    "ReferencesDomain",
    "ReferencesDurableObject",
    "ReferencesQueue",
    "ReferencesWorker",
    "Subdomain",
    "TailConsumer",
]


class ObservabilityLogs(BaseModel):
    """Log settings for the Worker."""

    destinations: Optional[List[str]] = None
    """A list of destinations where logs will be exported to."""

    enabled: Optional[bool] = None
    """Whether logs are enabled for the Worker."""

    head_sampling_rate: Optional[float] = None
    """The sampling rate for logs. From 0 to 1 (1 = 100%, 0.1 = 10%)."""

    invocation_logs: Optional[bool] = None
    """
    Whether
    [invocation logs](https://developers.cloudflare.com/workers/observability/logs/workers-logs/#invocation-logs)
    are enabled for the Worker.
    """

    persist: Optional[bool] = None
    """Whether log persistence is enabled for the Worker."""


class ObservabilityTraces(BaseModel):
    """Trace settings for the Worker."""

    destinations: Optional[List[str]] = None
    """A list of destinations where traces will be exported to."""

    enabled: Optional[bool] = None
    """Whether traces are enabled for the Worker."""

    head_sampling_rate: Optional[float] = None
    """The sampling rate for traces. From 0 to 1 (1 = 100%, 0.1 = 10%)."""

    persist: Optional[bool] = None
    """Whether trace persistence is enabled for the Worker."""

    propagation_policy: Optional[Literal["authenticated", "accept"]] = None
    """
    Controls how inbound trace context (traceparent/tracestate) headers on incoming
    requests are handled. "authenticated" honors inbound trace context only when
    accompanied by a valid trace auth token. "accept" unconditionally accepts
    inbound trace context. Requires the trace propagation feature to be enabled.
    Returns null when the trace propagation feature is not enabled for the account.
    """


class Observability(BaseModel):
    """Observability settings for the Worker."""

    enabled: Optional[bool] = None
    """Whether observability is enabled for the Worker."""

    head_sampling_rate: Optional[float] = None
    """The sampling rate for observability. From 0 to 1 (1 = 100%, 0.1 = 10%)."""

    logs: Optional[ObservabilityLogs] = None
    """Log settings for the Worker."""

    redact_query_string: Optional[bool] = None
    """Whether query strings are removed from request URLs in logs and traces."""

    traces: Optional[ObservabilityTraces] = None
    """Trace settings for the Worker."""


class ReferencesDispatchNamespaceOutbound(BaseModel):
    namespace_id: str
    """ID of the dispatch namespace."""

    namespace_name: str
    """Name of the dispatch namespace."""

    worker_id: str
    """ID of the Worker using the dispatch namespace."""

    worker_name: str
    """Name of the Worker using the dispatch namespace."""


class ReferencesDomain(BaseModel):
    id: str
    """ID of the custom domain."""

    certificate_id: str
    """ID of the TLS certificate issued for the custom domain."""

    hostname: str
    """Full hostname of the custom domain, including the zone name."""

    zone_id: str
    """ID of the zone."""

    zone_name: str
    """Name of the zone."""


class ReferencesDurableObject(BaseModel):
    namespace_id: str
    """ID of the Durable Object namespace being used."""

    namespace_name: str
    """Name of the Durable Object namespace being used."""

    worker_id: str
    """ID of the Worker using the Durable Object implementation."""

    worker_name: str
    """Name of the Worker using the Durable Object implementation."""


class ReferencesQueue(BaseModel):
    queue_consumer_id: str
    """ID of the queue consumer configuration."""

    queue_id: str
    """ID of the queue."""

    queue_name: str
    """Name of the queue."""


class ReferencesWorker(BaseModel):
    id: str
    """ID of the referencing Worker."""

    name: str
    """Name of the referencing Worker."""


class References(BaseModel):
    """Other resources that reference the Worker and depend on it existing."""

    dispatch_namespace_outbounds: List[ReferencesDispatchNamespaceOutbound]
    """
    Other Workers that reference the Worker as an outbound for a dispatch namespace.
    """

    domains: List[ReferencesDomain]
    """Custom domains connected to the Worker."""

    durable_objects: List[ReferencesDurableObject]
    """Other Workers that reference Durable Object classes implemented by the Worker."""

    queues: List[ReferencesQueue]
    """Queues that send messages to the Worker."""

    workers: List[ReferencesWorker]
    """
    Other Workers that reference the Worker using
    [service bindings](https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/).
    """


class Subdomain(BaseModel):
    """Subdomain settings for the Worker."""

    enabled: Optional[bool] = None
    """Whether the \\**.workers.dev subdomain is enabled for the Worker."""

    preview_url_suffix: Optional[str] = None
    """
    Prepend a version or preview prefix to this host suffix to form the
    \\**.workers.dev
    [preview URL](https://developers.cloudflare.com/workers/configuration/previews/)
    the Worker would serve on once previews are enabled, e.g.
    `https://<prefix>-my-worker.my-subdomain.workers.dev`. Present whenever the
    account owns a workers.dev subdomain, regardless of whether `previews_enabled`
    is true, so presence does not imply preview URLs are currently live. Absent only
    when the account owns no workers.dev subdomain.
    """

    previews_enabled: Optional[bool] = None
    """
    Whether
    [preview URLs](https://developers.cloudflare.com/workers/configuration/previews/)
    are enabled for the Worker.
    """

    url: Optional[str] = None
    """
    The address the Worker would serve on once its \\**.workers.dev subdomain is
    enabled. Present whenever the account owns a workers.dev subdomain, regardless
    of whether `enabled` is true, so presence does not imply the Worker is currently
    live at this URL. Absent only when the account owns no workers.dev subdomain.
    """


class TailConsumer(BaseModel):
    name: str
    """Name of the consumer Worker."""


class Worker(BaseModel):
    id: str
    """Immutable ID of the Worker."""

    created_on: datetime
    """When the Worker was created."""

    logpush: bool
    """Whether logpush is enabled for the Worker."""

    name: str
    """Name of the Worker."""

    observability: Observability
    """Observability settings for the Worker."""

    references: References
    """Other resources that reference the Worker and depend on it existing."""

    subdomain: Subdomain
    """Subdomain settings for the Worker."""

    tags: List[str]
    """Tags associated with the Worker."""

    tail_consumers: List[TailConsumer]
    """Other Workers that should consume logs from the Worker."""

    updated_on: datetime
    """When the Worker was most recently updated."""

    deployed_on: Optional[datetime] = None
    """When the Worker's most recent deployment was created.

    `null` if the Worker has never been deployed.
    """
