File size: 1,245 Bytes
88211d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
defmodule PlausibleWeb.Plugins.API.Schemas.Capabilities do
  @moduledoc """
  OpenAPI schema for Capabilities
  """
  use PlausibleWeb, :open_api_schema
  require Plausible.Billing.Feature

  @features Plausible.Billing.Feature.list_short_names()
  @features_schema Enum.reduce(@features, %{}, fn feature, acc ->
                     Map.put(acc, feature, %Schema{type: :boolean})
                   end)

  OpenApiSpex.schema(%{
    title: "Capabilities",
    description: "Capabilities object",
    type: :object,
    required: [:authorized, :data_domain, :features],
    properties: %{
      authorized: %Schema{type: :boolean},
      data_domain: %Schema{type: :string, nullable: true},
      features: %Schema{
        type: :object,
        required: @features,
        properties: @features_schema
      }
    },
    example: %{
      authorized: true,
      data_domain: "example.com",
      features: %{
        Funnels: false,
        Goals: true,
        Props: false,
        RevenueGoals: false,
        StatsAPI: false,
        SitesAPI: false,
        SiteSegments: false,
        SiteAnnotations: false,
        Teams: false,
        SharedLinks: false,
        SSO: false,
        ConsolidatedView: false
      }
    }
  })
end