import type { CreateEntityData, DeleteEntityData, GetEntityData, QueryEntitiesData, QueryEntitiesResult, UpdateEntityData } from "./entity.js"; import type { UploadFileData, UploadFileReturn } from "./file.js"; import type { CreateEntityTypeData, CreatePropertyTypeData, GetPropertyTypeData, QueryPropertyTypesData, QueryPropertyTypesResult, UpdateEntityTypeData, UpdatePropertyTypeData } from "./ontology.js"; import type { GetEntityTypeData, QueryEntityTypesData, QueryEntityTypesResult } from "./ontology/entity-type.js"; import type { DataTypeRootType, EntityRootType, EntityTypeRootType, EntityVertexId, GetDataTypeData, PropertyTypeRootType, QueryDataTypesData, QueryDataTypesResult, Subgraph } from "./subgraph.js"; import type { MessageCallback, MessageReturn } from "@blockprotocol/core"; import type { Entity, EntityTypeWithMetadata, PropertyTypeWithMetadata } from "@blockprotocol/type-system"; export type BlockGraphProperties = { /** * The 'graph' object contains messages sent under the graph module from the app to the block. * They are sent on initialization and again when the application has new values to send. * One such message is 'graph.blockEntitySubgraph', which is a data entity fitting the block's schema (its type). * @see https://blockprotocol.org/spec/graph#message-definitions for a full list */ graph: { blockEntitySubgraph?: Subgraph<{ vertexId: EntityVertexId; element: RootEntity; }>; readonly?: boolean; }; }; export type GraphBlockMessageCallbacks = { blockEntitySubgraph: MessageCallback, null>; readonly: MessageCallback; }; export type GraphEmbedderMessages = { [key in Key]: ({ data, errors, }: Parameters[0]) => ReturnType; }; export type CreateResourceError = "FORBIDDEN" | "INTERNAL_ERROR" | "INVALID_INPUT" | "NOT_IMPLEMENTED"; export type ReadOrModifyResourceError = "FORBIDDEN" | "INTERNAL_ERROR" | "INVALID_INPUT" | "NOT_FOUND" | "NOT_IMPLEMENTED"; /** * @todo Generate these types from the JSON definition, to avoid manually keeping the JSON and types in sync */ export type GraphEmbedderMessageCallbacks = { createEntity: MessageCallback, CreateResourceError>; updateEntity: MessageCallback, ReadOrModifyResourceError>; deleteEntity: MessageCallback, ReadOrModifyResourceError>; getEntity: MessageCallback>, ReadOrModifyResourceError>; queryEntities: MessageCallback>>, ReadOrModifyResourceError>; createEntityType: MessageCallback, CreateResourceError>; updateEntityType: MessageCallback, ReadOrModifyResourceError>; getEntityType: MessageCallback>, ReadOrModifyResourceError>; queryEntityTypes: MessageCallback>>, ReadOrModifyResourceError>; createPropertyType: MessageCallback, CreateResourceError>; updatePropertyType: MessageCallback, ReadOrModifyResourceError>; getPropertyType: MessageCallback>, ReadOrModifyResourceError>; queryPropertyTypes: MessageCallback>>, ReadOrModifyResourceError>; getDataType: MessageCallback>, ReadOrModifyResourceError>; queryDataTypes: MessageCallback>>, ReadOrModifyResourceError>; requestLinkedQuery: MessageCallback, "NOT_IMPLEMENTED">; /** @todo - Reimplement linked queries */ uploadFile: MessageCallback, CreateResourceError>; }; export type GraphBlockMessages = { [key in Key]: ({ data, errors, }: Parameters[0]) => ReturnType; };