JetPluginSDK.API.GraphQL behaviour (JetPluginSDK v0.2.0)
This module helps to define the GraphQL API schema for Jet plugins.
define schema
defmodule MySchema do
use JetPluginSDK.API.GraphQL,
query_fields: [
do:
field :some_query, type: :string do
resolve &__MODULE__.some_query/2
end
],
mutation_fields: [
do:
field :some_mutation, type: :string do
resolve &__MODULE__.some_mutation/2
end
]
# define input_object for plugin_config
plugin_config do
field :foo, :string
end
@impl JetPluginSDK.API.GraphQL
def initialize(_args, _resolution) do
# implement initialize here
end
@impl JetPluginSDK.API.GraphQL
def install(_args, _resolution) do
# implement install here
end
@impl JetPluginSDK.API.GraphQL
def update(_args, _resolution) do
# implement update here
end
@impl JetPluginSDK.API.GraphQL
def uninstall(_args, _resolution) do
# implement uninstall here
end
@impl JetPluginSDK.API.GraphQL
def health_check(_args, _resolution) do
# implement health check here
end
end
generate callbacks via setting tenant_module
defmodule MySchema do
use JetPluginSDK.API.GraphQL,
tenant_module: MyApp.Tenant
plugin_config do
field :foo, :string
end
end
Summary
Functions
Jet should call jet_plugin_install
and jet_plugin_update
with config defined in this type.
Types
@type callback_response() :: callback_response_ok() | callback_response_async() | callback_response_error()
@type capability() :: database_capability()
@type database_capability() :: %{__capability_type__: :database, enable: boolean()}
@type initialize_response() :: manifest() | callback_response_async()
@type manifest() :: %{ optional(:api_endpoint) => String.t(), optional(:description) => String.t(), version: String.t(), capabilities: [capability()] }
Callbacks
@callback health_check( args :: %{}, resolution() ) :: {:ok, callback_response()} | {:error, term()}
@callback initialize( args :: %{}, resolution() ) :: {:ok, initialize_response()} | {:error, term()}
@callback install( args :: %{ project_id: String.t(), env_id: String.t(), instance_id: String.t(), config: JetPluginSDK.Tenant.config(), capabilities: JetPluginSDK.Tenant.capabilities() }, resolution() ) :: {:ok, callback_response()} | {:error, term()}
@callback uninstall( args :: %{project_id: String.t(), env_id: String.t(), instance_id: String.t()}, resolution() ) :: {:ok, callback_response_ok() | callback_response_async()} | {:error, term()}
@callback update( args :: %{ project_id: String.t(), env_id: String.t(), instance_id: String.t(), config: JetPluginSDK.Tenant.config(), capabilities: JetPluginSDK.Tenant.capabilities() }, resolution() ) :: {:ok, callback_response()} | {:error, term()}