GitHub Raw JSON API

wasmerio / wasmer

20,951 Rust

🚀 Fast, secure, lightweight containers based on WebAssembly

wasmer Specification

Located in lib/backend-api/schema.graphql on branch HEAD

Unknown GRAPHQL 161.9 KB
Raw GRAPHQL Specification
type AAAARecord implements Node & DNSRecordInterface {
	address: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

type APIKey implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	namespace: Namespace!
	createdBy: User!
	createdAt: DateTime!
	deletedAt: DateTime
	name: String!
	note: String
	lastUsedAt: DateTime
	maskedKey: String!
}

type APIKeyConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [APIKeyEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `APIKey` and its cursor.
"""
type APIKeyEdge {
	"""
	The item at the end of the edge
	"""
	node: APIKey!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type APIToken implements Node {
	user: User!
	identifier: String
	createdAt: DateTime!
	revokedAt: DateTime
	lastUsedAt: DateTime
	nonceSet(offset: Int, before: String, after: String, first: Int, last: Int): NonceConnection!
	"""
	The ID of the object
	"""
	id: ID!
}

type APITokenConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [APITokenEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int!
}

"""
A Relay edge containing a `APIToken` and its cursor.
"""
type APITokenEdge {
	"""
	The item at the end of the edge
	"""
	node: APIToken!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type ARecord implements Node & DNSRecordInterface {
	address: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

input AcceptAppTransferRequestInput {
	appTransferRequestId: ID!
	clientMutationId: String
}

type AcceptAppTransferRequestPayload {
	clientMutationId: String
	app: DeployApp!
	appTransferRequest: AppTransferRequest!
}

input AcceptNamespaceCollaboratorInviteInput {
	inviteId: ID!
	clientMutationId: String
}

type AcceptNamespaceCollaboratorInvitePayload {
	namespaceCollaboratorInvite: NamespaceCollaboratorInvite!
	clientMutationId: String
}

input AcceptPackageCollaboratorInviteInput {
	inviteId: ID!
	clientMutationId: String
}

type AcceptPackageCollaboratorInvitePayload {
	clientMutationId: String
	packageCollaboratorInvite: PackageCollaboratorInvite!
}

input AcceptPackageTransferRequestInput {
	packageTransferRequestId: ID!
	clientMutationId: String
}

type AcceptPackageTransferRequestPayload {
	clientMutationId: String
	package: Package!
	packageTransferRequest: PackageTransferRequest!
}

input AcceptTOSInput {
	clientMutationId: String
}

"""
Viewer accepts the latest ToS.
"""
type AcceptTOSPayload {
	clientMutationId: String
	TOS: TermsOfService!
}

type ActivityEvent implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	body: EventBody!
	actorIcon: String!
	createdAt: DateTime!
}

type ActivityEventConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [ActivityEventEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `ActivityEvent` and its cursor.
"""
type ActivityEventEdge {
	"""
	The item at the end of the edge
	"""
	node: ActivityEvent!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input AddPaymentInput {
	clientMutationId: String
}

"""
Add stripe payment to the user
"""
type AddPaymentPayload {
	clientMutationId: String
	customerSecret: String!
}

input AddSshAuthorizedKeyInput {
	"""
	SSH User ID
	"""
	sshUserId: ID!
	publicKey: String!
	name: String
	clientMutationId: String
}

"""
Add an SSH authorized key to an SSH user.
"""
type AddSshAuthorizedKeyPayload {
	authorizedKey: SshAuthorizedKey!
	clientMutationId: String
}

type AggregateMetrics {
	cpuTime: String!
	memoryTime: String!
	ingress: String!
	egress: String!
	noRequests: String!
	noFailedRequests: String!
	monthlyCost: String!
}

type AppAlias implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	updatedAt: DateTime!
	lastCheckedAt: DateTime
	firstCheckedAt: DateTime
	name: String!
	app: DeployApp!
	isDefault: Boolean!
	hostname: String!
	text: String!
	kind: DeployAppAliasKindChoices!
	redirectsTo: AppAlias
	url: String!
	state: AppAliasVerificationStates!
	"""
	List of records backend expects to move forward with domain verification
	"""
	expectedDnsRecords: [AppAliasDNSRecord!]!
	"""
	HTTP code for redirection
	"""
	redirectionHttpCode: HTTPRedirectType
	"""
	list of AppAlias objects that redirect to this one.
	"""
	redirectsFrom: [AppAlias!]!
}

type AppAliasConnection {
	"""
	Contains the nodes in this connection.
	"""
	edges: [AppAliasEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int!
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
}

type AppAliasDNSRecord {
	recordType: String!
	host: String!
	value: String!
}

"""
A Relay edge containing a `AppAlias` and its cursor.
"""
type AppAliasEdge {
	"""
	The item at the end of the edge
	"""
	node: AppAlias!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

"""
An enumeration.
"""
enum AppAliasSortBy {
	NEWEST
	OLDEST
}

"""
An enumeration.
"""
enum AppAliasVerificationStates {
	UNVERIFIED
	VERIFIED
	APEX_WITHOUT_REDIRECTION
}

input AppCdnCacheConfigUpdate {
	enabled: Boolean
}

type AppCdnCacheMutationPayload {
	success: Boolean!
}

input AppConfigV1 {
	kind: String = "wasmer.io/App.v0"
	appId: ID
	name: String!
	description: String
	package: String!
}

type AppDatabase implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	username: String!
	app: DeployApp!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	host: String!
	port: String!
	password: String
	phpmyadminUrl: String
	dbExplorerUrl: String
}

type AppDatabaseConfig implements Node {
	id: ID!
}

type AppDatabaseConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [AppDatabaseEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int!
}

"""
A Relay edge containing a `AppDatabase` and its cursor.
"""
type AppDatabaseEdge {
	"""
	The item at the end of the edge
	"""
	node: AppDatabase!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input AppDomainRedirectRules {
	"""
	Domain to redirect to.
	"""
	to: String!
	"""
	Type of redirection; sets the http code appropriately.
	"""
	httpCode: HTTPRedirectType!
}

input AppFilter {
	count: Int = 1000
	sortBy: SearchOrderSort = DESC
	"""
	Filter apps by deployed by.
	"""
	deployedBy: String
	"""
	Filter apps last deployed after this date.
	"""
	lastDeployedAfter: DateTime
	"""
	Filter apps last deployed before this date.
	"""
	lastDeployedBefore: DateTime
	"""
	Filter apps by owner.
	"""
	owner: String
	"""
	Order apps by field.
	"""
	orderBy: AppOrderBy = CREATED_DATE
	"""
	Filter apps by client name.
	"""
	clientName: String
}

type AppLimit implements Node {
	id: ID!
}

type AppMail implements Node {
	emailAddr: String!
	login: String!
	passwordSecret: Secret!
	"""
	The ID of the object
	"""
	id: ID!
}

enum AppOrderBy {
	PUBLISHED_DATE
	CREATED_DATE
}

type AppRegion implements Node {
	name: String!
	country: String!
	city: String!
	supportsVolumes: Boolean!
	supportsDbs: Boolean!
	active: Boolean!
	"""
	The ID of the object
	"""
	id: ID!
}

type AppRegionConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [AppRegionEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int!
}

"""
A Relay edge containing a `AppRegion` and its cursor.
"""
type AppRegionEdge {
	"""
	The item at the end of the edge
	"""
	node: AppRegion!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type AppScreenshot implements Node {
	id: ID!
}

"""
An enumeration.
"""
enum AppScreenshotAppearance {
	LIGHT
	DARK
}

"""
An enumeration.
"""
enum AppScreenshotViewportSize {
	MOBILE
	DESKTOP
}

type AppSshServer implements Node {
	enabled: Boolean!
	users(offset: Int, before: String, after: String, first: Int, last: Int): SshUserConnection!
	"""
	The ID of the object
	"""
	id: ID!
}

type AppTemplate implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	slug: String!
	description: String!
	demoUrl: String!
	repoUrl: String!
	rootDir: String
	branch: String
	category: String!
	isPublic: Boolean!
	createdAt: DateTime!
	updatedAt: DateTime!
	readme: String!
	useCases: JSONString!
	repoLicense: String!
	usingPackage: Package
	canDeployWithoutRepo: Boolean!
	completionTimeInSeconds: Int!
	highlighted: Boolean!
	defaultImage: String
	defaultRepositoryCloneName: String
	framework: String!
	templateFramework: TemplateFramework
	language: String
	templateLanguage: TemplateLanguage
}

type AppTemplateCategory implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	slug: String!
	description: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	appTemplates(offset: Int, before: String, after: String, first: Int, last: Int): AppTemplateConnection!
}

type AppTemplateCategoryConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [AppTemplateCategoryEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `AppTemplateCategory` and its cursor.
"""
type AppTemplateCategoryEdge {
	"""
	The item at the end of the edge
	"""
	node: AppTemplateCategory!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type AppTemplateConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [AppTemplateEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `AppTemplate` and its cursor.
"""
type AppTemplateEdge {
	"""
	The item at the end of the edge
	"""
	node: AppTemplate!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input AppTemplateFilter {
	count: Int = 1000
	sortBy: SearchOrderSort = DESC
	"""
	Order app templates by field.
	"""
	orderBy: AppTemplateOrderBy = HIGHLIGHTED
	"""
	Filter by app template framework
	"""
	framework: String
	"""
	Filter by app template language
	"""
	language: String
	"""
	Filter by one or more of the use-cases for the app template
	"""
	useCases: [String]
}

enum AppTemplateOrderBy {
	CREATED_DATE
	HIGHLIGHTED
}

"""
An enumeration.
"""
enum AppTemplatesSortBy {
	NEWEST
	OLDEST
	POPULAR
}

type AppTransferRequest implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	requestedBy: User!
	previousOwnerObjectId: Int!
	newOwnerObjectId: Int!
	app: DeployApp!
	approvedBy: User
	declinedBy: User
	createdAt: DateTime!
	expiresAt: DateTime!
	closedAt: DateTime
	previousOwner: Owner!
	newOwner: Owner!
}

input AppV1Spec {
	aliases: [String] = []
	workload: WorkloadV2!
}

type AppVersionVolume {
	id: ID!
	name: String!
	s3Url: String
	mountPaths: [AppVersionVolumeMountPath!]!
	size: BigInt
	usedSize: BigInt
	explorerUrl: String
}

type AppVersionVolumeMountPath {
	path: String!
	subpath: String
}

type AppVolume implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	app: DeployApp
	region: AppRegion!
	volumeId: String!
	mountPath: String!
	maxSizeBytes: BigInt!
	isAddedByUi: Boolean!
	s3Enabled: Boolean!
	s3: S3
	s3Url: URL
	explorerUrl: URL
}

type AppVolumeConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [AppVolumeEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int!
}

"""
A Relay edge containing a `AppVolume` and its cursor.
"""
type AppVolumeEdge {
	"""
	The item at the end of the edge
	"""
	node: AppVolume!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input ArchivePackageInput {
	packageId: ID!
	clientMutationId: String
}

type ArchivePackagePayload {
	clientMutationId: String
	package: Package!
}

input AttachVaultInput {
	"""
	ID of app to which the vault will be attached.
	"""
	appId: ID!
	"""
	ID of vault to attach.
	"""
	vaultId: ID!
	clientMutationId: String
}

"""
Attach vault to an app
"""
type AttachVaultPayload {
	clientMutationId: String
	app: DeployApp!
}

enum AutoBuildDeployAppLogKind {
	LOG
	PREPARING_TO_DEPLOY_STATUS
	FETCHING_PLAN_STATUS
	BUILD_STATUS
	DEPLOY_STATUS
	COMPLETE
	FAILED
}

input AutobuildConfigForRepoInput {
	"""
	The repo URL
	"""
	repoUrl: String!
	"""
	The path to build from
	"""
	basePath: String @deprecated(reason: "Please use root_dir instead")
	"""
	The preset to use
	"""
	presetName: String
	"""
	The root directory to build from
	"""
	rootDir: String
	"""
	The branch to use
	"""
	branch: String
	clientMutationId: String
}

"""
Get the autobuild config for a given repo
"""
type AutobuildConfigForRepoPayload {
	clientMutationId: String
	"""
	The build configuration
	"""
	buildConfig: BuildConfig
	"""
	List of apps deployed with this repo.
	"""
	deployedApps: DeployAppConnection @deprecated(reason: "This field is not used anymore")
}

input AutobuildConfigForZipUploadInput {
	"""
	The Zip upload URL
	"""
	uploadUrl: String!
	"""
	The preset to use
	"""
	presetName: String
	clientMutationId: String
}

"""
Get the autobuild config for a given zip upload URL
"""
type AutobuildConfigForZipUploadPayload {
	clientMutationId: String
	"""
	The build configuration
	"""
	buildConfig: BuildConfig
	"""
	List of apps deployed with this repo.
	"""
	deployedApps: DeployAppConnection @deprecated(reason: "This field is not used anymore")
}

input AutobuildDeploymentExtraData {
	wordpress: WordpressDeploymentExtraData = null
}

type AutobuildDeploymentStatus {
	buildId: UUID!
	status: StatusEnum!
	appVersion: DeployAppVersion
}

"""
Log entry for Deploying app from github repo
"""
type AutobuildLog {
	"""
	Kind of log message.
	"""
	kind: AutoBuildDeployAppLogKind!
	"""
	Log message
	"""
	message: String
	appVersion: DeployAppVersion
	"""
	Timestamp in nanoseconds
	"""
	timestamp: String!
	"""
	ISO 8601 string in UTC
	"""
	datetime: DateTime!
	"""
	Log stream
	"""
	stream: LogStream
}

type AutobuildRepository implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	appVersion: DeployAppVersion
	buildId: UUID!
	buildCmd: String
	installCmd: String
	user: User!
	name: String!
	namespace: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	appName: String
	repoUrl: String!
	prevCommitHash: String
	commitHash: String!
	commitMessage: String!
	commitAuthorUsername: String!
	reference: String
	status: StatusEnum!
	logUrl: String
	commitUrl: String
	buildConfiguration: BuildConfiguration
	logs(startingFrom: Float, startingFromIso: DateTime, until: Float, streams: [LogStream], instanceIds: [String], requestId: String, before: String, after: String, first: Int, last: Int): LogConnection!
}

type AutobuildZipUpload implements Node {
	id: ID!
}

input BanAppInput {
	"""
	ID of app to disable
	"""
	appId: ID!
	"""
	Disable with this reason
	"""
	reason: String!
	"""
	Blackhole the app (no network access)
	"""
	blackholed: Boolean = false
	clientMutationId: String
}

"""
Ban app with a reason.
"""
type BanAppPayload {
	clientMutationId: String
	app: DeployApp!
}

"""
The `BigInt` scalar type represents non-fractional whole numeric values.
`BigInt` is not constrained to 32-bit like the `Int` type and thus is a less
compatible type.
"""
scalar BigInt

type Billing {
	stripeCustomer: StripeCustomer!
	payments: [PaymentIntent!]! @deprecated(reason: "Use `payment_connection` instead")
	subscriptions: [WasmerSubscription!]!
	paymentMethods: [PaymentMethod!]! @deprecated(reason: "Use `payment_connection` instead")
	paymentConnection(offset: Int, before: String, after: String, first: Int, last: Int): PaymentIntentConnection!
	paymentMethodConnection(offset: Int, before: String, after: String, first: Int, last: Int): CardPaymentMethodConnection!
}

type BillingPlan implements Node {
	id: ID!
}

type BillingPlanResource implements Node {
	id: ID!
}

type BindingsGenerator implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	updatedAt: DateTime!
	packageVersion: PackageVersion!
	active: Boolean!
	commandName: String!
	registryJavascriptlanguagebindings(offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionNPMBindingConnection!
	registryPythonlanguagebindings(offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionPythonBindingConnection!
}

type BindingsGeneratorConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [BindingsGeneratorEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `BindingsGenerator` and its cursor.
"""
type BindingsGeneratorEdge {
	"""
	The item at the end of the edge
	"""
	node: BindingsGenerator!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

"""
An enumeration.
"""
enum BlogBlogPostThemeChoices {
	"""
	Green
	"""
	GREEN
	"""
	Purple
	"""
	PURPLE
	"""
	Orange
	"""
	ORANGE
	"""
	Blue
	"""
	BLUE
}

type BlogPost implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	live: Boolean!
	"""
	The page title as you'd like it to be seen by the public
	"""
	title: String!
	"""
	The name of the page as it will appear in URLs e.g http://domain.com/blog/[my-slug]/
	"""
	slug: String!
	owner: User
	body: String!
	publishDate: DateTime
	theme: BlogBlogPostThemeChoices!
	url: String!
	coverImageUrl: String
	opengraphImageUrl: String
	tagline: String!
	relatedArticles: [BlogPost!]
	updatedAt: DateTime!
	tags: [BlogPostTag!]
	editUrl: String
}

type BlogPostConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [BlogPostEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `BlogPost` and its cursor.
"""
type BlogPostEdge {
	"""
	The item at the end of the edge
	"""
	node: BlogPost!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type BlogPostTag implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	slug: String!
}

type BlogPostTagConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [BlogPostTagEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `BlogPostTag` and its cursor.
"""
type BlogPostTagEdge {
	"""
	The item at the end of the edge
	"""
	node: BlogPostTag!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input BlogPostsFilter {
	count: Int! = 1000
	sortBy: SearchOrderSort = DESC
	"""
	Filter blog posts by tag.
	"""
	tags: [String!]
}

"""
The Build Configuration for a given repo
"""
type BuildConfig {
	startCmd: String
	buildCmd: String
	installCmd: String
	afterDeployCmd: String
	setupDb: Boolean!
	presetName: String!
	appName: String!
	completionTimeInSeconds: Int!
	branch: String
	canDeployWithoutRepo: Boolean! @deprecated(reason: "This field is not used anymore")
}

type BuildConfiguration implements Node {
	kind: BuildKind
	startCmd: String
	buildCmd: String
	installCmd: String
	rootDir: String
	"""
	The ID of the object
	"""
	id: ID!
	name: String
	repo: String @deprecated(reason: "This field is deprecated and return null always.")
	repoName: String @deprecated(reason: "This field is deprecated and return null always.")
	repoNamespace: String @deprecated(reason: "This field is deprecated and return null always.")
	completionTimeInSeconds: Int! @deprecated(reason: "This field is deprecated and return null always.")
	setupDb: Boolean! @deprecated(reason: "This field is deprecated and return null always.")
}

type BuildKind implements Node {
	name: String!
	provider: String!
	"""
	The ID of the object
	"""
	id: ID!
	config: JSONString!
	setupDb: Boolean @deprecated(reason: "This field is deprecated and return null always.")
	buildCmd: String @deprecated(reason: "This field is deprecated and return null always.")
	installCmd: String @deprecated(reason: "This field is deprecated and return null always.")
	startCmd: String @deprecated(reason: "This field is deprecated and return null always.")
}

type BuildKindConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [BuildKindEdge]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `BuildKind` and its cursor.
"""
type BuildKindEdge {
	"""
	The item at the end of the edge
	"""
	node: BuildKind
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type CAARecord implements Node & DNSRecordInterface {
	flags: Int!
	tag: DnsmanagerCertificationAuthorityAuthorizationRecordTagChoices!
	value: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

type CNAMERecord implements Node & DNSRecordInterface {
	"""
	This domain name will alias to this canonical name.
	"""
	cName: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

input CancelSubscriptionInput {
	"""
	ID of owner whose subscription to cancel.
	"""
	forOwnerId: ID!
	"""
	ID of the subscription to cancel
	"""
	subscriptionId: ID!
	clientMutationId: String
}

type CancelSubscriptionPayload {
	clientMutationId: String
	ok: Boolean!
}

input CapabilityCpuV1 {
	maximumThreads: Int
	maximumUsage: Int
}

input CapabilityFileSystemV1 {
	volumes: [FileSystemVolumeConfigV1]!
}

input CapabilityMapV1 {
	memorySwap: CapabilityCpuV1
}

input CapabilityMemorySwapV1 {
	maximumSize: String
	memoryId: String
}

input CapabilityNetworkDnsV1 {
	enabled: Boolean
	servers: [String]
	allowedHosts: NetworkDnsAllowedHostsV1
}

input CapabilityNetworkGatewayV1 {
	domains: [String]
	enforceHttps: Boolean
}

input CapabilityNetworkV1 {
	egress: NetworkEgressV1
}

input CapabilityPersistentMemoryV1 {
	volumes: [String]
}

"""
Card brand.

Can be amex, diners, discover, jcb, mastercard, unionpay, visa, or unknown.
"""
enum CardBrand {
	AMEX
	DINERS
	DISCOVER
	JCB
	MASTERCARD
	UNIONPAY
	VISA
	UNKNOWN
}

"""
Card funding type.

Can be credit, debit, prepaid, or unknown.
"""
enum CardFunding {
	CREDIT
	DEBIT
	PREPAID
	UNKNOWN
}

type CardPaymentMethod implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	brand: CardBrand!
	country: String!
	expMonth: Int!
	expYear: Int!
	funding: CardFunding!
	last4: String!
	isDefault: Boolean!
}

type CardPaymentMethodConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [CardPaymentMethodEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `CardPaymentMethod` and its cursor.
"""
type CardPaymentMethodEdge {
	"""
	The item at the end of the edge
	"""
	node: CardPaymentMethod!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

"""
The `CaseInsensitiveString` scalar type represents textual data, represented as UTF-8
character sequences. The String type is most often used by GraphQL to
represent free-form human-readable text.
"""
scalar CaseInsensitiveString

type Category implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	"""
	A category is a label that can be attached to a package.
	"""
	name: String!
	packages(offset: Int, before: String, after: String, first: Int, last: Int): PackageConnection!
}

type CategoryConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [CategoryEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int!
}

"""
A Relay edge containing a `Category` and its cursor.
"""
type CategoryEdge {
	"""
	The item at the end of the edge
	"""
	node: Category!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input ChangePackageVersionArchivedStatusInput {
	packageVersionId: ID!
	isArchived: Boolean
	clientMutationId: String
}

type ChangePackageVersionArchivedStatusPayload {
	clientMutationId: String
	packageVersion: PackageVersion!
}

input ChangeUserEmailInput {
	newEmail: String!
	clientMutationId: String
}

type ChangeUserEmailPayload {
	clientMutationId: String
	user: User!
}

input ChangeUserPasswordInput {
	"""
	The token associated to change the password. If not existing it will use the request user by default
	"""
	token: String
	oldPassword: String
	password: String!
	clientMutationId: String
}

type ChangeUserPasswordPayload {
	token: String
	clientMutationId: String
}

input ChangeUserUsernameInput {
	"""
	The new user username
	"""
	username: CaseInsensitiveString!
	clientMutationId: String
}

type ChangeUserUsernamePayload {
	clientMutationId: String
	user: User!
	token: String
}

input CheckUserExistsInput {
	"""
	The user
	"""
	user: String!
	clientMutationId: String
}

type CheckUserExistsPayload {
	exists: Boolean!
	"""
	The user is only returned if the user input was the username
	"""
	user: User
	clientMutationId: String
}

input ClaimPerishableAppInput {
	"""
	ID of app to disable
	"""
	appId: ID!
	clientMutationId: String
}

"""
Claim a perishable app as their own.
"""
type ClaimPerishableAppPayload {
	clientMutationId: String
	app: DeployApp!
}

type Collection {
	slug: String!
	displayName: String!
	description: String!
	createdAt: DateTime!
	banner: String!
	packages(offset: Int, before: String, after: String, first: Int, last: Int): PackageConnection!
}

type CollectionConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [CollectionEdge!]!
}

"""
A Relay edge containing a `Collection` and its cursor.
"""
type CollectionEdge {
	"""
	The item at the end of the edge
	"""
	node: Collection!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type Command {
	command: String!
	packageVersion: PackageVersion!
	module: PackageVersionModule
}

input Configuration {
	deployment: AppConfigV1
	yamlConfig: String
}

input ConnectGithubRepoToAppInput {
	"""
	The ID of the App
	"""
	appId: ID!
	"""
	The ID of the Github app repository installation
	"""
	installationRepoId: ID!
	"""
	The branch to deploy from
	"""
	deployBranch: String
	clientMutationId: String
}

"""
Connect a github repo to an app.
"""
type ConnectGithubRepoToAppPayload {
	clientMutationId: String
	app: DeployApp!
	githubRepoConnection: GithubRepoConnection!
	success: Boolean!
}

enum CountComparison {
	EQUAL
	GREATER_THAN
	LESS_THAN
	GREATER_THAN_OR_EQUAL
	LESS_THAN_OR_EQUAL
}

input CountFilter {
	count: Int = 0
	comparison: CountComparison = GREATER_THAN_OR_EQUAL
}

input CreateAppDBInput {
	"""
	App ID
	"""
	id: ID!
	"""
	Database name
	"""
	name: String
	clientMutationId: String
}

"""
Create a new database for an app.
"""
type CreateAppDBPayload {
	clientMutationId: String
	database: AppDatabase!
	password: String!
}

input CreateAppDatabaseInput {
	"""
	App ID.
	"""
	appId: ID!
	"""
	Database engine to provision and link to the app.
	"""
	dbEngine: DatabaseEngine!
	"""
	Database name.
	"""
	name: String
	clientMutationId: String
}

input CreateAppTemplateInput {
	name: String!
	slug: String!
	description: String
	demoUrl: String!
	repoUrl: String!
	rootDir: String
	branch: String
	category: String!
	framework: String!
	language: String
	isPublic: Boolean!
	highlighted: Boolean!
	canDeployWithoutRepo: Boolean!
	completionTimeInSeconds: String!
	repoLicense: String!
	useCases: [String!]
	readme: String!
	defaultImageUpload: Upload
	clientMutationId: String
}

type CreateAppTemplatePayload {
	appTemplate: AppTemplate!
	clientMutationId: String
}

input CreateAppVolumeInput {
	"""
	App ID
	"""
	appId: ID!
	"""
	Volume mount path
	"""
	mountPath: String!
	"""
	Volume max size in bytes
	"""
	maxSizeBytes: BigInt
	clientMutationId: String
}

"""
Create a UI-managed volume for an app.
"""
type CreateAppVolumePayload {
	clientMutationId: String
	volume: AppVolume!
	success: Boolean!
}

input CreateCheckoutSessionInput {
	"""
	URL to redirect.
	"""
	returnUrl: String!
	"""
	ID of price (product) to charge the user.
	"""
	priceId: ID!
	"""
	Locale of the customer.
	"""
	locale: String!
	"""
	ID of owner to create subscription on. Defaults to current user.
	"""
	forOwnerId: ID
	"""
	Whether to apply a trial period if available.
	"""
	isTrial: Boolean = false
	clientMutationId: String
}

type CreateCheckoutSessionPayload {
	clientMutationId: String
	clientSecret: String!
}

input CreateNamespaceAPIKeyInput {
	namespaceId: ID!
	name: String
	note: String
	clientMutationId: String
}

type CreateNamespaceAPIKeyPayload {
	apiKey: APIKey!
	keyRaw: String!
	clientMutationId: String
}

input CreateNamespaceInput {
	name: String!
	"""
	The namespace display name
	"""
	displayName: String
	"""
	The namespace description
	"""
	description: String
	"""
	The namespace avatar
	"""
	avatar: String @deprecated(reason: "Use `avatarUpload` instead")
	"""
	The namespace avatar
	"""
	avatarUpload: Upload
	clientMutationId: String
}

type CreateNamespacePayload {
	namespace: Namespace!
	user: User!
	clientMutationId: String
}

input CreateRepoForAppTemplateInput {
	templateId: ID!
	name: String!
	namespace: String!
	private: Boolean = false
	domains: [String] = null
	clientMutationId: String
}

type CreateRepoForAppTemplatePayload {
	clientMutationId: String
	success: Boolean!
	repoId: ID!
}

type CronJob implements Node {
	id: ID!
	name: String!
	schedule: String!
	kind: CronJobKind!
	source: CronJobSource!
	isManaged: Boolean!
	enabled: Boolean!
	timeout: String
	maxScheduleDrift: String
	maxRetries: Int
	createdAt: DateTime!
	updatedAt: DateTime!
	owner: Owner
	target: CronJobTarget!
	invocations(start: DateTime, end: DateTime, after: String, first: Int): CronJobInvocationConnection!
}

type CronJobConnection {
	totalCount: Int
	pageInfo: PageInfo!
	edges: [CronJobEdge!]!
	nodes: [CronJob!]!
}

type CronJobEdge {
	cursor: String!
	node: CronJob!
}

type CronJobInvocation {
	id: ID!
	edgeJobId: String!
	status: CronJobInvocationStatus
	scheduledAt: DateTime
	startedAt: DateTime
	finishedAt: DateTime
	durationMs: Int
	retryAttempts: Int
	errorSummary: String
	result: CronJobInvocationResult
	logs(before: String, after: String, first: Int, last: Int): LogConnection!
}

type CronJobInvocationConnection {
	pageInfo: PageInfo!
	edges: [CronJobInvocationEdge!]!
	nodes: [CronJobInvocation!]!
}

type CronJobInvocationEdge {
	cursor: String!
	node: CronJobInvocation!
}

union CronJobInvocationResult = ExecuteCronJobInvocationResult | FetchCronJobInvocationResult

enum CronJobInvocationStatus {
	PENDING
	RUNNING
	SUCCESS
	FAILURE
}

enum CronJobKind {
	FETCH
	EXECUTE
}

enum CronJobSource {
	CONFIG
	API
	PROVISIONED
}

union CronJobTarget = FetchCronJobTarget | ExecuteCronJobTarget

enum CronJobsSortBy {
	OLDEST
	NEWEST
}

type DNAMERecord implements Node & DNSRecordInterface {
	"""
	This domain name will alias to the entire subtree of that delegation domain.
	"""
	dName: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

input DNSCAAExtraInput {
	flags: Int!
	tag: String!
}

enum DNSDelegationStatus {
	UNKNOWN
	PENDING
	VERIFIED
	MISCONFIGURED
}

type DNSDomain implements Node {
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	name: String!
	"""
	This zone will be accessible at /dns/{slug}/.
	"""
	slug: String!
	zoneFile: String!
	"""
	The ID of the object
	"""
	id: ID!
	records: [DNSRecord]
	recordsConnection(first: Int, after: String, last: Int, before: String, sortBy: DNSRecordsSortBy): DNSRecordConnection!
	nameservers: [String!]!
	delegationStatus: DNSDelegationStatus!
	verifiedAt: DateTime
	lastCheckedAt: DateTime
	owner: Owner!
}

type DNSDomainConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [DNSDomainEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `DNSDomain` and its cursor.
"""
type DNSDomainEdge {
	"""
	The item at the end of the edge
	"""
	node: DNSDomain!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input DNSMXExtraInput {
	preference: Int!
}

union DNSRecord = ARecord | AAAARecord | CNAMERecord | TXTRecord | MXRecord | NSRecord | CAARecord | DNAMERecord | PTRRecord | SOARecord | SRVRecord | SSHFPRecord

type DNSRecordConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [DNSRecordEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `DNSRecord` and its cursor.
"""
type DNSRecordEdge {
	"""
	The item at the end of the edge
	"""
	node: DNSRecord!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

interface DNSRecordInterface {
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
}

input DNSRecordUpdate {
	"""
	ID of the DNS record to update or delete.
	"""
	id: ID
	"""
	Record owner/name within the DNS domain.
	"""
	name: String
	"""
	Record kind. Required when creating/upserting by name or deleting by natural key.
	"""
	kind: RecordKind
	"""
	Record value. Required when creating/upserting by name.
	"""
	value: String
	"""
	Time to live in seconds.
	"""
	ttl: Int
	mx: DNSMXExtraInput
	soa: DNSSOAExtraInput
	srv: DNSSRVExtraInput
	caa: DNSCAAExtraInput
	sshfp: DNSSSHFPExtraInput
	"""
	Whether the DNS record should be deleted instead of upserted.
	"""
	delete: Boolean = false
}

enum DNSRecordsSortBy {
	NEWEST
	OLDEST
}

input DNSSOAExtraInput {
	mname: String!
	rname: String!
	serial: Int!
	refresh: Int!
	retry: Int!
	expire: Int!
	minimum: Int!
}

input DNSSRVExtraInput {
	service: String!
	protocol: String!
	priority: Int!
	weight: Int!
	port: Int!
}

input DNSSSHFPExtraInput {
	algorithm: Int!
	type: Int!
}

enum DatabaseEngine {
	MYSQL
	POSTGRES
	SQLITE
}

"""
The `DateTime` scalar type represents a DateTime
value as specified by
[iso8601](https://en.wikipedia.org/wiki/ISO_8601).
"""
scalar DateTime

input DeleteAppDBInput {
	"""
	App Database ID
	"""
	id: ID!
	clientMutationId: String
}

"""
Delete a database for an app.
"""
type DeleteAppDBPayload {
	success: Boolean!
	clientMutationId: String
}

input DeleteAppDomainInput {
	"""
	ID of the domain to delete.
	"""
	id: ID!
	clientMutationId: String
}

"""
Delete domain with given ID
"""
type DeleteAppDomainPayload {
	success: Boolean!
	clientMutationId: String
	"""
	ID of the deleted domain.
	"""
	id: ID!
}

input DeleteAppInput {
	"""
	App ID to delete.
	"""
	id: ID!
	clientMutationId: String
}

type DeleteAppPayload {
	success: Boolean!
	clientMutationId: String
}

input DeleteAppSecretInput {
	"""
	ID of the secret to delete.
	"""
	id: ID!
	clientMutationId: String
}

"""
Deprecated: use UpdateEnvVars.
"""
type DeleteAppSecretPayload {
	clientMutationId: String
	success: Boolean!
	"""
	ID of the deleted secret.
	"""
	id: ID!
}

input DeleteAppTemplateInput {
	templateId: ID!
	clientMutationId: String
}

type DeleteAppTemplatePayload {
	success: Boolean!
	clientMutationId: String
}

input DeleteAppVolumeInput {
	"""
	App Volume ID
	"""
	id: ID!
	clientMutationId: String
}

"""
Soft-delete an app volume.
"""
type DeleteAppVolumePayload {
	clientMutationId: String
	"""
	ID of the deleted volume
	"""
	id: ID!
	success: Boolean!
}

input DeleteDNSRecordInput {
	recordId: ID!
	clientMutationId: String
}

type DeleteDNSRecordPayload {
	success: Boolean!
	clientMutationId: String
}

input DeleteDomainInput {
	domainId: ID!
	clientMutationId: String
}

type DeleteDomainPayload {
	success: Boolean!
	clientMutationId: String
}

input DeleteNamespaceAPIKeyInput {
	apiKeyId: ID!
	clientMutationId: String
}

type DeleteNamespaceAPIKeyPayload {
	success: Boolean!
	clientMutationId: String
}

input DeleteNamespaceInput {
	namespaceId: ID!
	clientMutationId: String
}

type DeleteNamespacePayload {
	success: Boolean!
	clientMutationId: String
}

input DeleteSshAuthorizedKeyByIdInput {
	"""
	SSH authorized key ID.
	"""
	authorizedKeyId: ID!
	clientMutationId: String
}

input DeleteSshAuthorizedKeyInput {
	"""
	SSH User ID
	"""
	sshUserId: ID!
	name: String
	clientMutationId: String
}

"""
Edit an SSH user.
"""
type DeleteSshAuthorizedKeyPayload {
	success: Boolean!
	clientMutationId: String
}

input DeleteUserInput {
	"""
	ID of user to delete
	"""
	userId: ID!
	clientMutationId: String
}

"""
Delete a user with some reason. The deletion will be soft, so the
underlying data will remain and be anonymized following GDPR.
"""
type DeleteUserPayload {
	clientMutationId: String
	deleted: Boolean!
	"""
	ID of user to delete
	"""
	userId: ID!
}

type DeployApp implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	state: String!
	forceHttps: Boolean!
	cdnCacheEnabled: Boolean!
	cdnCachePurgedAt: DateTime
	createdBy: User!
	createdAt: DateTime!
	updatedAt: DateTime!
	activeVersion: DeployAppVersion
	region: AppRegion
	managed: Boolean!
	willPerishAt: DateTime
	globalName: String!
	globalId: ID!
	viewerCan(action: OwnerAction!): Boolean!
	isPro: Boolean!
	url: String!
	adminUrl: String!
	permalink: String!
	urls: [String!]!
	description: String
	name: String!
	owner: Owner!
	versions(sortBy: DeployAppVersionsSortBy, createdAfter: DateTime, offset: Int, before: String, after: String, first: Int, last: Int): DeployAppVersionConnection!
	aggregateMetrics: AggregateMetrics!
	aliases(offset: Int, before: String, after: String, first: Int, last: Int): AppAliasConnection!
	domains(sortBy: AppAliasSortBy! = NEWEST, offset: Int, before: String, after: String, first: Int, last: Int): AppAliasConnection!
	secrets(names: [String], nameRegex: String, offset: Int, before: String, after: String, first: Int, last: Int): SecretConnection! @deprecated(reason: "Use `envVars` instead.")
	envVars(names: [String], nameRegex: String, offset: Int, before: String, after: String, first: Int, last: Int): EnvVarConnection!
	databases(offset: Int, before: String, after: String, first: Int, last: Int): AppDatabaseConnection!
	volumes(offset: Int, before: String, after: String, first: Int, last: Int): AppVolumeConnection!
	cronJobs(kind: CronJobKind, sortBy: CronJobsSortBy, offset: Int, before: String, after: String, first: Int, last: Int): CronJobConnection!
	usageMetrics(		variant: MetricType!,		grouping: MetricGrouping,
		"""
		Optional time range filter.
		"""
		timeRange: TimeRangeInput
	): [UsageMetric]!
	groupedMetrics(startAt: DateTime!, endAt: DateTime!, groupedBy: MetricGrouping!): UsageMetrics!
	emailUsage: EmailUsageSummary
	logs(
		"""
		Filter for this instance id in logs
		"""
		instanceId: String,
		"""
		Search logs for this text.
		"""
		textSearch: String,		before: String,		after: String,		first: Int,		last: Int
	): LogConnection!
	s3Url: URL
	s3Credentials: S3Credentials
	deleted: Boolean!
	favicon: URL
	screenshot(viewportSize: AppScreenshotViewportSize, appearance: AppScreenshotAppearance): URL
	deployments(before: String, after: String, first: Int, last: Int): DeploymentConnection @deprecated(reason: "Use rollouts instead")
	rollouts(before: String, after: String, first: Int, last: Int): RolloutConnection
	githubPrPreviews(prNumber: Int): [GithubPrPreviewDeployment!]!
	buildConfiguration: BuildConfiguration
	sshServer: AppSshServer
	mails: [AppMail]
	sentEmails(first: Int, after: String, last: Int, before: String): EmailMessageConnection!
	receivedEmails(first: Int, after: String, last: Int, before: String): EmailMessageConnection!
	kind: Kind
	githubRepoConnection: GithubRepoConnection
	perishReason: DeployDeployAppPerishReasonChoices
}

"""
An enumeration.
"""
enum DeployAppAliasKindChoices {
	"""
	Deployment
	"""
	DEPLOYMENT
	"""
	Domain
	"""
	DOMAIN
}

type DeployAppConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [DeployAppEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `DeployApp` and its cursor.
"""
type DeployAppEdge {
	"""
	The item at the end of the edge
	"""
	node: DeployApp!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type DeployAppVersion implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	app: DeployApp!
	yamlConfig: String!
	userYamlConfig: String!
	clientName: String!
	signature: String
	description: String
	publishedBy: User!
	disabledAt: DateTime
	disabledBy: User
	disabledReason: String
	disabledPermanently: Boolean!
	createdAt: DateTime!
	updatedAt: DateTime!
	configWebc: String @deprecated(reason: "webc support has been deprecated for apps")
	config: String! @deprecated(reason: "Please use jsonConfig instead")
	jsonConfig: String!
	url: String!
	permalink: String!
	urls: [String]!
	version: String!
	isActive: Boolean!
	manifest: String!
	usageMetrics(		variant: MetricType!,		grouping: MetricGrouping,
		"""
		Optional time range filter.
		"""
		timeRange: TimeRangeInput
	): [UsageMetric]!
	logs(
		"""
		Get logs starting from this timestamp. Takes ISO timestamp.
		"""
		start: DateTime,
		"""
		Fetch logs until this timestamp. Takes ISO timestamp.
		"""
		end: DateTime,
		"""
		Search logs for this text.
		"""
		textSearch: String,
		"""
		Get logs starting from this timestamp. Takes EPOCH timestamp in seconds.
		"""
		startingFrom: Float,
		"""
		Get logs starting from this timestamp. Takes ISO timestamp.
		"""
		startingFromISO: DateTime,
		"""
		Fetch logs until this timestamp. Takes EPOCH timestamp in seconds.
		"""
		until: Float,
		"""
		List of streams to fetch logs from. e.g. stdout, stderr.
		"""
		streams: [LogStream],
		"""
		List of instance ids to fetch logs from.
		"""
		instanceIds: [String] @deprecated(reason: "Use instance_id instead"),
		"""
		Filter for this instance id in logs
		"""
		instanceId: String,
		"""
		Filter for this request id in logs
		"""
		requestId: String,		before: String,		after: String,		first: Int,		last: Int
	): LogConnection!
	sourcePackageVersion: PackageVersion
	sourcePackageRelease: PackageWebc
	sourcePackage: Package!
	aggregateMetrics: AggregateMetrics!
	volumes: [AppVersionVolume]
	gitSource: AutobuildRepository @deprecated(reason: "This field is deprecated and return null always.")
	rolloutSource: Rollout
	favicon: URL
	screenshot(viewportSize: AppScreenshotViewportSize, appearance: AppScreenshotAppearance): URL
	isUploaded: Boolean!
}

type DeployAppVersionConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [DeployAppVersionEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `DeployAppVersion` and its cursor.
"""
type DeployAppVersionEdge {
	"""
	The item at the end of the edge
	"""
	node: DeployAppVersion!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

"""
An enumeration.
"""
enum DeployAppVersionsSortBy {
	NEWEST
	OLDEST
}

"""
An enumeration.
"""
enum DeployAppsSortBy {
	NEWEST
	OLDEST
	MOST_ACTIVE
}

"""
An enumeration.
"""
enum DeployDeployAppPerishReasonChoices {
	"""
	User Pending Verification
	"""
	USER_PENDING_VERIFICATION
	"""
	User Requested
	"""
	USER_REQUESTED
	"""
	App Unclaimed
	"""
	APP_UNCLAIMED
	"""
	Plan Non Persistent
	"""
	PLAN_NON_PERSISTENT
}

"""
An enumeration.
"""
enum DeploySecretLogActionChoices {
	"""
	Access
	"""
	ACCESS
	"""
	Modification
	"""
	MODIFICATION
	"""
	Create
	"""
	CREATE
	"""
	DELETE
	"""
	DELETE
}

input DeployViaAutobuildInput {
	repoUrl: String
	uploadUrl: String
	appName: String
	appId: ID
	owner: String
	presetName: String
	buildCmd: String
	installCmd: String
	startCmd: String
	afterDeployCmd: String
	enableDatabase: Boolean
	secrets: [SecretInput] @deprecated(reason: "Use envVars instead")
	envVars: [EnvVarInput]
	extraData: AutobuildDeploymentExtraData
	params: AutobuildDeploymentExtraData
	"""
	If set, the app is managed by wasmer.
	"""
	managed: Boolean = false
	kind: String
	"""
	If set, the screenshot is waited for.
	"""
	waitForScreenshotGeneration: Boolean = false
	"""
	Region to deploy the app
	"""
	region: String
	"""
	The path to build from (defaults to /)
	"""
	basePath: String @deprecated(reason: "Please use root_dir instead")
	"""
	The root directory to build from (defaults to /)
	"""
	rootDir: String
	"""
	Branch to deploy from. If no branch is specified, the default branch is used.
	"""
	branch: String
	"""
	If set, allows deploying a new version of an existing app.
	"""
	allowExistingApp: Boolean = false
	"""
	Additional jobs to run in the deployment.
	"""
	jobs: [JobDefinitionInput]
	"""
	Domains for this app
	"""
	domains: [String]
	"""
	When the app should be perished
	"""
	perishAt: String
	clientMutationId: String
}

type DeployViaAutobuildPayload {
	clientMutationId: String
	success: Boolean!
	buildId: UUID!
}

input DeployWordpressInput {
	"""
	Wordpress site name.
	"""
	siteName: String!
	"""
	Name of app to create.
	"""
	appName: String!
	"""
	Owner of this app.
	"""
	appOwner: String!
	"""
	Region for this app.
	"""
	region: String!
	"""
	Username of admin for the wordpress site.
	"""
	adminUsername: String!
	"""
	Admin password for the wordpress site.
	"""
	adminPassword: String!
	"""
	Email of admin of the wordpress site.
	"""
	adminEmail: String!
	"""
	Email of admin of the wordpress site.
	"""
	language: String
	"""
	If set, the app is managed by wasmer.
	"""
	managed: Boolean
	clientMutationId: String
}

"""
Deploy a wordpress site.
"""
type DeployWordpressPayload {
	clientMutationId: String
	appVersion: DeployAppVersion!
}

union Deployment = NakedDeployment | AutobuildRepository

type DeploymentConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [DeploymentEdge]!
}

"""
A Relay edge containing a `Deployment` and its cursor.
"""
type DeploymentEdge {
	"""
	The item at the end of the edge
	"""
	node: Deployment
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input DeploymentV1 {
	name: String!
	workload: WorkloadV1!
}

input DetachAppFromAutobuildInput {
	"""
	The ID of the App
	"""
	appId: ID!
	clientMutationId: String
}

"""
Detach autobuild from app.
"""
type DetachAppFromAutobuildPayload {
	clientMutationId: String
	app: DeployApp!
}

input DetachPaymentMethodInput {
	paymentMethod: ID!
	clientMutationId: String
}

"""
Try to detach a payment method from customer.
Fails if trying to detach a default method,
or if it's the only payment method.
"""
type DetachPaymentMethodPayload {
	success: Boolean!
	billing: Billing!
	clientMutationId: String
}

input DisableAppInput {
	"""
	ID of app to disable
	"""
	appId: ID!
	"""
	Disable with this reason
	"""
	reason: String!
	clientMutationId: String
}

"""
Disable app with a reason.
"""
type DisableAppPayload {
	clientMutationId: String
	app: DeployApp!
}

input DisconnectGithubRepoFromAppInput {
	"""
	The ID of the App
	"""
	appId: ID!
	clientMutationId: String
}

"""
Disconnect a github repo from an app.
"""
type DisconnectGithubRepoFromAppPayload {
	clientMutationId: String
	app: DeployApp!
	success: Boolean!
}

"""
An enumeration.
"""
enum DnsmanagerCertificationAuthorityAuthorizationRecordTagChoices {
	"""
	issue
	"""
	ISSUE
	"""
	issue wildcard
	"""
	ISSUEWILD
	"""
	Incident object description exchange format
	"""
	IODEF
}

"""
An enumeration.
"""
enum DnsmanagerSshFingerprintRecordAlgorithmChoices {
	"""
	RSA
	"""
	A_1
	"""
	DSA
	"""
	A_2
	"""
	ECDSA
	"""
	A_3
	"""
	Ed25519
	"""
	A_4
}

"""
An enumeration.
"""
enum DnsmanagerSshFingerprintRecordTypeChoices {
	"""
	SHA-1
	"""
	A_1
	"""
	SHA-256
	"""
	A_2
}

input EditSshUserInput {
	"""
	SSH User ID
	"""
	id: ID!
	username: String
	authenticationMethods: [SshAuthenticationMethod] = null
	sftpRootFolder: String
	clientMutationId: String
}

"""
Edit an SSH user.
"""
type EditSshUserPayload {
	sshUser: SshUser!
	clientMutationId: String
}

type EmailMessage implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	direction: EmailMessageDirection!
	status: EmailMessageStatus!
	from: String!
	to: [String!]!
	cc: [String!]!
	bcc: [String!]!
	replyTo: String
	subject: String!
	textBody: String
	htmlBody: String
	app: DeployApp
	owner: Owner
	createdAt: DateTime!
	sentAt: DateTime
	receivedAt: DateTime
}

type EmailMessageConnection {
	pageInfo: PageInfo!
	edges: [EmailMessageEdge!]!
	totalCount: Int
}

enum EmailMessageDirection {
	SENT
	RECEIVED
}

type EmailMessageEdge {
	node: EmailMessage!
	cursor: String!
}

enum EmailMessageStatus {
	QUEUED
	SENT
	DELIVERED
	FAILED
	RECEIVED
}

type EmailUsageSummary {
	startDate: DateTime!
	endDate: DateTime!
	currentUsage: Int!
}

input EnableAppInput {
	"""
	ID of app to disable
	"""
	appId: ID!
	clientMutationId: String
}

"""
Enable app that was previously disabled.
"""
type EnableAppPayload {
	clientMutationId: String
	app: DeployApp!
}

type EnvVar implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	sensitive: Boolean!
	value: String
}

type EnvVarConnection {
	"""
	Contains the nodes in this connection.
	"""
	edges: [EnvVarEdge!]!
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `EnvVar` and its cursor.
"""
type EnvVarEdge {
	"""
	The item at the end of the edge
	"""
	node: EnvVar!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input EnvVarInput {
	"""
	Name of the environment variable.
	"""
	name: String!
	"""
	Value of the environment variable.
	"""
	value: String!
	"""
	Whether the environment variable value should be hidden from GraphQL.
	"""
	sensitive: Boolean = false
}

type EnvVarLog implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	action: DeploySecretLogActionChoices!
	envVarName: String!
}

type EnvVarLogConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [EnvVarLogEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `EnvVarLog` and its cursor.
"""
type EnvVarLogEdge {
	"""
	The item at the end of the edge
	"""
	node: EnvVarLog!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input EnvVarUpdate {
	"""
	ID of the environment variable.
	"""
	id: ID
	"""
	Name of the environment variable.
	"""
	name: String
	"""
	Value of the environment variable.
	"""
	value: String
	"""
	Whether the environment variable value should be hidden from GraphQL.
	"""
	sensitive: Boolean = false
	"""
	Whether the environment variable should be deleted by name instead of upserted.
	"""
	delete: Boolean = false
}

type ErrorType {
	field: String!
	messages: [String!]!
}

type EventBody {
	text: String!
	ranges: [NodeBodyRange!]!
}

type ExecutableCronJob implements Node {
	id: ID!
}

type ExecuteCronJobInvocationResult {
	exitCode: Int
	instanceId: String
}

type ExecuteCronJobTarget {
	packageName: String
	command: String
	cliArgs: GenericScalar!
	env: GenericScalar!
}

type FetchCronJob implements Node {
	id: ID!
}

type FetchCronJobInvocationResult {
	statusCode: Int
	responseBody: String
	requestId: String
}

type FetchCronJobTarget {
	body: String
	headers: GenericScalar!
	method: String!
	path: String!
	expectBodyIncludes: String
	expectBodyRegex: String
	expectStatusCodes: GenericScalar
}

input FileSystemPermissionsV1 {
	delete: Boolean
	read: Boolean
	write: Boolean
}

input FileSystemVolumeConfigV1 {
	mounts: [FileSystemVolumeMountV1]!
	name: String!
	source: FileSystemVolumeSourceV1!
}

input FileSystemVolumeMountV1 {
	path: String!
	permissions: [FileSystemPermissionsV1]
}

input FileSystemVolumeSourceLocalV1 {
	maximumSize: String!
}

input FileSystemVolumeSourceV1 {
	local: FileSystemVolumeSourceLocalV1!
}

input GenerateAPITokenInput {
	identifier: String
	clientMutationId: String
}

type GenerateAPITokenPayload {
	clientMutationId: String
	token: APIToken
	tokenRaw: String
	user: User
}

input GenerateBindingsForAllPackagesInput {
	bindingsGeneratorId: ID
	bindingsGeneratorCommand: String
	clientMutationId: String
}

type GenerateBindingsForAllPackagesPayload {
	clientMutationId: String
	message: String!
}

input GenerateCheckoutUrlInput {
	"""
	URL to redirect to on success.
	"""
	successUrl: String!
	"""
	URL to redirect to on cancellation.
	"""
	cancelUrl: String!
	"""
	ID of price (product) to charge the user.
	"""
	priceId: ID!
	"""
	Locale of the customer.
	"""
	locale: String!
	"""
	ID of owner to create subscription on. Defaults to current user.
	"""
	forOwnerId: ID
	clientMutationId: String
}

type GenerateCheckoutUrlPayload {
	clientMutationId: String
	checkout: StripeCheckout!
}

input GenerateDeployConfigTokenInput {
	config: String!
	clientMutationId: String
}

type GenerateDeployConfigTokenPayload {
	token: String!
	config: String!
	clientMutationId: String
}

input GenerateDeployTokenInput {
	deployConfigVersionId: String!
	clientMutationId: String
}

type GenerateDeployTokenPayload {
	clientMutationId: String
	token: String!
	deployConfigVersion: DeployAppVersion!
}

input GenerateSshTokenInput {
	appId: ID
	clientMutationId: String
}

type GenerateSshTokenPayload {
	token: String!
	clientMutationId: String
}

input GenerateUploadUrlInput {
	name: String
	version: String = "latest"
	filename: String
	expiresAfterSeconds: Int = 900
	method: String
	clientMutationId: String
}

type GenerateUploadUrlPayload {
	clientMutationId: String
	signedUrl: SignedUrl!
	method: String!
}

input GenerateWordPressMagicLoginUrlInput {
	appId: ID!
	clientMutationId: String
}

type GenerateWordPressMagicLoginUrlPayload {
	clientMutationId: String
	magicLoginUrl: String!
}

"""
The `GenericScalar` scalar type represents a generic
GraphQL scalar value that could be:
String, Boolean, Int, Float, List or Object.
"""
scalar GenericScalar

type GetPasswordResetToken {
	valid: Boolean!
	user: User
}

type GitHubRollout implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	externalId: String
	rollout: Rollout!
	branch: String
	commitHash: String
	prevCommitHash: String
	commitMessage: String
	authorEmail: String
	authorName: String
	authorLogin: String
	repoUrl: String!
	commitUrl: String
}

type GithubAppInstallation implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	slug: String!
	githubConfigureUrl: String!
	repositories(filterByName: String): [GithubInstallationRepository!]!
}

type GithubInstallationRepository implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	repoUrl: String!
	installation: GithubAppInstallation!
	url: String!
	name: String!
	namespace: String!
}

type GithubPrPreviewDeployment {
	databaseId: Int!
	prNumber: Int!
	baseRef: String!
	headRef: String!
	headSha: String!
	previewUrl: String!
	status: String!
	buildId: String!
	rolloutId: ID
	githubCommentId: Int
	createdAt: DateTime!
	updatedAt: DateTime!
}

type GithubRepoConnection implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	githubRepoInstallation: GithubInstallationRepository!
	connectedBy: User!
	deployBranch: String!
	app: DeployApp!
	pullRequestComments: Boolean!
	connectedAt: DateTime!
	deploymentStatusEvents: Boolean!
}

union GlobalObject = User | Namespace

enum GrapheneRole {
	OWNER
	ADMIN
	EDITOR
	VIEWER
}

type GroupedUsageMetrics {
	groupedAt: DateTime!
	requests: RequestMetrics!
	workloads: WorkloadMetrics!
}

enum HTTPRedirectType {
	TEMPORARY_REDIRECT
	TEMPORARY_FOUND
	PERMANENT_REDIRECT
	PERMANENT_MOVED
}

input InputSignature {
	publicKeyKeyId: String!
	data: String!
}

input InstallGithubAppInput {
	"""
	Github app Installation ID
	"""
	installationId: ID!
	"""
	Github App Account ID
	"""
	githubAccountId: ID
	"""
	Github App Account Login
	"""
	githubAccountLogin: String
	clientMutationId: String
}

"""
Add a new github app installation
"""
type InstallGithubAppPayload {
	clientMutationId: String
	success: Boolean!
	user: User!
	installation: GithubAppInstallation
}

input InstallWasmerWpPluginInput {
	appId: ID!
	clientMutationId: String
}

type InstallWasmerWpPluginPayload {
	clientMutationId: String
	app: DeployApp!
	liveConfig: WordpressLiveConfig
}

type Interface implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	displayName: String!
	description: String!
	homepage: String
	icon: String
	createdAt: DateTime!
	updatedAt: DateTime!
	versions(offset: Int, before: String, after: String, first: Int, last: Int): InterfaceVersionConnection!
	lastVersion: InterfaceVersion
}

type InterfaceVersion implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	interface: Interface!
	version: String!
	content: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	publishedBy: User!
	packageVersions(offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionConnection!
}

type InterfaceVersionConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [InterfaceVersionEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `InterfaceVersion` and its cursor.
"""
type InterfaceVersionEdge {
	"""
	The item at the end of the edge
	"""
	node: InterfaceVersion!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type InternalTask {
	id: ID!
	status: String!
	result: JSONString
	dateDone: DateTime
	traceback: String
}

input InvalidateNonceInput {
	id: ID!
	secret: String!
	clientMutationId: String
}

type InvalidateNoncePayload {
	nonce: Nonce!
	clientMutationId: String
}

input InviteNamespaceCollaboratorInput {
	namespaceId: ID!
	username: String
	email: String
	role: GrapheneRole!
	clientMutationId: String
}

type InviteNamespaceCollaboratorPayload {
	invite: NamespaceCollaboratorInvite!
	namespace: Namespace!
	clientMutationId: String
}

input InvitePackageCollaboratorInput {
	packageName: String!
	role: GrapheneRole!
	username: String
	email: String
	clientMutationId: String
}

type InvitePackageCollaboratorPayload {
	clientMutationId: String
	invite: PackageCollaboratorInvite!
	package: Package!
}

"""
Allows use of a JSON String for input / output from the GraphQL schema.

Use of this type is *not recommended* as you lose the benefits of having a defined, static
schema (one of the key benefits of GraphQL).
"""
scalar JSONString

input JobDefinitionInput {
	name: String
	package: String
	"""
	Command to run the job
	"""
	command: String!
	cliArgs: [String]
	env: [String]
	"""
	Humanfriendly timeout definition. e.g. 10m, 1h
	"""
	timeout: String = "10m"
}

input JoinWaitlistInput {
	name: String!
	clientMutationId: String
}

"""
Add current user to the waitlist.
"""
type JoinWaitlistPayload {
	clientMutationId: String
	waitlistMember: WaitlistMember!
}

union Kind = WordpressAppKind | MCPServerAppKind

input LikePackageInput {
	packageId: ID!
	clientMutationId: String
}

type LikePackagePayload {
	clientMutationId: String
	package: Package!
}

interface Likeable {
	id: ID!
	likersCount: Int!
	viewerHasLiked: Boolean!
}

"""
An enumeration.
"""
enum LimitState {
	not_limited
	nearing_limits
	under_probation
	limit_exceeded
}

"""
Log entry for deploy app.
"""
type Log {
	"""
	Timestamp in nanoseconds
	"""
	timestamp: Float!
	"""
	ISO 8601 string in UTC
	"""
	datetime: DateTime!
	"""
	Log message
	"""
	message: String!
	"""
	Log stream
	"""
	stream: LogStream
	"""
	ID of instance from which the log was generated
	"""
	instanceId: String!
	labels: [LogLabel]!
}

type LogConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [LogEdge]!
}

"""
A Relay edge containing a `Log` and its cursor.
"""
type LogEdge {
	"""
	The item at the end of the edge
	"""
	node: Log
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type LogLabel {
	label: String!
	value: String!
}

"""
An enumeration.
"""
enum LogStream {
	STDOUT
	STDERR
	RUNTIME
}

enum LoginMethod {
	GOOGLE
	GITHUB
	PASSWORD
}

type MCPServerAppKind {
	url: String!
	transport: MCPServerTransportEnum
}

"""
An enumeration.
"""
enum MCPServerTransportEnum {
	STDIO
	STREAMABLE_HTTP
	SSE
}

"""
Response object for MFAAuth mutation.
"""
type MFAAuthResponse {
	success: Boolean!
	token: String
	refreshToken: String
	username: String
	refreshTokenExpiresIn: Int
}

input MFAEmailAuthInput {
	username: String!
	otp: String!
	clientMutationId: String
}

type MFAEmailGenerationResponse {
	success: Boolean!
}

input MFAGenerateEmailOTPInput {
	clientMutationId: String
}

input MFAGenerateRecoveryTokenInput {
	clientMutationId: String
}

input MFARecoveryAuthInput {
	username: String!
	otp: String!
	clientMutationId: String
}

type MFARecoveryCodes {
	codes: [String!]!
}

input MFATOTPAuthInput {
	username: String!
	otp: String!
	clientMutationId: String
}

input MFATOTPGetTokenInput {
	clientMutationId: String
}

type MFATOTPTokenType {
	qr: String
	secretKey: String
}

input MFATOTPVerifyInput {
	answer: String!
	secretKey: String!
	clientMutationId: String
}

type MFATOTPVerifyPayload {
	status: MFATOTPVerifyStatus
	clientMutationId: String
}

enum MFATOTPVerifyStatus {
	SUCCESS
	RECOVERY
}

type MXRecord implements Node & DNSRecordInterface {
	preference: Int!
	exchange: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

input MakePackagePublicInput {
	"""
	The ID of the package to make public
	"""
	id: ID!
	clientMutationId: String
}

type MakePackagePublicPayload {
	clientMutationId: String
	package: Package!
}

input MarkAppVersionAsActiveInput {
	"""
	The ID of the DeployAppVersion to set as the new active version.
	"""
	appVersion: ID!
	clientMutationId: String
}

"""
Mutation to change the active version of a DeployApp to another DeployAppVersion.
"""
type MarkAppVersionAsActivePayload {
	clientMutationId: String
	app: DeployApp!
}

"""
Groupings for metrics
"""
enum MetricGrouping {
	BY_15_MINUTES
	BY_5_MINUTES
	BY_HOUR
	BY_DAY
	BY_WEEK
}

"""
An enumeration.
"""
enum MetricType {
	cpu_time
	memory_time
	network_egress
	network_ingress
	no_of_requests
	no_of_failed_requests
	cost
}

"""
Units for metrics
"""
enum MetricUnit {
	"""
	represents the unit of "seconds".
	"""
	SEC
	"""
	represents the unit of "milliseconds".
	"""
	MS
	"""
	represents the unit of "hours".
	"""
	hours
	"""
	represents the unit of "kilobytes".
	"""
	KB
	"""
	represents the unit of "bytes".
	"""
	Bytes
	"""
	represents the unit of "kilobytes per second".
	"""
	KBS
	"""
	represents the unit of "number of requests".
	"""
	NO_REQUESTS
	"""
	represents the unit of "cost" in USD.
	"""
	DOLLARS
}

type MetricsTotals {
	requests: RequestMetrics!
	workloads: WorkloadMetrics!
}

input MigrateAppRegionInput {
	"""
	ID of the app to migrate
	"""
	appId: ID!
	"""
	Target region name
	"""
	regionName: String!
	clientMutationId: String
}

"""
Migrate an app to a different region.
"""
type MigrateAppRegionPayload {
	clientMutationId: String
	app: DeployApp!
	"""
	ID of the internal task for app migration
	"""
	taskId: ID!
}

type MoneyType {
	amount: String
	currency: String
}

type Mutation {
	"""
	Sync all blog posts from Notion to the database.
	"""
	syncNotionBlogPosts(input: SyncNotionBlogPostsInput!): SyncNotionBlogPostsPayload
	tokenAuth(input: ObtainJSONWebTokenInput!): ObtainJSONWebTokenPayload!
	verifyAccessToken(token: String!): Verify!
	refreshAccessToken(refreshToken: String!): Refresh!
	revokeAccessToken(refreshToken: String!): Revoke!
	registerUser(input: RegisterUserInput!): RegisterUserPayload!
	socialAuth(input: SocialAuthJWTInput!): SocialAuthJWTPayload!
	requestPasswordReset(input: RequestPasswordResetInput!): RequestPasswordResetPayload
	requestValidationEmail(input: RequestValidationEmailInput!): RequestValidationEmailPayload
	validateUserEmail(input: ValidateUserEmailInput!): ValidateUserEmailPayload
	validateUserFingerprint(input: ValidateUserFingerprintInput!): ValidateUserFingerprintPayload
	changeUserPassword(input: ChangeUserPasswordInput!): ChangeUserPasswordPayload
	changeUserUsername(input: ChangeUserUsernameInput!): ChangeUserUsernamePayload
	changeUserEmail(input: ChangeUserEmailInput!): ChangeUserEmailPayload
	createNamespace(input: CreateNamespaceInput!): CreateNamespacePayload!
	updateNamespace(input: UpdateNamespaceInput!): UpdateNamespacePayload
	deleteNamespace(input: DeleteNamespaceInput!): DeleteNamespacePayload
	inviteNamespaceCollaborator(input: InviteNamespaceCollaboratorInput!): InviteNamespaceCollaboratorPayload!
	acceptNamespaceCollaboratorInvite(input: AcceptNamespaceCollaboratorInviteInput!): AcceptNamespaceCollaboratorInvitePayload!
	removeNamespaceCollaborator(input: RemoveNamespaceCollaboratorInput!): RemoveNamespaceCollaboratorPayload
	removeNamespaceCollaboratorInvite(input: RemoveNamespaceCollaboratorInviteInput!): RemoveNamespaceCollaboratorInvitePayload
	updateNamespaceCollaboratorRole(input: UpdateNamespaceCollaboratorRoleInput!): UpdateNamespaceCollaboratorRolePayload!
	updateNamespaceCollaboratorInviteRole(input: UpdateNamespaceCollaboratorInviteRoleInput!): UpdateNamespaceCollaboratorInviteRolePayload!
	createNamespaceApiKey(input: CreateNamespaceAPIKeyInput!): CreateNamespaceAPIKeyPayload
	updateApiKey(input: UpdateAPIKeyInput!): UpdateAPIKeyPayload
	rotateApiKey(input: RotateAPIKeyInput!): RotateAPIKeyPayload
	deleteNamespaceApiKey(input: DeleteNamespaceAPIKeyInput!): DeleteNamespaceAPIKeyPayload
	updateUserInfo(input: UpdateUserInfoInput!): UpdateUserInfoPayload
	validateUserPassword(input: ValidateUserPasswordInput!): ValidateUserPasswordPayload
	generateApiToken(input: GenerateAPITokenInput!): GenerateAPITokenPayload
	"""
	Request To revoke an API token; these start with 'wap_'.
	"""
	revokeApiToken(input: RevokeAPITokenInput!): RevokeAPITokenPayload
	checkUserExists(input: CheckUserExistsInput!): CheckUserExistsPayload
	newNonce(input: NewNonceInput!): NewNoncePayload!
	validateNonce(input: ValidateNonceInput!): ValidateNoncePayload!
	invalidateNonce(input: InvalidateNonceInput!): InvalidateNoncePayload!
	mfa2totpGetToken(input: MFATOTPGetTokenInput!): MFATOTPTokenType!
	mfa2totpVerify(input: MFATOTPVerifyInput!): MFATOTPVerifyPayload!
	mfa2totpAuth(input: MFATOTPAuthInput!): MFAAuthResponse!
	mfa2RecoveryGetToken(input: MFAGenerateRecoveryTokenInput!): MFARecoveryCodes!
	mfa2RecoveryAuth(input: MFARecoveryAuthInput!): MFAAuthResponse!
	mfa2EmailAuth(input: MFAEmailAuthInput!): MFAAuthResponse!
	mfa2EmailGetToken(input: MFAGenerateEmailOTPInput!): MFAEmailGenerationResponse!
	"""
	Viewer accepts the latest ToS.
	"""
	acceptTOS(input: AcceptTOSInput!): AcceptTOSPayload!
	"""
	Delete domain with given ID
	"""
	deleteAppDomain(input: DeleteAppDomainInput!): DeleteAppDomainPayload
	"""
	Enable or disable the SSH server capability on an app.
	"""
	toggleSshServer(input: ToggleSshServerInput!): ToggleSshServerPayload
	"""
	Enable or disable a cronjob on an app.
	"""
	toggleCronJob(input: ToggleCronJobInput!): ToggleCronJobPayload
	"""
	Reveal the password for an SSH user.
	"""
	revealSshUserPassword(input: RevealSshUserPasswordInput!): RevealSshUserPasswordPayload
	"""
	Rotate the password for an SSH user.
	"""
	rotateSshUserPassword(input: RotateSshUserPasswordInput!): RotateSshUserPasswordPayload
	"""
	Add an SSH authorized key to an SSH user.
	"""
	addSshAuthorizedKey(input: AddSshAuthorizedKeyInput!): AddSshAuthorizedKeyPayload
	"""
	Edit an SSH user.
	"""
	deleteSshAuthorizedKey(input: DeleteSshAuthorizedKeyInput!): DeleteSshAuthorizedKeyPayload
	"""
	Delete an SSH authorized key by its node ID.
	"""
	deleteSshAuthorizedKeyById(input: DeleteSshAuthorizedKeyByIdInput!): DeleteSshAuthorizedKeyPayload
	"""
	Edit an SSH user.
	"""
	editSshUser(input: EditSshUserInput!): EditSshUserPayload
	"""
	Detach autobuild from app.
	"""
	verifyAppDomain(input: VerifyAppDomainInput!): VerifyAppDomainPayload
	"""
	Set the requested default domain for an app.
	"""
	setAppDefaultAlias(input: SetAppDefaultAliasInput!): SetAppDefaultAliasPayload
	"""
	Create or update an app domain on an app with given ID
	"""
	upsertAppDomain(input: UpsertAppDomainInput!): UpsertAppDomainPayload
	publishDeployApp(input: PublishDeployAppInput!): PublishDeployAppPayload
	deleteApp(input: DeleteAppInput!): DeleteAppPayload
	"""
	Add current user to the waitlist.
	"""
	joinWaitlist(input: JoinWaitlistInput!): JoinWaitlistPayload!
	"""
	Add stripe payment to the user
	"""
	addPayment(input: AddPaymentInput!): AddPaymentPayload!
	"""
	Mutation to change the active version of a DeployApp to another DeployAppVersion.
	"""
	markAppVersionAsActive(input: MarkAppVersionAsActiveInput!): MarkAppVersionAsActivePayload
	"""
	Set a payment method as default for the user.
	"""
	makePaymentDefault(input: SetDefaultPaymentMethodInput!): SetDefaultPaymentMethodPayload!
	"""
	Try to detach a payment method from customer.
	Fails if trying to detach a default method,
	or if it's the only payment method.
	"""
	detachPaymentMethod(input: DetachPaymentMethodInput!): DetachPaymentMethodPayload!
	generateDeployConfigToken(input: GenerateDeployConfigTokenInput!): GenerateDeployConfigTokenPayload
	generateSshToken(input: GenerateSshTokenInput!): GenerateSshTokenPayload
	runEdgeCommand(input: RunEdgeCommandInput!): RunEdgeCommandPayload
	renameApp(input: RenameAppInput!): RenameAppPayload
	renameAppAlias(input: RenameAppAliasInput!): RenameAppAliasPayload
	"""
	Purges all cache for this app version
	"""
	purgeCacheForAppVersion(input: PurgeCacheForAppVersionInput!): PurgeCacheForAppVersionPayload
	"""
	Purges all cache for this app version by app version ID.
	"""
	purgeCacheForAppVersionById(input: PurgeCacheForAppVersionByIdInput!): PurgeCacheForAppVersionPayload
	configureAppCdnCache(app: ID!, config: AppCdnCacheConfigUpdate!): AppCdnCacheMutationPayload!
	purgeAppCdnCache(app: ID!): AppCdnCacheMutationPayload!
	requestAppTransfer(input: RequestAppTransferInput!): RequestAppTransferPayload
	acceptAppTransferRequest(input: AcceptAppTransferRequestInput!): AcceptAppTransferRequestPayload
	removeAppTransferRequest(input: RemoveAppTransferRequestInput!): RemoveAppTransferRequestPayload
	createRepoForAppTemplate(input: CreateRepoForAppTemplateInput!): CreateRepoForAppTemplatePayload
	createAppTemplate(input: CreateAppTemplateInput!): CreateAppTemplatePayload
	updateAppTemplate(input: UpdateAppTemplateInput!): UpdateAppTemplatePayload
	deleteAppTemplate(input: DeleteAppTemplateInput!): DeleteAppTemplatePayload
	registerDomain(input: RegisterDomainInput!): RegisterDomainPayload
	upsertDNSRecord(input: UpsertDNSRecordInput!): UpsertDNSRecordPayload
	updateDNSRecords(input: UpdateDNSRecordsInput!): UpdateDNSRecordsPayload
	deleteDNSRecord(input: DeleteDNSRecordInput!): DeleteDNSRecordPayload
	upsertDomainFromZoneFile(input: UpsertDomainFromZoneFileInput!): UpsertDomainFromZoneFilePayload
	deleteDomain(input: DeleteDomainInput!): DeleteDomainPayload
	"""
	Deprecated: use UpdateEnvVars.
	"""
	upsertAppSecret(input: UpsertAppSecretInput!): UpsertAppSecretPayload @deprecated(reason: "Use `updateEnvVars` instead.")
	"""
	Deprecated: use UpdateEnvVars.
	"""
	upsertAppSecrets(input: UpsertAppSecretsInput!): UpsertAppSecretsPayload @deprecated(reason: "Use `updateEnvVars` instead.")
	"""
	Create, update, or delete app environment variables on an app with given ID
	"""
	updateEnvVars(input: UpdateEnvVarsInput!): UpdateEnvVarsPayload
	"""
	Deprecated: use UpdateEnvVars.
	"""
	deleteAppSecret(input: DeleteAppSecretInput!): DeleteAppSecretPayload @deprecated(reason: "Use `updateEnvVars` instead.")
	"""
	Redeploy the active version of an app.
	"""
	redeployActiveVersion(input: RedeployActiveVersionInput!): RedeployActiveVersionPayload
	"""
	Redeploy the active version of an app by app ID.
	"""
	redeployActiveAppVersion(input: RedeployActiveAppVersionInput!): RedeployActiveVersionPayload
	"""
	Toggle HTTP redirect for the active version of app
	"""
	toggleForceHttps(input: ToggleForceHTTPSInput!): ToggleForceHTTPSPayload
	"""
	Deprecated. Use rotateS3Credentials with an AppVolume ID.
	"""
	rotateS3SecretsForApp(input: RotateS3SecretsForAppInput!): RotateS3SecretsForAppPayload @deprecated(reason: "Use rotateS3Credentials with an AppVolume ID.")
	"""
	Rotate S3 credentials for an app volume.
	"""
	rotateS3Credentials(input: RotateS3CredentialsInput!): RotateS3CredentialsPayload!
	"""
	Delete a database for an app.
	"""
	rotateCredentialsForAppDb(input: RotateCredentialsForAppDBInput!): RotateCredentialsForAppDBPayload
	"""
	Create a new database for an app.
	"""
	createAppDb(input: CreateAppDBInput!): CreateAppDBPayload
	"""
	Create a new database and link it to an app.
	"""
	createDatabaseAndLinkToApp(input: CreateAppDatabaseInput!): CreateAppDBPayload
	sendAppEmail(input: SendAppEmailInput!): SendAppEmailPayload!
	"""
	Delete a database for an app.
	"""
	deleteAppDb(input: DeleteAppDBInput!): DeleteAppDBPayload
	"""
	Create a UI-managed volume for an app.
	"""
	createAppVolume(input: CreateAppVolumeInput!): CreateAppVolumePayload!
	"""
	Soft-delete an app volume.
	"""
	deleteAppVolume(input: DeleteAppVolumeInput!): DeleteAppVolumePayload!
	"""
	Update an app volume.
	"""
	updateVolume(input: UpdateVolumeInput!): UpdateVolumePayload!
	updateBuildConfig(input: UpdateBuildConfigInput!): UpdateBuildConfigPayload
	"""
	Get the autobuild config for a given repo
	"""
	autobuildConfigForRepo(input: AutobuildConfigForRepoInput!): AutobuildConfigForRepoPayload!
	"""
	Get the autobuild config for a given zip upload URL
	"""
	autobuildConfigForZipUpload(input: AutobuildConfigForZipUploadInput!): AutobuildConfigForZipUploadPayload!
	"""
	Add a new github app installation
	"""
	installGithubApp(input: InstallGithubAppInput!): InstallGithubAppPayload!
	"""
	Detach autobuild from app.
	"""
	detachAppFromAutobuild(input: DetachAppFromAutobuildInput!): DetachAppFromAutobuildPayload!
	"""
	Update autobuild config for an app.
	"""
	updateAutobuildConfigForApp(input: UpdateAutobuildConfigForAppInput!): UpdateAutobuildConfigForAppPayload!
	"""
	Connect a github repo to an app.
	"""
	connectGithubRepoToApp(input: ConnectGithubRepoToAppInput!): ConnectGithubRepoToAppPayload!
	"""
	Disconnect a github repo from an app.
	"""
	disconnectGithubRepoFromApp(input: DisconnectGithubRepoFromAppInput!): DisconnectGithubRepoFromAppPayload!
	updateGithubRepoConnection(input: UpdateGithubRepoAppConnectionInput!): UpdateGithubRepoAppConnectionPayload!
	"""
	Deploy a wordpress site.
	"""
	deployWordpress(input: DeployWordpressInput!): DeployWordpressPayload @deprecated(reason: "Use `publishAppFromRepoAutobuild` subscription instead.")
	installWasmerWpPlugin(input: InstallWasmerWpPluginInput!): InstallWasmerWpPluginPayload
	generateWordPressMagicLoginUrl(input: GenerateWordPressMagicLoginUrlInput!): GenerateWordPressMagicLoginUrlPayload
	"""
	Enable app that was previously disabled.
	"""
	enableApp(input: EnableAppInput!): EnableAppPayload
	"""
	Disable app with a reason.
	"""
	disableApp(input: DisableAppInput!): DisableAppPayload
	"""
	Ban app with a reason.
	"""
	banApp(input: BanAppInput!): BanAppPayload
	"""
	Un-ban app with a reason.
	"""
	unbanApp(input: UnbanAppInput!): UnbanAppPayload
	"""
	Claim a perishable app as their own.
	"""
	claimPerishableApp(input: ClaimPerishableAppInput!): ClaimPerishableAppPayload
	deployViaAutobuild(input: DeployViaAutobuildInput!): DeployViaAutobuildPayload
	"""
	Delete a user with some reason. The deletion will be soft, so the
	underlying data will remain and be anonymized following GDPR.
	"""
	deleteUser(input: DeleteUserInput!): DeleteUserPayload
	"""
	Create a new vault from yaml config
	"""
	upsertVault(input: UpsertVaultInput!): UpsertVaultPayload
	"""
	Attach vault to an app
	"""
	attachVault(input: AttachVaultInput!): AttachVaultPayload
	"""
	Migrate an app to a different region.
	"""
	migrateAppRegion(input: MigrateAppRegionInput!): MigrateAppRegionPayload
	generateDeployToken(input: GenerateDeployTokenInput!): GenerateDeployTokenPayload
	readNotification(input: ReadNotificationInput!): ReadNotificationPayload
	seePendingNotifications(input: SeePendingNotificationsInput!): SeePendingNotificationsPayload
	generateCheckoutUrl(input: GenerateCheckoutUrlInput!): GenerateCheckoutUrlPayload!
	createCheckoutSession(input: CreateCheckoutSessionInput!): CreateCheckoutSessionPayload!
	cancelSubscription(input: CancelSubscriptionInput!): CancelSubscriptionPayload!
	renewCanceledSubscription(input: RenewCanceledSubscriptionInput!): RenewCanceledSubscriptionPayload!
	publishPublicKey(input: PublishPublicKeyInput!): PublishPublicKeyPayload
	publishPackage(input: PublishPackageInput!): PublishPackagePayload
	pushPackageRelease(input: PushPackageReleaseInput!): PushPackageReleasePayload
	tagPackageRelease(input: TagPackageReleaseInput!): TagPackageReleasePayload
	updatePackage(input: UpdatePackageInput!): UpdatePackagePayload
	likePackage(input: LikePackageInput!): LikePackagePayload
	unlikePackage(input: UnlikePackageInput!): UnlikePackagePayload
	watchPackage(input: WatchPackageInput!): WatchPackagePayload
	unwatchPackage(input: UnwatchPackageInput!): UnwatchPackagePayload
	archivePackage(input: ArchivePackageInput!): ArchivePackagePayload
	renamePackage(input: RenamePackageInput!): RenamePackagePayload
	changePackageVersionArchivedStatus(input: ChangePackageVersionArchivedStatusInput!): ChangePackageVersionArchivedStatusPayload
	invitePackageCollaborator(input: InvitePackageCollaboratorInput!): InvitePackageCollaboratorPayload
	acceptPackageCollaboratorInvite(input: AcceptPackageCollaboratorInviteInput!): AcceptPackageCollaboratorInvitePayload
	removePackageCollaboratorInvite(input: RemovePackageCollaboratorInviteInput!): RemovePackageCollaboratorInvitePayload
	updatePackageCollaboratorRole(input: UpdatePackageCollaboratorRoleInput!): UpdatePackageCollaboratorRolePayload
	updatePackageCollaboratorInviteRole(input: UpdatePackageCollaboratorInviteRoleInput!): UpdatePackageCollaboratorInviteRolePayload
	removePackageCollaborator(input: RemovePackageCollaboratorInput!): RemovePackageCollaboratorPayload
	requestPackageTransfer(input: RequestPackageTransferInput!): RequestPackageTransferPayload
	acceptPackageTransferRequest(input: AcceptPackageTransferRequestInput!): AcceptPackageTransferRequestPayload
	removePackageTransferRequest(input: RemovePackageTransferRequestInput!): RemovePackageTransferRequestPayload
	generateBindingsForAllPackages(input: GenerateBindingsForAllPackagesInput!): GenerateBindingsForAllPackagesPayload
	makePackagePublic(input: MakePackagePublicInput!): MakePackagePublicPayload
	generateUploadUrl(input: GenerateUploadUrlInput!): GenerateUploadUrlPayload
}

type NSRecord implements Node & DNSRecordInterface {
	nsdname: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

type NakedDeployment implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	updatedAt: DateTime!
	appVersion: DeployAppVersion
}

type Namespace implements PackageOwner & Owner & Node {
	"""
	The ID of the object
	"""
	id: ID!
	probationStartedAt: DateTime
	name: String!
	displayName: String
	description: String!
	avatarUpdatedAt: DateTime
	twitterHandle: String
	githubHandle: String
	websiteUrl: String
	createdAt: DateTime!
	updatedAt: DateTime!
	wasmerInternal: Boolean!
	globalName: String!
	globalId: ID!
	maintainerInvites(offset: Int, before: String, after: String, first: Int, last: Int): NamespaceCollaboratorInviteConnection!
	userSet(offset: Int, before: String, after: String, first: Int, last: Int): UserConnection!
	viewerCan(action: OwnerAction!): Boolean!
	isPro: Boolean!
	limitState: LimitState!
	avatar: String!
	packages(offset: Int, before: String, after: String, first: Int, last: Int): PackageConnection!
	apps(sortBy: DeployAppsSortBy, offset: Int, before: String, after: String, first: Int, last: Int): DeployAppConnection!
	packageVersions(offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionConnection!
	collaborators(offset: Int, before: String, after: String, first: Int, last: Int): NamespaceCollaboratorConnection!
	apiKeys(offset: Int, before: String, after: String, first: Int, last: Int): APIKeyConnection!
	publicActivity(offset: Int, before: String, after: String, first: Int, last: Int): ActivityEventConnection!
	pendingInvites(offset: Int, before: String, after: String, first: Int, last: Int): NamespaceCollaboratorInviteConnection!
	viewerHasRole(role: GrapheneRole!): Boolean!
	viewerAsCollaborator(role: GrapheneRole): NamespaceCollaborator
	"""
	Whether the current user is invited to the namespace
	"""
	viewerIsInvited: Boolean!
	"""
	The invitation for the current user to the namespace
	"""
	viewerInvitation: NamespaceCollaboratorInvite
	packageTransfersIncoming(offset: Int, before: String, after: String, first: Int, last: Int): PackageTransferRequestConnection!
	usageMetrics(		variant: MetricType!,		grouping: MetricGrouping,
		"""
		List of app IDs. Metrics gets filtered for the specific apps.
		"""
		appIds: [ID],
		"""
		Optional time range filter.
		"""
		timeRange: TimeRangeInput
	): [UsageMetric]!
	groupedMetrics(startAt: DateTime!, endAt: DateTime!, groupedBy: MetricGrouping!): UsageMetrics!
	domains(offset: Int, before: String, after: String, first: Int, last: Int): DNSDomainConnection!
	sentEmails(first: Int, after: String, last: Int, before: String): EmailMessageConnection!
	receivedEmails(first: Int, after: String, last: Int, before: String): EmailMessageConnection!
	billing: Billing
	currentUsage(
		"""
		List of app IDs. Usage gets filtered for the specific apps.
		"""
		appIds: [ID],
		"""
		Optional time range filter.
		"""
		timeRange: TimeRangeInput
	): OwnerUsageSummary
	emailUsage: EmailUsageSummary
}

type NamespaceCollaborator implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	user: User!
	role: RegistryNamespaceMaintainerRoleChoices!
	namespace: Namespace!
	createdAt: DateTime!
	updatedAt: DateTime!
	invite: NamespaceCollaboratorInvite
}

type NamespaceCollaboratorConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [NamespaceCollaboratorEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `NamespaceCollaborator` and its cursor.
"""
type NamespaceCollaboratorEdge {
	"""
	The item at the end of the edge
	"""
	node: NamespaceCollaborator!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type NamespaceCollaboratorInvite implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	requestedBy: User!
	user: User
	inviteEmail: String
	namespace: Namespace!
	role: RegistryNamespaceMaintainerInviteRoleChoices!
	accepted: NamespaceCollaborator
	approvedBy: User
	declinedBy: User
	createdAt: DateTime!
	expiresAt: DateTime!
	closedAt: DateTime
}

type NamespaceCollaboratorInviteConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [NamespaceCollaboratorInviteEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `NamespaceCollaboratorInvite` and its cursor.
"""
type NamespaceCollaboratorInviteEdge {
	"""
	The item at the end of the edge
	"""
	node: NamespaceCollaboratorInvite!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type NamespaceConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [NamespaceEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `Namespace` and its cursor.
"""
type NamespaceEdge {
	"""
	The item at the end of the edge
	"""
	node: Namespace!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

enum NamespaceOrderBy {
	PACKAGE_COUNT
	COLLABORATOR_COUNT
	APP_COUNT
	CREATED_DATE
}

input NamespacesFilter {
	count: Int = 1000
	sortBy: SearchOrderSort = DESC
	"""
	Filter namespaces by package count.
	"""
	packageCount: CountFilter
	"""
	Filter namespaces created after this date.
	"""
	createdAfter: DateTime
	"""
	Filter namespaces created before this date.
	"""
	createdBefore: DateTime
	"""
	Filter namespaces by user count.
	"""
	userCount: CountFilter
	"""
	Filter namespaces by collaborator.
	"""
	collaborator: String
	"""
	Order namespaces by field.
	"""
	orderBy: NamespaceOrderBy = CREATED_DATE
}

type NativeExecutable implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	module: String! @deprecated(reason: "Use filename instead")
	filename: String!
	filesize: Int!
	targetTriple: String!
	downloadUrl: String!
}

type NativeExecutableConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [NativeExecutableEdge]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `NativeExecutable` and its cursor.
"""
type NativeExecutableEdge {
	"""
	The item at the end of the edge
	"""
	node: NativeExecutable!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input NetworkDnsAllowedHostsV1 {
	allowAllHosts: Boolean
	hosts: [String]
	regexPatterns: [String]
	wildcardPatterns: [String]
}

input NetworkEgressV1 {
	enabled: Boolean
}

input NewNonceInput {
	name: String!
	callbackUrl: String!
	clientMutationId: String
}

type NewNoncePayload {
	nonce: Nonce!
	clientMutationId: String
}

interface Node {
	"""
	The ID of the object
	"""
	id: ID!
}

type NodeBodyRange {
	entity: Node!
	offset: Int!
	length: Int!
}

type Nonce implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	callbackUrl: String!
	createdAt: DateTime!
	isValidated: Boolean!
	secret: String!
	token: String!
	expired: Boolean!
	authUrl: String!
}

type NonceConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [NonceEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `Nonce` and its cursor.
"""
type NonceEdge {
	"""
	The item at the end of the edge
	"""
	node: Nonce!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input ObtainJSONWebTokenInput {
	username: String!
	password: String!
	clientMutationId: String
}

type ObtainJSONWebTokenPayload {
	payload: GenericScalar!
	refreshExpiresIn: Int!
	username: CaseInsensitiveString!
	token: String!
	refreshToken: String!
	clientMutationId: String
}

interface Owner {
	globalName: String!
	globalId: ID!
	viewerCan(action: OwnerAction!): Boolean!
	isPro: Boolean!
	emailUsage: EmailUsageSummary
}

enum OwnerAction {
	DEPLOY_APP
	PUBLISH_PACKAGE
}

"""
Usage summary for a specific owner.
"""
type OwnerUsageSummary {
	since: DateTime!
	cpuTime: Usage!
	noRequests: Usage!
	ingress: Usage!
	egress: Usage!
	appCount: Usage!
	buildMinutes: Usage!
}

type PTRRecord implements Node & DNSRecordInterface {
	ptrdname: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

type Package implements PackageOwner & Node & Likeable {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	namespace: String!
	private: Boolean!
	createdAt: DateTime!
	updatedAt: DateTime!
	maintainers: [User]! @deprecated(reason: "Please use collaborators instead")
	curated: Boolean!
	ownerObjectId: Int!
	lastVersion: PackageVersion
	"""
	The app icon. It should be formatted in the same way as Apple icons
	"""
	icon: String!
	totalDownloads: Int!
	iconUpdatedAt: DateTime
	likersCount: Int!
	watchersCount: Int!
	webcs(offset: Int, before: String, after: String, first: Int, last: Int): WebcImageConnection!
	packagewebcSet(offset: Int, before: String, after: String, first: Int, last: Int): PackageWebcConnection!
	versions: [PackageVersion]
	collectionSet: [Collection!]!
	"""
	List of app templates for this package
	"""
	appTemplates(offset: Int, before: String, after: String, first: Int, last: Int): AppTemplateConnection!
	categories(offset: Int, before: String, after: String, first: Int, last: Int): CategoryConnection!
	keywords(offset: Int, before: String, after: String, first: Int, last: Int): PackageKeywordConnection!
	viewerHasLiked: Boolean!
	globalName: String!
	globalId: ID!
	viewerCan(action: OwnerAction!): Boolean!
	alias: String
	displayName: String!
	"""
	The name of the package without the owner
	"""
	packageName: String!
	"""
	The app icon. It should be formatted in the same way as Apple icons
	"""
	appIcon: String! @deprecated(reason: "Please use icon instead")
	"""
	The total number of downloads of the package
	"""
	downloadsCount: Int
	"""
	The public keys for all the published versions
	"""
	publicKeys: [PublicKey!]!
	collaborators(offset: Int, before: String, after: String, first: Int, last: Int): PackageCollaboratorConnection!
	pendingInvites(offset: Int, before: String, after: String, first: Int, last: Int): PackageCollaboratorInviteConnection!
	viewerHasRole(role: GrapheneRole!): Boolean!
	viewerAsCollaborator(role: GrapheneRole): PackageCollaborator
	owner: PackageOwner!
	isTransferring: Boolean!
	activeTransferRequest: PackageTransferRequest
	isArchived: Boolean!
	viewerIsWatching: Boolean!
	showDeployButton: Boolean!
	similarPackageVersions(before: String, after: String, first: Int, last: Int): PackageSearchConnection!
	"""
	Whether the current user is invited to the package
	"""
	viewerIsInvited: Boolean!
	"""
	The invitation for the current user to the package
	"""
	viewerInvitation: PackageCollaboratorInvite
}

type PackageCategory implements Node {
	id: ID!
	package: Package
	category: Category
}

type PackageCollaborator implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	user: User!
	role: RegistryPackageMaintainerRoleChoices!
	package: Package!
	createdAt: DateTime!
	updatedAt: DateTime!
	invite: PackageCollaboratorInvite
}

type PackageCollaboratorConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageCollaboratorEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `PackageCollaborator` and its cursor.
"""
type PackageCollaboratorEdge {
	"""
	The item at the end of the edge
	"""
	node: PackageCollaborator!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type PackageCollaboratorInvite implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	requestedBy: User!
	user: User
	inviteEmail: String
	package: Package!
	role: RegistryPackageMaintainerInviteRoleChoices!
	accepted: PackageCollaborator
	approvedBy: User
	declinedBy: User
	createdAt: DateTime!
	expiresAt: DateTime!
	closedAt: DateTime
}

type PackageCollaboratorInviteConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageCollaboratorInviteEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `PackageCollaboratorInvite` and its cursor.
"""
type PackageCollaboratorInviteEdge {
	"""
	The item at the end of the edge
	"""
	node: PackageCollaboratorInvite!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type PackageConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

type PackageDistribution {
	"""
	Download URL of the tar.gz file.
	If the package was published with webc only,this will contain download URL for webc file instead.
	"""
	downloadUrl: String!
	expiresInSeconds: Int
	size: Int
	piritaDownloadUrl: String
	piritaExpiresInSeconds: Int
	piritaSize: Int
	piritaSha256Hash: String
	webcDownloadUrl: String
	webcExpiresInSeconds: Int
	webcSize: Int
	webcSha256Hash: String
	webcVersion: WebcVersion
	webcManifest: JSONString
}

"""
A Relay edge containing a `Package` and its cursor.
"""
type PackageEdge {
	"""
	The item at the end of the edge
	"""
	node: Package!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type PackageInfo {
	"""
	Number of package versions published this month
	"""
	versionsPublishedThisMonth: Int!
	"""
	Number of new packages published this month
	"""
	newPackagesThisMonth: Int!
	"""
	Number of package downloads this month
	"""
	packageDownloadsThisMonth: Int!
}

"""
This is for backwards compatibility with the old PackageInstance type.
"""
interface PackageInstance {
	piritaManifest: JSONString
	piritaOffsets: JSONString
	piritaVolumes: JSONString
	isArchived: Boolean!
	clientName: String
	publishedBy: User!
	createdAt: DateTime!
	updatedAt: DateTime!
	package: Package!
	webc: WebcImage
	webcV3: WebcImage
	tag: String!
}

type PackageKeyword implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
}

type PackageKeywordConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageKeywordEdge]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `PackageKeyword` and its cursor.
"""
type PackageKeywordEdge {
	"""
	The item at the end of the edge
	"""
	node: PackageKeyword!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

enum PackageOrderBy {
	ALPHABETICALLY
	SIZE
	TOTAL_DOWNLOADS
	PUBLISHED_DATE
	CREATED_DATE
	TOTAL_LIKES
}

"""
Setup for backwards compatibility with existing frontends.
"""
interface PackageOwner {
	globalName: String!
	globalId: ID!
	viewerCan(action: OwnerAction!): Boolean!
}

interface PackageReleaseInterface {
	piritaManifest: JSONString
	piritaOffsets: JSONString
	piritaVolumes: JSONString
	isArchived: Boolean!
	clientName: String
	publishedBy: User!
	createdAt: DateTime!
	updatedAt: DateTime!
	package: Package!
	webc: WebcImage
	webcV3: WebcImage
	tag: String!
}

type PackageRollout implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	externalId: String
	rollout: Rollout!
	sourcePackageVersion: PackageVersion
	sourcePackageRelease: PackageWebc
}

type PackageRolloutConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageRolloutEdge]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `PackageRollout` and its cursor.
"""
type PackageRolloutEdge {
	"""
	The item at the end of the edge
	"""
	node: PackageRollout!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type PackageSearchConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageSearchEdge]!
	totalCount: Int
}

"""
A Relay edge containing a `PackageSearch` and its cursor.
"""
type PackageSearchEdge {
	"""
	The item at the end of the edge
	"""
	node: PackageVersion!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type PackageTransferRequest implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	requestedBy: User!
	previousOwnerObjectId: Int!
	newOwnerObjectId: Int!
	package: Package!
	approvedBy: User
	declinedBy: User
	createdAt: DateTime!
	expiresAt: DateTime!
	closedAt: DateTime
	previousOwner: PackageOwner!
	newOwner: PackageOwner!
}

type PackageTransferRequestConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageTransferRequestEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `PackageTransferRequest` and its cursor.
"""
type PackageTransferRequestEdge {
	"""
	The item at the end of the edge
	"""
	node: PackageTransferRequest!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type PackageVersion implements Node & PackageInstance & PackageReleaseInterface {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	package: Package!
	webc: WebcImage
	webcV3: WebcImage
	"""
	List of direct dependencies of this package version
	"""
	dependencies(offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionConnection!
	publishedBy: User!
	tag: String!
	clientName: String
	webcGenerationErrors: String
	version: String!
	description: String!
	manifest: String!
	license: String
	licenseFile: String
	readme: String
	witMd: String
	repository: String
	homepage: String
	staticObjectsCompiled: Boolean!
	nativeExecutablesCompiled: Boolean!
	signature: Signature
	isArchived: Boolean!
	file: String!
	fileSize: BigInt!
	totalDownloads: Int!
	bindingsState: RegistryPackageVersionBindingsStateChoices!
	nativeExecutablesState: RegistryPackageVersionNativeExecutablesStateChoices!
	packagewebcSet(offset: Int, before: String, after: String, first: Int, last: Int): PackageWebcConnection!
	lastversionPackage(offset: Int, before: String, after: String, first: Int, last: Int): PackageConnection!
	commands: [Command!]!
	nativeexecutableSet(offset: Int, before: String, after: String, first: Int, last: Int): NativeExecutableConnection!
	bindingsgeneratorSet(offset: Int, before: String, after: String, first: Int, last: Int): BindingsGeneratorConnection!
	javascriptlanguagebindingSet(offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionNPMBindingConnection!
	pythonlanguagebindingSet(offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionPythonBindingConnection!
	deployappversionSet(offset: Int, before: String, after: String, first: Int, last: Int): DeployAppVersionConnection!
	packagerolloutSet(offset: Int, before: String, after: String, first: Int, last: Int): PackageRolloutConnection!
	piritaManifest: JSONString
	piritaOffsets: JSONString
	piritaVolumes: JSONString
	piritaFile: String @deprecated(reason: "Please use distribution.piritaDownloadUrl instead.")
	piritaFileSize: Int @deprecated(reason: "Please use distribution.piritaSize instead.")
	pirita256hash: String @deprecated(reason: "Please use distribution.piritaSha256Hash instead.")
	distribution(version: WebcVersion): PackageDistribution!
	filesystem: [PackageVersionFilesystem]!
	isLastVersion: Boolean!
	witFile: String
	isSigned: Boolean!
	moduleInterfaces: [InterfaceVersion!]!
	modules: [PackageVersionModule!]!
	getPiritaContents(volume: String! = "atom", base: String! = ""): [PiritaFilesystemItem!]! @deprecated(reason: "File exploration is of the webc is not supported anymore, please get the files directly from the webc")
	getWebcContents(volume: String! = "atom", base: String! = "/"): [WEBCFilesystemItem!]! @deprecated(reason: "File exploration is of the webc is not supported anymore, please get the files directly from the webc")
	nativeExecutables(triple: String, wasmerCompilerVersion: String): [NativeExecutable]
	bindings: [PackageVersionLanguageBinding]!
	npmBindings: PackageVersionNPMBinding
	pythonBindings: PackageVersionPythonBinding
	bindingsSet(before: String, after: String, first: Int, last: Int): PackageVersionBindingConnection
	hasBindings: Boolean!
	hasCommands: Boolean!
	showDeployButton: Boolean!
	isCorrupt: Boolean!
}

union PackageVersionBinding = PackageVersionNPMBinding | PackageVersionPythonBinding

type PackageVersionBindingConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageVersionBindingEdge]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `PackageVersionBinding` and its cursor.
"""
type PackageVersionBindingEdge {
	"""
	The item at the end of the edge
	"""
	node: PackageVersionBinding!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type PackageVersionConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageVersionEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `PackageVersion` and its cursor.
"""
type PackageVersionEdge {
	"""
	The item at the end of the edge
	"""
	node: PackageVersion!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type PackageVersionFilesystem {
	wasm: String!
	host: String!
}

interface PackageVersionLanguageBinding {
	id: ID!
	language: ProgrammingLanguage!
	"""
	The URL of the generated artifacts on Wasmer CDN.
	"""
	url: String!
	"""
	When the binding was generated
	"""
	createdAt: DateTime!
	"""
	Package version used to generate this binding
	"""
	generator: BindingsGenerator!
	name: String! @deprecated(reason: "Do not use this field, since bindings for all modules are generated at once now.")
	kind: String! @deprecated(reason: "Do not use this field, since bindings for all modules are generated at once now.")
	"""
	Name of package source
	"""
	packageName: String!
	"""
	Name of the package to import
	"""
	importablePackageName: String!
	"""
	Code snippet example to use the package
	"""
	codeSnippetExample: String!
	module: String! @deprecated(reason: "Do not use this field, since bindings for all modules are generated at once now.")
}

type PackageVersionModule {
	name: String!
	source: String!
	abi: String
	publicUrl: String!
	atom: PiritaFilesystemFile!
	rangeHeader: String!
}

type PackageVersionNPMBinding implements PackageVersionLanguageBinding & Node {
	"""
	The ID of the object
	"""
	id: ID!
	language: ProgrammingLanguage!
	"""
	The URL of the generated artifacts on Wasmer CDN.
	"""
	url: String!
	"""
	When the binding was generated
	"""
	createdAt: DateTime!
	"""
	Package version used to generate this binding
	"""
	generator: BindingsGenerator!
	name: String! @deprecated(reason: "Do not use this field, since bindings for all modules are generated at once now.")
	kind: String! @deprecated(reason: "Do not use this field, since bindings for all modules are generated at once now.")
	"""
	Name of package source
	"""
	packageName: String!
	"""
	Name of the package to import
	"""
	importablePackageName: String!
	"""
	Code snippet example to use the package
	"""
	codeSnippetExample: String!
	module: String! @deprecated(reason: "Do not use this field, since bindings for all modules are generated at once now.")
	npmDefaultInstallPackageName(url: String): String! @deprecated(reason: "Please use packageName instead")
}

type PackageVersionNPMBindingConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageVersionNPMBindingEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `PackageVersionNPMBinding` and its cursor.
"""
type PackageVersionNPMBindingEdge {
	"""
	The item at the end of the edge
	"""
	node: PackageVersionNPMBinding!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type PackageVersionPythonBinding implements PackageVersionLanguageBinding & Node {
	"""
	The ID of the object
	"""
	id: ID!
	language: ProgrammingLanguage!
	"""
	The URL of the generated artifacts on Wasmer CDN.
	"""
	url: String!
	"""
	When the binding was generated
	"""
	createdAt: DateTime!
	"""
	Package version used to generate this binding
	"""
	generator: BindingsGenerator!
	name: String! @deprecated(reason: "Do not use this field, since bindings for all modules are generated at once now.")
	kind: String! @deprecated(reason: "Do not use this field, since bindings for all modules are generated at once now.")
	"""
	Name of package source
	"""
	packageName: String!
	"""
	Name of the package to import
	"""
	importablePackageName: String!
	"""
	Code snippet example to use the package
	"""
	codeSnippetExample: String!
	module: String! @deprecated(reason: "Do not use this field, since bindings for all modules are generated at once now.")
	pythonDefaultInstallPackageName(url: String): String!
}

type PackageVersionPythonBindingConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageVersionPythonBindingEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `PackageVersionPythonBinding` and its cursor.
"""
type PackageVersionPythonBindingEdge {
	"""
	The item at the end of the edge
	"""
	node: PackageVersionPythonBinding!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type PackageVersionReadyResponse {
	state: PackageVersionState!
	packageVersion: PackageVersion!
	success: Boolean!
}

"""
An enumeration.
"""
enum PackageVersionSortBy {
	NEWEST
	OLDEST
}

enum PackageVersionState {
	WEBC_GENERATED
	BINDINGS_GENERATED
	NATIVE_EXES_GENERATED
}

type PackageWebc implements Node & PackageInstance & PackageReleaseInterface {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	updatedAt: DateTime!
	package: Package!
	webc: WebcImage
	piritaManifest: JSONString
	piritaOffsets: JSONString
	piritaVolumes: JSONString
	isArchived: Boolean!
	clientName: String
	publishedBy: User!
	webcV3: WebcImage
	tag: String!
	webcUrl: String!
}

type PackageWebcConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PackageWebcEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `PackageWebc` and its cursor.
"""
type PackageWebcEdge {
	"""
	The item at the end of the edge
	"""
	node: PackageWebc!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input PackagesFilter {
	count: Int = 1000
	sortBy: SearchOrderSort = DESC
	"""
	Filter packages by being curated.
	"""
	curated: Boolean
	"""
	Filter packages by publish date.
	"""
	publishDate: SearchPublishDate
	"""
	Filter packages by having bindings.
	"""
	hasBindings: Boolean = false
	"""
	Filter packages by being standalone.
	"""
	isStandalone: Boolean = false
	"""
	Filter packages by having commands.
	"""
	hasCommands: Boolean = false
	"""
	Filter packages by interface.
	"""
	withInterfaces: [String]
	"""
	Filter packages by deployable status.
	"""
	deployable: Boolean
	"""
	Filter packages by license.
	"""
	license: String
	"""
	Filter packages created after this date.
	"""
	createdAfter: DateTime
	"""
	Filter packages created before this date.
	"""
	createdBefore: DateTime
	"""
	Filter packages with version published after this date.
	"""
	lastPublishedAfter: DateTime
	"""
	Filter packages with version published before this date.
	"""
	lastPublishedBefore: DateTime
	"""
	Filter packages by size.
	"""
	size: CountFilter
	"""
	Filter packages by download count.
	"""
	downloads: CountFilter
	"""
	Filter packages by like count.
	"""
	likes: CountFilter
	"""
	Filter packages by owner.
	"""
	owner: String
	"""
	Filter packages by published by.
	"""
	publishedBy: String
	"""
	Order packages by field.
	"""
	orderBy: PackageOrderBy = PUBLISHED_DATE
}

"""
The Relay compliant `PageInfo` type, containing data necessary to paginate this connection.
"""
type PageInfo {
	"""
	When paginating forwards, are there more items?
	"""
	hasNextPage: Boolean!
	"""
	When paginating backwards, are there more items?
	"""
	hasPreviousPage: Boolean!
	"""
	When paginating backwards, the cursor to continue.
	"""
	startCursor: String
	"""
	When paginating forwards, the cursor to continue.
	"""
	endCursor: String
}

type Payment {
	id: ID
	amount: String
	paidOn: DateTime
}

type PaymentIntent implements Node {
	"""
	The datetime this object was created in stripe.
	"""
	created: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	amount: String!
	currency: String!
	status: String!
	invoicePdfUrl: String
}

type PaymentIntentConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [PaymentIntentEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `PaymentIntent` and its cursor.
"""
type PaymentIntentEdge {
	"""
	The item at the end of the edge
	"""
	node: PaymentIntent!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

union PaymentMethod = CardPaymentMethod

"""
An enumeration.
"""
enum PendingVerification {
	VALIDATE_EMAIL
	FINGERPRINT
	SUBMIT_ACCEPTABLE_EMAIL
}

type PiritaFilesystemDir {
	name(display: PiritaFilesystemNameDisplay): String!
}

type PiritaFilesystemFile {
	name(display: PiritaFilesystemNameDisplay): String!
	size: Int!
	offset: Int!
}

union PiritaFilesystemItem = PiritaFilesystemFile | PiritaFilesystemDir

enum PiritaFilesystemNameDisplay {
	RELATIVE
	ABSOLUTE
}

enum ProgrammingLanguage {
	PYTHON
	JAVASCRIPT
}

type PublicKey implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	owner: User!
	keyId: String!
	key: String!
	revokedAt: DateTime
	uploadedAt: DateTime!
	verifyingSignature: Signature
	revoked: Boolean!
}

input PublishDeployAppInput {
	"""
	The configuration of the app.
	"""
	config: Configuration!
	"""
	The name of the app.
	"""
	name: ID
	"""
	The owner of the app.
	"""
	owner: ID
	"""
	The description of the app.
	"""
	description: String
	"""
	If true, the new version will be set as the default version.
	"""
	makeDefault: Boolean = true
	"""
	If true, Publishing will fail if the source package does not have a valid webc.
	"""
	strict: Boolean = false
	"""
	If true, the mutation will wait for all deployment jobs to finish before returning.
	"""
	waitForJobs: Boolean = false
	"""
	If true, the mutation will trigger a screenshot generation job.
	"""
	generateScreenshot: Boolean = true
	"""
	Wait for smaller of n seconds or till the published app version is live.
	"""
	waitTillLive: Int = null
	clientMutationId: String
}

type PublishDeployAppPayload {
	clientMutationId: String
	deployAppVersion: DeployAppVersion!
}

input PublishPackageInput {
	manifest: String!
	name: String
	namespace: String
	version: String
	description: String
	license: String
	licenseFile: String
	readme: String
	repository: String
	homepage: String
	"""
	The package file
	"""
	file: String @deprecated(reason: "Use `fileUpload` instead")
	"""
	The package file
	"""
	fileUpload: Upload
	signedUrl: String
	signature: InputSignature
	"""
	The package icon
	"""
	icon: String @deprecated(reason: "Use `iconUpload` instead")
	"""
	The package icon
	"""
	iconUpload: Upload
	"""
	Whether the package is private
	"""
	private: Boolean = false
	"""
	The upload format of the package
	"""
	uploadFormat: UploadFormat = targz
	"""
	Whether to wait for webc generation to finish
	"""
	wait: Boolean = false
	clientMutationId: String
}

type PublishPackagePayload {
	success: Boolean!
	clientMutationId: String
	packageVersion: PackageVersion
	packageWebc: PackageWebc
}

input PublishPublicKeyInput {
	keyId: String!
	key: String!
	verifyingSignatureId: String
	clientMutationId: String
}

type PublishPublicKeyPayload {
	clientMutationId: String
	success: Boolean!
	publicKey: PublicKey!
}

input PurgeCacheForAppVersionByIdInput {
	"""
	App version ID to purge cache for.
	"""
	appVersionId: ID!
	clientMutationId: String
}

input PurgeCacheForAppVersionInput {
	"""
	ID of the app version to purge cache for.
	"""
	id: ID!
	clientMutationId: String
}

"""
Purges all cache for this app version
"""
type PurgeCacheForAppVersionPayload {
	clientMutationId: String
	appVersion: DeployAppVersion!
	success: Boolean!
}

input PushPackageReleaseInput {
	namespace: String!
	signedUrl: String!
	name: String
	"""
	Whether the package is private
	"""
	private: Boolean = false
	clientMutationId: String
}

type PushPackageReleasePayload {
	success: Boolean!
	clientMutationId: String
	packageWebc: PackageWebc
}

type Query {
	getPasswordResetToken(token: String!): GetPasswordResetToken!
	getAuthNonce(name: String!): Nonce!
	"""
	Can the logged in user create app templates?
	"""
	canDeployAppToGithub: Boolean!
	"""
	Check if a repo exists in the logged in user's github account.
	"""
	checkRepoExists(
		"""
		The namespace of the repo to check.
		"""
		namespace: String!,
		"""
		The name of the repo to check.
		"""
		name: String!
	): Boolean!
	latestTOS: TermsOfService!
	getAppRegions(active: Boolean, supportsVolumes: Boolean, supportsDatabases: Boolean, offset: Int, before: String, after: String, first: Int, last: Int): AppRegionConnection!
	getDeployAppVersion(name: String!, owner: String, version: String): DeployAppVersion
	getAllDomains(namespace: String, ownerId: ID, offset: Int, before: String, after: String, first: Int, last: Int): DNSDomainConnection!
	getAllDNSRecords(sortBy: DNSRecordsSortBy, updatedAfter: DateTime, before: String, after: String, first: Int, last: Int): DNSRecordConnection!
	getDomain(name: String!): DNSDomain
	getDeployApp(		name: String!,
		"""
		Owner of the app. Defaults to logged in user.
		"""
		owner: String
	): DeployApp
	getAppByGlobalAlias(alias: String!): DeployApp
	autobuildDeploymentStatus(buildId: UUID!): AutobuildDeploymentStatus
	getDeployApps(ownerId: ID, sortBy: DeployAppsSortBy, updatedAfter: DateTime, offset: Int, before: String, after: String, first: Int, last: Int): DeployAppConnection!
	getAppVersions(sortBy: DeployAppVersionsSortBy, updatedAfter: DateTime, offset: Int, before: String, after: String, first: Int, last: Int): DeployAppVersionConnection!
	getTemplateFrameworks(offset: Int, before: String, after: String, first: Int, last: Int): TemplateFrameworkConnection!
	getTemplateLanguages(offset: Int, before: String, after: String, first: Int, last: Int): TemplateLanguageConnection!
	getAppTemplates(categorySlug: String, frameworkSlug: String, languageSlug: String, sortBy: AppTemplatesSortBy, highlighted: Boolean, offset: Int, before: String, after: String, first: Int, last: Int): AppTemplateConnection!
	getAppSecrets(appId: ID!, names: [String], nameRegex: String, offset: Int, before: String, after: String, first: Int, last: Int): SecretConnection @deprecated(reason: "Use `DeployApp.envVars` instead.")
	getAppSecret(appId: ID!, secretName: String!): Secret @deprecated(reason: "Use `DeployApp.envVars` instead.")
	getAppSecretLog(appId: ID!, offset: Int, before: String, after: String, first: Int, last: Int): SecretLogConnection @deprecated(reason: "Use `getAppEnvVarLog` instead.")
	getAppEnvVarLog(appId: ID!, offset: Int, before: String, after: String, first: Int, last: Int): EnvVarLogConnection
	getSecretValue(id: ID!): String @deprecated(reason: "Use `EnvVar.value` for non-sensitive environment variables.")
	getAppTemplate(slug: String!): AppTemplate
	getAppTemplateCategories(offset: Int, before: String, after: String, first: Int, last: Int): AppTemplateCategoryConnection!
	getBuildKinds(offset: Int, before: String, after: String, first: Int, last: Int): BuildKindConnection!
	"""
	Specify if the database name is valid or not.
	"""
	canDeployDbWithName(
		"""
		Name of the database
		"""
		name: String!
	): Boolean!
	wordpressDeploymentDefaults: WordpressDeploymentDefaults!
	wordpressVersions: [WordpressVersion!]!
	rollout(id: ID!): Rollout
	githubRollout(id: ID!): GitHubRollout
	viewer: User
	getUser(username: String!): User
	"""
	Generate a unique repo name in the logged in user's github account.
	"""
	newRepoName(
		"""
		The github namespace of the repo to create the repo in.
		"""
		namespace: String!,
		"""
		The template to use.
		"""
		templateSlug: String!
	): String!
	packages(offset: Int, before: String, after: String, first: Int, last: Int): PackageConnection!
	recentPackageVersions(curated: Boolean, offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionConnection!
	allPackageVersions(sortBy: PackageVersionSortBy, createdAfter: DateTime, updatedAfter: DateTime, offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionConnection!
	allPackageReleases(sortBy: PackageVersionSortBy, createdAfter: DateTime, updatedAfter: DateTime, offset: Int, before: String, after: String, first: Int, last: Int): PackageWebcConnection!
	getWebcImage(hash: String!): WebcImage
	getNamespace(name: String!): Namespace
	getPackage(name: String!): Package
	getPackages(names: [String!]!): [Package]!
	getPackageVersion(name: String!, version: String = "latest"): PackageVersion
	getPackageVersions(names: [String!]!): [PackageVersion]!
	getPackageVersionByHash(name: String!, hash: String!): PackageVersion
	getInterface(name: String!): Interface
	getInterfaces(names: [String!]!): [Interface]!
	getInterfaceVersion(name: String!, version: String = "latest"): InterfaceVersion
	getContract(name: String!): Interface @deprecated(reason: "Please use getInterface instead")
	getContracts(names: [String!]!): [Interface]! @deprecated(reason: "Please use getInterfaces instead")
	getContractVersion(name: String!, version: String): InterfaceVersion @deprecated(reason: "Please use getInterfaceVersion instead")
	getCommand(name: String!): Command
	getCommands(names: [String!]!): [Command]
	getCollections(before: String, after: String, first: Int, last: Int): CollectionConnection!
	getSignedUrlForPackageUpload(name: String, version: String = "latest", filename: String, expiresAfterSeconds: Int = 900, method: String): SignedUrl
	getSignedUrl(filename: String, expiresAfterSeconds: Int = 900, method: String): SignedUrl
	getPackageHash(name: String, hash: String!): PackageWebc
	getPackageRelease(hash: String): PackageWebc
	getPackageInstanceByVersionOrHash(name: String!, version: String, hash: String): PackageInstance
	categories(offset: Int, before: String, after: String, first: Int, last: Int): CategoryConnection!
	logs(appId: ID, appVersionId: ID, instanceId: ID, textSearch: String, before: String, after: String, first: Int, last: Int): LogConnection!
	logValues(		appId: ID,		appVersionId: ID,
		"""
		Label to get the values for
		"""
		label: String!,		before: String,		after: String
	): [String]!
	viewerCan(action: OwnerAction!, ownerName: String!): Boolean!
	blogposts(tags: [String!], offset: Int, before: String, after: String, first: Int, last: Int): BlogPostConnection!
	getBlogpost(slug: String, featured: Boolean): BlogPost
	allBlogpostTags(offset: Int, before: String, after: String, first: Int, last: Int): BlogPostTagConnection
	search(query: String!, packages: PackagesFilter, namespaces: NamespacesFilter, users: UsersFilter, apps: AppFilter, blogposts: BlogPostsFilter, appTemplates: AppTemplateFilter, before: String, after: String, first: Int, last: Int): SearchConnection!
	searchAutocomplete(kind: [SearchKind!], query: String!, before: String, after: String, first: Int, last: Int): SearchConnection!
	getGlobalObject(slug: String!): GlobalObject
	internalTask(id: ID!): InternalTask
	node(
		"""
		The ID of the object
		"""
		id: ID!
	): Node
	nodes(ids: [ID!]!): [Node]!
	info: RegistryInfo!
}

input ReadNotificationInput {
	notificationId: ID!
	clientMutationId: String
}

type ReadNotificationPayload {
	clientMutationId: String
	notification: UserNotification
}

"""
An enumeration.
"""
enum RecordKind {
	A
	AAAA
	CNAME
	MX
	NS
	TXT
	DNAME
	PTR
	SOA
	SRV
	CAA
	SSHFP
}

input RedeployActiveAppVersionInput {
	"""
	App ID to redeploy.
	"""
	appId: ID!
	clientMutationId: String
}

input RedeployActiveVersionInput {
	"""
	ID of the app to redeploy.
	"""
	id: ID!
	clientMutationId: String
}

"""
Redeploy the active version of an app.
"""
type RedeployActiveVersionPayload {
	clientMutationId: String
	app: DeployApp!
}

type Refresh {
	payload: GenericScalar!
	refreshExpiresIn: Int!
	token: String!
	refreshToken: String!
}

input RegisterDomainInput {
	name: String!
	namespace: String
	ownerId: ID
	importRecords: Boolean = true
	clientMutationId: String
}

type RegisterDomainPayload {
	clientMutationId: String
	success: Boolean!
	domain: DNSDomain
}

input RegisterUserInput {
	fullName: String
	email: String!
	username: CaseInsensitiveString!
	password: String!
	acceptedTos: Boolean
	intent: String
	fingerprintVisitorId: String
	enterProTrial: Boolean
	clientMutationId: String
}

type RegisterUserPayload {
	token: String
	clientMutationId: String
}

type RegistryInfo {
	"""
	Base URL for this registry
	"""
	baseUrl: String!
	"""
	Base URL for the default frontend
	"""
	defaultFrontend: String!
	"""
	URL to the graphql endpoint
	"""
	graphqlUrl: String!
	"""
	URL for app domains
	"""
	appDomain: String!
	"""
	URL to the graphql endpoint
	"""
	createBlogpostUrl: String
	"""
	Public metadata about packages
	"""
	packages: PackageInfo!
	"""
	Public metadata about the graphql schema
	"""
	schema: SchemaInfo!
}

"""
An enumeration.
"""
enum RegistryNamespaceMaintainerInviteRoleChoices {
	"""
	Owner
	"""
	OWNER
	"""
	Admin
	"""
	ADMIN
	"""
	Editor
	"""
	EDITOR
	"""
	Viewer
	"""
	VIEWER
}

"""
An enumeration.
"""
enum RegistryNamespaceMaintainerRoleChoices {
	"""
	Owner
	"""
	OWNER
	"""
	Admin
	"""
	ADMIN
	"""
	Editor
	"""
	EDITOR
	"""
	Viewer
	"""
	VIEWER
}

"""
An enumeration.
"""
enum RegistryPackageMaintainerInviteRoleChoices {
	"""
	Owner
	"""
	OWNER
	"""
	Admin
	"""
	ADMIN
	"""
	Editor
	"""
	EDITOR
	"""
	Viewer
	"""
	VIEWER
}

"""
An enumeration.
"""
enum RegistryPackageMaintainerRoleChoices {
	"""
	Owner
	"""
	OWNER
	"""
	Admin
	"""
	ADMIN
	"""
	Editor
	"""
	EDITOR
	"""
	Viewer
	"""
	VIEWER
}

"""
An enumeration.
"""
enum RegistryPackageVersionBindingsStateChoices {
	"""
	Bindings are not detected
	"""
	NOT_PRESENT
	"""
	Bindings are being built
	"""
	GENERATING
	"""
	Bindings generation has failed
	"""
	ERROR
	"""
	Bindings are built and present
	"""
	GENERATED_AND_PRESENT
}

"""
An enumeration.
"""
enum RegistryPackageVersionNativeExecutablesStateChoices {
	"""
	Native Executables are not detected
	"""
	NOT_PRESENT
	"""
	Native Executables are being built
	"""
	GENERATING
	"""
	Native Executables generation has failed
	"""
	ERROR
	"""
	Native Executables are built and present
	"""
	GENERATED_AND_PRESENT
}

input RemoveAppTransferRequestInput {
	appTransferRequestId: ID!
	clientMutationId: String
}

type RemoveAppTransferRequestPayload {
	clientMutationId: String
	app: DeployApp!
}

input RemoveNamespaceCollaboratorInput {
	namespaceCollaboratorId: ID!
	clientMutationId: String
}

input RemoveNamespaceCollaboratorInviteInput {
	inviteId: ID!
	clientMutationId: String
}

type RemoveNamespaceCollaboratorInvitePayload {
	namespace: Namespace!
	clientMutationId: String
}

type RemoveNamespaceCollaboratorPayload {
	namespace: Namespace!
	clientMutationId: String
}

input RemovePackageCollaboratorInput {
	packageCollaboratorId: ID!
	clientMutationId: String
}

input RemovePackageCollaboratorInviteInput {
	inviteId: ID!
	clientMutationId: String
}

type RemovePackageCollaboratorInvitePayload {
	clientMutationId: String
	package: Package!
}

type RemovePackageCollaboratorPayload {
	clientMutationId: String
	package: Package!
}

input RemovePackageTransferRequestInput {
	packageTransferRequestId: ID!
	clientMutationId: String
}

type RemovePackageTransferRequestPayload {
	clientMutationId: String
	package: Package!
}

input RenameAppAliasInput {
	"""
	App alias ID to delete.
	"""
	id: ID!
	"""
	New name for the alias.
	"""
	name: String!
	clientMutationId: String
}

type RenameAppAliasPayload {
	clientMutationId: String
	success: Boolean!
	alias: AppAlias!
}

input RenameAppInput {
	"""
	App ID to rename.
	"""
	id: ID!
	"""
	New name for the app.
	"""
	name: String!
	clientMutationId: String
}

type RenameAppPayload {
	clientMutationId: String
	success: Boolean!
	app: DeployApp!
}

input RenamePackageInput {
	packageId: ID!
	newName: String!
	clientMutationId: String
}

type RenamePackagePayload {
	clientMutationId: String
	package: Package!
}

input RenewCanceledSubscriptionInput {
	"""
	ID of owner whose subscription to renew.
	"""
	forOwnerId: ID!
	"""
	ID of the subscription to renew
	"""
	subscriptionId: ID!
	clientMutationId: String
}

type RenewCanceledSubscriptionPayload {
	clientMutationId: String
	ok: Boolean!
}

input RequestAppTransferInput {
	appId: ID!
	newOwnerId: ID!
	clientMutationId: String
}

type RequestAppTransferPayload {
	clientMutationId: String
	appTransferRequest: AppTransferRequest
	wasInstantlyTransferred: Boolean!
}

type RequestMetrics {
	totalRequests: BigInt!
	cachedRequests: BigInt!
	percentageCached: Float!
	http2xx: BigInt!
	http3xx: BigInt!
	http4xx: BigInt!
	http5xx: BigInt!
	httpOther: BigInt!
	requestDurationMillis: BigInt!
	uniqueUsers: Int!
	dataServedBytes: BigInt!
	dataCachedBytes: BigInt!
}

input RequestPackageTransferInput {
	packageId: ID!
	newOwnerId: ID!
	clientMutationId: String
}

type RequestPackageTransferPayload {
	clientMutationId: String
	package: Package!
	wasInstantlyTransferred: Boolean!
	packageTransferRequest: PackageTransferRequest
}

input RequestPasswordResetInput {
	email: String!
	clientMutationId: String
}

type RequestPasswordResetPayload {
	email: String!
	errors: [ErrorType!]
	clientMutationId: String
}

input RequestValidationEmailInput {
	"""
	The user id
	"""
	userId: ID @deprecated(reason: "This field is deprecated. The user can only request a validation email for themselves.")
	clientMutationId: String
}

type RequestValidationEmailPayload {
	clientMutationId: String
	user: User
	success: Boolean!
}

input RevealSshUserPasswordInput {
	"""
	SSH User ID
	"""
	sshUserId: ID!
	clientMutationId: String
}

"""
Reveal the password for an SSH user.
"""
type RevealSshUserPasswordPayload {
	clientMutationId: String
	sshUser: SshUser!
	password: String
}

type Revoke {
	revoked: Int!
}

input RevokeAPITokenInput {
	"""
	The API token ID
	"""
	tokenId: String
	"""
	The raw API token
	"""
	token: String
	clientMutationId: String
}

"""
Request To revoke an API token; these start with 'wap_'.
"""
type RevokeAPITokenPayload {
	clientMutationId: String
	token: APIToken
	success: Boolean
}

type Rollout implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	updatedAt: DateTime!
	deployappVersion: DeployAppVersion
	startCommand: String
	afterDeployCommand: String
	buildCommand: String
	installCommand: String
	buildId: String
	status: StatusEnum!
	logUrl: String @deprecated(reason: "Use fetchBuildLogsSubscription instead")
	buildConfiguration: BuildConfiguration
	rolloutDetails: RolloutType
}

type RolloutConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [RolloutEdge!]!
	totalCount: Int
}

"""
A Relay edge containing a `Rollout` and its cursor.
"""
type RolloutEdge {
	"""
	The item at the end of the edge
	"""
	node: Rollout!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

union RolloutType = GitHubRollout | ZipRollout | PackageRollout

input RotateAPIKeyInput {
	apiKeyId: ID!
	clientMutationId: String
}

type RotateAPIKeyPayload {
	apiKey: APIKey!
	keyRaw: String!
	clientMutationId: String
}

input RotateCredentialsForAppDBInput {
	"""
	App Database ID
	"""
	id: ID!
	clientMutationId: String
}

"""
Delete a database for an app.
"""
type RotateCredentialsForAppDBPayload {
	clientMutationId: String
	database: AppDatabase!
	password: String!
}

input RotateS3CredentialsInput {
	"""
	App Volume ID
	"""
	id: ID!
	clientMutationId: String
}

"""
Rotate S3 credentials for an app volume.
"""
type RotateS3CredentialsPayload {
	clientMutationId: String
	volume: AppVolume!
	accessKey: String!
	secretKey: String!
	endpoint: String!
	success: Boolean!
}

input RotateS3SecretsForAppInput {
	"""
	ID of the app.
	"""
	id: ID!
	clientMutationId: String
}

"""
Deprecated. Use rotateS3Credentials with an AppVolume ID.
"""
type RotateS3SecretsForAppPayload {
	clientMutationId: String
	app: DeployApp!
}

input RotateSshUserPasswordInput {
	"""
	SSH User ID
	"""
	sshUserId: ID!
	clientMutationId: String
}

"""
Rotate the password for an SSH user.
"""
type RotateSshUserPasswordPayload {
	clientMutationId: String
	sshUser: SshUser!
	password: String!
}

input RunEdgeCommandInput {
	appId: ID!
	command: String!
	timeoutSeconds: Int
	clientMutationId: String
}

type RunEdgeCommandPayload {
	clientMutationId: String
	app: DeployApp!
	stdout: String!
	stderr: String!
	exitCode: Int!
}

"""
Run a webassembly file.
"""
input RunnerWCGIV1 {
	source: WorkloadRunnerWasmSourceV1!
	dialect: String
}

input RunnerWebProxyV1 {
	source: WorkloadRunnerWasmSourceV1!
}

type S3 {
	accessKey: String!
	secretKey: String!
	endpoint: String!
}

type S3Credentials {
	accessKey: String!
	secretKey: String!
	endpoint: String!
}

type SOARecord implements Node & DNSRecordInterface {
	"""
	Primary master name server for this zone.
	"""
	mname: String!
	"""
	Email address of the administrator responsible for this zone.
	"""
	rname: String!
	"""
	A slave name server will initiate a zone transfer if this serial is incremented.
	"""
	serial: BigInt!
	"""
	Number of seconds after which secondary name servers should query the master to detect zone changes.
	"""
	refresh: BigInt!
	"""
	Number of seconds after which secondary name servers should retry to request the serial number from the master if the master does not respond.
	"""
	retry: BigInt!
	"""
	Number of seconds after which secondary name servers should stop answering request for this zone if the master does not respond.
	"""
	expire: BigInt!
	"""
	Time to live for purposes of negative caching.
	"""
	minimum: BigInt!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

type SRVRecord implements Node & DNSRecordInterface {
	"""
	The symbolic name of the desired service.
	"""
	service: String!
	"""
	The transport protocol of the desired service, usually either TCP or UDP.
	"""
	protocol: String!
	"""
	The priority of the target host, lower value means more preferred.
	"""
	priority: Int!
	"""
	A relative weight for records with the same priority, higher value means higher chance of getting picked.
	"""
	weight: Int!
	port: Int!
	"""
	The canonical hostname of the machine providing the service, ending in a dot.
	"""
	target: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

type SSHFPRecord implements Node & DNSRecordInterface {
	algorithm: DnsmanagerSshFingerprintRecordAlgorithmChoices!
	type: DnsmanagerSshFingerprintRecordTypeChoices!
	fingerprint: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

type SchemaInfo {
	"""
	Download link for graphql schema
	"""
	downloadUrl: String!
	"""
	SHA256 hash of the schema data
	"""
	SHA256Hash: String!
	"""
	Timestamp when the schema was last updated
	"""
	lastUpdated: DateTime!
}

type SearchConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [SearchEdge!]!
	totalCount: Int!
}

"""
A Relay edge containing a `Search` and its cursor.
"""
type SearchEdge {
	"""
	The item at the end of the edge
	"""
	node: SearchResult!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

enum SearchKind {
	PACKAGE
	NAMESPACE
	USER
}

enum SearchOrderSort {
	ASC
	DESC
}

enum SearchPublishDate {
	LAST_DAY
	LAST_WEEK
	LAST_MONTH
	LAST_YEAR
}

union SearchResult = PackageVersion | User | Namespace | DeployApp | BlogPost | AppTemplate

"""
Deprecated: use EnvVar for persisted app environment variables.
"""
type Secret implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	sensitive: Boolean!
	value: String
}

type SecretConnection {
	"""
	Contains the nodes in this connection.
	"""
	edges: [SecretEdge!]!
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `Secret` and its cursor.
"""
type SecretEdge {
	"""
	The item at the end of the edge
	"""
	node: Secret!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

"""
Deprecated for persisted app environment variables; use EnvVarUpdate.
"""
input SecretInput {
	"""
	Name of the secret.
	"""
	name: String!
	"""
	Value of the secret.
	"""
	value: String!
	"""
	Whether the secret value should be hidden from GraphQL.
	"""
	sensitive: Boolean = false
}

"""
Deprecated: use EnvVarLog for persisted app environment variable logs.
"""
type SecretLog implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	action: DeploySecretLogActionChoices!
	secretName: String!
}

type SecretLogConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [SecretLogEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `SecretLog` and its cursor.
"""
type SecretLogEdge {
	"""
	The item at the end of the edge
	"""
	node: SecretLog!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input SeePendingNotificationsInput {
	clientMutationId: String
}

type SeePendingNotificationsPayload {
	clientMutationId: String
	success: Boolean
}

input SendAppEmailInput {
	appId: ID!
	fromEmailId: ID
	fromAddress: String
	to: [String!]!
	cc: [String!]
	bcc: [String!]
	replyTo: String
	subject: String!
	textBody: String
	htmlBody: String
	rawMessage: Upload
	clientMutationId: String
}

type SendAppEmailPayload {
	clientMutationId: String
	success: Boolean!
	message: EmailMessage!
}

input SetAppDefaultAliasInput {
	"""
	ID of the domain to set as the default.
	"""
	id: ID!
	clientMutationId: String
}

"""
Set the requested default domain for an app.
"""
type SetAppDefaultAliasPayload {
	clientMutationId: String
	domain: AppAlias!
	success: Boolean!
}

input SetDefaultPaymentMethodInput {
	paymentMethod: ID!
	clientMutationId: String
}

"""
Set a payment method as default for the user.
"""
type SetDefaultPaymentMethodPayload {
	clientMutationId: String
	success: Boolean!
	billing: Billing!
}

type Signature {
	id: ID!
	publicKey: PublicKey!
	data: String!
	createdAt: DateTime!
}

type SignedUrl {
	url: String!
}

type SocialAuth implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	user: User!
	provider: String!
	uid: String!
	extraData: JSONString!
	created: DateTime!
	modified: DateTime!
	username: String!
}

input SocialAuthJWTInput {
	provider: String!
	accessToken: String!
	register: Boolean = false
	registerIntent: String
	fingerprintVisitorId: String
	enterProTrial: Boolean
	response: JSONString
	clientMutationId: String
}

type SocialAuthJWTPayload {
	social: SocialAuth
	token: String
	clientMutationId: String
}

enum SshAuthenticationMethod {
	PASSWORD
	PUBLIC_KEY
}

"""
A public key authorised for a specific SSH user.
"""
type SshAuthorizedKey implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	sshUser: SshUser!
	name: String
	publicKey: String!
	createdBy: User!
}

type SshAuthorizedKeyConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [SshAuthorizedKeyEdge]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `SshAuthorizedKey` and its cursor.
"""
type SshAuthorizedKeyEdge {
	"""
	The item at the end of the edge
	"""
	node: SshAuthorizedKey
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type SshUser implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	username: String!
	sftpRootFolder: String!
	authorizedKeys(offset: Int, before: String, after: String, first: Int, last: Int): SshAuthorizedKeyConnection!
	port: Int!
	serverHost: String!
	authenticationMethods: [SshAuthenticationMethod]!
}

type SshUserConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [SshUserEdge]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `SshUser` and its cursor.
"""
type SshUserEdge {
	"""
	The item at the end of the edge
	"""
	node: SshUser
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

enum StatusEnum {
	SUCCESS
	WORKING
	RUNNING
	FAILED
	QUEUED
	TIMEOUT
	INTERNAL_ERROR
	CANCELLED
}

type StripeCheckout {
	url: String!
	expiresAt: DateTime!
	clientSecret: String!
}

type StripeCustomer {
	id: ID!
}

type Subscription {
	logAdded(appId: ID, appVersionId: ID, instanceId: ID, textSearch: String): Log!
	autobuildDeployment(buildId: UUID!): AutobuildLog
	generateScreenshot(
		"""
		App version ID
		"""
		appVersionId: ID!,
		"""
		Force generation
		"""
		forceGeneration: Boolean = false
	): DeployAppVersion!
	streamLogs(
		"""
		Specify the app to show logs for. Alternatively, you can also just specify the app version if you want. If both app and app-version are specified, then the app-version must be associated with specified app.
		"""
		appId: ID,
		"""
		Filter logs for app to a certain app version.
		"""
		appVersionId: ID,
		"""
		Get logs starting from this timestamp. Takes ISO timestamp in UTC timezone.
		"""
		startingFromISO: DateTime,
		"""
		Fetch logs until this timestamp. Takes ISO timestamp in UTC timezone. If specified, the subscription will at this time.
		"""
		untilISO: DateTime,
		"""
		Filter logs by stream
		"""
		streams: [LogStream],
		"""
		Filter logs by instance ids
		"""
		instanceIds: [String],
		"""
		Filter logs by request ID
		"""
		requestId: String,
		"""
		Search logs for this term
		"""
		searchTerm: String
	): Log!
	waitOnRepoCreation(repoId: ID!): Boolean!
	appIsPublishedFromRepo(repoId: ID!): DeployAppVersion!
	runEdgeJob(command: String!, appVersionId: ID!, envVars: [SecretInput], source: String, cliArgs: [String]): Boolean
	fetchBuildLogs(buildId: String!): String!
	timeout: Int
	packageVersionCreated(publishedBy: ID, ownerId: ID): PackageVersion!
	"""
	Subscribe to package version ready
	"""
	packageVersionReady(packageVersionId: ID!): PackageVersionReadyResponse!
	userNotificationCreated(userId: ID!): UserNotificationCreated!
}

input SyncNotionBlogPostsInput {
	clientMutationId: String
	force: Boolean
}

"""
Sync all blog posts from Notion to the database.
"""
type SyncNotionBlogPostsPayload {
	syncedCount: Int!
	createdCount: Int!
	updatedCount: Int!
	errors: [String!]
	clientMutationId: String
}

type TXTRecord implements Node & DNSRecordInterface {
	data: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	ttl: Int!
	dnsClass: String
	text: String!
	domain: DNSDomain!
}

input TagPackageReleaseInput {
	packageReleaseId: ID!
	version: String!
	name: String
	manifest: String
	namespace: String
	description: String
	license: String
	licenseFile: String
	readme: String
	repository: String
	homepage: String
	signature: InputSignature
	"""
	The package icon
	"""
	icon: String
	private: Boolean = false
	clientMutationId: String
}

type TagPackageReleasePayload {
	success: Boolean!
	clientMutationId: String
	packageVersion: PackageVersion
}

type TemplateFramework implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	slug: String!
	createdAt: DateTime!
	updatedAt: DateTime!
}

type TemplateFrameworkConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [TemplateFrameworkEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `TemplateFramework` and its cursor.
"""
type TemplateFrameworkEdge {
	"""
	The item at the end of the edge
	"""
	node: TemplateFramework!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type TemplateLanguage implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	name: String!
	slug: String!
	createdAt: DateTime!
	updatedAt: DateTime!
}

type TemplateLanguageConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [TemplateLanguageEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `TemplateLanguage` and its cursor.
"""
type TemplateLanguageEdge {
	"""
	The item at the end of the edge
	"""
	node: TemplateLanguage!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type TermsOfService implements Node {
	content: String!
	createdAt: DateTime!
	"""
	The ID of the object
	"""
	id: ID!
	viewerHasAccepted: Boolean!
}

input TimeRangeInput {
	"""
	Start of the time range.
	"""
	fromDt: DateTime!
	"""
	End of the time range.
	"""
	toDt: DateTime
}

input ToggleCronJobInput {
	"""
	CronJob ID
	"""
	cronJobId: ID!
	enabled: Boolean!
	clientMutationId: String
}

type ToggleCronJobPayload {
	clientMutationId: String
	app: DeployApp!
	cronJob: CronJob!
}

input ToggleForceHTTPSInput {
	"""
	App ID
	"""
	id: ID!
	clientMutationId: String
}

"""
Toggle HTTP redirect for the active version of app
"""
type ToggleForceHTTPSPayload {
	clientMutationId: String
	app: DeployApp!
}

input ToggleSshServerInput {
	"""
	App ID
	"""
	appId: ID!
	enabled: Boolean!
	clientMutationId: String
}

"""
Enable or disable the SSH server capability on an app.
"""
type ToggleSshServerPayload {
	clientMutationId: String
	app: DeployApp!
	sshServer: AppSshServer!
}

"""
The `URL` scalar type represents a URL as text, represented as UTF-8
character sequences.
"""
scalar URL

"""
Leverages the internal Python implementation of UUID (uuid.UUID) to provide native UUID objects
in fields, resolvers and input.
"""
scalar UUID

input UnbanAppInput {
	"""
	ID of app to disable
	"""
	appId: ID!
	clientMutationId: String
}

"""
Un-ban app with a reason.
"""
type UnbanAppPayload {
	clientMutationId: String
	app: DeployApp!
}

input UnlikePackageInput {
	packageId: ID!
	clientMutationId: String
}

type UnlikePackagePayload {
	clientMutationId: String
	package: Package!
}

input UnwatchPackageInput {
	packageId: ID!
	clientMutationId: String
}

type UnwatchPackagePayload {
	clientMutationId: String
	package: Package!
}

input UpdateAPIKeyInput {
	apiKeyId: ID!
	name: String
	note: String
	clientMutationId: String
}

type UpdateAPIKeyPayload {
	apiKey: APIKey!
	clientMutationId: String
}

input UpdateAppTemplateInput {
	templateId: ID!
	name: String!
	slug: String!
	description: String
	demoUrl: String!
	repoUrl: String!
	rootDir: String
	branch: String
	category: String!
	framework: String!
	language: String
	isPublic: Boolean!
	highlighted: Boolean!
	canDeployWithoutRepo: Boolean!
	completionTimeInSeconds: String!
	repoLicense: String!
	useCases: [String!]
	readme: String!
	defaultImageUpload: Upload
	clientMutationId: String
}

type UpdateAppTemplatePayload {
	appTemplate: AppTemplate!
	clientMutationId: String
}

input UpdateAutobuildConfigForAppInput {
	"""
	The ID of the App
	"""
	appId: ID!
	"""
	Preset name of the build kind
	"""
	presetName: String
	"""
	Build command for the app
	"""
	buildCmd: String
	"""
	Install command for the app
	"""
	installCmd: String
	"""
	Start command for the app
	"""
	startCmd: String
	"""
	After deploy command for the app
	"""
	afterDeployCmd: String
	"""
	Root directory for the app build
	"""
	rootDir: String
	clientMutationId: String
}

"""
Update autobuild config for an app.
"""
type UpdateAutobuildConfigForAppPayload {
	clientMutationId: String
	app: DeployApp!
}

input UpdateBuildConfigInput {
	appId: ID!
	presetName: String
	startCmd: String
	buildCmd: String
	installCmd: String
	afterDeployCmd: String
	rootDir: String
	clientMutationId: String
}

type UpdateBuildConfigPayload {
	clientMutationId: String
	buildConfig: BuildConfiguration!
	success: Boolean!
}

input UpdateDNSRecordsInput {
	"""
	ID of the DNS domain whose records should be changed.
	"""
	domainId: ID!
	records: [DNSRecordUpdate]
	clientMutationId: String
}

type UpdateDNSRecordsPayload {
	clientMutationId: String
	success: Boolean!
	records: [DNSRecord!]!
}

input UpdateEnvVarsInput {
	"""
	ID of the app onto which to add environment variables.
	"""
	appId: ID!
	envVars: [EnvVarUpdate]
	clientMutationId: String
}

"""
Create, update, or delete app environment variables on an app with given ID
"""
type UpdateEnvVarsPayload {
	success: Boolean!
	envVars: [EnvVar!]!
	clientMutationId: String
}

input UpdateGithubRepoAppConnectionInput {
	"""
	The ID of the GithubRepoConnection.

	Deprecated for app-scoped SDK usage; use `appId` instead.
	"""
	connectionId: ID
	"""
	The app whose GitHub repo connection should be updated.
	"""
	appId: ID
	deploymentStatusEvents: Boolean
	pullRequestComments: Boolean
	"""
	Optional deploy branch for the app-scoped GitHub repo connection.
	"""
	deployBranch: String
	clientMutationId: String
}

type UpdateGithubRepoAppConnectionPayload {
	clientMutationId: String
	githubRepoConnection: GithubRepoConnection!
	success: Boolean!
}

input UpdateNamespaceCollaboratorInviteRoleInput {
	namespaceCollaboratorInviteId: ID!
	role: GrapheneRole!
	clientMutationId: String
}

type UpdateNamespaceCollaboratorInviteRolePayload {
	collaboratorInvite: NamespaceCollaboratorInvite!
	clientMutationId: String
}

input UpdateNamespaceCollaboratorRoleInput {
	namespaceCollaboratorId: ID!
	role: GrapheneRole!
	clientMutationId: String
}

type UpdateNamespaceCollaboratorRolePayload {
	collaborator: NamespaceCollaborator!
	clientMutationId: String
}

input UpdateNamespaceInput {
	namespaceId: ID!
	"""
	The namespace slug name
	"""
	name: String
	"""
	The namespace display name
	"""
	displayName: String
	"""
	The namespace description
	"""
	description: String
	"""
	The namespace avatar
	"""
	avatar: String @deprecated(reason: "Use `avatarUpload` instead")
	"""
	The namespace avatar
	"""
	avatarUpload: Upload
	"""
	The user Twitter (it can be the url, or the handle with or without the @)
	"""
	twitter: String
	"""
	The user Github (it can be the url, or the handle with or without the @)
	"""
	github: String
	"""
	The user website (it must be a valid url)
	"""
	websiteUrl: String
	clientMutationId: String
}

type UpdateNamespacePayload {
	namespace: Namespace!
	clientMutationId: String
}

input UpdatePackageCollaboratorInviteRoleInput {
	packageCollaboratorInviteId: ID!
	role: GrapheneRole!
	clientMutationId: String
}

type UpdatePackageCollaboratorInviteRolePayload {
	clientMutationId: String
	collaboratorInvite: PackageCollaboratorInvite!
}

input UpdatePackageCollaboratorRoleInput {
	packageCollaboratorId: ID!
	role: GrapheneRole!
	clientMutationId: String
}

type UpdatePackageCollaboratorRolePayload {
	clientMutationId: String
	collaborator: PackageCollaborator!
}

input UpdatePackageInput {
	packageId: ID!
	"""
	The package icon
	"""
	icon: String @deprecated(reason: "Use `iconUpload` instead")
	"""
	The package icon
	"""
	iconUpload: Upload
	clientMutationId: String
}

type UpdatePackagePayload {
	clientMutationId: String
	package: Package!
}

input UpdateUserInfoInput {
	"""
	The user id
	"""
	userId: ID
	"""
	The user full name
	"""
	fullName: String
	"""
	The user bio
	"""
	bio: String
	"""
	The user avatar
	"""
	avatar: String @deprecated(reason: "Use `avatarUpload` instead")
	"""
	The user avatar
	"""
	avatarUpload: Upload
	"""
	The user Twitter (it can be the url, or the handle with or without the @)
	"""
	twitter: String
	"""
	The user Github (it can be the url, or the handle with or without the @)
	"""
	github: String
	"""
	The user website (it must be a valid url)
	"""
	websiteUrl: String
	"""
	The user location
	"""
	location: String
	clientMutationId: String
}

type UpdateUserInfoPayload {
	clientMutationId: String
	user: User
}

input UpdateVolumeInput {
	"""
	App Volume ID
	"""
	id: ID!
	"""
	Volume mount path
	"""
	mountPath: String
	"""
	Volume max size in bytes
	"""
	maxSizeBytes: BigInt
	"""
	Whether the S3 endpoint is enabled
	"""
	s3Enabled: Boolean
	"""
	Whether to redeploy the active app version after workload changes
	"""
	redeployApp: Boolean
	clientMutationId: String
}

"""
Update an app volume.
"""
type UpdateVolumePayload {
	clientMutationId: String
	volume: AppVolume!
	success: Boolean!
	redeployedApp: Boolean!
}

"""
A multipart file upload
"""
scalar Upload

"""
An enumeration.
"""
enum UploadFormat {
	targz
	webcv2
	webcv3
}

input UpsertAppDomainInput {
	"""
	ID of the app onto which to add secrets.
	"""
	appId: ID!
	"""
	ID of the domain to upsert.
	"""
	id: ID
	"""
	Name of the secret.
	"""
	name: String!
	"""
	Whether this domain should become the app's selected default domain.
	"""
	isDefault: Boolean = false
	"""
	Redirection rules for this domain
	"""
	redirection: AppDomainRedirectRules = null
	"""
	Wait for the domain to become available before returning.
	"""
	wait: Boolean = true
	clientMutationId: String
}

"""
Create or update an app domain on an app with given ID
"""
type UpsertAppDomainPayload {
	clientMutationId: String
	"""
	List of domains generated by the mutation
	"""
	domains: [AppAlias!]!
	success: Boolean!
}

input UpsertAppSecretInput {
	"""
	ID of the app onto which to add secrets.
	"""
	appId: ID!
	"""
	Name of the secret.
	"""
	name: String!
	"""
	Value of the secret.
	"""
	value: String!
	"""
	Whether the secret value should be hidden from GraphQL.
	"""
	sensitive: Boolean = false
	clientMutationId: String
}

"""
Deprecated: use UpdateEnvVars.
"""
type UpsertAppSecretPayload {
	secret: Secret!
	success: Boolean!
	clientMutationId: String
}

input UpsertAppSecretsInput {
	"""
	ID of the app onto which to add secrets.
	"""
	appId: ID!
	secrets: [SecretInput]
	clientMutationId: String
}

"""
Deprecated: use UpdateEnvVars.
"""
type UpsertAppSecretsPayload {
	success: Boolean!
	secrets: [Secret!]!
	clientMutationId: String
}

input UpsertDNSRecordInput {
	kind: RecordKind!
	domainId: String!
	name: String!
	value: String!
	ttl: Int
	recordId: String
	mx: DNSMXExtraInput
	soa: DNSSOAExtraInput
	srv: DNSSRVExtraInput
	caa: DNSCAAExtraInput
	sshfp: DNSSSHFPExtraInput
	clientMutationId: String
}

type UpsertDNSRecordPayload {
	clientMutationId: String
	success: Boolean!
	record: DNSRecord!
}

input UpsertDomainFromZoneFileInput {
	zoneFile: String!
	deleteMissingRecords: Boolean
	clientMutationId: String
}

type UpsertDomainFromZoneFilePayload {
	success: Boolean!
	clientMutationId: String
	domain: DNSDomain!
}

input UpsertVaultInput {
	"""
	YAML Configuration for vault
	"""
	config: String!
	clientMutationId: String
}

"""
Create a new vault from yaml config
"""
type UpsertVaultPayload {
	vault: Vault!
	clientMutationId: String
}

"""
Individual usage metrics for a specific app.
"""
type Usage {
	used: Int!
	max: Int
	charge: MoneyType!
	usedPercent: Float!
	unit: String
	nearingLimits: Boolean!
}

type UsageMetric {
	variant: MetricType!
	value: Float!
	unit: MetricUnit!
	timestamp: DateTime!
}

type UsageMetrics {
	startAt: DateTime!
	endAt: DateTime!
	totals: MetricsTotals!
	grouped: [GroupedUsageMetrics!]!
}

type User implements PackageOwner & Owner & Node {
	"""
	The ID of the object
	"""
	id: ID!
	firstName: String!
	lastName: String!
	email: String!
	dateJoined: DateTime!
	probationStartedAt: DateTime
	"""
	Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
	"""
	username: String!
	registerIntent: String
	isEmailValidated: Boolean!
	isEmailAcceptable: Boolean!
	pendingVerifications: [PendingVerification!]!
	bio: String
	location: String
	websiteUrl: String
	wasmerInternal: Boolean!
	globalName: String!
	globalId: ID!
	viewerCan(action: OwnerAction!): Boolean!
	isPro: Boolean!
	avatar(size: Int = 80): String!
	limitState: LimitState!
	isViewer: Boolean!
	hasUsablePassword: Boolean
	fullName: String!
	githubUrl: String
	twitterUrl: String
	companyRole: String
	companyDescription: String
	publicActivity(offset: Int, before: String, after: String, first: Int, last: Int): ActivityEventConnection!
	billing: Billing
	waitlist(name: String!): WaitlistMember
	namespaces(role: GrapheneRole, offset: Int, before: String, after: String, first: Int, last: Int): NamespaceConnection!
	packages(collaborating: Boolean = false, offset: Int, before: String, after: String, first: Int, last: Int): PackageConnection!
	apps(collaborating: Boolean = false, sortBy: DeployAppsSortBy, offset: Int, before: String, after: String, first: Int, last: Int): DeployAppConnection!
	usageMetrics(		variant: MetricType!,		grouping: MetricGrouping,
		"""
		List of app IDs. Metrics gets filtered for the specific apps.
		"""
		appIds: [ID],
		"""
		Optional time range filter.
		"""
		timeRange: TimeRangeInput
	): [UsageMetric]!
	groupedMetrics(startAt: DateTime!, endAt: DateTime!, groupedBy: MetricGrouping!): UsageMetrics!
	domains(offset: Int, before: String, after: String, first: Int, last: Int): DNSDomainConnection!
	sentEmails(first: Int, after: String, last: Int, before: String): EmailMessageConnection!
	receivedEmails(first: Int, after: String, last: Int, before: String): EmailMessageConnection!
	isStaff: Boolean
	packageVersions(offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionConnection!
	packageTransfersIncoming(offset: Int, before: String, after: String, first: Int, last: Int): PackageTransferRequestConnection!
	packageInvitesIncoming(offset: Int, before: String, after: String, first: Int, last: Int): PackageCollaboratorInviteConnection!
	namespaceInvitesIncoming(offset: Int, before: String, after: String, first: Int, last: Int): NamespaceCollaboratorInviteConnection!
	apiTokens(offset: Int, before: String, after: String, first: Int, last: Int): APITokenConnection!
	notifications(offset: Int, before: String, after: String, first: Int, last: Int): UserNotificationConnection!
	dashboardActivity(offset: Int, before: String, after: String, first: Int, last: Int): ActivityEventConnection!
	loginMethods: [LoginMethod!]!
	githubUser: SocialAuth
	githubScopes: [String]! @deprecated(reason: "Please use github installations instead.")
	githubRepositories: [GithubInstallationRepository]! @deprecated(reason: "Please use github installations instead.")
	githubInstallationExists: Boolean! @deprecated(reason: "Please use github installations instead.")
	githubInstallations: [GithubAppInstallation!]
	currentUsage(
		"""
		List of app IDs. Usage gets filtered for the specific apps.
		"""
		appIds: [ID],
		"""
		Optional time range filter.
		"""
		timeRange: TimeRangeInput
	): OwnerUsageSummary
	emailUsage: EmailUsageSummary
}

type UserConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [UserEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `User` and its cursor.
"""
type UserEdge {
	"""
	The item at the end of the edge
	"""
	node: User!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

type UserNotification implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	icon: String
	body: EventBody!
	seenState: UserNotificationSeenState!
	kind: UserNotificationKind
	createdAt: DateTime!
}

type UserNotificationConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [UserNotificationEdge!]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
	hasPendingNotifications: Boolean!
	pendingNotificationsCount: Int!
}

type UserNotificationCreated {
	notification: UserNotification
	notificationDeletedId: ID
}

"""
A Relay edge containing a `UserNotification` and its cursor.
"""
type UserNotificationEdge {
	"""
	The item at the end of the edge
	"""
	node: UserNotification!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

union UserNotificationKind = UserNotificationKindPublishedPackageVersion | UserNotificationKindIncomingPackageTransfer | UserNotificationKindIncomingPackageInvite | UserNotificationKindIncomingNamespaceInvite | UserNotificationKindValidateEmail

type UserNotificationKindIncomingNamespaceInvite {
	namespaceInvite: NamespaceCollaboratorInvite!
}

type UserNotificationKindIncomingPackageInvite {
	packageInvite: PackageCollaboratorInvite!
}

type UserNotificationKindIncomingPackageTransfer {
	packageTransferRequest: PackageTransferRequest!
}

type UserNotificationKindPublishedPackageVersion {
	packageVersion: PackageVersion!
}

type UserNotificationKindValidateEmail {
	user: User!
}

enum UserNotificationSeenState {
	UNSEEN
	SEEN
	SEEN_AND_READ
}

enum UserOrderBy {
	PACKAGE_COUNT
	APP_COUNT
	CREATED_DATE
}

input UsersFilter {
	count: Int = 1000
	sortBy: SearchOrderSort = DESC
	"""
	Filter users by package count.
	"""
	packageCount: CountFilter
	"""
	Filter users by namespace count.
	"""
	namespaceCount: CountFilter
	"""
	Filter users joined after this date.
	"""
	joinedAfter: DateTime
	"""
	Filter users joined before this date.
	"""
	joinedBefore: DateTime
	"""
	Order users by field.
	"""
	orderBy: UserOrderBy = CREATED_DATE
}

input ValidateNonceInput {
	id: ID!
	secret: String!
	clientMutationId: String
}

type ValidateNoncePayload {
	nonce: Nonce!
	clientMutationId: String
}

input ValidateUserEmailInput {
	"""
	The user id
	"""
	userId: ID
	challenge: String!
	clientMutationId: String
}

type ValidateUserEmailPayload {
	clientMutationId: String
	user: User
}

input ValidateUserFingerprintInput {
	fingerprintVisitorId: String!
	clientMutationId: String
}

type ValidateUserFingerprintPayload {
	clientMutationId: String
	user: User
}

input ValidateUserPasswordInput {
	password: String!
	clientMutationId: String
}

type ValidateUserPasswordPayload {
	success: Boolean
	clientMutationId: String
}

type Vault implements Node {
	name: String!
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	updatedAt: DateTime!
	app: DeployApp
}

enum VerificationKind {
	QUICK
	DEEP
}

type Verify {
	payload: GenericScalar!
}

input VerifyAppDomainInput {
	"""
	The ID of the domain to verify
	"""
	domainId: ID!
	"""
	Specify how to verify the domain
	"""
	kind: VerificationKind = QUICK
	clientMutationId: String
}

"""
Detach autobuild from app.
"""
type VerifyAppDomainPayload {
	verified: Boolean!
	clientMutationId: String
}

type WEBCFilesystemItem {
	name: String!
	checksum: String!
	size: Int!
	offset: Int!
}

type Waitlist implements Node {
	name: String!
	createdAt: DateTime!
	updatedAt: DateTime!
	"""
	The ID of the object
	"""
	id: ID!
}

type WaitlistMember implements Node {
	waitlist: Waitlist!
	joinedAt: DateTime!
	approvedAt: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	member: Owner!
	approved: Boolean!
}

type WasmerSubscription implements Node {
	"""
	The datetime this object was created in stripe.
	"""
	created: DateTime
	"""
	The ID of the object
	"""
	id: ID!
	cancelAt: DateTime
	canceledAt: DateTime
	currentPeriodEnd: DateTime
	currentPeriodStart: DateTime
	daysUntilDue: Int
	endedAt: DateTime
	startDate: DateTime
	status: String
	trialEnd: DateTime
	trialStart: DateTime
	description: String
	cancelAtPeriodEnd: Boolean
}

input WatchPackageInput {
	packageId: ID!
	clientMutationId: String
}

type WatchPackagePayload {
	clientMutationId: String
	package: Package!
}

type WebcImage implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	"""
	The version of the webc image, defaults to v2.
	"""
	version: WebcVersion!
	fileSize: BigInt!
	manifest: JSONString!
	webcSha256: String!
	targzSha256: String
	createdAt: DateTime!
	updatedAt: DateTime!
	webcUrl: String!
	volumes: JSONString! @deprecated(reason: "Deprecated, use the webc_url to explore the webc file")
	offsets: JSONString! @deprecated(reason: "Deprecated, use the webc_url to explore the webc file")
}

type WebcImageConnection {
	"""
	Pagination data for this connection.
	"""
	pageInfo: PageInfo!
	"""
	Contains the nodes in this connection.
	"""
	edges: [WebcImageEdge]!
	"""
	Total number of items in the connection.
	"""
	totalCount: Int
}

"""
A Relay edge containing a `WebcImage` and its cursor.
"""
type WebcImageEdge {
	"""
	The item at the end of the edge
	"""
	node: WebcImage!
	"""
	A cursor for use in pagination
	"""
	cursor: String!
}

input WebcSourceV1 {
	name: String!
	namespace: String!
	repository: String! = "https://registry.wasmer.wtf"
	tag: String
	authToken: String
}

enum WebcVersion {
	V2
	V3
}

type WordPressPlugin {
	slug: String!
	name: String!
	title: String
	version: String!
	latestVersion: String
	active: Boolean!
	description: String
	icon: String
	url: String
	status: String
	autoUpdate: Boolean
}

type WordPressTheme {
	slug: String!
	name: String!
	title: String
	version: String!
	latestVersion: String
	active: Boolean!
	description: String
	status: String
	autoUpdate: Boolean
}

type WordpressAppKind {
	adminUrl: String! @deprecated(reason: "Use generateWordPressMagicLoginUrl mutation instead.")
	liveConfig(forceFetch: Boolean): WordpressLiveConfig
	wordpressCronjobEnabled: Boolean!
	wordpressVersion: WordpressVersion
}

type WordpressDeploymentDefaults {
	siteTitle: String!
	appName: String!
	adminUsername: String!
	adminPassword: String!
	adminEmail: String!
}

input WordpressDeploymentExtraData {
	siteName: String!
	adminUsername: String!
	adminPassword: String!
	adminEmail: String!
	language: String = "en_US"
	theme: String
}

type WordpressLiveConfig {
	checkedAt: DateTime!
	wordpressVersion: String!
	phpVersion: String!
	phpArchitecture: String!
	mysqlServer: String!
	plugins: [WordPressPlugin]!
	wasmerPlugin: WordPressPlugin
	themes: [WordPressTheme]!
	isLive: Boolean!
	usersCount: Int!
	mainAdminId: String
	publishedPostsCount: Int!
	publishedPagesCount: Int!
}

type WordpressVersion implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	version: String!
	downloadUrl: String! @deprecated(reason: "Use zip.downloadUrl instead.")
	minPhpVersion: String!
	mysqlVersion: String!
	githubRepo: String!
	githubTag: String!
	defaultTheme: String!
	isLatest: Boolean!
	zip: WordpressVersionZip!
}

type WordpressVersionZip {
	downloadUrl: String!
	hash: String!
}

type WorkloadMetrics {
	workloads: Int!
	wallCpuTimeMillis: BigInt!
	realCpuTimeMillis: BigInt!
	memoryBytes: BigInt!
	networkIngressBytes: BigInt!
	networkEgressBytes: BigInt!
}

input WorkloadRunnerV1 {
	webProxy: RunnerWebProxyV1
	wcgi: RunnerWCGIV1
}

input WorkloadRunnerWasmSourceV1 {
	webc: WebcSourceV1!
}

input WorkloadV1 {
	capability: CapabilityMapV1
	name: String = null
	runner: WorkloadRunnerV1!
}

input WorkloadV2 {
	source: String!
}

type ZipRollout implements Node {
	"""
	The ID of the object
	"""
	id: ID!
	createdAt: DateTime!
	updatedAt: DateTime!
	deletedAt: DateTime
	externalId: String
	rollout: Rollout
	zipFileUrl: String!
	zipFileHash: String
}

"""
Marks an element of a GraphQL schema as no longer supported.
"""
directive @deprecated(reason: String = "No longer supported") on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION | ENUM_VALUE
"""
Directs the executor to include this field or fragment only when the `if` argument is true.
"""
directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
"""
Directs the executor to include this field or fragment only when the user is not logged in.
"""
directive @includeIfLoggedIn on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
"""
Directs the executor to skip this field or fragment when the `if` argument is true.
"""
directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
"""
Directs the executor to skip this field or fragment when the user is not logged in.
"""
directive @skipIfLoggedIn on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
"""
Provides a scalar specification URL for specifying the behavior of custom scalar types.
"""
directive @specifiedBy(url: String!) on SCALAR
schema {
	query: Query
	mutation: Mutation
	subscription: Subscription
}