From 4c4a154d313919a6fcd6e5233af59ecb509d5f9f Mon Sep 17 00:00:00 2001
From: Abdul Rahman <81605929+abdulrahmancodes@users.noreply.github.com>
Date: Wed, 22 Jul 2026 14:49:44 +0530
Subject: [PATCH] key-value storage for applications (#23089)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## What
Key-value storage for applications, as proposed in
twentyhq/core-team-issues#2391 — built on the existing `keyValuePair`
entity:
- Nullable `applicationId` relation on `keyValuePair` + a new
`APPLICATION_VARIABLE` type (fast instance command included)
- GraphQL CRUD on the metadata schema (`appKeyValue`, `setAppKeyValue`,
`deleteAppKeyValue`), requiring an `APPLICATION_ACCESS` token —
`applicationId` always comes from the token, never from arguments, so
apps can't touch each other's entries
- `kv.get` / `kv.set` / `kv.delete` helpers in
`twenty-sdk/logic-function`
## Scopes
- **`INSTALL`** (default): entries are private to one workspace install;
arbitrary JSON values
- **`GLOBAL`**: entries are shared across every install of the app, with
claim semantics — the value is always the claiming `workspaceId` and
only that workspace can overwrite or delete the key (guarded writes,
race-safe via insert-if-absent)
Since `applicationId` identifies an install (one row per workspace),
GLOBAL entries are stored under the registration owner workspace's
install so all installs of the same app share one namespace.
The GLOBAL scope is what enables cross-workspace webhook routing: e.g.
the Slack app's `serverRoute` resolver (running in the owner workspace)
can resolve `kv.get('slack:team:' + team_id, { scope: 'GLOBAL' })` to
find the workspace that connected that Slack team — without a workspace
being able to hijack another's mapping.
## Follow-ups
- Wire the Slack assistant PR (#22984) to write the claim at connect
time and read it in the events resolver
- `kv.*` access from front components
---
.../src/metadata/generated/schema.graphql | 515 +-
.../src/metadata/generated/schema.ts | 1180 ++---
.../src/metadata/generated/types.ts | 4285 +++++++++--------
.../extend/apps/logic/key-value-store.mdx | 194 +-
.../developers/extend/apps/logic/overview.mdx | 3 +
.../src/generated-metadata/graphql.ts | 39 +
.../src/sdk/logic-function/index.ts | 3 +
.../key-value/__tests__/kv.spec.ts | 131 +
.../src/sdk/logic-function/key-value/kv.ts | 92 +
...18-add-application-id-to-key-value-pair.ts | 97 +
.../instance-commands.constant.ts | 2 +
.../application-exception-filter.ts | 1 +
.../application-key-value.module.ts | 21 +
.../application-key-value.resolver.ts | 81 +
.../dtos/app-key-value.dto.ts | 18 +
.../dtos/set-app-key-value.input.ts | 26 +
.../enums/app-key-value-scope.enum.ts | 12 +
.../services/application-key-value.service.ts | 248 +
.../application-rest-api-exception.filter.ts | 1 +
.../application/application.exception.ts | 3 +
.../key-value-pair/key-value-pair.entity.ts | 39 +-
.../key-value-pair.service.spec.ts | 57 +-
.../key-value-pair/key-value-pair.service.ts | 35 +-
.../__tests__/config-storage.service.spec.ts | 2 +
.../metadata-engine.module.ts | 2 +
.../app-key-value.integration-spec.ts | 230 +
.../src/application/appKeyValueScopeType.ts | 1 +
.../src/application/appKeyValueType.ts | 7 +
.../twenty-shared/src/application/index.ts | 2 +
29 files changed, 4249 insertions(+), 3078 deletions(-)
create mode 100644 packages/twenty-sdk/src/sdk/logic-function/key-value/__tests__/kv.spec.ts
create mode 100644 packages/twenty-sdk/src/sdk/logic-function/key-value/kv.ts
create mode 100644 packages/twenty-server/src/database/commands/upgrade-version-command/2-23/2-23-instance-command-fast-1784659343818-add-application-id-to-key-value-pair.ts
create mode 100644 packages/twenty-server/src/engine/core-modules/application/application-key-value/application-key-value.module.ts
create mode 100644 packages/twenty-server/src/engine/core-modules/application/application-key-value/application-key-value.resolver.ts
create mode 100644 packages/twenty-server/src/engine/core-modules/application/application-key-value/dtos/app-key-value.dto.ts
create mode 100644 packages/twenty-server/src/engine/core-modules/application/application-key-value/dtos/set-app-key-value.input.ts
create mode 100644 packages/twenty-server/src/engine/core-modules/application/application-key-value/enums/app-key-value-scope.enum.ts
create mode 100644 packages/twenty-server/src/engine/core-modules/application/application-key-value/services/application-key-value.service.ts
create mode 100644 packages/twenty-server/test/integration/metadata/suites/application/app-key-value.integration-spec.ts
create mode 100644 packages/twenty-shared/src/application/appKeyValueScopeType.ts
create mode 100644 packages/twenty-shared/src/application/appKeyValueType.ts
diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql
index 0529fedc91..36b19284e8 100644
--- a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql
+++ b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql
@@ -5,24 +5,6 @@ interface BillingProductDTO {
metadata: BillingProductMetadata!
}
-type ApiKey {
- id: UUID!
- name: String!
- expiresAt: DateTime!
- revokedAt: DateTime
- createdAt: DateTime!
- updatedAt: DateTime!
- role: Role!
-}
-
-"""A UUID scalar type"""
-scalar UUID
-
-"""
-A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date-time format.
-"""
-scalar DateTime
-
type ApplicationRegistrationVariable {
id: UUID!
key: String!
@@ -36,30 +18,34 @@ type ApplicationRegistrationVariable {
updatedAt: DateTime!
}
+"""A UUID scalar type"""
+scalar UUID
+
"""
The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
"""
scalar JSON
-type ApplicationRegistration {
+"""
+A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date-time format.
+"""
+scalar DateTime
+
+type ApiKey {
id: UUID!
- universalIdentifier: String!
name: String!
- oAuthClientId: String!
- oAuthRedirectUris: [String!]!
- oAuthScopes: [String!]!
- ownerWorkspaceId: UUID
- sourceType: ApplicationRegistrationSourceType!
- sourcePackage: String
- latestAvailableVersion: String
- isListed: Boolean!
- isVetted: Boolean!
- isPreInstalled: Boolean!
+ expiresAt: DateTime!
+ revokedAt: DateTime
createdAt: DateTime!
updatedAt: DateTime!
- isConfigured: Boolean!
+ role: Role!
+}
+
+type ApplicationRegistrationSummary {
+ id: UUID!
+ latestAvailableVersion: String
+ sourceType: ApplicationRegistrationSourceType!
logoUrl: String
- galleryImagesUrls: [String!]!
}
enum ApplicationRegistrationSourceType {
@@ -69,156 +55,14 @@ enum ApplicationRegistrationSourceType {
OAUTH_ONLY
}
-type TwoFactorAuthenticationMethodSummary {
- twoFactorAuthenticationMethodId: UUID!
- status: String!
- strategy: String!
-}
-
-type RowLevelPermissionPredicateGroup {
- id: String!
- parentRowLevelPermissionPredicateGroupId: String
- logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator!
- positionInRowLevelPermissionPredicateGroup: Float
- roleId: String!
- objectMetadataId: String!
-}
-
-enum RowLevelPermissionPredicateGroupLogicalOperator {
- AND
- OR
-}
-
-type RowLevelPermissionPredicate {
- id: String!
- fieldMetadataId: String!
- objectMetadataId: String!
- operand: RowLevelPermissionPredicateOperand!
- subFieldName: String
- workspaceMemberFieldMetadataId: String
- workspaceMemberSubFieldName: String
- rowLevelPermissionPredicateGroupId: String
- positionInRowLevelPermissionPredicateGroup: Float
- roleId: String!
- value: JSON
-}
-
-enum RowLevelPermissionPredicateOperand {
- IS
- IS_NOT_NULL
- IS_NOT
- LESS_THAN_OR_EQUAL
- GREATER_THAN_OR_EQUAL
- IS_BEFORE
- IS_AFTER
- CONTAINS
- DOES_NOT_CONTAIN
- IS_EMPTY
- IS_NOT_EMPTY
- IS_RELATIVE
- IS_IN_PAST
- IS_IN_FUTURE
- IS_TODAY
- VECTOR_SEARCH
-}
-
-type ObjectPermission {
- objectMetadataId: UUID!
- canReadObjectRecords: Boolean
- canUpdateObjectRecords: Boolean
- canSoftDeleteObjectRecords: Boolean
- canDestroyObjectRecords: Boolean
- restrictedFields: JSON
- rowLevelPermissionPredicates: [RowLevelPermissionPredicate!]
- rowLevelPermissionPredicateGroups: [RowLevelPermissionPredicateGroup!]
-}
-
-type UserWorkspace {
+type ApplicationVariable {
id: UUID!
- user: User!
- userId: UUID!
- locale: String!
- createdAt: DateTime!
- updatedAt: DateTime!
- deletedAt: DateTime
- permissionFlags: [PermissionFlagType!]
- objectPermissions: [ObjectPermission!]
- objectsPermissions: [ObjectPermission!]
- twoFactorAuthenticationMethodSummary: [TwoFactorAuthenticationMethodSummary!]
-}
-
-enum PermissionFlagType {
- API_KEYS_AND_WEBHOOKS
- WORKSPACE
- WORKSPACE_MEMBERS
- ROLES
- DATA_MODEL
- SECURITY
- WORKFLOWS
- IMPERSONATE
- SSO_BYPASS
- APPLICATIONS
- MARKETPLACE_APPS
- LAYOUTS
- BILLING
- AI_SETTINGS
- AI
- VIEWS
- UPLOAD_FILE
- DOWNLOAD_FILE
- SEND_EMAIL_TOOL
- CREATE_CALENDAR_EVENT_TOOL
- HTTP_REQUEST_TOOL
- CODE_INTERPRETER_TOOL
- IMPORT_CSV
- EXPORT_CSV
- CONNECTED_ACCOUNTS
- PROFILE_INFORMATION
-}
-
-type FullName {
- firstName: String!
- lastName: String!
-}
-
-type WorkspaceMember {
- id: UUID!
- name: FullName!
- userEmail: String!
- colorScheme: String!
- avatarUrl: String
- locale: String
- calendarStartDay: Int
- timeZone: String
- dateFormat: WorkspaceMemberDateFormatEnum
- timeFormat: WorkspaceMemberTimeFormatEnum
- roles: [Role!]
- userWorkspaceId: UUID
- numberFormat: WorkspaceMemberNumberFormatEnum
-}
-
-"""Date format as Month first, Day first, Year first or system as default"""
-enum WorkspaceMemberDateFormatEnum {
- SYSTEM
- MONTH_FIRST
- DAY_FIRST
- YEAR_FIRST
-}
-
-"""Time time as Military, Standard or system as default"""
-enum WorkspaceMemberTimeFormatEnum {
- SYSTEM
- HOUR_12
- HOUR_24
-}
-
-"""Number format for displaying numbers"""
-enum WorkspaceMemberNumberFormatEnum {
- SYSTEM
- COMMAS_AND_DOT
- SPACES_AND_COMMA
- DOTS_AND_COMMA
- APOSTROPHE_AND_DOT
+ key: String!
+ value: String!
+ description: String!
+ isSecret: Boolean!
+ type: String!
+ options: JSON
}
type Agent {
@@ -239,71 +83,6 @@ type Agent {
evaluationInputs: [String!]!
}
-type FieldPermission {
- id: UUID!
- objectMetadataId: UUID!
- fieldMetadataId: UUID!
- roleId: UUID!
- canReadFieldValue: Boolean
- canUpdateFieldValue: Boolean
-}
-
-type RolePermissionFlag {
- id: UUID!
- roleId: UUID!
- flag: String!
-}
-
-type ApiKeyForRole {
- id: UUID!
- name: String!
- expiresAt: DateTime!
- revokedAt: DateTime
-}
-
-type Role {
- id: UUID!
- universalIdentifier: UUID
- label: String!
- description: String
- icon: String
- isEditable: Boolean!
- canBeAssignedToUsers: Boolean!
- canBeAssignedToAgents: Boolean!
- canBeAssignedToApiKeys: Boolean!
- workspaceMembers: [WorkspaceMember!]!
- agents: [Agent!]!
- apiKeys: [ApiKeyForRole!]!
- canUpdateAllSettings: Boolean!
- canAccessAllTools: Boolean!
- canReadAllObjectRecords: Boolean!
- canUpdateAllObjectRecords: Boolean!
- canSoftDeleteAllObjectRecords: Boolean!
- canDestroyAllObjectRecords: Boolean!
- permissionFlags: [RolePermissionFlag!]
- objectPermissions: [ObjectPermission!]
- fieldPermissions: [FieldPermission!]
- rowLevelPermissionPredicates: [RowLevelPermissionPredicate!]
- rowLevelPermissionPredicateGroups: [RowLevelPermissionPredicateGroup!]
-}
-
-type ApplicationRegistrationSummary {
- id: UUID!
- latestAvailableVersion: String
- sourceType: ApplicationRegistrationSourceType!
- logoUrl: String
-}
-
-type ApplicationVariable {
- id: UUID!
- key: String!
- value: String!
- description: String!
- isSecret: Boolean!
- type: String!
- options: JSON
-}
-
type AuthToken {
token: String!
expiresAt: DateTime!
@@ -645,6 +424,157 @@ input IndexFilter {
isCustom: BooleanFieldComparison
}
+type FullName {
+ firstName: String!
+ lastName: String!
+}
+
+type WorkspaceMember {
+ id: UUID!
+ name: FullName!
+ userEmail: String!
+ colorScheme: String!
+ avatarUrl: String
+ locale: String
+ calendarStartDay: Int
+ timeZone: String
+ dateFormat: WorkspaceMemberDateFormatEnum
+ timeFormat: WorkspaceMemberTimeFormatEnum
+ roles: [Role!]
+ userWorkspaceId: UUID
+ numberFormat: WorkspaceMemberNumberFormatEnum
+}
+
+"""Date format as Month first, Day first, Year first or system as default"""
+enum WorkspaceMemberDateFormatEnum {
+ SYSTEM
+ MONTH_FIRST
+ DAY_FIRST
+ YEAR_FIRST
+}
+
+"""Time time as Military, Standard or system as default"""
+enum WorkspaceMemberTimeFormatEnum {
+ SYSTEM
+ HOUR_12
+ HOUR_24
+}
+
+"""Number format for displaying numbers"""
+enum WorkspaceMemberNumberFormatEnum {
+ SYSTEM
+ COMMAS_AND_DOT
+ SPACES_AND_COMMA
+ DOTS_AND_COMMA
+ APOSTROPHE_AND_DOT
+}
+
+type FieldPermission {
+ id: UUID!
+ objectMetadataId: UUID!
+ fieldMetadataId: UUID!
+ roleId: UUID!
+ canReadFieldValue: Boolean
+ canUpdateFieldValue: Boolean
+}
+
+type RowLevelPermissionPredicateGroup {
+ id: String!
+ parentRowLevelPermissionPredicateGroupId: String
+ logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator!
+ positionInRowLevelPermissionPredicateGroup: Float
+ roleId: String!
+ objectMetadataId: String!
+}
+
+enum RowLevelPermissionPredicateGroupLogicalOperator {
+ AND
+ OR
+}
+
+type RowLevelPermissionPredicate {
+ id: String!
+ fieldMetadataId: String!
+ objectMetadataId: String!
+ operand: RowLevelPermissionPredicateOperand!
+ subFieldName: String
+ workspaceMemberFieldMetadataId: String
+ workspaceMemberSubFieldName: String
+ rowLevelPermissionPredicateGroupId: String
+ positionInRowLevelPermissionPredicateGroup: Float
+ roleId: String!
+ value: JSON
+}
+
+enum RowLevelPermissionPredicateOperand {
+ IS
+ IS_NOT_NULL
+ IS_NOT
+ LESS_THAN_OR_EQUAL
+ GREATER_THAN_OR_EQUAL
+ IS_BEFORE
+ IS_AFTER
+ CONTAINS
+ DOES_NOT_CONTAIN
+ IS_EMPTY
+ IS_NOT_EMPTY
+ IS_RELATIVE
+ IS_IN_PAST
+ IS_IN_FUTURE
+ IS_TODAY
+ VECTOR_SEARCH
+}
+
+type ObjectPermission {
+ objectMetadataId: UUID!
+ canReadObjectRecords: Boolean
+ canUpdateObjectRecords: Boolean
+ canSoftDeleteObjectRecords: Boolean
+ canDestroyObjectRecords: Boolean
+ restrictedFields: JSON
+ rowLevelPermissionPredicates: [RowLevelPermissionPredicate!]
+ rowLevelPermissionPredicateGroups: [RowLevelPermissionPredicateGroup!]
+}
+
+type RolePermissionFlag {
+ id: UUID!
+ roleId: UUID!
+ flag: String!
+}
+
+type ApiKeyForRole {
+ id: UUID!
+ name: String!
+ expiresAt: DateTime!
+ revokedAt: DateTime
+}
+
+type Role {
+ id: UUID!
+ universalIdentifier: UUID
+ label: String!
+ description: String
+ icon: String
+ isEditable: Boolean!
+ canBeAssignedToUsers: Boolean!
+ canBeAssignedToAgents: Boolean!
+ canBeAssignedToApiKeys: Boolean!
+ workspaceMembers: [WorkspaceMember!]!
+ agents: [Agent!]!
+ apiKeys: [ApiKeyForRole!]!
+ canUpdateAllSettings: Boolean!
+ canAccessAllTools: Boolean!
+ canReadAllObjectRecords: Boolean!
+ canUpdateAllObjectRecords: Boolean!
+ canSoftDeleteAllObjectRecords: Boolean!
+ canDestroyAllObjectRecords: Boolean!
+ permissionFlags: [RolePermissionFlag!]
+ objectPermissions: [ObjectPermission!]
+ fieldPermissions: [FieldPermission!]
+ rowLevelPermissionPredicates: [RowLevelPermissionPredicate!]
+ rowLevelPermissionPredicateGroups: [RowLevelPermissionPredicateGroup!]
+}
+
type Application {
id: UUID!
name: String!
@@ -674,6 +604,55 @@ type Application {
logoUrl: String
}
+type TwoFactorAuthenticationMethodSummary {
+ twoFactorAuthenticationMethodId: UUID!
+ status: String!
+ strategy: String!
+}
+
+type UserWorkspace {
+ id: UUID!
+ user: User!
+ userId: UUID!
+ locale: String!
+ createdAt: DateTime!
+ updatedAt: DateTime!
+ deletedAt: DateTime
+ permissionFlags: [PermissionFlagType!]
+ objectPermissions: [ObjectPermission!]
+ objectsPermissions: [ObjectPermission!]
+ twoFactorAuthenticationMethodSummary: [TwoFactorAuthenticationMethodSummary!]
+}
+
+enum PermissionFlagType {
+ API_KEYS_AND_WEBHOOKS
+ WORKSPACE
+ WORKSPACE_MEMBERS
+ ROLES
+ DATA_MODEL
+ SECURITY
+ WORKFLOWS
+ IMPERSONATE
+ SSO_BYPASS
+ APPLICATIONS
+ MARKETPLACE_APPS
+ LAYOUTS
+ BILLING
+ AI_SETTINGS
+ AI
+ VIEWS
+ UPLOAD_FILE
+ DOWNLOAD_FILE
+ SEND_EMAIL_TOOL
+ CREATE_CALENDAR_EVENT_TOOL
+ HTTP_REQUEST_TOOL
+ CODE_INTERPRETER_TOOL
+ IMPORT_CSV
+ EXPORT_CSV
+ CONNECTED_ACCOUNTS
+ PROFILE_INFORMATION
+}
+
type ViewField {
id: UUID!
fieldMetadataId: UUID!
@@ -982,6 +961,27 @@ The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](
"""
scalar JSONObject
+type ApplicationRegistration {
+ id: UUID!
+ universalIdentifier: String!
+ name: String!
+ oAuthClientId: String!
+ oAuthRedirectUris: [String!]!
+ oAuthScopes: [String!]!
+ ownerWorkspaceId: UUID
+ sourceType: ApplicationRegistrationSourceType!
+ sourcePackage: String
+ latestAvailableVersion: String
+ isListed: Boolean!
+ isVetted: Boolean!
+ isPreInstalled: Boolean!
+ createdAt: DateTime!
+ updatedAt: DateTime!
+ isConfigured: Boolean!
+ logoUrl: String
+ galleryImagesUrls: [String!]!
+}
+
type SdkClientChecksums {
core: String
metadata: String!
@@ -2918,6 +2918,20 @@ type WorkspaceAiStats {
toolsCount: Int!
}
+type AppKeyValue {
+ key: String!
+ value: JSON
+ scope: AppKeyValueScope!
+}
+
+"""
+WORKSPACE entries are private to one workspace install of the application. SERVER entries are shared across every install: the value is always the claiming workspaceId and only that workspace can overwrite or delete the key.
+"""
+enum AppKeyValueScope {
+ WORKSPACE
+ SERVER
+}
+
type CalendarChannel {
id: UUID!
handle: String!
@@ -3153,6 +3167,7 @@ type Query {
myMessageFolders(messageChannelId: UUID): [MessageFolder!]!
myCalendarChannels(connectedAccountId: UUID): [CalendarChannel!]!
minimalMetadata: MinimalMetadata!
+ appKeyValue(key: String!, scope: AppKeyValueScope = WORKSPACE): AppKeyValue
appConnections(filter: ListAppConnectionsInput): [AppConnection!]!
appConnection(id: ID!): AppConnection!
findWorkspaceAiStats: WorkspaceAiStats!
@@ -3443,6 +3458,8 @@ type Mutation {
updateMessageFolder(input: UpdateMessageFolderInput!): MessageFolder!
updateMessageFolders(input: UpdateMessageFoldersInput!): [MessageFolder!]!
updateCalendarChannel(input: UpdateCalendarChannelInput!): CalendarChannel!
+ setAppKeyValue(input: SetAppKeyValueInput!): AppKeyValue!
+ deleteAppKeyValue(key: String!, scope: AppKeyValueScope = WORKSPACE): Boolean!
createChatThread: AgentChatThread!
sendChatMessage(threadId: UUID!, text: String!, messageId: UUID!, browsingContext: JSON, modelId: String, fileAttachments: [FileAttachmentInput!]): SendChatMessageResult!
retryChatMessage(threadId: UUID!, modelId: String): SendChatMessageResult!
@@ -4572,6 +4589,12 @@ input UpdateCalendarChannelInputUpdates {
isSyncEnabled: Boolean
}
+input SetAppKeyValueInput {
+ key: String!
+ value: JSON
+ scope: AppKeyValueScope = WORKSPACE
+}
+
input FileAttachmentInput {
id: UUID!
filename: String!
diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.ts b/packages/twenty-client-sdk/src/metadata/generated/schema.ts
index 59fb478c1b..c80777afeb 100644
--- a/packages/twenty-client-sdk/src/metadata/generated/schema.ts
+++ b/packages/twenty-client-sdk/src/metadata/generated/schema.ts
@@ -1,10 +1,10 @@
// @ts-nocheck
export type Scalars = {
String: string,
- UUID: string,
- DateTime: string,
Boolean: boolean,
+ UUID: string,
JSON: Record,
+ DateTime: string,
Float: number,
Int: number,
ConnectionCursor: any,
@@ -15,17 +15,6 @@ export type Scalars = {
export type BillingProductDTO = (BillingLicensedProduct | BillingMeteredProduct) & { __isUnion?: true }
-export interface ApiKey {
- id: Scalars['UUID']
- name: Scalars['String']
- expiresAt: Scalars['DateTime']
- revokedAt?: Scalars['DateTime']
- createdAt: Scalars['DateTime']
- updatedAt: Scalars['DateTime']
- role: Role
- __typename: 'ApiKey'
-}
-
export interface ApplicationRegistrationVariable {
id: Scalars['UUID']
key: Scalars['String']
@@ -40,130 +29,38 @@ export interface ApplicationRegistrationVariable {
__typename: 'ApplicationRegistrationVariable'
}
-export interface ApplicationRegistration {
+export interface ApiKey {
id: Scalars['UUID']
- universalIdentifier: Scalars['String']
name: Scalars['String']
- oAuthClientId: Scalars['String']
- oAuthRedirectUris: Scalars['String'][]
- oAuthScopes: Scalars['String'][]
- ownerWorkspaceId?: Scalars['UUID']
- sourceType: ApplicationRegistrationSourceType
- sourcePackage?: Scalars['String']
- latestAvailableVersion?: Scalars['String']
- isListed: Scalars['Boolean']
- isVetted: Scalars['Boolean']
- isPreInstalled: Scalars['Boolean']
+ expiresAt: Scalars['DateTime']
+ revokedAt?: Scalars['DateTime']
createdAt: Scalars['DateTime']
updatedAt: Scalars['DateTime']
- isConfigured: Scalars['Boolean']
+ role: Role
+ __typename: 'ApiKey'
+}
+
+export interface ApplicationRegistrationSummary {
+ id: Scalars['UUID']
+ latestAvailableVersion?: Scalars['String']
+ sourceType: ApplicationRegistrationSourceType
logoUrl?: Scalars['String']
- galleryImagesUrls: Scalars['String'][]
- __typename: 'ApplicationRegistration'
+ __typename: 'ApplicationRegistrationSummary'
}
export type ApplicationRegistrationSourceType = 'NPM' | 'TARBALL' | 'LOCAL' | 'OAUTH_ONLY'
-export interface TwoFactorAuthenticationMethodSummary {
- twoFactorAuthenticationMethodId: Scalars['UUID']
- status: Scalars['String']
- strategy: Scalars['String']
- __typename: 'TwoFactorAuthenticationMethodSummary'
-}
-
-export interface RowLevelPermissionPredicateGroup {
- id: Scalars['String']
- parentRowLevelPermissionPredicateGroupId?: Scalars['String']
- logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator
- positionInRowLevelPermissionPredicateGroup?: Scalars['Float']
- roleId: Scalars['String']
- objectMetadataId: Scalars['String']
- __typename: 'RowLevelPermissionPredicateGroup'
-}
-
-export type RowLevelPermissionPredicateGroupLogicalOperator = 'AND' | 'OR'
-
-export interface RowLevelPermissionPredicate {
- id: Scalars['String']
- fieldMetadataId: Scalars['String']
- objectMetadataId: Scalars['String']
- operand: RowLevelPermissionPredicateOperand
- subFieldName?: Scalars['String']
- workspaceMemberFieldMetadataId?: Scalars['String']
- workspaceMemberSubFieldName?: Scalars['String']
- rowLevelPermissionPredicateGroupId?: Scalars['String']
- positionInRowLevelPermissionPredicateGroup?: Scalars['Float']
- roleId: Scalars['String']
- value?: Scalars['JSON']
- __typename: 'RowLevelPermissionPredicate'
-}
-
-export type RowLevelPermissionPredicateOperand = 'IS' | 'IS_NOT_NULL' | 'IS_NOT' | 'LESS_THAN_OR_EQUAL' | 'GREATER_THAN_OR_EQUAL' | 'IS_BEFORE' | 'IS_AFTER' | 'CONTAINS' | 'DOES_NOT_CONTAIN' | 'IS_EMPTY' | 'IS_NOT_EMPTY' | 'IS_RELATIVE' | 'IS_IN_PAST' | 'IS_IN_FUTURE' | 'IS_TODAY' | 'VECTOR_SEARCH'
-
-export interface ObjectPermission {
- objectMetadataId: Scalars['UUID']
- canReadObjectRecords?: Scalars['Boolean']
- canUpdateObjectRecords?: Scalars['Boolean']
- canSoftDeleteObjectRecords?: Scalars['Boolean']
- canDestroyObjectRecords?: Scalars['Boolean']
- restrictedFields?: Scalars['JSON']
- rowLevelPermissionPredicates?: RowLevelPermissionPredicate[]
- rowLevelPermissionPredicateGroups?: RowLevelPermissionPredicateGroup[]
- __typename: 'ObjectPermission'
-}
-
-export interface UserWorkspace {
+export interface ApplicationVariable {
id: Scalars['UUID']
- user: User
- userId: Scalars['UUID']
- locale: Scalars['String']
- createdAt: Scalars['DateTime']
- updatedAt: Scalars['DateTime']
- deletedAt?: Scalars['DateTime']
- permissionFlags?: PermissionFlagType[]
- objectPermissions?: ObjectPermission[]
- objectsPermissions?: ObjectPermission[]
- twoFactorAuthenticationMethodSummary?: TwoFactorAuthenticationMethodSummary[]
- __typename: 'UserWorkspace'
+ key: Scalars['String']
+ value: Scalars['String']
+ description: Scalars['String']
+ isSecret: Scalars['Boolean']
+ type: Scalars['String']
+ options?: Scalars['JSON']
+ __typename: 'ApplicationVariable'
}
-export type PermissionFlagType = 'API_KEYS_AND_WEBHOOKS' | 'WORKSPACE' | 'WORKSPACE_MEMBERS' | 'ROLES' | 'DATA_MODEL' | 'SECURITY' | 'WORKFLOWS' | 'IMPERSONATE' | 'SSO_BYPASS' | 'APPLICATIONS' | 'MARKETPLACE_APPS' | 'LAYOUTS' | 'BILLING' | 'AI_SETTINGS' | 'AI' | 'VIEWS' | 'UPLOAD_FILE' | 'DOWNLOAD_FILE' | 'SEND_EMAIL_TOOL' | 'CREATE_CALENDAR_EVENT_TOOL' | 'HTTP_REQUEST_TOOL' | 'CODE_INTERPRETER_TOOL' | 'IMPORT_CSV' | 'EXPORT_CSV' | 'CONNECTED_ACCOUNTS' | 'PROFILE_INFORMATION'
-
-export interface FullName {
- firstName: Scalars['String']
- lastName: Scalars['String']
- __typename: 'FullName'
-}
-
-export interface WorkspaceMember {
- id: Scalars['UUID']
- name: FullName
- userEmail: Scalars['String']
- colorScheme: Scalars['String']
- avatarUrl?: Scalars['String']
- locale?: Scalars['String']
- calendarStartDay?: Scalars['Int']
- timeZone?: Scalars['String']
- dateFormat?: WorkspaceMemberDateFormatEnum
- timeFormat?: WorkspaceMemberTimeFormatEnum
- roles?: Role[]
- userWorkspaceId?: Scalars['UUID']
- numberFormat?: WorkspaceMemberNumberFormatEnum
- __typename: 'WorkspaceMember'
-}
-
-
-/** Date format as Month first, Day first, Year first or system as default */
-export type WorkspaceMemberDateFormatEnum = 'SYSTEM' | 'MONTH_FIRST' | 'DAY_FIRST' | 'YEAR_FIRST'
-
-
-/** Time time as Military, Standard or system as default */
-export type WorkspaceMemberTimeFormatEnum = 'SYSTEM' | 'HOUR_12' | 'HOUR_24'
-
-
-/** Number format for displaying numbers */
-export type WorkspaceMemberNumberFormatEnum = 'SYSTEM' | 'COMMAS_AND_DOT' | 'SPACES_AND_COMMA' | 'DOTS_AND_COMMA' | 'APOSTROPHE_AND_DOT'
-
export interface Agent {
id: Scalars['UUID']
name: Scalars['String']
@@ -183,77 +80,6 @@ export interface Agent {
__typename: 'Agent'
}
-export interface FieldPermission {
- id: Scalars['UUID']
- objectMetadataId: Scalars['UUID']
- fieldMetadataId: Scalars['UUID']
- roleId: Scalars['UUID']
- canReadFieldValue?: Scalars['Boolean']
- canUpdateFieldValue?: Scalars['Boolean']
- __typename: 'FieldPermission'
-}
-
-export interface RolePermissionFlag {
- id: Scalars['UUID']
- roleId: Scalars['UUID']
- flag: Scalars['String']
- __typename: 'RolePermissionFlag'
-}
-
-export interface ApiKeyForRole {
- id: Scalars['UUID']
- name: Scalars['String']
- expiresAt: Scalars['DateTime']
- revokedAt?: Scalars['DateTime']
- __typename: 'ApiKeyForRole'
-}
-
-export interface Role {
- id: Scalars['UUID']
- universalIdentifier?: Scalars['UUID']
- label: Scalars['String']
- description?: Scalars['String']
- icon?: Scalars['String']
- isEditable: Scalars['Boolean']
- canBeAssignedToUsers: Scalars['Boolean']
- canBeAssignedToAgents: Scalars['Boolean']
- canBeAssignedToApiKeys: Scalars['Boolean']
- workspaceMembers: WorkspaceMember[]
- agents: Agent[]
- apiKeys: ApiKeyForRole[]
- canUpdateAllSettings: Scalars['Boolean']
- canAccessAllTools: Scalars['Boolean']
- canReadAllObjectRecords: Scalars['Boolean']
- canUpdateAllObjectRecords: Scalars['Boolean']
- canSoftDeleteAllObjectRecords: Scalars['Boolean']
- canDestroyAllObjectRecords: Scalars['Boolean']
- permissionFlags?: RolePermissionFlag[]
- objectPermissions?: ObjectPermission[]
- fieldPermissions?: FieldPermission[]
- rowLevelPermissionPredicates?: RowLevelPermissionPredicate[]
- rowLevelPermissionPredicateGroups?: RowLevelPermissionPredicateGroup[]
- __typename: 'Role'
-}
-
-export interface ApplicationRegistrationSummary {
- id: Scalars['UUID']
- latestAvailableVersion?: Scalars['String']
- sourceType: ApplicationRegistrationSourceType
- logoUrl?: Scalars['String']
- __typename: 'ApplicationRegistrationSummary'
-}
-
-export interface ApplicationVariable {
- id: Scalars['UUID']
- key: Scalars['String']
- value: Scalars['String']
- description: Scalars['String']
- isSecret: Scalars['Boolean']
- type: Scalars['String']
- options?: Scalars['JSON']
- __typename: 'ApplicationVariable'
-}
-
export interface AuthToken {
token: Scalars['String']
expiresAt: Scalars['DateTime']
@@ -434,6 +260,134 @@ export interface Object {
__typename: 'Object'
}
+export interface FullName {
+ firstName: Scalars['String']
+ lastName: Scalars['String']
+ __typename: 'FullName'
+}
+
+export interface WorkspaceMember {
+ id: Scalars['UUID']
+ name: FullName
+ userEmail: Scalars['String']
+ colorScheme: Scalars['String']
+ avatarUrl?: Scalars['String']
+ locale?: Scalars['String']
+ calendarStartDay?: Scalars['Int']
+ timeZone?: Scalars['String']
+ dateFormat?: WorkspaceMemberDateFormatEnum
+ timeFormat?: WorkspaceMemberTimeFormatEnum
+ roles?: Role[]
+ userWorkspaceId?: Scalars['UUID']
+ numberFormat?: WorkspaceMemberNumberFormatEnum
+ __typename: 'WorkspaceMember'
+}
+
+
+/** Date format as Month first, Day first, Year first or system as default */
+export type WorkspaceMemberDateFormatEnum = 'SYSTEM' | 'MONTH_FIRST' | 'DAY_FIRST' | 'YEAR_FIRST'
+
+
+/** Time time as Military, Standard or system as default */
+export type WorkspaceMemberTimeFormatEnum = 'SYSTEM' | 'HOUR_12' | 'HOUR_24'
+
+
+/** Number format for displaying numbers */
+export type WorkspaceMemberNumberFormatEnum = 'SYSTEM' | 'COMMAS_AND_DOT' | 'SPACES_AND_COMMA' | 'DOTS_AND_COMMA' | 'APOSTROPHE_AND_DOT'
+
+export interface FieldPermission {
+ id: Scalars['UUID']
+ objectMetadataId: Scalars['UUID']
+ fieldMetadataId: Scalars['UUID']
+ roleId: Scalars['UUID']
+ canReadFieldValue?: Scalars['Boolean']
+ canUpdateFieldValue?: Scalars['Boolean']
+ __typename: 'FieldPermission'
+}
+
+export interface RowLevelPermissionPredicateGroup {
+ id: Scalars['String']
+ parentRowLevelPermissionPredicateGroupId?: Scalars['String']
+ logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator
+ positionInRowLevelPermissionPredicateGroup?: Scalars['Float']
+ roleId: Scalars['String']
+ objectMetadataId: Scalars['String']
+ __typename: 'RowLevelPermissionPredicateGroup'
+}
+
+export type RowLevelPermissionPredicateGroupLogicalOperator = 'AND' | 'OR'
+
+export interface RowLevelPermissionPredicate {
+ id: Scalars['String']
+ fieldMetadataId: Scalars['String']
+ objectMetadataId: Scalars['String']
+ operand: RowLevelPermissionPredicateOperand
+ subFieldName?: Scalars['String']
+ workspaceMemberFieldMetadataId?: Scalars['String']
+ workspaceMemberSubFieldName?: Scalars['String']
+ rowLevelPermissionPredicateGroupId?: Scalars['String']
+ positionInRowLevelPermissionPredicateGroup?: Scalars['Float']
+ roleId: Scalars['String']
+ value?: Scalars['JSON']
+ __typename: 'RowLevelPermissionPredicate'
+}
+
+export type RowLevelPermissionPredicateOperand = 'IS' | 'IS_NOT_NULL' | 'IS_NOT' | 'LESS_THAN_OR_EQUAL' | 'GREATER_THAN_OR_EQUAL' | 'IS_BEFORE' | 'IS_AFTER' | 'CONTAINS' | 'DOES_NOT_CONTAIN' | 'IS_EMPTY' | 'IS_NOT_EMPTY' | 'IS_RELATIVE' | 'IS_IN_PAST' | 'IS_IN_FUTURE' | 'IS_TODAY' | 'VECTOR_SEARCH'
+
+export interface ObjectPermission {
+ objectMetadataId: Scalars['UUID']
+ canReadObjectRecords?: Scalars['Boolean']
+ canUpdateObjectRecords?: Scalars['Boolean']
+ canSoftDeleteObjectRecords?: Scalars['Boolean']
+ canDestroyObjectRecords?: Scalars['Boolean']
+ restrictedFields?: Scalars['JSON']
+ rowLevelPermissionPredicates?: RowLevelPermissionPredicate[]
+ rowLevelPermissionPredicateGroups?: RowLevelPermissionPredicateGroup[]
+ __typename: 'ObjectPermission'
+}
+
+export interface RolePermissionFlag {
+ id: Scalars['UUID']
+ roleId: Scalars['UUID']
+ flag: Scalars['String']
+ __typename: 'RolePermissionFlag'
+}
+
+export interface ApiKeyForRole {
+ id: Scalars['UUID']
+ name: Scalars['String']
+ expiresAt: Scalars['DateTime']
+ revokedAt?: Scalars['DateTime']
+ __typename: 'ApiKeyForRole'
+}
+
+export interface Role {
+ id: Scalars['UUID']
+ universalIdentifier?: Scalars['UUID']
+ label: Scalars['String']
+ description?: Scalars['String']
+ icon?: Scalars['String']
+ isEditable: Scalars['Boolean']
+ canBeAssignedToUsers: Scalars['Boolean']
+ canBeAssignedToAgents: Scalars['Boolean']
+ canBeAssignedToApiKeys: Scalars['Boolean']
+ workspaceMembers: WorkspaceMember[]
+ agents: Agent[]
+ apiKeys: ApiKeyForRole[]
+ canUpdateAllSettings: Scalars['Boolean']
+ canAccessAllTools: Scalars['Boolean']
+ canReadAllObjectRecords: Scalars['Boolean']
+ canUpdateAllObjectRecords: Scalars['Boolean']
+ canSoftDeleteAllObjectRecords: Scalars['Boolean']
+ canDestroyAllObjectRecords: Scalars['Boolean']
+ permissionFlags?: RolePermissionFlag[]
+ objectPermissions?: ObjectPermission[]
+ fieldPermissions?: FieldPermission[]
+ rowLevelPermissionPredicates?: RowLevelPermissionPredicate[]
+ rowLevelPermissionPredicateGroups?: RowLevelPermissionPredicateGroup[]
+ __typename: 'Role'
+}
+
export interface Application {
id: Scalars['UUID']
name: Scalars['String']
@@ -465,6 +419,30 @@ export interface Application {
__typename: 'Application'
}
+export interface TwoFactorAuthenticationMethodSummary {
+ twoFactorAuthenticationMethodId: Scalars['UUID']
+ status: Scalars['String']
+ strategy: Scalars['String']
+ __typename: 'TwoFactorAuthenticationMethodSummary'
+}
+
+export interface UserWorkspace {
+ id: Scalars['UUID']
+ user: User
+ userId: Scalars['UUID']
+ locale: Scalars['String']
+ createdAt: Scalars['DateTime']
+ updatedAt: Scalars['DateTime']
+ deletedAt?: Scalars['DateTime']
+ permissionFlags?: PermissionFlagType[]
+ objectPermissions?: ObjectPermission[]
+ objectsPermissions?: ObjectPermission[]
+ twoFactorAuthenticationMethodSummary?: TwoFactorAuthenticationMethodSummary[]
+ __typename: 'UserWorkspace'
+}
+
+export type PermissionFlagType = 'API_KEYS_AND_WEBHOOKS' | 'WORKSPACE' | 'WORKSPACE_MEMBERS' | 'ROLES' | 'DATA_MODEL' | 'SECURITY' | 'WORKFLOWS' | 'IMPERSONATE' | 'SSO_BYPASS' | 'APPLICATIONS' | 'MARKETPLACE_APPS' | 'LAYOUTS' | 'BILLING' | 'AI_SETTINGS' | 'AI' | 'VIEWS' | 'UPLOAD_FILE' | 'DOWNLOAD_FILE' | 'SEND_EMAIL_TOOL' | 'CREATE_CALENDAR_EVENT_TOOL' | 'HTTP_REQUEST_TOOL' | 'CODE_INTERPRETER_TOOL' | 'IMPORT_CSV' | 'EXPORT_CSV' | 'CONNECTED_ACCOUNTS' | 'PROFILE_INFORMATION'
+
export interface ViewField {
id: Scalars['UUID']
fieldMetadataId: Scalars['UUID']
@@ -704,6 +682,28 @@ export interface User {
/** Onboarding status */
export type OnboardingStatus = 'PLAN_REQUIRED' | 'WORKSPACE_ACTIVATION' | 'PROFILE_CREATION' | 'SYNC_EMAIL' | 'APPS_INSTALLATION' | 'INVITE_TEAM' | 'COMPLETED'
+export interface ApplicationRegistration {
+ id: Scalars['UUID']
+ universalIdentifier: Scalars['String']
+ name: Scalars['String']
+ oAuthClientId: Scalars['String']
+ oAuthRedirectUris: Scalars['String'][]
+ oAuthScopes: Scalars['String'][]
+ ownerWorkspaceId?: Scalars['UUID']
+ sourceType: ApplicationRegistrationSourceType
+ sourcePackage?: Scalars['String']
+ latestAvailableVersion?: Scalars['String']
+ isListed: Scalars['Boolean']
+ isVetted: Scalars['Boolean']
+ isPreInstalled: Scalars['Boolean']
+ createdAt: Scalars['DateTime']
+ updatedAt: Scalars['DateTime']
+ isConfigured: Scalars['Boolean']
+ logoUrl?: Scalars['String']
+ galleryImagesUrls: Scalars['String'][]
+ __typename: 'ApplicationRegistration'
+}
+
export interface SdkClientChecksums {
core?: Scalars['String']
metadata: Scalars['String']
@@ -2628,6 +2628,17 @@ export interface WorkspaceAiStats {
__typename: 'WorkspaceAiStats'
}
+export interface AppKeyValue {
+ key: Scalars['String']
+ value?: Scalars['JSON']
+ scope: AppKeyValueScope
+ __typename: 'AppKeyValue'
+}
+
+
+/** WORKSPACE entries are private to one workspace install of the application. SERVER entries are shared across every install: the value is always the claiming workspaceId and only that workspace can overwrite or delete the key. */
+export type AppKeyValueScope = 'WORKSPACE' | 'SERVER'
+
export interface CalendarChannel {
id: Scalars['UUID']
handle: Scalars['String']
@@ -2792,6 +2803,7 @@ export interface Query {
myMessageFolders: MessageFolder[]
myCalendarChannels: CalendarChannel[]
minimalMetadata: MinimalMetadata
+ appKeyValue?: AppKeyValue
appConnections: AppConnection[]
appConnection: AppConnection
findWorkspaceAiStats: WorkspaceAiStats
@@ -2990,6 +3002,8 @@ export interface Mutation {
updateMessageFolder: MessageFolder
updateMessageFolders: MessageFolder[]
updateCalendarChannel: CalendarChannel
+ setAppKeyValue: AppKeyValue
+ deleteAppKeyValue: Scalars['Boolean']
createChatThread: AgentChatThread
sendChatMessage: SendChatMessageResult
retryChatMessage: SendChatMessageResult
@@ -3081,18 +3095,6 @@ export interface BillingProductDTOGenqlSelection{
__scalar?: boolean | number
}
-export interface ApiKeyGenqlSelection{
- id?: boolean | number
- name?: boolean | number
- expiresAt?: boolean | number
- revokedAt?: boolean | number
- createdAt?: boolean | number
- updatedAt?: boolean | number
- role?: RoleGenqlSelection
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
export interface ApplicationRegistrationVariableGenqlSelection{
id?: boolean | number
key?: boolean | number
@@ -3108,190 +3110,14 @@ export interface ApplicationRegistrationVariableGenqlSelection{
__scalar?: boolean | number
}
-export interface ApplicationRegistrationGenqlSelection{
- id?: boolean | number
- universalIdentifier?: boolean | number
- name?: boolean | number
- oAuthClientId?: boolean | number
- oAuthRedirectUris?: boolean | number
- oAuthScopes?: boolean | number
- ownerWorkspaceId?: boolean | number
- sourceType?: boolean | number
- sourcePackage?: boolean | number
- latestAvailableVersion?: boolean | number
- isListed?: boolean | number
- isVetted?: boolean | number
- isPreInstalled?: boolean | number
- createdAt?: boolean | number
- updatedAt?: boolean | number
- isConfigured?: boolean | number
- logoUrl?: boolean | number
- galleryImagesUrls?: boolean | number
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface TwoFactorAuthenticationMethodSummaryGenqlSelection{
- twoFactorAuthenticationMethodId?: boolean | number
- status?: boolean | number
- strategy?: boolean | number
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface RowLevelPermissionPredicateGroupGenqlSelection{
- id?: boolean | number
- parentRowLevelPermissionPredicateGroupId?: boolean | number
- logicalOperator?: boolean | number
- positionInRowLevelPermissionPredicateGroup?: boolean | number
- roleId?: boolean | number
- objectMetadataId?: boolean | number
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface RowLevelPermissionPredicateGenqlSelection{
- id?: boolean | number
- fieldMetadataId?: boolean | number
- objectMetadataId?: boolean | number
- operand?: boolean | number
- subFieldName?: boolean | number
- workspaceMemberFieldMetadataId?: boolean | number
- workspaceMemberSubFieldName?: boolean | number
- rowLevelPermissionPredicateGroupId?: boolean | number
- positionInRowLevelPermissionPredicateGroup?: boolean | number
- roleId?: boolean | number
- value?: boolean | number
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface ObjectPermissionGenqlSelection{
- objectMetadataId?: boolean | number
- canReadObjectRecords?: boolean | number
- canUpdateObjectRecords?: boolean | number
- canSoftDeleteObjectRecords?: boolean | number
- canDestroyObjectRecords?: boolean | number
- restrictedFields?: boolean | number
- rowLevelPermissionPredicates?: RowLevelPermissionPredicateGenqlSelection
- rowLevelPermissionPredicateGroups?: RowLevelPermissionPredicateGroupGenqlSelection
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface UserWorkspaceGenqlSelection{
- id?: boolean | number
- user?: UserGenqlSelection
- userId?: boolean | number
- locale?: boolean | number
- createdAt?: boolean | number
- updatedAt?: boolean | number
- deletedAt?: boolean | number
- permissionFlags?: boolean | number
- objectPermissions?: ObjectPermissionGenqlSelection
- objectsPermissions?: ObjectPermissionGenqlSelection
- twoFactorAuthenticationMethodSummary?: TwoFactorAuthenticationMethodSummaryGenqlSelection
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface FullNameGenqlSelection{
- firstName?: boolean | number
- lastName?: boolean | number
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface WorkspaceMemberGenqlSelection{
- id?: boolean | number
- name?: FullNameGenqlSelection
- userEmail?: boolean | number
- colorScheme?: boolean | number
- avatarUrl?: boolean | number
- locale?: boolean | number
- calendarStartDay?: boolean | number
- timeZone?: boolean | number
- dateFormat?: boolean | number
- timeFormat?: boolean | number
- roles?: RoleGenqlSelection
- userWorkspaceId?: boolean | number
- numberFormat?: boolean | number
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface AgentGenqlSelection{
- id?: boolean | number
- name?: boolean | number
- label?: boolean | number
- icon?: boolean | number
- description?: boolean | number
- prompt?: boolean | number
- modelId?: boolean | number
- responseFormat?: boolean | number
- roleId?: boolean | number
- isCustom?: boolean | number
- applicationId?: boolean | number
- createdAt?: boolean | number
- updatedAt?: boolean | number
- modelConfiguration?: boolean | number
- evaluationInputs?: boolean | number
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface FieldPermissionGenqlSelection{
- id?: boolean | number
- objectMetadataId?: boolean | number
- fieldMetadataId?: boolean | number
- roleId?: boolean | number
- canReadFieldValue?: boolean | number
- canUpdateFieldValue?: boolean | number
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface RolePermissionFlagGenqlSelection{
- id?: boolean | number
- roleId?: boolean | number
- flag?: boolean | number
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface ApiKeyForRoleGenqlSelection{
+export interface ApiKeyGenqlSelection{
id?: boolean | number
name?: boolean | number
expiresAt?: boolean | number
revokedAt?: boolean | number
- __typename?: boolean | number
- __scalar?: boolean | number
-}
-
-export interface RoleGenqlSelection{
- id?: boolean | number
- universalIdentifier?: boolean | number
- label?: boolean | number
- description?: boolean | number
- icon?: boolean | number
- isEditable?: boolean | number
- canBeAssignedToUsers?: boolean | number
- canBeAssignedToAgents?: boolean | number
- canBeAssignedToApiKeys?: boolean | number
- workspaceMembers?: WorkspaceMemberGenqlSelection
- agents?: AgentGenqlSelection
- apiKeys?: ApiKeyForRoleGenqlSelection
- canUpdateAllSettings?: boolean | number
- canAccessAllTools?: boolean | number
- canReadAllObjectRecords?: boolean | number
- canUpdateAllObjectRecords?: boolean | number
- canSoftDeleteAllObjectRecords?: boolean | number
- canDestroyAllObjectRecords?: boolean | number
- permissionFlags?: RolePermissionFlagGenqlSelection
- objectPermissions?: ObjectPermissionGenqlSelection
- fieldPermissions?: FieldPermissionGenqlSelection
- rowLevelPermissionPredicates?: RowLevelPermissionPredicateGenqlSelection
- rowLevelPermissionPredicateGroups?: RowLevelPermissionPredicateGroupGenqlSelection
+ createdAt?: boolean | number
+ updatedAt?: boolean | number
+ role?: RoleGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
@@ -3317,6 +3143,26 @@ export interface ApplicationVariableGenqlSelection{
__scalar?: boolean | number
}
+export interface AgentGenqlSelection{
+ id?: boolean | number
+ name?: boolean | number
+ label?: boolean | number
+ icon?: boolean | number
+ description?: boolean | number
+ prompt?: boolean | number
+ modelId?: boolean | number
+ responseFormat?: boolean | number
+ roleId?: boolean | number
+ isCustom?: boolean | number
+ applicationId?: boolean | number
+ createdAt?: boolean | number
+ updatedAt?: boolean | number
+ modelConfiguration?: boolean | number
+ evaluationInputs?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
export interface AuthTokenGenqlSelection{
token?: boolean | number
expiresAt?: boolean | number
@@ -3523,6 +3369,127 @@ export interface BooleanFieldComparison {is?: (Scalars['Boolean'] | null),isNot?
export interface IndexFilter {and?: (IndexFilter[] | null),or?: (IndexFilter[] | null),id?: (UUIDFilterComparison | null),isCustom?: (BooleanFieldComparison | null)}
+export interface FullNameGenqlSelection{
+ firstName?: boolean | number
+ lastName?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
+export interface WorkspaceMemberGenqlSelection{
+ id?: boolean | number
+ name?: FullNameGenqlSelection
+ userEmail?: boolean | number
+ colorScheme?: boolean | number
+ avatarUrl?: boolean | number
+ locale?: boolean | number
+ calendarStartDay?: boolean | number
+ timeZone?: boolean | number
+ dateFormat?: boolean | number
+ timeFormat?: boolean | number
+ roles?: RoleGenqlSelection
+ userWorkspaceId?: boolean | number
+ numberFormat?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
+export interface FieldPermissionGenqlSelection{
+ id?: boolean | number
+ objectMetadataId?: boolean | number
+ fieldMetadataId?: boolean | number
+ roleId?: boolean | number
+ canReadFieldValue?: boolean | number
+ canUpdateFieldValue?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
+export interface RowLevelPermissionPredicateGroupGenqlSelection{
+ id?: boolean | number
+ parentRowLevelPermissionPredicateGroupId?: boolean | number
+ logicalOperator?: boolean | number
+ positionInRowLevelPermissionPredicateGroup?: boolean | number
+ roleId?: boolean | number
+ objectMetadataId?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
+export interface RowLevelPermissionPredicateGenqlSelection{
+ id?: boolean | number
+ fieldMetadataId?: boolean | number
+ objectMetadataId?: boolean | number
+ operand?: boolean | number
+ subFieldName?: boolean | number
+ workspaceMemberFieldMetadataId?: boolean | number
+ workspaceMemberSubFieldName?: boolean | number
+ rowLevelPermissionPredicateGroupId?: boolean | number
+ positionInRowLevelPermissionPredicateGroup?: boolean | number
+ roleId?: boolean | number
+ value?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
+export interface ObjectPermissionGenqlSelection{
+ objectMetadataId?: boolean | number
+ canReadObjectRecords?: boolean | number
+ canUpdateObjectRecords?: boolean | number
+ canSoftDeleteObjectRecords?: boolean | number
+ canDestroyObjectRecords?: boolean | number
+ restrictedFields?: boolean | number
+ rowLevelPermissionPredicates?: RowLevelPermissionPredicateGenqlSelection
+ rowLevelPermissionPredicateGroups?: RowLevelPermissionPredicateGroupGenqlSelection
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
+export interface RolePermissionFlagGenqlSelection{
+ id?: boolean | number
+ roleId?: boolean | number
+ flag?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
+export interface ApiKeyForRoleGenqlSelection{
+ id?: boolean | number
+ name?: boolean | number
+ expiresAt?: boolean | number
+ revokedAt?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
+export interface RoleGenqlSelection{
+ id?: boolean | number
+ universalIdentifier?: boolean | number
+ label?: boolean | number
+ description?: boolean | number
+ icon?: boolean | number
+ isEditable?: boolean | number
+ canBeAssignedToUsers?: boolean | number
+ canBeAssignedToAgents?: boolean | number
+ canBeAssignedToApiKeys?: boolean | number
+ workspaceMembers?: WorkspaceMemberGenqlSelection
+ agents?: AgentGenqlSelection
+ apiKeys?: ApiKeyForRoleGenqlSelection
+ canUpdateAllSettings?: boolean | number
+ canAccessAllTools?: boolean | number
+ canReadAllObjectRecords?: boolean | number
+ canUpdateAllObjectRecords?: boolean | number
+ canSoftDeleteAllObjectRecords?: boolean | number
+ canDestroyAllObjectRecords?: boolean | number
+ permissionFlags?: RolePermissionFlagGenqlSelection
+ objectPermissions?: ObjectPermissionGenqlSelection
+ fieldPermissions?: FieldPermissionGenqlSelection
+ rowLevelPermissionPredicates?: RowLevelPermissionPredicateGenqlSelection
+ rowLevelPermissionPredicateGroups?: RowLevelPermissionPredicateGroupGenqlSelection
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
export interface ApplicationGenqlSelection{
id?: boolean | number
name?: boolean | number
@@ -3555,6 +3522,30 @@ export interface ApplicationGenqlSelection{
__scalar?: boolean | number
}
+export interface TwoFactorAuthenticationMethodSummaryGenqlSelection{
+ twoFactorAuthenticationMethodId?: boolean | number
+ status?: boolean | number
+ strategy?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
+export interface UserWorkspaceGenqlSelection{
+ id?: boolean | number
+ user?: UserGenqlSelection
+ userId?: boolean | number
+ locale?: boolean | number
+ createdAt?: boolean | number
+ updatedAt?: boolean | number
+ deletedAt?: boolean | number
+ permissionFlags?: boolean | number
+ objectPermissions?: ObjectPermissionGenqlSelection
+ objectsPermissions?: ObjectPermissionGenqlSelection
+ twoFactorAuthenticationMethodSummary?: TwoFactorAuthenticationMethodSummaryGenqlSelection
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
export interface ViewFieldGenqlSelection{
id?: boolean | number
fieldMetadataId?: boolean | number
@@ -3777,6 +3768,29 @@ export interface UserGenqlSelection{
__scalar?: boolean | number
}
+export interface ApplicationRegistrationGenqlSelection{
+ id?: boolean | number
+ universalIdentifier?: boolean | number
+ name?: boolean | number
+ oAuthClientId?: boolean | number
+ oAuthRedirectUris?: boolean | number
+ oAuthScopes?: boolean | number
+ ownerWorkspaceId?: boolean | number
+ sourceType?: boolean | number
+ sourcePackage?: boolean | number
+ latestAvailableVersion?: boolean | number
+ isListed?: boolean | number
+ isVetted?: boolean | number
+ isPreInstalled?: boolean | number
+ createdAt?: boolean | number
+ updatedAt?: boolean | number
+ isConfigured?: boolean | number
+ logoUrl?: boolean | number
+ galleryImagesUrls?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
export interface SdkClientChecksumsGenqlSelection{
core?: boolean | number
metadata?: boolean | number
@@ -5836,6 +5850,14 @@ export interface WorkspaceAiStatsGenqlSelection{
__scalar?: boolean | number
}
+export interface AppKeyValueGenqlSelection{
+ key?: boolean | number
+ value?: boolean | number
+ scope?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
export interface CalendarChannelGenqlSelection{
id?: boolean | number
handle?: boolean | number
@@ -6006,6 +6028,7 @@ export interface QueryGenqlSelection{
myMessageFolders?: (MessageFolderGenqlSelection & { __args?: {messageChannelId?: (Scalars['UUID'] | null)} })
myCalendarChannels?: (CalendarChannelGenqlSelection & { __args?: {connectedAccountId?: (Scalars['UUID'] | null)} })
minimalMetadata?: MinimalMetadataGenqlSelection
+ appKeyValue?: (AppKeyValueGenqlSelection & { __args: {key: Scalars['String'], scope?: (AppKeyValueScope | null)} })
appConnections?: (AppConnectionGenqlSelection & { __args?: {filter?: (ListAppConnectionsInput | null)} })
appConnection?: (AppConnectionGenqlSelection & { __args: {id: Scalars['ID']} })
findWorkspaceAiStats?: WorkspaceAiStatsGenqlSelection
@@ -6231,6 +6254,8 @@ export interface MutationGenqlSelection{
updateMessageFolder?: (MessageFolderGenqlSelection & { __args: {input: UpdateMessageFolderInput} })
updateMessageFolders?: (MessageFolderGenqlSelection & { __args: {input: UpdateMessageFoldersInput} })
updateCalendarChannel?: (CalendarChannelGenqlSelection & { __args: {input: UpdateCalendarChannelInput} })
+ setAppKeyValue?: (AppKeyValueGenqlSelection & { __args: {input: SetAppKeyValueInput} })
+ deleteAppKeyValue?: { __args: {key: Scalars['String'], scope?: (AppKeyValueScope | null)} }
createChatThread?: AgentChatThreadGenqlSelection
sendChatMessage?: (SendChatMessageResultGenqlSelection & { __args: {threadId: Scalars['UUID'], text: Scalars['String'], messageId: Scalars['UUID'], browsingContext?: (Scalars['JSON'] | null), modelId?: (Scalars['String'] | null), fileAttachments?: (FileAttachmentInput[] | null)} })
retryChatMessage?: (SendChatMessageResultGenqlSelection & { __args: {threadId: Scalars['UUID'], modelId?: (Scalars['String'] | null)} })
@@ -6652,6 +6677,8 @@ export interface UpdateCalendarChannelInput {id: Scalars['UUID'],update: UpdateC
export interface UpdateCalendarChannelInputUpdates {visibility?: (CalendarChannelVisibility | null),isContactAutoCreationEnabled?: (Scalars['Boolean'] | null),contactAutoCreationPolicy?: (CalendarChannelContactAutoCreationPolicy | null),isSyncEnabled?: (Scalars['Boolean'] | null)}
+export interface SetAppKeyValueInput {key: Scalars['String'],value?: (Scalars['JSON'] | null),scope?: (AppKeyValueScope | null)}
+
export interface FileAttachmentInput {id: Scalars['UUID'],filename: Scalars['String']}
export interface AgentChatQuestionAnswerInput {questionIndex: Scalars['Int'],selectedOptionIndices: Scalars['Int'][],freeText?: (Scalars['String'] | null)}
@@ -6706,14 +6733,6 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
- const ApiKey_possibleTypes: string[] = ['ApiKey']
- export const isApiKey = (obj?: { __typename?: any } | null): obj is ApiKey => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isApiKey"')
- return ApiKey_possibleTypes.includes(obj.__typename)
- }
-
-
-
const ApplicationRegistrationVariable_possibleTypes: string[] = ['ApplicationRegistrationVariable']
export const isApplicationRegistrationVariable = (obj?: { __typename?: any } | null): obj is ApplicationRegistrationVariable => {
if (!obj?.__typename) throw new Error('__typename is missing in "isApplicationRegistrationVariable"')
@@ -6722,106 +6741,10 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
- const ApplicationRegistration_possibleTypes: string[] = ['ApplicationRegistration']
- export const isApplicationRegistration = (obj?: { __typename?: any } | null): obj is ApplicationRegistration => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isApplicationRegistration"')
- return ApplicationRegistration_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const TwoFactorAuthenticationMethodSummary_possibleTypes: string[] = ['TwoFactorAuthenticationMethodSummary']
- export const isTwoFactorAuthenticationMethodSummary = (obj?: { __typename?: any } | null): obj is TwoFactorAuthenticationMethodSummary => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isTwoFactorAuthenticationMethodSummary"')
- return TwoFactorAuthenticationMethodSummary_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const RowLevelPermissionPredicateGroup_possibleTypes: string[] = ['RowLevelPermissionPredicateGroup']
- export const isRowLevelPermissionPredicateGroup = (obj?: { __typename?: any } | null): obj is RowLevelPermissionPredicateGroup => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isRowLevelPermissionPredicateGroup"')
- return RowLevelPermissionPredicateGroup_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const RowLevelPermissionPredicate_possibleTypes: string[] = ['RowLevelPermissionPredicate']
- export const isRowLevelPermissionPredicate = (obj?: { __typename?: any } | null): obj is RowLevelPermissionPredicate => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isRowLevelPermissionPredicate"')
- return RowLevelPermissionPredicate_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const ObjectPermission_possibleTypes: string[] = ['ObjectPermission']
- export const isObjectPermission = (obj?: { __typename?: any } | null): obj is ObjectPermission => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isObjectPermission"')
- return ObjectPermission_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const UserWorkspace_possibleTypes: string[] = ['UserWorkspace']
- export const isUserWorkspace = (obj?: { __typename?: any } | null): obj is UserWorkspace => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isUserWorkspace"')
- return UserWorkspace_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const FullName_possibleTypes: string[] = ['FullName']
- export const isFullName = (obj?: { __typename?: any } | null): obj is FullName => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isFullName"')
- return FullName_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const WorkspaceMember_possibleTypes: string[] = ['WorkspaceMember']
- export const isWorkspaceMember = (obj?: { __typename?: any } | null): obj is WorkspaceMember => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isWorkspaceMember"')
- return WorkspaceMember_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const Agent_possibleTypes: string[] = ['Agent']
- export const isAgent = (obj?: { __typename?: any } | null): obj is Agent => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isAgent"')
- return Agent_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const FieldPermission_possibleTypes: string[] = ['FieldPermission']
- export const isFieldPermission = (obj?: { __typename?: any } | null): obj is FieldPermission => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isFieldPermission"')
- return FieldPermission_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const RolePermissionFlag_possibleTypes: string[] = ['RolePermissionFlag']
- export const isRolePermissionFlag = (obj?: { __typename?: any } | null): obj is RolePermissionFlag => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isRolePermissionFlag"')
- return RolePermissionFlag_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const ApiKeyForRole_possibleTypes: string[] = ['ApiKeyForRole']
- export const isApiKeyForRole = (obj?: { __typename?: any } | null): obj is ApiKeyForRole => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isApiKeyForRole"')
- return ApiKeyForRole_possibleTypes.includes(obj.__typename)
- }
-
-
-
- const Role_possibleTypes: string[] = ['Role']
- export const isRole = (obj?: { __typename?: any } | null): obj is Role => {
- if (!obj?.__typename) throw new Error('__typename is missing in "isRole"')
- return Role_possibleTypes.includes(obj.__typename)
+ const ApiKey_possibleTypes: string[] = ['ApiKey']
+ export const isApiKey = (obj?: { __typename?: any } | null): obj is ApiKey => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isApiKey"')
+ return ApiKey_possibleTypes.includes(obj.__typename)
}
@@ -6842,6 +6765,14 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
+ const Agent_possibleTypes: string[] = ['Agent']
+ export const isAgent = (obj?: { __typename?: any } | null): obj is Agent => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isAgent"')
+ return Agent_possibleTypes.includes(obj.__typename)
+ }
+
+
+
const AuthToken_possibleTypes: string[] = ['AuthToken']
export const isAuthToken = (obj?: { __typename?: any } | null): obj is AuthToken => {
if (!obj?.__typename) throw new Error('__typename is missing in "isAuthToken"')
@@ -6930,6 +6861,78 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
+ const FullName_possibleTypes: string[] = ['FullName']
+ export const isFullName = (obj?: { __typename?: any } | null): obj is FullName => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isFullName"')
+ return FullName_possibleTypes.includes(obj.__typename)
+ }
+
+
+
+ const WorkspaceMember_possibleTypes: string[] = ['WorkspaceMember']
+ export const isWorkspaceMember = (obj?: { __typename?: any } | null): obj is WorkspaceMember => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isWorkspaceMember"')
+ return WorkspaceMember_possibleTypes.includes(obj.__typename)
+ }
+
+
+
+ const FieldPermission_possibleTypes: string[] = ['FieldPermission']
+ export const isFieldPermission = (obj?: { __typename?: any } | null): obj is FieldPermission => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isFieldPermission"')
+ return FieldPermission_possibleTypes.includes(obj.__typename)
+ }
+
+
+
+ const RowLevelPermissionPredicateGroup_possibleTypes: string[] = ['RowLevelPermissionPredicateGroup']
+ export const isRowLevelPermissionPredicateGroup = (obj?: { __typename?: any } | null): obj is RowLevelPermissionPredicateGroup => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isRowLevelPermissionPredicateGroup"')
+ return RowLevelPermissionPredicateGroup_possibleTypes.includes(obj.__typename)
+ }
+
+
+
+ const RowLevelPermissionPredicate_possibleTypes: string[] = ['RowLevelPermissionPredicate']
+ export const isRowLevelPermissionPredicate = (obj?: { __typename?: any } | null): obj is RowLevelPermissionPredicate => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isRowLevelPermissionPredicate"')
+ return RowLevelPermissionPredicate_possibleTypes.includes(obj.__typename)
+ }
+
+
+
+ const ObjectPermission_possibleTypes: string[] = ['ObjectPermission']
+ export const isObjectPermission = (obj?: { __typename?: any } | null): obj is ObjectPermission => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isObjectPermission"')
+ return ObjectPermission_possibleTypes.includes(obj.__typename)
+ }
+
+
+
+ const RolePermissionFlag_possibleTypes: string[] = ['RolePermissionFlag']
+ export const isRolePermissionFlag = (obj?: { __typename?: any } | null): obj is RolePermissionFlag => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isRolePermissionFlag"')
+ return RolePermissionFlag_possibleTypes.includes(obj.__typename)
+ }
+
+
+
+ const ApiKeyForRole_possibleTypes: string[] = ['ApiKeyForRole']
+ export const isApiKeyForRole = (obj?: { __typename?: any } | null): obj is ApiKeyForRole => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isApiKeyForRole"')
+ return ApiKeyForRole_possibleTypes.includes(obj.__typename)
+ }
+
+
+
+ const Role_possibleTypes: string[] = ['Role']
+ export const isRole = (obj?: { __typename?: any } | null): obj is Role => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isRole"')
+ return Role_possibleTypes.includes(obj.__typename)
+ }
+
+
+
const Application_possibleTypes: string[] = ['Application']
export const isApplication = (obj?: { __typename?: any } | null): obj is Application => {
if (!obj?.__typename) throw new Error('__typename is missing in "isApplication"')
@@ -6938,6 +6941,22 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
+ const TwoFactorAuthenticationMethodSummary_possibleTypes: string[] = ['TwoFactorAuthenticationMethodSummary']
+ export const isTwoFactorAuthenticationMethodSummary = (obj?: { __typename?: any } | null): obj is TwoFactorAuthenticationMethodSummary => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isTwoFactorAuthenticationMethodSummary"')
+ return TwoFactorAuthenticationMethodSummary_possibleTypes.includes(obj.__typename)
+ }
+
+
+
+ const UserWorkspace_possibleTypes: string[] = ['UserWorkspace']
+ export const isUserWorkspace = (obj?: { __typename?: any } | null): obj is UserWorkspace => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isUserWorkspace"')
+ return UserWorkspace_possibleTypes.includes(obj.__typename)
+ }
+
+
+
const ViewField_possibleTypes: string[] = ['ViewField']
export const isViewField = (obj?: { __typename?: any } | null): obj is ViewField => {
if (!obj?.__typename) throw new Error('__typename is missing in "isViewField"')
@@ -7010,6 +7029,14 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
+ const ApplicationRegistration_possibleTypes: string[] = ['ApplicationRegistration']
+ export const isApplicationRegistration = (obj?: { __typename?: any } | null): obj is ApplicationRegistration => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isApplicationRegistration"')
+ return ApplicationRegistration_possibleTypes.includes(obj.__typename)
+ }
+
+
+
const SdkClientChecksums_possibleTypes: string[] = ['SdkClientChecksums']
export const isSdkClientChecksums = (obj?: { __typename?: any } | null): obj is SdkClientChecksums => {
if (!obj?.__typename) throw new Error('__typename is missing in "isSdkClientChecksums"')
@@ -8690,6 +8717,14 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
+ const AppKeyValue_possibleTypes: string[] = ['AppKeyValue']
+ export const isAppKeyValue = (obj?: { __typename?: any } | null): obj is AppKeyValue => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isAppKeyValue"')
+ return AppKeyValue_possibleTypes.includes(obj.__typename)
+ }
+
+
+
const CalendarChannel_possibleTypes: string[] = ['CalendarChannel']
export const isCalendarChannel = (obj?: { __typename?: any } | null): obj is CalendarChannel => {
if (!obj?.__typename) throw new Error('__typename is missing in "isCalendarChannel"')
@@ -8768,80 +8803,6 @@ export const enumApplicationRegistrationSourceType = {
OAUTH_ONLY: 'OAUTH_ONLY' as const
}
-export const enumRowLevelPermissionPredicateGroupLogicalOperator = {
- AND: 'AND' as const,
- OR: 'OR' as const
-}
-
-export const enumRowLevelPermissionPredicateOperand = {
- IS: 'IS' as const,
- IS_NOT_NULL: 'IS_NOT_NULL' as const,
- IS_NOT: 'IS_NOT' as const,
- LESS_THAN_OR_EQUAL: 'LESS_THAN_OR_EQUAL' as const,
- GREATER_THAN_OR_EQUAL: 'GREATER_THAN_OR_EQUAL' as const,
- IS_BEFORE: 'IS_BEFORE' as const,
- IS_AFTER: 'IS_AFTER' as const,
- CONTAINS: 'CONTAINS' as const,
- DOES_NOT_CONTAIN: 'DOES_NOT_CONTAIN' as const,
- IS_EMPTY: 'IS_EMPTY' as const,
- IS_NOT_EMPTY: 'IS_NOT_EMPTY' as const,
- IS_RELATIVE: 'IS_RELATIVE' as const,
- IS_IN_PAST: 'IS_IN_PAST' as const,
- IS_IN_FUTURE: 'IS_IN_FUTURE' as const,
- IS_TODAY: 'IS_TODAY' as const,
- VECTOR_SEARCH: 'VECTOR_SEARCH' as const
-}
-
-export const enumPermissionFlagType = {
- API_KEYS_AND_WEBHOOKS: 'API_KEYS_AND_WEBHOOKS' as const,
- WORKSPACE: 'WORKSPACE' as const,
- WORKSPACE_MEMBERS: 'WORKSPACE_MEMBERS' as const,
- ROLES: 'ROLES' as const,
- DATA_MODEL: 'DATA_MODEL' as const,
- SECURITY: 'SECURITY' as const,
- WORKFLOWS: 'WORKFLOWS' as const,
- IMPERSONATE: 'IMPERSONATE' as const,
- SSO_BYPASS: 'SSO_BYPASS' as const,
- APPLICATIONS: 'APPLICATIONS' as const,
- MARKETPLACE_APPS: 'MARKETPLACE_APPS' as const,
- LAYOUTS: 'LAYOUTS' as const,
- BILLING: 'BILLING' as const,
- AI_SETTINGS: 'AI_SETTINGS' as const,
- AI: 'AI' as const,
- VIEWS: 'VIEWS' as const,
- UPLOAD_FILE: 'UPLOAD_FILE' as const,
- DOWNLOAD_FILE: 'DOWNLOAD_FILE' as const,
- SEND_EMAIL_TOOL: 'SEND_EMAIL_TOOL' as const,
- CREATE_CALENDAR_EVENT_TOOL: 'CREATE_CALENDAR_EVENT_TOOL' as const,
- HTTP_REQUEST_TOOL: 'HTTP_REQUEST_TOOL' as const,
- CODE_INTERPRETER_TOOL: 'CODE_INTERPRETER_TOOL' as const,
- IMPORT_CSV: 'IMPORT_CSV' as const,
- EXPORT_CSV: 'EXPORT_CSV' as const,
- CONNECTED_ACCOUNTS: 'CONNECTED_ACCOUNTS' as const,
- PROFILE_INFORMATION: 'PROFILE_INFORMATION' as const
-}
-
-export const enumWorkspaceMemberDateFormatEnum = {
- SYSTEM: 'SYSTEM' as const,
- MONTH_FIRST: 'MONTH_FIRST' as const,
- DAY_FIRST: 'DAY_FIRST' as const,
- YEAR_FIRST: 'YEAR_FIRST' as const
-}
-
-export const enumWorkspaceMemberTimeFormatEnum = {
- SYSTEM: 'SYSTEM' as const,
- HOUR_12: 'HOUR_12' as const,
- HOUR_24: 'HOUR_24' as const
-}
-
-export const enumWorkspaceMemberNumberFormatEnum = {
- SYSTEM: 'SYSTEM' as const,
- COMMAS_AND_DOT: 'COMMAS_AND_DOT' as const,
- SPACES_AND_COMMA: 'SPACES_AND_COMMA' as const,
- DOTS_AND_COMMA: 'DOTS_AND_COMMA' as const,
- APOSTROPHE_AND_DOT: 'APOSTROPHE_AND_DOT' as const
-}
-
export const enumEngineComponentKey = {
NAVIGATE_TO_NEXT_RECORD: 'NAVIGATE_TO_NEXT_RECORD' as const,
NAVIGATE_TO_PREVIOUS_RECORD: 'NAVIGATE_TO_PREVIOUS_RECORD' as const,
@@ -8958,6 +8919,80 @@ export const enumIndexType = {
GIN: 'GIN' as const
}
+export const enumWorkspaceMemberDateFormatEnum = {
+ SYSTEM: 'SYSTEM' as const,
+ MONTH_FIRST: 'MONTH_FIRST' as const,
+ DAY_FIRST: 'DAY_FIRST' as const,
+ YEAR_FIRST: 'YEAR_FIRST' as const
+}
+
+export const enumWorkspaceMemberTimeFormatEnum = {
+ SYSTEM: 'SYSTEM' as const,
+ HOUR_12: 'HOUR_12' as const,
+ HOUR_24: 'HOUR_24' as const
+}
+
+export const enumWorkspaceMemberNumberFormatEnum = {
+ SYSTEM: 'SYSTEM' as const,
+ COMMAS_AND_DOT: 'COMMAS_AND_DOT' as const,
+ SPACES_AND_COMMA: 'SPACES_AND_COMMA' as const,
+ DOTS_AND_COMMA: 'DOTS_AND_COMMA' as const,
+ APOSTROPHE_AND_DOT: 'APOSTROPHE_AND_DOT' as const
+}
+
+export const enumRowLevelPermissionPredicateGroupLogicalOperator = {
+ AND: 'AND' as const,
+ OR: 'OR' as const
+}
+
+export const enumRowLevelPermissionPredicateOperand = {
+ IS: 'IS' as const,
+ IS_NOT_NULL: 'IS_NOT_NULL' as const,
+ IS_NOT: 'IS_NOT' as const,
+ LESS_THAN_OR_EQUAL: 'LESS_THAN_OR_EQUAL' as const,
+ GREATER_THAN_OR_EQUAL: 'GREATER_THAN_OR_EQUAL' as const,
+ IS_BEFORE: 'IS_BEFORE' as const,
+ IS_AFTER: 'IS_AFTER' as const,
+ CONTAINS: 'CONTAINS' as const,
+ DOES_NOT_CONTAIN: 'DOES_NOT_CONTAIN' as const,
+ IS_EMPTY: 'IS_EMPTY' as const,
+ IS_NOT_EMPTY: 'IS_NOT_EMPTY' as const,
+ IS_RELATIVE: 'IS_RELATIVE' as const,
+ IS_IN_PAST: 'IS_IN_PAST' as const,
+ IS_IN_FUTURE: 'IS_IN_FUTURE' as const,
+ IS_TODAY: 'IS_TODAY' as const,
+ VECTOR_SEARCH: 'VECTOR_SEARCH' as const
+}
+
+export const enumPermissionFlagType = {
+ API_KEYS_AND_WEBHOOKS: 'API_KEYS_AND_WEBHOOKS' as const,
+ WORKSPACE: 'WORKSPACE' as const,
+ WORKSPACE_MEMBERS: 'WORKSPACE_MEMBERS' as const,
+ ROLES: 'ROLES' as const,
+ DATA_MODEL: 'DATA_MODEL' as const,
+ SECURITY: 'SECURITY' as const,
+ WORKFLOWS: 'WORKFLOWS' as const,
+ IMPERSONATE: 'IMPERSONATE' as const,
+ SSO_BYPASS: 'SSO_BYPASS' as const,
+ APPLICATIONS: 'APPLICATIONS' as const,
+ MARKETPLACE_APPS: 'MARKETPLACE_APPS' as const,
+ LAYOUTS: 'LAYOUTS' as const,
+ BILLING: 'BILLING' as const,
+ AI_SETTINGS: 'AI_SETTINGS' as const,
+ AI: 'AI' as const,
+ VIEWS: 'VIEWS' as const,
+ UPLOAD_FILE: 'UPLOAD_FILE' as const,
+ DOWNLOAD_FILE: 'DOWNLOAD_FILE' as const,
+ SEND_EMAIL_TOOL: 'SEND_EMAIL_TOOL' as const,
+ CREATE_CALENDAR_EVENT_TOOL: 'CREATE_CALENDAR_EVENT_TOOL' as const,
+ HTTP_REQUEST_TOOL: 'HTTP_REQUEST_TOOL' as const,
+ CODE_INTERPRETER_TOOL: 'CODE_INTERPRETER_TOOL' as const,
+ IMPORT_CSV: 'IMPORT_CSV' as const,
+ EXPORT_CSV: 'EXPORT_CSV' as const,
+ CONNECTED_ACCOUNTS: 'CONNECTED_ACCOUNTS' as const,
+ PROFILE_INFORMATION: 'PROFILE_INFORMATION' as const
+}
+
export const enumAggregateOperations = {
MIN: 'MIN' as const,
MAX: 'MAX' as const,
@@ -9351,6 +9386,11 @@ export const enumUnsubscribeTopicVisibility = {
PRIVATE: 'PRIVATE' as const
}
+export const enumAppKeyValueScope = {
+ WORKSPACE: 'WORKSPACE' as const,
+ SERVER: 'SERVER' as const
+}
+
export const enumCalendarChannelSyncStatus = {
NOT_SYNCED: 'NOT_SYNCED' as const,
ONGOING: 'ONGOING' as const,
diff --git a/packages/twenty-client-sdk/src/metadata/generated/types.ts b/packages/twenty-client-sdk/src/metadata/generated/types.ts
index 3b7bf97bbe..abeb242460 100644
--- a/packages/twenty-client-sdk/src/metadata/generated/types.ts
+++ b/packages/twenty-client-sdk/src/metadata/generated/types.ts
@@ -3,36 +3,36 @@ export default {
1,
3,
4,
+ 5,
6,
- 7,
9,
- 12,
- 13,
- 15,
+ 16,
+ 17,
18,
- 21,
- 22,
23,
- 24,
- 36,
- 37,
- 42,
- 44,
- 46,
- 49,
- 56,
- 58,
- 60,
- 63,
+ 25,
+ 27,
+ 30,
+ 31,
+ 38,
+ 39,
+ 40,
+ 43,
+ 45,
+ 53,
+ 55,
+ 57,
+ 59,
+ 62,
+ 65,
66,
67,
68,
69,
- 70,
+ 71,
72,
- 73,
+ 74,
75,
- 76,
82,
85,
90,
@@ -73,16 +73,17 @@ export default {
280,
287,
327,
- 328,
329,
330,
+ 331,
332,
334,
- 346,
- 353,
- 360,
- 361,
- 489
+ 336,
+ 348,
+ 355,
+ 362,
+ 363,
+ 492
],
"types": {
"BillingProductDTO": {
@@ -109,37 +110,9 @@ export default {
]
},
"String": {},
- "ApiKey": {
- "id": [
- 3
- ],
- "name": [
- 1
- ],
- "expiresAt": [
- 4
- ],
- "revokedAt": [
- 4
- ],
- "createdAt": [
- 4
- ],
- "updatedAt": [
- 4
- ],
- "role": [
- 29
- ],
- "__typename": [
- 1
- ]
- },
- "UUID": {},
- "DateTime": {},
"ApplicationRegistrationVariable": {
"id": [
- 3
+ 4
],
"key": [
1
@@ -148,300 +121,107 @@ export default {
1
],
"isSecret": [
- 6
+ 3
],
"isRequired": [
- 6
+ 3
],
"type": [
1
],
"options": [
- 7
+ 5
],
"isFilled": [
- 6
+ 3
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"__typename": [
1
]
},
"Boolean": {},
+ "UUID": {},
"JSON": {},
- "ApplicationRegistration": {
+ "DateTime": {},
+ "ApiKey": {
"id": [
- 3
- ],
- "universalIdentifier": [
- 1
+ 4
],
"name": [
1
],
- "oAuthClientId": [
- 1
- ],
- "oAuthRedirectUris": [
- 1
- ],
- "oAuthScopes": [
- 1
- ],
- "ownerWorkspaceId": [
- 3
- ],
- "sourceType": [
- 9
- ],
- "sourcePackage": [
+ "expiresAt": [
+ 6
+ ],
+ "revokedAt": [
+ 6
+ ],
+ "createdAt": [
+ 6
+ ],
+ "updatedAt": [
+ 6
+ ],
+ "role": [
+ 49
+ ],
+ "__typename": [
1
+ ]
+ },
+ "ApplicationRegistrationSummary": {
+ "id": [
+ 4
],
"latestAvailableVersion": [
1
],
- "isListed": [
- 6
- ],
- "isVetted": [
- 6
- ],
- "isPreInstalled": [
- 6
- ],
- "createdAt": [
- 4
- ],
- "updatedAt": [
- 4
- ],
- "isConfigured": [
- 6
+ "sourceType": [
+ 9
],
"logoUrl": [
1
],
- "galleryImagesUrls": [
- 1
- ],
"__typename": [
1
]
},
"ApplicationRegistrationSourceType": {},
- "TwoFactorAuthenticationMethodSummary": {
- "twoFactorAuthenticationMethodId": [
- 3
- ],
- "status": [
- 1
- ],
- "strategy": [
- 1
- ],
- "__typename": [
- 1
- ]
- },
- "RowLevelPermissionPredicateGroup": {
+ "ApplicationVariable": {
"id": [
- 1
+ 4
],
- "parentRowLevelPermissionPredicateGroupId": [
- 1
- ],
- "logicalOperator": [
- 13
- ],
- "positionInRowLevelPermissionPredicateGroup": [
- 12
- ],
- "roleId": [
- 1
- ],
- "objectMetadataId": [
- 1
- ],
- "__typename": [
- 1
- ]
- },
- "Float": {},
- "RowLevelPermissionPredicateGroupLogicalOperator": {},
- "RowLevelPermissionPredicate": {
- "id": [
- 1
- ],
- "fieldMetadataId": [
- 1
- ],
- "objectMetadataId": [
- 1
- ],
- "operand": [
- 15
- ],
- "subFieldName": [
- 1
- ],
- "workspaceMemberFieldMetadataId": [
- 1
- ],
- "workspaceMemberSubFieldName": [
- 1
- ],
- "rowLevelPermissionPredicateGroupId": [
- 1
- ],
- "positionInRowLevelPermissionPredicateGroup": [
- 12
- ],
- "roleId": [
+ "key": [
1
],
"value": [
- 7
+ 1
+ ],
+ "description": [
+ 1
+ ],
+ "isSecret": [
+ 3
+ ],
+ "type": [
+ 1
+ ],
+ "options": [
+ 5
],
"__typename": [
1
]
},
- "RowLevelPermissionPredicateOperand": {},
- "ObjectPermission": {
- "objectMetadataId": [
- 3
- ],
- "canReadObjectRecords": [
- 6
- ],
- "canUpdateObjectRecords": [
- 6
- ],
- "canSoftDeleteObjectRecords": [
- 6
- ],
- "canDestroyObjectRecords": [
- 6
- ],
- "restrictedFields": [
- 7
- ],
- "rowLevelPermissionPredicates": [
- 14
- ],
- "rowLevelPermissionPredicateGroups": [
- 11
- ],
- "__typename": [
- 1
- ]
- },
- "UserWorkspace": {
- "id": [
- 3
- ],
- "user": [
- 74
- ],
- "userId": [
- 3
- ],
- "locale": [
- 1
- ],
- "createdAt": [
- 4
- ],
- "updatedAt": [
- 4
- ],
- "deletedAt": [
- 4
- ],
- "permissionFlags": [
- 18
- ],
- "objectPermissions": [
- 16
- ],
- "objectsPermissions": [
- 16
- ],
- "twoFactorAuthenticationMethodSummary": [
- 10
- ],
- "__typename": [
- 1
- ]
- },
- "PermissionFlagType": {},
- "FullName": {
- "firstName": [
- 1
- ],
- "lastName": [
- 1
- ],
- "__typename": [
- 1
- ]
- },
- "WorkspaceMember": {
- "id": [
- 3
- ],
- "name": [
- 19
- ],
- "userEmail": [
- 1
- ],
- "colorScheme": [
- 1
- ],
- "avatarUrl": [
- 1
- ],
- "locale": [
- 1
- ],
- "calendarStartDay": [
- 21
- ],
- "timeZone": [
- 1
- ],
- "dateFormat": [
- 22
- ],
- "timeFormat": [
- 23
- ],
- "roles": [
- 29
- ],
- "userWorkspaceId": [
- 3
- ],
- "numberFormat": [
- 24
- ],
- "__typename": [
- 1
- ]
- },
- "Int": {},
- "WorkspaceMemberDateFormatEnum": {},
- "WorkspaceMemberTimeFormatEnum": {},
- "WorkspaceMemberNumberFormatEnum": {},
"Agent": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -462,25 +242,25 @@ export default {
1
],
"responseFormat": [
- 7
+ 5
],
"roleId": [
- 3
+ 4
],
"isCustom": [
- 6
- ],
- "applicationId": [
3
],
- "createdAt": [
+ "applicationId": [
4
],
+ "createdAt": [
+ 6
+ ],
"updatedAt": [
- 4
+ 6
],
"modelConfiguration": [
- 7
+ 5
],
"evaluationInputs": [
1
@@ -489,183 +269,12 @@ export default {
1
]
},
- "FieldPermission": {
- "id": [
- 3
- ],
- "objectMetadataId": [
- 3
- ],
- "fieldMetadataId": [
- 3
- ],
- "roleId": [
- 3
- ],
- "canReadFieldValue": [
- 6
- ],
- "canUpdateFieldValue": [
- 6
- ],
- "__typename": [
- 1
- ]
- },
- "RolePermissionFlag": {
- "id": [
- 3
- ],
- "roleId": [
- 3
- ],
- "flag": [
- 1
- ],
- "__typename": [
- 1
- ]
- },
- "ApiKeyForRole": {
- "id": [
- 3
- ],
- "name": [
- 1
- ],
- "expiresAt": [
- 4
- ],
- "revokedAt": [
- 4
- ],
- "__typename": [
- 1
- ]
- },
- "Role": {
- "id": [
- 3
- ],
- "universalIdentifier": [
- 3
- ],
- "label": [
- 1
- ],
- "description": [
- 1
- ],
- "icon": [
- 1
- ],
- "isEditable": [
- 6
- ],
- "canBeAssignedToUsers": [
- 6
- ],
- "canBeAssignedToAgents": [
- 6
- ],
- "canBeAssignedToApiKeys": [
- 6
- ],
- "workspaceMembers": [
- 20
- ],
- "agents": [
- 25
- ],
- "apiKeys": [
- 28
- ],
- "canUpdateAllSettings": [
- 6
- ],
- "canAccessAllTools": [
- 6
- ],
- "canReadAllObjectRecords": [
- 6
- ],
- "canUpdateAllObjectRecords": [
- 6
- ],
- "canSoftDeleteAllObjectRecords": [
- 6
- ],
- "canDestroyAllObjectRecords": [
- 6
- ],
- "permissionFlags": [
- 27
- ],
- "objectPermissions": [
- 16
- ],
- "fieldPermissions": [
- 26
- ],
- "rowLevelPermissionPredicates": [
- 14
- ],
- "rowLevelPermissionPredicateGroups": [
- 11
- ],
- "__typename": [
- 1
- ]
- },
- "ApplicationRegistrationSummary": {
- "id": [
- 3
- ],
- "latestAvailableVersion": [
- 1
- ],
- "sourceType": [
- 9
- ],
- "logoUrl": [
- 1
- ],
- "__typename": [
- 1
- ]
- },
- "ApplicationVariable": {
- "id": [
- 3
- ],
- "key": [
- 1
- ],
- "value": [
- 1
- ],
- "description": [
- 1
- ],
- "isSecret": [
- 6
- ],
- "type": [
- 1
- ],
- "options": [
- 7
- ],
- "__typename": [
- 1
- ]
- },
"AuthToken": {
"token": [
1
],
"expiresAt": [
- 4
+ 6
],
"__typename": [
1
@@ -673,10 +282,10 @@ export default {
},
"ApplicationTokenPair": {
"applicationAccessToken": [
- 32
+ 12
],
"applicationRefreshToken": [
- 32
+ 12
],
"__typename": [
1
@@ -684,7 +293,7 @@ export default {
},
"FrontComponent": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -705,28 +314,28 @@ export default {
1
],
"universalIdentifier": [
- 3
+ 4
],
"applicationId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"isHeadless": [
- 6
+ 3
],
"usesSdkClient": [
- 6
+ 3
],
"applicationTokenPair": [
- 33
+ 13
],
"applicationVariables": [
- 7
+ 5
],
"__typename": [
1
@@ -734,19 +343,19 @@ export default {
},
"CommandMenuItem": {
"id": [
- 3
+ 4
],
"workflowVersionId": [
- 3
+ 4
],
"frontComponentId": [
- 3
+ 4
],
"frontComponent": [
- 34
+ 14
],
"engineComponentKey": [
- 36
+ 17
],
"label": [
1
@@ -758,16 +367,16 @@ export default {
1
],
"position": [
- 12
+ 16
],
"isPinned": [
- 6
+ 3
],
"availabilityType": [
- 37
+ 18
],
"payload": [
- 38
+ 19
],
"hotKeys": [
1
@@ -776,38 +385,39 @@ export default {
1
],
"availabilityObjectMetadataId": [
- 3
+ 4
],
"pageLayoutId": [
- 3
+ 4
],
"universalIdentifier": [
- 3
+ 4
],
"applicationId": [
- 3
+ 4
],
"isActive": [
- 6
+ 3
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"__typename": [
1
]
},
+ "Float": {},
"EngineComponentKey": {},
"CommandMenuItemAvailabilityType": {},
"CommandMenuItemPayload": {
"on_PathCommandMenuItemPayload": [
- 39
+ 20
],
"on_ObjectMetadataCommandMenuItemPayload": [
- 40
+ 21
],
"__typename": [
1
@@ -823,7 +433,7 @@ export default {
},
"ObjectMetadataCommandMenuItemPayload": {
"objectMetadataItemId": [
- 3
+ 4
],
"__typename": [
1
@@ -831,7 +441,7 @@ export default {
},
"LogicFunction": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -843,10 +453,10 @@ export default {
1
],
"timeoutSeconds": [
- 12
+ 16
],
"executionMode": [
- 42
+ 23
],
"sourceHandlerPath": [
1
@@ -855,31 +465,31 @@ export default {
1
],
"cronTriggerSettings": [
- 7
+ 5
],
"databaseEventTriggerSettings": [
- 7
+ 5
],
"httpRouteTriggerSettings": [
- 7
+ 5
],
"toolTriggerSettings": [
- 7
+ 5
],
"workflowActionTriggerSettings": [
- 7
+ 5
],
"applicationId": [
- 3
+ 4
],
"universalIdentifier": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -888,13 +498,13 @@ export default {
"LogicFunctionExecutionMode": {},
"Field": {
"id": [
- 3
+ 4
],
"universalIdentifier": [
1
],
"type": [
- 44
+ 25
],
"name": [
1
@@ -909,49 +519,49 @@ export default {
1
],
"isActive": [
- 6
+ 3
],
"isSystem": [
- 6
+ 3
],
"isUIEditable": [
- 6
+ 3
],
"isUIReadOnly": [
- 6
+ 3
],
"isNullable": [
- 6
+ 3
],
"isUnique": [
- 6
+ 3
],
"defaultValue": [
- 7
+ 5
],
"options": [
- 7
+ 5
],
"settings": [
- 7
+ 5
],
"objectMetadataId": [
- 3
+ 4
],
"isLabelSyncedWithName": [
- 6
+ 3
],
"morphId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"applicationId": [
- 3
+ 4
],
"relation": [
218
@@ -960,7 +570,7 @@ export default {
218
],
"object": [
- 47
+ 28
],
"__typename": [
1
@@ -969,28 +579,28 @@ export default {
"FieldMetadataType": {},
"Index": {
"id": [
- 3
+ 4
],
"name": [
1
],
"isCustom": [
- 6
+ 3
],
"isUnique": [
- 6
+ 3
],
"indexWhereClause": [
1
],
"indexType": [
- 46
+ 27
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"indexFieldMetadataList": [
220
@@ -1002,7 +612,7 @@ export default {
"IndexType": {},
"Object": {
"id": [
- 3
+ 4
],
"universalIdentifier": [
1
@@ -1032,52 +642,52 @@ export default {
1
],
"isRemote": [
- 6
+ 3
],
"isActive": [
- 6
+ 3
],
"isSystem": [
- 6
+ 3
],
"isUIEditable": [
- 6
+ 3
],
"isUICreatable": [
- 6
+ 3
],
"isUIReadOnly": [
- 6
+ 3
],
"isSearchable": [
- 6
+ 3
],
"applicationId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"labelIdentifierFieldMetadataId": [
- 3
+ 4
],
"imageIdentifierFieldMetadataId": [
- 3
+ 4
],
"isLabelSyncedWithName": [
- 6
+ 3
],
"duplicateCriteria": [
1
],
"fieldsList": [
- 43
+ 24
],
"indexMetadataList": [
- 45
+ 26
],
"searchFieldMetadataList": [
222
@@ -1086,11 +696,11 @@ export default {
229,
{
"paging": [
- 48,
+ 29,
"CursorPaging!"
],
"filter": [
- 50,
+ 32,
"FieldFilter!"
]
}
@@ -1099,11 +709,11 @@ export default {
227,
{
"paging": [
- 48,
+ 29,
"CursorPaging!"
],
"filter": [
- 53,
+ 35,
"IndexFilter!"
]
}
@@ -1114,46 +724,47 @@ export default {
},
"CursorPaging": {
"before": [
- 49
+ 31
],
"after": [
- 49
+ 31
],
"first": [
- 21
+ 30
],
"last": [
- 21
+ 30
],
"__typename": [
1
]
},
+ "Int": {},
"ConnectionCursor": {},
"FieldFilter": {
"and": [
- 50
+ 32
],
"or": [
- 50
+ 32
],
"id": [
- 51
+ 33
],
"isActive": [
- 52
+ 34
],
"isSystem": [
- 52
+ 34
],
"isUIEditable": [
- 52
+ 34
],
"isUIReadOnly": [
- 52
+ 34
],
"objectMetadataId": [
- 51
+ 33
],
"__typename": [
1
@@ -1161,46 +772,46 @@ export default {
},
"UUIDFilterComparison": {
"is": [
- 6
+ 3
],
"isNot": [
- 6
+ 3
],
"eq": [
- 3
+ 4
],
"neq": [
- 3
+ 4
],
"gt": [
- 3
+ 4
],
"gte": [
- 3
+ 4
],
"lt": [
- 3
+ 4
],
"lte": [
- 3
+ 4
],
"like": [
- 3
+ 4
],
"notLike": [
- 3
+ 4
],
"iLike": [
- 3
+ 4
],
"notILike": [
- 3
+ 4
],
"in": [
- 3
+ 4
],
"notIn": [
- 3
+ 4
],
"__typename": [
1
@@ -1208,10 +819,10 @@ export default {
},
"BooleanFieldComparison": {
"is": [
- 6
+ 3
],
"isNot": [
- 6
+ 3
],
"__typename": [
1
@@ -1219,16 +830,294 @@ export default {
},
"IndexFilter": {
"and": [
- 53
+ 35
],
"or": [
- 53
+ 35
],
"id": [
- 51
+ 33
],
"isCustom": [
- 52
+ 34
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "FullName": {
+ "firstName": [
+ 1
+ ],
+ "lastName": [
+ 1
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "WorkspaceMember": {
+ "id": [
+ 4
+ ],
+ "name": [
+ 36
+ ],
+ "userEmail": [
+ 1
+ ],
+ "colorScheme": [
+ 1
+ ],
+ "avatarUrl": [
+ 1
+ ],
+ "locale": [
+ 1
+ ],
+ "calendarStartDay": [
+ 30
+ ],
+ "timeZone": [
+ 1
+ ],
+ "dateFormat": [
+ 38
+ ],
+ "timeFormat": [
+ 39
+ ],
+ "roles": [
+ 49
+ ],
+ "userWorkspaceId": [
+ 4
+ ],
+ "numberFormat": [
+ 40
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "WorkspaceMemberDateFormatEnum": {},
+ "WorkspaceMemberTimeFormatEnum": {},
+ "WorkspaceMemberNumberFormatEnum": {},
+ "FieldPermission": {
+ "id": [
+ 4
+ ],
+ "objectMetadataId": [
+ 4
+ ],
+ "fieldMetadataId": [
+ 4
+ ],
+ "roleId": [
+ 4
+ ],
+ "canReadFieldValue": [
+ 3
+ ],
+ "canUpdateFieldValue": [
+ 3
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "RowLevelPermissionPredicateGroup": {
+ "id": [
+ 1
+ ],
+ "parentRowLevelPermissionPredicateGroupId": [
+ 1
+ ],
+ "logicalOperator": [
+ 43
+ ],
+ "positionInRowLevelPermissionPredicateGroup": [
+ 16
+ ],
+ "roleId": [
+ 1
+ ],
+ "objectMetadataId": [
+ 1
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "RowLevelPermissionPredicateGroupLogicalOperator": {},
+ "RowLevelPermissionPredicate": {
+ "id": [
+ 1
+ ],
+ "fieldMetadataId": [
+ 1
+ ],
+ "objectMetadataId": [
+ 1
+ ],
+ "operand": [
+ 45
+ ],
+ "subFieldName": [
+ 1
+ ],
+ "workspaceMemberFieldMetadataId": [
+ 1
+ ],
+ "workspaceMemberSubFieldName": [
+ 1
+ ],
+ "rowLevelPermissionPredicateGroupId": [
+ 1
+ ],
+ "positionInRowLevelPermissionPredicateGroup": [
+ 16
+ ],
+ "roleId": [
+ 1
+ ],
+ "value": [
+ 5
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "RowLevelPermissionPredicateOperand": {},
+ "ObjectPermission": {
+ "objectMetadataId": [
+ 4
+ ],
+ "canReadObjectRecords": [
+ 3
+ ],
+ "canUpdateObjectRecords": [
+ 3
+ ],
+ "canSoftDeleteObjectRecords": [
+ 3
+ ],
+ "canDestroyObjectRecords": [
+ 3
+ ],
+ "restrictedFields": [
+ 5
+ ],
+ "rowLevelPermissionPredicates": [
+ 44
+ ],
+ "rowLevelPermissionPredicateGroups": [
+ 42
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "RolePermissionFlag": {
+ "id": [
+ 4
+ ],
+ "roleId": [
+ 4
+ ],
+ "flag": [
+ 1
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "ApiKeyForRole": {
+ "id": [
+ 4
+ ],
+ "name": [
+ 1
+ ],
+ "expiresAt": [
+ 6
+ ],
+ "revokedAt": [
+ 6
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "Role": {
+ "id": [
+ 4
+ ],
+ "universalIdentifier": [
+ 4
+ ],
+ "label": [
+ 1
+ ],
+ "description": [
+ 1
+ ],
+ "icon": [
+ 1
+ ],
+ "isEditable": [
+ 3
+ ],
+ "canBeAssignedToUsers": [
+ 3
+ ],
+ "canBeAssignedToAgents": [
+ 3
+ ],
+ "canBeAssignedToApiKeys": [
+ 3
+ ],
+ "workspaceMembers": [
+ 37
+ ],
+ "agents": [
+ 11
+ ],
+ "apiKeys": [
+ 48
+ ],
+ "canUpdateAllSettings": [
+ 3
+ ],
+ "canAccessAllTools": [
+ 3
+ ],
+ "canReadAllObjectRecords": [
+ 3
+ ],
+ "canUpdateAllObjectRecords": [
+ 3
+ ],
+ "canSoftDeleteAllObjectRecords": [
+ 3
+ ],
+ "canDestroyAllObjectRecords": [
+ 3
+ ],
+ "permissionFlags": [
+ 47
+ ],
+ "objectPermissions": [
+ 46
+ ],
+ "fieldPermissions": [
+ 41
+ ],
+ "rowLevelPermissionPredicates": [
+ 44
+ ],
+ "rowLevelPermissionPredicateGroups": [
+ 42
],
"__typename": [
1
@@ -1236,7 +1125,7 @@ export default {
},
"Application": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -1248,7 +1137,7 @@ export default {
1
],
"logoFileId": [
- 3
+ 4
],
"version": [
1
@@ -1260,55 +1149,55 @@ export default {
1
],
"packageJsonFileId": [
- 3
+ 4
],
"yarnLockChecksum": [
1
],
"yarnLockFileId": [
- 3
+ 4
],
"availablePackages": [
- 7
+ 5
],
"applicationRegistrationId": [
- 3
+ 4
],
"canBeUninstalled": [
- 6
+ 3
],
"autoUpgrade": [
- 6
+ 3
],
"defaultRoleId": [
1
],
"settingsCustomTabFrontComponentId": [
- 3
+ 4
],
"defaultLogicFunctionRole": [
- 29
+ 49
],
"agents": [
- 25
+ 11
],
"frontComponents": [
- 34
+ 14
],
"commandMenuItems": [
- 35
+ 15
],
"logicFunctions": [
- 41
+ 22
],
"objects": [
- 47
+ 28
],
"applicationVariables": [
- 31
+ 10
],
"applicationRegistration": [
- 30
+ 8
],
"logoUrl": [
1
@@ -1317,49 +1206,102 @@ export default {
1
]
},
- "ViewField": {
+ "TwoFactorAuthenticationMethodSummary": {
+ "twoFactorAuthenticationMethodId": [
+ 4
+ ],
+ "status": [
+ 1
+ ],
+ "strategy": [
+ 1
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "UserWorkspace": {
"id": [
- 3
+ 4
],
- "fieldMetadataId": [
- 3
+ "user": [
+ 73
],
- "isVisible": [
- 6
+ "userId": [
+ 4
],
- "size": [
- 12
- ],
- "position": [
- 12
- ],
- "aggregateOperation": [
- 56
- ],
- "viewId": [
- 3
- ],
- "viewFieldGroupId": [
- 3
- ],
- "workspaceId": [
- 3
+ "locale": [
+ 1
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
- ],
- "isActive": [
6
],
"deletedAt": [
+ 6
+ ],
+ "permissionFlags": [
+ 53
+ ],
+ "objectPermissions": [
+ 46
+ ],
+ "objectsPermissions": [
+ 46
+ ],
+ "twoFactorAuthenticationMethodSummary": [
+ 51
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "PermissionFlagType": {},
+ "ViewField": {
+ "id": [
4
],
- "isOverridden": [
+ "fieldMetadataId": [
+ 4
+ ],
+ "isVisible": [
+ 3
+ ],
+ "size": [
+ 16
+ ],
+ "position": [
+ 16
+ ],
+ "aggregateOperation": [
+ 55
+ ],
+ "viewId": [
+ 4
+ ],
+ "viewFieldGroupId": [
+ 4
+ ],
+ "workspaceId": [
+ 4
+ ],
+ "createdAt": [
6
],
+ "updatedAt": [
+ 6
+ ],
+ "isActive": [
+ 3
+ ],
+ "deletedAt": [
+ 6
+ ],
+ "isOverridden": [
+ 3
+ ],
"__typename": [
1
]
@@ -1367,31 +1309,31 @@ export default {
"AggregateOperations": {},
"ViewFilterGroup": {
"id": [
- 3
+ 4
],
"parentViewFilterGroupId": [
- 3
+ 4
],
"logicalOperator": [
- 58
+ 57
],
"positionInViewFilterGroup": [
- 12
+ 16
],
"viewId": [
- 3
+ 4
],
"workspaceId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"deletedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -1400,43 +1342,43 @@ export default {
"ViewFilterGroupLogicalOperator": {},
"ViewFilter": {
"id": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"operand": [
- 60
+ 59
],
"value": [
- 7
+ 5
],
"viewFilterGroupId": [
- 3
+ 4
],
"positionInViewFilterGroup": [
- 12
+ 16
],
"subFieldName": [
1
],
"relationTargetFieldMetadataId": [
- 3
+ 4
],
"viewId": [
- 3
+ 4
],
"workspaceId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"deletedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -1445,31 +1387,31 @@ export default {
"ViewFilterOperand": {},
"ViewGroup": {
"id": [
- 3
+ 4
],
"isVisible": [
- 6
+ 3
],
"fieldValue": [
1
],
"position": [
- 12
+ 16
],
"viewId": [
- 3
+ 4
],
"workspaceId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"deletedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -1477,31 +1419,31 @@ export default {
},
"ViewSort": {
"id": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"direction": [
- 63
+ 62
],
"subFieldName": [
1
],
"viewId": [
- 3
+ 4
],
"workspaceId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"deletedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -1510,40 +1452,40 @@ export default {
"ViewSortDirection": {},
"ViewFieldGroup": {
"id": [
- 3
+ 4
],
"name": [
1
],
"position": [
- 12
+ 16
],
"isVisible": [
- 6
+ 3
],
"viewId": [
- 3
+ 4
],
"workspaceId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"isActive": [
- 6
+ 3
],
"deletedAt": [
- 4
+ 6
],
"viewFields": [
- 55
+ 54
],
"isOverridden": [
- 6
+ 3
],
"__typename": [
1
@@ -1551,100 +1493,100 @@ export default {
},
"View": {
"id": [
- 3
+ 4
],
"name": [
1
],
"objectMetadataId": [
- 3
+ 4
],
"type": [
- 66
+ 65
],
"key": [
- 67
+ 66
],
"icon": [
1
],
"position": [
- 12
+ 16
],
"isCompact": [
- 6
+ 3
],
"isCustom": [
- 6
+ 3
],
"openRecordIn": [
- 68
+ 67
],
"kanbanAggregateOperation": [
- 56
+ 55
],
"kanbanAggregateOperationFieldMetadataId": [
- 3
+ 4
],
"mainGroupByFieldMetadataId": [
- 3
+ 4
],
"shouldHideEmptyGroups": [
- 6
+ 3
],
"kanbanColumnWidth": [
- 21
+ 30
],
"calendarFieldMetadataId": [
- 3
+ 4
],
"calendarEndFieldMetadataId": [
- 3
+ 4
],
"workspaceId": [
- 3
+ 4
],
"anyFieldFilterValue": [
1
],
"calendarLayout": [
- 69
+ 68
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"deletedAt": [
- 4
+ 6
],
"viewFields": [
- 55
+ 54
],
"viewFilters": [
- 59
+ 58
],
"viewFilterGroups": [
- 57
+ 56
],
"viewSorts": [
- 62
- ],
- "viewGroups": [
61
],
+ "viewGroups": [
+ 60
+ ],
"viewFieldGroups": [
- 64
+ 63
],
"visibility": [
- 70
+ 69
],
"createdByUserWorkspaceId": [
- 3
+ 4
],
"isActive": [
- 6
+ 3
],
"__typename": [
1
@@ -1657,7 +1599,7 @@ export default {
"ViewVisibility": {},
"Workspace": {
"id": [
- 3
+ 4
],
"displayName": [
1
@@ -1666,61 +1608,61 @@ export default {
1
],
"logoFileId": [
- 3
+ 4
],
"inviteHash": [
1
],
"deletedAt": [
- 4
+ 6
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"allowImpersonation": [
- 6
+ 3
],
"isPublicInviteLinkEnabled": [
- 6
+ 3
],
"workspaceDiscoverability": [
- 72
+ 71
],
"trashRetentionDays": [
- 12
+ 16
],
"eventLogRetentionDays": [
- 12
+ 16
],
"workspaceMembersCount": [
- 12
+ 16
],
"activationStatus": [
- 73
+ 72
],
"views": [
- 65
+ 64
],
"viewFields": [
- 55
+ 54
],
"viewFilters": [
- 59
+ 58
],
"viewFilterGroups": [
- 57
+ 56
],
"viewGroups": [
- 61
+ 60
],
"viewSorts": [
- 62
+ 61
],
"metadataVersion": [
- 12
+ 16
],
"databaseSchema": [
1
@@ -1732,37 +1674,37 @@ export default {
1
],
"isGoogleAuthEnabled": [
- 6
+ 3
],
"isGoogleAuthBypassEnabled": [
- 6
+ 3
],
"isTwoFactorAuthenticationEnforced": [
- 6
+ 3
],
"isPasswordAuthEnabled": [
- 6
+ 3
],
"isPasswordAuthBypassEnabled": [
- 6
+ 3
],
"isMicrosoftAuthEnabled": [
- 6
+ 3
],
"isMicrosoftAuthBypassEnabled": [
- 6
+ 3
],
"isCustomDomainEnabled": [
- 6
+ 3
],
"isInternalMessagesImportEnabled": [
- 6
+ 3
],
"editableProfileFields": [
1
],
"defaultRole": [
- 29
+ 49
],
"fastModel": [
1
@@ -1777,13 +1719,13 @@ export default {
1
],
"useRecommendedModels": [
- 6
+ 3
],
"routerModel": [
1
],
"workspaceCustomApplication": [
- 54
+ 50
],
"featureFlags": [
168
@@ -1792,7 +1734,7 @@ export default {
144
],
"installedApplications": [
- 54
+ 50
],
"currentBillingSubscription": [
144
@@ -1804,10 +1746,10 @@ export default {
231
],
"hasValidSignedEnterpriseKey": [
- 6
+ 3
],
"hasValidEnterpriseValidityToken": [
- 6
+ 3
],
"workspaceUrls": [
170
@@ -1823,7 +1765,7 @@ export default {
"WorkspaceActivationStatus": {},
"User": {
"id": [
- 3
+ 4
],
"firstName": [
1
@@ -1835,61 +1777,61 @@ export default {
1
],
"isEmailVerified": [
- 6
+ 3
],
"disabled": [
- 6
+ 3
],
"canImpersonate": [
- 6
+ 3
],
"canAccessFullAdminPanel": [
- 6
+ 3
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"deletedAt": [
- 4
+ 6
],
"locale": [
1
],
"workspaceMember": [
- 20
+ 37
],
"userWorkspaces": [
- 17
+ 52
],
"onboardingStatus": [
- 75
+ 74
],
"currentWorkspace": [
- 71
+ 70
],
"currentUserWorkspace": [
- 17
+ 52
],
"userVars": [
- 76
+ 75
],
"workspaceMembers": [
- 20
+ 37
],
"deletedWorkspaceMembers": [
212
],
"hasPassword": [
- 6
+ 3
],
"supportUserHash": [
1
],
"workspaces": [
- 17
+ 52
],
"availableWorkspaces": [
211
@@ -1900,6 +1842,65 @@ export default {
},
"OnboardingStatus": {},
"JSONObject": {},
+ "ApplicationRegistration": {
+ "id": [
+ 4
+ ],
+ "universalIdentifier": [
+ 1
+ ],
+ "name": [
+ 1
+ ],
+ "oAuthClientId": [
+ 1
+ ],
+ "oAuthRedirectUris": [
+ 1
+ ],
+ "oAuthScopes": [
+ 1
+ ],
+ "ownerWorkspaceId": [
+ 4
+ ],
+ "sourceType": [
+ 9
+ ],
+ "sourcePackage": [
+ 1
+ ],
+ "latestAvailableVersion": [
+ 1
+ ],
+ "isListed": [
+ 3
+ ],
+ "isVetted": [
+ 3
+ ],
+ "isPreInstalled": [
+ 3
+ ],
+ "createdAt": [
+ 6
+ ],
+ "updatedAt": [
+ 6
+ ],
+ "isConfigured": [
+ 3
+ ],
+ "logoUrl": [
+ 1
+ ],
+ "galleryImagesUrls": [
+ 1
+ ],
+ "__typename": [
+ 1
+ ]
+ },
"SdkClientChecksums": {
"core": [
1
@@ -1913,7 +1914,7 @@ export default {
},
"RatioAggregateConfig": {
"fieldMetadataId": [
- 3
+ 4
],
"optionValue": [
1
@@ -1935,16 +1936,16 @@ export default {
},
"GridPosition": {
"row": [
- 12
+ 16
],
"column": [
- 12
+ 16
],
"rowSpan": [
- 12
+ 16
],
"columnSpan": [
- 12
+ 16
],
"__typename": [
1
@@ -1952,13 +1953,13 @@ export default {
},
"PageLayoutWidget": {
"id": [
- 3
+ 4
],
"applicationId": [
- 3
+ 4
],
"pageLayoutTabId": [
- 3
+ 4
],
"title": [
1
@@ -1967,7 +1968,7 @@ export default {
82
],
"objectMetadataId": [
- 3
+ 4
],
"gridPosition": [
80
@@ -1979,25 +1980,25 @@ export default {
88
],
"conditionalDisplay": [
- 7
+ 5
],
"conditionalAvailabilityExpression": [
1
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"isActive": [
- 6
+ 3
],
"deletedAt": [
- 4
+ 6
],
"isOverridden": [
- 6
+ 3
],
"__typename": [
1
@@ -2023,16 +2024,16 @@ export default {
85
],
"row": [
- 21
+ 30
],
"column": [
- 21
+ 30
],
"rowSpan": [
- 21
+ 30
],
"columnSpan": [
- 21
+ 30
],
"__typename": [
1
@@ -2044,7 +2045,7 @@ export default {
85
],
"index": [
- 21
+ 30
],
"__typename": [
1
@@ -2134,16 +2135,16 @@ export default {
90
],
"aggregateFieldMetadataId": [
- 3
+ 4
],
"aggregateOperation": [
- 56
+ 55
],
"label": [
1
],
"displayDataLabel": [
- 6
+ 3
],
"numberFormat": [
91
@@ -2152,13 +2153,13 @@ export default {
1
],
"filter": [
- 7
+ 5
],
"timezone": [
1
],
"firstDayOfTheWeek": [
- 21
+ 30
],
"prefix": [
1
@@ -2191,13 +2192,13 @@ export default {
90
],
"aggregateFieldMetadataId": [
- 3
+ 4
],
"aggregateOperation": [
- 56
+ 55
],
"groupByFieldMetadataId": [
- 3
+ 4
],
"groupBySubFieldName": [
1
@@ -2212,19 +2213,19 @@ export default {
1
],
"displayDataLabel": [
- 6
+ 3
],
"showCenterMetric": [
- 6
+ 3
],
"displayLegend": [
- 6
+ 3
],
"hideEmptyCategory": [
- 6
+ 3
],
"splitMultiValueFields": [
- 6
+ 3
],
"description": [
1
@@ -2233,13 +2234,13 @@ export default {
1
],
"filter": [
- 7
+ 5
],
"timezone": [
1
],
"firstDayOfTheWeek": [
- 21
+ 30
],
"__typename": [
1
@@ -2252,13 +2253,13 @@ export default {
90
],
"aggregateFieldMetadataId": [
- 3
+ 4
],
"aggregateOperation": [
- 56
+ 55
],
"primaryAxisGroupByFieldMetadataId": [
- 3
+ 4
],
"primaryAxisGroupBySubFieldName": [
1
@@ -2273,7 +2274,7 @@ export default {
1
],
"secondaryAxisGroupByFieldMetadataId": [
- 3
+ 4
],
"secondaryAxisGroupBySubFieldName": [
1
@@ -2288,25 +2289,25 @@ export default {
1
],
"omitNullValues": [
- 6
+ 3
],
"splitMultiValueFields": [
- 6
+ 3
],
"axisNameDisplay": [
97
],
"displayDataLabel": [
- 6
+ 3
],
"displayLegend": [
- 6
+ 3
],
"rangeMin": [
- 12
+ 16
],
"rangeMax": [
- 12
+ 16
],
"description": [
1
@@ -2315,19 +2316,19 @@ export default {
1
],
"filter": [
- 7
+ 5
],
"isStacked": [
- 6
+ 3
],
"isCumulative": [
- 6
+ 3
],
"timezone": [
1
],
"firstDayOfTheWeek": [
- 21
+ 30
],
"__typename": [
1
@@ -2350,13 +2351,13 @@ export default {
90
],
"aggregateFieldMetadataId": [
- 3
+ 4
],
"aggregateOperation": [
- 56
+ 55
],
"primaryAxisGroupByFieldMetadataId": [
- 3
+ 4
],
"primaryAxisGroupBySubFieldName": [
1
@@ -2371,7 +2372,7 @@ export default {
1
],
"secondaryAxisGroupByFieldMetadataId": [
- 3
+ 4
],
"secondaryAxisGroupBySubFieldName": [
1
@@ -2386,25 +2387,25 @@ export default {
1
],
"omitNullValues": [
- 6
+ 3
],
"splitMultiValueFields": [
- 6
+ 3
],
"axisNameDisplay": [
97
],
"displayDataLabel": [
- 6
+ 3
],
"displayLegend": [
- 6
+ 3
],
"rangeMin": [
- 12
+ 16
],
"rangeMax": [
- 12
+ 16
],
"description": [
1
@@ -2413,7 +2414,7 @@ export default {
1
],
"filter": [
- 7
+ 5
],
"groupMode": [
100
@@ -2422,13 +2423,13 @@ export default {
101
],
"isCumulative": [
- 6
+ 3
],
"timezone": [
1
],
"firstDayOfTheWeek": [
- 21
+ 30
],
"__typename": [
1
@@ -2449,7 +2450,7 @@ export default {
90
],
"frontComponentId": [
- 3
+ 4
],
"__typename": [
1
@@ -2505,10 +2506,10 @@ export default {
1
],
"newFieldDefaultVisibility": [
- 6
+ 3
],
"shouldAllowUserToSeeHiddenFields": [
- 6
+ 3
],
"__typename": [
1
@@ -2562,7 +2563,7 @@ export default {
1
],
"recordLimit": [
- 21
+ 30
],
"__typename": [
1
@@ -2594,19 +2595,19 @@ export default {
},
"PageLayoutTab": {
"id": [
- 3
+ 4
],
"applicationId": [
- 3
+ 4
],
"title": [
1
],
"position": [
- 12
+ 16
],
"pageLayoutId": [
- 3
+ 4
],
"widgets": [
81
@@ -2618,19 +2619,19 @@ export default {
85
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"isActive": [
- 6
+ 3
],
"deletedAt": [
- 4
+ 6
],
"isOverridden": [
- 6
+ 3
],
"__typename": [
1
@@ -2638,7 +2639,7 @@ export default {
},
"PageLayout": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -2647,25 +2648,25 @@ export default {
121
],
"objectMetadataId": [
- 3
+ 4
],
"tabs": [
119
],
"defaultTabToFocusOnMobileAndSidePanelId": [
- 3
+ 4
],
"universalIdentifier": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"deletedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -2677,7 +2678,7 @@ export default {
1
],
"isClientCredentialsConfigured": [
- 6
+ 3
],
"__typename": [
1
@@ -2685,7 +2686,7 @@ export default {
},
"ApplicationConnectionProvider": {
"id": [
- 3
+ 4
],
"applicationId": [
1
@@ -2708,13 +2709,13 @@ export default {
},
"EnterpriseLicenseInfoDTO": {
"isValid": [
- 6
+ 3
],
"licensee": [
1
],
"expiresAt": [
- 4
+ 6
],
"subscriptionId": [
1
@@ -2731,16 +2732,16 @@ export default {
1
],
"expiresAt": [
- 4
+ 6
],
"cancelAt": [
- 4
+ 6
],
"currentPeriodEnd": [
- 4
+ 6
],
"isCancellationScheduled": [
- 6
+ 3
],
"__typename": [
1
@@ -2748,16 +2749,16 @@ export default {
},
"ApprovedAccessDomain": {
"id": [
- 3
+ 4
],
"domain": [
1
],
"isValidated": [
- 6
+ 3
],
"createdAt": [
- 4
+ 6
],
"__typename": [
1
@@ -2765,16 +2766,16 @@ export default {
},
"FileWithSignedUrl": {
"id": [
- 3
+ 4
],
"path": [
1
],
"size": [
- 12
+ 16
],
"createdAt": [
- 4
+ 6
],
"url": [
1
@@ -2785,7 +2786,7 @@ export default {
},
"FileUploadTarget": {
"fileId": [
- 3
+ 4
],
"uploadUrl": [
1
@@ -2794,7 +2795,7 @@ export default {
1
],
"expiresAt": [
- 4
+ 6
],
"__typename": [
1
@@ -2805,7 +2806,7 @@ export default {
1
],
"quantity": [
- 12
+ 16
],
"__typename": [
1
@@ -2813,10 +2814,10 @@ export default {
},
"BillingSubscriptionSchedulePhase": {
"start_date": [
- 12
+ 16
],
"end_date": [
- 12
+ 16
],
"items": [
129
@@ -2847,7 +2848,7 @@ export default {
136
],
"unitAmount": [
- 12
+ 16
],
"stripePriceId": [
1
@@ -2856,7 +2857,7 @@ export default {
133
],
"creditAmount": [
- 12
+ 16
],
"__typename": [
1
@@ -2865,13 +2866,13 @@ export default {
"SubscriptionInterval": {},
"BillingPriceTier": {
"upTo": [
- 12
+ 16
],
"flatAmount": [
- 12
+ 16
],
"unitAmount": [
- 12
+ 16
],
"__typename": [
1
@@ -2953,13 +2954,13 @@ export default {
},
"BillingSubscriptionItem": {
"id": [
- 3
+ 4
],
"hasReachedCurrentPeriodCap": [
- 6
+ 3
],
"quantity": [
- 12
+ 16
],
"stripePriceId": [
1
@@ -2973,10 +2974,10 @@ export default {
},
"BillingCustomer": {
"id": [
- 3
+ 4
],
"hasPaymentMethod": [
- 6
+ 3
],
"__typename": [
1
@@ -2984,7 +2985,7 @@ export default {
},
"BillingSubscription": {
"id": [
- 3
+ 4
],
"status": [
145
@@ -2996,16 +2997,16 @@ export default {
142
],
"currentPeriodEnd": [
- 4
+ 6
],
"metadata": [
- 7
+ 5
],
"phases": [
130
],
"cancelAt": [
- 4
+ 6
],
"__typename": [
1
@@ -3017,7 +3018,7 @@ export default {
145
],
"hasPaymentMethod": [
- 6
+ 3
],
"billingPortalUrl": [
1
@@ -3031,25 +3032,25 @@ export default {
134
],
"periodStart": [
- 4
+ 6
],
"periodEnd": [
- 4
+ 6
],
"usedCredits": [
- 12
+ 16
],
"grantedCredits": [
- 12
+ 16
],
"rolloverCredits": [
- 12
+ 16
],
"totalGrantedCredits": [
- 12
+ 16
],
"unitPriceCents": [
- 12
+ 16
],
"__typename": [
1
@@ -3115,7 +3116,7 @@ export default {
},
"OnboardingStepSuccess": {
"success": [
- 6
+ 3
],
"__typename": [
1
@@ -3123,16 +3124,16 @@ export default {
},
"WorkspaceInvitation": {
"id": [
- 3
+ 4
],
"email": [
1
],
"roleId": [
- 3
+ 4
],
"expiresAt": [
- 4
+ 6
],
"__typename": [
1
@@ -3140,7 +3141,7 @@ export default {
},
"SendInvitations": {
"success": [
- 6
+ 3
],
"errors": [
1
@@ -3154,7 +3155,7 @@ export default {
},
"RecordIdentifier": {
"id": [
- 3
+ 4
],
"labelIdentifier": [
1
@@ -3168,19 +3169,19 @@ export default {
},
"NavigationMenuItem": {
"id": [
- 3
+ 4
],
"userWorkspaceId": [
- 3
+ 4
],
"targetRecordId": [
- 3
+ 4
],
"targetObjectMetadataId": [
- 3
+ 4
],
"viewId": [
- 3
+ 4
],
"type": [
158
@@ -3198,22 +3199,22 @@ export default {
1
],
"folderId": [
- 3
+ 4
],
"pageLayoutId": [
- 3
+ 4
],
"position": [
- 12
+ 16
],
"applicationId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"targetRecordIdentifier": [
156
@@ -3228,13 +3229,13 @@ export default {
1
],
"before": [
- 7
+ 5
],
"after": [
- 7
+ 5
],
"diff": [
- 7
+ 5
],
"__typename": [
1
@@ -3312,19 +3313,19 @@ export default {
},
"LogicFunctionExecutionResult": {
"data": [
- 7
+ 5
],
"logs": [
1
],
"duration": [
- 12
+ 16
],
"status": [
167
],
"error": [
- 7
+ 5
],
"__typename": [
1
@@ -3336,7 +3337,7 @@ export default {
169
],
"value": [
- 6
+ 3
],
"__typename": [
1
@@ -3356,7 +3357,7 @@ export default {
},
"ApplicationRegistrationVariableDTO": {
"id": [
- 3
+ 4
],
"key": [
1
@@ -3368,25 +3369,25 @@ export default {
1
],
"isSecret": [
- 6
+ 3
],
"isRequired": [
- 6
+ 3
],
"isFilled": [
- 6
+ 3
],
"type": [
1
],
"options": [
- 7
+ 5
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -3397,7 +3398,7 @@ export default {
1
],
"count": [
- 21
+ 30
],
"__typename": [
1
@@ -3405,7 +3406,7 @@ export default {
},
"ApplicationRegistrationStats": {
"activeInstalls": [
- 21
+ 30
],
"mostInstalledVersion": [
1
@@ -3419,10 +3420,10 @@ export default {
},
"BillingTrialPeriod": {
"duration": [
- 12
+ 16
],
"isCreditCardRequired": [
- 6
+ 3
],
"__typename": [
1
@@ -3430,7 +3431,7 @@ export default {
},
"SSOIdentityProvider": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -3455,16 +3456,16 @@ export default {
175
],
"google": [
- 6
+ 3
],
"magicLink": [
- 6
+ 3
],
"password": [
- 6
+ 3
],
"microsoft": [
- 6
+ 3
],
"__typename": [
1
@@ -3472,13 +3473,13 @@ export default {
},
"AuthBypassProviders": {
"google": [
- 6
+ 3
],
"password": [
- 6
+ 3
],
"microsoft": [
- 6
+ 3
],
"__typename": [
1
@@ -3486,7 +3487,7 @@ export default {
},
"PublicWorkspaceData": {
"id": [
- 3
+ 4
],
"authProviders": [
178
@@ -3509,7 +3510,7 @@ export default {
},
"PublicWorkspaceDataSummary": {
"id": [
- 3
+ 4
],
"logo": [
1
@@ -3523,10 +3524,10 @@ export default {
},
"NativeModelCapabilities": {
"webSearch": [
- 6
+ 3
],
"twitterSearch": [
- 6
+ 3
],
"__typename": [
1
@@ -3549,19 +3550,19 @@ export default {
1
],
"inputCostPerMillionTokens": [
- 12
+ 16
],
"outputCostPerMillionTokens": [
- 12
+ 16
],
"nativeCapabilities": [
182
],
"isDeprecated": [
- 6
+ 3
],
"isRecommended": [
- 6
+ 3
],
"providerName": [
1
@@ -3570,10 +3571,10 @@ export default {
1
],
"contextWindowTokens": [
- 12
+ 16
],
"maxOutputTokens": [
- 12
+ 16
],
"dataResidency": [
1
@@ -3585,7 +3586,7 @@ export default {
"ModelFamily": {},
"Billing": {
"isBillingEnabled": [
- 6
+ 3
],
"billingUrl": [
1
@@ -3640,7 +3641,7 @@ export default {
"CaptchaDriverType": {},
"ApiConfig": {
"mutationMaximumAffectedRecords": [
- 12
+ 16
],
"__typename": [
1
@@ -3673,10 +3674,10 @@ export default {
},
"ClientConfigMaintenanceMode": {
"startAt": [
- 4
+ 6
],
"endAt": [
- 4
+ 6
],
"link": [
1
@@ -3699,13 +3700,13 @@ export default {
183
],
"signInPrefilled": [
- 6
+ 3
],
"isMultiWorkspaceEnabled": [
- 6
+ 3
],
"isEmailVerificationRequired": [
- 6
+ 3
],
"defaultSubdomain": [
1
@@ -3717,13 +3718,13 @@ export default {
1
],
"analyticsEnabled": [
- 6
+ 3
],
"support": [
186
],
"isAttachmentPreviewEnabled": [
- 6
+ 3
],
"sentry": [
188
@@ -3735,46 +3736,46 @@ export default {
191
],
"canManageFeatureFlags": [
- 6
+ 3
],
"publicFeatureFlags": [
193
],
"isMicrosoftMessagingEnabled": [
- 6
+ 3
],
"isMicrosoftCalendarEnabled": [
- 6
+ 3
],
"isGoogleMessagingEnabled": [
- 6
+ 3
],
"isGoogleCalendarEnabled": [
- 6
+ 3
],
"isConfigVariablesInDbEnabled": [
- 6
+ 3
],
"isImapSmtpCaldavEnabled": [
- 6
+ 3
],
"isEmailingDomainInDemoMode": [
- 6
+ 3
],
"allowRequestsToTwentyIcons": [
- 6
+ 3
],
"calendarBookingPageId": [
1
],
"isCloudflareIntegrationEnabled": [
- 6
+ 3
],
"isClickHouseConfigured": [
- 6
+ 3
],
"isWorkspaceSchemaDDLLocked": [
- 6
+ 3
],
"enterpriseInstanceType": [
1
@@ -3794,7 +3795,7 @@ export default {
1
],
"creditsUsed": [
- 12
+ 16
],
"__typename": [
1
@@ -3823,7 +3824,7 @@ export default {
1
],
"isOwned": [
- 6
+ 3
],
"__typename": [
1
@@ -3831,7 +3832,7 @@ export default {
},
"CreateApplicationRegistration": {
"applicationRegistration": [
- 8
+ 76
],
"clientSecret": [
1
@@ -3842,7 +3843,7 @@ export default {
},
"PublicApplicationRegistration": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -3903,7 +3904,7 @@ export default {
"ID": {},
"ResendEmailVerificationToken": {
"success": [
- 6
+ 3
],
"__typename": [
1
@@ -3911,7 +3912,7 @@ export default {
},
"DeleteSso": {
"identityProviderId": [
- 3
+ 4
],
"__typename": [
1
@@ -3919,7 +3920,7 @@ export default {
},
"EditSso": {
"id": [
- 3
+ 4
],
"type": [
176
@@ -3942,7 +3943,7 @@ export default {
1
],
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -3953,7 +3954,7 @@ export default {
176
],
"id": [
- 3
+ 4
],
"issuer": [
1
@@ -3973,7 +3974,7 @@ export default {
},
"SetupSso": {
"id": [
- 3
+ 4
],
"type": [
176
@@ -3996,7 +3997,7 @@ export default {
176
],
"id": [
- 3
+ 4
],
"issuer": [
1
@@ -4013,7 +4014,7 @@ export default {
},
"AvailableWorkspace": {
"id": [
- 3
+ 4
],
"displayName": [
1
@@ -4053,10 +4054,10 @@ export default {
},
"DeletedWorkspaceMember": {
"id": [
- 3
+ 4
],
"name": [
- 19
+ 36
],
"userEmail": [
1
@@ -4065,7 +4066,7 @@ export default {
1
],
"userWorkspaceId": [
- 3
+ 4
],
"__typename": [
1
@@ -4094,7 +4095,7 @@ export default {
1
],
"isVetted": [
- 6
+ 3
],
"__typename": [
1
@@ -4108,16 +4109,16 @@ export default {
1
],
"canReadObjectRecords": [
- 6
+ 3
],
"canUpdateObjectRecords": [
- 6
+ 3
],
"canSoftDeleteObjectRecords": [
- 6
+ 3
],
"canDestroyObjectRecords": [
- 6
+ 3
],
"__typename": [
1
@@ -4134,10 +4135,10 @@ export default {
1
],
"canReadFieldValue": [
- 6
+ 3
],
"canUpdateFieldValue": [
- 6
+ 3
],
"__typename": [
1
@@ -4157,22 +4158,22 @@ export default {
1
],
"canUpdateAllSettings": [
- 6
+ 3
],
"canAccessAllTools": [
- 6
+ 3
],
"canReadAllObjectRecords": [
- 6
+ 3
],
"canUpdateAllObjectRecords": [
- 6
+ 3
],
"canSoftDeleteAllObjectRecords": [
- 6
+ 3
],
"canDestroyAllObjectRecords": [
- 6
+ 3
],
"permissionFlagUniversalIdentifiers": [
1
@@ -4207,10 +4208,10 @@ export default {
1
],
"isListed": [
- 6
+ 3
],
"isVetted": [
- 6
+ 3
],
"description": [
1
@@ -4252,7 +4253,7 @@ export default {
216
],
"manifest": [
- 7
+ 5
],
"__typename": [
1
@@ -4263,16 +4264,16 @@ export default {
219
],
"sourceObjectMetadata": [
- 47
+ 28
],
"targetObjectMetadata": [
- 47
+ 28
],
"sourceFieldMetadata": [
- 43
+ 24
],
"targetFieldMetadata": [
- 43
+ 24
],
"__typename": [
1
@@ -4281,22 +4282,22 @@ export default {
"RelationType": {},
"IndexField": {
"id": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"order": [
- 12
+ 16
],
"subFieldName": [
1
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -4307,7 +4308,7 @@ export default {
1
],
"totalCount": [
- 21
+ 30
],
"__typename": [
1
@@ -4315,22 +4316,22 @@ export default {
},
"SearchField": {
"id": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"tsVectorFieldMetadataId": [
- 3
+ 4
],
"position": [
- 12
+ 16
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -4338,10 +4339,10 @@ export default {
},
"ObjectEdge": {
"node": [
- 47
+ 28
],
"cursor": [
- 49
+ 31
],
"__typename": [
1
@@ -4349,16 +4350,16 @@ export default {
},
"PageInfo": {
"hasNextPage": [
- 6
+ 3
],
"hasPreviousPage": [
- 6
+ 3
],
"startCursor": [
- 49
+ 31
],
"endCursor": [
- 49
+ 31
],
"__typename": [
1
@@ -4377,10 +4378,10 @@ export default {
},
"IndexEdge": {
"node": [
- 45
+ 26
],
"cursor": [
- 49
+ 31
],
"__typename": [
1
@@ -4399,10 +4400,10 @@ export default {
},
"FieldEdge": {
"node": [
- 43
+ 24
],
"cursor": [
- 49
+ 31
],
"__typename": [
1
@@ -4435,7 +4436,7 @@ export default {
232
],
"value": [
- 6
+ 3
],
"__typename": [
1
@@ -4464,7 +4465,7 @@ export default {
},
"DomainValidRecords": {
"id": [
- 3
+ 4
],
"domain": [
1
@@ -4473,7 +4474,7 @@ export default {
233
],
"isCustomDomainEnabled": [
- 6
+ 3
],
"__typename": [
1
@@ -4481,10 +4482,10 @@ export default {
},
"UpsertRowLevelPermissionPredicatesResult": {
"predicates": [
- 14
+ 44
],
"predicateGroups": [
- 11
+ 42
],
"__typename": [
1
@@ -4503,7 +4504,7 @@ export default {
1
],
"port": [
- 12
+ 16
],
"username": [
1
@@ -4532,7 +4533,7 @@ export default {
},
"ConnectedAccountPublicDTO": {
"id": [
- 3
+ 4
],
"handle": [
1
@@ -4541,13 +4542,13 @@ export default {
1
],
"lastCredentialsRefreshedAt": [
- 4
+ 6
],
"authFailedAt": [
- 4
+ 6
],
"archivedAt": [
- 4
+ 6
],
"handleAliases": [
1
@@ -4556,16 +4557,16 @@ export default {
1
],
"lastSignedInAt": [
- 4
+ 6
],
"userWorkspaceId": [
- 3
+ 4
],
"connectionProviderId": [
- 3
+ 4
],
"applicationId": [
- 3
+ 4
],
"name": [
1
@@ -4574,10 +4575,10 @@ export default {
1
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"connectionParameters": [
239
@@ -4588,7 +4589,7 @@ export default {
},
"DeleteTwoFactorAuthenticationMethod": {
"success": [
- 6
+ 3
],
"__typename": [
1
@@ -4604,7 +4605,7 @@ export default {
},
"VerifyTwoFactorAuthenticationMethod": {
"success": [
- 6
+ 3
],
"__typename": [
1
@@ -4620,10 +4621,10 @@ export default {
},
"AuthTokenPair": {
"accessOrWorkspaceAgnosticToken": [
- 32
+ 12
],
"refreshToken": [
- 32
+ 12
],
"__typename": [
1
@@ -4642,7 +4643,7 @@ export default {
},
"EmailPasswordResetLink": {
"success": [
- 6
+ 3
],
"__typename": [
1
@@ -4656,7 +4657,7 @@ export default {
1
],
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -4664,7 +4665,7 @@ export default {
},
"InvalidatePassword": {
"success": [
- 6
+ 3
],
"__typename": [
1
@@ -4675,7 +4676,7 @@ export default {
170
],
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -4683,7 +4684,7 @@ export default {
},
"SignUp": {
"loginToken": [
- 32
+ 12
],
"workspace": [
250
@@ -4694,7 +4695,7 @@ export default {
},
"TransientToken": {
"transientToken": [
- 32
+ 12
],
"__typename": [
1
@@ -4702,13 +4703,13 @@ export default {
},
"ValidatePasswordResetToken": {
"id": [
- 3
+ 4
],
"email": [
1
],
"hasPassword": [
- 6
+ 3
],
"__typename": [
1
@@ -4716,7 +4717,7 @@ export default {
},
"VerifyEmailAndGetLoginToken": {
"loginToken": [
- 32
+ 12
],
"workspaceUrls": [
170
@@ -4727,10 +4728,10 @@ export default {
},
"SubdomainAvailabilityDTO": {
"isValid": [
- 6
+ 3
],
"available": [
- 6
+ 3
],
"suggestedSubdomain": [
1
@@ -4771,7 +4772,7 @@ export default {
},
"LoginToken": {
"loginToken": [
- 32
+ 12
],
"__typename": [
1
@@ -4779,13 +4780,13 @@ export default {
},
"CheckUserExist": {
"exists": [
- 6
+ 3
],
"availableWorkspacesCount": [
- 12
+ 16
],
"isEmailVerified": [
- 6
+ 3
],
"__typename": [
1
@@ -4793,7 +4794,7 @@ export default {
},
"WorkspaceInviteHashValid": {
"isValid": [
- 6
+ 3
],
"__typename": [
1
@@ -4801,7 +4802,7 @@ export default {
},
"Impersonate": {
"loginToken": [
- 32
+ 12
],
"workspace": [
250
@@ -4815,7 +4816,7 @@ export default {
1
],
"creditsUsed": [
- 12
+ 16
],
"__typename": [
1
@@ -4846,10 +4847,10 @@ export default {
263
],
"periodStart": [
- 4
+ 6
],
"periodEnd": [
- 4
+ 6
],
"userDailyUsage": [
264
@@ -4874,7 +4875,7 @@ export default {
1
],
"actions": [
- 7
+ 5
],
"__typename": [
1
@@ -4882,16 +4883,16 @@ export default {
},
"File": {
"id": [
- 3
+ 4
],
"path": [
1
],
"size": [
- 12
+ 16
],
"createdAt": [
- 4
+ 6
],
"__typename": [
1
@@ -4899,20 +4900,20 @@ export default {
},
"PublicDomain": {
"id": [
- 3
+ 4
],
"domain": [
1
],
"isValidated": [
- 6
- ],
- "applicationId": [
3
],
- "createdAt": [
+ "applicationId": [
4
],
+ "createdAt": [
+ 6
+ ],
"__typename": [
1
]
@@ -4928,7 +4929,7 @@ export default {
1
],
"priority": [
- 12
+ 16
],
"status": [
1
@@ -4939,13 +4940,13 @@ export default {
},
"EmailingDomain": {
"id": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"domain": [
1
@@ -4957,7 +4958,7 @@ export default {
270
],
"verifiedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -4966,7 +4967,7 @@ export default {
"EmailingDomainStatus": {},
"MessageChannel": {
"id": [
- 3
+ 4
],
"visibility": [
274
@@ -4978,7 +4979,7 @@ export default {
275
],
"isContactAutoCreationEnabled": [
- 6
+ 3
],
"contactAutoCreationPolicy": [
276
@@ -4987,19 +4988,19 @@ export default {
277
],
"excludeNonProfessionalEmails": [
- 6
+ 3
],
"excludeGroupEmails": [
- 6
+ 3
],
"pendingGroupEmailsAction": [
278
],
"isSyncEnabled": [
- 6
+ 3
],
"syncedAt": [
- 4
+ 6
],
"syncStatus": [
279
@@ -5008,22 +5009,22 @@ export default {
280
],
"syncStageStartedAt": [
- 4
+ 6
],
"throttleFailureCount": [
- 12
+ 16
],
"throttleRetryAfter": [
- 4
+ 6
],
"connectedAccountId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"connectedAccount": [
240
@@ -5052,22 +5053,22 @@ export default {
},
"CampaignAudiencePreviewDTO": {
"totalMembers": [
- 21
+ 30
],
"withoutEmail": [
- 21
+ 30
],
"duplicateEmails": [
- 21
+ 30
],
"globallyUnsubscribed": [
- 21
+ 30
],
"topicUnsubscribed": [
- 21
+ 30
],
"sendable": [
- 21
+ 30
],
"__typename": [
1
@@ -5083,13 +5084,13 @@ export default {
},
"CampaignSkippedRecipientsDTO": {
"noEmail": [
- 21
+ 30
],
"deduped": [
- 21
+ 30
],
"overCap": [
- 21
+ 30
],
"__typename": [
1
@@ -5100,7 +5101,7 @@ export default {
1
],
"queuedCount": [
- 21
+ 30
],
"skipped": [
284
@@ -5111,13 +5112,13 @@ export default {
},
"UnsubscribeTopic": {
"id": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"name": [
1
@@ -5146,10 +5147,10 @@ export default {
},
"Location": {
"lat": [
- 12
+ 16
],
"lng": [
- 12
+ 16
],
"__typename": [
1
@@ -5183,7 +5184,7 @@ export default {
1
],
"port": [
- 12
+ 16
],
"username": [
1
@@ -5214,7 +5215,7 @@ export default {
},
"ConnectedImapSmtpCaldavAccount": {
"id": [
- 3
+ 4
],
"handle": [
1
@@ -5223,7 +5224,7 @@ export default {
1
],
"userWorkspaceId": [
- 3
+ 4
],
"connectionParameters": [
292
@@ -5234,7 +5235,7 @@ export default {
},
"ImapSmtpCaldavConnectionSuccess": {
"success": [
- 6
+ 3
],
"connectedAccountId": [
1
@@ -5245,7 +5246,7 @@ export default {
},
"Webhook": {
"id": [
- 3
+ 4
],
"targetUrl": [
1
@@ -5260,16 +5261,16 @@ export default {
1
],
"applicationId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"deletedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -5295,7 +5296,7 @@ export default {
1
],
"inputSchema": [
- 7
+ 5
],
"__typename": [
1
@@ -5303,13 +5304,13 @@ export default {
},
"AgentMessagePart": {
"id": [
- 3
+ 4
],
"messageId": [
- 3
+ 4
],
"orderIndex": [
- 21
+ 30
],
"type": [
1
@@ -5327,22 +5328,22 @@ export default {
1
],
"toolInput": [
- 7
+ 5
],
"toolOutput": [
- 7
+ 5
],
"state": [
1
],
"providerExecuted": [
- 6
+ 3
],
"errorMessage": [
1
],
"errorDetails": [
- 7
+ 5
],
"sourceUrlSourceId": [
1
@@ -5372,16 +5373,16 @@ export default {
1
],
"fileId": [
- 3
+ 4
],
"fileUrl": [
1
],
"providerMetadata": [
- 7
+ 5
],
"createdAt": [
- 4
+ 6
],
"__typename": [
1
@@ -5389,13 +5390,13 @@ export default {
},
"RunAgentResult": {
"result": [
- 7
+ 5
],
"error": [
1
],
"success": [
- 6
+ 3
],
"__typename": [
1
@@ -5403,7 +5404,7 @@ export default {
},
"ChannelSyncSuccess": {
"success": [
- 6
+ 3
],
"__typename": [
1
@@ -5411,7 +5412,7 @@ export default {
},
"CreateCalendarEventOutput": {
"success": [
- 6
+ 3
],
"iCalUid": [
1
@@ -5439,7 +5440,7 @@ export default {
},
"BarChartData": {
"data": [
- 7
+ 5
],
"indexBy": [
1
@@ -5457,10 +5458,10 @@ export default {
1
],
"showLegend": [
- 6
+ 3
],
"showDataLabels": [
- 6
+ 3
],
"layout": [
101
@@ -5469,10 +5470,10 @@ export default {
100
],
"hasTooManyGroups": [
- 6
+ 3
],
"formattedToRawLookup": [
- 7
+ 5
],
"__typename": [
1
@@ -5483,7 +5484,7 @@ export default {
1
],
"y": [
- 12
+ 16
],
"__typename": [
1
@@ -5514,16 +5515,16 @@ export default {
1
],
"showLegend": [
- 6
+ 3
],
"showDataLabels": [
- 6
+ 3
],
"hasTooManyGroups": [
- 6
+ 3
],
"formattedToRawLookup": [
- 7
+ 5
],
"__typename": [
1
@@ -5534,7 +5535,7 @@ export default {
1
],
"value": [
- 12
+ 16
],
"__typename": [
1
@@ -5545,19 +5546,19 @@ export default {
306
],
"showLegend": [
- 6
+ 3
],
"showDataLabels": [
- 6
+ 3
],
"showCenterMetric": [
- 6
+ 3
],
"hasTooManyGroups": [
- 6
+ 3
],
"formattedToRawLookup": [
- 7
+ 5
],
"__typename": [
1
@@ -5565,16 +5566,16 @@ export default {
},
"DuplicatedDashboard": {
"id": [
- 3
+ 4
],
"title": [
1
],
"pageLayoutId": [
- 3
+ 4
],
"position": [
- 12
+ 16
],
"createdAt": [
1
@@ -5588,7 +5589,7 @@ export default {
},
"SendEmailOutput": {
"success": [
- 6
+ 3
],
"error": [
1
@@ -5602,7 +5603,7 @@ export default {
},
"Analytics": {
"success": [
- 6
+ 3
],
"__typename": [
1
@@ -5613,13 +5614,13 @@ export default {
1
],
"timestamp": [
- 4
+ 6
],
"userId": [
1
],
"properties": [
- 7
+ 5
],
"recordId": [
1
@@ -5628,7 +5629,7 @@ export default {
1
],
"isCustom": [
- 6
+ 3
],
"__typename": [
1
@@ -5639,7 +5640,7 @@ export default {
1
],
"hasNextPage": [
- 6
+ 3
],
"__typename": [
1
@@ -5650,7 +5651,7 @@ export default {
311
],
"totalCount": [
- 21
+ 30
],
"pageInfo": [
312
@@ -5661,7 +5662,7 @@ export default {
},
"Skill": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -5679,19 +5680,19 @@ export default {
1
],
"isCustom": [
- 6
- ],
- "isActive": [
- 6
- ],
- "applicationId": [
3
],
- "createdAt": [
+ "isActive": [
+ 3
+ ],
+ "applicationId": [
4
],
+ "createdAt": [
+ 6
+ ],
"updatedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -5699,16 +5700,16 @@ export default {
},
"AgentMessage": {
"id": [
- 3
+ 4
],
"threadId": [
- 3
+ 4
],
"turnId": [
- 3
+ 4
],
"agentId": [
- 3
+ 4
],
"role": [
1
@@ -5720,10 +5721,10 @@ export default {
297
],
"processedAt": [
- 4
+ 6
],
"createdAt": [
- 4
+ 6
],
"__typename": [
1
@@ -5737,34 +5738,34 @@ export default {
1
],
"totalInputTokens": [
- 21
+ 30
],
"totalOutputTokens": [
- 21
+ 30
],
"contextWindowTokens": [
- 21
+ 30
],
"conversationSize": [
- 21
+ 30
],
"totalInputCredits": [
- 12
+ 16
],
"totalOutputCredits": [
- 12
+ 16
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"deletedAt": [
- 4
+ 6
],
"lastMessageAt": [
- 4
+ 6
],
"__typename": [
1
@@ -5778,7 +5779,7 @@ export default {
1
],
"estimatedTokenCount": [
- 21
+ 30
],
"__typename": [
1
@@ -5789,7 +5790,7 @@ export default {
317
],
"estimatedTokenCount": [
- 21
+ 30
],
"__typename": [
1
@@ -5808,10 +5809,10 @@ export default {
},
"ChatStreamCatchupChunks": {
"chunks": [
- 7
+ 5
],
"maxSeq": [
- 21
+ 30
],
"error": [
319
@@ -5825,7 +5826,7 @@ export default {
1
],
"queued": [
- 6
+ 3
],
"streamId": [
1
@@ -5839,7 +5840,7 @@ export default {
1
],
"event": [
- 7
+ 5
],
"__typename": [
1
@@ -5847,19 +5848,19 @@ export default {
},
"AgentTurnEvaluation": {
"id": [
- 3
+ 4
],
"turnId": [
- 3
+ 4
],
"score": [
- 21
+ 30
],
"comment": [
1
],
"createdAt": [
- 4
+ 6
],
"__typename": [
1
@@ -5867,13 +5868,13 @@ export default {
},
"AgentTurn": {
"id": [
- 3
+ 4
],
"threadId": [
- 3
+ 4
],
"agentId": [
- 3
+ 4
],
"evaluations": [
323
@@ -5882,7 +5883,7 @@ export default {
315
],
"createdAt": [
- 4
+ 6
],
"__typename": [
1
@@ -5890,60 +5891,75 @@ export default {
},
"WorkspaceAiStats": {
"conversationsCount": [
- 21
+ 30
],
"skillsCount": [
- 21
+ 30
],
"toolsCount": [
- 21
+ 30
],
"__typename": [
1
]
},
+ "AppKeyValue": {
+ "key": [
+ 1
+ ],
+ "value": [
+ 5
+ ],
+ "scope": [
+ 327
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "AppKeyValueScope": {},
"CalendarChannel": {
"id": [
- 3
+ 4
],
"handle": [
1
],
"syncStatus": [
- 327
- ],
- "syncStage": [
- 328
- ],
- "visibility": [
329
],
- "isContactAutoCreationEnabled": [
- 6
- ],
- "contactAutoCreationPolicy": [
+ "syncStage": [
330
],
- "isSyncEnabled": [
- 6
+ "visibility": [
+ 331
],
- "syncedAt": [
- 4
- ],
- "syncStageStartedAt": [
- 4
- ],
- "throttleFailureCount": [
- 12
- ],
- "connectedAccountId": [
+ "isContactAutoCreationEnabled": [
3
],
- "createdAt": [
+ "contactAutoCreationPolicy": [
+ 332
+ ],
+ "isSyncEnabled": [
+ 3
+ ],
+ "syncedAt": [
+ 6
+ ],
+ "syncStageStartedAt": [
+ 6
+ ],
+ "throttleFailureCount": [
+ 16
+ ],
+ "connectedAccountId": [
4
],
+ "createdAt": [
+ 6
+ ],
"updatedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -5955,16 +5971,16 @@ export default {
"CalendarChannelContactAutoCreationPolicy": {},
"MessageFolder": {
"id": [
- 3
+ 4
],
"name": [
1
],
"isSentFolder": [
- 6
+ 3
],
"isSynced": [
- 6
+ 3
],
"parentFolderId": [
1
@@ -5973,16 +5989,16 @@ export default {
1
],
"pendingSyncAction": [
- 332
+ 334
],
"messageChannelId": [
- 3
+ 4
],
"createdAt": [
- 4
+ 6
],
"updatedAt": [
- 4
+ 6
],
"__typename": [
1
@@ -5991,7 +6007,7 @@ export default {
"MessageFolderPendingSyncAction": {},
"CollectionHash": {
"collectionName": [
- 334
+ 336
],
"hash": [
1
@@ -6003,7 +6019,7 @@ export default {
"AllMetadataName": {},
"MinimalObjectMetadata": {
"id": [
- 3
+ 4
],
"nameSingular": [
1
@@ -6024,13 +6040,13 @@ export default {
1
],
"isActive": [
- 6
+ 3
],
"isSystem": [
- 6
+ 3
],
"isRemote": [
- 6
+ 3
],
"__typename": [
1
@@ -6038,16 +6054,16 @@ export default {
},
"MinimalView": {
"id": [
- 3
+ 4
],
"type": [
- 66
+ 65
],
"key": [
- 67
+ 66
],
"objectMetadataId": [
- 3
+ 4
],
"__typename": [
1
@@ -6055,13 +6071,13 @@ export default {
},
"MinimalMetadata": {
"objectMetadataItems": [
- 335
+ 337
],
"views": [
- 336
+ 338
],
"collectionHashes": [
- 333
+ 335
],
"__typename": [
1
@@ -6075,7 +6091,7 @@ export default {
157,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6084,7 +6100,7 @@ export default {
77,
{
"applicationId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6109,7 +6125,7 @@ export default {
125
],
"getViewFilterGroups": [
- 57,
+ 56,
{
"viewId": [
1
@@ -6117,7 +6133,7 @@ export default {
}
],
"getViewFilterGroup": [
- 57,
+ 56,
{
"id": [
1,
@@ -6126,7 +6142,7 @@ export default {
}
],
"getViewFilters": [
- 59,
+ 58,
{
"viewId": [
1
@@ -6134,7 +6150,7 @@ export default {
}
],
"getViewFilter": [
- 59,
+ 58,
{
"id": [
1,
@@ -6143,19 +6159,19 @@ export default {
}
],
"getViews": [
- 65,
+ 64,
{
"objectMetadataId": [
1
],
"viewTypes": [
- 66,
+ 65,
"[ViewType!]"
]
}
],
"getView": [
- 65,
+ 64,
{
"id": [
1,
@@ -6164,7 +6180,7 @@ export default {
}
],
"getViewSorts": [
- 62,
+ 61,
{
"viewId": [
1
@@ -6172,7 +6188,7 @@ export default {
}
],
"getViewSort": [
- 62,
+ 61,
{
"id": [
1,
@@ -6181,7 +6197,7 @@ export default {
}
],
"getViewFields": [
- 55,
+ 54,
{
"viewId": [
1,
@@ -6190,7 +6206,7 @@ export default {
}
],
"getViewField": [
- 55,
+ 54,
{
"id": [
1,
@@ -6199,7 +6215,7 @@ export default {
}
],
"getViewFieldGroups": [
- 64,
+ 63,
{
"viewId": [
1,
@@ -6208,7 +6224,7 @@ export default {
}
],
"getViewFieldGroup": [
- 64,
+ 63,
{
"id": [
1,
@@ -6217,16 +6233,16 @@ export default {
}
],
"apiKeys": [
- 2
+ 7
],
"getApiKeyRoles": [
- 29
+ 49
],
"apiKey": [
- 2,
+ 7,
{
"input": [
- 339,
+ 341,
"GetApiKeyInput!"
]
}
@@ -6238,7 +6254,7 @@ export default {
123,
{
"applicationId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6250,7 +6266,7 @@ export default {
1
],
"forPaymentMethodUpdate": [
- 6
+ 3
]
}
],
@@ -6323,13 +6339,13 @@ export default {
}
],
"findManyAgents": [
- 25
+ 11
],
"findOneAgent": [
- 25,
+ 11,
{
"input": [
- 340,
+ 342,
"AgentIdInput!"
]
}
@@ -6338,19 +6354,19 @@ export default {
221
],
"mostlyEmptyFieldMetadataIds": [
- 3,
+ 4,
{
"objectMetadataId": [
- 3,
+ 4,
"UUID!"
]
}
],
"object": [
- 47,
+ 28,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6359,32 +6375,32 @@ export default {
225,
{
"paging": [
- 48,
+ 29,
"CursorPaging!"
],
"filter": [
- 341,
+ 343,
"ObjectFilter!"
]
}
],
"findOneLogicFunction": [
- 41,
+ 22,
{
"input": [
- 342,
+ 344,
"LogicFunctionIdInput!"
]
}
],
"findManyLogicFunctions": [
- 41
+ 22
],
"getAvailablePackages": [
- 7,
+ 5,
{
"input": [
- 342,
+ 344,
"LogicFunctionIdInput!"
]
}
@@ -6393,37 +6409,37 @@ export default {
1,
{
"input": [
- 342,
+ 344,
"LogicFunctionIdInput!"
]
}
],
"commandMenuItems": [
- 35
+ 15
],
"commandMenuItem": [
- 35,
+ 15,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
],
"frontComponents": [
- 34
+ 14
],
"frontComponent": [
- 34,
+ 14,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
],
"currentWorkspace": [
- 71
+ 70
],
"getPublicWorkspaceDataByDomain": [
180,
@@ -6437,7 +6453,7 @@ export default {
181,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6452,7 +6468,7 @@ export default {
}
],
"findApplicationRegistrationByUniversalIdentifier": [
- 8,
+ 76,
{
"universalIdentifier": [
1,
@@ -6461,10 +6477,10 @@ export default {
}
],
"findManyApplicationRegistrations": [
- 8
+ 76
],
"findOneApplicationRegistration": [
- 8,
+ 76,
{
"id": [
1,
@@ -6520,16 +6536,16 @@ export default {
}
],
"findManyApplications": [
- 54
+ 50
],
"findOneApplication": [
- 54,
+ 50,
{
"id": [
- 3
+ 4
],
"universalIdentifier": [
- 3
+ 4
]
}
],
@@ -6555,7 +6571,7 @@ export default {
213,
{
"isVetted": [
- 6,
+ 3,
"Boolean!"
]
}
@@ -6570,10 +6586,10 @@ export default {
}
],
"field": [
- 43,
+ 24,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6582,17 +6598,17 @@ export default {
230,
{
"paging": [
- 48,
+ 29,
"CursorPaging!"
],
"filter": [
- 50,
+ 32,
"FieldFilter!"
]
}
],
"getViewGroups": [
- 61,
+ 60,
{
"viewId": [
1
@@ -6600,7 +6616,7 @@ export default {
}
],
"getViewGroup": [
- 61,
+ 60,
{
"id": [
1,
@@ -6609,13 +6625,13 @@ export default {
}
],
"getRoles": [
- 29
+ 49
],
"previewMessageCampaignAudience": [
282,
{
"input": [
- 343,
+ 345,
"PreviewMessageCampaignAudienceInput!"
]
}
@@ -6630,7 +6646,7 @@ export default {
273,
{
"connectedAccountId": [
- 3
+ 4
]
}
],
@@ -6644,7 +6660,7 @@ export default {
296
],
"getToolInputSchema": [
- 7,
+ 5,
{
"toolName": [
1,
@@ -6659,35 +6675,47 @@ export default {
295,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
],
"myMessageFolders": [
- 331,
+ 333,
{
"messageChannelId": [
- 3
+ 4
]
}
],
"myCalendarChannels": [
- 326,
+ 328,
{
"connectedAccountId": [
- 3
+ 4
]
}
],
"minimalMetadata": [
- 337
+ 339
+ ],
+ "appKeyValue": [
+ 326,
+ {
+ "key": [
+ 1,
+ "String!"
+ ],
+ "scope": [
+ 327
+ ]
+ }
],
"appConnections": [
201,
{
"filter": [
- 344
+ 346
]
}
],
@@ -6710,7 +6738,7 @@ export default {
316,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6719,7 +6747,7 @@ export default {
315,
{
"threadId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6728,7 +6756,7 @@ export default {
320,
{
"threadId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6743,7 +6771,7 @@ export default {
314,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6752,7 +6780,7 @@ export default {
324,
{
"agentId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6779,7 +6807,7 @@ export default {
}
],
"findWorkspaceFromInviteHash": [
- 71,
+ 70,
{
"inviteHash": [
1,
@@ -6809,7 +6837,7 @@ export default {
}
],
"currentUser": [
- 74
+ 73
],
"getSSOIdentityProviders": [
207
@@ -6818,7 +6846,7 @@ export default {
313,
{
"input": [
- 345,
+ 347,
"EventLogQueryInput!"
]
}
@@ -6827,7 +6855,7 @@ export default {
307,
{
"input": [
- 349,
+ 351,
"PieChartDataInput!"
]
}
@@ -6836,7 +6864,7 @@ export default {
305,
{
"input": [
- 350,
+ 352,
"LineChartDataInput!"
]
}
@@ -6845,7 +6873,7 @@ export default {
302,
{
"input": [
- 351,
+ 353,
"BarChartDataInput!"
]
}
@@ -6854,7 +6882,7 @@ export default {
293,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -6874,7 +6902,7 @@ export default {
1
],
"isFieldCity": [
- 6
+ 3
]
}
],
@@ -6895,7 +6923,7 @@ export default {
265,
{
"input": [
- 352
+ 354
]
}
],
@@ -6908,7 +6936,7 @@ export default {
},
"GetApiKeyInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -6916,7 +6944,7 @@ export default {
},
"AgentIdInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -6924,34 +6952,34 @@ export default {
},
"ObjectFilter": {
"and": [
- 341
+ 343
],
"or": [
- 341
+ 343
],
"id": [
- 51
+ 33
],
"isRemote": [
- 52
+ 34
],
"isActive": [
- 52
+ 34
],
"isSystem": [
- 52
+ 34
],
"isUIEditable": [
- 52
+ 34
],
"isUICreatable": [
- 52
+ 34
],
"isUIReadOnly": [
- 52
+ 34
],
"isSearchable": [
- 52
+ 34
],
"__typename": [
1
@@ -6992,13 +7020,13 @@ export default {
},
"EventLogQueryInput": {
"table": [
- 346
+ 348
],
"filters": [
- 347
+ 349
],
"first": [
- 21
+ 30
],
"after": [
1
@@ -7016,7 +7044,7 @@ export default {
1
],
"dateRange": [
- 348
+ 350
],
"recordId": [
1
@@ -7030,10 +7058,10 @@ export default {
},
"EventLogDateRangeInput": {
"start": [
- 4
+ 6
],
"end": [
- 4
+ 6
],
"__typename": [
1
@@ -7041,10 +7069,10 @@ export default {
},
"PieChartDataInput": {
"objectMetadataId": [
- 3
+ 4
],
"configuration": [
- 7
+ 5
],
"__typename": [
1
@@ -7052,10 +7080,10 @@ export default {
},
"LineChartDataInput": {
"objectMetadataId": [
- 3
+ 4
],
"configuration": [
- 7
+ 5
],
"__typename": [
1
@@ -7063,10 +7091,10 @@ export default {
},
"BarChartDataInput": {
"objectMetadataId": [
- 3
+ 4
],
"configuration": [
- 7
+ 5
],
"__typename": [
1
@@ -7074,16 +7102,16 @@ export default {
},
"UsageAnalyticsInput": {
"periodStart": [
- 4
+ 6
],
"periodEnd": [
- 4
+ 6
],
"userWorkspaceId": [
1
],
"operationTypes": [
- 353
+ 355
],
"__typename": [
1
@@ -7092,19 +7120,19 @@ export default {
"UsageOperationType": {},
"Mutation": {
"addQueryToEventStream": [
- 6,
+ 3,
{
"input": [
- 355,
+ 357,
"AddQuerySubscriptionInput!"
]
}
],
"removeQueryFromEventStream": [
- 6,
+ 3,
{
"input": [
- 356,
+ 358,
"RemoveQueryFromEventStreamInput!"
]
}
@@ -7113,7 +7141,7 @@ export default {
157,
{
"inputs": [
- 357,
+ 359,
"[CreateNavigationMenuItemInput!]!"
]
}
@@ -7122,7 +7150,7 @@ export default {
157,
{
"input": [
- 357,
+ 359,
"CreateNavigationMenuItemInput!"
]
}
@@ -7131,7 +7159,7 @@ export default {
157,
{
"inputs": [
- 358,
+ 360,
"[UpdateOneNavigationMenuItemInput!]!"
]
}
@@ -7140,7 +7168,7 @@ export default {
157,
{
"input": [
- 358,
+ 360,
"UpdateOneNavigationMenuItemInput!"
]
}
@@ -7149,7 +7177,7 @@ export default {
157,
{
"ids": [
- 3,
+ 4,
"[UUID!]!"
]
}
@@ -7158,7 +7186,7 @@ export default {
157,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -7171,11 +7199,11 @@ export default {
"String!"
],
"size": [
- 12,
+ 16,
"Float!"
],
"fileFolder": [
- 360,
+ 362,
"FileFolder!"
],
"fieldMetadataId": [
@@ -7196,7 +7224,7 @@ export default {
}
],
"refreshEnterpriseValidityToken": [
- 6
+ 3
],
"releaseEnterpriseServerBinding": [
124
@@ -7214,7 +7242,7 @@ export default {
127,
{
"file": [
- 361,
+ 363,
"Upload!"
]
}
@@ -7223,7 +7251,7 @@ export default {
127,
{
"file": [
- 361,
+ 363,
"Upload!"
]
}
@@ -7232,7 +7260,7 @@ export default {
127,
{
"file": [
- 361,
+ 363,
"Upload!"
]
}
@@ -7241,7 +7269,7 @@ export default {
127,
{
"file": [
- 361,
+ 363,
"Upload!"
]
}
@@ -7250,7 +7278,7 @@ export default {
127,
{
"file": [
- 361,
+ 363,
"Upload!"
]
}
@@ -7259,7 +7287,7 @@ export default {
127,
{
"file": [
- 361,
+ 363,
"Upload!"
],
"fieldMetadataId": [
@@ -7272,7 +7300,7 @@ export default {
127,
{
"file": [
- 361,
+ 363,
"Upload!"
],
"fieldMetadataUniversalIdentifier": [
@@ -7282,29 +7310,29 @@ export default {
}
],
"createViewFilterGroup": [
- 57,
+ 56,
{
"input": [
- 362,
+ 364,
"CreateViewFilterGroupInput!"
]
}
],
"updateViewFilterGroup": [
- 57,
+ 56,
{
"id": [
1,
"String!"
],
"input": [
- 363,
+ 365,
"UpdateViewFilterGroupInput!"
]
}
],
"deleteViewFilterGroup": [
- 6,
+ 3,
{
"id": [
1,
@@ -7313,7 +7341,7 @@ export default {
}
],
"destroyViewFilterGroup": [
- 6,
+ 3,
{
"id": [
1,
@@ -7322,65 +7350,65 @@ export default {
}
],
"createViewFilter": [
- 59,
+ 58,
{
"input": [
- 364,
+ 366,
"CreateViewFilterInput!"
]
}
],
"updateViewFilter": [
- 59,
+ 58,
{
"input": [
- 365,
+ 367,
"UpdateViewFilterInput!"
]
}
],
"deleteViewFilter": [
- 59,
+ 58,
{
"input": [
- 367,
+ 369,
"DeleteViewFilterInput!"
]
}
],
"destroyViewFilter": [
- 59,
+ 58,
{
"input": [
- 368,
+ 370,
"DestroyViewFilterInput!"
]
}
],
"createView": [
- 65,
+ 64,
{
"input": [
- 369,
+ 371,
"CreateViewInput!"
]
}
],
"updateView": [
- 65,
+ 64,
{
"id": [
1,
"String!"
],
"input": [
- 370,
+ 372,
"UpdateViewInput!"
]
}
],
"deleteView": [
- 6,
+ 3,
{
"id": [
1,
@@ -7389,7 +7417,7 @@ export default {
}
],
"destroyView": [
- 6,
+ 3,
{
"id": [
1,
@@ -7398,185 +7426,185 @@ export default {
}
],
"upsertViewWidget": [
- 65,
+ 64,
{
"input": [
- 371,
+ 373,
"UpsertViewWidgetInput!"
]
}
],
"createViewSort": [
- 62,
+ 61,
{
"input": [
- 377,
+ 379,
"CreateViewSortInput!"
]
}
],
"updateViewSort": [
- 62,
+ 61,
{
"input": [
- 378,
+ 380,
"UpdateViewSortInput!"
]
}
],
"deleteViewSort": [
- 6,
+ 3,
{
"input": [
- 380,
+ 382,
"DeleteViewSortInput!"
]
}
],
"destroyViewSort": [
- 6,
+ 3,
{
"input": [
- 381,
+ 383,
"DestroyViewSortInput!"
]
}
],
"updateViewField": [
- 55,
+ 54,
{
"input": [
- 382,
+ 384,
"UpdateViewFieldInput!"
]
}
],
"createViewField": [
- 55,
+ 54,
{
"input": [
- 384,
+ 386,
"CreateViewFieldInput!"
]
}
],
"createManyViewFields": [
- 55,
+ 54,
{
"inputs": [
- 384,
+ 386,
"[CreateViewFieldInput!]!"
]
}
],
"deleteViewField": [
- 55,
+ 54,
{
"input": [
- 385,
+ 387,
"DeleteViewFieldInput!"
]
}
],
"destroyViewField": [
- 55,
+ 54,
{
"input": [
- 386,
+ 388,
"DestroyViewFieldInput!"
]
}
],
"updateViewFieldGroup": [
- 64,
+ 63,
{
"input": [
- 387,
+ 389,
"UpdateViewFieldGroupInput!"
]
}
],
"createViewFieldGroup": [
- 64,
+ 63,
{
"input": [
- 389,
+ 391,
"CreateViewFieldGroupInput!"
]
}
],
"createManyViewFieldGroups": [
- 64,
+ 63,
{
"inputs": [
- 389,
+ 391,
"[CreateViewFieldGroupInput!]!"
]
}
],
"deleteViewFieldGroup": [
- 64,
+ 63,
{
"input": [
- 390,
+ 392,
"DeleteViewFieldGroupInput!"
]
}
],
"destroyViewFieldGroup": [
- 64,
+ 63,
{
"input": [
- 391,
+ 393,
"DestroyViewFieldGroupInput!"
]
}
],
"upsertFieldsWidget": [
- 65,
+ 64,
{
"input": [
- 392,
+ 394,
"UpsertFieldsWidgetInput!"
]
}
],
"createApiKey": [
- 2,
+ 7,
{
"input": [
- 395,
+ 397,
"CreateApiKeyInput!"
]
}
],
"updateApiKey": [
- 2,
+ 7,
{
"input": [
- 396,
+ 398,
"UpdateApiKeyInput!"
]
}
],
"revokeApiKey": [
- 2,
+ 7,
{
"input": [
- 397,
+ 399,
"RevokeApiKeyInput!"
]
}
],
"assignRoleToApiKey": [
- 6,
+ 3,
{
"apiKeyId": [
- 3,
+ 4,
"UUID!"
],
"roleId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -7594,7 +7622,7 @@ export default {
}
],
"updateOneApplicationVariable": [
- 6,
+ 3,
{
"key": [
1,
@@ -7605,7 +7633,7 @@ export default {
"String!"
],
"applicationId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -7622,7 +7650,7 @@ export default {
"BillingPlanKey!"
],
"requirePaymentMethod": [
- 6,
+ 3,
"Boolean!"
],
"successUrlPath": [
@@ -7642,7 +7670,7 @@ export default {
"BillingPlanKey!"
],
"requirePaymentMethod": [
- 6,
+ 3,
"Boolean!"
],
"successUrlPath": [
@@ -7710,7 +7738,7 @@ export default {
"[String!]!"
],
"roleId": [
- 3
+ 4
]
}
],
@@ -7718,16 +7746,16 @@ export default {
126,
{
"input": [
- 398,
+ 400,
"CreateApprovedAccessDomainInput!"
]
}
],
"deleteApprovedAccessDomain": [
- 6,
+ 3,
{
"input": [
- 399,
+ 401,
"DeleteApprovedAccessDomainInput!"
]
}
@@ -7736,7 +7764,7 @@ export default {
126,
{
"input": [
- 400,
+ 402,
"ValidateApprovedAccessDomainInput!"
]
}
@@ -7745,7 +7773,7 @@ export default {
119,
{
"input": [
- 401,
+ 403,
"CreatePageLayoutTabInput!"
]
}
@@ -7758,13 +7786,13 @@ export default {
"String!"
],
"input": [
- 402,
+ 404,
"UpdatePageLayoutTabInput!"
]
}
],
"destroyPageLayoutTab": [
- 6,
+ 3,
{
"id": [
1,
@@ -7776,7 +7804,7 @@ export default {
120,
{
"input": [
- 403,
+ 405,
"CreatePageLayoutInput!"
]
}
@@ -7789,13 +7817,13 @@ export default {
"String!"
],
"input": [
- 404,
+ 406,
"UpdatePageLayoutInput!"
]
}
],
"destroyPageLayout": [
- 6,
+ 3,
{
"id": [
1,
@@ -7811,7 +7839,7 @@ export default {
"String!"
],
"input": [
- 405,
+ 407,
"UpdatePageLayoutWithTabsInput!"
]
}
@@ -7847,7 +7875,7 @@ export default {
81,
{
"input": [
- 409,
+ 411,
"CreatePageLayoutWidgetInput!"
]
}
@@ -7860,13 +7888,13 @@ export default {
"String!"
],
"input": [
- 410,
+ 412,
"UpdatePageLayoutWidgetInput!"
]
}
],
"destroyPageLayoutWidget": [
- 6,
+ 3,
{
"id": [
1,
@@ -7875,91 +7903,91 @@ export default {
}
],
"createOneAgent": [
- 25,
+ 11,
{
"input": [
- 411,
+ 413,
"CreateAgentInput!"
]
}
],
"updateOneAgent": [
- 25,
+ 11,
{
"input": [
- 412,
+ 414,
"UpdateAgentInput!"
]
}
],
"deleteOneAgent": [
- 25,
+ 11,
{
"input": [
- 340,
+ 342,
"AgentIdInput!"
]
}
],
"createOneObject": [
- 47,
+ 28,
{
"input": [
- 413,
+ 415,
"CreateOneObjectInput!"
]
}
],
"deleteOneObject": [
- 47,
+ 28,
{
"input": [
- 415,
+ 417,
"DeleteOneObjectInput!"
]
}
],
"updateOneObject": [
- 47,
+ 28,
{
"input": [
- 416,
+ 418,
"UpdateOneObjectInput!"
]
}
],
"createOneIndex": [
- 45,
+ 26,
{
"input": [
- 418,
+ 420,
"CreateOneIndexInput!"
]
}
],
"deleteOneIndex": [
- 45,
+ 26,
{
"input": [
- 421,
+ 423,
"DeleteOneIndexInput!"
]
}
],
"deleteOneLogicFunction": [
- 41,
+ 22,
{
"input": [
- 342,
+ 344,
"LogicFunctionIdInput!"
]
}
],
"createOneLogicFunction": [
- 41,
+ 22,
{
"input": [
- 422,
+ 424,
"CreateLogicFunctionFromSourceInput!"
]
}
@@ -7968,109 +7996,109 @@ export default {
166,
{
"input": [
- 423,
+ 425,
"ExecuteOneLogicFunctionInput!"
]
}
],
"updateOneLogicFunction": [
- 6,
+ 3,
{
"input": [
- 424,
+ 426,
"UpdateLogicFunctionFromSourceInput!"
]
}
],
"createCommandMenuItem": [
- 35,
+ 15,
{
"input": [
- 426,
+ 428,
"CreateCommandMenuItemInput!"
]
}
],
"updateCommandMenuItem": [
- 35,
+ 15,
{
"input": [
- 427,
+ 429,
"UpdateCommandMenuItemInput!"
]
}
],
"resetCommandMenuItem": [
- 35,
+ 15,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
],
"deleteCommandMenuItem": [
- 35,
+ 15,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
],
"createFrontComponent": [
- 34,
+ 14,
{
"input": [
- 428,
+ 430,
"CreateFrontComponentInput!"
]
}
],
"updateFrontComponent": [
- 34,
+ 14,
{
"input": [
- 429,
+ 431,
"UpdateFrontComponentInput!"
]
}
],
"deleteFrontComponent": [
- 34,
+ 14,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
],
"activateWorkspace": [
- 71,
+ 70,
{
"data": [
- 431,
+ 433,
"ActivateWorkspaceInput!"
]
}
],
"updateWorkspace": [
- 71,
+ 70,
{
"data": [
- 432,
+ 434,
"UpdateWorkspaceInput!"
]
}
],
"deleteCurrentWorkspace": [
- 71
+ 70
],
"checkCustomDomainValidRecords": [
234
],
"upgradeApplication": [
- 6,
+ 3,
{
"appRegistrationId": [
1,
@@ -8086,22 +8114,22 @@ export default {
198,
{
"input": [
- 433,
+ 435,
"CreateApplicationRegistrationInput!"
]
}
],
"updateApplicationRegistration": [
- 8,
+ 76,
{
"input": [
- 434,
+ 436,
"UpdateApplicationRegistrationInput!"
]
}
],
"deleteApplicationRegistration": [
- 6,
+ 3,
{
"id": [
1,
@@ -8119,25 +8147,25 @@ export default {
}
],
"createApplicationRegistrationVariable": [
- 5,
+ 2,
{
"input": [
- 436,
+ 438,
"CreateApplicationRegistrationVariableInput!"
]
}
],
"updateApplicationRegistrationVariable": [
- 5,
+ 2,
{
"input": [
- 437,
+ 439,
"UpdateApplicationRegistrationVariableInput!"
]
}
],
"deleteApplicationRegistrationVariable": [
- 6,
+ 3,
{
"id": [
1,
@@ -8146,10 +8174,10 @@ export default {
}
],
"uploadAppTarball": [
- 8,
+ 76,
{
"file": [
- 361,
+ 363,
"Upload!"
],
"universalIdentifier": [
@@ -8158,7 +8186,7 @@ export default {
}
],
"claimApplicationRegistrationOwnership": [
- 8,
+ 76,
{
"applicationRegistrationId": [
1,
@@ -8167,7 +8195,7 @@ export default {
}
],
"transferApplicationRegistrationOwnership": [
- 8,
+ 76,
{
"applicationRegistrationId": [
1,
@@ -8180,7 +8208,7 @@ export default {
}
],
"installMarketplaceApp": [
- 6,
+ 3,
{
"universalIdentifier": [
1,
@@ -8192,7 +8220,7 @@ export default {
}
],
"installApplication": [
- 54,
+ 50,
{
"universalIdentifier": [
1,
@@ -8204,20 +8232,20 @@ export default {
}
],
"updateApplication": [
- 54,
+ 50,
{
"id": [
- 3,
+ 4,
"UUID!"
],
"input": [
- 439,
+ 441,
"UpdateApplicationInput!"
]
}
],
"uninstallApplication": [
- 6,
+ 3,
{
"universalIdentifier": [
1,
@@ -8226,116 +8254,116 @@ export default {
}
],
"syncMarketplaceCatalog": [
- 6
+ 3
],
"createOneField": [
- 43,
+ 24,
{
"input": [
- 440,
+ 442,
"CreateOneFieldMetadataInput!"
]
}
],
"updateOneField": [
- 43,
+ 24,
{
"input": [
- 442,
+ 444,
"UpdateOneFieldMetadataInput!"
]
}
],
"deleteOneField": [
- 43,
+ 24,
{
"input": [
- 444,
+ 446,
"DeleteOneFieldInput!"
]
}
],
"createViewGroup": [
- 61,
+ 60,
{
"input": [
- 445,
+ 447,
"CreateViewGroupInput!"
]
}
],
"createManyViewGroups": [
- 61,
+ 60,
{
"inputs": [
- 445,
+ 447,
"[CreateViewGroupInput!]!"
]
}
],
"updateViewGroup": [
- 61,
+ 60,
{
"input": [
- 446,
+ 448,
"UpdateViewGroupInput!"
]
}
],
"updateManyViewGroups": [
- 61,
+ 60,
{
"inputs": [
- 446,
+ 448,
"[UpdateViewGroupInput!]!"
]
}
],
"deleteViewGroup": [
- 61,
+ 60,
{
"input": [
- 448,
+ 450,
"DeleteViewGroupInput!"
]
}
],
"destroyViewGroup": [
- 61,
+ 60,
{
"input": [
- 449,
+ 451,
"DestroyViewGroupInput!"
]
}
],
"updateWorkspaceMemberRole": [
- 20,
+ 37,
{
"workspaceMemberId": [
- 3,
+ 4,
"UUID!"
],
"roleId": [
- 3,
+ 4,
"UUID!"
]
}
],
"createOneRole": [
- 29,
+ 49,
{
"createRoleInput": [
- 450,
+ 452,
"CreateRoleInput!"
]
}
],
"updateOneRole": [
- 29,
+ 49,
{
"updateRoleInput": [
- 451,
+ 453,
"UpdateRoleInput!"
]
}
@@ -8344,34 +8372,34 @@ export default {
1,
{
"roleId": [
- 3,
+ 4,
"UUID!"
]
}
],
"upsertObjectPermissions": [
- 16,
+ 46,
{
"upsertObjectPermissionsInput": [
- 453,
+ 455,
"UpsertObjectPermissionsInput!"
]
}
],
"upsertPermissionFlags": [
- 27,
+ 47,
{
"upsertPermissionFlagsInput": [
- 455,
+ 457,
"UpsertPermissionFlagsInput!"
]
}
],
"upsertFieldPermissions": [
- 26,
+ 41,
{
"upsertFieldPermissionsInput": [
- 456,
+ 458,
"UpsertFieldPermissionsInput!"
]
}
@@ -8380,29 +8408,29 @@ export default {
235,
{
"input": [
- 458,
+ 460,
"UpsertRowLevelPermissionPredicatesInput!"
]
}
],
"assignRoleToAgent": [
- 6,
+ 3,
{
"agentId": [
- 3,
+ 4,
"UUID!"
],
"roleId": [
- 3,
+ 4,
"UUID!"
]
}
],
"removeRoleFromAgent": [
- 6,
+ 3,
{
"agentId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -8411,7 +8439,7 @@ export default {
283,
{
"input": [
- 461,
+ 463,
"SendEmailViaDomainInput!"
]
}
@@ -8420,7 +8448,7 @@ export default {
285,
{
"input": [
- 462,
+ 464,
"SendMessageCampaignInput!"
]
}
@@ -8429,7 +8457,7 @@ export default {
286,
{
"input": [
- 463,
+ 465,
"CreateUnsubscribeTopicInput!"
]
}
@@ -8438,13 +8466,13 @@ export default {
286,
{
"input": [
- 464,
+ 466,
"UpdateUnsubscribeTopicInput!"
]
}
],
"deleteUnsubscribeTopic": [
- 6,
+ 3,
{
"id": [
1,
@@ -8456,7 +8484,7 @@ export default {
273,
{
"input": [
- 465,
+ 467,
"UpdateMessageChannelInput!"
]
}
@@ -8465,7 +8493,7 @@ export default {
281,
{
"input": [
- 467,
+ 469,
"CreateEmailGroupChannelInput!"
]
}
@@ -8474,7 +8502,7 @@ export default {
273,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -8483,13 +8511,13 @@ export default {
271,
{
"input": [
- 468,
+ 470,
"CreateEmailingDomainInput!"
]
}
],
"deleteEmailingDomain": [
- 6,
+ 3,
{
"id": [
1,
@@ -8510,7 +8538,7 @@ export default {
240,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -8519,7 +8547,7 @@ export default {
298,
{
"input": [
- 469,
+ 471,
"RunAgentInput!"
]
}
@@ -8528,7 +8556,7 @@ export default {
295,
{
"input": [
- 470,
+ 472,
"CreateWebhookInput!"
]
}
@@ -8537,7 +8565,7 @@ export default {
295,
{
"input": [
- 471,
+ 473,
"UpdateWebhookInput!"
]
}
@@ -8546,35 +8574,56 @@ export default {
295,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
],
"updateMessageFolder": [
- 331,
+ 333,
{
"input": [
- 473,
+ 475,
"UpdateMessageFolderInput!"
]
}
],
"updateMessageFolders": [
- 331,
+ 333,
{
"input": [
- 475,
+ 477,
"UpdateMessageFoldersInput!"
]
}
],
"updateCalendarChannel": [
+ 328,
+ {
+ "input": [
+ 478,
+ "UpdateCalendarChannelInput!"
+ ]
+ }
+ ],
+ "setAppKeyValue": [
326,
{
"input": [
- 476,
- "UpdateCalendarChannelInput!"
+ 480,
+ "SetAppKeyValueInput!"
+ ]
+ }
+ ],
+ "deleteAppKeyValue": [
+ 3,
+ {
+ "key": [
+ 1,
+ "String!"
+ ],
+ "scope": [
+ 327
]
}
],
@@ -8585,7 +8634,7 @@ export default {
321,
{
"threadId": [
- 3,
+ 4,
"UUID!"
],
"text": [
@@ -8593,17 +8642,17 @@ export default {
"String!"
],
"messageId": [
- 3,
+ 4,
"UUID!"
],
"browsingContext": [
- 7
+ 5
],
"modelId": [
1
],
"fileAttachments": [
- 478,
+ 481,
"[FileAttachmentInput!]"
]
}
@@ -8612,7 +8661,7 @@ export default {
321,
{
"threadId": [
- 3,
+ 4,
"UUID!"
],
"modelId": [
@@ -8624,15 +8673,15 @@ export default {
321,
{
"threadId": [
- 3,
+ 4,
"UUID!"
],
"messageId": [
- 3,
+ 4,
"UUID!"
],
"answers": [
- 479,
+ 482,
"[AgentChatQuestionAnswerInput!]!"
],
"modelId": [
@@ -8641,10 +8690,10 @@ export default {
}
],
"stopAgentChatStream": [
- 6,
+ 3,
{
"threadId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -8653,7 +8702,7 @@ export default {
316,
{
"id": [
- 3,
+ 4,
"UUID!"
],
"title": [
@@ -8666,7 +8715,7 @@ export default {
316,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -8675,25 +8724,25 @@ export default {
316,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
],
"deleteChatThread": [
- 6,
+ 3,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
],
"deleteQueuedChatMessage": [
- 6,
+ 3,
{
"messageId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -8702,7 +8751,7 @@ export default {
314,
{
"input": [
- 480,
+ 483,
"CreateSkillInput!"
]
}
@@ -8711,7 +8760,7 @@ export default {
314,
{
"input": [
- 481,
+ 484,
"UpdateSkillInput!"
]
}
@@ -8720,7 +8769,7 @@ export default {
314,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -8729,7 +8778,7 @@ export default {
314,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -8738,7 +8787,7 @@ export default {
314,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -8747,7 +8796,7 @@ export default {
323,
{
"turnId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -8756,7 +8805,7 @@ export default {
324,
{
"agentId": [
- 3,
+ 4,
"UUID!"
],
"input": [
@@ -8769,7 +8818,7 @@ export default {
248,
{
"input": [
- 482,
+ 485,
"GetAuthorizationUrlForSSOInput!"
]
}
@@ -8912,7 +8961,7 @@ export default {
"String!"
],
"workspaceId": [
- 3
+ 4
],
"workspaceInviteHash": [
1
@@ -8935,7 +8984,7 @@ export default {
251,
{
"input": [
- 483
+ 486
]
}
],
@@ -8947,7 +8996,7 @@ export default {
"String!"
],
"file": [
- 361,
+ 363,
"Upload!"
]
}
@@ -9003,7 +9052,7 @@ export default {
257,
{
"apiKeyId": [
- 3,
+ 4,
"UUID!"
],
"expiresAt": [
@@ -9013,7 +9062,7 @@ export default {
}
],
"generatePlaygroundToken": [
- 32
+ 12
],
"emailPasswordResetLink": [
247,
@@ -9023,7 +9072,7 @@ export default {
"String!"
],
"workspaceId": [
- 3
+ 4
]
}
],
@@ -9060,7 +9109,7 @@ export default {
241,
{
"twoFactorAuthenticationMethodId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -9075,10 +9124,10 @@ export default {
}
],
"deleteUser": [
- 74
+ 73
],
"deleteUserFromWorkspace": [
- 17,
+ 52,
{
"workspaceMemberIdToDelete": [
1,
@@ -9087,16 +9136,16 @@ export default {
}
],
"updateWorkspaceMemberSettings": [
- 6,
+ 3,
{
"input": [
- 484,
+ 487,
"UpdateWorkspaceMemberSettingsInput!"
]
}
],
"updateUserEmail": [
- 6,
+ 3,
{
"newEmail": [
1,
@@ -9124,7 +9173,7 @@ export default {
208,
{
"input": [
- 485,
+ 488,
"SetupOIDCSsoInput!"
]
}
@@ -9133,7 +9182,7 @@ export default {
208,
{
"input": [
- 486,
+ 489,
"SetupSAMLSsoInput!"
]
}
@@ -9142,7 +9191,7 @@ export default {
204,
{
"input": [
- 487,
+ 490,
"DeleteSsoInput!"
]
}
@@ -9151,7 +9200,7 @@ export default {
205,
{
"input": [
- 488,
+ 491,
"EditSsoInput!"
]
}
@@ -9164,15 +9213,15 @@ export default {
"String!"
],
"recordId": [
- 3,
+ 4,
"UUID!"
],
"objectMetadataId": [
- 3,
+ 4,
"UUID!"
],
"properties": [
- 7
+ 5
]
}
],
@@ -9180,7 +9229,7 @@ export default {
310,
{
"type": [
- 489,
+ 492,
"AnalyticsType!"
],
"name": [
@@ -9190,7 +9239,7 @@ export default {
1
],
"properties": [
- 7
+ 5
]
}
],
@@ -9198,7 +9247,7 @@ export default {
308,
{
"id": [
- 3,
+ 4,
"UUID!"
]
}
@@ -9207,11 +9256,11 @@ export default {
262,
{
"userId": [
- 3,
+ 4,
"UUID!"
],
"workspaceId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -9220,7 +9269,7 @@ export default {
300,
{
"input": [
- 490,
+ 493,
"CreateCalendarEventInput!"
]
}
@@ -9229,7 +9278,7 @@ export default {
309,
{
"input": [
- 491,
+ 494,
"SendEmailInput!"
]
}
@@ -9238,7 +9287,7 @@ export default {
299,
{
"connectedAccountId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -9251,11 +9300,11 @@ export default {
"String!"
],
"connectionParameters": [
- 493,
+ 496,
"EmailAccountConnectionParameters!"
],
"id": [
- 3
+ 4
]
}
],
@@ -9263,7 +9312,7 @@ export default {
168,
{
"input": [
- 495,
+ 498,
"UpdateLabPublicFeatureFlagInput!"
]
}
@@ -9282,7 +9331,7 @@ export default {
}
],
"deletePublicDomain": [
- 6,
+ 3,
{
"domain": [
1,
@@ -9316,11 +9365,11 @@ export default {
267,
{
"manifest": [
- 7,
+ 5,
"JSON!"
],
"dryRun": [
- 6
+ 3
]
}
],
@@ -9328,7 +9377,7 @@ export default {
268,
{
"file": [
- 361,
+ 363,
"Upload!"
],
"applicationUniversalIdentifier": [
@@ -9336,7 +9385,7 @@ export default {
"String!"
],
"fileFolder": [
- 360,
+ 362,
"FileFolder!"
],
"filePath": [
@@ -9346,16 +9395,16 @@ export default {
}
],
"generateApplicationToken": [
- 33,
+ 13,
{
"applicationId": [
- 3,
+ 4,
"UUID!"
]
}
],
"renewApplicationToken": [
- 33,
+ 13,
{
"applicationRefreshToken": [
1,
@@ -9375,7 +9424,7 @@ export default {
1
],
"operationSignature": [
- 7
+ 5
],
"__typename": [
1
@@ -9394,19 +9443,19 @@ export default {
},
"CreateNavigationMenuItemInput": {
"id": [
- 3
+ 4
],
"userWorkspaceId": [
- 3
+ 4
],
"targetRecordId": [
- 3
+ 4
],
"targetObjectMetadataId": [
- 3
+ 4
],
"viewId": [
- 3
+ 4
],
"type": [
158
@@ -9424,13 +9473,13 @@ export default {
1
],
"folderId": [
- 3
+ 4
],
"pageLayoutId": [
- 3
+ 4
],
"position": [
- 12
+ 16
],
"__typename": [
1
@@ -9438,10 +9487,10 @@ export default {
},
"UpdateOneNavigationMenuItemInput": {
"id": [
- 3
+ 4
],
"update": [
- 359
+ 361
],
"__typename": [
1
@@ -9449,10 +9498,10 @@ export default {
},
"UpdateNavigationMenuItemInput": {
"folderId": [
- 3
+ 4
],
"position": [
- 12
+ 16
],
"name": [
1
@@ -9467,7 +9516,7 @@ export default {
1
],
"pageLayoutId": [
- 3
+ 4
],
"__typename": [
1
@@ -9477,19 +9526,19 @@ export default {
"Upload": {},
"CreateViewFilterGroupInput": {
"id": [
- 3
+ 4
],
"parentViewFilterGroupId": [
- 3
+ 4
],
"logicalOperator": [
- 58
+ 57
],
"positionInViewFilterGroup": [
- 12
+ 16
],
"viewId": [
- 3
+ 4
],
"__typename": [
1
@@ -9497,19 +9546,19 @@ export default {
},
"UpdateViewFilterGroupInput": {
"id": [
- 3
+ 4
],
"parentViewFilterGroupId": [
- 3
+ 4
],
"logicalOperator": [
- 58
+ 57
],
"positionInViewFilterGroup": [
- 12
+ 16
],
"viewId": [
- 3
+ 4
],
"__typename": [
1
@@ -9517,31 +9566,31 @@ export default {
},
"CreateViewFilterInput": {
"id": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"operand": [
- 60
+ 59
],
"value": [
- 7
+ 5
],
"viewFilterGroupId": [
- 3
+ 4
],
"positionInViewFilterGroup": [
- 12
+ 16
],
"subFieldName": [
1
],
"relationTargetFieldMetadataId": [
- 3
+ 4
],
"viewId": [
- 3
+ 4
],
"__typename": [
1
@@ -9549,10 +9598,10 @@ export default {
},
"UpdateViewFilterInput": {
"id": [
- 3
+ 4
],
"update": [
- 366
+ 368
],
"__typename": [
1
@@ -9560,25 +9609,25 @@ export default {
},
"UpdateViewFilterInputUpdates": {
"fieldMetadataId": [
- 3
+ 4
],
"operand": [
- 60
+ 59
],
"value": [
- 7
+ 5
],
"viewFilterGroupId": [
- 3
+ 4
],
"positionInViewFilterGroup": [
- 12
+ 16
],
"subFieldName": [
1
],
"relationTargetFieldMetadataId": [
- 3
+ 4
],
"__typename": [
1
@@ -9586,7 +9635,7 @@ export default {
},
"DeleteViewFilterInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -9594,7 +9643,7 @@ export default {
},
"DestroyViewFilterInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -9602,61 +9651,61 @@ export default {
},
"CreateViewInput": {
"id": [
- 3
+ 4
],
"name": [
1
],
"objectMetadataId": [
- 3
+ 4
],
"type": [
- 66
+ 65
],
"key": [
- 67
+ 66
],
"icon": [
1
],
"position": [
- 12
+ 16
],
"isCompact": [
- 6
+ 3
],
"shouldHideEmptyGroups": [
- 6
+ 3
],
"kanbanColumnWidth": [
- 21
+ 30
],
"openRecordIn": [
- 68
+ 67
],
"kanbanAggregateOperation": [
- 56
+ 55
],
"kanbanAggregateOperationFieldMetadataId": [
- 3
+ 4
],
"anyFieldFilterValue": [
1
],
"calendarLayout": [
- 69
+ 68
],
"calendarFieldMetadataId": [
- 3
+ 4
],
"calendarEndFieldMetadataId": [
- 3
+ 4
],
"mainGroupByFieldMetadataId": [
- 3
+ 4
],
"visibility": [
- 70
+ 69
],
"__typename": [
1
@@ -9664,55 +9713,55 @@ export default {
},
"UpdateViewInput": {
"id": [
- 3
+ 4
],
"name": [
1
],
"type": [
- 66
+ 65
],
"icon": [
1
],
"position": [
- 12
+ 16
],
"isCompact": [
- 6
+ 3
],
"openRecordIn": [
- 68
+ 67
],
"kanbanAggregateOperation": [
- 56
+ 55
],
"kanbanAggregateOperationFieldMetadataId": [
- 3
+ 4
],
"anyFieldFilterValue": [
1
],
"calendarLayout": [
- 69
+ 68
],
"calendarFieldMetadataId": [
- 3
+ 4
],
"calendarEndFieldMetadataId": [
- 3
+ 4
],
"visibility": [
- 70
+ 69
],
"mainGroupByFieldMetadataId": [
- 3
+ 4
],
"shouldHideEmptyGroups": [
- 6
+ 3
],
"kanbanColumnWidth": [
- 21
+ 30
],
"__typename": [
1
@@ -9720,57 +9769,57 @@ export default {
},
"UpsertViewWidgetInput": {
"widgetId": [
- 3
+ 4
],
"view": [
- 372
- ],
- "viewFields": [
- 373
- ],
- "viewFilters": [
374
],
- "viewFilterGroups": [
+ "viewFields": [
375
],
- "viewSorts": [
+ "viewFilters": [
376
],
+ "viewFilterGroups": [
+ 377
+ ],
+ "viewSorts": [
+ 378
+ ],
"__typename": [
1
]
},
"UpsertViewWidgetViewSettingsInput": {
"type": [
- 66
+ 65
],
"mainGroupByFieldMetadataId": [
- 3
+ 4
],
"shouldHideEmptyGroups": [
- 6
+ 3
],
"openRecordIn": [
- 68
+ 67
],
"kanbanAggregateOperation": [
- 56
+ 55
],
"kanbanAggregateOperationFieldMetadataId": [
- 3
+ 4
],
"kanbanColumnWidth": [
- 21
+ 30
],
"calendarLayout": [
- 69
+ 68
],
"calendarFieldMetadataId": [
- 3
+ 4
],
"calendarEndFieldMetadataId": [
- 3
+ 4
],
"__typename": [
1
@@ -9778,19 +9827,19 @@ export default {
},
"UpsertViewWidgetViewFieldInput": {
"viewFieldId": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"isVisible": [
- 6
+ 3
],
"position": [
- 12
+ 16
],
"size": [
- 12
+ 16
],
"__typename": [
1
@@ -9798,28 +9847,28 @@ export default {
},
"UpsertViewWidgetViewFilterInput": {
"id": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"operand": [
- 60
+ 59
],
"value": [
- 7
+ 5
],
"viewFilterGroupId": [
- 3
+ 4
],
"positionInViewFilterGroup": [
- 12
+ 16
],
"subFieldName": [
1
],
"relationTargetFieldMetadataId": [
- 3
+ 4
],
"__typename": [
1
@@ -9827,16 +9876,16 @@ export default {
},
"UpsertViewWidgetViewFilterGroupInput": {
"id": [
- 3
+ 4
],
"parentViewFilterGroupId": [
- 3
+ 4
],
"logicalOperator": [
- 58
+ 57
],
"positionInViewFilterGroup": [
- 12
+ 16
],
"__typename": [
1
@@ -9844,13 +9893,13 @@ export default {
},
"UpsertViewWidgetViewSortInput": {
"id": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"direction": [
- 63
+ 62
],
"__typename": [
1
@@ -9858,19 +9907,19 @@ export default {
},
"CreateViewSortInput": {
"id": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"direction": [
- 63
+ 62
],
"subFieldName": [
1
],
"viewId": [
- 3
+ 4
],
"__typename": [
1
@@ -9878,10 +9927,10 @@ export default {
},
"UpdateViewSortInput": {
"id": [
- 3
+ 4
],
"update": [
- 379
+ 381
],
"__typename": [
1
@@ -9889,7 +9938,7 @@ export default {
},
"UpdateViewSortInputUpdates": {
"direction": [
- 63
+ 62
],
"subFieldName": [
1
@@ -9900,7 +9949,7 @@ export default {
},
"DeleteViewSortInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -9908,7 +9957,7 @@ export default {
},
"DestroyViewSortInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -9916,10 +9965,10 @@ export default {
},
"UpdateViewFieldInput": {
"id": [
- 3
+ 4
],
"update": [
- 383
+ 385
],
"__typename": [
1
@@ -9927,19 +9976,19 @@ export default {
},
"UpdateViewFieldInputUpdates": {
"isVisible": [
- 6
+ 3
],
"size": [
- 12
+ 16
],
"position": [
- 12
+ 16
],
"aggregateOperation": [
- 56
+ 55
],
"viewFieldGroupId": [
- 3
+ 4
],
"__typename": [
1
@@ -9947,28 +9996,28 @@ export default {
},
"CreateViewFieldInput": {
"id": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"viewId": [
- 3
+ 4
],
"isVisible": [
- 6
+ 3
],
"size": [
- 12
+ 16
],
"position": [
- 12
+ 16
],
"aggregateOperation": [
- 56
+ 55
],
"viewFieldGroupId": [
- 3
+ 4
],
"__typename": [
1
@@ -9976,7 +10025,7 @@ export default {
},
"DeleteViewFieldInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -9984,7 +10033,7 @@ export default {
},
"DestroyViewFieldInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -9992,10 +10041,10 @@ export default {
},
"UpdateViewFieldGroupInput": {
"id": [
- 3
+ 4
],
"update": [
- 388
+ 390
],
"__typename": [
1
@@ -10006,10 +10055,10 @@ export default {
1
],
"position": [
- 12
+ 16
],
"isVisible": [
- 6
+ 3
],
"deletedAt": [
1
@@ -10020,19 +10069,19 @@ export default {
},
"CreateViewFieldGroupInput": {
"id": [
- 3
+ 4
],
"name": [
1
],
"viewId": [
- 3
+ 4
],
"position": [
- 12
+ 16
],
"isVisible": [
- 6
+ 3
],
"__typename": [
1
@@ -10040,7 +10089,7 @@ export default {
},
"DeleteViewFieldGroupInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -10048,7 +10097,7 @@ export default {
},
"DestroyViewFieldGroupInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -10056,13 +10105,13 @@ export default {
},
"UpsertFieldsWidgetInput": {
"widgetId": [
- 3
+ 4
],
"groups": [
- 393
+ 395
],
"fields": [
- 394
+ 396
],
"__typename": [
1
@@ -10070,19 +10119,19 @@ export default {
},
"UpsertFieldsWidgetGroupInput": {
"id": [
- 3
+ 4
],
"name": [
1
],
"position": [
- 12
+ 16
],
"isVisible": [
- 6
+ 3
],
"fields": [
- 394
+ 396
],
"__typename": [
1
@@ -10090,16 +10139,16 @@ export default {
},
"UpsertFieldsWidgetFieldInput": {
"viewFieldId": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"isVisible": [
- 6
+ 3
],
"position": [
- 12
+ 16
],
"__typename": [
1
@@ -10116,7 +10165,7 @@ export default {
1
],
"roleId": [
- 3
+ 4
],
"__typename": [
1
@@ -10124,7 +10173,7 @@ export default {
},
"UpdateApiKeyInput": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -10141,7 +10190,7 @@ export default {
},
"RevokeApiKeyInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -10160,7 +10209,7 @@ export default {
},
"DeleteApprovedAccessDomainInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -10171,7 +10220,7 @@ export default {
1
],
"approvedAccessDomainId": [
- 3
+ 4
],
"__typename": [
1
@@ -10182,10 +10231,10 @@ export default {
1
],
"position": [
- 12
+ 16
],
"pageLayoutId": [
- 3
+ 4
],
"layoutMode": [
85
@@ -10199,7 +10248,7 @@ export default {
1
],
"position": [
- 12
+ 16
],
"icon": [
1
@@ -10219,7 +10268,7 @@ export default {
121
],
"objectMetadataId": [
- 3
+ 4
],
"__typename": [
1
@@ -10233,7 +10282,7 @@ export default {
121
],
"objectMetadataId": [
- 3
+ 4
],
"__typename": [
1
@@ -10247,10 +10296,10 @@ export default {
121
],
"objectMetadataId": [
- 3
+ 4
],
"tabs": [
- 406
+ 408
],
"__typename": [
1
@@ -10258,13 +10307,13 @@ export default {
},
"UpdatePageLayoutTabWithWidgetsInput": {
"id": [
- 3
+ 4
],
"title": [
1
],
"position": [
- 12
+ 16
],
"icon": [
1
@@ -10273,7 +10322,7 @@ export default {
85
],
"widgets": [
- 407
+ 409
],
"__typename": [
1
@@ -10281,10 +10330,10 @@ export default {
},
"UpdatePageLayoutWidgetWithIdInput": {
"id": [
- 3
+ 4
],
"pageLayoutTabId": [
- 3
+ 4
],
"title": [
1
@@ -10293,19 +10342,19 @@ export default {
82
],
"objectMetadataId": [
- 3
+ 4
],
"gridPosition": [
- 408
+ 410
],
"position": [
- 7
+ 5
],
"configuration": [
- 7
+ 5
],
"conditionalDisplay": [
- 7
+ 5
],
"conditionalAvailabilityExpression": [
1
@@ -10316,16 +10365,16 @@ export default {
},
"GridPositionInput": {
"row": [
- 12
+ 16
],
"column": [
- 12
+ 16
],
"rowSpan": [
- 12
+ 16
],
"columnSpan": [
- 12
+ 16
],
"__typename": [
1
@@ -10333,7 +10382,7 @@ export default {
},
"CreatePageLayoutWidgetInput": {
"pageLayoutTabId": [
- 3
+ 4
],
"title": [
1
@@ -10342,16 +10391,16 @@ export default {
82
],
"objectMetadataId": [
- 3
+ 4
],
"gridPosition": [
- 408
+ 410
],
"position": [
- 7
+ 5
],
"configuration": [
- 7
+ 5
],
"__typename": [
1
@@ -10359,7 +10408,7 @@ export default {
},
"UpdatePageLayoutWidgetInput": {
"pageLayoutTabId": [
- 3
+ 4
],
"title": [
1
@@ -10368,19 +10417,19 @@ export default {
82
],
"objectMetadataId": [
- 3
+ 4
],
"gridPosition": [
- 408
+ 410
],
"position": [
- 7
+ 5
],
"configuration": [
- 7
+ 5
],
"conditionalDisplay": [
- 7
+ 5
],
"conditionalAvailabilityExpression": [
1
@@ -10409,13 +10458,13 @@ export default {
1
],
"roleId": [
- 3
+ 4
],
"responseFormat": [
- 7
+ 5
],
"modelConfiguration": [
- 7
+ 5
],
"evaluationInputs": [
1
@@ -10426,7 +10475,7 @@ export default {
},
"UpdateAgentInput": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -10447,13 +10496,13 @@ export default {
1
],
"roleId": [
- 3
+ 4
],
"responseFormat": [
- 7
+ 5
],
"modelConfiguration": [
- 7
+ 5
],
"evaluationInputs": [
1
@@ -10464,7 +10513,7 @@ export default {
},
"CreateOneObjectInput": {
"object": [
- 414
+ 416
],
"__typename": [
1
@@ -10496,19 +10545,19 @@ export default {
1
],
"skipNameField": [
- 6
+ 3
],
"isRemote": [
- 6
+ 3
],
"primaryKeyColumnType": [
1
],
"primaryKeyFieldMetadataSettings": [
- 7
+ 5
],
"isLabelSyncedWithName": [
- 6
+ 3
],
"__typename": [
1
@@ -10516,7 +10565,7 @@ export default {
},
"DeleteOneObjectInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -10524,10 +10573,10 @@ export default {
},
"UpdateOneObjectInput": {
"update": [
- 417
+ 419
],
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -10559,19 +10608,19 @@ export default {
1
],
"isActive": [
- 6
+ 3
],
"labelIdentifierFieldMetadataId": [
- 3
+ 4
],
"imageIdentifierFieldMetadataId": [
- 3
+ 4
],
"isLabelSyncedWithName": [
- 6
+ 3
],
"isSearchable": [
- 6
+ 3
],
"__typename": [
1
@@ -10579,7 +10628,7 @@ export default {
},
"CreateOneIndexInput": {
"index": [
- 419
+ 421
],
"__typename": [
1
@@ -10587,13 +10636,13 @@ export default {
},
"CreateIndexInput": {
"objectMetadataId": [
- 3
+ 4
],
"fields": [
- 420
+ 422
],
"indexType": [
- 46
+ 27
],
"__typename": [
1
@@ -10601,7 +10650,7 @@ export default {
},
"CreateIndexFieldInput": {
"fieldMetadataId": [
- 3
+ 4
],
"subFieldName": [
1
@@ -10612,7 +10661,7 @@ export default {
},
"DeleteOneIndexInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -10620,10 +10669,10 @@ export default {
},
"CreateLogicFunctionFromSourceInput": {
"id": [
- 3
+ 4
],
"universalIdentifier": [
- 3
+ 4
],
"name": [
1
@@ -10632,28 +10681,28 @@ export default {
1
],
"timeoutSeconds": [
- 12
+ 16
],
"source": [
- 7
+ 5
],
"cronTriggerSettings": [
- 7
+ 5
],
"databaseEventTriggerSettings": [
- 7
+ 5
],
"httpRouteTriggerSettings": [
- 7
+ 5
],
"serverRouteTriggerSettings": [
- 7
+ 5
],
"toolTriggerSettings": [
- 7
+ 5
],
"workflowActionTriggerSettings": [
- 7
+ 5
],
"__typename": [
1
@@ -10661,10 +10710,10 @@ export default {
},
"ExecuteOneLogicFunctionInput": {
"id": [
- 3
+ 4
],
"payload": [
- 7
+ 5
],
"__typename": [
1
@@ -10672,10 +10721,10 @@ export default {
},
"UpdateLogicFunctionFromSourceInput": {
"id": [
- 3
+ 4
],
"update": [
- 425
+ 427
],
"__typename": [
1
@@ -10689,7 +10738,7 @@ export default {
1
],
"timeoutSeconds": [
- 12
+ 16
],
"sourceHandlerCode": [
1
@@ -10701,19 +10750,19 @@ export default {
1
],
"cronTriggerSettings": [
- 7
+ 5
],
"databaseEventTriggerSettings": [
- 7
+ 5
],
"httpRouteTriggerSettings": [
- 7
+ 5
],
"toolTriggerSettings": [
- 7
+ 5
],
"workflowActionTriggerSettings": [
- 7
+ 5
],
"__typename": [
1
@@ -10721,13 +10770,13 @@ export default {
},
"CreateCommandMenuItemInput": {
"workflowVersionId": [
- 3
+ 4
],
"frontComponentId": [
- 3
+ 4
],
"engineComponentKey": [
- 36
+ 17
],
"label": [
1
@@ -10739,13 +10788,13 @@ export default {
1
],
"position": [
- 12
+ 16
],
"isPinned": [
- 6
+ 3
],
"availabilityType": [
- 37
+ 18
],
"hotKeys": [
1
@@ -10754,13 +10803,13 @@ export default {
1
],
"availabilityObjectMetadataId": [
- 3
+ 4
],
"payload": [
- 7
+ 5
],
"pageLayoutId": [
- 3
+ 4
],
"__typename": [
1
@@ -10768,7 +10817,7 @@ export default {
},
"UpdateCommandMenuItemInput": {
"id": [
- 3
+ 4
],
"label": [
1
@@ -10780,25 +10829,25 @@ export default {
1
],
"position": [
- 12
+ 16
],
"isPinned": [
- 6
- ],
- "availabilityType": [
- 37
- ],
- "availabilityObjectMetadataId": [
3
],
+ "availabilityType": [
+ 18
+ ],
+ "availabilityObjectMetadataId": [
+ 4
+ ],
"engineComponentKey": [
- 36
+ 17
],
"hotKeys": [
1
],
"pageLayoutId": [
- 3
+ 4
],
"__typename": [
1
@@ -10806,7 +10855,7 @@ export default {
},
"CreateFrontComponentInput": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -10832,10 +10881,10 @@ export default {
},
"UpdateFrontComponentInput": {
"id": [
- 3
+ 4
],
"update": [
- 430
+ 432
],
"__typename": [
1
@@ -10877,43 +10926,43 @@ export default {
1
],
"isPublicInviteLinkEnabled": [
- 6
- ],
- "workspaceDiscoverability": [
- 72
- ],
- "allowImpersonation": [
- 6
- ],
- "isGoogleAuthEnabled": [
- 6
- ],
- "isMicrosoftAuthEnabled": [
- 6
- ],
- "isPasswordAuthEnabled": [
- 6
- ],
- "isGoogleAuthBypassEnabled": [
- 6
- ],
- "isMicrosoftAuthBypassEnabled": [
- 6
- ],
- "isPasswordAuthBypassEnabled": [
- 6
- ],
- "defaultRoleId": [
3
],
+ "workspaceDiscoverability": [
+ 71
+ ],
+ "allowImpersonation": [
+ 3
+ ],
+ "isGoogleAuthEnabled": [
+ 3
+ ],
+ "isMicrosoftAuthEnabled": [
+ 3
+ ],
+ "isPasswordAuthEnabled": [
+ 3
+ ],
+ "isGoogleAuthBypassEnabled": [
+ 3
+ ],
+ "isMicrosoftAuthBypassEnabled": [
+ 3
+ ],
+ "isPasswordAuthBypassEnabled": [
+ 3
+ ],
+ "defaultRoleId": [
+ 4
+ ],
"isTwoFactorAuthenticationEnforced": [
- 6
+ 3
],
"trashRetentionDays": [
- 12
+ 16
],
"eventLogRetentionDays": [
- 12
+ 16
],
"fastModel": [
1
@@ -10931,10 +10980,10 @@ export default {
1
],
"useRecommendedModels": [
- 6
+ 3
],
"isInternalMessagesImportEnabled": [
- 6
+ 3
],
"__typename": [
1
@@ -10962,7 +11011,7 @@ export default {
1
],
"update": [
- 435
+ 437
],
"__typename": [
1
@@ -10979,13 +11028,13 @@ export default {
1
],
"isListed": [
- 6
+ 3
],
"isPreInstalled": [
- 6
+ 3
],
"isVetted": [
- 6
+ 3
],
"__typename": [
1
@@ -11005,7 +11054,7 @@ export default {
1
],
"isSecret": [
- 6
+ 3
],
"__typename": [
1
@@ -11016,7 +11065,7 @@ export default {
1
],
"update": [
- 438
+ 440
],
"__typename": [
1
@@ -11027,7 +11076,7 @@ export default {
1
],
"resetValue": [
- 6
+ 3
],
"description": [
1
@@ -11038,7 +11087,7 @@ export default {
},
"UpdateApplicationInput": {
"autoUpgrade": [
- 6
+ 3
],
"__typename": [
1
@@ -11046,7 +11095,7 @@ export default {
},
"CreateOneFieldMetadataInput": {
"field": [
- 441
+ 443
],
"__typename": [
1
@@ -11054,7 +11103,7 @@ export default {
},
"CreateFieldInput": {
"type": [
- 44
+ 25
],
"name": [
1
@@ -11069,46 +11118,46 @@ export default {
1
],
"isActive": [
- 6
- ],
- "isSystem": [
- 6
- ],
- "isUIEditable": [
- 6
- ],
- "isUIReadOnly": [
- 6
- ],
- "isNullable": [
- 6
- ],
- "isUnique": [
- 6
- ],
- "defaultValue": [
- 7
- ],
- "options": [
- 7
- ],
- "settings": [
- 7
- ],
- "objectMetadataId": [
3
],
+ "isSystem": [
+ 3
+ ],
+ "isUIEditable": [
+ 3
+ ],
+ "isUIReadOnly": [
+ 3
+ ],
+ "isNullable": [
+ 3
+ ],
+ "isUnique": [
+ 3
+ ],
+ "defaultValue": [
+ 5
+ ],
+ "options": [
+ 5
+ ],
+ "settings": [
+ 5
+ ],
+ "objectMetadataId": [
+ 4
+ ],
"isLabelSyncedWithName": [
- 6
+ 3
],
"isRemoteCreation": [
- 6
+ 3
],
"relationCreationPayload": [
- 7
+ 5
],
"morphRelationsCreationPayload": [
- 7
+ 5
],
"__typename": [
1
@@ -11116,10 +11165,10 @@ export default {
},
"UpdateOneFieldMetadataInput": {
"id": [
- 3
+ 4
],
"update": [
- 443
+ 445
],
"__typename": [
1
@@ -11142,40 +11191,40 @@ export default {
1
],
"isActive": [
- 6
- ],
- "isSystem": [
- 6
- ],
- "isUIEditable": [
- 6
- ],
- "isUIReadOnly": [
- 6
- ],
- "isNullable": [
- 6
- ],
- "isUnique": [
- 6
- ],
- "defaultValue": [
- 7
- ],
- "options": [
- 7
- ],
- "settings": [
- 7
- ],
- "objectMetadataId": [
3
],
+ "isSystem": [
+ 3
+ ],
+ "isUIEditable": [
+ 3
+ ],
+ "isUIReadOnly": [
+ 3
+ ],
+ "isNullable": [
+ 3
+ ],
+ "isUnique": [
+ 3
+ ],
+ "defaultValue": [
+ 5
+ ],
+ "options": [
+ 5
+ ],
+ "settings": [
+ 5
+ ],
+ "objectMetadataId": [
+ 4
+ ],
"isLabelSyncedWithName": [
- 6
+ 3
],
"morphRelationsUpdatePayload": [
- 7
+ 5
],
"__typename": [
1
@@ -11183,7 +11232,7 @@ export default {
},
"DeleteOneFieldInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -11191,19 +11240,19 @@ export default {
},
"CreateViewGroupInput": {
"id": [
- 3
+ 4
],
"isVisible": [
- 6
+ 3
],
"fieldValue": [
1
],
"position": [
- 12
+ 16
],
"viewId": [
- 3
+ 4
],
"__typename": [
1
@@ -11211,10 +11260,10 @@ export default {
},
"UpdateViewGroupInput": {
"id": [
- 3
+ 4
],
"update": [
- 447
+ 449
],
"__typename": [
1
@@ -11222,16 +11271,16 @@ export default {
},
"UpdateViewGroupInputUpdates": {
"fieldMetadataId": [
- 3
+ 4
],
"isVisible": [
- 6
+ 3
],
"fieldValue": [
1
],
"position": [
- 12
+ 16
],
"__typename": [
1
@@ -11239,7 +11288,7 @@ export default {
},
"DeleteViewGroupInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -11247,7 +11296,7 @@ export default {
},
"DestroyViewGroupInput": {
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -11267,31 +11316,31 @@ export default {
1
],
"canUpdateAllSettings": [
- 6
+ 3
],
"canAccessAllTools": [
- 6
+ 3
],
"canReadAllObjectRecords": [
- 6
+ 3
],
"canUpdateAllObjectRecords": [
- 6
+ 3
],
"canSoftDeleteAllObjectRecords": [
- 6
+ 3
],
"canDestroyAllObjectRecords": [
- 6
+ 3
],
"canBeAssignedToUsers": [
- 6
+ 3
],
"canBeAssignedToAgents": [
- 6
+ 3
],
"canBeAssignedToApiKeys": [
- 6
+ 3
],
"__typename": [
1
@@ -11299,10 +11348,10 @@ export default {
},
"UpdateRoleInput": {
"update": [
- 452
+ 454
],
"id": [
- 3
+ 4
],
"__typename": [
1
@@ -11319,31 +11368,31 @@ export default {
1
],
"canUpdateAllSettings": [
- 6
+ 3
],
"canAccessAllTools": [
- 6
+ 3
],
"canReadAllObjectRecords": [
- 6
+ 3
],
"canUpdateAllObjectRecords": [
- 6
+ 3
],
"canSoftDeleteAllObjectRecords": [
- 6
+ 3
],
"canDestroyAllObjectRecords": [
- 6
+ 3
],
"canBeAssignedToUsers": [
- 6
+ 3
],
"canBeAssignedToAgents": [
- 6
+ 3
],
"canBeAssignedToApiKeys": [
- 6
+ 3
],
"__typename": [
1
@@ -11351,10 +11400,10 @@ export default {
},
"UpsertObjectPermissionsInput": {
"roleId": [
- 3
+ 4
],
"objectPermissions": [
- 454
+ 456
],
"__typename": [
1
@@ -11362,19 +11411,19 @@ export default {
},
"ObjectPermissionInput": {
"objectMetadataId": [
- 3
+ 4
],
"canReadObjectRecords": [
- 6
+ 3
],
"canUpdateObjectRecords": [
- 6
+ 3
],
"canSoftDeleteObjectRecords": [
- 6
+ 3
],
"canDestroyObjectRecords": [
- 6
+ 3
],
"__typename": [
1
@@ -11382,7 +11431,7 @@ export default {
},
"UpsertPermissionFlagsInput": {
"roleId": [
- 3
+ 4
],
"permissionFlagKeys": [
1
@@ -11393,10 +11442,10 @@ export default {
},
"UpsertFieldPermissionsInput": {
"roleId": [
- 3
+ 4
],
"fieldPermissions": [
- 457
+ 459
],
"__typename": [
1
@@ -11404,16 +11453,16 @@ export default {
},
"FieldPermissionInput": {
"objectMetadataId": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"canReadFieldValue": [
- 6
+ 3
],
"canUpdateFieldValue": [
- 6
+ 3
],
"__typename": [
1
@@ -11421,16 +11470,16 @@ export default {
},
"UpsertRowLevelPermissionPredicatesInput": {
"roleId": [
- 3
+ 4
],
"objectMetadataId": [
- 3
+ 4
],
"predicates": [
- 459
+ 461
],
"predicateGroups": [
- 460
+ 462
],
"__typename": [
1
@@ -11438,16 +11487,16 @@ export default {
},
"RowLevelPermissionPredicateInput": {
"id": [
- 3
+ 4
],
"fieldMetadataId": [
- 3
+ 4
],
"operand": [
- 15
+ 45
],
"value": [
- 7
+ 5
],
"subFieldName": [
1
@@ -11459,10 +11508,10 @@ export default {
1
],
"rowLevelPermissionPredicateGroupId": [
- 3
+ 4
],
"positionInRowLevelPermissionPredicateGroup": [
- 12
+ 16
],
"__typename": [
1
@@ -11470,19 +11519,19 @@ export default {
},
"RowLevelPermissionPredicateGroupInput": {
"id": [
- 3
+ 4
],
"objectMetadataId": [
- 3
+ 4
],
"parentRowLevelPermissionPredicateGroupId": [
- 3
+ 4
],
"logicalOperator": [
- 13
+ 43
],
"positionInRowLevelPermissionPredicateGroup": [
- 12
+ 16
],
"__typename": [
1
@@ -11573,10 +11622,10 @@ export default {
},
"UpdateMessageChannelInput": {
"id": [
- 3
+ 4
],
"update": [
- 466
+ 468
],
"__typename": [
1
@@ -11587,7 +11636,7 @@ export default {
274
],
"isContactAutoCreationEnabled": [
- 6
+ 3
],
"contactAutoCreationPolicy": [
276
@@ -11596,13 +11645,13 @@ export default {
277
],
"isSyncEnabled": [
- 6
+ 3
],
"excludeNonProfessionalEmails": [
- 6
+ 3
],
"excludeGroupEmails": [
- 6
+ 3
],
"__typename": [
1
@@ -11637,7 +11686,7 @@ export default {
},
"CreateWebhookInput": {
"id": [
- 3
+ 4
],
"targetUrl": [
1
@@ -11657,10 +11706,10 @@ export default {
},
"UpdateWebhookInput": {
"id": [
- 3
+ 4
],
"update": [
- 472
+ 474
],
"__typename": [
1
@@ -11685,10 +11734,10 @@ export default {
},
"UpdateMessageFolderInput": {
"id": [
- 3
+ 4
],
"update": [
- 474
+ 476
],
"__typename": [
1
@@ -11696,7 +11745,7 @@ export default {
},
"UpdateMessageFolderInputUpdates": {
"isSynced": [
- 6
+ 3
],
"__typename": [
1
@@ -11704,10 +11753,10 @@ export default {
},
"UpdateMessageFoldersInput": {
"ids": [
- 3
+ 4
],
"update": [
- 474
+ 476
],
"__typename": [
1
@@ -11715,10 +11764,10 @@ export default {
},
"UpdateCalendarChannelInput": {
"id": [
- 3
+ 4
],
"update": [
- 477
+ 479
],
"__typename": [
1
@@ -11726,16 +11775,30 @@ export default {
},
"UpdateCalendarChannelInputUpdates": {
"visibility": [
- 329
+ 331
],
"isContactAutoCreationEnabled": [
- 6
+ 3
],
"contactAutoCreationPolicy": [
- 330
+ 332
],
"isSyncEnabled": [
- 6
+ 3
+ ],
+ "__typename": [
+ 1
+ ]
+ },
+ "SetAppKeyValueInput": {
+ "key": [
+ 1
+ ],
+ "value": [
+ 5
+ ],
+ "scope": [
+ 327
],
"__typename": [
1
@@ -11743,7 +11806,7 @@ export default {
},
"FileAttachmentInput": {
"id": [
- 3
+ 4
],
"filename": [
1
@@ -11754,10 +11817,10 @@ export default {
},
"AgentChatQuestionAnswerInput": {
"questionIndex": [
- 21
+ 30
],
"selectedOptionIndices": [
- 21
+ 30
],
"freeText": [
1
@@ -11768,7 +11831,7 @@ export default {
},
"CreateSkillInput": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -11791,7 +11854,7 @@ export default {
},
"UpdateSkillInput": {
"id": [
- 3
+ 4
],
"name": [
1
@@ -11809,7 +11872,7 @@ export default {
1
],
"isActive": [
- 6
+ 3
],
"__typename": [
1
@@ -11817,7 +11880,7 @@ export default {
},
"GetAuthorizationUrlForSSOInput": {
"identityProviderId": [
- 3
+ 4
],
"workspaceInviteHash": [
1
@@ -11839,10 +11902,10 @@ export default {
},
"UpdateWorkspaceMemberSettingsInput": {
"workspaceMemberId": [
- 3
+ 4
],
"update": [
- 7
+ 5
],
"__typename": [
1
@@ -11873,7 +11936,7 @@ export default {
1
],
"id": [
- 3
+ 4
],
"ssoURL": [
1
@@ -11890,7 +11953,7 @@ export default {
},
"DeleteSsoInput": {
"identityProviderId": [
- 3
+ 4
],
"__typename": [
1
@@ -11898,7 +11961,7 @@ export default {
},
"EditSsoInput": {
"id": [
- 3
+ 4
],
"status": [
177
@@ -11928,7 +11991,7 @@ export default {
1
],
"isFullDay": [
- 6
+ 3
],
"timeZone": [
1
@@ -11937,10 +12000,10 @@ export default {
1
],
"sendInvitations": [
- 6
+ 3
],
"addConferencing": [
- 6
+ 3
],
"__typename": [
1
@@ -11972,7 +12035,7 @@ export default {
1
],
"files": [
- 492
+ 495
],
"__typename": [
1
@@ -11994,13 +12057,13 @@ export default {
1
],
"IMAP": [
- 494
+ 497
],
"SMTP": [
- 494
+ 497
],
"CALDAV": [
- 494
+ 497
],
"__typename": [
1
@@ -12011,7 +12074,7 @@ export default {
1
],
"port": [
- 12
+ 16
],
"username": [
1
@@ -12031,7 +12094,7 @@ export default {
1
],
"value": [
- 6
+ 3
],
"__typename": [
1
@@ -12051,7 +12114,7 @@ export default {
236,
{
"input": [
- 497,
+ 500,
"LogicFunctionLogsInput!"
]
}
@@ -12060,7 +12123,7 @@ export default {
322,
{
"threadId": [
- 3,
+ 4,
"UUID!"
]
}
@@ -12069,7 +12132,7 @@ export default {
311,
{
"table": [
- 346,
+ 348,
"EventLogTable!"
]
}
@@ -12080,19 +12143,19 @@ export default {
},
"LogicFunctionLogsInput": {
"applicationId": [
- 3
+ 4
],
"applicationUniversalIdentifier": [
- 3
+ 4
],
"name": [
1
],
"id": [
- 3
+ 4
],
"universalIdentifier": [
- 3
+ 4
],
"__typename": [
1
diff --git a/packages/twenty-docs/developers/extend/apps/logic/key-value-store.mdx b/packages/twenty-docs/developers/extend/apps/logic/key-value-store.mdx
index 2cb60ece0e..893219f4c5 100644
--- a/packages/twenty-docs/developers/extend/apps/logic/key-value-store.mdx
+++ b/packages/twenty-docs/developers/extend/apps/logic/key-value-store.mdx
@@ -1,153 +1,57 @@
---
title: Key-Value Store
-description: Persist intermediate results, cache data, and share state across logic function runs with a simple key-value object.
+description: Persist intermediate results, cache data, and share state across logic function runs with the built-in application key-value store.
icon: "database"
---
-Logic functions run sandboxed in short-lived Node.js processes — once a run finishes, nothing it kept in memory survives. When you need to **remember something between runs** (cache an expensive API response, store a cursor for incremental syncs, debounce work, or hand state from one function to another), persist it in the workspace database.
+Logic functions run sandboxed in short-lived Node.js processes — once a run finishes, nothing it kept in memory survives. When you need to **remember something between runs** (cache an expensive API response, store a cursor for incremental syncs, debounce work, or hand state from one function to another), persist it in the built-in key-value store.
-You don't need a dedicated storage primitive for this: a small **technical object** with a `key` field and a `value` field gives you a durable key-value store, scoped to the workspace, queryable through the same [typed API client](/developers/extend/apps/logic/logic-functions#typed-api-clients-twenty-client-sdk) you already use for records.
+Every application gets its own isolated namespace: entries are keyed by the authenticated app, so your keys can never collide with — or be read by — another application.
```text
- ┌─────────────────┐ set(key, value) ┌──────────────────────────┐
- │ Logic function │ ───────────────────▶ │ "KV Store" object │
- │ (your handler) │ ◀─────────────────── │ key (unique) │ value │
- └─────────────────┘ get(key) └──────────────────────────┘
+ ┌─────────────────┐ kv.set(key, value) ┌──────────────────────────┐
+ │ Logic function │ ─────────────────────▶ │ Application KV store │
+ │ (your handler) │ ◀───────────────────── │ key (unique) │ value │
+ └─────────────────┘ kv.get(key) └──────────────────────────┘
```
-## Define the store object
+## Get, set, delete
-Declare a custom object with two fields — `key` (a unique `TEXT`) and `value` (a `RAW_JSON` so you can store any JSON-serializable payload). See [Objects](/developers/extend/apps/data/objects) for the full `defineObject` reference.
+Import `kv` from `twenty-sdk/logic-function`. Values can be any JSON-serializable payload.
-```ts src/objects/kv-store.object.ts
-import { defineObject, FieldType } from 'twenty-sdk/define';
+```ts src/logic-functions/sync-linear-issues.ts
+import { kv } from 'twenty-sdk/logic-function';
-export const KV_STORE_UNIVERSAL_IDENTIFIER =
- '2f1c8a90-3b6d-4e2a-9c47-7d0e5a1b9f33';
-export const KV_STORE_KEY_FIELD_UNIVERSAL_IDENTIFIER =
- '4a7e2d11-9c83-4f60-b5a2-1e6c8d0f4b21';
-export const KV_STORE_VALUE_FIELD_UNIVERSAL_IDENTIFIER =
- '8b3f6c02-5d19-47ae-9f31-2c4a7e0b6d58';
+// Read a value. Returns null when the key is missing.
+const cursor = await kv.get('sync-cursor:linear');
-export default defineObject({
- universalIdentifier: KV_STORE_UNIVERSAL_IDENTIFIER,
- nameSingular: 'kvStore',
- namePlural: 'kvStores',
- labelSingular: 'KV Store',
- labelPlural: 'KV Store',
- description: 'Key-value storage for logic functions',
- icon: 'IconDatabase',
- fields: [
- {
- universalIdentifier: KV_STORE_KEY_FIELD_UNIVERSAL_IDENTIFIER,
- name: 'key',
- type: FieldType.TEXT,
- label: 'Key',
- description: 'Unique lookup key',
- icon: 'IconKey',
- },
- {
- universalIdentifier: KV_STORE_VALUE_FIELD_UNIVERSAL_IDENTIFIER,
- name: 'value',
- type: FieldType.RAW_JSON,
- label: 'Value',
- description: 'Stored JSON payload',
- icon: 'IconJson',
- },
- ],
+// Write a value. Creates the entry on first write, updates it afterwards.
+await kv.set('sync-cursor:linear', newCursor);
+
+// Delete an entry. Returns true when an entry was removed.
+await kv.delete('sync-cursor:linear');
+```
+
+## Scopes
+
+Each entry has a scope, passed as an option on every call. The default is `WORKSPACE`.
+
+- **`WORKSPACE`** (default) — the entry is private to the current workspace install of your app. Each workspace that installs the app gets its own independent set of keys. This is what you want for caches, cursors, and per-workspace state.
+- **`SERVER`** — the entry is shared across **every install** of your app on the server. Server entries behave like **claims**: the stored value is always the workspaceId that claimed the key (omit `value` on `set` to claim the key for the current workspace), and only that workspace can overwrite or delete it. Any install can read the entry.
+
+Server claims exist for cross-workspace routing. A [server-route resolver](/developers/extend/apps/logic/logic-functions#server-route-trigger) runs in the application registration owner workspace, but an inbound webhook usually only carries an external account id — not a Twenty workspaceId. Have each workspace claim its external id at connect time, then resolve it in the route:
+
+```ts
+// In the connected workspace, when the external account is linked:
+await kv.set(`slack:team:${teamId}`, undefined, { scope: 'SERVER' });
+
+// In the server-route resolver (owner workspace), on each webhook:
+const workspaceId = await kv.get(`slack:team:${teamId}`, {
+ scope: 'SERVER',
});
```
-### Enforce key uniqueness
-
-Add a **unique index** on `key` so the same key can never have two rows. This is the recommended primitive for uniqueness — see [Data → Unique indexes](/developers/extend/apps/data/overview#unique-indexes).
-
-```ts src/indexes/kv-store-key.index.ts
-import { defineIndex } from 'twenty-sdk/define';
-import {
- KV_STORE_UNIVERSAL_IDENTIFIER,
- KV_STORE_KEY_FIELD_UNIVERSAL_IDENTIFIER,
-} from '../objects/kv-store.object';
-
-export default defineIndex({
- universalIdentifier: 'c0d4e8f2-6a1b-4c93-8e57-3f9a2d0b7e14',
- objectUniversalIdentifier: KV_STORE_UNIVERSAL_IDENTIFIER,
- isUnique: true,
- fields: [
- {
- universalIdentifier: 'c0d4e8f2-6a1b-4c93-8e57-3f9a2d0b7e15',
- fieldUniversalIdentifier: KV_STORE_KEY_FIELD_UNIVERSAL_IDENTIFIER,
- },
- ],
-});
-```
-
-## Read and write from a logic function
-
-Wrap the object behind a few small helpers so the rest of your code reads like a key-value API — `get`, `set`, and `del`. They use [`CoreApiClient`](/developers/extend/apps/logic/logic-functions#typed-api-clients-twenty-client-sdk), which is generated from your workspace schema and fully typed against the `kvStore` object.
-
-```ts src/logic-functions/handlers/kv-store.ts
-import { CoreApiClient } from 'twenty-client-sdk/core';
-import { isDefined } from 'twenty-sdk/utils';
-
-const client = new CoreApiClient();
-
-// Look up a single row by its key.
-const findByKey = async (key: string) => {
- const { kvStores } = await client.query({
- kvStores: {
- __args: { filter: { key: { eq: key } }, first: 1 },
- edges: { node: { id: true, value: true } },
- },
- });
-
- return kvStores.edges[0]?.node;
-};
-
-// Read a value. Returns undefined when the key is missing.
-export const get = async (key: string): Promise => {
- const row = await findByKey(key);
-
- return isDefined(row) ? (row.value as TValue) : undefined;
-};
-
-// Write a value. Creates the row on first write, updates it afterwards (upsert).
-export const set = async (key: string, value: unknown): Promise => {
- const existing = await findByKey(key);
-
- if (isDefined(existing)) {
- await client.mutation({
- updateKvStore: {
- __args: { id: existing.id, data: { value } },
- id: true,
- },
- });
- return;
- }
-
- await client.mutation({
- createKvStore: {
- __args: { data: { key, value } },
- id: true,
- },
- });
-};
-
-// Delete a value. No-op when the key is missing.
-export const del = async (key: string): Promise => {
- const existing = await findByKey(key);
-
- if (isDefined(existing)) {
- await client.mutation({
- deleteKvStore: { __args: { id: existing.id }, id: true },
- });
- }
-};
-```
-
-
-The unique index protects against duplicates, but two runs writing the **same new key** at the same instant can still race between the lookup and the create. Treat a create that fails on the uniqueness constraint as "someone else won" — catch it and re-read, or retry as an update.
-
+Because a server key can only be claimed for the caller's own workspace and never overwritten by another one, a workspace can't hijack a mapping that belongs to someone else. `kv.set` throws when the key is already claimed by another workspace.
## Use it: cache an expensive call
@@ -155,15 +59,15 @@ A typical use is caching a slow or rate-limited third-party response so repeated
```ts src/logic-functions/getExchangeRate.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk/define';
-import { get, set } from './handlers/kv-store';
+import { kv } from 'twenty-sdk/logic-function';
const ONE_HOUR_MS = 60 * 60 * 1000;
type CachedRate = { rate: number; fetchedAt: number };
const handler = async (params: { from: string; to: string }) => {
- const cacheKey = `exchange-rate:${params.from}:${params.to}`;
- const cached = await get(cacheKey);
+ const cacheKey = `cache:exchange-rate:${params.from}:${params.to}`;
+ const cached = await kv.get(cacheKey);
if (cached && Date.now() - cached.fetchedAt < ONE_HOUR_MS) {
return { rate: cached.rate, cached: true };
@@ -174,7 +78,7 @@ const handler = async (params: { from: string; to: string }) => {
);
const { rate } = (await response.json()) as { rate: number };
- await set(cacheKey, { rate, fetchedAt: Date.now() });
+ await kv.set(cacheKey, { rate, fetchedAt: Date.now() });
return { rate, cached: false };
};
@@ -189,12 +93,18 @@ export default defineLogicFunction({
## Patterns & tips
-- **Namespacing.** Prefix keys to keep different concerns apart and to make bulk lookups easy — `sync-cursor:linear`, `cache:exchange-rate:USD:EUR`, `lock:nightly-report`. Filter with `key: { like: 'cache:%' }` to list or clear a whole namespace.
-- **Expiry (TTL).** The store has no built-in expiration. Store a timestamp inside the `value` (as in the cache example) and check it on read, or add a `DATE_TIME` field and periodically clear stale rows from a [cron-triggered function](/developers/extend/apps/logic/logic-functions).
-- **What to store.** `RAW_JSON` holds any JSON-serializable value — numbers, strings, arrays, objects. Keep entries small; this is for coordination and caching, not large blobs or files. For files, use a `FILES` field and [`uploadFile`](/developers/extend/apps/logic/logic-functions#uploading-files).
+- **Namespacing.** Prefix keys to keep different concerns apart — `sync-cursor:linear`, `cache:exchange-rate:USD:EUR`, `lock:nightly-report`.
+- **Expiry (TTL).** The store has no built-in expiration. Store a timestamp inside the value (as in the cache example) and check it on read, or clear stale keys from a [cron-triggered function](/developers/extend/apps/logic/logic-functions).
+- **What to store.** Any JSON-serializable value — numbers, strings, arrays, objects. Keep entries small; this is for coordination and caching, not large blobs or files. For files, use a `FILES` field and [`uploadFile`](/developers/extend/apps/logic/logic-functions#uploading-files).
+- **Visibility.** Entries live in the instance database, not as workspace records — they never show up in the workspace UI, aren't part of your app's data model, and need no role or object permissions.
+
+## Alternative: a queryable store object
+
+The built-in store is deliberately opaque: entries aren't records, so you can't browse them in the UI, relate them to other objects, or filter them with record queries. When you need any of that — say a visible sync log, or per-record state — define a small **technical object** with a unique `key` field and a `RAW_JSON` `value` field instead, and query it through the [typed API client](/developers/extend/apps/logic/logic-functions#typed-api-clients-twenty-client-sdk). See [Objects](/developers/extend/apps/data/objects) for the `defineObject` reference and [Data → Unique indexes](/developers/extend/apps/data/overview#unique-indexes) for enforcing key uniqueness.
+
+- **Scoping to a record.** Add a [relation](/developers/extend/apps/data/relations) from the store object to the target object rather than encoding the id into the key.
- **Visibility & permissions.** Rows live in the workspace database like any other record, so they're queryable through the API and respect your app's [role](/developers/extend/apps/config/roles). To keep the store out of the main UI, leave it off your [navigation menu](/developers/extend/apps/layout/navigation-menu-items).
-- **Scoping to a record.** Need per-record state instead of global keys? Add a [relation](/developers/extend/apps/data/relations) from the store object to the target object rather than encoding the id into the key.
-This is a convention, not a separate feature — the "KV Store" is just a regular custom object you define and query with the standard API. That means it benefits from the same sync, permissions, and tooling as the rest of your app's data.
+Unlike the built-in store, a custom object is always scoped to one workspace — it can't share entries across installs the way `SERVER` keys do.
diff --git a/packages/twenty-docs/developers/extend/apps/logic/overview.mdx b/packages/twenty-docs/developers/extend/apps/logic/overview.mdx
index fb0107689e..f4ac0a1b20 100644
--- a/packages/twenty-docs/developers/extend/apps/logic/overview.mdx
+++ b/packages/twenty-docs/developers/extend/apps/logic/overview.mdx
@@ -34,6 +34,9 @@ A Twenty app's **logic layer** is the code that *runs* — server-side TypeScrip
OAuth credentials your app holds for third-party services — Linear, GitHub, Slack, and more.
+
+ Persist state between logic function runs — caches, cursors, and cross-workspace claims.
+
## Trigger types at a glance
diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts
index 045da6015f..a2f4a5c668 100644
--- a/packages/twenty-front/src/generated-metadata/graphql.ts
+++ b/packages/twenty-front/src/generated-metadata/graphql.ts
@@ -279,6 +279,19 @@ export type AppConnection = {
visibility: Scalars['String']['output'];
};
+export type AppKeyValue = {
+ __typename?: 'AppKeyValue';
+ key: Scalars['String']['output'];
+ scope: AppKeyValueScope;
+ value?: Maybe;
+};
+
+/** WORKSPACE entries are private to one workspace install of the application. SERVER entries are shared across every install: the value is always the claiming workspaceId and only that workspace can overwrite or delete the key. */
+export enum AppKeyValueScope {
+ SERVER = 'SERVER',
+ WORKSPACE = 'WORKSPACE'
+}
+
export type Application = {
__typename?: 'Application';
agents: Array;
@@ -2556,6 +2569,7 @@ export type Mutation = {
createViewSort: ViewSort;
createWebhook: Webhook;
deactivateSkill: Skill;
+ deleteAppKeyValue: Scalars['Boolean']['output'];
deleteApplicationRegistration: Scalars['Boolean']['output'];
deleteApplicationRegistrationVariable: Scalars['Boolean']['output'];
deleteApprovedAccessDomain: Scalars['Boolean']['output'];
@@ -2645,6 +2659,7 @@ export type Mutation = {
sendEmailViaEmailingDomain: SendEmailViaDomainOutput;
sendInvitations: SendInvitations;
sendMessageCampaign: SendMessageCampaignOutputDto;
+ setAppKeyValue: AppKeyValue;
setEnterpriseKey: EnterpriseLicenseInfoDto;
setResourceCreditSubscriptionPrice: BillingUpdate;
signIn: AvailableWorkspacesAndAccessTokens;
@@ -3017,6 +3032,12 @@ export type MutationDeactivateSkillArgs = {
};
+export type MutationDeleteAppKeyValueArgs = {
+ key: Scalars['String']['input'];
+ scope?: InputMaybe;
+};
+
+
export type MutationDeleteApplicationRegistrationArgs = {
id: Scalars['String']['input'];
};
@@ -3444,6 +3465,11 @@ export type MutationSendMessageCampaignArgs = {
};
+export type MutationSetAppKeyValueArgs = {
+ input: SetAppKeyValueInput;
+};
+
+
export type MutationSetEnterpriseKeyArgs = {
enterpriseKey: Scalars['String']['input'];
};
@@ -4343,6 +4369,7 @@ export type Query = {
apiKeys: Array;
appConnection: AppConnection;
appConnections: Array;
+ appKeyValue?: Maybe;
applicationConnectionProviders: Array;
applicationRegistrationTarballUrl?: Maybe;
applicationSdkClientChecksums?: Maybe;
@@ -4473,6 +4500,12 @@ export type QueryAppConnectionsArgs = {
};
+export type QueryAppKeyValueArgs = {
+ key: Scalars['String']['input'];
+ scope?: InputMaybe;
+};
+
+
export type QueryApplicationConnectionProvidersArgs = {
applicationId: Scalars['UUID']['input'];
};
@@ -5152,6 +5185,12 @@ export type Sentry = {
release?: Maybe;
};
+export type SetAppKeyValueInput = {
+ key: Scalars['String']['input'];
+ scope?: InputMaybe;
+ value?: InputMaybe;
+};
+
export type SetupOidcSsoInput = {
clientID: Scalars['String']['input'];
clientSecret: Scalars['String']['input'];
diff --git a/packages/twenty-sdk/src/sdk/logic-function/index.ts b/packages/twenty-sdk/src/sdk/logic-function/index.ts
index 9a733980f3..d8c5154f95 100644
--- a/packages/twenty-sdk/src/sdk/logic-function/index.ts
+++ b/packages/twenty-sdk/src/sdk/logic-function/index.ts
@@ -51,5 +51,8 @@ export type { AppConnection } from '@/sdk/logic-function/connections/types/app-c
export { runAgent } from '@/sdk/logic-function/agents/run-agent';
export type { RunAgentInput, RunAgentResult } from 'twenty-shared/application';
+export { kv } from '@/sdk/logic-function/key-value/kv';
+export type { AppKeyValue, AppKeyValueScope } from 'twenty-shared/application';
+
export { Response } from '@/sdk/logic-function/response';
export type { ResponseInit } from '@/sdk/logic-function/response';
diff --git a/packages/twenty-sdk/src/sdk/logic-function/key-value/__tests__/kv.spec.ts b/packages/twenty-sdk/src/sdk/logic-function/key-value/__tests__/kv.spec.ts
new file mode 100644
index 0000000000..6448e60406
--- /dev/null
+++ b/packages/twenty-sdk/src/sdk/logic-function/key-value/__tests__/kv.spec.ts
@@ -0,0 +1,131 @@
+import {
+ afterEach,
+ beforeEach,
+ describe,
+ expect,
+ it,
+ vi,
+ type MockInstance,
+} from 'vitest';
+
+import { kv } from '@/sdk/logic-function/key-value/kv';
+
+describe('kv', () => {
+ let fetchSpy: MockInstance;
+
+ beforeEach(() => {
+ process.env.TWENTY_API_URL = 'https://api.test';
+ process.env.TWENTY_APP_ACCESS_TOKEN = 'app-token';
+ fetchSpy = vi.spyOn(globalThis, 'fetch');
+ });
+
+ afterEach(() => {
+ delete process.env.TWENTY_API_URL;
+ delete process.env.TWENTY_APP_ACCESS_TOKEN;
+ fetchSpy.mockRestore();
+ });
+
+ it('gets a value with the WORKSPACE scope by default', async () => {
+ fetchSpy.mockResolvedValue(
+ new Response(
+ JSON.stringify({
+ data: {
+ appKeyValue: {
+ key: 'my-key',
+ value: { count: 3 },
+ scope: 'WORKSPACE',
+ },
+ },
+ }),
+ { status: 200 },
+ ),
+ );
+
+ const value = await kv.get<{ count: number }>('my-key');
+
+ expect(value).toEqual({ count: 3 });
+
+ const [url, requestInit] = fetchSpy.mock.calls[0];
+
+ expect(url).toBe('https://api.test/metadata');
+
+ const sentBody = JSON.parse(requestInit?.body as string);
+
+ expect(sentBody.query).toContain('appKeyValue(key: $key, scope: $scope)');
+ expect(sentBody.variables).toEqual({ key: 'my-key', scope: 'WORKSPACE' });
+ });
+
+ it('returns null when the key is absent', async () => {
+ fetchSpy.mockResolvedValue(
+ new Response(JSON.stringify({ data: { appKeyValue: null } }), {
+ status: 200,
+ }),
+ );
+
+ const value = await kv.get('missing-key');
+
+ expect(value).toBeNull();
+ });
+
+ it('sets a value with an explicit SERVER scope', async () => {
+ fetchSpy.mockResolvedValue(
+ new Response(
+ JSON.stringify({
+ data: {
+ setAppKeyValue: {
+ key: 'slack:team:T123',
+ value: 'workspace-1',
+ scope: 'SERVER',
+ },
+ },
+ }),
+ { status: 200 },
+ ),
+ );
+
+ await kv.set('slack:team:T123', 'workspace-1', { scope: 'SERVER' });
+
+ const [, requestInit] = fetchSpy.mock.calls[0];
+ const sentBody = JSON.parse(requestInit?.body as string);
+
+ expect(sentBody.variables).toEqual({
+ input: {
+ key: 'slack:team:T123',
+ value: 'workspace-1',
+ scope: 'SERVER',
+ },
+ });
+ });
+
+ it('deletes a key and returns whether a row was removed', async () => {
+ fetchSpy.mockResolvedValue(
+ new Response(JSON.stringify({ data: { deleteAppKeyValue: true } }), {
+ status: 200,
+ }),
+ );
+
+ const deleted = await kv.delete('my-key');
+
+ expect(deleted).toBe(true);
+
+ const [, requestInit] = fetchSpy.mock.calls[0];
+ const sentBody = JSON.parse(requestInit?.body as string);
+
+ expect(sentBody.variables).toEqual({ key: 'my-key', scope: 'WORKSPACE' });
+ });
+
+ it('surfaces GraphQL errors as a regular Error', async () => {
+ fetchSpy.mockResolvedValue(
+ new Response(
+ JSON.stringify({
+ errors: [{ message: 'already claimed by another workspace' }],
+ }),
+ { status: 200 },
+ ),
+ );
+
+ await expect(
+ kv.set('slack:team:T123', undefined, { scope: 'SERVER' }),
+ ).rejects.toThrow(/already claimed/);
+ });
+});
diff --git a/packages/twenty-sdk/src/sdk/logic-function/key-value/kv.ts b/packages/twenty-sdk/src/sdk/logic-function/key-value/kv.ts
new file mode 100644
index 0000000000..82c4c55955
--- /dev/null
+++ b/packages/twenty-sdk/src/sdk/logic-function/key-value/kv.ts
@@ -0,0 +1,92 @@
+import {
+ type AppKeyValue,
+ type AppKeyValueScope,
+} from 'twenty-shared/application';
+
+import { postGraphqlRequest } from '@/sdk/logic-function/utils/post-graphql-request.util';
+
+const GET_APP_KEY_VALUE_QUERY = `
+ query GetAppKeyValue($key: String!, $scope: AppKeyValueScope) {
+ appKeyValue(key: $key, scope: $scope) {
+ key
+ value
+ scope
+ }
+ }
+`;
+
+const SET_APP_KEY_VALUE_MUTATION = `
+ mutation SetAppKeyValue($input: SetAppKeyValueInput!) {
+ setAppKeyValue(input: $input) {
+ key
+ value
+ scope
+ }
+ }
+`;
+
+const DELETE_APP_KEY_VALUE_MUTATION = `
+ mutation DeleteAppKeyValue($key: String!, $scope: AppKeyValueScope) {
+ deleteAppKeyValue(key: $key, scope: $scope)
+ }
+`;
+
+const DEFAULT_APP_KEY_VALUE_SCOPE: AppKeyValueScope = 'WORKSPACE';
+
+type KvOptions = {
+ scope?: AppKeyValueScope;
+};
+
+export const kv = {
+ async get(
+ key: string,
+ options?: KvOptions,
+ ): Promise {
+ const { appKeyValue } = await postGraphqlRequest<
+ { key: string; scope: AppKeyValueScope },
+ { appKeyValue: AppKeyValue | null }
+ >({
+ query: GET_APP_KEY_VALUE_QUERY,
+ variables: { key, scope: options?.scope ?? DEFAULT_APP_KEY_VALUE_SCOPE },
+ caller: 'kv.get',
+ });
+
+ return (appKeyValue?.value ?? null) as TValue | null;
+ },
+
+ async set(
+ key: string,
+ value: TValue,
+ options?: KvOptions,
+ ): Promise {
+ await postGraphqlRequest<
+ {
+ input: { key: string; value: TValue; scope: AppKeyValueScope };
+ },
+ { setAppKeyValue: AppKeyValue }
+ >({
+ query: SET_APP_KEY_VALUE_MUTATION,
+ variables: {
+ input: {
+ key,
+ value,
+ scope: options?.scope ?? DEFAULT_APP_KEY_VALUE_SCOPE,
+ },
+ },
+ caller: 'kv.set',
+ });
+ },
+
+ async delete(key: string, options?: KvOptions): Promise {
+ const { deleteAppKeyValue } = await postGraphqlRequest<
+ { key: string; scope: AppKeyValueScope },
+ { deleteAppKeyValue: boolean }
+ >({
+ query: DELETE_APP_KEY_VALUE_MUTATION,
+ variables: { key, scope: options?.scope ?? DEFAULT_APP_KEY_VALUE_SCOPE },
+ caller: 'kv.delete',
+ });
+
+ return deleteAppKeyValue;
+ },
+};
diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-23/2-23-instance-command-fast-1784659343818-add-application-id-to-key-value-pair.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-23/2-23-instance-command-fast-1784659343818-add-application-id-to-key-value-pair.ts
new file mode 100644
index 0000000000..06f0dfbde5
--- /dev/null
+++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-23/2-23-instance-command-fast-1784659343818-add-application-id-to-key-value-pair.ts
@@ -0,0 +1,97 @@
+import { type QueryRunner } from 'typeorm';
+
+import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator';
+import { type FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface';
+
+@RegisteredInstanceCommand('2.23.0', 1784659343818)
+export class AddApplicationIdToKeyValuePairFastInstanceCommand implements FastInstanceCommand {
+ public async up(queryRunner: QueryRunner): Promise {
+ await queryRunner.query(
+ `ALTER TYPE "core"."keyValuePair_type_enum" ADD VALUE IF NOT EXISTS 'APPLICATION_VARIABLE'`,
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."keyValuePair" ADD COLUMN IF NOT EXISTS "applicationId" uuid',
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."keyValuePair" DROP CONSTRAINT IF EXISTS "FK_e31d245e30cd82307e5416450fc"',
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."keyValuePair" ADD CONSTRAINT "FK_e31d245e30cd82307e5416450fc" FOREIGN KEY ("applicationId") REFERENCES "core"."application"("id") ON DELETE CASCADE ON UPDATE NO ACTION',
+ );
+ await queryRunner.query(
+ 'CREATE INDEX IF NOT EXISTS "IDX_KEY_VALUE_PAIR_APPLICATION_ID" ON "core"."keyValuePair" ("applicationId")',
+ );
+
+ await queryRunner.query(
+ 'DROP INDEX IF EXISTS "core"."IDX_KEY_VALUE_PAIR_KEY_WORKSPACE_ID_NULL_USER_ID_UNIQUE"',
+ );
+ await queryRunner.query(
+ 'CREATE UNIQUE INDEX "IDX_KEY_VALUE_PAIR_KEY_WORKSPACE_ID_NULL_USER_ID_UNIQUE" ON "core"."keyValuePair" ("key", "workspaceId") WHERE "userId" IS NULL AND "applicationId" IS NULL',
+ );
+ await queryRunner.query(
+ 'DROP INDEX IF EXISTS "core"."IDX_KEY_VALUE_PAIR_KEY_NULL_USER_ID_NULL_WORKSPACE_ID_UNIQUE"',
+ );
+ await queryRunner.query(
+ 'CREATE UNIQUE INDEX "IDX_KEY_VALUE_PAIR_KEY_NULL_USER_ID_NULL_WORKSPACE_ID_UNIQUE" ON "core"."keyValuePair" ("key") WHERE "userId" IS NULL AND "workspaceId" IS NULL AND "applicationId" IS NULL',
+ );
+
+ await queryRunner.query(
+ 'CREATE UNIQUE INDEX IF NOT EXISTS "IDX_KEY_VALUE_PAIR_KEY_APPLICATION_ID_WORKSPACE_UNIQUE" ON "core"."keyValuePair" ("key", "applicationId") WHERE "applicationId" IS NOT NULL AND "workspaceId" IS NOT NULL',
+ );
+ await queryRunner.query(
+ 'CREATE UNIQUE INDEX IF NOT EXISTS "IDX_KEY_VALUE_PAIR_KEY_APPLICATION_ID_GLOBAL_UNIQUE" ON "core"."keyValuePair" ("key", "applicationId") WHERE "applicationId" IS NOT NULL AND "workspaceId" IS NULL',
+ );
+ }
+
+ public async down(queryRunner: QueryRunner): Promise {
+ await queryRunner.query(
+ `DELETE FROM "core"."keyValuePair" WHERE "type" = 'APPLICATION_VARIABLE'`,
+ );
+
+ await queryRunner.query(
+ 'DROP INDEX IF EXISTS "core"."IDX_KEY_VALUE_PAIR_KEY_APPLICATION_ID_WORKSPACE_UNIQUE"',
+ );
+ await queryRunner.query(
+ 'DROP INDEX IF EXISTS "core"."IDX_KEY_VALUE_PAIR_KEY_APPLICATION_ID_GLOBAL_UNIQUE"',
+ );
+ await queryRunner.query(
+ 'DROP INDEX IF EXISTS "core"."IDX_KEY_VALUE_PAIR_APPLICATION_ID"',
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."keyValuePair" DROP CONSTRAINT IF EXISTS "FK_e31d245e30cd82307e5416450fc"',
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."keyValuePair" DROP COLUMN IF EXISTS "applicationId"',
+ );
+
+ await queryRunner.query(
+ 'DROP INDEX IF EXISTS "core"."IDX_KEY_VALUE_PAIR_KEY_WORKSPACE_ID_NULL_USER_ID_UNIQUE"',
+ );
+ await queryRunner.query(
+ 'CREATE UNIQUE INDEX "IDX_KEY_VALUE_PAIR_KEY_WORKSPACE_ID_NULL_USER_ID_UNIQUE" ON "core"."keyValuePair" ("key", "workspaceId") WHERE "userId" IS NULL',
+ );
+ await queryRunner.query(
+ 'DROP INDEX IF EXISTS "core"."IDX_KEY_VALUE_PAIR_KEY_NULL_USER_ID_NULL_WORKSPACE_ID_UNIQUE"',
+ );
+ await queryRunner.query(
+ 'CREATE UNIQUE INDEX "IDX_KEY_VALUE_PAIR_KEY_NULL_USER_ID_NULL_WORKSPACE_ID_UNIQUE" ON "core"."keyValuePair" ("key") WHERE "userId" IS NULL AND "workspaceId" IS NULL',
+ );
+
+ await queryRunner.query(
+ `CREATE TYPE "core"."keyValuePair_type_enum_old" AS ENUM('USER_VARIABLE', 'FEATURE_FLAG', 'CONFIG_VARIABLE')`,
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."keyValuePair" ALTER COLUMN "type" DROP DEFAULT',
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."keyValuePair" ALTER COLUMN "type" TYPE "core"."keyValuePair_type_enum_old" USING "type"::"text"::"core"."keyValuePair_type_enum_old"',
+ );
+ await queryRunner.query(
+ `ALTER TABLE "core"."keyValuePair" ALTER COLUMN "type" SET DEFAULT 'USER_VARIABLE'`,
+ );
+ await queryRunner.query('DROP TYPE "core"."keyValuePair_type_enum"');
+ await queryRunner.query(
+ 'ALTER TYPE "core"."keyValuePair_type_enum_old" RENAME TO "keyValuePair_type_enum"',
+ );
+ }
+}
diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts
index 22b8283614..6c80fa2a4e 100644
--- a/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts
+++ b/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts
@@ -116,6 +116,7 @@ import { BackfillWorkspaceDatabaseSchemaSlowInstanceCommand } from './2-21/2-21-
import { AddCreatedWorkspaceActivationStatusSlowInstanceCommand } from './2-22/2-22-instance-command-slow-1784106205000-add-created-workspace-activation-status';
import { AddKanbanAndCalendarWidgetViewTypesFastInstanceCommand } from './2-23/2-23-instance-command-fast-1784620626405-add-kanban-and-calendar-widget-view-types';
import { WidenViewCalendarIntegrityConstraintFastInstanceCommand } from './2-23/2-23-instance-command-fast-1784620626406-widen-view-calendar-integrity-constraint';
+import { AddApplicationIdToKeyValuePairFastInstanceCommand } from './2-23/2-23-instance-command-fast-1784659343818-add-application-id-to-key-value-pair';
import { BackfillCreatedWorkspaceActivationStatusSlowInstanceCommand } from './2-23/2-23-instance-command-slow-1784286705000-backfill-created-workspace-activation-status';
import { UnlistUnclaimedNpmApplicationRegistrationsSlowInstanceCommand } from './2-23/2-23-instance-command-slow-1784322591746-unlist-unclaimed-npm-application-registrations';
import { AddStatusesToBillingSubscriptionIndexSlowInstanceCommand } from './2-23/2-23-instance-command-slow-1784650048045-add-statuses-to-billing-subscription-index';
@@ -238,6 +239,7 @@ export const INSTANCE_COMMANDS = [
AddKanbanAndCalendarWidgetViewTypesFastInstanceCommand,
WidenViewCalendarIntegrityConstraintFastInstanceCommand,
AddAutoUpgradeToApplicationFastInstanceCommand,
+ AddApplicationIdToKeyValuePairFastInstanceCommand,
AddSdkClientCoreChecksumToApplicationFastInstanceCommand,
AddStatusesToBillingSubscriptionIndexSlowInstanceCommand,
];
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-exception-filter.ts b/packages/twenty-server/src/engine/core-modules/application/application-exception-filter.ts
index 9a9cfab5c3..2cd9c9ca36 100644
--- a/packages/twenty-server/src/engine/core-modules/application/application-exception-filter.ts
+++ b/packages/twenty-server/src/engine/core-modules/application/application-exception-filter.ts
@@ -44,6 +44,7 @@ export class ApplicationExceptionFilter implements ExceptionFilter {
case ApplicationExceptionCode.TARBALL_EXTRACTION_FAILED:
case ApplicationExceptionCode.UPGRADE_FAILED:
case ApplicationExceptionCode.INVALID_SERVER_VERSION:
+ case ApplicationExceptionCode.KEY_VALUE_PERSISTENCE_FAILED:
throw new InternalServerError(exception);
case ApplicationExceptionCode.APPLICATION_INSTALLATION_FAILED: {
const installationError = new BaseGraphQLError(
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-key-value/application-key-value.module.ts b/packages/twenty-server/src/engine/core-modules/application/application-key-value/application-key-value.module.ts
new file mode 100644
index 0000000000..d6383b8d2a
--- /dev/null
+++ b/packages/twenty-server/src/engine/core-modules/application/application-key-value/application-key-value.module.ts
@@ -0,0 +1,21 @@
+import { Module } from '@nestjs/common';
+import { TypeOrmModule } from '@nestjs/typeorm';
+
+import { ApplicationKeyValueResolver } from 'src/engine/core-modules/application/application-key-value/application-key-value.resolver';
+import { ApplicationKeyValueService } from 'src/engine/core-modules/application/application-key-value/services/application-key-value.service';
+import { ApplicationRegistrationEntity } from 'src/engine/core-modules/application/application-registration/application-registration.entity';
+import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
+import { KeyValuePairEntity } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity';
+
+@Module({
+ imports: [
+ TypeOrmModule.forFeature([
+ KeyValuePairEntity,
+ ApplicationEntity,
+ ApplicationRegistrationEntity,
+ ]),
+ ],
+ providers: [ApplicationKeyValueService, ApplicationKeyValueResolver],
+ exports: [ApplicationKeyValueService],
+})
+export class ApplicationKeyValueModule {}
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-key-value/application-key-value.resolver.ts b/packages/twenty-server/src/engine/core-modules/application/application-key-value/application-key-value.resolver.ts
new file mode 100644
index 0000000000..51819efad7
--- /dev/null
+++ b/packages/twenty-server/src/engine/core-modules/application/application-key-value/application-key-value.resolver.ts
@@ -0,0 +1,81 @@
+import { UseFilters, UseGuards } from '@nestjs/common';
+import { Args, Mutation, Query } from '@nestjs/graphql';
+
+import { type AppKeyValue } from 'twenty-shared/application';
+
+import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator';
+import { ApplicationExceptionFilter } from 'src/engine/core-modules/application/application-exception-filter';
+import { AppKeyValueDto } from 'src/engine/core-modules/application/application-key-value/dtos/app-key-value.dto';
+import { SetAppKeyValueInput } from 'src/engine/core-modules/application/application-key-value/dtos/set-app-key-value.input';
+import { AppKeyValueScope } from 'src/engine/core-modules/application/application-key-value/enums/app-key-value-scope.enum';
+import { ApplicationKeyValueService } from 'src/engine/core-modules/application/application-key-value/services/application-key-value.service';
+import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type';
+import { type FlatWorkspace } from 'src/engine/core-modules/workspace/types/flat-workspace.type';
+import { AuthApplication } from 'src/engine/decorators/auth/auth-application.decorator';
+import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
+import { NoPermissionGuard } from 'src/engine/guards/no-permission.guard';
+import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
+
+@UseGuards(WorkspaceAuthGuard, NoPermissionGuard)
+@UseFilters(ApplicationExceptionFilter)
+@MetadataResolver()
+export class ApplicationKeyValueResolver {
+ constructor(
+ private readonly applicationKeyValueService: ApplicationKeyValueService,
+ ) {}
+
+ @Query(() => AppKeyValueDto, { nullable: true })
+ async appKeyValue(
+ @AuthApplication() application: FlatApplication,
+ @AuthWorkspace() workspace: FlatWorkspace,
+ @Args('key') key: string,
+ @Args('scope', {
+ type: () => AppKeyValueScope,
+ nullable: true,
+ defaultValue: AppKeyValueScope.WORKSPACE,
+ })
+ scope: AppKeyValueScope,
+ ): Promise {
+ return this.applicationKeyValueService.get({
+ application,
+ workspaceId: workspace.id,
+ key,
+ scope,
+ });
+ }
+
+ @Mutation(() => AppKeyValueDto)
+ async setAppKeyValue(
+ @AuthApplication() application: FlatApplication,
+ @AuthWorkspace() workspace: FlatWorkspace,
+ @Args('input') input: SetAppKeyValueInput,
+ ): Promise {
+ return this.applicationKeyValueService.set({
+ application,
+ workspaceId: workspace.id,
+ key: input.key,
+ value: input.value,
+ scope: input.scope ?? AppKeyValueScope.WORKSPACE,
+ });
+ }
+
+ @Mutation(() => Boolean)
+ async deleteAppKeyValue(
+ @AuthApplication() application: FlatApplication,
+ @AuthWorkspace() workspace: FlatWorkspace,
+ @Args('key') key: string,
+ @Args('scope', {
+ type: () => AppKeyValueScope,
+ nullable: true,
+ defaultValue: AppKeyValueScope.WORKSPACE,
+ })
+ scope: AppKeyValueScope,
+ ): Promise {
+ return this.applicationKeyValueService.delete({
+ application,
+ workspaceId: workspace.id,
+ key,
+ scope,
+ });
+ }
+}
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-key-value/dtos/app-key-value.dto.ts b/packages/twenty-server/src/engine/core-modules/application/application-key-value/dtos/app-key-value.dto.ts
new file mode 100644
index 0000000000..cc05ca4d0c
--- /dev/null
+++ b/packages/twenty-server/src/engine/core-modules/application/application-key-value/dtos/app-key-value.dto.ts
@@ -0,0 +1,18 @@
+import { Field, ObjectType } from '@nestjs/graphql';
+
+import GraphQLJSON from 'graphql-type-json';
+import { type AppKeyValue } from 'twenty-shared/application';
+
+import { AppKeyValueScope } from 'src/engine/core-modules/application/application-key-value/enums/app-key-value-scope.enum';
+
+@ObjectType('AppKeyValue')
+export class AppKeyValueDto implements AppKeyValue {
+ @Field()
+ key: string;
+
+ @Field(() => GraphQLJSON, { nullable: true })
+ value: unknown;
+
+ @Field(() => AppKeyValueScope)
+ scope: AppKeyValueScope;
+}
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-key-value/dtos/set-app-key-value.input.ts b/packages/twenty-server/src/engine/core-modules/application/application-key-value/dtos/set-app-key-value.input.ts
new file mode 100644
index 0000000000..24a8c3ce24
--- /dev/null
+++ b/packages/twenty-server/src/engine/core-modules/application/application-key-value/dtos/set-app-key-value.input.ts
@@ -0,0 +1,26 @@
+import { Field, InputType } from '@nestjs/graphql';
+
+import { IsEnum, IsNotEmpty, IsOptional, IsString } from 'class-validator';
+import GraphQLJSON from 'graphql-type-json';
+
+import { AppKeyValueScope } from 'src/engine/core-modules/application/application-key-value/enums/app-key-value-scope.enum';
+
+@InputType('SetAppKeyValueInput')
+export class SetAppKeyValueInput {
+ @IsString()
+ @IsNotEmpty()
+ @Field()
+ key: string;
+
+ @IsOptional()
+ @Field(() => GraphQLJSON, { nullable: true })
+ value?: unknown;
+
+ @IsEnum(AppKeyValueScope)
+ @IsOptional()
+ @Field(() => AppKeyValueScope, {
+ nullable: true,
+ defaultValue: AppKeyValueScope.WORKSPACE,
+ })
+ scope?: AppKeyValueScope;
+}
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-key-value/enums/app-key-value-scope.enum.ts b/packages/twenty-server/src/engine/core-modules/application/application-key-value/enums/app-key-value-scope.enum.ts
new file mode 100644
index 0000000000..7ddba27efb
--- /dev/null
+++ b/packages/twenty-server/src/engine/core-modules/application/application-key-value/enums/app-key-value-scope.enum.ts
@@ -0,0 +1,12 @@
+import { registerEnumType } from '@nestjs/graphql';
+
+export enum AppKeyValueScope {
+ WORKSPACE = 'WORKSPACE',
+ SERVER = 'SERVER',
+}
+
+registerEnumType(AppKeyValueScope, {
+ name: 'AppKeyValueScope',
+ description:
+ 'WORKSPACE entries are private to one workspace install of the application. SERVER entries are shared across every install: the value is always the claiming workspaceId and only that workspace can overwrite or delete the key.',
+});
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-key-value/services/application-key-value.service.ts b/packages/twenty-server/src/engine/core-modules/application/application-key-value/services/application-key-value.service.ts
new file mode 100644
index 0000000000..97af551fd4
--- /dev/null
+++ b/packages/twenty-server/src/engine/core-modules/application/application-key-value/services/application-key-value.service.ts
@@ -0,0 +1,248 @@
+import { Injectable } from '@nestjs/common';
+import { InjectRepository } from '@nestjs/typeorm';
+
+import { msg } from '@lingui/core/macro';
+import { IsNull, Repository } from 'typeorm';
+
+import { type AppKeyValue } from 'twenty-shared/application';
+import { isDefined } from 'twenty-shared/utils';
+
+import { AppKeyValueScope } from 'src/engine/core-modules/application/application-key-value/enums/app-key-value-scope.enum';
+import { ApplicationRegistrationEntity } from 'src/engine/core-modules/application/application-registration/application-registration.entity';
+import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
+import {
+ ApplicationException,
+ ApplicationExceptionCode,
+} from 'src/engine/core-modules/application/application.exception';
+import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type';
+import {
+ KeyValuePairEntity,
+ KeyValuePairType,
+} from 'src/engine/core-modules/key-value-pair/key-value-pair.entity';
+
+@Injectable()
+export class ApplicationKeyValueService {
+ constructor(
+ @InjectRepository(KeyValuePairEntity)
+ private readonly keyValuePairRepository: Repository,
+ @InjectRepository(ApplicationEntity)
+ private readonly applicationRepository: Repository,
+ @InjectRepository(ApplicationRegistrationEntity)
+ private readonly applicationRegistrationRepository: Repository,
+ ) {}
+
+ async get({
+ application,
+ workspaceId,
+ key,
+ scope,
+ }: {
+ application: FlatApplication;
+ workspaceId: string;
+ key: string;
+ scope: AppKeyValueScope;
+ }): Promise {
+ const scopedWhere =
+ scope === AppKeyValueScope.SERVER
+ ? {
+ applicationId: await this.resolveServerApplicationId(application),
+ workspaceId: IsNull(),
+ }
+ : {
+ applicationId: application.id,
+ workspaceId,
+ };
+
+ const entry = await this.keyValuePairRepository.findOne({
+ where: {
+ key,
+ type: KeyValuePairType.APPLICATION_VARIABLE,
+ ...scopedWhere,
+ },
+ });
+
+ if (!isDefined(entry)) {
+ return null;
+ }
+
+ return { key, value: entry.value, scope };
+ }
+
+ async set({
+ application,
+ workspaceId,
+ key,
+ value,
+ scope,
+ }: {
+ application: FlatApplication;
+ workspaceId: string;
+ key: string;
+ value: unknown;
+ scope: AppKeyValueScope;
+ }): Promise {
+ if (scope === AppKeyValueScope.SERVER) {
+ return this.claimServerKey({ application, workspaceId, key });
+ }
+
+ await this.keyValuePairRepository.upsert(
+ {
+ key,
+ value: value as KeyValuePairEntity['value'],
+ applicationId: application.id,
+ workspaceId,
+ userId: null,
+ type: KeyValuePairType.APPLICATION_VARIABLE,
+ },
+ {
+ conflictPaths: ['key', 'applicationId'],
+ indexPredicate:
+ '"applicationId" IS NOT NULL AND "workspaceId" IS NOT NULL',
+ },
+ );
+
+ return { key, value, scope };
+ }
+
+ async delete({
+ application,
+ workspaceId,
+ key,
+ scope,
+ }: {
+ application: FlatApplication;
+ workspaceId: string;
+ key: string;
+ scope: AppKeyValueScope;
+ }): Promise {
+ if (scope === AppKeyValueScope.SERVER) {
+ const result = await this.keyValuePairRepository
+ .createQueryBuilder()
+ .delete()
+ .where('"key" = :key', { key })
+ .andWhere('"applicationId" = :applicationId', {
+ applicationId: await this.resolveServerApplicationId(application),
+ })
+ .andWhere('"workspaceId" IS NULL')
+ .andWhere('"type" = :type', {
+ type: KeyValuePairType.APPLICATION_VARIABLE,
+ })
+ .andWhere('"value" = :value::jsonb', {
+ value: JSON.stringify(workspaceId),
+ })
+ .execute();
+
+ return (result.affected ?? 0) > 0;
+ }
+
+ const result = await this.keyValuePairRepository.delete({
+ key,
+ applicationId: application.id,
+ workspaceId,
+ type: KeyValuePairType.APPLICATION_VARIABLE,
+ });
+
+ return (result.affected ?? 0) > 0;
+ }
+
+ // SERVER keys are a claim registry: the stored value is always the caller's
+ // token-derived workspaceId, so any value passed by the caller is ignored.
+ private async claimServerKey({
+ application,
+ workspaceId,
+ key,
+ }: {
+ application: FlatApplication;
+ workspaceId: string;
+ key: string;
+ }): Promise {
+ const serverApplicationId =
+ await this.resolveServerApplicationId(application);
+ const claimValue: unknown = workspaceId;
+
+ await this.keyValuePairRepository
+ .createQueryBuilder()
+ .insert()
+ .into(KeyValuePairEntity)
+ .values({
+ key,
+ value: claimValue as KeyValuePairEntity['value'],
+ applicationId: serverApplicationId,
+ workspaceId: null,
+ userId: null,
+ type: KeyValuePairType.APPLICATION_VARIABLE,
+ })
+ .orIgnore()
+ .execute();
+
+ const entry = await this.keyValuePairRepository.findOne({
+ where: {
+ key,
+ applicationId: serverApplicationId,
+ workspaceId: IsNull(),
+ type: KeyValuePairType.APPLICATION_VARIABLE,
+ },
+ });
+
+ if (!isDefined(entry)) {
+ throw new ApplicationException(
+ `Could not persist server key "${key}"`,
+ ApplicationExceptionCode.KEY_VALUE_PERSISTENCE_FAILED,
+ );
+ }
+
+ const claimedWorkspaceId: unknown = entry.value;
+
+ if (claimedWorkspaceId !== workspaceId) {
+ throw new ApplicationException(
+ `Server key "${key}" is already claimed by another workspace`,
+ ApplicationExceptionCode.FORBIDDEN,
+ {
+ userFriendlyMessage: msg`This server key is already claimed by another workspace.`,
+ },
+ );
+ }
+
+ return { key, value: entry.value, scope: AppKeyValueScope.SERVER };
+ }
+
+ // SERVER entries of a registered application all live under the registration owner workspace's install
+ private async resolveServerApplicationId(
+ application: FlatApplication,
+ ): Promise {
+ if (!isDefined(application.applicationRegistrationId)) {
+ return application.id;
+ }
+
+ const registration = await this.applicationRegistrationRepository.findOne({
+ where: { id: application.applicationRegistrationId },
+ });
+
+ if (!isDefined(registration) || !isDefined(registration.ownerWorkspaceId)) {
+ return application.id;
+ }
+
+ if (registration.ownerWorkspaceId === application.workspaceId) {
+ return application.id;
+ }
+
+ const ownerInstall = await this.applicationRepository.findOne({
+ where: {
+ applicationRegistrationId: registration.id,
+ workspaceId: registration.ownerWorkspaceId,
+ },
+ });
+
+ if (!isDefined(ownerInstall)) {
+ throw new ApplicationException(
+ `Server keys are unavailable for application ${application.id}: the registration owner workspace has no install`,
+ ApplicationExceptionCode.APP_NOT_INSTALLED,
+ {
+ userFriendlyMessage: msg`Server keys require the application publisher workspace to have the application installed.`,
+ },
+ );
+ }
+
+ return ownerInstall.id;
+ }
+}
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-rest-api-exception.filter.ts b/packages/twenty-server/src/engine/core-modules/application/application-rest-api-exception.filter.ts
index 4fb627d78c..5bf3f761a8 100644
--- a/packages/twenty-server/src/engine/core-modules/application/application-rest-api-exception.filter.ts
+++ b/packages/twenty-server/src/engine/core-modules/application/application-rest-api-exception.filter.ts
@@ -45,6 +45,7 @@ const applicationExceptionCodeToHttpStatus = (
case ApplicationExceptionCode.UPGRADE_FAILED:
case ApplicationExceptionCode.INVALID_SERVER_VERSION:
case ApplicationExceptionCode.APPLICATION_INSTALLATION_FAILED:
+ case ApplicationExceptionCode.KEY_VALUE_PERSISTENCE_FAILED:
return 500;
default:
return assertUnreachable(code);
diff --git a/packages/twenty-server/src/engine/core-modules/application/application.exception.ts b/packages/twenty-server/src/engine/core-modules/application/application.exception.ts
index 23c0ce4a3b..95d2daa3f1 100644
--- a/packages/twenty-server/src/engine/core-modules/application/application.exception.ts
+++ b/packages/twenty-server/src/engine/core-modules/application/application.exception.ts
@@ -29,6 +29,7 @@ export enum ApplicationExceptionCode {
INVALID_SERVER_VERSION = 'INVALID_SERVER_VERSION',
INVALID_WORKSPACE_VERSION = 'INVALID_WORKSPACE_VERSION',
APPLICATION_INSTALLATION_FAILED = 'APPLICATION_INSTALLATION_FAILED',
+ KEY_VALUE_PERSISTENCE_FAILED = 'KEY_VALUE_PERSISTENCE_FAILED',
}
const getApplicationExceptionUserFriendlyMessage = (
@@ -81,6 +82,8 @@ const getApplicationExceptionUserFriendlyMessage = (
return msg`This workspace's upgrade state could not be determined. Please try again once the workspace has finished upgrading.`;
case ApplicationExceptionCode.APPLICATION_INSTALLATION_FAILED:
return msg`We couldn't install this application because some of its metadata could not be applied to your workspace.`;
+ case ApplicationExceptionCode.KEY_VALUE_PERSISTENCE_FAILED:
+ return msg`The application key-value entry could not be saved. Please try again.`;
default:
assertUnreachable(code);
}
diff --git a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.entity.ts b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.entity.ts
index 3da1740df9..fde51565c5 100644
--- a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.entity.ts
+++ b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.entity.ts
@@ -14,6 +14,8 @@ import {
} from 'typeorm';
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
+import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
+import { WasIntroducedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-introduced-in-upgrade.decorator';
import { UserEntity } from 'src/engine/core-modules/user/user.entity';
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
@@ -21,6 +23,7 @@ export enum KeyValuePairType {
USER_VARIABLE = 'USER_VARIABLE',
FEATURE_FLAG = 'FEATURE_FLAG',
CONFIG_VARIABLE = 'CONFIG_VARIABLE',
+ APPLICATION_VARIABLE = 'APPLICATION_VARIABLE',
}
@Entity({ name: 'keyValuePair', schema: 'core' })
@@ -35,7 +38,7 @@ export enum KeyValuePairType {
['key', 'workspaceId'],
{
unique: true,
- where: '"userId" is NULL',
+ where: '"userId" is NULL AND "applicationId" is NULL',
},
)
@Index(
@@ -51,9 +54,27 @@ export enum KeyValuePairType {
['key'],
{
unique: true,
- where: '"userId" is NULL AND "workspaceId" is NULL',
+ where:
+ '"userId" is NULL AND "workspaceId" is NULL AND "applicationId" is NULL',
},
)
+@Index(
+ 'IDX_KEY_VALUE_PAIR_KEY_APPLICATION_ID_WORKSPACE_UNIQUE',
+ ['key', 'applicationId'],
+ {
+ unique: true,
+ where: '"applicationId" is NOT NULL AND "workspaceId" is NOT NULL',
+ },
+)
+@Index(
+ 'IDX_KEY_VALUE_PAIR_KEY_APPLICATION_ID_GLOBAL_UNIQUE',
+ ['key', 'applicationId'],
+ {
+ unique: true,
+ where: '"applicationId" is NOT NULL AND "workspaceId" is NULL',
+ },
+)
+@Index('IDX_KEY_VALUE_PAIR_APPLICATION_ID', ['applicationId'])
export class KeyValuePairEntity {
@Field(() => UUIDScalarType)
@PrimaryGeneratedColumn('uuid')
@@ -77,6 +98,20 @@ export class KeyValuePairEntity {
@Column({ nullable: true, type: 'uuid' })
workspaceId: string | null;
+ @ManyToOne(() => ApplicationEntity, {
+ onDelete: 'CASCADE',
+ nullable: true,
+ })
+ @JoinColumn({ name: 'applicationId' })
+ application: Relation | null;
+
+ @Column({ nullable: true, type: 'uuid' })
+ @WasIntroducedInUpgrade({
+ upgradeCommandName:
+ '2.23.0_AddApplicationIdToKeyValuePairFastInstanceCommand_1784659343818',
+ })
+ applicationId: string | null;
+
@Field(() => String)
@Column({ nullable: false, type: 'text' })
key: string;
diff --git a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.spec.ts b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.spec.ts
index 21e045780f..fad43c3067 100644
--- a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.spec.ts
+++ b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.spec.ts
@@ -35,13 +35,15 @@ describe('KeyValuePairService', () => {
{
userId: null,
workspaceId: null,
+ applicationId: null,
key: 'MAINTENANCE_MODE',
value: { startAt: '2026-04-02T10:00:00.000Z' },
type: KeyValuePairType.CONFIG_VARIABLE,
},
{
conflictPaths: ['key'],
- indexPredicate: '"userId" IS NULL AND "workspaceId" IS NULL',
+ indexPredicate:
+ '"userId" IS NULL AND "workspaceId" IS NULL AND "applicationId" IS NULL',
},
);
expect(keyValuePairRepository.findOne).not.toHaveBeenCalled();
@@ -61,6 +63,7 @@ describe('KeyValuePairService', () => {
{
userId: 'user-id',
workspaceId: null,
+ applicationId: null,
key: 'USER_SETTING',
value: true,
type: KeyValuePairType.USER_VARIABLE,
@@ -85,13 +88,62 @@ describe('KeyValuePairService', () => {
{
userId: null,
workspaceId: 'workspace-id',
+ applicationId: null,
key: 'WORKSPACE_SETTING',
value: 'test',
type: KeyValuePairType.CONFIG_VARIABLE,
},
{
conflictPaths: ['key', 'workspaceId'],
- indexPredicate: '"userId" IS NULL',
+ indexPredicate: '"userId" IS NULL AND "applicationId" IS NULL',
+ },
+ );
+ });
+
+ it('should upsert a workspace-scoped application key on the (key, applicationId) index', async () => {
+ await service.set({
+ userId: null,
+ workspaceId: 'workspace-id',
+ applicationId: 'application-id',
+ key: 'APP_SETTING',
+ value: 'test',
+ type: KeyValuePairType.CONFIG_VARIABLE,
+ });
+
+ expect(keyValuePairRepository.upsert).toHaveBeenCalledWith(
+ expect.objectContaining({
+ userId: null,
+ workspaceId: 'workspace-id',
+ applicationId: 'application-id',
+ key: 'APP_SETTING',
+ }),
+ {
+ conflictPaths: ['key', 'applicationId'],
+ indexPredicate:
+ '"applicationId" IS NOT NULL AND "workspaceId" IS NOT NULL',
+ },
+ );
+ });
+
+ it('should upsert a server-scoped application key on the global (key, applicationId) index', async () => {
+ await service.set({
+ userId: null,
+ workspaceId: null,
+ applicationId: 'application-id',
+ key: 'APP_CLAIM',
+ value: 'workspace-id',
+ type: KeyValuePairType.CONFIG_VARIABLE,
+ });
+
+ expect(keyValuePairRepository.upsert).toHaveBeenCalledWith(
+ expect.objectContaining({
+ workspaceId: null,
+ applicationId: 'application-id',
+ key: 'APP_CLAIM',
+ }),
+ {
+ conflictPaths: ['key', 'applicationId'],
+ indexPredicate: '"applicationId" IS NOT NULL AND "workspaceId" IS NULL',
},
);
});
@@ -109,6 +161,7 @@ describe('KeyValuePairService', () => {
{
userId: 'user-id',
workspaceId: 'workspace-id',
+ applicationId: null,
key: 'USER_WORKSPACE_SETTING',
value: 42,
type: KeyValuePairType.USER_VARIABLE,
diff --git a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.ts b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.ts
index e3ab5adb1c..b5b30dd58a 100644
--- a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.ts
+++ b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.ts
@@ -19,11 +19,13 @@ export class KeyValuePairService<
async get({
userId,
workspaceId,
+ applicationId,
type,
key,
}: {
userId?: string | null;
workspaceId?: string | null;
+ applicationId?: string | null;
type: KeyValuePairType;
key?: Extract;
}): Promise> {
@@ -40,6 +42,9 @@ export class KeyValuePairService<
? { workspaceId: IsNull() }
: { workspaceId }),
...(key === undefined ? {} : { key }),
+ ...(applicationId == null
+ ? { applicationId: IsNull() }
+ : { applicationId }),
type,
},
})) as Array;
@@ -54,12 +59,14 @@ export class KeyValuePairService<
{
userId,
workspaceId,
+ applicationId,
key,
value,
type,
}: {
userId?: string | null;
workspaceId?: string | null;
+ applicationId?: string | null;
key: Extract;
value: KeyValueTypesMap[K];
type: KeyValuePairType;
@@ -68,8 +75,11 @@ export class KeyValuePairService<
) {
const normalizedUserId = userId ?? null;
const normalizedWorkspaceId = workspaceId ?? null;
- const hasNullUserAndWorkspace =
- normalizedUserId === null && normalizedWorkspaceId === null;
+ const normalizedApplicationId = applicationId ?? null;
+ const hasNullUserAndWorkspaceAndApplication =
+ normalizedUserId === null &&
+ normalizedWorkspaceId === null &&
+ normalizedApplicationId === null;
const keyValuePairRepository = queryRunner
? queryRunner.manager.getRepository(KeyValuePairEntity)
: this.keyValuePairRepository;
@@ -77,6 +87,7 @@ export class KeyValuePairService<
const upsertData = {
userId: normalizedUserId,
workspaceId: normalizedWorkspaceId,
+ applicationId: normalizedApplicationId,
key,
value,
type,
@@ -85,11 +96,18 @@ export class KeyValuePairService<
const conflictPaths: string[] = ['key'];
let indexPredicate: string | undefined;
- if (hasNullUserAndWorkspace) {
- indexPredicate = '"userId" IS NULL AND "workspaceId" IS NULL';
+ if (normalizedApplicationId !== null) {
+ conflictPaths.push('applicationId');
+ indexPredicate =
+ normalizedWorkspaceId === null
+ ? '"applicationId" IS NOT NULL AND "workspaceId" IS NULL'
+ : '"applicationId" IS NOT NULL AND "workspaceId" IS NOT NULL';
+ } else if (hasNullUserAndWorkspaceAndApplication) {
+ indexPredicate =
+ '"userId" IS NULL AND "workspaceId" IS NULL AND "applicationId" IS NULL';
} else if (normalizedUserId === null) {
conflictPaths.push('workspaceId');
- indexPredicate = '"userId" IS NULL';
+ indexPredicate = '"userId" IS NULL AND "applicationId" IS NULL';
} else if (normalizedWorkspaceId === null) {
conflictPaths.push('userId');
indexPredicate = '"workspaceId" IS NULL';
@@ -107,11 +125,13 @@ export class KeyValuePairService<
{
userId,
workspaceId,
+ applicationId,
type,
key,
}: {
userId?: string | null;
workspaceId?: string | null;
+ applicationId?: string | null;
type: KeyValuePairType;
key: Extract;
},
@@ -128,6 +148,11 @@ export class KeyValuePairService<
: workspaceId === null
? { workspaceId: IsNull() }
: { workspaceId }),
+ // Application rows are isolated from core key-value pairs: without an
+ // explicit applicationId we only match rows where it is NULL.
+ ...(applicationId == null
+ ? { applicationId: IsNull() }
+ : { applicationId }),
type,
key,
};
diff --git a/packages/twenty-server/src/engine/core-modules/twenty-config/storage/__tests__/config-storage.service.spec.ts b/packages/twenty-server/src/engine/core-modules/twenty-config/storage/__tests__/config-storage.service.spec.ts
index 50accfb4e3..1e52f7d0e2 100644
--- a/packages/twenty-server/src/engine/core-modules/twenty-config/storage/__tests__/config-storage.service.spec.ts
+++ b/packages/twenty-server/src/engine/core-modules/twenty-config/storage/__tests__/config-storage.service.spec.ts
@@ -43,8 +43,10 @@ describe('ConfigStorageService', () => {
type: KeyValuePairType.CONFIG_VARIABLE,
userId: null,
workspaceId: null,
+ applicationId: null,
user: null as unknown as UserEntity,
workspace: null as unknown as WorkspaceEntity,
+ application: null,
createdAt: new Date(),
updatedAt: new Date(),
textValueDeprecated: null,
diff --git a/packages/twenty-server/src/engine/metadata-modules/metadata-engine.module.ts b/packages/twenty-server/src/engine/metadata-modules/metadata-engine.module.ts
index 71b8155ccb..2f4818241d 100644
--- a/packages/twenty-server/src/engine/metadata-modules/metadata-engine.module.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/metadata-engine.module.ts
@@ -7,6 +7,7 @@ import { AiChatModule } from 'src/engine/metadata-modules/ai/ai-chat/ai-chat.mod
import { AiGenerateTextModule } from 'src/engine/metadata-modules/ai/ai-generate-text/ai-generate-text.module';
import { AiWorkspaceStatsModule } from 'src/engine/metadata-modules/ai/ai-workspace-stats/ai-workspace-stats.module';
import { ApplicationConnectionsModule } from 'src/engine/core-modules/application/connection-provider/connections/application-connections.module';
+import { ApplicationKeyValueModule } from 'src/engine/core-modules/application/application-key-value/application-key-value.module';
import { CalendarChannelMetadataModule } from 'src/engine/metadata-modules/calendar-channel/calendar-channel-metadata.module';
import { ConnectedAccountMetadataModule } from 'src/engine/metadata-modules/connected-account/connected-account-metadata.module';
import { CommandMenuItemModule } from 'src/engine/metadata-modules/command-menu-item/command-menu-item.module';
@@ -48,6 +49,7 @@ import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/work
AiGenerateTextModule,
AiWorkspaceStatsModule,
ApplicationConnectionsModule,
+ ApplicationKeyValueModule,
MinimalMetadataModule,
ViewModule,
WorkspaceMetadataVersionModule,
diff --git a/packages/twenty-server/test/integration/metadata/suites/application/app-key-value.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/application/app-key-value.integration-spec.ts
new file mode 100644
index 0000000000..0f597249d9
--- /dev/null
+++ b/packages/twenty-server/test/integration/metadata/suites/application/app-key-value.integration-spec.ts
@@ -0,0 +1,230 @@
+import gql from 'graphql-tag';
+import { findManyApplications } from 'test/integration/graphql/utils/find-many-applications.util';
+import { generateApplicationToken } from 'test/integration/metadata/suites/application/utils/generate-application-token.util';
+import { makeMetadataAPIRequest } from 'test/integration/metadata/suites/utils/make-metadata-api-request.util';
+import { v4 as uuidv4 } from 'uuid';
+
+import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
+import { SEED_APPLE_WORKSPACE_ID } from 'src/engine/workspace-manager/dev-seeder/core/constants/seeder-workspaces.constant';
+
+const GET_APP_KEY_VALUE = gql`
+ query AppKeyValue($key: String!, $scope: AppKeyValueScope) {
+ appKeyValue(key: $key, scope: $scope) {
+ key
+ value
+ scope
+ }
+ }
+`;
+
+const SET_APP_KEY_VALUE = gql`
+ mutation SetAppKeyValue($input: SetAppKeyValueInput!) {
+ setAppKeyValue(input: $input) {
+ key
+ value
+ scope
+ }
+ }
+`;
+
+const DELETE_APP_KEY_VALUE = gql`
+ mutation DeleteAppKeyValue($key: String!, $scope: AppKeyValueScope) {
+ deleteAppKeyValue(key: $key, scope: $scope)
+ }
+`;
+
+const KEY_PREFIX = `test-kv-${uuidv4()}`;
+
+describe('application key-value store (e2e)', () => {
+ let appToken: string;
+
+ beforeAll(async () => {
+ const { data } = await findManyApplications({ expectToFail: false });
+
+ const standardApplication = data.findManyApplications.find(
+ (application) =>
+ application.universalIdentifier ===
+ TWENTY_STANDARD_APPLICATION.universalIdentifier,
+ );
+
+ expect(standardApplication).toBeDefined();
+
+ const { data: tokenData } = await generateApplicationToken({
+ applicationId: standardApplication!.id,
+ expectToFail: false,
+ });
+
+ appToken = tokenData.generateApplicationToken.applicationAccessToken.token;
+ });
+
+ afterAll(async () => {
+ await globalThis.testDataSource.query(
+ `DELETE FROM core."keyValuePair" WHERE "key" LIKE $1`,
+ [`${KEY_PREFIX}%`],
+ );
+ });
+
+ it('rejects requests that do not carry an APPLICATION_ACCESS token', async () => {
+ const response = await makeMetadataAPIRequest({
+ query: GET_APP_KEY_VALUE,
+ variables: { key: `${KEY_PREFIX}:no-app-token` },
+ });
+
+ expect(response.body.errors).toBeDefined();
+ expect(response.body.errors[0].message).toContain('APPLICATION_ACCESS');
+ });
+
+ it('sets, reads, overwrites and deletes a WORKSPACE entry', async () => {
+ const key = `${KEY_PREFIX}:workspace`;
+
+ const setResponse = await makeMetadataAPIRequest(
+ {
+ query: SET_APP_KEY_VALUE,
+ variables: { input: { key, value: { count: 1 } } },
+ },
+ appToken,
+ );
+
+ expect(setResponse.body.errors).toBeUndefined();
+ expect(setResponse.body.data.setAppKeyValue).toEqual({
+ key,
+ value: { count: 1 },
+ scope: 'WORKSPACE',
+ });
+
+ const overwriteResponse = await makeMetadataAPIRequest(
+ {
+ query: SET_APP_KEY_VALUE,
+ variables: { input: { key, value: 'overwritten' } },
+ },
+ appToken,
+ );
+
+ expect(overwriteResponse.body.errors).toBeUndefined();
+
+ const getResponse = await makeMetadataAPIRequest(
+ { query: GET_APP_KEY_VALUE, variables: { key } },
+ appToken,
+ );
+
+ expect(getResponse.body.errors).toBeUndefined();
+ expect(getResponse.body.data.appKeyValue.value).toBe('overwritten');
+
+ const deleteResponse = await makeMetadataAPIRequest(
+ { query: DELETE_APP_KEY_VALUE, variables: { key } },
+ appToken,
+ );
+
+ expect(deleteResponse.body.errors).toBeUndefined();
+ expect(deleteResponse.body.data.deleteAppKeyValue).toBe(true);
+
+ const getAfterDeleteResponse = await makeMetadataAPIRequest(
+ { query: GET_APP_KEY_VALUE, variables: { key } },
+ appToken,
+ );
+
+ expect(getAfterDeleteResponse.body.data.appKeyValue).toBeNull();
+
+ const deleteAgainResponse = await makeMetadataAPIRequest(
+ { query: DELETE_APP_KEY_VALUE, variables: { key } },
+ appToken,
+ );
+
+ expect(deleteAgainResponse.body.data.deleteAppKeyValue).toBe(false);
+ });
+
+ it('returns null for a missing key', async () => {
+ const response = await makeMetadataAPIRequest(
+ {
+ query: GET_APP_KEY_VALUE,
+ variables: { key: `${KEY_PREFIX}:missing` },
+ },
+ appToken,
+ );
+
+ expect(response.body.errors).toBeUndefined();
+ expect(response.body.data.appKeyValue).toBeNull();
+ });
+
+ it('claims a SERVER key for the caller workspace and keeps it separate from WORKSPACE entries', async () => {
+ const key = `${KEY_PREFIX}:server`;
+
+ const claimResponse = await makeMetadataAPIRequest(
+ {
+ query: SET_APP_KEY_VALUE,
+ variables: { input: { key, scope: 'SERVER' } },
+ },
+ appToken,
+ );
+
+ expect(claimResponse.body.errors).toBeUndefined();
+ expect(claimResponse.body.data.setAppKeyValue).toEqual({
+ key,
+ value: SEED_APPLE_WORKSPACE_ID,
+ scope: 'SERVER',
+ });
+
+ // Claiming again from the same workspace is idempotent
+ const reclaimResponse = await makeMetadataAPIRequest(
+ {
+ query: SET_APP_KEY_VALUE,
+ variables: { input: { key, scope: 'SERVER' } },
+ },
+ appToken,
+ );
+
+ expect(reclaimResponse.body.errors).toBeUndefined();
+ expect(reclaimResponse.body.data.setAppKeyValue.value).toBe(
+ SEED_APPLE_WORKSPACE_ID,
+ );
+
+ const getServerScopeResponse = await makeMetadataAPIRequest(
+ { query: GET_APP_KEY_VALUE, variables: { key, scope: 'SERVER' } },
+ appToken,
+ );
+
+ expect(getServerScopeResponse.body.data.appKeyValue.value).toBe(
+ SEED_APPLE_WORKSPACE_ID,
+ );
+
+ const getWorkspaceScopeResponse = await makeMetadataAPIRequest(
+ { query: GET_APP_KEY_VALUE, variables: { key } },
+ appToken,
+ );
+
+ expect(getWorkspaceScopeResponse.body.data.appKeyValue).toBeNull();
+
+ const releaseResponse = await makeMetadataAPIRequest(
+ { query: DELETE_APP_KEY_VALUE, variables: { key, scope: 'SERVER' } },
+ appToken,
+ );
+
+ expect(releaseResponse.body.data.deleteAppKeyValue).toBe(true);
+
+ const getAfterReleaseResponse = await makeMetadataAPIRequest(
+ { query: GET_APP_KEY_VALUE, variables: { key, scope: 'SERVER' } },
+ appToken,
+ );
+
+ expect(getAfterReleaseResponse.body.data.appKeyValue).toBeNull();
+ });
+
+ it('ignores a provided value for SERVER claims and stores the caller workspaceId', async () => {
+ const response = await makeMetadataAPIRequest(
+ {
+ query: SET_APP_KEY_VALUE,
+ variables: {
+ input: {
+ key: `${KEY_PREFIX}:server-foreign-value`,
+ value: 'some-other-workspace-id',
+ scope: 'SERVER',
+ },
+ },
+ },
+ appToken,
+ );
+
+ expect(response.body.errors).toBeUndefined();
+ expect(response.body.data.setAppKeyValue.value).toBe(SEED_APPLE_WORKSPACE_ID);
+ });
+});
diff --git a/packages/twenty-shared/src/application/appKeyValueScopeType.ts b/packages/twenty-shared/src/application/appKeyValueScopeType.ts
new file mode 100644
index 0000000000..f4d4ea5a91
--- /dev/null
+++ b/packages/twenty-shared/src/application/appKeyValueScopeType.ts
@@ -0,0 +1 @@
+export type AppKeyValueScope = 'WORKSPACE' | 'SERVER';
diff --git a/packages/twenty-shared/src/application/appKeyValueType.ts b/packages/twenty-shared/src/application/appKeyValueType.ts
new file mode 100644
index 0000000000..6b68b8c0c3
--- /dev/null
+++ b/packages/twenty-shared/src/application/appKeyValueType.ts
@@ -0,0 +1,7 @@
+import { type AppKeyValueScope } from '@/application/appKeyValueScopeType';
+
+export type AppKeyValue = {
+ key: string;
+ value: unknown;
+ scope: AppKeyValueScope;
+};
diff --git a/packages/twenty-shared/src/application/index.ts b/packages/twenty-shared/src/application/index.ts
index 0e41ebad65..e89ae1ffc9 100644
--- a/packages/twenty-shared/src/application/index.ts
+++ b/packages/twenty-shared/src/application/index.ts
@@ -9,6 +9,8 @@
export type { AgentManifest } from './agentManifestType';
export type { AppConnection } from './appConnectionType';
+export type { AppKeyValueScope } from './appKeyValueScopeType';
+export type { AppKeyValue } from './appKeyValueType';
export type {
KnownApplicationCategory,
ApplicationCategory,