diff --git a/components/automate/CreateDialog.vue b/components/automate/CreateDialog.vue
deleted file mode 100644
index e97292f..0000000
--- a/components/automate/CreateDialog.vue
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
-
-
-
-
-
- {{ isArray(value) ? value[0].name : value.name }}
-
-
-
- {{ item.name }}
-
-
-
-
-
-
-
-
-
-
-
- Next
-
-
- Create
-
-
-
-
-
-
diff --git a/components/workspace/Menu.vue b/components/workspace/Menu.vue
index 835dc1a..84242e2 100644
--- a/components/workspace/Menu.vue
+++ b/components/workspace/Menu.vue
@@ -34,7 +34,7 @@ defineEmits<{
}>()
const workspacesWithPersonalProjects = computed(() => [
- ...props.workspaces.filter((w) => w.creationState?.completed !== false),
+ ...props.workspaces,
{
id: 'personalProject',
name: 'Personal Projects'
diff --git a/lib/common/generated/gql/gql.ts b/lib/common/generated/gql/gql.ts
index 6dae591..af3778e 100644
--- a/lib/common/generated/gql/gql.ts
+++ b/lib/common/generated/gql/gql.ts
@@ -22,7 +22,7 @@ type Documents = {
"\n mutation CreateProject($input: ProjectCreateInput) {\n projectMutations {\n create(input: $input) {\n ...ProjectListProjectItem\n }\n }\n }\n": typeof types.CreateProjectDocument,
"\n mutation CreateProjectInWorkspace($input: WorkspaceProjectCreateInput!) {\n workspaceMutations {\n projects {\n create(input: $input) {\n ...ProjectListProjectItem\n }\n }\n }\n }\n": typeof types.CreateProjectInWorkspaceDocument,
"\n mutation StreamAccessRequestCreate($input: String!) {\n streamAccessRequestCreate(streamId: $input) {\n id\n }\n }\n": typeof types.StreamAccessRequestCreateDocument,
- "\n fragment WorkspaceListWorkspaceItem on Workspace {\n id\n slug\n name\n description\n createdAt\n updatedAt\n logo\n role\n readOnly\n creationState {\n completed\n }\n permissions {\n canCreateProject {\n authorized\n code\n message\n }\n }\n }\n": typeof types.WorkspaceListWorkspaceItemFragmentDoc,
+ "\n fragment WorkspaceListWorkspaceItem on Workspace {\n id\n slug\n name\n description\n createdAt\n updatedAt\n logo\n role\n readOnly\n permissions {\n canCreateProject {\n authorized\n code\n message\n }\n }\n }\n": typeof types.WorkspaceListWorkspaceItemFragmentDoc,
"\n fragment AutomateFunctionItem on AutomateFunction {\n name\n isFeatured\n id\n creator {\n name\n }\n releases {\n items {\n inputSchema\n }\n }\n }\n": typeof types.AutomateFunctionItemFragmentDoc,
"\n mutation CreateAutomation($projectId: ID!, $input: ProjectAutomationCreateInput!) {\n projectMutations {\n automationMutations(projectId: $projectId) {\n create(input: $input) {\n id\n name\n }\n }\n }\n }\n": typeof types.CreateAutomationDocument,
"\n fragment AutomateFunctionRunItem on AutomateFunctionRun {\n id\n status\n statusMessage\n results\n contextView\n function {\n id\n name\n logo\n }\n }\n": typeof types.AutomateFunctionRunItemFragmentDoc,
@@ -44,7 +44,7 @@ type Documents = {
"\n query ProjectAddByUrlQueryWithVersion(\n $projectId: String!\n $modelId: String!\n $versionId: String!\n ) {\n project(id: $projectId) {\n ...ProjectListProjectItem\n model(id: $modelId) {\n ...ModelListModelItem\n version(id: $versionId) {\n ...VersionListItem\n }\n }\n }\n }\n": typeof types.ProjectAddByUrlQueryWithVersionDocument,
"\n query ProjectAddByUrlQueryWithoutVersion($projectId: String!, $modelId: String!) {\n project(id: $projectId) {\n ...ProjectListProjectItem\n model(id: $modelId) {\n ...ModelListModelItem\n }\n }\n }\n": typeof types.ProjectAddByUrlQueryWithoutVersionDocument,
"\n query ProjectDetails($projectId: String!) {\n project(id: $projectId) {\n id\n role\n name\n workspace {\n name\n slug\n readOnly\n role\n }\n team {\n user {\n avatar\n id\n name\n }\n }\n visibility\n permissions {\n canLoad {\n authorized\n code\n message\n }\n canPublish {\n authorized\n code\n message\n }\n }\n }\n }\n": typeof types.ProjectDetailsDocument,
- "\n query AutomateFunctions {\n automateFunctions {\n items {\n ...AutomateFunctionItem\n }\n }\n }\n": typeof types.AutomateFunctionsDocument,
+ "\n query AutomateFunctions($workspaceId: String!) {\n workspace(id: $workspaceId) {\n automateFunctions {\n items {\n ...AutomateFunctionItem\n }\n }\n }\n }\n": typeof types.AutomateFunctionsDocument,
"\n query ModelDetails($modelId: String!, $projectId: String!) {\n project(id: $projectId) {\n id\n name\n model(id: $modelId) {\n id\n displayName\n name\n versions {\n totalCount\n items {\n id\n }\n }\n author {\n id\n name\n avatar\n }\n }\n }\n }\n": typeof types.ModelDetailsDocument,
"\n query VersionDetails($projectId: String!, $versionId: String!, $modelId: String!) {\n project(id: $projectId) {\n id\n name\n model(id: $modelId) {\n id\n name\n versions(limit: 1) {\n items {\n id\n createdAt\n sourceApplication\n authorUser {\n id\n }\n }\n }\n version(id: $versionId) {\n id\n referencedObject\n message\n sourceApplication\n createdAt\n previewUrl\n }\n }\n }\n }\n": typeof types.VersionDetailsDocument,
"\n query ServerInfo {\n serverInfo {\n workspaces {\n workspacesEnabled\n }\n }\n }\n": typeof types.ServerInfoDocument,
@@ -64,7 +64,7 @@ const documents: Documents = {
"\n mutation CreateProject($input: ProjectCreateInput) {\n projectMutations {\n create(input: $input) {\n ...ProjectListProjectItem\n }\n }\n }\n": types.CreateProjectDocument,
"\n mutation CreateProjectInWorkspace($input: WorkspaceProjectCreateInput!) {\n workspaceMutations {\n projects {\n create(input: $input) {\n ...ProjectListProjectItem\n }\n }\n }\n }\n": types.CreateProjectInWorkspaceDocument,
"\n mutation StreamAccessRequestCreate($input: String!) {\n streamAccessRequestCreate(streamId: $input) {\n id\n }\n }\n": types.StreamAccessRequestCreateDocument,
- "\n fragment WorkspaceListWorkspaceItem on Workspace {\n id\n slug\n name\n description\n createdAt\n updatedAt\n logo\n role\n readOnly\n creationState {\n completed\n }\n permissions {\n canCreateProject {\n authorized\n code\n message\n }\n }\n }\n": types.WorkspaceListWorkspaceItemFragmentDoc,
+ "\n fragment WorkspaceListWorkspaceItem on Workspace {\n id\n slug\n name\n description\n createdAt\n updatedAt\n logo\n role\n readOnly\n permissions {\n canCreateProject {\n authorized\n code\n message\n }\n }\n }\n": types.WorkspaceListWorkspaceItemFragmentDoc,
"\n fragment AutomateFunctionItem on AutomateFunction {\n name\n isFeatured\n id\n creator {\n name\n }\n releases {\n items {\n inputSchema\n }\n }\n }\n": types.AutomateFunctionItemFragmentDoc,
"\n mutation CreateAutomation($projectId: ID!, $input: ProjectAutomationCreateInput!) {\n projectMutations {\n automationMutations(projectId: $projectId) {\n create(input: $input) {\n id\n name\n }\n }\n }\n }\n": types.CreateAutomationDocument,
"\n fragment AutomateFunctionRunItem on AutomateFunctionRun {\n id\n status\n statusMessage\n results\n contextView\n function {\n id\n name\n logo\n }\n }\n": types.AutomateFunctionRunItemFragmentDoc,
@@ -86,7 +86,7 @@ const documents: Documents = {
"\n query ProjectAddByUrlQueryWithVersion(\n $projectId: String!\n $modelId: String!\n $versionId: String!\n ) {\n project(id: $projectId) {\n ...ProjectListProjectItem\n model(id: $modelId) {\n ...ModelListModelItem\n version(id: $versionId) {\n ...VersionListItem\n }\n }\n }\n }\n": types.ProjectAddByUrlQueryWithVersionDocument,
"\n query ProjectAddByUrlQueryWithoutVersion($projectId: String!, $modelId: String!) {\n project(id: $projectId) {\n ...ProjectListProjectItem\n model(id: $modelId) {\n ...ModelListModelItem\n }\n }\n }\n": types.ProjectAddByUrlQueryWithoutVersionDocument,
"\n query ProjectDetails($projectId: String!) {\n project(id: $projectId) {\n id\n role\n name\n workspace {\n name\n slug\n readOnly\n role\n }\n team {\n user {\n avatar\n id\n name\n }\n }\n visibility\n permissions {\n canLoad {\n authorized\n code\n message\n }\n canPublish {\n authorized\n code\n message\n }\n }\n }\n }\n": types.ProjectDetailsDocument,
- "\n query AutomateFunctions {\n automateFunctions {\n items {\n ...AutomateFunctionItem\n }\n }\n }\n": types.AutomateFunctionsDocument,
+ "\n query AutomateFunctions($workspaceId: String!) {\n workspace(id: $workspaceId) {\n automateFunctions {\n items {\n ...AutomateFunctionItem\n }\n }\n }\n }\n": types.AutomateFunctionsDocument,
"\n query ModelDetails($modelId: String!, $projectId: String!) {\n project(id: $projectId) {\n id\n name\n model(id: $modelId) {\n id\n displayName\n name\n versions {\n totalCount\n items {\n id\n }\n }\n author {\n id\n name\n avatar\n }\n }\n }\n }\n": types.ModelDetailsDocument,
"\n query VersionDetails($projectId: String!, $versionId: String!, $modelId: String!) {\n project(id: $projectId) {\n id\n name\n model(id: $modelId) {\n id\n name\n versions(limit: 1) {\n items {\n id\n createdAt\n sourceApplication\n authorUser {\n id\n }\n }\n }\n version(id: $versionId) {\n id\n referencedObject\n message\n sourceApplication\n createdAt\n previewUrl\n }\n }\n }\n }\n": types.VersionDetailsDocument,
"\n query ServerInfo {\n serverInfo {\n workspaces {\n workspacesEnabled\n }\n }\n }\n": types.ServerInfoDocument,
@@ -147,7 +147,7 @@ export function graphql(source: "\n mutation StreamAccessRequestCreate($input:
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
-export function graphql(source: "\n fragment WorkspaceListWorkspaceItem on Workspace {\n id\n slug\n name\n description\n createdAt\n updatedAt\n logo\n role\n readOnly\n creationState {\n completed\n }\n permissions {\n canCreateProject {\n authorized\n code\n message\n }\n }\n }\n"): (typeof documents)["\n fragment WorkspaceListWorkspaceItem on Workspace {\n id\n slug\n name\n description\n createdAt\n updatedAt\n logo\n role\n readOnly\n creationState {\n completed\n }\n permissions {\n canCreateProject {\n authorized\n code\n message\n }\n }\n }\n"];
+export function graphql(source: "\n fragment WorkspaceListWorkspaceItem on Workspace {\n id\n slug\n name\n description\n createdAt\n updatedAt\n logo\n role\n readOnly\n permissions {\n canCreateProject {\n authorized\n code\n message\n }\n }\n }\n"): (typeof documents)["\n fragment WorkspaceListWorkspaceItem on Workspace {\n id\n slug\n name\n description\n createdAt\n updatedAt\n logo\n role\n readOnly\n permissions {\n canCreateProject {\n authorized\n code\n message\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
@@ -235,7 +235,7 @@ export function graphql(source: "\n query ProjectDetails($projectId: String!) {
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
-export function graphql(source: "\n query AutomateFunctions {\n automateFunctions {\n items {\n ...AutomateFunctionItem\n }\n }\n }\n"): (typeof documents)["\n query AutomateFunctions {\n automateFunctions {\n items {\n ...AutomateFunctionItem\n }\n }\n }\n"];
+export function graphql(source: "\n query AutomateFunctions($workspaceId: String!) {\n workspace(id: $workspaceId) {\n automateFunctions {\n items {\n ...AutomateFunctionItem\n }\n }\n }\n }\n"): (typeof documents)["\n query AutomateFunctions($workspaceId: String!) {\n workspace(id: $workspaceId) {\n automateFunctions {\n items {\n ...AutomateFunctionItem\n }\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
diff --git a/lib/common/generated/gql/graphql.ts b/lib/common/generated/gql/graphql.ts
index a200294..4cb9360 100644
--- a/lib/common/generated/gql/graphql.ts
+++ b/lib/common/generated/gql/graphql.ts
@@ -22,6 +22,113 @@ export type Scalars = {
JSONObject: { input: {}; output: {}; }
};
+export type AccFolder = {
+ __typename?: 'AccFolder';
+ children: AccFolderCollection;
+ contents: AccItemCollection;
+ id: Scalars['ID']['output'];
+ name: Scalars['String']['output'];
+};
+
+export type AccFolderCollection = {
+ __typename?: 'AccFolderCollection';
+ cursor?: Maybe;
+ items: Array;
+};
+
+export type AccHub = {
+ __typename?: 'AccHub';
+ id: Scalars['ID']['output'];
+ name: Scalars['String']['output'];
+ project: AccProject;
+ projects: AccProjectCollection;
+};
+
+
+export type AccHubProjectArgs = {
+ id: Scalars['ID']['input'];
+};
+
+export type AccHubCollection = {
+ __typename?: 'AccHubCollection';
+ cursor?: Maybe;
+ items: Array;
+};
+
+export type AccIntegration = {
+ __typename?: 'AccIntegration';
+ folder: AccFolder;
+ hub: AccHub;
+ hubs: AccHubCollection;
+ item: AccItem;
+ project: AccProject;
+};
+
+
+export type AccIntegrationFolderArgs = {
+ folderId: Scalars['String']['input'];
+ projectId: Scalars['String']['input'];
+};
+
+
+export type AccIntegrationHubArgs = {
+ id: Scalars['String']['input'];
+};
+
+
+export type AccIntegrationItemArgs = {
+ itemId: Scalars['String']['input'];
+ projectId: Scalars['String']['input'];
+};
+
+
+export type AccIntegrationProjectArgs = {
+ hubId: Scalars['String']['input'];
+ projectId: Scalars['String']['input'];
+};
+
+export type AccItem = {
+ __typename?: 'AccItem';
+ /** lineage urn */
+ id: Scalars['ID']['output'];
+ latestVersion: AccItemVersion;
+ name: Scalars['String']['output'];
+};
+
+export type AccItemCollection = {
+ __typename?: 'AccItemCollection';
+ cursor?: Maybe;
+ items: Array;
+};
+
+export type AccItemVersion = {
+ __typename?: 'AccItemVersion';
+ fileType?: Maybe;
+ /** version urn */
+ id: Scalars['ID']['output'];
+ name: Scalars['String']['output'];
+ versionNumber: Scalars['Int']['output'];
+};
+
+export type AccProject = {
+ __typename?: 'AccProject';
+ folder: AccFolder;
+ id: Scalars['ID']['output'];
+ name: Scalars['String']['output'];
+ rootFolder: AccFolder;
+};
+
+
+export type AccProjectFolderArgs = {
+ id: Scalars['String']['input'];
+};
+
+export type AccProjectCollection = {
+ __typename?: 'AccProjectCollection';
+ cursor?: Maybe;
+ items: Array;
+};
+
export type AccSyncItem = {
__typename?: 'AccSyncItem';
accFileExtension: Scalars['String']['output'];
@@ -30,6 +137,7 @@ export type AccSyncItem = {
accFileVersionIndex: Scalars['Int']['output'];
accFileVersionUrn: Scalars['String']['output'];
accFileViewName?: Maybe;
+ accFolderPath: Array;
accHubId: Scalars['String']['output'];
accProjectId: Scalars['String']['output'];
accRegion: Scalars['String']['output'];
@@ -38,8 +146,8 @@ export type AccSyncItem = {
author?: Maybe;
createdAt: Scalars['DateTime']['output'];
id: Scalars['ID']['output'];
- modelId: Scalars['String']['output'];
- projectId: Scalars['String']['output'];
+ model?: Maybe;
+ project: Project;
status: AccSyncItemStatus;
updatedAt: Scalars['DateTime']['output'];
};
@@ -134,9 +242,39 @@ export type AddDomainToWorkspaceInput = {
workspaceId: Scalars['ID']['input'];
};
+/** Either the ID or slug must be set */
export type AdminAccessToWorkspaceFeatureInput = {
featureFlagName: WorkspaceFeatureFlagName;
- workspaceId: Scalars['ID']['input'];
+ workspaceId?: InputMaybe;
+ workspaceSlug?: InputMaybe;
+};
+
+export type AdminExternalSyncMutations = {
+ __typename?: 'AdminExternalSyncMutations';
+ /** Sync versions from external Speckle servers into local projects */
+ syncVersion: AdminExternalSyncVersionResponse;
+};
+
+
+export type AdminExternalSyncMutationsSyncVersionArgs = {
+ input: AdminExternalSyncVersionInput;
+};
+
+export type AdminExternalSyncVersionInput = {
+ /** Optionally specify the model of the local project to sync data into */
+ modelId?: InputMaybe;
+ /** ID of the local project to sync the version into */
+ projectId: Scalars['ID']['input'];
+ /** Only needed if data is behind authentication */
+ token?: InputMaybe;
+ /** The full URL of the version you want to sync from an external Speckle server */
+ versionUrl: Scalars['String']['input'];
+};
+
+export type AdminExternalSyncVersionResponse = {
+ __typename?: 'AdminExternalSyncVersionResponse';
+ /** Sync is currently async, so use this to find logs in your observability stack */
+ correlationId: Scalars['String']['output'];
};
export type AdminInviteList = {
@@ -150,6 +288,12 @@ export type AdminMutations = {
__typename?: 'AdminMutations';
giveAccessToWorkspaceFeature: Scalars['Boolean']['output'];
removeAccessToWorkspaceFeature: Scalars['Boolean']['output'];
+ /**
+ * A server administrator can update the verification status of an user's email.
+ * The server administrator is recommended to confirm ownership of the email address
+ * with the user before performing this action.
+ */
+ updateEmailVerification: Scalars['Boolean']['output'];
updateWorkspacePlan: Scalars['Boolean']['output'];
};
@@ -164,6 +308,11 @@ export type AdminMutationsRemoveAccessToWorkspaceFeatureArgs = {
};
+export type AdminMutationsUpdateEmailVerificationArgs = {
+ input: AdminUpdateEmailVerificationInput;
+};
+
+
export type AdminMutationsUpdateWorkspacePlanArgs = {
input: AdminUpdateWorkspacePlanInput;
};
@@ -208,6 +357,17 @@ export type AdminQueriesWorkspaceListArgs = {
query?: InputMaybe;
};
+export type AdminSupportMutations = {
+ __typename?: 'AdminSupportMutations';
+ externalSync: AdminExternalSyncMutations;
+};
+
+export type AdminUpdateEmailVerificationInput = {
+ email: Scalars['String']['input'];
+ /** Defaults to true. If set to false, the email will be marked as unverified. */
+ verified?: InputMaybe;
+};
+
export type AdminUpdateWorkspacePlanInput = {
plan: WorkspacePlans;
status: WorkspacePlanStatuses;
@@ -319,6 +479,13 @@ export type ArchiveCommentInput = {
projectId: Scalars['String']['input'];
};
+export type AssignedLabel = {
+ __typename?: 'AssignedLabel';
+ hexColor: Scalars['String']['output'];
+ id: Scalars['ID']['output'];
+ name: Scalars['String']['output'];
+};
+
export type AuthStrategy = {
__typename?: 'AuthStrategy';
color?: Maybe;
@@ -420,6 +587,11 @@ export type AutomateFunctionRunStatusReportInput = {
contextView?: InputMaybe;
functionRunId: Scalars['String']['input'];
projectId: Scalars['String']['input'];
+ /**
+ * Signal to the server, that the status report is coming from the function,
+ * and not from the execution engine.
+ */
+ reportingFromFunction?: Scalars['Boolean']['input'];
/** AutomateTypes.ResultsSchema type from @speckle/shared */
results?: InputMaybe;
status: AutomateRunStatus;
@@ -486,6 +658,7 @@ export type AutomateRun = {
__typename?: 'AutomateRun';
automation: Automation;
automationId: Scalars['String']['output'];
+ automationRevisionId: Scalars['String']['output'];
createdAt: Scalars['DateTime']['output'];
functionRuns: Array;
id: Scalars['ID']['output'];
@@ -561,8 +734,12 @@ export type AutomationRevision = {
export type AutomationRevisionCreateFunctionInput = {
functionId: Scalars['String']['input'];
functionReleaseId: Scalars['String']['input'];
- /** Should be encrypted from the client side */
+ /**
+ * If encrypted from the client side, its an opaque string, else its a JSON string.
+ * If the function has no input, leave it empty.
+ */
parameters?: InputMaybe;
+ paramsEncrypted?: Scalars['Boolean']['input'];
};
export type AutomationRevisionFunction = {
@@ -584,6 +761,14 @@ export type BasicGitRepositoryMetadata = {
url: Scalars['String']['output'];
};
+export type BeforeChangeSavedView = {
+ __typename?: 'BeforeChangeSavedView';
+ groupId?: Maybe;
+ groupResourceIds: Array;
+ position: Scalars['Float']['output'];
+ resourceIds: Array;
+};
+
export enum BillingInterval {
Monthly = 'monthly',
Yearly = 'yearly'
@@ -597,6 +782,9 @@ export type BlobMetadata = {
fileSize?: Maybe;
fileType: Scalars['String']['output'];
id: Scalars['String']['output'];
+ resourceId: Scalars['String']['output'];
+ resourceType: BlobResourceType;
+ /** @deprecated Use `resourceId` with `resourceType`. For backwards compatibility, this field always returns the same value as `resourceId`, even if `resourceType` is not `project`. */
streamId: Scalars['String']['output'];
uploadError?: Maybe;
uploadStatus: Scalars['Int']['output'];
@@ -611,6 +799,11 @@ export type BlobMetadataCollection = {
totalSize: Scalars['Int']['output'];
};
+export enum BlobResourceType {
+ Project = 'project',
+ Workspace = 'workspace'
+}
+
export type Branch = {
__typename?: 'Branch';
/**
@@ -701,10 +894,12 @@ export type Comment = {
archived: Scalars['Boolean']['output'];
author: LimitedUser;
authorId: Scalars['String']['output'];
+ /** Similar to resourceIds, except w/ version info stripped. Only set on threads! */
+ baseResourceIds: Array;
createdAt: Scalars['DateTime']['output'];
/**
* Legacy comment viewer data field
- * @deprecated Use the new viewerState field instead
+ * @deprecated Use the new viewerState field instead. Returns empty object.
*/
data?: Maybe;
/** Whether or not comment is a reply to another comment */
@@ -721,7 +916,12 @@ export type Comment = {
replies: CommentCollection;
/** Get authors of replies to this comment */
replyAuthors: CommentReplyAuthorCollection;
- /** Resources that this comment targets. Can be a mixture of either one stream, or multiple commits and objects. */
+ /** Resources that this comment refers to. Only set on threads! */
+ resourceIds: Array;
+ /**
+ * Resources that this comment targets. Can be a mixture of either one stream, or multiple commits and objects.
+ * @deprecated Legacy API surface, to be removed in the future. Use resourceIds/baseResourceIds instead.
+ */
resources: Array;
screenshot?: Maybe;
text?: Maybe;
@@ -746,12 +946,6 @@ export type CommentReplyAuthorsArgs = {
limit?: Scalars['Int']['input'];
};
-export type CommentActivityMessage = {
- __typename?: 'CommentActivityMessage';
- comment: Comment;
- type: Scalars['String']['output'];
-};
-
export type CommentCollection = {
__typename?: 'CommentCollection';
cursor?: Maybe;
@@ -764,24 +958,6 @@ export type CommentContentInput = {
doc?: InputMaybe;
};
-/** Deprecated: Used by old stream-based mutations */
-export type CommentCreateInput = {
- /** IDs of uploaded blobs that should be attached to this comment */
- blobIds: Array;
- data: Scalars['JSONObject']['input'];
- /**
- * Specifies the resources this comment is linked to. There are several use cases:
- * - a comment targets only one resource (commit or object)
- * - a comment targets one or more resources (commits or objects)
- * - a comment targets only a stream
- */
- resources: Array>;
- screenshot?: InputMaybe;
- streamId: Scalars['String']['input'];
- /** ProseMirror document object */
- text?: InputMaybe;
-};
-
export type CommentDataFilters = {
__typename?: 'CommentDataFilters';
hiddenIds?: Maybe>;
@@ -802,16 +978,6 @@ export type CommentDataFiltersInput = {
sectionBox?: InputMaybe;
};
-/** Deprecated: Used by old stream-based mutations */
-export type CommentEditInput = {
- /** IDs of uploaded blobs that should be attached to this comment */
- blobIds: Array;
- id: Scalars['String']['input'];
- streamId: Scalars['String']['input'];
- /** ProseMirror document object */
- text?: InputMaybe;
-};
-
export type CommentMutations = {
__typename?: 'CommentMutations';
archive: Scalars['Boolean']['output'];
@@ -857,13 +1023,6 @@ export type CommentReplyAuthorCollection = {
totalCount: Scalars['Int']['output'];
};
-export type CommentThreadActivityMessage = {
- __typename?: 'CommentThreadActivityMessage';
- data?: Maybe;
- reply?: Maybe;
- type: Scalars['String']['output'];
-};
-
export type Commit = {
__typename?: 'Commit';
/**
@@ -885,7 +1044,7 @@ export type Commit = {
* ...
* }
* ```
- * @deprecated Part of the old API surface and will be removed in the future.
+ * @deprecated Part of the old API surface and will be removed in the future. Always returns 0.
*/
commentCount: Scalars['Int']['output'];
createdAt?: Maybe;
@@ -979,11 +1138,11 @@ export type CreateAccSyncItemInput = {
accFileVersionIndex: Scalars['Int']['input'];
accFileVersionUrn: Scalars['String']['input'];
accFileViewName?: InputMaybe;
+ accFolderPath: Array;
accHubId: Scalars['String']['input'];
accProjectId: Scalars['String']['input'];
accRegion: Scalars['String']['input'];
accRootProjectFolderUrn: Scalars['String']['input'];
- modelId: Scalars['String']['input'];
projectId: Scalars['String']['input'];
};
@@ -1024,12 +1183,54 @@ export type CreateCommentReplyInput = {
threadId: Scalars['String']['input'];
};
+export type CreateDashboardTokenReturn = {
+ __typename?: 'CreateDashboardTokenReturn';
+ token: Scalars['String']['output'];
+ tokenMetadata: DashboardToken;
+};
+
export type CreateEmbedTokenReturn = {
__typename?: 'CreateEmbedTokenReturn';
token: Scalars['String']['output'];
tokenMetadata: EmbedToken;
};
+export type CreateIssueInput = {
+ assigneeId?: InputMaybe;
+ attachmentBlobIds?: InputMaybe>;
+ /** ProseMirror document object */
+ description?: InputMaybe;
+ dueDate?: InputMaybe;
+ /** Supported in workspaced projects only. Use Workspace.issueLabels to get available labels. */
+ labelIds?: InputMaybe>;
+ priority?: InputMaybe;
+ projectId: Scalars['ID']['input'];
+ /**
+ * Resources of the project that this issue should be attached to. Empty means - general project issue, not tied
+ * to any resources.
+ */
+ resourceIdString?: InputMaybe;
+ screenshot?: InputMaybe;
+ status?: InputMaybe;
+ title: Scalars['String']['input'];
+ /** SerializedViewerState (type in @speckle/shared) */
+ viewerState?: InputMaybe;
+};
+
+export type CreateIssueLabelInput = {
+ hexColor: Scalars['String']['input'];
+ name: Scalars['String']['input'];
+ workspaceId: Scalars['ID']['input'];
+};
+
+export type CreateIssueReplyInput = {
+ attachmentBlobIds?: InputMaybe>;
+ /** ProseMirror document object */
+ description?: InputMaybe;
+ issueId: Scalars['ID']['input'];
+ projectId: Scalars['ID']['input'];
+};
+
export type CreateModelInput = {
description?: InputMaybe;
name: Scalars['String']['input'];
@@ -1051,6 +1252,7 @@ export type CreateSavedViewInput = {
isHomeView?: InputMaybe;
/** Auto-generated name, if not specified */
name?: InputMaybe;
+ position?: InputMaybe;
projectId: Scalars['ID']['input'];
resourceIdString: Scalars['String']['input'];
/** Encoded screenshot of the view */
@@ -1095,11 +1297,171 @@ export type CurrencyBasedPrices = {
usd: WorkspacePaidPlanPrices;
};
+export type Dashboard = {
+ __typename?: 'Dashboard';
+ createdAt: Scalars['DateTime']['output'];
+ createdBy?: Maybe;
+ id: Scalars['String']['output'];
+ name: Scalars['String']['output'];
+ permissions: DashboardPermissionChecks;
+ shareLink?: Maybe;
+ /** If null, this is a new dashboard and should be initialized by the client */
+ state?: Maybe;
+ updatedAt: Scalars['DateTime']['output'];
+ workspace: LimitedWorkspace;
+};
+
+export type DashboardCollection = {
+ __typename?: 'DashboardCollection';
+ cursor?: Maybe;
+ items: Array;
+ totalCount: Scalars['Int']['output'];
+};
+
+export type DashboardCreateInput = {
+ name: Scalars['String']['input'];
+};
+
+export type DashboardMutations = {
+ __typename?: 'DashboardMutations';
+ create: Dashboard;
+ createToken: CreateDashboardTokenReturn;
+ delete: Scalars['Boolean']['output'];
+ deleteShare: Scalars['Boolean']['output'];
+ disableShare: DashboardShareLink;
+ duplicate: Dashboard;
+ enableShare: DashboardShareLink;
+ share: DashboardShareLink;
+ update: Dashboard;
+};
+
+
+export type DashboardMutationsCreateArgs = {
+ input: DashboardCreateInput;
+ workspace: WorkspaceIdentifier;
+};
+
+
+export type DashboardMutationsCreateTokenArgs = {
+ dashboardId: Scalars['String']['input'];
+};
+
+
+export type DashboardMutationsDeleteArgs = {
+ id: Scalars['String']['input'];
+};
+
+
+export type DashboardMutationsDeleteShareArgs = {
+ input: DashboardShareInput;
+};
+
+
+export type DashboardMutationsDisableShareArgs = {
+ input: DashboardShareInput;
+};
+
+
+export type DashboardMutationsDuplicateArgs = {
+ id: Scalars['String']['input'];
+ name?: InputMaybe;
+};
+
+
+export type DashboardMutationsEnableShareArgs = {
+ input: DashboardShareInput;
+};
+
+
+export type DashboardMutationsShareArgs = {
+ dashboardId: Scalars['String']['input'];
+};
+
+
+export type DashboardMutationsUpdateArgs = {
+ input: DashboardUpdateInput;
+};
+
+export type DashboardPermissionChecks = {
+ __typename?: 'DashboardPermissionChecks';
+ canCreateToken: PermissionCheckResult;
+ canDelete: PermissionCheckResult;
+ canDuplicate: PermissionCheckResult;
+ canEdit: PermissionCheckResult;
+ canRead: PermissionCheckResult;
+};
+
+export type DashboardProjectLink = {
+ automationId?: InputMaybe;
+ projectId: Scalars['String']['input'];
+};
+
+export type DashboardShareInput = {
+ dashboardId: Scalars['ID']['input'];
+ shareId: Scalars['ID']['input'];
+};
+
+export type DashboardShareLink = {
+ __typename?: 'DashboardShareLink';
+ content: Scalars['String']['output'];
+ createdAt: Scalars['DateTime']['output'];
+ id: Scalars['ID']['output'];
+ revoked: Scalars['Boolean']['output'];
+ validUntil: Scalars['DateTime']['output'];
+};
+
+export type DashboardToken = {
+ __typename?: 'DashboardToken';
+ createdAt: Scalars['DateTime']['output'];
+ dashboard: Dashboard;
+ lastUsed: Scalars['DateTime']['output'];
+ lifespan: Scalars['BigInt']['output'];
+ projects: Array;
+ tokenId: Scalars['String']['output'];
+ user?: Maybe;
+};
+
+export type DashboardTokenCollection = {
+ __typename?: 'DashboardTokenCollection';
+ cursor?: Maybe;
+ items: Array;
+ totalCount: Scalars['Int']['output'];
+};
+
+export type DashboardTokenCreateInput = {
+ dashboardId: Scalars['String']['input'];
+ lifespan?: InputMaybe;
+};
+
+export type DashboardUpdateInput = {
+ dashboardProjectLinks?: InputMaybe>;
+ id: Scalars['String']['input'];
+ name?: InputMaybe;
+ /** Project ids will be removed in the future, for now we'll keep double writing. */
+ projectIds?: InputMaybe>;
+ state?: InputMaybe;
+};
+
+export type DateIntervalFilter = {
+ after?: InputMaybe;
+ before?: InputMaybe;
+};
+
export type DeleteAccSyncItemInput = {
id: Scalars['ID']['input'];
projectId: Scalars['String']['input'];
};
+export type DeleteIssueInput = {
+ issueId: Scalars['ID']['input'];
+ projectId: Scalars['ID']['input'];
+};
+
+export type DeleteIssueLabelInput = {
+ labelId: Scalars['ID']['input'];
+ workspaceId: Scalars['ID']['input'];
+};
+
export type DeleteModelInput = {
id: Scalars['ID']['input'];
projectId: Scalars['ID']['input'];
@@ -1180,7 +1542,7 @@ export type ExtendedViewerResources = {
/** The groups of viewer resources themselves */
groups: Array;
/** Metadata about the request that was made to resolve this. */
- request?: Maybe;
+ request: ExtendedViewerResourcesRequest;
/** Final/adjusted/resolved resource id string */
resourceIdString: Scalars['String']['output'];
/**
@@ -1286,6 +1648,10 @@ export type FileUploadMutationsStartFileImportArgs = {
};
export type FinishFileImportInput = {
+ /**
+ * This is the blob Id of the uploaded file. For legacy reasons it is named jobId.
+ * Note: This is the not the background job Id.
+ */
jobId: Scalars['String']['input'];
projectId: Scalars['String']['input'];
reason?: InputMaybe;
@@ -1356,6 +1722,232 @@ export type InvitableCollaboratorsFilter = {
search?: InputMaybe;
};
+export type Issue = {
+ __typename?: 'Issue';
+ /** All the recent activity on this issue order by createdAt */
+ activities?: Maybe;
+ assignee?: Maybe;
+ /** Could be deleted - set to null */
+ author?: Maybe;
+ createdAt: Scalars['DateTime']['output'];
+ /** ProseMirror document object */
+ description?: Maybe;
+ dueDate?: Maybe;
+ id: Scalars['ID']['output'];
+ /** Human-readable unique identifier for the issue within the project */
+ identifier: Scalars['String']['output'];
+ /**
+ * If issue is a legacy thread that is limited due to being on a legacy project, this will be set to true.
+ * This means that comment contents are inaccessible.
+ */
+ isLimited?: Maybe;
+ labels: Array;
+ /** Sequence number for the issue */
+ number: Scalars['Int']['output'];
+ permissions: IssuePermissionChecks;
+ previewUrl: Scalars['String']['output'];
+ priority: IssuePriority;
+ projectId: Scalars['ID']['output'];
+ /** Description in plaintext */
+ rawDescription?: Maybe;
+ replies: IssueReplyCollection;
+ /** Get authors of replies to this issue */
+ replyAuthors: IssueParticipantCollection;
+ /** Undefined means - not tied to any particular project resource */
+ resourceIdString?: Maybe;
+ status: IssueStatus;
+ thumbnailUrl: Scalars['String']['output'];
+ /** Full issue timeline with replies and activities mixed together in one list */
+ timeline: IssueTimelineCollection;
+ title: Scalars['String']['output'];
+ updatedAt: Scalars['DateTime']['output'];
+ /** The last time you viewed this issue. Present only if an auth'ed request. */
+ viewedAt?: Maybe;
+ viewerState?: Maybe;
+};
+
+
+export type IssueActivitiesArgs = {
+ input?: InputMaybe;
+};
+
+
+export type IssueRepliesArgs = {
+ input?: InputMaybe;
+};
+
+
+export type IssueReplyAuthorsArgs = {
+ limit?: Scalars['Int']['input'];
+};
+
+
+export type IssueTimelineArgs = {
+ input?: InputMaybe;
+};
+
+export type IssueActivity = {
+ __typename?: 'IssueActivity';
+ actor?: Maybe;
+ createdAt: Scalars['DateTime']['output'];
+ eventType: IssueActivityEventType;
+ id: Scalars['ID']['output'];
+ payload: Scalars['JSONObject']['output'];
+};
+
+export type IssueActivityCollection = {
+ __typename?: 'IssueActivityCollection';
+ cursor?: Maybe;
+ items: Array;
+ totalCount: Scalars['Int']['output'];
+};
+
+export enum IssueActivityEventType {
+ Created = 'created',
+ ReplyCreated = 'replyCreated',
+ Updated = 'updated'
+}
+
+export type IssueActivityInput = {
+ cursor?: InputMaybe;
+ /** Activity issue events to exclude from the response */
+ excludedEvents?: InputMaybe>;
+ /**
+ * Maximum 50
+ * Default: 25
+ */
+ limit?: InputMaybe;
+ /** Default sorting order is desc */
+ sortDirection?: InputMaybe;
+};
+
+export type IssueCollection = {
+ __typename?: 'IssueCollection';
+ cursor?: Maybe;
+ items: Array;
+ totalCount: Scalars['Int']['output'];
+};
+
+export type IssueLabel = {
+ __typename?: 'IssueLabel';
+ /** Null, if deleted */
+ author?: Maybe;
+ createdAt: Scalars['DateTime']['output'];
+ hexColor: Scalars['String']['output'];
+ id: Scalars['ID']['output'];
+ lastUsedAt?: Maybe;
+ name: Scalars['String']['output'];
+ updatedAt: Scalars['DateTime']['output'];
+};
+
+export type IssueLabelCollection = {
+ __typename?: 'IssueLabelCollection';
+ cursor?: Maybe;
+ items: Array;
+ totalCount: Scalars['Int']['output'];
+};
+
+export type IssueParticipant = {
+ __typename?: 'IssueParticipant';
+ id: Scalars['ID']['output'];
+ user: LimitedUser;
+};
+
+export type IssueParticipantCollection = {
+ __typename?: 'IssueParticipantCollection';
+ items: Array;
+ totalCount: Scalars['Int']['output'];
+};
+
+export type IssuePermissionChecks = {
+ __typename?: 'IssuePermissionChecks';
+ canDelete: PermissionCheckResult;
+ canEditAssignee: PermissionCheckResult;
+ canEditDescription: PermissionCheckResult;
+ canEditDueDate: PermissionCheckResult;
+ canEditLabels: PermissionCheckResult;
+ canEditPriority: PermissionCheckResult;
+ canEditStatus: PermissionCheckResult;
+ canEditTitle: PermissionCheckResult;
+};
+
+export enum IssuePriority {
+ High = 'high',
+ Low = 'low',
+ Medium = 'medium',
+ None = 'none'
+}
+
+export type IssueRepliesInput = {
+ cursor?: InputMaybe;
+ /**
+ * Maximum 50
+ * Default: 25
+ */
+ limit?: InputMaybe;
+ /**
+ * Specify the field to sort by.
+ * Default: createdAt
+ */
+ sortBy?: InputMaybe;
+ /** Default: asc */
+ sortDirection?: InputMaybe;
+};
+
+export type IssueReply = {
+ __typename?: 'IssueReply';
+ /** Could be deleted - set to null */
+ author?: Maybe;
+ createdAt: Scalars['DateTime']['output'];
+ /** ProseMirror document object */
+ description?: Maybe;
+ id: Scalars['ID']['output'];
+ /**
+ * If issue is a legacy thread that is limited due to being on a legacy project, this will be set to true.
+ * This means that comment contents are inaccessible.
+ */
+ isLimited?: Maybe;
+ issueId: Scalars['ID']['output'];
+ projectId: Scalars['ID']['output'];
+ rawDescription?: Maybe;
+};
+
+export type IssueReplyCollection = {
+ __typename?: 'IssueReplyCollection';
+ cursor?: Maybe;
+ items: Array;
+ totalCount: Scalars['Int']['output'];
+};
+
+export enum IssueStatus {
+ Open = 'open',
+ ReadyForReview = 'readyForReview',
+ Resolved = 'resolved'
+}
+
+export type IssueTimelineCollection = {
+ __typename?: 'IssueTimelineCollection';
+ cursor?: Maybe;
+ items: Array;
+ totalCount: Scalars['Int']['output'];
+};
+
+export type IssueTimelineInput = {
+ cursor?: InputMaybe;
+ /**
+ * Activity issue events to exclude from the response
+ * Note: Updated/ReplyCreated are always auto-excluded
+ */
+ excludedEvents?: InputMaybe>;
+ /**
+ * Maximum 50
+ * Default: 10
+ */
+ limit?: InputMaybe;
+};
+
+export type IssueTimelineItem = IssueActivity | IssueReply;
+
export enum JobResultStatus {
Error = 'error',
Success = 'success'
@@ -1502,6 +2094,8 @@ export type LimitedWorkspace = {
logo?: Maybe;
/** Workspace name */
name: Scalars['String']['output'];
+ /** Workspace permissions */
+ permissions: WorkspacePermissionChecks;
/** Active user's role for this workspace. `null` if request is not authenticated, or the workspace is not explicitly shared with you. */
role?: Maybe;
/** Unique workspace short id. Used for navigation. */
@@ -1550,6 +2144,11 @@ export type MarkCommentViewedInput = {
projectId: Scalars['String']['input'];
};
+export type MarkIssueViewedInput = {
+ issueId: Scalars['ID']['input'];
+ projectId: Scalars['ID']['input'];
+};
+
export type MarkReceivedVersionInput = {
message?: InputMaybe;
projectId: Scalars['String']['input'];
@@ -1559,6 +2158,7 @@ export type MarkReceivedVersionInput = {
export type Model = {
__typename?: 'Model';
+ accSyncItem?: Maybe;
author?: Maybe;
automationsStatus?: Maybe;
/** Return a model tree of children */
@@ -1579,6 +2179,8 @@ export type Model = {
permissions: ModelPermissionChecks;
previewUrl?: Maybe;
projectId: Scalars['String']['output'];
+ /** The resourceIdString to use when building links to this model in the viewer. Takes home view settings into account. */
+ resourceIdString: Scalars['String']['output'];
updatedAt: Scalars['DateTime']['output'];
/** Get all file uploads ever done in this model */
uploads: FileUploadCollection;
@@ -1697,6 +2299,7 @@ export type Mutation = {
activeUserMutations: ActiveUserMutations;
admin: AdminMutations;
adminDeleteUser: Scalars['Boolean']['output'];
+ adminSupport: AdminSupportMutations;
/** Creates an personal api token. */
apiTokenCreate: Scalars['String']['output'];
/** Revokes (deletes) an personal api token/app token. */
@@ -1721,32 +2324,7 @@ export type Mutation = {
branchUpdate: Scalars['Boolean']['output'];
/** Broadcast user activity in the viewer */
broadcastViewerUserActivity: Scalars['Boolean']['output'];
- /**
- * Archives a comment.
- * @deprecated Use commentMutations version
- */
- commentArchive: Scalars['Boolean']['output'];
- /**
- * Creates a comment
- * @deprecated Use commentMutations version
- */
- commentCreate: Scalars['String']['output'];
- /**
- * Edits a comment.
- * @deprecated Use commentMutations version
- */
- commentEdit: Scalars['Boolean']['output'];
commentMutations: CommentMutations;
- /**
- * Adds a reply to a comment.
- * @deprecated Use commentMutations version
- */
- commentReply: Scalars['String']['output'];
- /**
- * Flags a comment as viewed by you (the logged in user).
- * @deprecated Use commentMutations version
- */
- commentView: Scalars['Boolean']['output'];
/** @deprecated Part of the old API surface and will be removed in the future. Use VersionMutations.create instead. */
commitCreate: Scalars['String']['output'];
/** @deprecated Part of the old API surface and will be removed in the future. Use VersionMutations.delete instead. */
@@ -1765,6 +2343,7 @@ export type Mutation = {
* @deprecated Part of the old API surface and will be removed in the future. Use VersionMutations.moveToModel instead.
*/
commitsMove: Scalars['Boolean']['output'];
+ dashboardMutations: DashboardMutations;
fileUploadMutations: FileUploadMutations;
/**
* Delete a pending invite
@@ -1777,12 +2356,13 @@ export type Mutation = {
*/
inviteResend: Scalars['Boolean']['output'];
modelMutations: ModelMutations;
+ notificationMutations: NotificationMutations;
/** @deprecated Part of the old API surface and will be removed in the future. */
objectCreate: Array;
projectMutations: ProjectMutations;
/** (Re-)send the account verification e-mail */
- requestVerification: Scalars['Boolean']['output'];
- requestVerificationByEmail: Scalars['Boolean']['output'];
+ requestVerification: SentEmailInfo;
+ requestVerificationByEmail: SentEmailInfo;
serverInfoMutations: ServerInfoMutations;
serverInfoUpdate?: Maybe;
/** Note: The required scope to invoke this is not given out to app or personal access tokens */
@@ -1806,26 +2386,26 @@ export type Mutation = {
streamCreate?: Maybe;
/**
* Deletes an existing stream.
- * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.delete instead.
+ * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.delete instead. Field will be deleted on January 1st, 2026.
*/
streamDelete: Scalars['Boolean']['output'];
/** @deprecated Part of the old API surface and will be removed in the future. */
streamFavorite?: Maybe;
/**
* Note: The required scope to invoke this is not given out to app or personal access tokens
- * @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.batchCreate instead.
+ * @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.batchCreate instead. Field will be deleted on January 1st, 2026.
*/
streamInviteBatchCreate: Scalars['Boolean']['output'];
/**
* Cancel a pending stream invite. Can only be invoked by a stream owner.
* Note: The required scope to invoke this is not given out to app or personal access tokens
- * @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.cancel instead.
+ * @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.cancel instead. Field will be deleted on January 1st, 2026.
*/
streamInviteCancel: Scalars['Boolean']['output'];
/**
* Invite a new or registered user to the specified stream
* Note: The required scope to invoke this is not given out to app or personal access tokens
- * @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.create instead.
+ * @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.create instead. Field will be deleted on January 1st, 2026.
*/
streamInviteCreate: Scalars['Boolean']['output'];
/**
@@ -1840,7 +2420,7 @@ export type Mutation = {
streamLeave: Scalars['Boolean']['output'];
/**
* Revokes the permissions of a user on a given stream.
- * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.updateRole instead.
+ * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.updateRole instead. Field will be deleted on January 1st, 2026.
*/
streamRevokePermission?: Maybe;
/**
@@ -1850,16 +2430,11 @@ export type Mutation = {
streamUpdate: Scalars['Boolean']['output'];
/**
* Update permissions of a user on a given stream.
- * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.updateRole instead.
+ * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.updateRole instead. Field will be deleted on January 1st, 2026.
*/
streamUpdatePermission?: Maybe;
- /** @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.batchDelete instead. */
+ /** @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.batchDelete instead. Field will be deleted on January 1st, 2026. */
streamsDelete: Scalars['Boolean']['output'];
- /**
- * Used for broadcasting real time typing status in comment threads. Does not persist any info.
- * @deprecated Use broadcastViewerUserActivity
- */
- userCommentThreadActivityBroadcast: Scalars['Boolean']['output'];
/** Delete a user's account. */
userDelete: Scalars['Boolean']['output'];
userNotificationPreferencesUpdate?: Maybe;
@@ -1869,11 +2444,6 @@ export type Mutation = {
* @deprecated Use activeUserMutations version
*/
userUpdate: Scalars['Boolean']['output'];
- /**
- * Used for broadcasting real time chat head bubbles and status. Does not persist any info.
- * @deprecated Use broadcastViewerUserActivity
- */
- userViewerActivityBroadcast: Scalars['Boolean']['output'];
versionMutations: VersionMutations;
/** Creates a new webhook on a stream */
webhookCreate: Scalars['String']['output'];
@@ -1953,34 +2523,6 @@ export type MutationBroadcastViewerUserActivityArgs = {
};
-export type MutationCommentArchiveArgs = {
- archived?: Scalars['Boolean']['input'];
- commentId: Scalars['String']['input'];
- streamId: Scalars['String']['input'];
-};
-
-
-export type MutationCommentCreateArgs = {
- input: CommentCreateInput;
-};
-
-
-export type MutationCommentEditArgs = {
- input: CommentEditInput;
-};
-
-
-export type MutationCommentReplyArgs = {
- input: ReplyCreateInput;
-};
-
-
-export type MutationCommentViewArgs = {
- commentId: Scalars['String']['input'];
- streamId: Scalars['String']['input'];
-};
-
-
export type MutationCommitCreateArgs = {
commit: CommitCreateInput;
};
@@ -2122,13 +2664,6 @@ export type MutationStreamsDeleteArgs = {
};
-export type MutationUserCommentThreadActivityBroadcastArgs = {
- commentId: Scalars['String']['input'];
- data?: InputMaybe;
- streamId: Scalars['String']['input'];
-};
-
-
export type MutationUserDeleteArgs = {
userConfirmation: UserDeleteInput;
};
@@ -2149,13 +2684,6 @@ export type MutationUserUpdateArgs = {
};
-export type MutationUserViewerActivityBroadcastArgs = {
- data?: InputMaybe;
- resourceId: Scalars['String']['input'];
- streamId: Scalars['String']['input'];
-};
-
-
export type MutationWebhookCreateArgs = {
webhook: WebhookCreateInput;
};
@@ -2170,6 +2698,39 @@ export type MutationWebhookUpdateArgs = {
webhook: WebhookUpdateInput;
};
+export type Notification = {
+ __typename?: 'Notification';
+ createdAt: Scalars['DateTime']['output'];
+ id: Scalars['ID']['output'];
+ payload: Scalars['JSONObject']['output'];
+ read: Scalars['Boolean']['output'];
+ type: Scalars['String']['output'];
+ updatedAt: Scalars['DateTime']['output'];
+};
+
+export type NotificationMutations = {
+ __typename?: 'NotificationMutations';
+ /** Delete an existing notification */
+ bulkDelete: Scalars['Boolean']['output'];
+ /** update notidication */
+ bulkUpdate: Scalars['Boolean']['output'];
+};
+
+
+export type NotificationMutationsBulkDeleteArgs = {
+ ids: Array;
+};
+
+
+export type NotificationMutationsBulkUpdateArgs = {
+ input: Array;
+};
+
+export type NotificationUpdateInput = {
+ id: Scalars['ID']['input'];
+ read: Scalars['Boolean']['input'];
+};
+
export type Object = {
__typename?: 'Object';
/** @deprecated Not implemented. */
@@ -2188,7 +2749,7 @@ export type Object = {
* ...
* }
* ```
- * @deprecated Part of the old API surface and will be removed in the future.
+ * @deprecated Part of the old API surface and will be removed in the future. Always returns 0.
*/
commentCount: Scalars['Int']['output'];
createdAt?: Maybe;
@@ -2329,6 +2890,8 @@ export type Project = {
accSyncItem: AccSyncItem;
accSyncItems: AccSyncItemCollection;
allowPublicComments: Scalars['Boolean']['output'];
+ /** List of allowed assignees for this issue */
+ allowedIssueAssignees: IssueParticipantCollection;
/** Get a single automation by id. Error will be thrown if automation is not found or inaccessible. */
automation: Automation;
automations: AutomationCollection;
@@ -2340,15 +2903,26 @@ export type Project = {
/** All comment threads in this project */
commentThreads: ProjectCommentCollection;
createdAt: Scalars['DateTime']['output'];
+ dashboardTokens: DashboardTokenCollection;
+ dashboards: DashboardCollection;
description?: Maybe;
/** Public project-level configuration for embedded viewer */
embedOptions: ProjectEmbedOptions;
embedTokens: EmbedTokenCollection;
+ /** @deprecated Use specific auth policies instead */
hasAccessToFeature: Scalars['Boolean']['output'];
id: Scalars['ID']['output'];
invitableCollaborators: WorkspaceCollaboratorCollection;
/** Collaborators who have been invited, but not yet accepted. */
invitedTeam?: Maybe>;
+ /** Load a specific issue by ID */
+ issue: Issue;
+ /** Issue prefix for this project */
+ issuePrefix: Scalars['String']['output'];
+ /** List issues for this project */
+ issues: IssueCollection;
+ /** Limited workspace records that exposes public data projects workspaces. */
+ limitedWorkspace?: Maybe;
/** Returns a specific model by its ID */
model: Model;
/** Retrieve a specific project model by its ID */
@@ -2378,6 +2952,7 @@ export type Project = {
savedViewGroups: SavedViewGroupCollection;
/** Same as savedView(), but won't throw if view isn't found */
savedViewIfExists?: Maybe;
+ savedViews: SavedViewCollection;
/** Source apps used in any models of this project */
sourceApps: Array;
team: Array;
@@ -2396,6 +2971,7 @@ export type Project = {
viewerResourcesExtended: ExtendedViewerResources;
visibility: ProjectVisibility;
webhooks: WebhookCollection;
+ /** Full workspace information for the project. */
workspace?: Maybe;
workspaceId?: Maybe;
};
@@ -2412,6 +2988,12 @@ export type ProjectAccSyncItemsArgs = {
};
+export type ProjectAllowedIssueAssigneesArgs = {
+ limit?: Scalars['Int']['input'];
+ search?: InputMaybe;
+};
+
+
export type ProjectAutomationArgs = {
id: Scalars['String']['input'];
};
@@ -2448,6 +3030,19 @@ export type ProjectCommentThreadsArgs = {
};
+export type ProjectDashboardTokensArgs = {
+ cursor?: InputMaybe;
+ limit?: InputMaybe;
+};
+
+
+export type ProjectDashboardsArgs = {
+ cursor?: InputMaybe;
+ filter?: InputMaybe;
+ limit?: Scalars['Int']['input'];
+};
+
+
export type ProjectEmbedTokensArgs = {
cursor?: InputMaybe;
limit?: InputMaybe;
@@ -2466,6 +3061,16 @@ export type ProjectInvitableCollaboratorsArgs = {
};
+export type ProjectIssueArgs = {
+ id: Scalars['ID']['input'];
+};
+
+
+export type ProjectIssuesArgs = {
+ input?: InputMaybe;
+};
+
+
export type ProjectModelArgs = {
id: Scalars['String']['input'];
};
@@ -2530,6 +3135,11 @@ export type ProjectSavedViewIfExistsArgs = {
};
+export type ProjectSavedViewsArgs = {
+ input: ProjectSavedViewsInput;
+};
+
+
export type ProjectUngroupedViewGroupArgs = {
input: GetUngroupedViewGroupInput;
};
@@ -2556,6 +3166,7 @@ export type ProjectViewerResourcesArgs = {
export type ProjectViewerResourcesExtendedArgs = {
loadedVersionsOnly?: InputMaybe;
+ preloadResourceIdString?: InputMaybe;
resourceIdString: Scalars['String']['input'];
savedViewId?: InputMaybe;
savedViewSettings?: InputMaybe;
@@ -2613,6 +3224,7 @@ export type ProjectAccessRequestMutationsUseArgs = {
export type ProjectAutomationCreateInput = {
enabled: Scalars['Boolean']['input'];
+ isTestAutomation?: InputMaybe;
name: Scalars['String']['input'];
};
@@ -2649,6 +3261,7 @@ export type ProjectAutomationMutationsCreateTestAutomationArgs = {
export type ProjectAutomationMutationsCreateTestAutomationRunArgs = {
automationId: Scalars['ID']['input'];
+ versionId?: InputMaybe;
};
@@ -2659,6 +3272,7 @@ export type ProjectAutomationMutationsDeleteArgs = {
export type ProjectAutomationMutationsTriggerArgs = {
automationId: Scalars['ID']['input'];
+ versionId?: InputMaybe;
};
@@ -2757,6 +3371,10 @@ export type ProjectCreateInput = {
visibility?: InputMaybe;
};
+export type ProjectDashboardsFilter = {
+ search?: InputMaybe;
+};
+
export type ProjectEmbedOptions = {
__typename?: 'ProjectEmbedOptions';
hideSpeckleBranding: Scalars['Boolean']['output'];
@@ -2838,6 +3456,102 @@ export type ProjectInviteUseInput = {
token: Scalars['String']['input'];
};
+export type ProjectIssueMutations = {
+ __typename?: 'ProjectIssueMutations';
+ createIssue: Issue;
+ createReply: IssueReply;
+ deleteIssue: Scalars['Boolean']['output'];
+ markIssueViewed: Scalars['Boolean']['output'];
+ updateIssue: Issue;
+};
+
+
+export type ProjectIssueMutationsCreateIssueArgs = {
+ input: CreateIssueInput;
+};
+
+
+export type ProjectIssueMutationsCreateReplyArgs = {
+ input: CreateIssueReplyInput;
+};
+
+
+export type ProjectIssueMutationsDeleteIssueArgs = {
+ input: DeleteIssueInput;
+};
+
+
+export type ProjectIssueMutationsMarkIssueViewedArgs = {
+ input: MarkIssueViewedInput;
+};
+
+
+export type ProjectIssueMutationsUpdateIssueArgs = {
+ input: UpdateIssueInput;
+};
+
+export enum ProjectIssueRepliesSortBy {
+ CreatedAt = 'createdAt',
+ UpdatedAt = 'updatedAt'
+}
+
+export type ProjectIssuesInput = {
+ assigneeIds?: InputMaybe>;
+ createdAt?: InputMaybe;
+ cursor?: InputMaybe;
+ dueDate?: InputMaybe;
+ /** Supported in workspaced projects only. Use Workspace.issueLabels to get available labels. */
+ labelIds?: InputMaybe>;
+ limit?: InputMaybe;
+ /**
+ * Only load issues for actively loaded versions in resourceIdString.
+ * Only applies if resourceIdString is set.
+ */
+ loadedVersionsOnly?: InputMaybe;
+ priorities?: InputMaybe>;
+ /** Optionally filter by project resources */
+ resourceIdString?: InputMaybe;
+ /** Filter by name/description */
+ search?: InputMaybe;
+ /**
+ * Specify the field to sort by.
+ * Default: updatedAt
+ */
+ sortBy?: InputMaybe;
+ /** Default: desc */
+ sortDirection?: InputMaybe;
+ statuses?: InputMaybe>;
+ updatedAt?: InputMaybe;
+};
+
+export enum ProjectIssuesSortBy {
+ CreatedAt = 'createdAt',
+ DueDate = 'dueDate',
+ Priority = 'priority',
+ Status = 'status',
+ UpdatedAt = 'updatedAt'
+}
+
+export type ProjectIssuesUpdatedMessage = {
+ __typename?: 'ProjectIssuesUpdatedMessage';
+ /** Issue ID */
+ id: Scalars['ID']['output'];
+ /** Null if issue was deleted */
+ issue?: Maybe;
+ /** The project that the update belongs to */
+ project: Project;
+ /** Only set if replyCreated event */
+ reply?: Maybe;
+ type: ProjectIssuesUpdatedMessageType;
+};
+
+export enum ProjectIssuesUpdatedMessageType {
+ Created = 'created',
+ Deleted = 'deleted',
+ ReplyCreated = 'replyCreated',
+ Updated = 'updated'
+}
+
export type ProjectModelsFilter = {
/** Filter by IDs of contributors who participated in models */
contributors?: InputMaybe>;
@@ -2907,6 +3621,7 @@ export type ProjectMutations = {
delete: Scalars['Boolean']['output'];
/** Invite related mutations */
invites: ProjectInviteMutations;
+ issues: ProjectIssueMutations;
/** Leave a project. Only possible if you're not the last remaining owner. */
leave: Scalars['Boolean']['output'];
revokeEmbedToken: Scalars['Boolean']['output'];
@@ -2997,15 +3712,19 @@ export enum ProjectPendingVersionsUpdatedMessageType {
export type ProjectPermissionChecks = {
__typename?: 'ProjectPermissionChecks';
+ canAccessIssuesFeature: PermissionCheckResult;
canBroadcastActivity: PermissionCheckResult;
canCreateAutomation: PermissionCheckResult;
canCreateComment: PermissionCheckResult;
canCreateEmbedTokens: PermissionCheckResult;
+ canCreateIssue: PermissionCheckResult;
canCreateModel: PermissionCheckResult;
canCreateSavedView: PermissionCheckResult;
canDelete: PermissionCheckResult;
canInvite: PermissionCheckResult;
canLeave: PermissionCheckResult;
+ canListIssues: PermissionCheckResult;
+ canListUsers: PermissionCheckResult;
canLoad: PermissionCheckResult;
canMoveToWorkspace: PermissionCheckResult;
canPublish: PermissionCheckResult;
@@ -3031,6 +3750,57 @@ export type ProjectRole = {
role: Scalars['String']['output'];
};
+export type ProjectSavedViewGroupsUpdatedMessage = {
+ __typename?: 'ProjectSavedViewGroupsUpdatedMessage';
+ /** SavedViewGroup ID */
+ id: Scalars['ID']['output'];
+ /** The project that the update belongs to */
+ project: Project;
+ /** Null if group was deleted */
+ savedViewGroup?: Maybe;
+ type: ProjectSavedViewsUpdatedMessageType;
+};
+
+export type ProjectSavedViewsInput = {
+ cursor?: InputMaybe;
+ limit?: InputMaybe;
+ /** Optionally filter by visibility. */
+ onlyVisibility?: InputMaybe;
+ /**
+ * Viewer resource ID string that identifies which resources should be loaded. If not specified,
+ * views from all resources in the project will be returned.
+ */
+ resourceIdString?: InputMaybe;
+ /** Whether to only include views matching this search term */
+ search?: InputMaybe;
+ /**
+ * Optionally specify sort by field. Default: position
+ * Options: updatedAt, createdAt, name, position
+ */
+ sortBy?: InputMaybe;
+ /** Optionally specify sort direction. Default: descending */
+ sortDirection?: InputMaybe;
+};
+
+export type ProjectSavedViewsUpdatedMessage = {
+ __typename?: 'ProjectSavedViewsUpdatedMessage';
+ /** Set if view was deleted/updated, allows some limited access into the view before the change (update/delete) */
+ beforeChangeSavedView?: Maybe;
+ /** SavedView ID */
+ id: Scalars['ID']['output'];
+ /** The project that the update belongs to */
+ project: Project;
+ /** Null if view was deleted */
+ savedView?: Maybe;
+ type: ProjectSavedViewsUpdatedMessageType;
+};
+
+export enum ProjectSavedViewsUpdatedMessageType {
+ Created = 'CREATED',
+ Deleted = 'DELETED',
+ Updated = 'UPDATED'
+}
+
export type ProjectTestAutomationCreateInput = {
modelId: Scalars['String']['input'];
name: Scalars['String']['input'];
@@ -3055,6 +3825,7 @@ export type ProjectUpdateInput = {
allowPublicComments?: InputMaybe;
description?: InputMaybe;
id: Scalars['ID']['input'];
+ issuePrefix?: InputMaybe;
name?: InputMaybe;
visibility?: InputMaybe;
};
@@ -3145,18 +3916,9 @@ export type Query = {
authenticatedAsApp?: Maybe;
/** Get a single automate function by id. Error will be thrown if function is not found or inaccessible. */
automateFunction: AutomateFunction;
- automateFunctions: AutomateFunctionCollection;
/** Part of the automation/function creation handshake mechanism */
automateValidateAuthCode: Scalars['Boolean']['output'];
- /** @deprecated Part of the old API surface and will be removed in the future. Use Project.comment instead. */
- comment?: Maybe;
- /**
- * This query can be used in the following ways:
- * - get all the comments for a stream: **do not pass in any resource identifiers**.
- * - get the comments targeting any of a set of provided resources (comments/objects): **pass in an array of resources.**
- * @deprecated Use Project/Version/Model 'commentThreads' fields instead
- */
- comments?: Maybe;
+ dashboard: Dashboard;
/**
* All of the discoverable streams of the server
* @deprecated Part of the old API surface and will be removed in the future.
@@ -3164,6 +3926,7 @@ export type Query = {
discoverableStreams?: Maybe;
/** Get the (limited) profile information of another server user */
otherUser?: Maybe;
+ permissions: RootPermissionChecks;
/**
* Find a specific project. Will throw an authorization error if active user isn't authorized
* to see it, for example, if a project isn't public and the user doesn't have the appropriate rights.
@@ -3198,7 +3961,7 @@ export type Query = {
streamInvite?: Maybe;
/**
* Get all invitations to streams that the active user has
- * @deprecated Part of the old API surface and will be removed in the future. Use User.projectInvites instead.
+ * @deprecated Part of the old API surface and will be removed in the future. Use User.projectInvites instead. Field will be deleted on January 1st, 2026.
*/
streamInvites: Array;
/**
@@ -3270,31 +4033,14 @@ export type QueryAutomateFunctionArgs = {
};
-export type QueryAutomateFunctionsArgs = {
- cursor?: InputMaybe;
- filter?: InputMaybe;
- limit?: InputMaybe;
-};
-
-
export type QueryAutomateValidateAuthCodeArgs = {
payload: AutomateAuthCodePayloadTest;
resources?: InputMaybe;
};
-export type QueryCommentArgs = {
+export type QueryDashboardArgs = {
id: Scalars['String']['input'];
- streamId: Scalars['String']['input'];
-};
-
-
-export type QueryCommentsArgs = {
- archived?: Scalars['Boolean']['input'];
- cursor?: InputMaybe;
- limit?: InputMaybe;
- resources?: InputMaybe>>;
- streamId: Scalars['String']['input'];
};
@@ -3404,17 +4150,6 @@ export type QueryWorkspaceSsoByEmailArgs = {
email: Scalars['String']['input'];
};
-/** Deprecated: Used by old stream-based mutations */
-export type ReplyCreateInput = {
- /** IDs of uploaded blobs that should be attached to this reply */
- blobIds: Array;
- data?: InputMaybe;
- parentComment: Scalars['String']['input'];
- streamId: Scalars['String']['input'];
- /** ProseMirror document object */
- text?: InputMaybe;
-};
-
export type ResourceIdentifier = {
__typename?: 'ResourceIdentifier';
resourceId: Scalars['String']['output'];
@@ -3444,6 +4179,7 @@ export type RootPermissionChecks = {
__typename?: 'RootPermissionChecks';
canCreatePersonalProject: PermissionCheckResult;
canCreateWorkspace: PermissionCheckResult;
+ canUseAdminSupportTools: PermissionCheckResult;
};
export type SavedView = {
@@ -3455,19 +4191,30 @@ export type SavedView = {
group: SavedViewGroup;
/** Empty ID means default/ungrouped view */
groupId?: Maybe;
+ /**
+ * Truncated resourceIds w/o specific version data that is used to associate the view w/
+ * specific groups
+ */
+ groupResourceIds: Array;
id: Scalars['ID']['output'];
isHomeView: Scalars['Boolean']['output'];
name: Scalars['String']['output'];
permissions: SavedViewPermissionChecks;
/** For figuring out position in the group */
position: Scalars['Float']['output'];
+ previewUrl: Scalars['String']['output'];
projectId: Scalars['ID']['output'];
/** Original resource ID string that this view is associated with. */
resourceIdString: Scalars['String']['output'];
/** Same as resourceIdString, but split into an array of resource IDs. */
resourceIds: Array;
- /** Encoded screenshot of the view */
+ /**
+ * Encoded screenshot of the view. Can be a very large value, its preferred you
+ * use the thumbnailUrl or previewUrl fields to load the image from a separate endpoint
+ * @deprecated Use thumbnailUrl or previewUrl instead
+ */
screenshot: Scalars['String']['output'];
+ thumbnailUrl: Scalars['String']['output'];
updatedAt: Scalars['DateTime']['output'];
/** Viewer state, the actual view configuration */
viewerState: Scalars['JSONObject']['output'];
@@ -3483,6 +4230,7 @@ export type SavedViewCollection = {
export type SavedViewGroup = {
__typename?: 'SavedViewGroup';
+ author?: Maybe;
/** Only set if this is a real/persisted group. */
groupId?: Maybe;
/** This is always set even for fake/not persisted groups for Apollo caching */
@@ -3492,6 +4240,7 @@ export type SavedViewGroup = {
projectId: Scalars['ID']['output'];
/** Resources that were used to find this group */
resourceIds: Array;
+ shareLink?: Maybe;
title: Scalars['String']['output'];
views: SavedViewCollection;
};
@@ -3510,9 +4259,30 @@ export type SavedViewGroupCollection = {
export type SavedViewGroupPermissionChecks = {
__typename?: 'SavedViewGroupPermissionChecks';
+ canCreateToken: PermissionCheckResult;
canUpdate: PermissionCheckResult;
};
+export type SavedViewGroupShareInput = {
+ groupId: Scalars['ID']['input'];
+ projectId: Scalars['ID']['input'];
+};
+
+export type SavedViewGroupShareLink = {
+ __typename?: 'SavedViewGroupShareLink';
+ content: Scalars['String']['output'];
+ createdAt: Scalars['DateTime']['output'];
+ id: Scalars['ID']['output'];
+ revoked: Scalars['Boolean']['output'];
+ validUntil: Scalars['DateTime']['output'];
+};
+
+export type SavedViewGroupShareUpdateInput = {
+ groupId: Scalars['ID']['input'];
+ projectId: Scalars['ID']['input'];
+ shareId: Scalars['ID']['input'];
+};
+
export type SavedViewGroupViewsInput = {
cursor?: InputMaybe;
limit?: InputMaybe;
@@ -3523,8 +4293,8 @@ export type SavedViewGroupViewsInput = {
/** Whether to only include views matching this search term */
search?: InputMaybe;
/**
- * Optionally specify sort by field. Default: updatedAt
- * Options: updatedAt, createdAt, name
+ * Optionally specify sort by field. Default: position
+ * Options: updatedAt, createdAt, name, position
*/
sortBy?: InputMaybe;
/** Optionally specify sort direction. Default: descending */
@@ -3549,7 +4319,11 @@ export type SavedViewMutations = {
createGroup: SavedViewGroup;
createView: SavedView;
deleteGroup: Scalars['Boolean']['output'];
+ deleteShare: Scalars['Boolean']['output'];
deleteView: Scalars['Boolean']['output'];
+ disableShare: SavedViewGroupShareLink;
+ enableShare: SavedViewGroupShareLink;
+ share: SavedViewGroupShareLink;
updateGroup: SavedViewGroup;
updateView: SavedView;
};
@@ -3570,11 +4344,31 @@ export type SavedViewMutationsDeleteGroupArgs = {
};
+export type SavedViewMutationsDeleteShareArgs = {
+ input: SavedViewGroupShareUpdateInput;
+};
+
+
export type SavedViewMutationsDeleteViewArgs = {
input: DeleteSavedViewInput;
};
+export type SavedViewMutationsDisableShareArgs = {
+ input: SavedViewGroupShareUpdateInput;
+};
+
+
+export type SavedViewMutationsEnableShareArgs = {
+ input: SavedViewGroupShareUpdateInput;
+};
+
+
+export type SavedViewMutationsShareArgs = {
+ input: SavedViewGroupShareInput;
+};
+
+
export type SavedViewMutationsUpdateGroupArgs = {
input: UpdateSavedViewGroupInput;
};
@@ -3586,6 +4380,17 @@ export type SavedViewMutationsUpdateViewArgs = {
export type SavedViewPermissionChecks = {
__typename?: 'SavedViewPermissionChecks';
+ canChangeVisibility: PermissionCheckResult;
+ canDelete: PermissionCheckResult;
+ canEditDescription: PermissionCheckResult;
+ canEditTitle: PermissionCheckResult;
+ canMove: PermissionCheckResult;
+ canReplaceView: PermissionCheckResult;
+ canSetAsHomeView: PermissionCheckResult;
+ /**
+ * Can the current user fully update everything about this view. Even if this fails,
+ * the user may be able to do partial updates (e.g. just change the title)
+ */
canUpdate: PermissionCheckResult;
};
@@ -3609,6 +4414,29 @@ export type Scope = {
name: Scalars['String']['output'];
};
+/** The delivery status of a sent e-mail */
+export enum SentEmailDeliveryStatus {
+ /** The e-mail failed to send */
+ Failed = 'FAILED',
+ /** The e-mail is being processed */
+ Pending = 'PENDING',
+ /** The e-mail is queued for sending */
+ Queued = 'QUEUED',
+ /** The e-mail has been sent */
+ Sent = 'SENT'
+}
+
+/** Information about a sent e-mail */
+export type SentEmailInfo = {
+ __typename?: 'SentEmailInfo';
+ /** Any error messages encountered during sending (if any) */
+ errorMessages?: Maybe>;
+ /** The ID of the sent message (if available) */
+ messageId: Scalars['String']['output'];
+ /** The status of the delivery attempt */
+ status: SentEmailDeliveryStatus;
+};
+
export type ServerApp = {
__typename?: 'ServerApp';
author?: Maybe;
@@ -3646,6 +4474,10 @@ export type ServerAutomateInfo = {
export type ServerConfiguration = {
__typename?: 'ServerConfiguration';
blobSizeLimitBytes: Scalars['Int']['output'];
+ /** Email verification code timeout in minutes */
+ emailVerificationTimeoutMinutes: Scalars['Int']['output'];
+ /** Active server-level feature flags */
+ featureFlags: Scalars['JSONObject']['output'];
/** Whether the email feature is enabled on this server */
isEmailEnabled: Scalars['Boolean']['output'];
objectMultipartUploadSizeLimitBytes: Scalars['Int']['output'];
@@ -3821,8 +4653,9 @@ export type SmartTextEditorValue = {
/** File attachments, if any */
attachments?: Maybe>;
/**
- * The actual (ProseMirror) document representing the text. Can be empty,
- * if there are attachments.
+ * The actual (ProseMirror) document representing the text.
+ * SANITIZATION NOTICE: None of the content inside this document is sanitized on input. Putting this into a TipTap editor
+ * should do all sanitization, but if you plan to render the text any other way you should sanitize it first to avoid XSS attacks.
*/
doc?: Maybe;
/** The type of editor value (comment, blog post etc.) */
@@ -3831,11 +4664,17 @@ export type SmartTextEditorValue = {
version: Scalars['String']['output'];
};
+/** Use SortOrder instead, which has more consistent casing w/ server internals */
export enum SortDirection {
Asc = 'ASC',
Desc = 'DESC'
}
+export enum SortOrder {
+ Asc = 'asc',
+ Desc = 'desc'
+}
+
export type StartFileImportInput = {
/**
* The etag is returned by the blob storage provider in the response body after a successful upload.
@@ -3851,7 +4690,7 @@ export type Stream = {
__typename?: 'Stream';
/**
* All the recent activity on this stream in chronological order
- * @deprecated Part of the old API surface and will be removed in the future.
+ * @deprecated Part of the old API surface and will be removed in the future. Field will be deleted on January 1st, 2026.
*/
activity?: Maybe;
allowPublicComments: Scalars['Boolean']['output'];
@@ -3876,7 +4715,7 @@ export type Stream = {
* ...
* }
* ```
- * @deprecated Part of the old API surface and will be removed in the future.
+ * @deprecated Part of the old API surface and will be removed in the future. Always returns 0.
*/
commentCount: Scalars['Int']['output'];
/** @deprecated Part of the old API surface and will be removed in the future. Use Project.version instead. */
@@ -4087,20 +4926,6 @@ export type Subscription = {
* @deprecated Part of the old API surface and will be removed in the future. Use 'projectModelsUpdated' instead.
*/
branchUpdated?: Maybe;
- /**
- * Subscribe to new comment events. There's two ways to use this subscription:
- * - for a whole stream: do not pass in any resourceIds; this sub will get called whenever a comment (not reply) is added to any of the stream's resources.
- * - for a specific resource/set of resources: pass in a list of resourceIds (commit or object ids); this sub will get called when *any* of the resources provided get a comment.
- * @deprecated Use projectCommentsUpdated
- */
- commentActivity: CommentActivityMessage;
- /**
- * Subscribes to events on a specific comment. Use to find out when:
- * - a top level comment is deleted (trigger a deletion event outside)
- * - a top level comment receives a reply.
- * @deprecated Use projectCommentsUpdated or viewerUserActivityBroadcasted for reply status
- */
- commentThreadActivity: CommentThreadActivityMessage;
/**
* Subscribe to commit created event
* @deprecated Part of the old API surface and will be removed in the future. Use 'projectVersionsUpdated' instead.
@@ -4135,12 +4960,18 @@ export type Subscription = {
* @deprecated Part of the old API surface and will be removed in the future. Use projectPendingModelsUpdated or projectPendingVersionsUpdated instead.
*/
projectFileImportUpdated: ProjectFileImportUpdatedMessage;
+ /** Subscribe to changes to a project's issues */
+ projectIssuesUpdated: ProjectIssuesUpdatedMessage;
/** Subscribe to changes to a project's models. Optionally specify modelIds to track. */
projectModelsUpdated: ProjectModelsUpdatedMessage;
/** Subscribe to changes to a project's pending models */
projectPendingModelsUpdated: ProjectPendingModelsUpdatedMessage;
/** Subscribe to changes to a project's pending versions */
projectPendingVersionsUpdated: ProjectPendingVersionsUpdatedMessage;
+ /** Subscribe to changes to a project's saved view groups. */
+ projectSavedViewGroupsUpdated: ProjectSavedViewGroupsUpdatedMessage;
+ /** Subscribe to changes to a project's saved views. */
+ projectSavedViewsUpdated: ProjectSavedViewsUpdatedMessage;
/** Subscribe to updates to any triggered automations statuses in the project */
projectTriggeredAutomationsStatusUpdated: ProjectTriggeredAutomationsStatusUpdatedMessage;
/** Track updates to a specific project */
@@ -4175,11 +5006,6 @@ export type Subscription = {
* @deprecated Part of the old API surface and will be removed in the future. Use userProjectsUpdated instead.
*/
userStreamRemoved?: Maybe;
- /**
- * Broadcasts "real-time" location data for viewer users.
- * @deprecated Use viewerUserActivityBroadcasted
- */
- userViewerActivity?: Maybe;
/** Track user activities in the viewer relating to the specified resources */
viewerUserActivityBroadcasted: ViewerUserActivityMessage;
/**
@@ -4211,18 +5037,6 @@ export type SubscriptionBranchUpdatedArgs = {
};
-export type SubscriptionCommentActivityArgs = {
- resourceIds?: InputMaybe>>;
- streamId: Scalars['String']['input'];
-};
-
-
-export type SubscriptionCommentThreadActivityArgs = {
- commentId: Scalars['String']['input'];
- streamId: Scalars['String']['input'];
-};
-
-
export type SubscriptionCommitCreatedArgs = {
streamId: Scalars['String']['input'];
};
@@ -4260,6 +5074,13 @@ export type SubscriptionProjectFileImportUpdatedArgs = {
};
+export type SubscriptionProjectIssuesUpdatedArgs = {
+ loadedVersionsOnly?: InputMaybe;
+ projectId: Scalars['ID']['input'];
+ resourceIdString?: InputMaybe;
+};
+
+
export type SubscriptionProjectModelsUpdatedArgs = {
id: Scalars['String']['input'];
modelIds?: InputMaybe>;
@@ -4276,6 +5097,16 @@ export type SubscriptionProjectPendingVersionsUpdatedArgs = {
};
+export type SubscriptionProjectSavedViewGroupsUpdatedArgs = {
+ projectId: Scalars['ID']['input'];
+};
+
+
+export type SubscriptionProjectSavedViewsUpdatedArgs = {
+ projectId: Scalars['ID']['input'];
+};
+
+
export type SubscriptionProjectTriggeredAutomationsStatusUpdatedArgs = {
projectId: Scalars['String']['input'];
};
@@ -4318,12 +5149,6 @@ export type SubscriptionStreamUpdatedArgs = {
};
-export type SubscriptionUserViewerActivityArgs = {
- resourceId: Scalars['String']['input'];
- streamId: Scalars['String']['input'];
-};
-
-
export type SubscriptionViewerUserActivityBroadcastedArgs = {
sessionId?: InputMaybe;
target: ViewerUpdateTrackingTarget;
@@ -4402,6 +5227,35 @@ export type UpdateAutomateFunctionInput = {
workspaceIds?: InputMaybe>;
};
+export type UpdateIssueInput = {
+ assigneeId?: InputMaybe;
+ attachmentBlobIds?: InputMaybe>;
+ description?: InputMaybe;
+ dueDate?: InputMaybe;
+ issueId: Scalars['ID']['input'];
+ /** Supported in workspaced projects only. Use Workspace.issueLabels to get available labels. */
+ labelIds?: InputMaybe>;
+ priority?: InputMaybe