Skip to main content

GmContainerType

A studio-defined container type: the schema for a kind of runtime entity (like a class).

type GmContainerType {
appId: BigInt!
typeName: String!
displayName: String!
description: String
instantiableBy: String!
defaultPropertyVisibility: String!
metadataJson: String!
bindPolicyJson: String
}

Fields

GmContainerType.appId ● BigInt! non-null scalar

The app (tenant) that owns the type.

GmContainerType.typeName ● String! non-null scalar

Stable type name (unique per app); used to reference the type.

GmContainerType.displayName ● String! non-null scalar

Human-friendly display name.

GmContainerType.description ● String scalar

Optional description of the type.

GmContainerType.instantiableBy ● String! non-null scalar

Who may instantiate this type: admin | member | owner.

GmContainerType.defaultPropertyVisibility ● String! non-null scalar

Default visibility for this type's properties: public | owner | hidden.

GmContainerType.metadataJson ● String! non-null scalar

JSON object of developer metadata.

GmContainerType.bindPolicyJson ● String scalar

Who may CREATE a container of this type under a client-supplied bindingKey (gameModelEnsureContainer). Same JSON shape as a function invokePolicyJson — an AuthorityRule tree — except that owner_of_self, is_current_turn and condition are refused, because a bind creates the container and there is no acting container to resolve them against. Omit it (the default) and binding is governed by the type's instantiableBy alone, which is the behaviour before this field existed. Resolving an EXISTING key is unaffected: it is a read. For a shared world object, {"type":"is_host"} or instantiableBy: admin stops one player from squatting the key and becoming its owner.

Returned By

gameModelContainerTypes query ● gameModelUpsertContainerType mutation