diff --git a/apps/graphql/lib/graphql/resolvers/cloud.ex b/apps/graphql/lib/graphql/resolvers/cloud.ex index 497217a3c..b7703f4ee 100644 --- a/apps/graphql/lib/graphql/resolvers/cloud.ex +++ b/apps/graphql/lib/graphql/resolvers/cloud.ex @@ -5,7 +5,9 @@ defmodule GraphQl.Resolvers.Cloud do def resolve_instance(%{id: id}, %{context: %{current_user: user}}), do: Cloud.visible(id, user) - def resolve_cluster(%ConsoleInstance{url: url}, _, _), do: {:ok, Clusters.get_cluster_by_url(url)} + def resolve_cluster(%ConsoleInstance{url: url}, _, _) do + ok(Clusters.get_cluster_by_url("https://#{url}") || Clusters.get_cluster_by_url(url)) + end def list_instances(args, %{context: %{current_user: user}}) do ConsoleInstance.for_account(user.account_id) diff --git a/apps/graphql/mix.exs b/apps/graphql/mix.exs index 08a31cfae..7e1f13dd9 100644 --- a/apps/graphql/mix.exs +++ b/apps/graphql/mix.exs @@ -60,7 +60,7 @@ defmodule Graphql.MixProject do # Run "mix help deps" to learn about dependencies. defp deps do [ - {:absinthe, "~> 1.7.0"}, + {:absinthe, "~> 1.7.5"}, {:absinthe_relay, "~> 1.5.2"}, {:absinthe_plug, "~> 1.5.8"}, {:dataloader, "== 1.0.10", override: true}, diff --git a/apps/graphql/test/queries/cloud_queries_test.exs b/apps/graphql/test/queries/cloud_queries_test.exs index 3cd410d0e..0407936fd 100644 --- a/apps/graphql/test/queries/cloud_queries_test.exs +++ b/apps/graphql/test/queries/cloud_queries_test.exs @@ -35,6 +35,24 @@ defmodule GraphQl.CloudQueriesTest do assert found["id"] == instance.id end + test "it can sideload a console cluster" do + user = insert(:user) + instance = insert(:console_instance, owner: insert(:user, account: user.account)) + cluster = insert(:cluster, console_url: "https://#{instance.url}", owner: user) + + {:ok, %{data: %{"consoleInstance" => found}}} = run_query(""" + query Get($id: ID!) { + consoleInstance(id: $id) { + id + console { id } + } + } + """, %{"id" => instance.id}, %{current_user: user}) + + assert found["id"] == instance.id + assert found["console"]["id"] == cluster.id + end + test "you cannot describe console instances you cannot see" do user = insert(:user) instance = insert(:console_instance) diff --git a/mix.lock b/mix.lock index b6487ead8..2438f28e1 100644 --- a/mix.lock +++ b/mix.lock @@ -1,5 +1,5 @@ %{ - "absinthe": {:hex, :absinthe, "1.7.0", "36819e7b1fd5046c9c734f27fe7e564aed3bda59f0354c37cd2df88fd32dd014", [:mix], [{:dataloader, "~> 1.0.0", [hex: :dataloader, repo: "hexpm", optional: true]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0 or ~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "566a5b5519afc9b29c4d367f0c6768162de3ec03e9bf9916f9dc2bcbe7c09643"}, + "absinthe": {:hex, :absinthe, "1.7.8", "43443d12ad2b4fcce60e257ac71caf3081f3d5c4ddd5eac63a02628bcaf5b556", [:mix], [{:dataloader, "~> 1.0.0 or ~> 2.0", [hex: :dataloader, repo: "hexpm", optional: true]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}, {:opentelemetry_process_propagator, "~> 0.2.1 or ~> 0.3", [hex: :opentelemetry_process_propagator, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c4085df201892a498384f997649aedb37a4ce8a726c170d5b5617ed3bf45d40b"}, "absinthe_client": {:hex, :absinthe_client, "0.1.1", "1e778d587a27b85ecc35e4a5fedc64c85d9fdfd05395745c7af5345564dff54e", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:req, "~> 0.4", [hex: :req, repo: "hexpm", optional: false]}, {:slipstream, "~> 1.0", [hex: :slipstream, repo: "hexpm", optional: false]}], "hexpm", "e75a28c5bb647f485e9c03bbc3a47e7783742794bd4c10f3307a495a9e7273b6"}, "absinthe_phoenix": {:hex, :absinthe_phoenix, "2.0.2", "e607b438db900049b9b3760f8ecd0591017a46122fffed7057bf6989020992b5", [:mix], [{:absinthe, "~> 1.5", [hex: :absinthe, repo: "hexpm", optional: false]}, {:absinthe_plug, "~> 1.5", [hex: :absinthe_plug, repo: "hexpm", optional: false]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.5", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.13 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}], "hexpm", "d36918925c380dc7d2ed7d039c9a3b4182ec36723f7417a68745ade5aab22f8d"}, "absinthe_plug": {:hex, :absinthe_plug, "1.5.8", "38d230641ba9dca8f72f1fed2dfc8abd53b3907d1996363da32434ab6ee5d6ab", [:mix], [{:absinthe, "~> 1.5", [hex: :absinthe, repo: "hexpm", optional: false]}, {:plug, "~> 1.4", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bbb04176647b735828861e7b2705465e53e2cf54ccf5a73ddd1ebd855f996e5a"}, @@ -40,13 +40,13 @@ "cutkey": {:git, "https://github.com/potatosalad/cutkey.git", "47640d04fb4db4a0b79168d7fca0df87aaa42751", []}, "dataloader": {:hex, :dataloader, "1.0.10", "a42f07641b1a0572e0b21a2a5ae1be11da486a6790f3d0d14512d96ff3e3bbe9", [:mix], [{:ecto, ">= 3.4.3 and < 4.0.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "54cd70cec09addf4b2ace14cc186a283a149fd4d3ec5475b155951bf33cd963f"}, "db_connection": {:hex, :db_connection, "2.4.2", "f92e79aff2375299a16bcb069a14ee8615c3414863a6fef93156aee8e86c2ff3", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4fe53ca91b99f55ea249693a0229356a08f4d1a7931d8ffa79289b145fe83668"}, - "decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"}, + "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, "decorator": {:hex, :decorator, "1.4.0", "a57ac32c823ea7e4e67f5af56412d12b33274661bb7640ec7fc882f8d23ac419", [:mix], [], "hexpm", "0a07cedd9083da875c7418dea95b78361197cf2bf3211d743f6f7ce39656597f"}, "dictionary": {:hex, :dictionary, "0.1.1", "fb333a3ee04c514231f0a5e166dd1c27429620b0dabb12fd42e5d28b11657a0a", [:mix], [], "hexpm", "17bae452ab5ecf7bdd75315c6adb44622242de9cf700ab107865ab5557443c2b"}, "distillery": {:hex, :distillery, "2.1.1", "f9332afc2eec8a1a2b86f22429e068ef35f84a93ea1718265e740d90dd367814", [:mix], [{:artificery, "~> 0.2", [hex: :artificery, repo: "hexpm", optional: false]}], "hexpm", "bbc7008b0161a6f130d8d903b5b3232351fccc9c31a991f8fcbf2a12ace22995"}, "dns": {:hex, :dns, "2.4.0", "44790a0375b28bdc7b59fc894460bfcb03ffeec4c5984e2c3e8b0797b1518327", [:mix], [], "hexpm", "e178e353c469820d02ba889d6a80d01c8c27b47dfcda4016a9cbc6218e3eed64"}, "earmark": {:hex, :earmark, "1.4.2", "3aa0bd23bc4c61cf2f1e5d752d1bb470560a6f8539974f767a38923bb20e1d7f", [:mix], [], "hexpm", "5e8806285d8a3a8999bd38e4a73c58d28534c856bc38c44818e5ba85bbda16fb"}, - "ecto": {:hex, :ecto, "3.9.1", "67173b1687afeb68ce805ee7420b4261649d5e2deed8fe5550df23bab0bc4396", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c80bb3d736648df790f7f92f81b36c922d9dd3203ca65be4ff01d067f54eb304"}, + "ecto": {:hex, :ecto, "3.9.6", "2f420c173efcb2e22fa4f8fc41e75e02b3c5bd4cffef12085cae5418c12e530d", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "df17bc06ba6f78a7b764e4a14ef877fe5f4499332c5a105ace11fe7013b72c84"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_sql": {:hex, :ecto_sql, "3.9.0", "2bb21210a2a13317e098a420a8c1cc58b0c3421ab8e3acfa96417dab7817918c", [:mix], [{:db_connection, "~> 2.5 or ~> 2.4.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.9.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a8f3f720073b8b1ac4c978be25fa7960ed7fd44997420c304a4a2e200b596453"}, "elixir_make": {:hex, :elixir_make, "0.6.0", "38349f3e29aff4864352084fc736fa7fa0f2995a819a737554f7ebd28b85aaab", [:mix], [], "hexpm", "d522695b93b7f0b4c0fcb2dfe73a6b905b1c301226a5a55cb42e5b14d509e050"}, @@ -82,7 +82,7 @@ "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, "influxql": {:hex, :influxql, "0.2.1", "71bfd5c0d81bf870f239baf3357bf5226b44fce16e1b9399ba1368203ca71245", [:mix], [], "hexpm", "75faf04960d6830ca0827869eaac1ba092655041c5e96deb2a588bafb601205c"}, "instream": {:hex, :instream, "1.0.0", "e5e848ac0de91ead5a5f04b5fe7d72e1be9cdd8862525b6f5fed27dca58096d2", [:mix], [{:hackney, "~> 1.1", [hex: :hackney, repo: "hexpm", optional: false]}, {:influxql, "~> 0.2.0", [hex: :influxql, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}], "hexpm", "17cead56c5f8cab804bd02d8be207d933078404338171c082df1b0c098a5b24b"}, - "jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"}, + "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, "joken": {:hex, :joken, "2.5.0", "09be497d804b8115eb6f07615cef2e60c2a1008fb89dc0aef0d4c4b4609b99aa", [:mix], [{:jose, "~> 1.11.2", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "22b25c89617c5ed8ca7b31026340a25ea0f9ca7160f9706b79be9ed81fdf74e7"}, "jose": {:hex, :jose, "1.11.2", "f4c018ccf4fdce22c71e44d471f15f723cb3efab5d909ab2ba202b5bf35557b3", [:mix, :rebar3], [], "hexpm", "98143fbc48d55f3a18daba82d34fe48959d44538e9697c08f34200fa5f0947d2"}, "jsx": {:hex, :jsx, "2.11.0", "08154624050333919b4ac1b789667d5f4db166dc50e190c4d778d1587f102ee0", [:rebar3], [], "hexpm", "eed26a0d04d217f9eecefffb89714452556cf90eb38f290a27a4d45b9988f8c0"}, @@ -105,7 +105,7 @@ "nebulex": {:hex, :nebulex, "2.4.2", "b3d2d86d57b15896fb8e6d6dd49b4a9dee2eedd6eddfb3b69bfdb616a09c2817", [:mix], [{:decorator, "~> 1.4", [hex: :decorator, repo: "hexpm", optional: true]}, {:shards, "~> 1.0", [hex: :shards, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "c9f888e5770fd47614c95990d0a02c3515216d51dc72e3c830eaf28f5649ba52"}, "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, "nimble_ownership": {:hex, :nimble_ownership, "0.3.2", "d4fa4056ade0ae33b5a9eb64554a1b3779689282e37513260125d2d6b32e4874", [:mix], [], "hexpm", "28b9a9f4094fda1aa8ca72f732ff3223eb54aa3eda4fed9022254de2c152b138"}, - "nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"}, + "nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"}, "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, "oauth2": {:hex, :oauth2, "2.0.0", "338382079fe16c514420fa218b0903f8ad2d4bfc0ad0c9f988867dfa246731b0", [:mix], [{:hackney, "~> 1.13", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "881b8364ac7385f9fddc7949379cbe3f7081da37233a1aa7aab844670a91e7e7"}, "openid_connect": {:git, "https://github.com/pluralsh/openid_connect", "c3b2701b9adbe01fd89bbd09816ffa6c9e4a825e", []}, @@ -149,7 +149,7 @@ "stripity_stripe": {:hex, :stripity_stripe, "2.17.2", "6e4c5f0b2deb3d3411f91e23fedbe9db4c031a52dfeb7074b4df4fdd22ad32cd", [:mix], [{:hackney, "~> 1.15", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}, {:uri_query, "~> 0.1.2", [hex: :uri_query, repo: "hexpm", optional: false]}], "hexpm", "42bffb591d34f3cfa95cb37e862140e44a61ca4c64578bf7bb591ba60c6a66bc"}, "swarm": {:hex, :swarm, "3.4.0", "64f8b30055d74640d2186c66354b33b999438692a91be275bb89cdc7e401f448", [:mix], [{:gen_state_machine, "~> 2.0", [hex: :gen_state_machine, repo: "hexpm", optional: false]}, {:libring, "~> 1.0", [hex: :libring, repo: "hexpm", optional: false]}], "hexpm", "94884f84783fc1ba027aba8fe8a7dae4aad78c98e9f9c76667ec3471585c08c6"}, "sweet_xml": {:hex, :sweet_xml, "0.7.3", "debb256781c75ff6a8c5cbf7981146312b66f044a2898f453709a53e5031b45b", [:mix], [], "hexpm", "e110c867a1b3fe74bfc7dd9893aa851f0eed5518d0d7cad76d7baafd30e4f5ba"}, - "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, + "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"}, "telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"}, "tesla": {:hex, :tesla, "1.4.3", "f5a494e08fb1abe4fd9c28abb17f3d9b62b8f6fc492860baa91efb1aab61c8a0", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.3", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "e0755bb664bf4d664af72931f320c97adbf89da4586670f4864bf259b5750386"}, diff --git a/schema/schema.graphql b/schema/schema.graphql index 05f59be8e..f24bb3bd3 100644 --- a/schema/schema.graphql +++ b/schema/schema.graphql @@ -1,1370 +1,560 @@ -"Represents a schema" schema { - query: RootQueryType - mutation: RootMutationType subscription: RootSubscriptionType + mutation: RootMutationType + query: RootQueryType } -"The pending upgrades for a repository" -type UpgradeInfo { - installation: Installation - count: Int -} +type RootQueryType { + me: User -type PageInfo { - "When paginating backwards, are there more items?" - hasPreviousPage: Boolean! + user(id: ID!): User - "When paginating forwards, are there more items?" - hasNextPage: Boolean! + loginMethod(email: String!, host: String): LoginMethodResponse - "When paginating backwards, the cursor to continue." - startCursor: String + resetToken(id: ID!): ResetToken - "When paginating forwards, the cursor to continue." - endCursor: String -} + tokens(after: String, first: Int, before: String, last: Int): PersistedTokenConnection -enum IncidentAction { - EDIT - CREATE - STATUS - SEVERITY - ACCEPT - COMPLETE -} + token(id: ID!): PersistedToken -type ChartInstallation { - id: ID - chart: Chart - version: Version - installation: Installation - insertedAt: DateTime - updatedAt: DateTime -} + publisher(id: ID): Publisher -type RepositorySubscriptionConnection { - pageInfo: PageInfo! - edges: [RepositorySubscriptionEdge] -} + users(after: String, first: Int, before: String, last: Int, q: String, serviceAccount: Boolean, all: Boolean): UserConnection -type IncidentConnection { - pageInfo: PageInfo! - edges: [IncidentEdge] -} + searchUsers(after: String, first: Int, before: String, last: Int, incidentId: ID!, q: String!): UserConnection -type ChartInstallationConnection { - pageInfo: PageInfo! - edges: [ChartInstallationEdge] -} + publishers(after: String, first: Int, before: String, last: Int, accountId: ID, publishable: Boolean): PublisherConnection -type NextAction { - type: String - redirectToUrl: RedirectToUrl -} + webhooks(after: String, first: Int, before: String, last: Int): WebhookConnection -type PersistedTokenConnection { - pageInfo: PageInfo! - edges: [PersistedTokenEdge] -} + publicKeys(after: String, first: Int, before: String, last: Int, emails: [String]): PublicKeyConnection -type ApplicationInformation { - name: String! - ready: Boolean - componentsReady: String - components: [ApplicationComponent] - spec: ApplicationSpec -} + eabCredential(cluster: String!, provider: Provider!): EabCredential -type DeferredUpdateConnection { - pageInfo: PageInfo! - edges: [DeferredUpdateEdge] -} + eabCredentials: [EabCredential] -type IncidentMessageConnection { - pageInfo: PageInfo! - edges: [IncidentMessageEdge] -} + keyBackups(after: String, first: Int, before: String, last: Int): KeyBackupConnection -type RecipeSection { - id: ID - repository: Repository - recipe: Recipe - index: Int - recipeItems: [RecipeItem] - configuration: [RecipeConfiguration] - insertedAt: DateTime - updatedAt: DateTime -} + keyBackup(name: String!): KeyBackup -type UserConnection { - pageInfo: PageInfo! - edges: [UserEdge] -} + oidcToken(provider: ExternalOidcProvider!, idToken: String!, email: String!): String -type PublisherConnection { - pageInfo: PageInfo! - edges: [PublisherEdge] -} + repositorySubscription(id: ID!): RepositorySubscription -type RecipeValidation { - type: ValidationType! - regex: String - message: String! -} + subscriptions(after: String, first: Int, before: String, last: Int): RepositorySubscriptionConnection -type Plan { - id: ID! - name: String! - default: Boolean - visible: Boolean! - cost: Int! - period: String - lineItems: PlanLineItems - metadata: PlanMetadata - serviceLevels: [ServiceLevel] - insertedAt: DateTime - updatedAt: DateTime -} + platformPlans: [PlatformPlan] -type ResetToken { - id: ID! - externalId: ID! - type: ResetTokenType! - user: User! - email: String! - insertedAt: DateTime - updatedAt: DateTime -} + platformSubscription: PlatformSubscription -type NotificationConnection { - pageInfo: PageInfo! - edges: [NotificationEdge] -} + invoices(after: String, first: Int, before: String, last: Int): InvoiceConnection -type TerraformInstallationConnection { - pageInfo: PageInfo! - edges: [TerraformInstallationEdge] -} + "Get an application by its ID or name." + repository( + "The ID of the application." + id: ID -enum Operation { - NOT - GT - LT - EQ - GTE - LTE - PREFIX - SUFFIX -} + "The name of the application." + name: String + ): Repository -type StackCollection { - id: ID! - provider: Provider! - bundles: [StackRecipe] - insertedAt: DateTime - updatedAt: DateTime -} + installation(id: ID, name: String): Installation -type ActionItem { - type: ActionItemType! - link: String! -} + repositories( + after: String, first: Int, before: String, last: Int, publisherId: ID, q: String, tag: String, supports: Boolean, installed: Boolean, category: Category, provider: Provider, categories: [Category], tags: [String], publishers: [ID] + ): RepositoryConnection -type LineItem { - name: String! - dimension: String! - cost: Int! - period: String - type: PlanType -} + searchRepositories(after: String, first: Int, before: String, last: Int, query: String!): RepositoryConnection -type RecipeItem { - id: ID - chart: Chart - terraform: Terraform - recipeSection: RecipeSection - configuration: [RecipeConfiguration] - insertedAt: DateTime - updatedAt: DateTime -} + installations(after: String, first: Int, before: String, last: Int): InstallationConnection -type ClosureItem { - helm: Chart - terraform: Terraform - dep: Dependency -} + integrations( + after: String, first: Int, before: String, last: Int, repositoryId: ID, repositoryName: String, tag: String, type: String + ): IntegrationConnection -type EabCredential { - id: ID! - cluster: String! - provider: Provider! - keyId: String! - hmacKey: String! - insertedAt: DateTime - updatedAt: DateTime -} + closure(id: ID!, type: DependencyType!): [ClosureItem] -scalar UploadOrUrl + categories: [CategoryInfo] -type RedirectToUrl { - url: String - returnUrl: String -} + category(name: Category!): CategoryInfo -scalar Yaml + scaffold(application: String!, category: Category!, publisher: String!, ingress: Boolean, postgres: Boolean): [ScaffoldFile] -type ImageDependency { - id: ID! - image: DockerImage! - version: Version! - insertedAt: DateTime - updatedAt: DateTime -} + recipe(id: ID, name: String, repo: String): Recipe -type DomainMapping { - id: ID! - domain: String! - enableSso: Boolean - account: Account - insertedAt: DateTime - updatedAt: DateTime -} + stack(name: String!, provider: Provider!): Stack -type GroupedTag { - tag: String! - count: Int! -} + recipes( + after: String, first: Int, before: String, last: Int, repositoryId: ID, repositoryName: String, provider: Provider + ): RecipeConnection -type Tag { - id: ID! - tag: String! -} + stacks(after: String, first: Int, before: String, last: Int, featured: Boolean): StackConnection -type ChatMessage { - role: String! - content: String! - name: String -} + chart(id: ID!): Chart -enum SpecDatatype { - STRING - INT - FLOAT - BOOL - OBJECT - LIST -} + charts(after: String, first: Int, before: String, last: Int, repositoryId: ID!): ChartConnection -type WebhookEdge { - node: Webhook - cursor: String -} + chartInstallations(after: String, first: Int, before: String, last: Int, repositoryId: ID!): ChartInstallationConnection -type IntegrationEdge { - node: Integration - cursor: String -} + terraformModule(id: ID!): Terraform -type DockerImageEdge { - node: DockerImage - cursor: String -} + terraform(after: String, first: Int, before: String, last: Int, repositoryId: ID!): TerraformConnection -type RoleEdge { - node: Role - cursor: String -} + terraformInstallations(after: String, first: Int, before: String, last: Int, repositoryId: ID!): TerraformInstallationConnection -type GroupEdge { - node: Group - cursor: String -} + dockerRepositories(after: String, first: Int, before: String, last: Int, repositoryId: ID!): DockerRepositoryConnection -type RolloutEdge { - node: Rollout - cursor: String -} + dockerImages(after: String, first: Int, before: String, last: Int, dockerRepositoryId: ID!, q: String): DockerImageConnection -type PublicKeyEdge { - node: PublicKey - cursor: String -} + dockerImage(id: ID!): DockerImage -type RepositoryEdge { - node: Repository - cursor: String -} + versions(after: String, first: Int, before: String, last: Int, chartId: ID, terraformId: ID): VersionConnection -type IncidentChange { - key: String! - prev: String - next: String -} + account: Account -type KeyBackupEdge { - node: KeyBackup - cursor: String -} + invite(id: String!): Invite -type OidcLoginEdge { - node: OidcLogin - cursor: String -} + invites(after: String, first: Int, before: String, last: Int): InviteConnection -type DnsDomainEdge { - node: DnsDomain - cursor: String -} + groups(after: String, first: Int, before: String, last: Int, q: String): GroupConnection -input ChartName { - repo: String - chart: String -} + groupMembers(after: String, first: Int, before: String, last: Int, groupId: ID!): GroupMemberConnection -type MetricValue { - time: DateTime - value: Int -} + role(id: ID!): Role -type InstallationEdge { - node: Installation - cursor: String -} + roles(after: String, first: Int, before: String, last: Int, q: String, userId: ID): RoleConnection -type OidcStepResponse { - repository: Repository - login: LoginRequest - consent: ConsentRequest -} + integrationWebhooks(after: String, first: Int, before: String, last: Int): IntegrationWebhookConnection -enum ActionItemType { - PULL - ISSUE - BLOG -} + integrationWebhook(id: ID!): IntegrationWebhook -enum ImageGrade { - A - B - C - D - F -} + oauthIntegrations: [OauthIntegration] -type StackRecipe { - id: ID! - recipe: Recipe! - insertedAt: DateTime - updatedAt: DateTime -} + incidents( + after: String, first: Int, before: String, last: Int, repositoryId: ID, supports: Boolean, q: String, sort: IncidentSort, order: Order, filters: [IncidentFilter] + ): IncidentConnection -enum ArtifactType { - CLI - MOBILE - DESKTOP -} + incident(id: ID!): Incident -enum NotificationType { - MESSAGE - INCIDENT_UPDATE - MENTION - LOCKED - PENDING -} + notifications(after: String, first: Int, before: String, last: Int, incidentId: ID, cli: Boolean): NotificationConnection -enum OnboardingState { - NEW - ONBOARDED - INSTALLED - ACTIVE -} + audits(after: String, first: Int, before: String, last: Int): AuditConnection -type ClusterEdge { - node: Cluster - cursor: String -} + auditMetrics: [GeoMetric] -type PaymentMethodEdge { - node: PaymentMethod - cursor: String -} + upgradeQueues: [UpgradeQueue] -input DomainMappingInput { - id: ID - domain: String - enableSso: Boolean -} + deferredUpdates( + after: String, first: Int, before: String, last: Int, chartInstallationId: ID, terraformInstallationId: ID + ): DeferredUpdateConnection -type FileContent { - path: String! - content: String! -} + upgradeQueue(id: ID): UpgradeQueue -type LoginRequest { - requestedScope: [String] - subject: String -} + rollouts(after: String, first: Int, before: String, last: Int, repositoryId: ID!): RolloutConnection -type Rollout { - id: ID! - status: RolloutStatus! - heartbeat: DateTime - cursor: ID - count: Int - event: String - repository: Repository - insertedAt: DateTime - updatedAt: DateTime -} + oauthLogin(challenge: String!): Repository -type Account { - id: ID! - name: String - billingCustomerId: String - workosConnectionId: String - clusterCount: String - userCount: String - delinquentAt: DateTime - grandfatheredUntil: DateTime - billingAddress: Address - trialed: Boolean - icon: String - paymentMethods(after: String, first: Int, before: String, last: Int): PaymentMethodConnection - rootUser: User - domainMappings: [DomainMapping] - subscription: PlatformSubscription - backgroundColor: String - availableFeatures: PlanFeatures - insertedAt: DateTime - updatedAt: DateTime -} + oauthConsent(challenge: String!): Repository -type SetupIntent { - id: String - clientSecret: String - nextAction: NextAction - paymentMethodTypes: [String] - status: String -} + oidcLogin(challenge: String!): OidcStepResponse -input TestAttributes { - name: String - status: TestStatus - promoteTag: String - tags: [String] - steps: [TestStepAttributes] -} + oidcConsent(challenge: String!): OidcStepResponse -input ContextAttributes { - configuration: Map! - buckets: [String] - domains: [String] -} + oauthUrls(host: String): [OauthInfo] -input PostmortemAttributes { - content: String! - actionItems: [ActionItemAttributes] -} + oidcLogins(after: String, first: Int, before: String, last: Int): OidcLoginConnection -input AccountAttributes { - name: String - icon: UploadOrUrl - domainMappings: [DomainMappingInput] - billingAddress: AddressAttributes -} + loginMetrics: [GeoMetric] -input IntegrationWebhookAttributes { - name: String! - url: String! - actions: [String] -} + dnsDomain(id: ID!): DnsDomain -input OauthAttributes { - service: OauthService - code: String - redirectUri: String -} + dnsDomains(after: String, first: Int, before: String, last: Int, q: String): DnsDomainConnection -input TerraformAttributes { - name: String - description: String - package: UploadOrUrl - dependencies: Yaml - version: String -} + dnsRecords(after: String, first: Int, before: String, last: Int, domainId: ID, cluster: String, provider: Provider): DnsRecordConnection -input AddressAttributes { - name: String - line1: String! - line2: String - city: String! - state: String - country: String! - zip: String! -} + shell: CloudShell -"attributes of a path update" -input UpgradePathAttributes { - "path the upgrade will occur on, formatted like .some.key[0].here" - path: String! + shellConfiguration: ShellConfiguration - "the stringified value that will be applied on this path" - value: String! + shellApplications: [ApplicationInformation] - "the ultimate type of the value" - type: ValueType! -} + scmAuthorization: [AuthorizationUrl] -input VersionAttributes { - tags: [VersionTagAttributes] -} + scmToken(provider: ScmProvider!, code: String!): String -input DockerRepositoryAttributes { - public: Boolean! -} + demoProject(id: ID): DemoProject -input RecipeAttributes { - name: String! - description: String - provider: Provider - tests: [RecipeTestAttributes] - sections: [RecipeSectionAttributes] - dependencies: [RecipeReference] - oidcSettings: OidcSettingsAttributes - private: Boolean - primary: Boolean - restricted: Boolean -} + platformMetrics: PlatformMetrics -input StackCollectionAttributes { - provider: Provider! - bundles: [RecipeReference] -} + terraformProviders: [Provider] -type PlanFeatures { - vpn: Boolean - userManagement: Boolean - audit: Boolean - databaseManagement: Boolean - cd: Boolean -} + terraformProvider(name: Provider!, vsn: String): TerraformProvider -type PlatformSubscriptionLineItems { - dimension: LineItemDimension! - quantity: Int! - externalId: String -} + tests(after: String, first: Int, before: String, last: Int, versionId: ID, repositoryId: ID): TestConnection -type SubscriptionLineItems { - items: [Limit] -} + test(id: ID!): Test -input LimitAttributes { - dimension: String! - quantity: Int! -} + testLogs(id: ID!, step: ID!): String -input SubscriptionLineItemAttributes { - items: [LimitAttributes] -} + chat(history: [ChatMessageAttributes]): ChatMessage -input ChartAttributes { - tags: [VersionTagAttributes] -} + helpQuestion(prompt: String!): String -"The release status of a repository, defaults to ALPHA, GA if it is ready for general consumption" -enum ReleaseStatus { - GA - BETA - ALPHA -} + "Get a cluster by its ID." + cluster( + "The ID of the cluster." + id: ID! + ): Cluster -input PlanFeatureAttributes { - name: String! - description: String! -} + "Get a list of clusters owned by the current account." + clusters(after: String, first: Int, before: String, last: Int): ClusterConnection -input ResetTokenAttributes { - type: ResetTokenType! - email: String -} + consoleInstance(id: ID!): ConsoleInstance -type Metric { - name: String! - tags: [MetricTag] - values: [MetricValue] -} + consoleInstances(after: String, first: Int, before: String, last: Int): ConsoleInstanceConnection -input GcpShellCredentialsAttributes { - applicationCredentials: String! -} + configuration: PluralConfiguration -input DnsAccessPolicyAttributes { - id: ID - bindings: [BindingAttributes] + tags(after: String, first: Int, before: String, last: Int, id: ID, type: TagGroup!, q: String): GroupedTagConnection } -input VersionSpec { - repository: String - chart: String - terraform: String - version: String -} +type RootMutationType { + login(email: String!, password: String!, deviceToken: String): User -input RecipeConditionAttributes { - field: String! - value: String - operation: Operation! -} + deviceLogin: DeviceLogin -input TestStepAttributes { - id: ID - name: String - description: String - status: TestStatus - logs: UploadOrUrl -} + passwordlessLogin(token: String!): User -input EntityAttributes { - type: MessageEntityType! - text: String - userId: ID - startIndex: Int - endIndex: Int -} + loginToken(token: String!, deviceToken: String): User -input FileAttributes { - blob: UploadOrUrl -} + externalToken: String -input InviteAttributes { - email: String - admin: Boolean - oidcProviderId: ID - serviceAccountId: ID - inviteGroups: [BindingAttributes] -} + createResetToken(attributes: ResetTokenAttributes!): Boolean -input ServiceAccountAttributes { - name: String - email: String - impersonationPolicy: ImpersonationPolicyAttributes -} + realizeResetToken(id: ID!, attributes: ResetTokenRealization!): Boolean -input BindingAttributes { - id: ID - userId: ID - groupId: ID -} + createToken: PersistedToken -input MeetingAttributes { - topic: String! - incidentId: ID -} + deleteToken(id: ID!): PersistedToken -input RecipeItemAttributes { - name: String! - type: RecipeItemType! - configuration: [RecipeConfigurationAttributes] -} + signup(inviteId: String, attributes: UserAttributes!, account: AccountAttributes, deviceToken: String): User -input ImpersonationPolicyAttributes { - id: ID - bindings: [ImpersonationPolicyBindingAttributes] -} + updateUser(id: ID, attributes: UserAttributes!): User -enum Provider { - GCP - AWS - AZURE - CUSTOM - KUBERNETES - EQUINIX - KIND - GENERIC - LINODE -} + deleteUser(id: ID!): User -type Publisher { - id: ID - name: String! - description: String - billingAccountId: String - phone: String - address: Address - community: Community - owner: User - avatar: String - backgroundColor: String - repositories: [Repository] - insertedAt: DateTime - updatedAt: DateTime -} + createPublisher(attributes: PublisherAttributes!): Publisher -enum ExternalOidcProvider { - GITHUB_ACTIONS -} + createWebhook(attributes: WebhookAttributes!): Webhook -type IncidentDelta { - delta: Delta - payload: Incident -} + pingWebhook(id: ID!, repo: String!, message: String): WebhookResponse -enum TagGroup { - INTEGRATIONS - REPOSITORIES -} + updatePublisher(attributes: PublisherAttributes!): Publisher -type KeyBackup { - id: ID! - name: String! - repositories: [String!] - digest: String! - value: String! - user: User! - insertedAt: DateTime - updatedAt: DateTime -} + createPublicKey(attributes: PublicKeyAttributes!): PublicKey -type RepositoryConnection { - pageInfo: PageInfo! - edges: [RepositoryEdge] -} + deletePublicKey(id: ID!): PublicKey -type PublicKeyConnection { - pageInfo: PageInfo! - edges: [PublicKeyEdge] -} + deleteEabKey(id: ID, cluster: String, provider: Provider): EabCredential -type RolloutConnection { - pageInfo: PageInfo! - edges: [RolloutEdge] -} + createUserEvent(attributes: UserEventAttributes!): Boolean -type DeferredReason { - message: String - package: String - repository: String -} + destroyCluster(name: String!, provider: Provider!, domain: String!): Boolean -type GroupConnection { - pageInfo: PageInfo! - edges: [GroupEdge] -} + createKeyBackup(attributes: KeyBackupAttributes!): KeyBackup -type RoleConnection { - pageInfo: PageInfo! - edges: [RoleEdge] -} + deleteKeyBackup(name: String!): KeyBackup -type DockerImageConnection { - pageInfo: PageInfo! - edges: [DockerImageEdge] -} + createTrustRelationship(attributes: TrustRelationshipAttributes!): OidcTrustRelationship -type RecipeConfiguration { - type: Datatype - name: String - default: String - documentation: String - placeholder: String - longform: String - optional: Boolean - condition: RecipeCondition - validation: RecipeValidation - functionName: String - args: [String] -} + deleteTrustRelationship(id: ID!): OidcTrustRelationship -type IntegrationConnection { - pageInfo: PageInfo! - edges: [IntegrationEdge] -} + createCard(source: String!, address: AddressAttributes): Account -type RepositorySubscription { - id: ID! - externalId: String - customerId: String - lineItems: SubscriptionLineItems - installation: Installation - plan: Plan - invoices(after: String, first: Int, before: String, last: Int): InvoiceConnection -} + setupIntent(address: AddressAttributes): SetupIntent -type WebhookConnection { - pageInfo: PageInfo! - edges: [WebhookEdge] -} + defaultPaymentMethod(id: String!): Boolean -type ScanViolation { - ruleName: String - description: String - ruleId: String - severity: VulnGrade - category: String - resourceName: String - resourceType: String - line: Int - file: String - insertedAt: DateTime - updatedAt: DateTime -} + deleteCard(id: ID!): Account -type RootSubscriptionType { - incidentDelta(repositoryId: ID, incidentId: ID): IncidentDelta - incidentMessageDelta(incidentId: ID): IncidentMessageDelta - notification: Notification - upgrade(id: ID): Upgrade - upgradeQueueDelta: UpgradeQueueDelta - rolloutDelta(repositoryId: ID!): RolloutDelta - testDelta(repositoryId: ID!): TestDelta - testLogs(testId: ID!): StepLogs -} + deletePaymentMethod(id: ID!): PaymentMethod -type GitConfiguration { - url: String - name: String - root: String - branch: String -} + linkPublisher(token: String!): Publisher -type Integration { - id: ID! - name: String! - sourceUrl: String - description: String - type: String - spec: Map - icon: String - repository: Repository - publisher: Publisher - tags: [Tag] - insertedAt: DateTime - updatedAt: DateTime -} + createPlan(repositoryId: ID!, attributes: PlanAttributes!): Plan -type PlatformSubscription { - id: ID! - externalId: String - lineItems: [PlatformSubscriptionLineItems] - plan: PlatformPlan - trialUntil: DateTime - latestInvoice: Invoice - insertedAt: DateTime - updatedAt: DateTime -} + updatePlanAttributes(attributes: UpdatablePlanAttributes!, id: ID!): Plan -type PaymentMethodConnection { - pageInfo: PageInfo! - edges: [PaymentMethodEdge] -} + createSubscription(installationId: ID!, planId: ID!, attributes: SubscriptionAttributes): RepositorySubscription -input ResetTokenRealization { - password: String -} + updatePlan(planId: ID!, subscriptionId: ID!): RepositorySubscription -type KeyBackupConnection { - pageInfo: PageInfo! - edges: [KeyBackupEdge] -} + updateLineItem(attributes: LimitAttributes!, subscriptionId: ID!): RepositorySubscription -type ClusterConnection { - pageInfo: PageInfo! - edges: [ClusterEdge] -} + createPlatformSubscription(planId: ID!, billingAddress: AddressAttributes, paymentMethod: String): PlatformSubscription -type DnsDomain { - id: ID! - name: String! - accessPolicy: DnsAccessPolicy - creator: User - account: Account - dnsRecords(after: String, first: Int, before: String, last: Int): DnsRecordConnection - insertedAt: DateTime - updatedAt: DateTime -} + beginTrial: PlatformSubscription -type InstallationConnection { - pageInfo: PageInfo! - edges: [InstallationEdge] -} + deletePlatformSubscription: Account -type DeviceLogin { - loginUrl: String! - deviceToken: String! -} + cancelPlatformSubscription: PlatformSubscription -type NetworkConfiguration { - pluralDns: Boolean - subdomain: String -} + updatePlatformPlan(planId: ID!): PlatformSubscription -type DnsDomainConnection { - pageInfo: PageInfo! - edges: [DnsDomainEdge] -} + createRepository(id: ID, attributes: RepositoryAttributes!): Repository -type OidcLoginConnection { - pageInfo: PageInfo! - edges: [OidcLoginEdge] -} + updateRepository(repositoryId: ID, repositoryName: String, attributes: RepositoryAttributes!): Repository -"The version of a package." -type Version { - id: ID! + upsertRepository(attributes: RepositoryAttributes!, name: String!, publisher: String!): Repository - version: String! + deleteRepository(repositoryId: ID!): Repository - readme: String + createInstallation(repositoryId: ID!): Installation - valuesTemplate: String + updateInstallation(id: ID!, attributes: InstallationAttributes!): Installation - "The template engine used to render the valuesTemplate." - templateType: TemplateType + deleteInstallation(id: ID!): Installation - helm: Map + resetInstallations: Int - tags: [VersionTag] + createIntegration(repositoryName: String!, attributes: IntegrationAttributes!): Integration - dependencies: Dependencies + createArtifact(repositoryId: ID, repositoryName: String, attributes: ArtifactAttributes!): Artifact - package: String + createOidcProvider( + "The installation ID" + installationId: ID! - chart: Chart + attributes: OidcAttributes! + ): OidcProvider - terraform: Terraform + updateOidcProvider(installationId: ID!, attributes: OidcAttributes!): OidcProvider - crds: [Crd] + upsertOidcProvider(installationId: ID!, attributes: OidcAttributes!): OidcProvider - scan: PackageScan + acquireLock(repository: String!): ApplyLock - imageDependencies: [ImageDependency] + releaseLock(repository: String!, attributes: LockAttributes!): ApplyLock - insertedAt: DateTime + synced(repository: String!): Boolean - updatedAt: DateTime -} + createRecipe(repositoryName: String, repositoryId: String, attributes: RecipeAttributes!): Recipe -enum ArtifactPlatform { - MAC - WINDOWS - LINUX - ANDROID - FREEBSD - OPENBSD - SOLARIS -} + deleteRecipe(id: ID!): Recipe -type ApplyLock { - id: ID! - lock: String - repository: Repository - owner: User - insertedAt: DateTime - updatedAt: DateTime -} + createStack(attributes: StackAttributes!): Stack -type Webhook { - id: ID - url: String - secret: String - user: User - insertedAt: DateTime - updatedAt: DateTime -} + quickStack(repositoryIds: [ID], provider: Provider!): Stack -"Container for all resources to create an application." -type Repository { - "The application's ID." - id: ID! + deleteStack(name: String!): Stack - "The name of the application." - name: String! + installRecipe(recipeId: ID!, context: Map!): [Installation] - "The description of the application." - description: String + installStack(name: String!, provider: Provider!): [Recipe] - "The documentation of the application." - documentation: String + updateChart(id: ID!, attributes: ChartAttributes!): Chart - "The category of the application." - category: Category + createCrd(chartId: ID, chartName: ChartName, attributes: CrdAttributes!): Crd - "release status of the repository" - releaseStatus: ReleaseStatus + installChart(installationId: ID!, attributes: ChartInstallationAttributes!): ChartInstallation - "Whether the application is private." - private: Boolean + updateChartInstallation(chartInstallationId: ID!, attributes: ChartInstallationAttributes!): ChartInstallation - "Whether the application is verified." - verified: Boolean + deleteChartInstallation(id: ID!): ChartInstallation - "Whether the application is trending." - trending: Boolean + createTerraform(repositoryId: ID!, attributes: TerraformAttributes!): Terraform - "Notes about the application rendered after deploying and displayed to the user." - notes: String + updateTerraform(id: ID!, attributes: TerraformAttributes!): Terraform - "The default tag to deploy." - defaultTag: String + deleteTerraform(id: ID!): Terraform - "The git URL of the application." - gitUrl: String + uploadTerraform(repositoryName: String!, name: String!, attributes: TerraformAttributes!): Terraform - "The main branch of the application." - mainBranch: String + installTerraform(installationId: ID!, attributes: TerraformInstallationAttributes!): TerraformInstallation - "The README of the application." - readme: String + uninstallTerraform(id: ID!): TerraformInstallation - "The license of the application." - license: License + release(repositoryId: ID, repositoryName: String, tags: [String!]): Boolean - "The community links of the application." - community: Community + updateVersion(id: ID, spec: VersionSpec, attributes: VersionAttributes!): Version - "The homepage of the application." - homepage: String + installVersion(type: DependencyType!, vsn: String!, package: String!, repository: String!): Boolean - "The application publisher." - publisher: Publisher + createServiceAccount(attributes: ServiceAccountAttributes!): User - "The available plans for the application." - plans: [Plan] + updateServiceAccount(id: ID!, attributes: ServiceAccountAttributes!): User - "The tags of the application." - tags: [Tag] + impersonateServiceAccount(id: ID, email: String): User - "The artifacts of the application." - artifacts: [Artifact] + updateAccount(attributes: AccountAttributes!): Account - "The recipes used to install the application." - recipes: [Recipe] + createInvite(attributes: InviteAttributes!): Invite - "The OAuth settings for the application." - oauthSettings: OauthSettings + deleteInvite(id: ID, secureId: String): Invite - icon: String + realizeInvite(id: String!): User - darkIcon: String + createGroup(attributes: GroupAttributes!): Group - "The external contributors to this repository" - contributors: [Contributor] + deleteGroup(groupId: ID!): Group - "The installation of the application by a user." - installation: Installation + updateGroup(groupId: ID!, attributes: GroupAttributes!): Group - "version tags that can be followed to control upgrade flow" - upgradeChannels: [String] + createGroupMember(groupId: ID!, userId: ID!): GroupMember - "If the application can be edited by the current user." - editable: Boolean + deleteGroupMember(groupId: ID!, userId: ID!): GroupMember - "A map of secrets of the application." - secrets: Map + createRole(attributes: RoleAttributes!): Role - "The application's public key." - publicKey: String + updateRole(id: ID!, attributes: RoleAttributes!): Role - "The documentation of the application." - docs: [FileContent] + deleteRole(id: ID!): Role - insertedAt: DateTime + createIntegrationWebhook(attributes: IntegrationWebhookAttributes!): IntegrationWebhook - updatedAt: DateTime -} + updateIntegrationWebhook(id: ID!, attributes: IntegrationWebhookAttributes!): IntegrationWebhook -"A dependncy reference between clusters" -type ClusterDependency { - id: ID! + deleteIntegrationWebhook(id: ID!): IntegrationWebhook - "the cluster holding this dependency" - cluster: Cluster + createOauthIntegration(attributes: OauthAttributes!): OauthIntegration - "the source cluster of this dependency" - dependency: Cluster + createZoom(attributes: MeetingAttributes!): ZoomMeeting - insertedAt: DateTime + createIncident(repositoryId: ID, repository: String, attributes: IncidentAttributes!): Incident - updatedAt: DateTime -} + updateIncident(id: ID!, attributes: IncidentAttributes!): Incident -type WebhookLog { - id: ID! - state: WebhookLogState! - status: Int - response: String - payload: Map - webhook: IntegrationWebhook - insertedAt: DateTime - updatedAt: DateTime -} + deleteIncident(id: ID!): Incident -type ZoomMeeting { - joinUrl: String! - password: String -} + acceptIncident(id: ID!): Incident -type PolicyBinding { - id: ID! - user: User - group: Group - insertedAt: DateTime - updatedAt: DateTime -} + completeIncident(id: ID!, postmortem: PostmortemAttributes!): Incident -type ConsoleInstanceEdge { - node: ConsoleInstance - cursor: String -} + followIncident(id: ID!, attributes: FollowerAttributes!): Follower -enum ConsoleSize { - SMALL - MEDIUM - LARGE -} + unfollowIncident(id: ID!): Follower -type UpgradeQueue { - id: ID! - acked: ID - name: String - domain: String - git: String - provider: Provider - pingedAt: DateTime - user: User! - upgrades(after: String, first: Int, before: String, last: Int): UpgradeConnection - insertedAt: DateTime - updatedAt: DateTime -} + createMessage(incidentId: ID!, attributes: IncidentMessageAttributes!): IncidentMessage -enum RecipeItemType { - HELM - TERRAFORM -} + updateMessage(id: ID!, attributes: IncidentMessageAttributes!): IncidentMessage -type WebhookLogEdge { - node: WebhookLog - cursor: String -} + deleteMessage(id: ID!): IncidentMessage -type AuditEdge { - node: Audit - cursor: String -} + createReaction(messageId: ID!, name: String!): IncidentMessage -type ConsoleInstance { - id: ID! + deleteReaction(messageId: ID!, name: String!): IncidentMessage - "the name of this instance (globally unique)" - name: String! + readNotifications(incidentId: ID): Int - "the subdomain this instance lives under" - subdomain: String! + createQueue(attributes: UpgradeQueueAttributes!): UpgradeQueue - "full console url of this instance" - url: String! + createUpgrade(repositoryName: String, repositoryId: ID, queue: String!, attributes: UpgradeAttributes!): Upgrade - "the cloud provider hosting this instance" - cloud: CloudProvider! + acceptLogin(challenge: String!): OauthResponse - "the heuristic size of this instance" - size: ConsoleSize! + oauthConsent(challenge: String!, scopes: [String]): OauthResponse - "the region this instance is hosted in" - region: String! + oauthCallback(provider: OauthProvider!, host: String, code: String!, deviceToken: String): User - "the provisioning status of this instance, liveness is fetched through the console field" - status: ConsoleInstanceStatus! + ssoCallback(code: String!, deviceToken: String): User - "the time this instance was deleted on" - deletedAt: DateTime + updateDockerRepository(id: ID!, attributes: DockerRepositoryAttributes!): DockerRepository - console: Cluster + createDomain(attributes: DnsDomainAttributes!): DnsDomain - owner: User + updateDomain(id: ID!, attributes: DnsDomainAttributes!): DnsDomain - insertedAt: DateTime + deleteDomain(id: ID!): DnsDomain - updatedAt: DateTime -} + provisionDomain(name: String!): DnsDomain -type InvoiceEdge { - node: Invoice - cursor: String -} + createDnsRecord(attributes: DnsRecordAttributes!, cluster: String!, provider: Provider!): DnsRecord -enum DependencyType { - TERRAFORM - HELM -} + deleteDnsRecord(name: String!, type: DnsRecordType!): DnsRecord -enum ValidationType { - REGEX -} + createShell(attributes: CloudShellAttributes!): CloudShell -type License { - name: String - url: String -} + setupShell: CloudShell -type Invoice { - number: String! - amountDue: Int! - amountPaid: Int! - currency: String! - status: String - hostedInvoiceUrl: String - paymentIntent: PaymentIntent - createdAt: DateTime - lines: [InvoiceItem] -} + updateShell(attributes: CloudShellAttributes!): CloudShell -enum ResetTokenType { - PASSWORD - EMAIL -} + updateShellConfiguration(context: Map!): Boolean -type DnsRecordEdge { - node: DnsRecord - cursor: String -} + installBundle(context: ContextAttributes!, oidc: Boolean!, repo: String!, name: String!): [Installation] -type Invite { - id: ID! - admin: Boolean - secureId: String - existing: Boolean! - email: String - expiresAt: DateTime - account: Account - user: User - groups: [Group] - insertedAt: DateTime - updatedAt: DateTime -} + installStackShell(name: String!, oidc: Boolean!, context: ContextAttributes!): [Recipe] -enum TestType { - GIT -} + rebootShell: CloudShell -type StackEdge { - node: Stack - cursor: String -} + deleteShell: CloudShell -type UpgradeEdge { - node: Upgrade - cursor: String -} + createDemoProject: DemoProject -enum DemoProjectState { - CREATED - READY - ENABLED -} + transferDemoProject(organizationId: String!): DemoProject -type Recipe { - id: ID! - name: String! - description: String - provider: Provider - oidcSettings: OidcSettings - private: Boolean - restricted: Boolean - primary: Boolean - oidcEnabled: Boolean - tests: [RecipeTest] - repository: Repository - recipeSections: [RecipeSection] - recipeDependencies: [Recipe] - insertedAt: DateTime - updatedAt: DateTime -} + deleteDemoProject: DemoProject -type FollowerEdge { - node: Follower - cursor: String -} + stopShell: Boolean -type File { - id: ID! - mediaType: MediaType - filename: String - filesize: Int - width: Int - height: Int - contentType: String - blob: String! - message: IncidentMessage! - insertedAt: DateTime - updatedAt: DateTime -} + restartShell: Boolean -type Role { - id: ID! - name: String! - description: String - repositories: [String] - permissions: [Permission] - roleBindings: [RoleBinding] - account: Account - insertedAt: DateTime - updatedAt: DateTime -} + unlockRepository(name: String!): Int -enum OnboardingChecklistState { - NEW - CONFIGURED - CONSOLE_INSTALLED - FINISHED -} + createTest(repositoryId: ID, name: String, attributes: TestAttributes!): Test -type TestArgument { - name: String! - repo: String! - key: String! -} + updateTest(id: ID!, attributes: TestAttributes!): Test -type Artifact { - id: ID - name: String - readme: String - type: ArtifactType - platform: ArtifactPlatform - filesize: Int - sha: String - arch: String - blob: String - insertedAt: DateTime - updatedAt: DateTime -} + updateStep(id: ID!, attributes: TestStepAttributes!): TestStep -type Test { - id: ID! - name: String - status: TestStatus! - sourceTag: String! - promoteTag: String! - tags: [String!] - steps: [TestStep] - creator: User - repository: Repository - insertedAt: DateTime - updatedAt: DateTime + publishLogs(id: ID!, logs: String!): TestStep + + "Create a new cluster." + createCluster( + "The input attributes for the cluster that will be created." + attributes: ClusterAttributes! + ): Cluster + + "adds a dependency for this cluster to gate future upgrades" + createClusterDependency(sourceId: ID!, destId: ID!): ClusterDependency + + "deletes a dependency for this cluster and potentially disables promotions entirely" + deleteClusterDependency(sourceId: ID!, destId: ID!): ClusterDependency + + "moves up the upgrade waterline for a user" + promote: User + + "transfers ownership of a cluster to a service account" + transferOwnership(name: String!, email: String!): Cluster + + "Delete a cluster." + deleteCluster( + "The name of the cluster." + name: String! + + "The cluster's cloud provider." + provider: Provider! + ): Cluster + + createConsoleInstance(attributes: ConsoleInstanceAttributes!): ConsoleInstance + + updateConsoleInstance(id: ID!, attributes: ConsoleInstanceUpdateAttributes!): ConsoleInstance + + deleteConsoleInstance(id: ID!): ConsoleInstance } -type ConsentRequest { - requestedScope: [String] - skip: Boolean +type RootSubscriptionType { + incidentDelta(repositoryId: ID, incidentId: ID): IncidentDelta + incidentMessageDelta(incidentId: ID): IncidentMessageDelta + notification: Notification + upgrade(id: ID): Upgrade + upgradeQueueDelta: UpgradeQueueDelta + rolloutDelta(repositoryId: ID!): RolloutDelta + testDelta(repositoryId: ID!): TestDelta + testLogs(testId: ID!): StepLogs } -type RecipeTest { - type: TestType! - name: String! - message: String - args: [TestArgument] +enum CloudProvider { + AWS } enum ConsoleInstanceStatus { @@ -1376,243 +566,105 @@ enum ConsoleInstanceStatus { DATABASE_DELETED } -input IncidentAttributes { - title: String - severity: Int - description: String - status: IncidentStatus - tags: [TagAttributes] - clusterInformation: ClusterInformationAttributes +enum ConsoleSize { + SMALL + MEDIUM + LARGE } -type NotificationPreferences { - message: Boolean - incidentUpdate: Boolean - mention: Boolean -} +input ConsoleInstanceAttributes { + "the name of this instance (globally unique)" + name: String! -type Cvss { - attackVector: VulnVector - attackComplexity: VulnGrade - privilegesRequired: VulnGrade - userInteraction: VulnRequirement - confidentiality: VulnGrade - integrity: VulnGrade - availability: VulnGrade -} + "a heuristic size of this instance" + size: ConsoleSize! -input ChartInstallationAttributes { - chartId: ID - versionId: ID -} + "the cloud provider to deploy to" + cloud: CloudProvider! -input ConsoleConfigurationUpdateAttributes { - encryptionKey: String + "the region to deploy to (provider specific)" + region: String! } -enum TestStatus { - QUEUED - RUNNING - SUCCEEDED - FAILED +input ConsoleInstanceUpdateAttributes { + size: ConsoleSize + configuration: ConsoleConfigurationUpdateAttributes } -input ActionItemAttributes { - type: ActionItemType! - link: String! +input ConsoleConfigurationUpdateAttributes { + encryptionKey: String } -input TerraformInstallationAttributes { - terraformId: ID - versionId: ID -} +type ConsoleInstance { + id: ID! -input ArtifactAttributes { + "the name of this instance (globally unique)" name: String! - readme: String! - type: String! - platform: String! - arch: String - blob: UploadOrUrl -} -input AzureShellCredentialsAttributes { - tenantId: String! - clientId: String! - clientSecret: String! - storageAccount: String! - subscriptionId: String! -} + "the subdomain this instance lives under" + subdomain: String! -type ApplicationSpec { - description: String - version: String - links: [AppLink] -} + "full console url of this instance" + url: String! -"Input for the application's OAuth settings." -input OauthSettingsAttributes { - "The URI format for the OAuth provider." - uriFormat: String! + "the cloud provider hosting this instance" + cloud: CloudProvider! - "The authentication method for the OAuth provider." - authMethod: OidcAuthMethod! -} + "the heuristic size of this instance" + size: ConsoleSize! -type OauthSettings { - uriFormat: String! - authMethod: OidcAuthMethod! -} + "the region this instance is hosted in" + region: String! -type PlanLineItems { - included: [Limit] - items: [LineItem] -} + "the provisioning status of this instance, liveness is fetched through the console field" + status: ConsoleInstanceStatus! -input ScmAttributes { - provider: ScmProvider - token: String - name: String - org: String - gitUrl: String - publicKey: String - privateKey: String -} + "the time this instance was deleted on" + deletedAt: DateTime -input WorkspaceAttributes { - cluster: String! - bucketPrefix: String! - region: String! - project: String - subdomain: String! -} + console: Cluster -input AwsShellCredentialsAttributes { - accessKeyId: String! - secretAccessKey: String! -} + owner: User -type ShellStatus { - ready: Boolean - initialized: Boolean - containersReady: Boolean - podScheduled: Boolean -} + insertedAt: DateTime -input ClusterInformationAttributes { - gitCommit: String - version: String - platform: String + updatedAt: DateTime } -input IncidentMessageAttributes { - text: String! - file: FileAttributes - entities: [EntityAttributes] +type ConsoleInstanceConnection { + pageInfo: PageInfo! + edges: [ConsoleInstanceEdge] } -input ResourceDefinitionAttributes { - name: String! - spec: [SpecificationAttributes] +"Possible cluster sources." +enum Source { + DEFAULT + SHELL + DEMO } -input LineItemAttributes { +"Input for creating or updating a cluster." +input ClusterAttributes { + "The name of the cluster." name: String! - dimension: String! - cost: Int! - period: String! - type: PlanType -} - -enum UserEventStatus { - OK - ERROR -} -input UserAttributes { - name: String - email: String - password: String - avatar: UploadOrUrl - onboarding: OnboardingState - onboardingChecklist: OnboardingChecklistAttributes - loginMethod: LoginMethod - roles: RolesAttributes - confirm: String - groupIds: [ID!] -} - -input PublisherAttributes { - name: String - description: String - avatar: UploadOrUrl - phone: String - address: AddressAttributes - community: CommunityAttributes -} - -input ChatMessageAttributes { - role: String! - content: String! - name: String -} - -type GeoMetric { - country: String - count: Int -} - -input TrustRelationshipAttributes { - issuer: String! - trust: String! - scopes: [String!] -} - -input ShellCredentialsAttributes { - aws: AwsShellCredentialsAttributes - gcp: GcpShellCredentialsAttributes - azure: AzureShellCredentialsAttributes -} - -"the attributes of the config upgrade" -input UpgradeConfigAttributes { - "paths for a configuration change" - paths: [UpgradePathAttributes] -} - -input SpecificationAttributes { - name: String! - type: SpecDatatype! - inner: SpecDatatype - spec: [SpecificationAttributes] - required: Boolean -} + "The cluster's cloud provider." + provider: Provider! -enum IncidentStatus { - OPEN - IN_PROGRESS - RESOLVED - COMPLETE -} + "whether this is a legacy oss cluster" + legacy: Boolean -input LockAttributes { - lock: String! -} + "The source of the cluster." + source: Source -enum OauthProvider { - GITHUB - GOOGLE - GITLAB -} + "The git repository URL for the cluster." + gitUrl: String -input IncidentFilter { - type: IncidentFilterType! - value: String - statuses: [IncidentStatus] -} + "The URL of the console running on the cluster." + consoleUrl: String -type ScanError { - message: String + "The domain name used for applications deployed on the cluster." + domain: String } "A Kubernetes cluster that can be used to deploy applications on with Plural." @@ -1676,1271 +728,2014 @@ type Cluster { updatedAt: DateTime } -type GroupMember { +"The pending upgrades for a repository" +type UpgradeInfo { + installation: Installation + count: Int +} + +"A dependncy reference between clusters" +type ClusterDependency { id: ID! - user: User - group: Group + + "the cluster holding this dependency" + cluster: Cluster + + "the source cluster of this dependency" + dependency: Cluster + insertedAt: DateTime + updatedAt: DateTime } -enum VulnVector { - NETWORK - ADJACENT - LOCAL - PHYSICAL +"A record of the utilization in a given cluster" +type ClusterUsageHistory { + cpu: Int + memory: Int + services: Int + cluster: Cluster + account: Account + insertedAt: DateTime + updatedAt: DateTime } -enum Delta { - CREATE - UPDATE - DELETE +type ClusterConnection { + pageInfo: PageInfo! + edges: [ClusterEdge] } -type PlanMetadata { - freeform: Map - features: [PlanFeature] +input ChatMessageAttributes { + role: String! + content: String! + name: String } -type IncidentMessageDelta { - delta: Delta - payload: IncidentMessage +type ChatMessage { + role: String! + content: String! + name: String } -type DnsRecordConnection { - pageInfo: PageInfo! - edges: [DnsRecordEdge] +enum TestStatus { + QUEUED + RUNNING + SUCCEEDED + FAILED } -type Reaction { - name: String! - creator: User! - message: IncidentMessage! - insertedAt: DateTime - updatedAt: DateTime +input TestAttributes { + name: String + status: TestStatus + promoteTag: String + tags: [String] + steps: [TestStepAttributes] } -type ShellConfiguration { - workspace: ShellWorkspace - git: GitConfiguration - contextConfiguration: Map - buckets: [String] - domains: [String] +input TestStepAttributes { + id: ID + name: String + description: String + status: TestStatus + logs: UploadOrUrl } -type ClusterInformation { +type Test { id: ID! - version: String - gitCommit: String - platform: String + name: String + status: TestStatus! + sourceTag: String! + promoteTag: String! + tags: [String!] + steps: [TestStep] + creator: User + repository: Repository insertedAt: DateTime updatedAt: DateTime } -type Notification { +type TestStep { id: ID! - type: NotificationType! - msg: String - user: User! - actor: User! - incident: Incident - message: IncidentMessage - repository: Repository + status: TestStatus! + name: String! + description: String! + hasLogs: Boolean insertedAt: DateTime updatedAt: DateTime } -type InvoiceConnection { - pageInfo: PageInfo! - edges: [InvoiceEdge] +type StepLogs { + step: TestStep + logs: [String] } -type FollowerConnection { +type TestConnection { pageInfo: PageInfo! - edges: [FollowerEdge] + edges: [TestEdge] } -type PlatformPlan { - id: ID! - name: String! - visible: Boolean! - cost: Int! - period: PaymentPeriod! - enterprise: Boolean - trial: Boolean - features: PlanFeatures - lineItems: [PlatformPlanItem] - insertedAt: DateTime - updatedAt: DateTime +type TestDelta { + delta: Delta + payload: Test } -type RootMutationType { - login(email: String!, password: String!, deviceToken: String): User - - deviceLogin: DeviceLogin +type TerraformProvider { + name: Provider + content: String +} - passwordlessLogin(token: String!): User +enum DemoProjectState { + CREATED + READY + ENABLED +} - loginToken(token: String!, deviceToken: String): User +input CloudShellAttributes { + provider: Provider + workspace: WorkspaceAttributes! + credentials: ShellCredentialsAttributes! + scm: ScmAttributes + demoId: ID +} - externalToken: String +enum ScmProvider { + GITHUB + GITLAB + MANUAL + DEMO +} - createResetToken(attributes: ResetTokenAttributes!): Boolean +input ScmAttributes { + provider: ScmProvider + token: String + name: String + org: String + gitUrl: String + publicKey: String + privateKey: String +} - realizeResetToken(id: ID!, attributes: ResetTokenRealization!): Boolean +input WorkspaceAttributes { + cluster: String! + bucketPrefix: String! + region: String! + project: String + subdomain: String! +} - createToken: PersistedToken +input ShellCredentialsAttributes { + aws: AwsShellCredentialsAttributes + gcp: GcpShellCredentialsAttributes + azure: AzureShellCredentialsAttributes +} - deleteToken(id: ID!): PersistedToken +input AwsShellCredentialsAttributes { + accessKeyId: String! + secretAccessKey: String! +} - signup(inviteId: String, attributes: UserAttributes!, account: AccountAttributes, deviceToken: String): User +input GcpShellCredentialsAttributes { + applicationCredentials: String! +} - updateUser(id: ID, attributes: UserAttributes!): User +input AzureShellCredentialsAttributes { + tenantId: String! + clientId: String! + clientSecret: String! + storageAccount: String! + subscriptionId: String! +} - deleteUser(id: ID!): User +input ContextAttributes { + configuration: Map! + buckets: [String] + domains: [String] +} - createPublisher(attributes: PublisherAttributes!): Publisher +type CloudShell { + id: ID! + provider: Provider! + gitUrl: String! + aesKey: String! + missing: [String] + cluster: String! + subdomain: String! + alive: Boolean! + status: ShellStatus + region: String! + insertedAt: DateTime + updatedAt: DateTime +} - createWebhook(attributes: WebhookAttributes!): Webhook +type ShellConfiguration { + workspace: ShellWorkspace + git: GitConfiguration + contextConfiguration: Map + buckets: [String] + domains: [String] +} - pingWebhook(id: ID!, repo: String!, message: String): WebhookResponse +type ShellWorkspace { + network: NetworkConfiguration + bucketPrefix: String + cluster: String + region: String +} - updatePublisher(attributes: PublisherAttributes!): Publisher +type NetworkConfiguration { + pluralDns: Boolean + subdomain: String +} - createPublicKey(attributes: PublicKeyAttributes!): PublicKey +type GitConfiguration { + url: String + name: String + root: String + branch: String +} - deletePublicKey(id: ID!): PublicKey +type ShellStatus { + ready: Boolean + initialized: Boolean + containersReady: Boolean + podScheduled: Boolean +} - deleteEabKey(id: ID, cluster: String, provider: Provider): EabCredential +type AuthorizationUrl { + provider: ScmProvider! + url: String! +} - createUserEvent(attributes: UserEventAttributes!): Boolean +type DemoProject { + id: ID! + projectId: String! + credentials: String + ready: Boolean + state: DemoProjectState + insertedAt: DateTime + updatedAt: DateTime +} - destroyCluster(name: String!, provider: Provider!, domain: String!): Boolean +type ApplicationInformation { + name: String! + ready: Boolean + componentsReady: String + components: [ApplicationComponent] + spec: ApplicationSpec +} - createKeyBackup(attributes: KeyBackupAttributes!): KeyBackup +type ApplicationSpec { + description: String + version: String + links: [AppLink] +} - deleteKeyBackup(name: String!): KeyBackup +type AppLink { + url: String + description: String +} - createTrustRelationship(attributes: TrustRelationshipAttributes!): OidcTrustRelationship +type ApplicationComponent { + group: String + name: String + kind: String + status: String +} - deleteTrustRelationship(id: ID!): OidcTrustRelationship +enum DnsRecordType { + A + AAAA + TXT + CNAME +} - createCard(source: String!, address: AddressAttributes): Account +input DnsDomainAttributes { + name: String + accessPolicy: DnsAccessPolicyAttributes +} - setupIntent(address: AddressAttributes): SetupIntent +input DnsAccessPolicyAttributes { + id: ID + bindings: [BindingAttributes] +} - defaultPaymentMethod(id: String!): Boolean +input DnsRecordAttributes { + name: String! + type: DnsRecordType! + records: [String] +} - deleteCard(id: ID!): Account +type DnsDomain { + id: ID! + name: String! + accessPolicy: DnsAccessPolicy + creator: User + account: Account + dnsRecords(after: String, first: Int, before: String, last: Int): DnsRecordConnection + insertedAt: DateTime + updatedAt: DateTime +} - deletePaymentMethod(id: ID!): PaymentMethod +type DnsRecord { + id: ID! + type: DnsRecordType! + name: String! + cluster: String! + provider: Provider! + records: [String] + creator: User + domain: DnsDomain + insertedAt: DateTime + updatedAt: DateTime +} - linkPublisher(token: String!): Publisher +type DnsAccessPolicy { + id: ID! + bindings: [PolicyBinding] + insertedAt: DateTime + updatedAt: DateTime +} - createPlan(repositoryId: ID!, attributes: PlanAttributes!): Plan - - updatePlanAttributes(attributes: UpdatablePlanAttributes!, id: ID!): Plan - - createSubscription(installationId: ID!, planId: ID!, attributes: SubscriptionAttributes): RepositorySubscription +type PolicyBinding { + id: ID! + user: User + group: Group + insertedAt: DateTime + updatedAt: DateTime +} - updatePlan(planId: ID!, subscriptionId: ID!): RepositorySubscription +type DnsDomainConnection { + pageInfo: PageInfo! + edges: [DnsDomainEdge] +} - updateLineItem(attributes: LimitAttributes!, subscriptionId: ID!): RepositorySubscription +type DnsRecordConnection { + pageInfo: PageInfo! + edges: [DnsRecordEdge] +} - createPlatformSubscription(planId: ID!, billingAddress: AddressAttributes, paymentMethod: String): PlatformSubscription +enum OauthProvider { + GITHUB + GOOGLE + GITLAB +} - beginTrial: PlatformSubscription +type OauthResponse { + redirectTo: String! +} - deletePlatformSubscription: Account +type OauthInfo { + provider: OauthProvider! + authorizeUrl: String! +} - cancelPlatformSubscription: PlatformSubscription +type OuathConfiguration { + issuer: String + authorizationEndpoint: String + tokenEndpoint: String + jwksUri: String + userinfoEndpoint: String +} - updatePlatformPlan(planId: ID!): PlatformSubscription +type ConsentRequest { + requestedScope: [String] + skip: Boolean +} - createRepository(id: ID, attributes: RepositoryAttributes!): Repository +type LoginRequest { + requestedScope: [String] + subject: String +} - updateRepository(repositoryId: ID, repositoryName: String, attributes: RepositoryAttributes!): Repository +type OidcLogin { + id: ID! + ip: String + country: String + city: String + latitude: String + longitude: String + user: User + owner: User + repository: Repository + insertedAt: DateTime + updatedAt: DateTime +} - upsertRepository(attributes: RepositoryAttributes!, name: String!, publisher: String!): Repository +type OidcStepResponse { + repository: Repository + login: LoginRequest + consent: ConsentRequest +} - deleteRepository(repositoryId: ID!): Repository +type OidcLoginConnection { + pageInfo: PageInfo! + edges: [OidcLoginEdge] +} - createInstallation(repositoryId: ID!): Installation +enum RolloutStatus { + QUEUED + RUNNING + FINISHED +} - updateInstallation(id: ID!, attributes: InstallationAttributes!): Installation +type Rollout { + id: ID! + status: RolloutStatus! + heartbeat: DateTime + cursor: ID + count: Int + event: String + repository: Repository + insertedAt: DateTime + updatedAt: DateTime +} - deleteInstallation(id: ID!): Installation +type RolloutConnection { + pageInfo: PageInfo! + edges: [RolloutEdge] +} - resetInstallations: Int +type RolloutDelta { + delta: Delta + payload: Rollout +} - createIntegration(repositoryName: String!, attributes: IntegrationAttributes!): Integration +enum UpgradeType { + DEPLOY + APPROVAL + BOUNCE + DEDICATED + CONFIG +} - createArtifact(repositoryId: ID, repositoryName: String, attributes: ArtifactAttributes!): Artifact +enum ValueType { + INT + STRING + FLOAT +} - createOidcProvider( - "The installation ID" - installationId: ID! +"The information for this upgrade" +input UpgradeAttributes { + "a simple message to explain this upgrade" + message: String! - attributes: OidcAttributes! - ): OidcProvider + "the type of upgrade" + type: UpgradeType! - updateOidcProvider(installationId: ID!, attributes: OidcAttributes!): OidcProvider + "information for a config upgrade" + config: UpgradeConfigAttributes +} - upsertOidcProvider(installationId: ID!, attributes: OidcAttributes!): OidcProvider +"the attributes of the config upgrade" +input UpgradeConfigAttributes { + "paths for a configuration change" + paths: [UpgradePathAttributes] +} - acquireLock(repository: String!): ApplyLock +"attributes of a path update" +input UpgradePathAttributes { + "path the upgrade will occur on, formatted like .some.key[0].here" + path: String! - releaseLock(repository: String!, attributes: LockAttributes!): ApplyLock + "the stringified value that will be applied on this path" + value: String! - synced(repository: String!): Boolean + "the ultimate type of the value" + type: ValueType! +} - createRecipe(repositoryName: String, repositoryId: String, attributes: RecipeAttributes!): Recipe +input UpgradeQueueAttributes { + name: String! + legacy: Boolean + domain: String + git: String + provider: Provider +} - deleteRecipe(id: ID!): Recipe +type UpgradeQueue { + id: ID! + acked: ID + name: String + domain: String + git: String + provider: Provider + pingedAt: DateTime + user: User! + upgrades(after: String, first: Int, before: String, last: Int): UpgradeConnection + insertedAt: DateTime + updatedAt: DateTime +} - createStack(attributes: StackAttributes!): Stack +type Upgrade { + id: ID! + type: UpgradeType + message: String + config: UpgradeConfig + repository: Repository + insertedAt: DateTime + updatedAt: DateTime +} - quickStack(repositoryIds: [ID], provider: Provider!): Stack +type UpgradeConfig { + paths: [UpgradePath] +} - deleteStack(name: String!): Stack +type UpgradePath { + path: String! + value: String! + type: ValueType! +} - installRecipe(recipeId: ID!, context: Map!): [Installation] +type DeferredUpdate { + id: ID! + dequeueAt: DateTime + attempts: Int + pending: Boolean + messages: [DeferredReason] + chartInstallation: ChartInstallation + terraformInstallation: TerraformInstallation + version: Version + insertedAt: DateTime + updatedAt: DateTime +} - installStack(name: String!, provider: Provider!): [Recipe] +type DeferredReason { + message: String + package: String + repository: String +} - updateChart(id: ID!, attributes: ChartAttributes!): Chart +type UpgradeConnection { + pageInfo: PageInfo! + edges: [UpgradeEdge] +} - createCrd(chartId: ID, chartName: ChartName, attributes: CrdAttributes!): Crd +type DeferredUpdateConnection { + pageInfo: PageInfo! + edges: [DeferredUpdateEdge] +} - installChart(installationId: ID!, attributes: ChartInstallationAttributes!): ChartInstallation +type UpgradeQueueDelta { + delta: Delta + payload: UpgradeQueue +} - updateChartInstallation(chartInstallationId: ID!, attributes: ChartInstallationAttributes!): ChartInstallation +type Audit { + id: ID! + action: String! + ip: String + city: String + country: String + latitude: String + longitude: String + actor: User + group: Group + role: Role + user: User + integrationWebhook: IntegrationWebhook + repository: Repository + version: Version + image: DockerImage + insertedAt: DateTime + updatedAt: DateTime +} - deleteChartInstallation(id: ID!): ChartInstallation +type GeoMetric { + country: String + count: Int +} - createTerraform(repositoryId: ID!, attributes: TerraformAttributes!): Terraform - - updateTerraform(id: ID!, attributes: TerraformAttributes!): Terraform - - deleteTerraform(id: ID!): Terraform - - uploadTerraform(repositoryName: String!, name: String!, attributes: TerraformAttributes!): Terraform - - installTerraform(installationId: ID!, attributes: TerraformInstallationAttributes!): TerraformInstallation - - uninstallTerraform(id: ID!): TerraformInstallation - - release(repositoryId: ID, repositoryName: String, tags: [String!]): Boolean - - updateVersion(id: ID, spec: VersionSpec, attributes: VersionAttributes!): Version - - installVersion(type: DependencyType!, vsn: String!, package: String!, repository: String!): Boolean - - createServiceAccount(attributes: ServiceAccountAttributes!): User - - updateServiceAccount(id: ID!, attributes: ServiceAccountAttributes!): User - - impersonateServiceAccount(id: ID, email: String): User - - updateAccount(attributes: AccountAttributes!): Account - - createInvite(attributes: InviteAttributes!): Invite - - deleteInvite(id: ID, secureId: String): Invite - - realizeInvite(id: String!): User - - createGroup(attributes: GroupAttributes!): Group - - deleteGroup(groupId: ID!): Group - - updateGroup(groupId: ID!, attributes: GroupAttributes!): Group - - createGroupMember(groupId: ID!, userId: ID!): GroupMember - - deleteGroupMember(groupId: ID!, userId: ID!): GroupMember - - createRole(attributes: RoleAttributes!): Role - - updateRole(id: ID!, attributes: RoleAttributes!): Role - - deleteRole(id: ID!): Role - - createIntegrationWebhook(attributes: IntegrationWebhookAttributes!): IntegrationWebhook - - updateIntegrationWebhook(id: ID!, attributes: IntegrationWebhookAttributes!): IntegrationWebhook - - deleteIntegrationWebhook(id: ID!): IntegrationWebhook - - createOauthIntegration(attributes: OauthAttributes!): OauthIntegration - - createZoom(attributes: MeetingAttributes!): ZoomMeeting - - createIncident(repositoryId: ID, repository: String, attributes: IncidentAttributes!): Incident - - updateIncident(id: ID!, attributes: IncidentAttributes!): Incident - - deleteIncident(id: ID!): Incident - - acceptIncident(id: ID!): Incident - - completeIncident(id: ID!, postmortem: PostmortemAttributes!): Incident - - followIncident(id: ID!, attributes: FollowerAttributes!): Follower - - unfollowIncident(id: ID!): Follower - - createMessage(incidentId: ID!, attributes: IncidentMessageAttributes!): IncidentMessage - - updateMessage(id: ID!, attributes: IncidentMessageAttributes!): IncidentMessage - - deleteMessage(id: ID!): IncidentMessage - - createReaction(messageId: ID!, name: String!): IncidentMessage - - deleteReaction(messageId: ID!, name: String!): IncidentMessage - - readNotifications(incidentId: ID): Int - - createQueue(attributes: UpgradeQueueAttributes!): UpgradeQueue - - createUpgrade(repositoryName: String, repositoryId: ID, queue: String!, attributes: UpgradeAttributes!): Upgrade - - acceptLogin(challenge: String!): OauthResponse - - oauthConsent(challenge: String!, scopes: [String]): OauthResponse - - oauthCallback(provider: OauthProvider!, host: String, code: String!, deviceToken: String): User - - ssoCallback(code: String!, deviceToken: String): User - - updateDockerRepository(id: ID!, attributes: DockerRepositoryAttributes!): DockerRepository - - createDomain(attributes: DnsDomainAttributes!): DnsDomain - - updateDomain(id: ID!, attributes: DnsDomainAttributes!): DnsDomain - - deleteDomain(id: ID!): DnsDomain +type AuditConnection { + pageInfo: PageInfo! + edges: [AuditEdge] +} - provisionDomain(name: String!): DnsDomain +enum IncidentStatus { + OPEN + IN_PROGRESS + RESOLVED + COMPLETE +} - createDnsRecord(attributes: DnsRecordAttributes!, cluster: String!, provider: Provider!): DnsRecord +enum MediaType { + IMAGE + VIDEO + AUDIO + OTHER + PDF +} - deleteDnsRecord(name: String!, type: DnsRecordType!): DnsRecord +enum IncidentAction { + EDIT + CREATE + STATUS + SEVERITY + ACCEPT + COMPLETE +} - createShell(attributes: CloudShellAttributes!): CloudShell +enum ActionItemType { + PULL + ISSUE + BLOG +} - setupShell: CloudShell +enum MessageEntityType { + MENTION + EMOJI +} - updateShell(attributes: CloudShellAttributes!): CloudShell +enum IncidentSort { + INSERTED_AT + TITLE + STATUS + SEVERITY +} - updateShellConfiguration(context: Map!): Boolean +enum IncidentFilterType { + NOTIFICATIONS + FOLLOWING + TAG + STATUS +} - installBundle(context: ContextAttributes!, oidc: Boolean!, repo: String!, name: String!): [Installation] +input IncidentAttributes { + title: String + severity: Int + description: String + status: IncidentStatus + tags: [TagAttributes] + clusterInformation: ClusterInformationAttributes +} - installStackShell(name: String!, oidc: Boolean!, context: ContextAttributes!): [Recipe] +input ClusterInformationAttributes { + gitCommit: String + version: String + platform: String +} - rebootShell: CloudShell +input IncidentMessageAttributes { + text: String! + file: FileAttributes + entities: [EntityAttributes] +} - deleteShell: CloudShell +input EntityAttributes { + type: MessageEntityType! + text: String + userId: ID + startIndex: Int + endIndex: Int +} - createDemoProject: DemoProject +input PostmortemAttributes { + content: String! + actionItems: [ActionItemAttributes] +} - transferDemoProject(organizationId: String!): DemoProject +input ActionItemAttributes { + type: ActionItemType! + link: String! +} - deleteDemoProject: DemoProject +input FileAttributes { + blob: UploadOrUrl +} - stopShell: Boolean +input NotificationPreferencesAttributes { + message: Boolean! + incidentUpdate: Boolean! + mention: Boolean! +} - restartShell: Boolean +input FollowerAttributes { + preferences: NotificationPreferencesAttributes +} - unlockRepository(name: String!): Int +input IncidentFilter { + type: IncidentFilterType! + value: String + statuses: [IncidentStatus] +} - createTest(repositoryId: ID, name: String, attributes: TestAttributes!): Test +type SlimSubscription { + id: ID! + lineItems: SubscriptionLineItems + plan: Plan +} - updateTest(id: ID!, attributes: TestAttributes!): Test +type Incident { + id: ID! + title: String! + description: String + severity: Int! + status: IncidentStatus! + nextResponseAt: DateTime + repository: Repository! + creator: User! + owner: User + tags: [Tag] + postmortem: Postmortem + clusterInformation: ClusterInformation + subscription: SlimSubscription + notificationCount: Int + follower: Follower + messages(after: String, first: Int, before: String, last: Int): IncidentMessageConnection + files(after: String, first: Int, before: String, last: Int): FileConnection + history(after: String, first: Int, before: String, last: Int): IncidentHistoryConnection + followers(after: String, first: Int, before: String, last: Int): FollowerConnection + insertedAt: DateTime + updatedAt: DateTime +} - updateStep(id: ID!, attributes: TestStepAttributes!): TestStep +type ClusterInformation { + id: ID! + version: String + gitCommit: String + platform: String + insertedAt: DateTime + updatedAt: DateTime +} - publishLogs(id: ID!, logs: String!): TestStep +type Postmortem { + id: ID! + content: String! + actionItems: [ActionItem] + creator: User! + insertedAt: DateTime + updatedAt: DateTime +} - "Create a new cluster." - createCluster( - "The input attributes for the cluster that will be created." - attributes: ClusterAttributes! - ): Cluster +type ActionItem { + type: ActionItemType! + link: String! +} - "adds a dependency for this cluster to gate future upgrades" - createClusterDependency(sourceId: ID!, destId: ID!): ClusterDependency +type IncidentHistory { + id: ID! + action: IncidentAction! + changes: [IncidentChange] + actor: User! + incident: Incident! + insertedAt: DateTime + updatedAt: DateTime +} - "deletes a dependency for this cluster and potentially disables promotions entirely" - deleteClusterDependency(sourceId: ID!, destId: ID!): ClusterDependency +type IncidentChange { + key: String! + prev: String + next: String +} - "moves up the upgrade waterline for a user" - promote: User +type IncidentMessage { + id: ID! + text: String! + incident: Incident! + creator: User! + reactions: [Reaction] + file: File + entities: [MessageEntity] + insertedAt: DateTime + updatedAt: DateTime +} - "transfers ownership of a cluster to a service account" - transferOwnership(name: String!, email: String!): Cluster +type MessageEntity { + id: ID! + type: MessageEntityType! + text: String + startIndex: Int + endIndex: Int + user: User + insertedAt: DateTime + updatedAt: DateTime +} - "Delete a cluster." - deleteCluster( - "The name of the cluster." - name: String! +type File { + id: ID! + mediaType: MediaType + filename: String + filesize: Int + width: Int + height: Int + contentType: String + blob: String! + message: IncidentMessage! + insertedAt: DateTime + updatedAt: DateTime +} - "The cluster's cloud provider." - provider: Provider! - ): Cluster +type Reaction { + name: String! + creator: User! + message: IncidentMessage! + insertedAt: DateTime + updatedAt: DateTime +} - createConsoleInstance(attributes: ConsoleInstanceAttributes!): ConsoleInstance +type Notification { + id: ID! + type: NotificationType! + msg: String + user: User! + actor: User! + incident: Incident + message: IncidentMessage + repository: Repository + insertedAt: DateTime + updatedAt: DateTime +} - updateConsoleInstance(id: ID!, attributes: ConsoleInstanceUpdateAttributes!): ConsoleInstance +type Follower { + id: ID! + user: User! + incident: Incident + preferences: NotificationPreferences + insertedAt: DateTime + updatedAt: DateTime +} - deleteConsoleInstance(id: ID!): ConsoleInstance +type NotificationPreferences { + message: Boolean + incidentUpdate: Boolean + mention: Boolean } -type ConsoleInstanceConnection { +type IncidentConnection { pageInfo: PageInfo! - edges: [ConsoleInstanceEdge] + edges: [IncidentEdge] } -"An installation of an application." -type Installation { - "The installation's ID." - id: ID! - - "A YAML object of context." - context: Map - - "Whether the application should auto upgrade." - autoUpgrade: Boolean +type IncidentMessageConnection { + pageInfo: PageInfo! + edges: [IncidentMessageEdge] +} - "The application that was installed." - repository: Repository +type IncidentHistoryConnection { + pageInfo: PageInfo! + edges: [IncidentHistoryEdge] +} - "The user that installed the application." - user: User +type FileConnection { + pageInfo: PageInfo! + edges: [FileEdge] +} - "The subscription for the application." - subscription: RepositorySubscription +type NotificationConnection { + pageInfo: PageInfo! + edges: [NotificationEdge] +} - "The OIDC provider for the application." - oidcProvider: OidcProvider +type FollowerConnection { + pageInfo: PageInfo! + edges: [FollowerEdge] +} - "The license key for the application." - licenseKey: String +type IncidentDelta { + delta: Delta + payload: Incident +} - "The tag to track for auto upgrades." - trackTag: String! +type IncidentMessageDelta { + delta: Delta + payload: IncidentMessage +} - "The last ping time of an installed application." - pingedAt: DateTime +enum Permission { + INSTALL + PUBLISH + BILLING + USERS + SUPPORT + INTEGRATIONS +} - acmeKeyId: String +enum WebhookLogState { + SENDING + DELIVERED + FAILED +} - acmeSecret: String +enum OauthService { + ZOOM +} - locked: Boolean +input AccountAttributes { + name: String + icon: UploadOrUrl + domainMappings: [DomainMappingInput] + billingAddress: AddressAttributes +} - synced: Boolean +input DomainMappingInput { + id: ID + domain: String + enableSso: Boolean +} - license: String +input InviteAttributes { + email: String + admin: Boolean + oidcProviderId: ID + serviceAccountId: ID + inviteGroups: [BindingAttributes] +} - insertedAt: DateTime +input GroupAttributes { + name: String! + description: String + global: Boolean +} - updatedAt: DateTime +input RoleAttributes { + name: String + description: String + repositories: [String] + roleBindings: [BindingAttributes] + permissions: [Permission] } -type PluralConfiguration { - stripeConnectId: String - stripePublishableKey: String - registry: String - gitCommit: String +input ServiceAccountAttributes { + name: String + email: String + impersonationPolicy: ImpersonationPolicyAttributes } -type OidcLogin { - id: ID! - ip: String - country: String - city: String - latitude: String - longitude: String - user: User - owner: User - repository: Repository - insertedAt: DateTime - updatedAt: DateTime +input BindingAttributes { + id: ID + userId: ID + groupId: ID } -type AuditConnection { - pageInfo: PageInfo! - edges: [AuditEdge] +input ImpersonationPolicyAttributes { + id: ID + bindings: [ImpersonationPolicyBindingAttributes] } -type WebhookLogConnection { - pageInfo: PageInfo! - edges: [WebhookLogEdge] +input ImpersonationPolicyBindingAttributes { + id: ID + userId: ID + groupId: ID } -type RecipeCondition { - field: String! - value: String - operation: Operation! +input IntegrationWebhookAttributes { + name: String! + url: String! + actions: [String] } -type UpgradeConnection { - pageInfo: PageInfo! - edges: [UpgradeEdge] +input OauthAttributes { + service: OauthService + code: String + redirectUri: String } -type StackConnection { - pageInfo: PageInfo! - edges: [StackEdge] +input MeetingAttributes { + topic: String! + incidentId: ID } -type Postmortem { +type Account { id: ID! - content: String! - actionItems: [ActionItem] - creator: User! + name: String + billingCustomerId: String + workosConnectionId: String + clusterCount: String + userCount: String + delinquentAt: DateTime + grandfatheredUntil: DateTime + billingAddress: Address + trialed: Boolean + icon: String + paymentMethods(after: String, first: Int, before: String, last: Int): PaymentMethodConnection + rootUser: User + domainMappings: [DomainMapping] + subscription: PlatformSubscription + backgroundColor: String + availableFeatures: PlanFeatures insertedAt: DateTime updatedAt: DateTime } -type ServiceLevel { - maxSeverity: Int - minSeverity: Int - responseTime: Int -} - -type AuthorizationUrl { - provider: ScmProvider! - url: String! +type DomainMapping { + id: ID! + domain: String! + enableSso: Boolean + account: Account + insertedAt: DateTime + updatedAt: DateTime } -type CloudShell { +type Invite { id: ID! - provider: Provider! - gitUrl: String! - aesKey: String! - missing: [String] - cluster: String! - subdomain: String! - alive: Boolean! - status: ShellStatus - region: String! + admin: Boolean + secureId: String + existing: Boolean! + email: String + expiresAt: DateTime + account: Account + user: User + groups: [Group] insertedAt: DateTime updatedAt: DateTime } -type Stack { +type Group { id: ID! name: String! + global: Boolean description: String - featured: Boolean - community: Community - displayName: String - collections: [StackCollection] - creator: User - bundles: [Recipe] - sections: [RecipeSection] insertedAt: DateTime updatedAt: DateTime } -"A record of the utilization in a given cluster" -type ClusterUsageHistory { - cpu: Int - memory: Int - services: Int - cluster: Cluster - account: Account +type GroupMember { + id: ID! + user: User + group: Group insertedAt: DateTime updatedAt: DateTime } -type Community { - discord: String - slack: String - twitter: String - homepage: String - gitUrl: String - videos: [String] +type Role { + id: ID! + name: String! + description: String + repositories: [String] + permissions: [Permission] + roleBindings: [RoleBinding] + account: Account + insertedAt: DateTime + updatedAt: DateTime } -type RootQueryType { - me: User - - user(id: ID!): User - - loginMethod(email: String!, host: String): LoginMethodResponse - - resetToken(id: ID!): ResetToken - - tokens(after: String, first: Int, before: String, last: Int): PersistedTokenConnection - - token(id: ID!): PersistedToken - - publisher(id: ID): Publisher +type RoleBinding { + id: ID! + user: User + group: Group + insertedAt: DateTime + updatedAt: DateTime +} - users(after: String, first: Int, before: String, last: Int, q: String, serviceAccount: Boolean, all: Boolean): UserConnection +type IntegrationWebhook { + id: ID! + name: String! + url: String! + actions: [String] + secret: String! + account: Account + logs(after: String, first: Int, before: String, last: Int): WebhookLogConnection + insertedAt: DateTime + updatedAt: DateTime +} - searchUsers(after: String, first: Int, before: String, last: Int, incidentId: ID!, q: String!): UserConnection +type WebhookLog { + id: ID! + state: WebhookLogState! + status: Int + response: String + payload: Map + webhook: IntegrationWebhook + insertedAt: DateTime + updatedAt: DateTime +} - publishers(after: String, first: Int, before: String, last: Int, accountId: ID, publishable: Boolean): PublisherConnection +type OauthIntegration { + id: ID! + service: OauthService! + account: Account + insertedAt: DateTime + updatedAt: DateTime +} - webhooks(after: String, first: Int, before: String, last: Int): WebhookConnection +type ZoomMeeting { + joinUrl: String! + password: String +} - publicKeys(after: String, first: Int, before: String, last: Int, emails: [String]): PublicKeyConnection +type GroupConnection { + pageInfo: PageInfo! + edges: [GroupEdge] +} - eabCredential(cluster: String!, provider: Provider!): EabCredential +type GroupMemberConnection { + pageInfo: PageInfo! + edges: [GroupMemberEdge] +} - eabCredentials: [EabCredential] +type RoleConnection { + pageInfo: PageInfo! + edges: [RoleEdge] +} - keyBackups(after: String, first: Int, before: String, last: Int): KeyBackupConnection +type IntegrationWebhookConnection { + pageInfo: PageInfo! + edges: [IntegrationWebhookEdge] +} - keyBackup(name: String!): KeyBackup +type WebhookLogConnection { + pageInfo: PageInfo! + edges: [WebhookLogEdge] +} - oidcToken(provider: ExternalOidcProvider!, idToken: String!, email: String!): String +type InviteConnection { + pageInfo: PageInfo! + edges: [InviteEdge] +} - repositorySubscription(id: ID!): RepositorySubscription +input VersionSpec { + repository: String + chart: String + terraform: String + version: String +} - subscriptions(after: String, first: Int, before: String, last: Int): RepositorySubscriptionConnection +input VersionAttributes { + tags: [VersionTagAttributes] +} - platformPlans: [PlatformPlan] +input VersionTagAttributes { + versionId: ID + tag: String! +} - platformSubscription: PlatformSubscription +"The version of a package." +type Version { + id: ID! - invoices(after: String, first: Int, before: String, last: Int): InvoiceConnection + version: String! - "Get an application by its ID or name." - repository( - "The ID of the application." - id: ID + readme: String - "The name of the application." - name: String - ): Repository + valuesTemplate: String - installation(id: ID, name: String): Installation + "The template engine used to render the valuesTemplate." + templateType: TemplateType - repositories( - after: String, first: Int, before: String, last: Int, publisherId: ID, q: String, tag: String, supports: Boolean, installed: Boolean, category: Category, provider: Provider, categories: [Category], tags: [String], publishers: [ID] - ): RepositoryConnection + helm: Map - searchRepositories(after: String, first: Int, before: String, last: Int, query: String!): RepositoryConnection + tags: [VersionTag] - installations(after: String, first: Int, before: String, last: Int): InstallationConnection + dependencies: Dependencies - integrations( - after: String, first: Int, before: String, last: Int, repositoryId: ID, repositoryName: String, tag: String, type: String - ): IntegrationConnection + package: String - closure(id: ID!, type: DependencyType!): [ClosureItem] + chart: Chart - categories: [CategoryInfo] + terraform: Terraform - category(name: Category!): CategoryInfo + crds: [Crd] - scaffold(application: String!, category: Category!, publisher: String!, ingress: Boolean, postgres: Boolean): [ScaffoldFile] + scan: PackageScan - recipe(id: ID, name: String, repo: String): Recipe + imageDependencies: [ImageDependency] - stack(name: String!, provider: Provider!): Stack + insertedAt: DateTime - recipes( - after: String, first: Int, before: String, last: Int, repositoryId: ID, repositoryName: String, provider: Provider - ): RecipeConnection + updatedAt: DateTime +} - stacks(after: String, first: Int, before: String, last: Int, featured: Boolean): StackConnection +"Template engines that can be used at build time." +enum TemplateType { + GOTEMPLATE + LUA + JAVASCRIPT +} - chart(id: ID!): Chart +type PackageScan { + id: ID! + grade: ImageGrade + violations: [ScanViolation] + errors: [ScanError] + insertedAt: DateTime + updatedAt: DateTime +} - charts(after: String, first: Int, before: String, last: Int, repositoryId: ID!): ChartConnection +type ScanViolation { + ruleName: String + description: String + ruleId: String + severity: VulnGrade + category: String + resourceName: String + resourceType: String + line: Int + file: String + insertedAt: DateTime + updatedAt: DateTime +} - chartInstallations(after: String, first: Int, before: String, last: Int, repositoryId: ID!): ChartInstallationConnection +type ScanError { + message: String +} - terraformModule(id: ID!): Terraform +type VersionTag { + id: ID! + tag: String! + version: Version + chart: Chart + insertedAt: DateTime + updatedAt: DateTime +} - terraform(after: String, first: Int, before: String, last: Int, repositoryId: ID!): TerraformConnection +type Dependencies { + dependencies: [Dependency] + providers: [Provider] + secrets: [String] + providerVsn: String + cliVsn: String + application: Boolean + providerWirings: Map + outputs: Map + wirings: Wirings + breaking: Boolean + wait: Boolean + instructions: ChangeInstructions +} - terraformInstallations(after: String, first: Int, before: String, last: Int, repositoryId: ID!): TerraformInstallationConnection +type ChangeInstructions { + script: String + instructions: String +} - dockerRepositories(after: String, first: Int, before: String, last: Int, repositoryId: ID!): DockerRepositoryConnection +enum DependencyType { + TERRAFORM + HELM +} - dockerImages(after: String, first: Int, before: String, last: Int, dockerRepositoryId: ID!, q: String): DockerImageConnection +type Dependency { + type: DependencyType + name: String + repo: String + version: String + optional: Boolean +} - dockerImage(id: ID!): DockerImage +type Wirings { + terraform: Map + helm: Map +} - versions(after: String, first: Int, before: String, last: Int, chartId: ID, terraformId: ID): VersionConnection +type VersionConnection { + pageInfo: PageInfo! + edges: [VersionEdge] +} - account: Account +enum ImageGrade { + A + B + C + D + F +} - invite(id: String!): Invite +enum VulnGrade { + LOW + MEDIUM + HIGH + CRITICAL + NONE +} - invites(after: String, first: Int, before: String, last: Int): InviteConnection +enum VulnVector { + NETWORK + ADJACENT + LOCAL + PHYSICAL +} - groups(after: String, first: Int, before: String, last: Int, q: String): GroupConnection +enum VulnRequirement { + NONE + REQUIRED +} - groupMembers(after: String, first: Int, before: String, last: Int, groupId: ID!): GroupMemberConnection +input DockerRepositoryAttributes { + public: Boolean! +} - role(id: ID!): Role +type DockerRepository { + id: ID! + name: String! + public: Boolean + repository: Repository + metrics(tag: String, precision: String, offset: String): [Metric] + insertedAt: DateTime + updatedAt: DateTime +} - roles(after: String, first: Int, before: String, last: Int, q: String, userId: ID): RoleConnection +type DockerImage { + id: ID! + tag: String + digest: String! + scannedAt: DateTime + scanCompletedAt: DateTime + grade: ImageGrade + dockerRepository: DockerRepository + vulnerabilities: [Vulnerability] + insertedAt: DateTime + updatedAt: DateTime +} - integrationWebhooks(after: String, first: Int, before: String, last: Int): IntegrationWebhookConnection +type ImageDependency { + id: ID! + image: DockerImage! + version: Version! + insertedAt: DateTime + updatedAt: DateTime +} - integrationWebhook(id: ID!): IntegrationWebhook +type Vulnerability { + id: ID! + title: String + description: String + vulnerabilityId: String + package: String + installedVersion: String + fixedVersion: String + source: String + url: String + severity: VulnGrade + score: Float + cvss: Cvss + layer: ImageLayer + insertedAt: DateTime + updatedAt: DateTime +} - oauthIntegrations: [OauthIntegration] +type ImageLayer { + digest: String + diffId: String +} - incidents( - after: String, first: Int, before: String, last: Int, repositoryId: ID, supports: Boolean, q: String, sort: IncidentSort, order: Order, filters: [IncidentFilter] - ): IncidentConnection +type Cvss { + attackVector: VulnVector + attackComplexity: VulnGrade + privilegesRequired: VulnGrade + userInteraction: VulnRequirement + confidentiality: VulnGrade + integrity: VulnGrade + availability: VulnGrade +} - incident(id: ID!): Incident +type DockerRepositoryConnection { + pageInfo: PageInfo! + edges: [DockerRepositoryEdge] +} - notifications(after: String, first: Int, before: String, last: Int, incidentId: ID, cli: Boolean): NotificationConnection +type DockerImageConnection { + pageInfo: PageInfo! + edges: [DockerImageEdge] +} - audits(after: String, first: Int, before: String, last: Int): AuditConnection +input TerraformAttributes { + name: String + description: String + package: UploadOrUrl + dependencies: Yaml + version: String +} - auditMetrics: [GeoMetric] +input TerraformInstallationAttributes { + terraformId: ID + versionId: ID +} - upgradeQueues: [UpgradeQueue] +type TerraformInstallation { + id: ID + terraform: Terraform + installation: Installation + version: Version + insertedAt: DateTime + updatedAt: DateTime +} - deferredUpdates( - after: String, first: Int, before: String, last: Int, chartInstallationId: ID, terraformInstallationId: ID - ): DeferredUpdateConnection +type Terraform { + id: ID + name: String + readme: String + description: String + valuesTemplate: String + latestVersion: String + dependencies: Dependencies + package: String + repository: Repository + editable: Boolean + installation: TerraformInstallation + insertedAt: DateTime + updatedAt: DateTime +} - upgradeQueue(id: ID): UpgradeQueue +type TerraformConnection { + pageInfo: PageInfo! + edges: [TerraformEdge] +} - rollouts(after: String, first: Int, before: String, last: Int, repositoryId: ID!): RolloutConnection +type TerraformInstallationConnection { + pageInfo: PageInfo! + edges: [TerraformInstallationEdge] +} - oauthLogin(challenge: String!): Repository +input ChartName { + repo: String + chart: String +} - oauthConsent(challenge: String!): Repository +input ChartInstallationAttributes { + chartId: ID + versionId: ID +} - oidcLogin(challenge: String!): OidcStepResponse +input ChartAttributes { + tags: [VersionTagAttributes] +} - oidcConsent(challenge: String!): OidcStepResponse +input CrdAttributes { + name: String! + blob: UploadOrUrl +} - oauthUrls(host: String): [OauthInfo] +type Chart { + id: ID + name: String! + description: String + latestVersion: String + repository: Repository + dependencies: Dependencies + tags: [VersionTag] + installation: ChartInstallation + insertedAt: DateTime + updatedAt: DateTime +} - oidcLogins(after: String, first: Int, before: String, last: Int): OidcLoginConnection +type ChartInstallation { + id: ID + chart: Chart + version: Version + installation: Installation + insertedAt: DateTime + updatedAt: DateTime +} - loginMetrics: [GeoMetric] +type Crd { + id: ID! + name: String! + blob: String + insertedAt: DateTime + updatedAt: DateTime +} - dnsDomain(id: ID!): DnsDomain +type ChartConnection { + pageInfo: PageInfo! + edges: [ChartEdge] +} - dnsDomains(after: String, first: Int, before: String, last: Int, q: String): DnsDomainConnection +type ChartInstallationConnection { + pageInfo: PageInfo! + edges: [ChartInstallationEdge] +} - dnsRecords(after: String, first: Int, before: String, last: Int, domainId: ID, cluster: String, provider: Provider): DnsRecordConnection +input RecipeAttributes { + name: String! + description: String + provider: Provider + tests: [RecipeTestAttributes] + sections: [RecipeSectionAttributes] + dependencies: [RecipeReference] + oidcSettings: OidcSettingsAttributes + private: Boolean + primary: Boolean + restricted: Boolean +} - shell: CloudShell +input StackAttributes { + name: String! + description: String + featured: Boolean + displayName: String + collections: [StackCollectionAttributes] + community: CommunityAttributes +} - shellConfiguration: ShellConfiguration +input StackCollectionAttributes { + provider: Provider! + bundles: [RecipeReference] +} - shellApplications: [ApplicationInformation] +input OidcSettingsAttributes { + uriFormat: String + authMethod: OidcAuthMethod! + uriFormats: [String] + domainKey: String + subdomain: Boolean +} - scmAuthorization: [AuthorizationUrl] +input RecipeReference { + repo: String! + name: String! +} - scmToken(provider: ScmProvider!, code: String!): String +input RecipeTestAttributes { + type: TestType! + message: String + name: String! + args: [TestArgumentAttributes] +} - demoProject(id: ID): DemoProject +input TestArgumentAttributes { + name: String! + repo: String! + key: String! +} - platformMetrics: PlatformMetrics +input RecipeSectionAttributes { + name: String! + items: [RecipeItemAttributes] + configuration: [RecipeConfigurationAttributes] +} - terraformProviders: [Provider] +input RecipeConditionAttributes { + field: String! + value: String + operation: Operation! +} - terraformProvider(name: Provider!, vsn: String): TerraformProvider +input RecipeValidationAttributes { + type: ValidationType! + regex: String + message: String! +} - tests(after: String, first: Int, before: String, last: Int, versionId: ID, repositoryId: ID): TestConnection +input RecipeItemAttributes { + name: String! + type: RecipeItemType! + configuration: [RecipeConfigurationAttributes] +} - test(id: ID!): Test +input RecipeConfigurationAttributes { + type: Datatype! + name: String! + default: String + documentation: String + longform: String + placeholder: String + condition: RecipeConditionAttributes + validation: RecipeValidationAttributes + functionName: String + optional: Boolean +} - testLogs(id: ID!, step: ID!): String +enum RecipeItemType { + HELM + TERRAFORM +} - chat(history: [ChatMessageAttributes]): ChatMessage +enum Datatype { + STRING + INT + BOOL + DOMAIN + BUCKET + FILE + FUNCTION + PASSWORD +} - helpQuestion(prompt: String!): String +enum TestType { + GIT +} - "Get a cluster by its ID." - cluster( - "The ID of the cluster." - id: ID! - ): Cluster +enum Operation { + NOT + GT + LT + EQ + GTE + LTE + PREFIX + SUFFIX +} - "Get a list of clusters owned by the current account." - clusters(after: String, first: Int, before: String, last: Int): ClusterConnection +enum ValidationType { + REGEX +} - consoleInstance(id: ID!): ConsoleInstance +enum Provider { + GCP + AWS + AZURE + CUSTOM + KUBERNETES + EQUINIX + KIND + GENERIC + LINODE +} - consoleInstances(after: String, first: Int, before: String, last: Int): ConsoleInstanceConnection +type Recipe { + id: ID! + name: String! + description: String + provider: Provider + oidcSettings: OidcSettings + private: Boolean + restricted: Boolean + primary: Boolean + oidcEnabled: Boolean + tests: [RecipeTest] + repository: Repository + recipeSections: [RecipeSection] + recipeDependencies: [Recipe] + insertedAt: DateTime + updatedAt: DateTime +} - configuration: PluralConfiguration +type RecipeTest { + type: TestType! + name: String! + message: String + args: [TestArgument] +} - tags(after: String, first: Int, before: String, last: Int, id: ID, type: TagGroup!, q: String): GroupedTagConnection +type TestArgument { + name: String! + repo: String! + key: String! } -type IncidentHistory { - id: ID! - action: IncidentAction! - changes: [IncidentChange] - actor: User! - incident: Incident! +type OidcSettings { + uriFormat: String + uriFormats: [String] + authMethod: OidcAuthMethod! + domainKey: String + subdomain: Boolean +} + +type RecipeSection { + id: ID + repository: Repository + recipe: Recipe + index: Int + recipeItems: [RecipeItem] + configuration: [RecipeConfiguration] insertedAt: DateTime updatedAt: DateTime } -type PublicKey { - id: ID! - name: String! - content: String! - digest: String! - user: User! +type RecipeItem { + id: ID + chart: Chart + terraform: Terraform + recipeSection: RecipeSection + configuration: [RecipeConfiguration] insertedAt: DateTime updatedAt: DateTime } -type MessageEntity { - id: ID! - type: MessageEntityType! - text: String - startIndex: Int - endIndex: Int - user: User - insertedAt: DateTime - updatedAt: DateTime +type RecipeConfiguration { + type: Datatype + name: String + default: String + documentation: String + placeholder: String + longform: String + optional: Boolean + condition: RecipeCondition + validation: RecipeValidation + functionName: String + args: [String] } -type DockerRepository { - id: ID! - name: String! - public: Boolean - repository: Repository - metrics(tag: String, precision: String, offset: String): [Metric] - insertedAt: DateTime - updatedAt: DateTime +type RecipeCondition { + field: String! + value: String + operation: Operation! } -type UpgradePath { - path: String! - value: String! - type: ValueType! +type RecipeValidation { + type: ValidationType! + regex: String + message: String! } -type VersionTag { +type Stack { id: ID! - tag: String! - version: Version - chart: Chart + name: String! + description: String + featured: Boolean + community: Community + displayName: String + collections: [StackCollection] + creator: User + bundles: [Recipe] + sections: [RecipeSection] insertedAt: DateTime updatedAt: DateTime } -type RoleBinding { +type StackCollection { id: ID! - user: User - group: Group + provider: Provider! + bundles: [StackRecipe] insertedAt: DateTime updatedAt: DateTime } -type Upgrade { +type StackRecipe { id: ID! - type: UpgradeType - message: String - config: UpgradeConfig - repository: Repository + recipe: Recipe! insertedAt: DateTime updatedAt: DateTime } -type InviteEdge { - node: Invite - cursor: String +type StackConnection { + pageInfo: PageInfo! + edges: [StackEdge] } -type FileEdge { - node: File - cursor: String +type RecipeConnection { + pageInfo: PageInfo! + edges: [RecipeEdge] } -type DeferredUpdate { - id: ID! - dequeueAt: DateTime - attempts: Int - pending: Boolean - messages: [DeferredReason] - chartInstallation: ChartInstallation - terraformInstallation: TerraformInstallation - version: Version - insertedAt: DateTime - updatedAt: DateTime +"Application categories." +enum Category { + DEVOPS + DATABASE + MESSAGING + SECURITY + DATA + PRODUCTIVITY + NETWORK + STORAGE } -enum VulnGrade { - LOW - MEDIUM - HIGH - CRITICAL - NONE +"The release status of a repository, defaults to ALPHA, GA if it is ready for general consumption" +enum ReleaseStatus { + GA + BETA + ALPHA } -type GroupMemberEdge { - node: GroupMember - cursor: String +"Supported OIDC authentication methods." +enum OidcAuthMethod { + POST + BASIC } -enum DnsRecordType { - A - AAAA - TXT - CNAME -} +"Input for creating or updating an application's attributes." +input RepositoryAttributes { + "The name of the application." + name: String -type CardEdge { - node: Card - cursor: String -} + "A short description of the application." + description: String -type ScaffoldFile { - path: String - content: String -} + "A link to the application's documentation." + documentation: String -type GroupedTagEdge { - node: GroupedTag - cursor: String -} + "The category of the application." + category: Category -type PlanFeature { - name: String! - description: String! -} + "A YAML object of secrets." + secrets: Yaml -type RecipeEdge { - node: Recipe - cursor: String -} + "release status of the repository" + releaseStatus: ReleaseStatus -type DockerRepositoryEdge { - node: DockerRepository - cursor: String -} + "The application's icon." + icon: UploadOrUrl -type VersionEdge { - node: Version - cursor: String -} + "The application's dark icon." + darkIcon: UploadOrUrl -"Possible cluster sources." -enum Source { - DEFAULT - SHELL - DEMO -} + "The application's documentation." + docs: UploadOrUrl -enum IncidentFilterType { - NOTIFICATIONS - FOLLOWING - TAG - STATUS -} + "The application's tags." + tags: [TagAttributes] -"Template engines that can be used at build time." -enum TemplateType { - GOTEMPLATE - LUA - JAVASCRIPT + "Whether the application is private." + private: Boolean + + "Whether the application is verified." + verified: Boolean + + "Whether the application is trending." + trending: Boolean + + "Notes about the application rendered after deploying and displayed to the user." + notes: String + + "The default tag to use when deploying the application." + defaultTag: String + + "The application's git URL." + gitUrl: String + + "The application's homepage." + homepage: String + + "The application's README." + readme: String + + "List of emails of external users contributing to this repository and who will be granted access" + contributors: [String] + + "The application's OAuth settings." + oauthSettings: OauthSettingsAttributes + + "The application's integration resource definition." + integrationResourceDefinition: ResourceDefinitionAttributes + + "The application's community links." + community: CommunityAttributes } -type WebhookResponse { - statusCode: Int! - body: String - headers: Map +"Input for the application's OAuth settings." +input OauthSettingsAttributes { + "The URI format for the OAuth provider." + uriFormat: String! + + "The authentication method for the OAuth provider." + authMethod: OidcAuthMethod! } -""" -The `DateTime` scalar type represents a date and time in the UTC -timezone. The DateTime appears in a JSON response as an ISO8601 formatted -string, including UTC timezone ("Z"). The parsed date and time string will -be converted to UTC if there is an offset. -""" -scalar DateTime +"Input for creating or updating the tag attributes of an application installation." +input InstallationAttributes { + "A YAML object of context." + context: Yaml -enum ValueType { - INT - STRING - FLOAT -} + "Whether the application should auto upgrade." + autoUpgrade: Boolean -type PersistedTokenAuditEdge { - node: PersistedTokenAudit - cursor: String + "The tag to track for auto upgrades." + trackTag: String } -type ChartEdge { - node: Chart - cursor: String +input IntegrationAttributes { + name: String! + icon: UploadOrUrl + sourceUrl: String + description: String + type: String + spec: Yaml + tags: [TagAttributes] } -type IncidentHistoryEdge { - node: IncidentHistory - cursor: String +input ResourceDefinitionAttributes { + name: String! + spec: [SpecificationAttributes] } -type ShellWorkspace { - network: NetworkConfiguration - bucketPrefix: String - cluster: String - region: String +enum SpecDatatype { + STRING + INT + FLOAT + BOOL + OBJECT + LIST } -enum UpgradeType { - DEPLOY - APPROVAL - BOUNCE - DEDICATED - CONFIG +input SpecificationAttributes { + name: String! + type: SpecDatatype! + inner: SpecDatatype + spec: [SpecificationAttributes] + required: Boolean } -type DockerImage { - id: ID! - tag: String - digest: String! - scannedAt: DateTime - scanCompletedAt: DateTime - grade: ImageGrade - dockerRepository: DockerRepository - vulnerabilities: [Vulnerability] - insertedAt: DateTime - updatedAt: DateTime +input ArtifactAttributes { + name: String! + readme: String! + type: String! + platform: String! + arch: String + blob: UploadOrUrl } -type TerraformEdge { - node: Terraform - cursor: String -} +"Input for creating or updating the OIDC attributes of an application installation." +input OidcAttributes { + "The redirect URIs for the OIDC provider." + redirectUris: [String] -type IntegrationWebhookEdge { - node: IntegrationWebhook - cursor: String -} + "The authentication method for the OIDC provider." + authMethod: OidcAuthMethod! -type TestEdge { - node: Test - cursor: String + "The users or groups that can login through the OIDC provider." + bindings: [BindingAttributes] } -type Incident { - id: ID! - title: String! - description: String - severity: Int! - status: IncidentStatus! - nextResponseAt: DateTime - repository: Repository! - creator: User! - owner: User - tags: [Tag] - postmortem: Postmortem - clusterInformation: ClusterInformation - subscription: SlimSubscription - notificationCount: Int - follower: Follower - messages(after: String, first: Int, before: String, last: Int): IncidentMessageConnection - files(after: String, first: Int, before: String, last: Int): FileConnection - history(after: String, first: Int, before: String, last: Int): IncidentHistoryConnection - followers(after: String, first: Int, before: String, last: Int): FollowerConnection - insertedAt: DateTime - updatedAt: DateTime +input LockAttributes { + lock: String! } -enum PaymentPeriod { - MONTHLY - YEARLY -} +"Input for creating or updating the community links of an application." +input CommunityAttributes { + "The application's Discord server." + discord: String -type PaymentIntent { - id: String - description: String - clientSecret: String - amount: Int - captureMethod: String - currency: String - nextAction: NextAction - status: String -} + "The application's Slack channel." + slack: String -type DnsRecord { - id: ID! - type: DnsRecordType! - name: String! - cluster: String! - provider: Provider! - records: [String] - creator: User - domain: DnsDomain - insertedAt: DateTime - updatedAt: DateTime -} + "The application's Twitter account." + twitter: String -enum LoginMethod { - PASSWORD - PASSWORDLESS - GOOGLE - GITHUB - SSO -} + "The application's homepage." + homepage: String -"Supported OIDC authentication methods." -enum OidcAuthMethod { - POST - BASIC + "The application's git URL." + gitUrl: String + + "The videos of the application." + videos: [String] } -type PersistedTokenAudit { - id: ID - ip: String - timestamp: DateTime +type CategoryInfo { + category: Category count: Int - city: String - country: String - latitude: String - longitude: String - insertedAt: DateTime - updatedAt: DateTime + tags(after: String, first: Int, before: String, last: Int, q: String): GroupedTagConnection } -type Chart { - id: ID - name: String! - description: String - latestVersion: String - repository: Repository - dependencies: Dependencies - tags: [VersionTag] - installation: ChartInstallation - insertedAt: DateTime - updatedAt: DateTime -} +"An installation of an application." +type Installation { + "The installation's ID." + id: ID! -type PaymentMethod { - id: String - card: Card - type: String - isDefault: Boolean -} + "A YAML object of context." + context: Map -"Input for creating or updating a cluster." -input ClusterAttributes { - "The name of the cluster." - name: String! + "Whether the application should auto upgrade." + autoUpgrade: Boolean - "The cluster's cloud provider." - provider: Provider! + "The application that was installed." + repository: Repository - "whether this is a legacy oss cluster" - legacy: Boolean + "The user that installed the application." + user: User - "The source of the cluster." - source: Source + "The subscription for the application." + subscription: RepositorySubscription - "The git repository URL for the cluster." - gitUrl: String + "The OIDC provider for the application." + oidcProvider: OidcProvider - "The URL of the console running on the cluster." - consoleUrl: String + "The license key for the application." + licenseKey: String - "The domain name used for applications deployed on the cluster." - domain: String -} + "The tag to track for auto upgrades." + trackTag: String! -input CrdAttributes { - name: String! - blob: UploadOrUrl -} + "The last ping time of an installed application." + pingedAt: DateTime -input PlanMetadataAttributes { - freeform: Yaml - features: [PlanFeatureAttributes] -} + acmeKeyId: String -input DnsDomainAttributes { - name: String - accessPolicy: DnsAccessPolicyAttributes -} + acmeSecret: String -input RecipeSectionAttributes { - name: String! - items: [RecipeItemAttributes] - configuration: [RecipeConfigurationAttributes] -} + locked: Boolean -input RolesAttributes { - admin: Boolean -} + synced: Boolean -"Input for creating or updating the tag attributes of an application installation." -input InstallationAttributes { - "A YAML object of context." - context: Yaml + license: String - "Whether the application should auto upgrade." - autoUpgrade: Boolean + insertedAt: DateTime - "The tag to track for auto upgrades." - trackTag: String + updatedAt: DateTime } -input OnboardingChecklistAttributes { - status: OnboardingChecklistState - dismissed: Boolean +type License { + name: String + url: String } -input ConsoleInstanceUpdateAttributes { - size: ConsoleSize - configuration: ConsoleConfigurationUpdateAttributes +type Community { + discord: String + slack: String + twitter: String + homepage: String + gitUrl: String + videos: [String] } -enum RolloutStatus { - QUEUED - RUNNING - FINISHED -} +"Container for all resources to create an application." +type Repository { + "The application's ID." + id: ID! -"Input for creating or updating an application's attributes." -input RepositoryAttributes { "The name of the application." - name: String + name: String! - "A short description of the application." + "The description of the application." description: String - "A link to the application's documentation." + "The documentation of the application." documentation: String "The category of the application." category: Category - "A YAML object of secrets." - secrets: Yaml - "release status of the repository" releaseStatus: ReleaseStatus - "The application's icon." - icon: UploadOrUrl - - "The application's dark icon." - darkIcon: UploadOrUrl - - "The application's documentation." - docs: UploadOrUrl - - "The application's tags." - tags: [TagAttributes] - "Whether the application is private." private: Boolean @@ -2953,92 +2748,197 @@ input RepositoryAttributes { "Notes about the application rendered after deploying and displayed to the user." notes: String - "The default tag to use when deploying the application." + "The default tag to deploy." defaultTag: String - "The application's git URL." + "The git URL of the application." gitUrl: String - "The application's homepage." - homepage: String + "The main branch of the application." + mainBranch: String - "The application's README." + "The README of the application." readme: String - "List of emails of external users contributing to this repository and who will be granted access" - contributors: [String] + "The license of the application." + license: License - "The application's OAuth settings." - oauthSettings: OauthSettingsAttributes + "The community links of the application." + community: Community - "The application's integration resource definition." - integrationResourceDefinition: ResourceDefinitionAttributes + "The homepage of the application." + homepage: String - "The application's community links." - community: CommunityAttributes -} + "The application publisher." + publisher: Publisher -"Input for creating or updating the community links of an application." -input CommunityAttributes { - "The application's Discord server." - discord: String + "The available plans for the application." + plans: [Plan] - "The application's Slack channel." - slack: String + "The tags of the application." + tags: [Tag] - "The application's Twitter account." - twitter: String + "The artifacts of the application." + artifacts: [Artifact] - "The application's homepage." - homepage: String + "The recipes used to install the application." + recipes: [Recipe] - "The application's git URL." - gitUrl: String + "The OAuth settings for the application." + oauthSettings: OauthSettings - "The videos of the application." - videos: [String] + icon: String + + darkIcon: String + + "The external contributors to this repository" + contributors: [Contributor] + + "The installation of the application by a user." + installation: Installation + + "version tags that can be followed to control upgrade flow" + upgradeChannels: [String] + + "If the application can be edited by the current user." + editable: Boolean + + "A map of secrets of the application." + secrets: Map + + "The application's public key." + publicKey: String + + "The documentation of the application." + docs: [FileContent] + + insertedAt: DateTime + + updatedAt: DateTime } -input PublicKeyAttributes { +"An external repository contributor" +type Contributor { + id: ID! + user: User + insertedAt: DateTime + updatedAt: DateTime +} + +type Artifact { + id: ID + name: String + readme: String + type: ArtifactType + platform: ArtifactPlatform + filesize: Int + sha: String + arch: String + blob: String + insertedAt: DateTime + updatedAt: DateTime +} + +enum ArtifactType { + CLI + MOBILE + DESKTOP +} + +enum ArtifactPlatform { + MAC + WINDOWS + LINUX + ANDROID + FREEBSD + OPENBSD + SOLARIS +} + +type Integration { + id: ID! name: String! - content: String! + sourceUrl: String + description: String + type: String + spec: Map + icon: String + repository: Repository + publisher: Publisher + tags: [Tag] + insertedAt: DateTime + updatedAt: DateTime } -input TagAttributes { - tag: String! +type OidcProvider { + id: ID! + clientSecret: String! + clientId: String! + redirectUris: [String] + authMethod: OidcAuthMethod! + configuration: OuathConfiguration + consent: ConsentRequest + invites: [Invite] + bindings: [OidcProviderBinding] + insertedAt: DateTime + updatedAt: DateTime } -input CloudShellAttributes { - provider: Provider - workspace: WorkspaceAttributes! - credentials: ShellCredentialsAttributes! - scm: ScmAttributes - demoId: ID +type OidcProviderBinding { + id: ID! + user: User + group: Group + insertedAt: DateTime + updatedAt: DateTime +} + +type OauthSettings { + uriFormat: String! + authMethod: OidcAuthMethod! +} + +type ApplyLock { + id: ID! + lock: String + repository: Repository + owner: User + insertedAt: DateTime + updatedAt: DateTime +} + +type ScaffoldFile { + path: String + content: String +} + +type RepositoryConnection { + pageInfo: PageInfo! + edges: [RepositoryEdge] +} + +type InstallationConnection { + pageInfo: PageInfo! + edges: [InstallationEdge] } -type Wirings { - terraform: Map - helm: Map +type IntegrationConnection { + pageInfo: PageInfo! + edges: [IntegrationEdge] } -input KeyBackupAttributes { - name: String! - repositories: [String] - key: String! +enum PlanType { + LICENSED + METERED } -input OidcSettingsAttributes { - uriFormat: String - authMethod: OidcAuthMethod! - uriFormats: [String] - domainKey: String - subdomain: Boolean +enum PaymentPeriod { + MONTHLY + YEARLY } -input RecipeValidationAttributes { - type: ValidationType! - regex: String - message: String! +enum LineItemDimension { + USER + CLUSTER } input PlanAttributes { @@ -3056,123 +2956,223 @@ input UpdatablePlanAttributes { serviceLevels: [ServiceLevelAttributes] } -input GroupAttributes { +input ServiceLevelAttributes { + maxSeverity: Int + minSeverity: Int + responseTime: Int +} + +input PlanMetadataAttributes { + freeform: Yaml + features: [PlanFeatureAttributes] +} + +input PlanFeatureAttributes { name: String! - description: String - global: Boolean + description: String! } -input RoleAttributes { - name: String - description: String - repositories: [String] - roleBindings: [BindingAttributes] - permissions: [Permission] +input PlanLineItemAttributes { + included: [LimitAttributes] + items: [LineItemAttributes] } -type ChangeInstructions { - script: String - instructions: String +input LimitAttributes { + dimension: String! + quantity: Int! } -input RecipeTestAttributes { - type: TestType! - message: String +input LineItemAttributes { name: String! - args: [TestArgumentAttributes] + dimension: String! + cost: Int! + period: String! + type: PlanType } -input IntegrationAttributes { - name: String! - icon: UploadOrUrl - sourceUrl: String - description: String - type: String - spec: Yaml - tags: [TagAttributes] +input SubscriptionAttributes { + lineItems: SubscriptionLineItemAttributes } -input WebhookAttributes { - url: String! +input SubscriptionLineItemAttributes { + items: [LimitAttributes] } -type Follower { +type Plan { id: ID! - user: User! - incident: Incident - preferences: NotificationPreferences + name: String! + default: Boolean + visible: Boolean! + cost: Int! + period: String + lineItems: PlanLineItems + metadata: PlanMetadata + serviceLevels: [ServiceLevel] insertedAt: DateTime updatedAt: DateTime } -"An external repository contributor" -type Contributor { +type PlatformPlan { id: ID! - user: User + name: String! + visible: Boolean! + cost: Int! + period: PaymentPeriod! + enterprise: Boolean + trial: Boolean + features: PlanFeatures + lineItems: [PlatformPlanItem] insertedAt: DateTime updatedAt: DateTime } -enum CloudProvider { - AWS +type PlatformPlanItem { + name: String! + dimension: LineItemDimension! + externalId: String + cost: Int! + period: PaymentPeriod! } -type ImageLayer { - digest: String - diffId: String +type PlanFeatures { + vpn: Boolean + userManagement: Boolean + audit: Boolean + databaseManagement: Boolean + cd: Boolean } -type RolloutDelta { - delta: Delta - payload: Rollout +type ServiceLevel { + maxSeverity: Int + minSeverity: Int + responseTime: Int } -type CategoryInfo { - category: Category - count: Int - tags(after: String, first: Int, before: String, last: Int, q: String): GroupedTagConnection +type Invoice { + number: String! + amountDue: Int! + amountPaid: Int! + currency: String! + status: String + hostedInvoiceUrl: String + paymentIntent: PaymentIntent + createdAt: DateTime + lines: [InvoiceItem] } -type OauthInfo { - provider: OauthProvider! - authorizeUrl: String! +type PaymentMethod { + id: String + card: Card + type: String + isDefault: Boolean } -type SlimSubscription { +type PaymentIntent { + id: String + description: String + clientSecret: String + amount: Int + captureMethod: String + currency: String + nextAction: NextAction + status: String +} + +type SetupIntent { + id: String + clientSecret: String + nextAction: NextAction + paymentMethodTypes: [String] + status: String +} + +type NextAction { + type: String + redirectToUrl: RedirectToUrl +} + +type RedirectToUrl { + url: String + returnUrl: String +} + +type RepositorySubscription { id: ID! + externalId: String + customerId: String lineItems: SubscriptionLineItems + installation: Installation plan: Plan + invoices(after: String, first: Int, before: String, last: Int): InvoiceConnection } -type PersistedToken { - id: ID - token: String - audits(after: String, first: Int, before: String, last: Int): PersistedTokenAuditConnection - metrics: [GeoMetric] +type PlatformSubscription { + id: ID! + externalId: String + lineItems: [PlatformSubscriptionLineItems] + plan: PlatformPlan + trialUntil: DateTime + latestInvoice: Invoice insertedAt: DateTime updatedAt: DateTime } -type GroupedTagConnection { - pageInfo: PageInfo! - edges: [GroupedTagEdge] +type PlatformSubscriptionLineItems { + dimension: LineItemDimension! + quantity: Int! + externalId: String } -type OuathConfiguration { - issuer: String - authorizationEndpoint: String - tokenEndpoint: String - jwksUri: String - userinfoEndpoint: String +type Card { + id: ID! + last4: String! + expMonth: Int! + expYear: Int! + brand: String! + name: String +} + +type InvoiceItem { + amount: Int! + currency: String! + description: String +} + +type PlanLineItems { + included: [Limit] + items: [LineItem] +} + +type PlanMetadata { + freeform: Map + features: [PlanFeature] +} + +type PlanFeature { + name: String! + description: String! +} + +type SubscriptionLineItems { + items: [Limit] +} + +type LineItem { + name: String! + dimension: String! + cost: Int! + period: String + type: PlanType } -type TerraformInstallation { - id: ID - terraform: Terraform - installation: Installation - version: Version - insertedAt: DateTime - updatedAt: DateTime +type Limit { + dimension: String! + quantity: Int! +} + +type InvoiceConnection { + pageInfo: PageInfo! + edges: [InvoiceEdge] } type CardConnection { @@ -3180,214 +3180,221 @@ type CardConnection { edges: [CardEdge] } -type GroupMemberConnection { +type PaymentMethodConnection { pageInfo: PageInfo! - edges: [GroupMemberEdge] + edges: [PaymentMethodEdge] } -type FileConnection { +type RepositorySubscriptionConnection { pageInfo: PageInfo! - edges: [FileEdge] + edges: [RepositorySubscriptionEdge] } -type InviteConnection { - pageInfo: PageInfo! - edges: [InviteEdge] +enum NotificationType { + MESSAGE + INCIDENT_UPDATE + MENTION + LOCKED + PENDING } -type TestConnection { - pageInfo: PageInfo! - edges: [TestEdge] +enum ResetTokenType { + PASSWORD + EMAIL } -enum Permission { - INSTALL - PUBLISH - BILLING - USERS - SUPPORT - INTEGRATIONS +enum LoginMethod { + PASSWORD + PASSWORDLESS + GOOGLE + GITHUB + SSO } -type IntegrationWebhookConnection { - pageInfo: PageInfo! - edges: [IntegrationWebhookEdge] +enum UserEventStatus { + OK + ERROR } -type TerraformConnection { - pageInfo: PageInfo! - edges: [TerraformEdge] +enum OnboardingState { + NEW + ONBOARDED + INSTALLED + ACTIVE } -enum LineItemDimension { - USER - CLUSTER +enum OnboardingChecklistState { + NEW + CONFIGURED + CONSOLE_INSTALLED + FINISHED } -type IncidentHistoryConnection { - pageInfo: PageInfo! - edges: [IncidentHistoryEdge] +enum ExternalOidcProvider { + GITHUB_ACTIONS } -type ChartConnection { - pageInfo: PageInfo! - edges: [ChartEdge] +input UserAttributes { + name: String + email: String + password: String + avatar: UploadOrUrl + onboarding: OnboardingState + onboardingChecklist: OnboardingChecklistAttributes + loginMethod: LoginMethod + roles: RolesAttributes + confirm: String + groupIds: [ID!] } -type PersistedTokenAuditConnection { - pageInfo: PageInfo! - edges: [PersistedTokenAuditEdge] +input RolesAttributes { + admin: Boolean } -type OauthIntegration { - id: ID! - service: OauthService! - account: Account - insertedAt: DateTime - updatedAt: DateTime +input OnboardingChecklistAttributes { + status: OnboardingChecklistState + dismissed: Boolean } -type PackageScan { - id: ID! - grade: ImageGrade - violations: [ScanViolation] - errors: [ScanError] - insertedAt: DateTime - updatedAt: DateTime +input PublisherAttributes { + name: String + description: String + avatar: UploadOrUrl + phone: String + address: AddressAttributes + community: CommunityAttributes } -type VersionConnection { - pageInfo: PageInfo! - edges: [VersionEdge] +input AddressAttributes { + name: String + line1: String! + line2: String + city: String! + state: String + country: String! + zip: String! } -type DockerRepositoryConnection { - pageInfo: PageInfo! - edges: [DockerRepositoryEdge] +input WebhookAttributes { + url: String! } -type RecipeConnection { - pageInfo: PageInfo! - edges: [RecipeEdge] +input ResetTokenAttributes { + type: ResetTokenType! + email: String } -type PlatformPlanItem { +input ResetTokenRealization { + password: String +} + +input PublicKeyAttributes { name: String! - dimension: LineItemDimension! - externalId: String - cost: Int! - period: PaymentPeriod! + content: String! } -type InvoiceItem { - amount: Int! - currency: String! - description: String +input UserEventAttributes { + event: String! + data: String + status: UserEventStatus } -type Terraform { - id: ID - name: String - readme: String - description: String - valuesTemplate: String - latestVersion: String - dependencies: Dependencies - package: String - repository: Repository - editable: Boolean - installation: TerraformInstallation - insertedAt: DateTime - updatedAt: DateTime +input KeyBackupAttributes { + name: String! + repositories: [String] + key: String! } -type AppLink { - url: String - description: String +input TrustRelationshipAttributes { + issuer: String! + trust: String! + scopes: [String!] } -type IntegrationWebhook { +type User { id: ID! + name: String! - url: String! - actions: [String] - secret: String! - account: Account - logs(after: String, first: Int, before: String, last: Int): WebhookLogConnection - insertedAt: DateTime - updatedAt: DateTime -} -type Dependency { - type: DependencyType - name: String - repo: String - version: String - optional: Boolean -} + email: String! + + phone: String + + address: Address + + loginMethod: LoginMethod + + onboarding: OnboardingState + + onboardingChecklist: OnboardingChecklist + + defaultQueueId: ID + + serviceAccount: Boolean + + emailConfirmed: Boolean + + emailConfirmBy: DateTime + + provider: Provider + + roles: Roles + + "the groups attached to this user, only fetch this when querying an individual user" + groups: [Group] + + "the roles attached to this user, only fetch this when querying an individual user" + boundRoles: [Role] + + publisher: Publisher + + account: Account! + + impersonationPolicy: ImpersonationPolicy + + trustRelationships: [OidcTrustRelationship] + + invites: [Invite] + + jwt: String + + hasInstallations: Boolean + + demoing: Boolean + + hasShell: Boolean + + avatar: String + + backgroundColor: String -type ImpersonationPolicy { - id: ID! - bindings: [ImpersonationPolicyBinding] - insertedAt: DateTime - updatedAt: DateTime -} + "If a user has reached the demo project usage limit." + demoed: Boolean -type DnsAccessPolicy { - id: ID! - bindings: [PolicyBinding] - insertedAt: DateTime - updatedAt: DateTime -} + cards(after: String, first: Int, before: String, last: Int): CardConnection -type Vulnerability { - id: ID! - title: String - description: String - vulnerabilityId: String - package: String - installedVersion: String - fixedVersion: String - source: String - url: String - severity: VulnGrade - score: Float - cvss: Cvss - layer: ImageLayer insertedAt: DateTime + updatedAt: DateTime } -"Application categories." -enum Category { - DEVOPS - DATABASE - MESSAGING - SECURITY - DATA - PRODUCTIVITY - NETWORK - STORAGE +type Roles { + admin: Boolean } -type UpgradeConfig { - paths: [UpgradePath] +type OnboardingChecklist { + status: OnboardingChecklistState + dismissed: Boolean } -type ImpersonationPolicyBinding { +type ImpersonationPolicy { id: ID! - user: User - group: Group + bindings: [ImpersonationPolicyBinding] insertedAt: DateTime updatedAt: DateTime } -type MetricTag { - name: String! - value: String! -} - -type OidcProviderBinding { +type ImpersonationPolicyBinding { id: ID! user: User group: Group @@ -3395,503 +3402,495 @@ type OidcProviderBinding { updatedAt: DateTime } -enum MediaType { - IMAGE - VIDEO - AUDIO - OTHER - PDF -} - -enum OauthService { - ZOOM -} - -input RecipeReference { - repo: String! - name: String! -} - -type LoginMethodResponse { - loginMethod: LoginMethod! - token: String - authorizeUrl: String -} - -enum PlanType { - LICENSED - METERED -} - -type RepositorySubscriptionEdge { - node: RepositorySubscription - cursor: String +type Address { + name: String + line1: String + line2: String + city: String + state: String + country: String + zip: String } -type IncidentMessage { +type OidcTrustRelationship { id: ID! - text: String! - incident: Incident! - creator: User! - reactions: [Reaction] - file: File - entities: [MessageEntity] + issuer: String! + trust: String! + scopes: [String!] insertedAt: DateTime updatedAt: DateTime } -enum WebhookLogState { - SENDING - DELIVERED - FAILED -} - -type PersistedTokenEdge { - node: PersistedToken - cursor: String -} - -enum MessageEntityType { - MENTION - EMOJI -} - -enum Datatype { - STRING - INT - BOOL - DOMAIN - BUCKET - FILE - FUNCTION - PASSWORD -} - -type TerraformInstallationEdge { - node: TerraformInstallation - cursor: String -} - -type NotificationEdge { - node: Notification - cursor: String -} - -type OauthResponse { - redirectTo: String! -} - -type PublisherEdge { - node: Publisher - cursor: String -} - -type UserEdge { - node: User - cursor: String +type PersistedToken { + id: ID + token: String + audits(after: String, first: Int, before: String, last: Int): PersistedTokenAuditConnection + metrics: [GeoMetric] + insertedAt: DateTime + updatedAt: DateTime } -type IncidentMessageEdge { - node: IncidentMessage - cursor: String +type PersistedTokenAudit { + id: ID + ip: String + timestamp: DateTime + count: Int + city: String + country: String + latitude: String + longitude: String + insertedAt: DateTime + updatedAt: DateTime } -type DeferredUpdateEdge { - node: DeferredUpdate - cursor: String +type Publisher { + id: ID + name: String! + description: String + billingAccountId: String + phone: String + address: Address + community: Community + owner: User + avatar: String + backgroundColor: String + repositories: [Repository] + insertedAt: DateTime + updatedAt: DateTime } -type ChartInstallationEdge { - node: ChartInstallation - cursor: String +type Webhook { + id: ID + url: String + secret: String + user: User + insertedAt: DateTime + updatedAt: DateTime } -type IncidentEdge { - node: Incident - cursor: String +type WebhookResponse { + statusCode: Int! + body: String + headers: Map } -type Audit { +type ResetToken { id: ID! - action: String! - ip: String - city: String - country: String - latitude: String - longitude: String - actor: User - group: Group - role: Role - user: User - integrationWebhook: IntegrationWebhook - repository: Repository - version: Version - image: DockerImage + externalId: ID! + type: ResetTokenType! + user: User! + email: String! insertedAt: DateTime updatedAt: DateTime } -type DemoProject { +type PublicKey { id: ID! - projectId: String! - credentials: String - ready: Boolean - state: DemoProjectState + name: String! + content: String! + digest: String! + user: User! insertedAt: DateTime updatedAt: DateTime } -type ApplicationComponent { - group: String - name: String - kind: String - status: String +type EabCredential { + id: ID! + cluster: String! + provider: Provider! + keyId: String! + hmacKey: String! + insertedAt: DateTime + updatedAt: DateTime } -enum VulnRequirement { - NONE - REQUIRED +type LoginMethodResponse { + loginMethod: LoginMethod! + token: String + authorizeUrl: String } -type Crd { +type DeviceLogin { + loginUrl: String! + deviceToken: String! +} + +type KeyBackup { id: ID! name: String! - blob: String + repositories: [String!] + digest: String! + value: String! + user: User! insertedAt: DateTime updatedAt: DateTime } -type Card { - id: ID! - last4: String! - expMonth: Int! - expYear: Int! - brand: String! - name: String +type UserConnection { + pageInfo: PageInfo! + edges: [UserEdge] } -type OnboardingChecklist { - status: OnboardingChecklistState - dismissed: Boolean +type PublisherConnection { + pageInfo: PageInfo! + edges: [PublisherEdge] } -enum IncidentSort { - INSERTED_AT - TITLE - STATUS - SEVERITY +type WebhookConnection { + pageInfo: PageInfo! + edges: [WebhookEdge] } -type Limit { - dimension: String! - quantity: Int! +type PersistedTokenConnection { + pageInfo: PageInfo! + edges: [PersistedTokenEdge] } -input FollowerAttributes { - preferences: NotificationPreferencesAttributes +type PublicKeyConnection { + pageInfo: PageInfo! + edges: [PublicKeyEdge] } -type Dependencies { - dependencies: [Dependency] - providers: [Provider] - secrets: [String] - providerVsn: String - cliVsn: String - application: Boolean - providerWirings: Map - outputs: Map - wirings: Wirings - breaking: Boolean - wait: Boolean - instructions: ChangeInstructions +type PersistedTokenAuditConnection { + pageInfo: PageInfo! + edges: [PersistedTokenAuditEdge] } -input RecipeConfigurationAttributes { - type: Datatype! - name: String! - default: String - documentation: String - longform: String - placeholder: String - condition: RecipeConditionAttributes - validation: RecipeValidationAttributes - functionName: String - optional: Boolean +type KeyBackupConnection { + pageInfo: PageInfo! + edges: [KeyBackupEdge] } -input PlanLineItemAttributes { - included: [LimitAttributes] - items: [LineItemAttributes] +type Metric { + name: String! + tags: [MetricTag] + values: [MetricValue] } -type StepLogs { - step: TestStep - logs: [String] +type MetricTag { + name: String! + value: String! } -input NotificationPreferencesAttributes { - message: Boolean! - incidentUpdate: Boolean! - mention: Boolean! +type MetricValue { + time: DateTime + value: Int } -input VersionTagAttributes { - versionId: ID - tag: String! +type PlatformMetrics { + repositories: Int + rollouts: Int + clusters: Int + publishers: Int } -input ServiceLevelAttributes { - maxSeverity: Int - minSeverity: Int - responseTime: Int +enum Delta { + CREATE + UPDATE + DELETE } -input UserEventAttributes { - event: String! - data: String - status: UserEventStatus +enum Order { + ASC + DESC } -"The information for this upgrade" -input UpgradeAttributes { - "a simple message to explain this upgrade" - message: String! - - "the type of upgrade" - type: UpgradeType! +input TagAttributes { + tag: String! +} - "information for a config upgrade" - config: UpgradeConfigAttributes +type ClosureItem { + helm: Chart + terraform: Terraform + dep: Dependency } -input ImpersonationPolicyBindingAttributes { - id: ID - userId: ID - groupId: ID +type Tag { + id: ID! + tag: String! } -input StackAttributes { - name: String! - description: String - featured: Boolean - displayName: String - collections: [StackCollectionAttributes] - community: CommunityAttributes +enum TagGroup { + INTEGRATIONS + REPOSITORIES } -input UpgradeQueueAttributes { - name: String! - legacy: Boolean - domain: String - git: String - provider: Provider +type GroupedTag { + tag: String! + count: Int! } -type Roles { - admin: Boolean +type FileContent { + path: String! + content: String! } -type Address { - name: String - line1: String - line2: String - city: String - state: String - country: String - zip: String +type PluralConfiguration { + stripeConnectId: String + stripePublishableKey: String + registry: String + gitCommit: String } -input TestArgumentAttributes { - name: String! - repo: String! - key: String! +type GroupedTagConnection { + pageInfo: PageInfo! + edges: [GroupedTagEdge] } -"Input for creating or updating the OIDC attributes of an application installation." -input OidcAttributes { - "The redirect URIs for the OIDC provider." - redirectUris: [String] +scalar Map - "The authentication method for the OIDC provider." - authMethod: OidcAuthMethod! +scalar Yaml - "The users or groups that can login through the OIDC provider." - bindings: [BindingAttributes] -} +""" +The `DateTime` scalar type represents a date and time in the UTC +timezone. The DateTime appears in a JSON response as an ISO8601 formatted +string, including UTC timezone ("Z"). The parsed date and time string will +be converted to UTC if there is an offset. +""" +scalar DateTime -input DnsRecordAttributes { - name: String! - type: DnsRecordType! - records: [String] -} +scalar UploadOrUrl -type PlatformMetrics { - repositories: Int - rollouts: Int - clusters: Int - publishers: Int -} +type PageInfo { + "When paginating backwards, are there more items?" + hasPreviousPage: Boolean! -input ConsoleInstanceAttributes { - "the name of this instance (globally unique)" - name: String! + "When paginating forwards, are there more items?" + hasNextPage: Boolean! - "a heuristic size of this instance" - size: ConsoleSize! + "When paginating backwards, the cursor to continue." + startCursor: String - "the cloud provider to deploy to" - cloud: CloudProvider! + "When paginating forwards, the cursor to continue." + endCursor: String +} - "the region to deploy to (provider specific)" - region: String! +type GroupedTagEdge { + node: GroupedTag + cursor: String +} + +type KeyBackupEdge { + node: KeyBackup + cursor: String +} + +type PersistedTokenAuditEdge { + node: PersistedTokenAudit + cursor: String } -type OidcSettings { - uriFormat: String - uriFormats: [String] - authMethod: OidcAuthMethod! - domainKey: String - subdomain: Boolean +type PublicKeyEdge { + node: PublicKey + cursor: String } -input SubscriptionAttributes { - lineItems: SubscriptionLineItemAttributes +type PersistedTokenEdge { + node: PersistedToken + cursor: String } -type User { - id: ID! +type WebhookEdge { + node: Webhook + cursor: String +} - name: String! +type PublisherEdge { + node: Publisher + cursor: String +} - email: String! +type UserEdge { + node: User + cursor: String +} - phone: String +type RepositorySubscriptionEdge { + node: RepositorySubscription + cursor: String +} - address: Address +type PaymentMethodEdge { + node: PaymentMethod + cursor: String +} - loginMethod: LoginMethod +type CardEdge { + node: Card + cursor: String +} - onboarding: OnboardingState +type InvoiceEdge { + node: Invoice + cursor: String +} - onboardingChecklist: OnboardingChecklist +type IntegrationEdge { + node: Integration + cursor: String +} - defaultQueueId: ID +type InstallationEdge { + node: Installation + cursor: String +} - serviceAccount: Boolean +type RepositoryEdge { + node: Repository + cursor: String +} - emailConfirmed: Boolean +type RecipeEdge { + node: Recipe + cursor: String +} - emailConfirmBy: DateTime +type StackEdge { + node: Stack + cursor: String +} - provider: Provider +type ChartInstallationEdge { + node: ChartInstallation + cursor: String +} - roles: Roles +type ChartEdge { + node: Chart + cursor: String +} - "the groups attached to this user, only fetch this when querying an individual user" - groups: [Group] +type TerraformInstallationEdge { + node: TerraformInstallation + cursor: String +} - "the roles attached to this user, only fetch this when querying an individual user" - boundRoles: [Role] +type TerraformEdge { + node: Terraform + cursor: String +} - publisher: Publisher +type DockerImageEdge { + node: DockerImage + cursor: String +} - account: Account! +type DockerRepositoryEdge { + node: DockerRepository + cursor: String +} - impersonationPolicy: ImpersonationPolicy +type VersionEdge { + node: Version + cursor: String +} - trustRelationships: [OidcTrustRelationship] +type InviteEdge { + node: Invite + cursor: String +} - invites: [Invite] +type WebhookLogEdge { + node: WebhookLog + cursor: String +} - jwt: String +type IntegrationWebhookEdge { + node: IntegrationWebhook + cursor: String +} - hasInstallations: Boolean +type RoleEdge { + node: Role + cursor: String +} - demoing: Boolean +type GroupMemberEdge { + node: GroupMember + cursor: String +} - hasShell: Boolean +type GroupEdge { + node: Group + cursor: String +} - avatar: String +type FollowerEdge { + node: Follower + cursor: String +} - backgroundColor: String +type NotificationEdge { + node: Notification + cursor: String +} - "If a user has reached the demo project usage limit." - demoed: Boolean +type FileEdge { + node: File + cursor: String +} - cards(after: String, first: Int, before: String, last: Int): CardConnection +type IncidentHistoryEdge { + node: IncidentHistory + cursor: String +} - insertedAt: DateTime +type IncidentMessageEdge { + node: IncidentMessage + cursor: String +} - updatedAt: DateTime +type IncidentEdge { + node: Incident + cursor: String } -type TerraformProvider { - name: Provider - content: String +type AuditEdge { + node: Audit + cursor: String } -type OidcProvider { - id: ID! - clientSecret: String! - clientId: String! - redirectUris: [String] - authMethod: OidcAuthMethod! - configuration: OuathConfiguration - consent: ConsentRequest - invites: [Invite] - bindings: [OidcProviderBinding] - insertedAt: DateTime - updatedAt: DateTime +type DeferredUpdateEdge { + node: DeferredUpdate + cursor: String } -enum Order { - ASC - DESC +type UpgradeEdge { + node: Upgrade + cursor: String } -enum ScmProvider { - GITHUB - GITLAB - MANUAL - DEMO +type RolloutEdge { + node: Rollout + cursor: String } -type TestDelta { - delta: Delta - payload: Test +type OidcLoginEdge { + node: OidcLogin + cursor: String } -type UpgradeQueueDelta { - delta: Delta - payload: UpgradeQueue +type DnsRecordEdge { + node: DnsRecord + cursor: String } -type OidcTrustRelationship { - id: ID! - issuer: String! - trust: String! - scopes: [String!] - insertedAt: DateTime - updatedAt: DateTime +type DnsDomainEdge { + node: DnsDomain + cursor: String } -scalar Map +type TestEdge { + node: Test + cursor: String +} -type Group { - id: ID! - name: String! - global: Boolean - description: String - insertedAt: DateTime - updatedAt: DateTime +type ClusterEdge { + node: Cluster + cursor: String } -type TestStep { - id: ID! - status: TestStatus! - name: String! - description: String! - hasLogs: Boolean - insertedAt: DateTime - updatedAt: DateTime +type ConsoleInstanceEdge { + node: ConsoleInstance + cursor: String }