Compare commits

..

3 Commits

Author SHA1 Message Date
github-actions[bot]
11f9ed7507 chore: update versions (#2739)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @nhost/dashboard@1.17.0

### Minor Changes

- 77fba27: fix: postgres version validation when activating ai in ai
settings page
-   ac6d1b6: feat: use name instead of awsName

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-06-05 11:07:59 +01:00
David Barroso
ac6d1b6e01 feat (dashboard): use name instead of awsName (#2745) 2024-06-05 10:55:42 +01:00
Zephyr (David B.M.)
77fba27d12 fix (dashboard): validate postgres version in ai service settings page (#2735) 2024-05-31 12:38:36 +02:00
21 changed files with 135 additions and 27 deletions

View File

@@ -1,5 +1,12 @@
# @nhost/dashboard
## 1.17.0
### Minor Changes
- 77fba27: fix: postgres version validation when activating ai in ai settings page
- ac6d1b6: feat: use name instead of awsName
## 1.16.3
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/dashboard",
"version": "1.16.3",
"version": "1.17.0",
"private": true,
"scripts": {
"preinstall": "npx only-allow pnpm",

View File

@@ -32,8 +32,7 @@ import { FormProvider, useForm } from 'react-hook-form';
import { toast } from 'react-hot-toast';
import * as Yup from 'yup';
import { DisableAIServiceConfirmationDialog } from './DisableAIServiceConfirmationDialog';
const MIN_POSTGRES_VERSION_SUPPORTING_AI = '14.6-20231018-1';
import { isPostgresVersionValidForAI } from '@/features/ai/settings/utils/isPostgresVersionValidForAI';
const validationSchema = Yup.object({
version: Yup.object({
@@ -165,7 +164,7 @@ export default function AISettings() {
]);
const toggleAIService = async (enabled: boolean) => {
if (postgresVersion < MIN_POSTGRES_VERSION_SUPPORTING_AI) {
if (!isPostgresVersionValidForAI(postgresVersion)) {
toast.error(
'In order to enable the AI service you need to update your database version to 14.6-20231018-1 or newer.',
{
@@ -495,3 +494,4 @@ export default function AISettings() {
</Box>
);
}

View File

@@ -0,0 +1 @@
export { default as isPostgresVersionValidForAI } from './isPostgresVersionValidForAI';

View File

@@ -0,0 +1,22 @@
import { test, vi } from 'vitest';
import isPostgresVersionValidForAI from './isPostgresVersionValidForAI';
beforeEach(() => {
vi.resetModules();
});
test('greater than minimum version, minor version with two digits, should be valid', () => {
const postgresVersion = '14.11-20240515-1';
expect(isPostgresVersionValidForAI(postgresVersion)).toBe(true);
});
test('less than minimum version, should be invalid', () => {
const postgresVersion = '14.6-20221110-1';
expect(isPostgresVersionValidForAI(postgresVersion)).toBe(false);
});
test('equal to minimum version, should be valid', () => {
const postgresVersion = '14.6-20231018-1';
expect(isPostgresVersionValidForAI(postgresVersion)).toBe(true);
});

View File

@@ -0,0 +1,18 @@
/**
* Check if the given postgres version is valid for enabling AI in the project
*
* @param postgresVersion - Postgres version used in the project.
* @returns Whether is valid for enabling AI.
*/
export default function isPostgresVersionValidForAI(
postgresVersion: string,
): boolean {
const MIN_POSTGRES_VERSION_SUPPORTING_AI = '14.6-20231018-1';
if (/^14\.6-/.test(postgresVersion)) {
return postgresVersion >= MIN_POSTGRES_VERSION_SUPPORTING_AI;
}
// Note: No need to account for versions less than 14.6
return true;
}

View File

@@ -108,7 +108,7 @@ export default function useCurrentWorkspaceAndProject(): UseCurrentWorkspaceAndP
id: null,
countryCode: null,
city: null,
awsName: null,
name: null,
domain: null,
},
createdAt: new Date().toISOString(),

View File

@@ -31,7 +31,7 @@ afterEach(() => {
const region: ProjectFragment['region'] = {
id: '1',
awsName: 'eu-west-1',
name: 'eu-west-1',
domain: 'nhost.run',
city: 'Dublin',
countryCode: 'IE',

View File

@@ -89,7 +89,7 @@ export default function generateAppServiceUrl(
const constructedDomain = [
subdomain,
service,
region?.awsName,
region?.name,
region?.domain || 'nhost.run',
]
.filter(Boolean)

View File

@@ -165,7 +165,7 @@ export default function AuthDomain() {
<VerifyDomain
recordType="CNAME"
hostname={auth_fqdn}
value={`lb.${currentProject.region.awsName}.${currentProject.region.domain}.`}
value={`lb.${currentProject.region.name}.${currentProject.region.domain}.`}
onHostNameVerified={() => setIsVerified(true)}
/>
</div>

View File

@@ -167,7 +167,7 @@ export default function HasuraDomain() {
<VerifyDomain
recordType="CNAME"
hostname={hasura_fqdn}
value={`lb.${currentProject.region.awsName}.${currentProject.region.domain}.`}
value={`lb.${currentProject.region.name}.${currentProject.region.domain}.`}
onHostNameVerified={() => setIsVerified(true)}
/>
</div>

View File

@@ -162,7 +162,7 @@ export default function RunServicePortDomain({
<VerifyDomain
recordType="CNAME"
hostname={runServicePortFQDN}
value={`lb.${currentProject.region.awsName}.${currentProject.region.domain}.`}
value={`lb.${currentProject.region.name}.${currentProject.region.domain}.`}
onHostNameVerified={() => setIsVerified(true)}
/>
</div>

View File

@@ -169,7 +169,7 @@ export default function ServerlessFunctionsDomain() {
<VerifyDomain
recordType="CNAME"
hostname={functions_fqdn}
value={`lb.${currentProject.region.awsName}.${currentProject.region.domain}.`}
value={`lb.${currentProject.region.name}.${currentProject.region.domain}.`}
onHostNameVerified={() => setIsVerified(true)}
/>
</div>

View File

@@ -101,7 +101,7 @@ export default function SystemEnvironmentVariableSettings() {
const systemEnvironmentVariables = [
{ key: 'NHOST_SUBDOMAIN', value: currentProject.subdomain },
{ key: 'NHOST_REGION', value: currentProject.region.awsName },
{ key: 'NHOST_REGION', value: currentProject.region.name },
{
key: 'NHOST_HASURA_URL',
value:

View File

@@ -7,7 +7,7 @@ export default function OverviewProjectInfo() {
const { currentProject } = useCurrentWorkspaceAndProject();
const { region, subdomain } = currentProject || {};
const isRegionAvailable =
region?.awsName && region?.countryCode && region?.city;
region?.name && region?.countryCode && region?.city;
return (
<div className="grid grid-flow-row content-start gap-6">
@@ -17,7 +17,7 @@ export default function OverviewProjectInfo() {
<div className="grid grid-flow-row gap-3">
<InfoCard
title="Region"
value={region?.awsName}
value={region?.name}
customValue={
region?.countryCode &&
region?.city && (
@@ -30,7 +30,7 @@ export default function OverviewProjectInfo() {
/>
<Text className="truncate text-sm font-medium">
{region.city} ({region.awsName})
{region.city} ({region.name})
</Text>
</div>
)

View File

@@ -190,7 +190,7 @@ export default function ServiceForm({
image:
values.image.length > 0
? values.image
: `registry.${currentProject.region.awsName}.${currentProject.region.domain}/${newServiceID}`,
: `registry.${currentProject.region.name}.${currentProject.region.domain}/${newServiceID}`,
},
},
},
@@ -361,7 +361,7 @@ export default function ServiceForm({
{isPlatform && serviceID && serviceImage && (
<InfoCard
title="Private registry"
value={`registry.${currentProject.region.awsName}.${currentProject.region.domain}/${serviceID}`}
value={`registry.${currentProject.region.name}.${currentProject.region.domain}/${serviceID}`}
/>
)}

View File

@@ -43,7 +43,7 @@ export default function PortsFormSection() {
const getPortURL = (_port: string | number, subdomain: string) => {
const port = Number(_port) > 0 ? Number(_port) : '[port]';
return `https://${subdomain}-${port}.svc.${currentProject?.region.awsName}.${currentProject?.region.domain}`;
return `https://${subdomain}-${port}.svc.${currentProject?.region.name}.${currentProject?.region.domain}`;
};
return (

View File

@@ -35,7 +35,7 @@ export default function ServiceDetailsDialog({
const getPortURL = (_port: string | number) => {
const port = Number(_port) > 0 ? Number(_port) : '[port]';
return `https://${subdomain}-${port}.svc.${currentProject?.region.awsName}.${currentProject?.region.domain}`;
return `https://${subdomain}-${port}.svc.${currentProject?.region.name}.${currentProject?.region.domain}`;
};
return (
@@ -44,7 +44,7 @@ export default function ServiceDetailsDialog({
<Text color="secondary">Private registry</Text>
<InfoCard
title=""
value={`registry.${currentProject.region.awsName}.${currentProject.region.domain}/${serviceID}`}
value={`registry.${currentProject.region.name}.${currentProject.region.domain}/${serviceID}`}
/>
</div>

View File

@@ -39,7 +39,7 @@ fragment Project on apps {
region {
id
countryCode
awsName
name
domain
city
}

View File

@@ -50,7 +50,7 @@ export const mockApplication: Project = {
appStates: [],
subdomain: '',
region: {
awsName: 'us-east-1',
name: 'us-east-1',
city: 'New York',
countryCode: 'US',
id: '1',

View File

@@ -2657,6 +2657,12 @@ export type ConfigUserRoleComparisonExp = {
_nin?: InputMaybe<Array<Scalars['ConfigUserRole']>>;
};
export type ContainerError = {
__typename?: 'ContainerError';
lastError: LastError;
name: Scalars['String'];
};
/** Boolean expression to compare columns of type "Int". All fields are combined with logical 'AND'. */
export type Int_Comparison_Exp = {
_eq?: InputMaybe<Scalars['Int']>;
@@ -2683,6 +2689,13 @@ export type InvoiceSummary = {
items: Array<InvoiceItem>;
};
export type LastError = {
__typename?: 'LastError';
exitCode: Scalars['Int'];
message: Scalars['String'];
reason: Scalars['String'];
};
export type Log = {
__typename?: 'Log';
log: Scalars['String'];
@@ -2695,6 +2708,33 @@ export type Metrics = {
value: Scalars['float64'];
};
export type ProjectStatusResponse = {
__typename?: 'ProjectStatusResponse';
services: Array<ServiceStatus>;
};
export type ReplicaStatus = {
__typename?: 'ReplicaStatus';
date: Scalars['Timestamp'];
errors: Array<ContainerError>;
ready: Scalars['Boolean'];
};
export enum ServiceState {
Error = 'Error',
None = 'None',
Running = 'Running',
UpdateError = 'UpdateError',
Updating = 'Updating'
}
export type ServiceStatus = {
__typename?: 'ServiceStatus';
name: Scalars['String'];
replicas: Array<ReplicaStatus>;
state: ServiceState;
};
export type StatsLiveApps = {
__typename?: 'StatsLiveApps';
appID: Array<Scalars['uuid']>;
@@ -15948,6 +15988,7 @@ export type Query_Root = {
getLogsVolume: Metrics;
getPostgresVolumeCapacity: Metrics;
getPostgresVolumeUsage: Metrics;
getProjectStatus: ProjectStatusResponse;
/**
* Returns list of label values for a given label within a range of time.
*
@@ -16801,6 +16842,11 @@ export type Query_RootGetPostgresVolumeUsageArgs = {
};
export type Query_RootGetProjectStatusArgs = {
appID: Scalars['String'];
};
export type Query_RootGetServiceLabelValuesArgs = {
appID: Scalars['String'];
};
@@ -17427,6 +17473,7 @@ export type Regions = {
domain: Scalars['String'];
id: Scalars['uuid'];
isGdprCompliant: Scalars['Boolean'];
name: Scalars['String'];
/** An object relationship */
region_type: Region_Type;
/** An array relationship */
@@ -17804,6 +17851,7 @@ export type Regions_Bool_Exp = {
domain?: InputMaybe<String_Comparison_Exp>;
id?: InputMaybe<Uuid_Comparison_Exp>;
isGdprCompliant?: InputMaybe<Boolean_Comparison_Exp>;
name?: InputMaybe<String_Comparison_Exp>;
region_type?: InputMaybe<Region_Type_Bool_Exp>;
regions_allowed_workspaces?: InputMaybe<Regions_Allowed_Workspace_Bool_Exp>;
regions_allowed_workspaces_aggregate?: InputMaybe<Regions_Allowed_Workspace_Aggregate_Bool_Exp>;
@@ -17831,6 +17879,7 @@ export type Regions_Insert_Input = {
domain?: InputMaybe<Scalars['String']>;
id?: InputMaybe<Scalars['uuid']>;
isGdprCompliant?: InputMaybe<Scalars['Boolean']>;
name?: InputMaybe<Scalars['String']>;
region_type?: InputMaybe<Region_Type_Obj_Rel_Insert_Input>;
regions_allowed_workspaces?: InputMaybe<Regions_Allowed_Workspace_Arr_Rel_Insert_Input>;
type?: InputMaybe<Region_Type_Enum>;
@@ -17847,6 +17896,7 @@ export type Regions_Max_Fields = {
description?: Maybe<Scalars['String']>;
domain?: Maybe<Scalars['String']>;
id?: Maybe<Scalars['uuid']>;
name?: Maybe<Scalars['String']>;
updatedAt?: Maybe<Scalars['timestamptz']>;
};
@@ -17859,6 +17909,7 @@ export type Regions_Max_Order_By = {
description?: InputMaybe<Order_By>;
domain?: InputMaybe<Order_By>;
id?: InputMaybe<Order_By>;
name?: InputMaybe<Order_By>;
updatedAt?: InputMaybe<Order_By>;
};
@@ -17872,6 +17923,7 @@ export type Regions_Min_Fields = {
description?: Maybe<Scalars['String']>;
domain?: Maybe<Scalars['String']>;
id?: Maybe<Scalars['uuid']>;
name?: Maybe<Scalars['String']>;
updatedAt?: Maybe<Scalars['timestamptz']>;
};
@@ -17884,6 +17936,7 @@ export type Regions_Min_Order_By = {
description?: InputMaybe<Order_By>;
domain?: InputMaybe<Order_By>;
id?: InputMaybe<Order_By>;
name?: InputMaybe<Order_By>;
updatedAt?: InputMaybe<Order_By>;
};
@@ -17924,6 +17977,7 @@ export type Regions_Order_By = {
domain?: InputMaybe<Order_By>;
id?: InputMaybe<Order_By>;
isGdprCompliant?: InputMaybe<Order_By>;
name?: InputMaybe<Order_By>;
region_type?: InputMaybe<Region_Type_Order_By>;
regions_allowed_workspaces_aggregate?: InputMaybe<Regions_Allowed_Workspace_Aggregate_Order_By>;
type?: InputMaybe<Order_By>;
@@ -17956,6 +18010,8 @@ export enum Regions_Select_Column {
/** column name */
IsGdprCompliant = 'isGdprCompliant',
/** column name */
Name = 'name',
/** column name */
Type = 'type',
/** column name */
UpdatedAt = 'updatedAt'
@@ -17988,6 +18044,7 @@ export type Regions_Set_Input = {
domain?: InputMaybe<Scalars['String']>;
id?: InputMaybe<Scalars['uuid']>;
isGdprCompliant?: InputMaybe<Scalars['Boolean']>;
name?: InputMaybe<Scalars['String']>;
type?: InputMaybe<Region_Type_Enum>;
updatedAt?: InputMaybe<Scalars['timestamptz']>;
};
@@ -18011,6 +18068,7 @@ export type Regions_Stream_Cursor_Value_Input = {
domain?: InputMaybe<Scalars['String']>;
id?: InputMaybe<Scalars['uuid']>;
isGdprCompliant?: InputMaybe<Scalars['Boolean']>;
name?: InputMaybe<Scalars['String']>;
type?: InputMaybe<Region_Type_Enum>;
updatedAt?: InputMaybe<Scalars['timestamptz']>;
};
@@ -18036,6 +18094,8 @@ export enum Regions_Update_Column {
/** column name */
IsGdprCompliant = 'isGdprCompliant',
/** column name */
Name = 'name',
/** column name */
Type = 'type',
/** column name */
UpdatedAt = 'updatedAt'
@@ -22765,7 +22825,7 @@ export type DeleteApplicationMutation = { __typename?: 'mutation_root', deleteAp
export type GetAllWorkspacesAndProjectsQueryVariables = Exact<{ [key: string]: never; }>;
export type GetAllWorkspacesAndProjectsQuery = { __typename?: 'query_root', workspaces: Array<{ __typename?: 'workspaces', id: any, name: string, slug: string, creatorUserId?: any | null, workspaceMembers: Array<{ __typename?: 'workspaceMembers', id: any, type: string, user: { __typename?: 'users', id: any, email?: any | null, displayName: string } }>, projects: Array<{ __typename?: 'apps', id: any, slug: string, name: string, repositoryProductionBranch: string, subdomain: string, createdAt: any, desiredState: number, nhostBaseFolder: string, config?: { __typename?: 'ConfigConfig', observability: { __typename?: 'ConfigObservability', grafana: { __typename?: 'ConfigGrafana', adminPassword: string } }, hasura: { __typename?: 'ConfigHasura', adminSecret: string, settings?: { __typename?: 'ConfigHasuraSettings', enableConsole?: boolean | null } | null }, ai?: { __typename?: 'ConfigAI', version?: string | null } | null } | null, featureFlags: Array<{ __typename?: 'featureFlags', description: string, id: any, name: string, value: string }>, appStates: Array<{ __typename?: 'appStateHistory', id: any, appId: any, message?: string | null, stateId: number, createdAt: any }>, region: { __typename?: 'regions', id: any, countryCode: string, awsName: string, domain: string, city: string }, plan: { __typename?: 'plans', id: any, name: string, price: number, isFree: boolean, featureMaxDbSize: number }, githubRepository?: { __typename?: 'githubRepositories', fullName: string } | null, deployments: Array<{ __typename?: 'deployments', id: any, commitSHA: string, commitMessage?: string | null, commitUserName?: string | null, deploymentStartedAt?: any | null, deploymentEndedAt?: any | null, commitUserAvatarUrl?: string | null, deploymentStatus?: string | null }>, creator?: { __typename?: 'users', id: any, email?: any | null, displayName: string } | null }> }> };
export type GetAllWorkspacesAndProjectsQuery = { __typename?: 'query_root', workspaces: Array<{ __typename?: 'workspaces', id: any, name: string, slug: string, creatorUserId?: any | null, workspaceMembers: Array<{ __typename?: 'workspaceMembers', id: any, type: string, user: { __typename?: 'users', id: any, email?: any | null, displayName: string } }>, projects: Array<{ __typename?: 'apps', id: any, slug: string, name: string, repositoryProductionBranch: string, subdomain: string, createdAt: any, desiredState: number, nhostBaseFolder: string, config?: { __typename?: 'ConfigConfig', observability: { __typename?: 'ConfigObservability', grafana: { __typename?: 'ConfigGrafana', adminPassword: string } }, hasura: { __typename?: 'ConfigHasura', adminSecret: string, settings?: { __typename?: 'ConfigHasuraSettings', enableConsole?: boolean | null } | null }, ai?: { __typename?: 'ConfigAI', version?: string | null } | null } | null, featureFlags: Array<{ __typename?: 'featureFlags', description: string, id: any, name: string, value: string }>, appStates: Array<{ __typename?: 'appStateHistory', id: any, appId: any, message?: string | null, stateId: number, createdAt: any }>, region: { __typename?: 'regions', id: any, countryCode: string, name: string, domain: string, city: string }, plan: { __typename?: 'plans', id: any, name: string, price: number, isFree: boolean, featureMaxDbSize: number }, githubRepository?: { __typename?: 'githubRepositories', fullName: string } | null, deployments: Array<{ __typename?: 'deployments', id: any, commitSHA: string, commitMessage?: string | null, commitUserName?: string | null, deploymentStartedAt?: any | null, deploymentEndedAt?: any | null, commitUserAvatarUrl?: string | null, deploymentStatus?: string | null }>, creator?: { __typename?: 'users', id: any, email?: any | null, displayName: string } | null }> }> };
export type GetAppPlanAndGlobalPlansAppFragment = { __typename?: 'apps', id: any, subdomain: string, workspace: { __typename?: 'workspaces', id: any, paymentMethods: Array<{ __typename?: 'paymentMethods', id: any }> }, plan: { __typename?: 'plans', id: any, name: string } };
@@ -22822,7 +22882,7 @@ export type GetWorkspaceAndProjectQueryVariables = Exact<{
}>;
export type GetWorkspaceAndProjectQuery = { __typename?: 'query_root', workspaces: Array<{ __typename?: 'workspaces', id: any, name: string, slug: string, creatorUserId?: any | null, workspaceMembers: Array<{ __typename?: 'workspaceMembers', id: any, type: string, user: { __typename?: 'users', id: any, email?: any | null, displayName: string } }>, projects: Array<{ __typename?: 'apps', id: any, slug: string, name: string, repositoryProductionBranch: string, subdomain: string, createdAt: any, desiredState: number, nhostBaseFolder: string, config?: { __typename?: 'ConfigConfig', observability: { __typename?: 'ConfigObservability', grafana: { __typename?: 'ConfigGrafana', adminPassword: string } }, hasura: { __typename?: 'ConfigHasura', adminSecret: string, settings?: { __typename?: 'ConfigHasuraSettings', enableConsole?: boolean | null } | null }, ai?: { __typename?: 'ConfigAI', version?: string | null } | null } | null, featureFlags: Array<{ __typename?: 'featureFlags', description: string, id: any, name: string, value: string }>, appStates: Array<{ __typename?: 'appStateHistory', id: any, appId: any, message?: string | null, stateId: number, createdAt: any }>, region: { __typename?: 'regions', id: any, countryCode: string, awsName: string, domain: string, city: string }, plan: { __typename?: 'plans', id: any, name: string, price: number, isFree: boolean, featureMaxDbSize: number }, githubRepository?: { __typename?: 'githubRepositories', fullName: string } | null, deployments: Array<{ __typename?: 'deployments', id: any, commitSHA: string, commitMessage?: string | null, commitUserName?: string | null, deploymentStartedAt?: any | null, deploymentEndedAt?: any | null, commitUserAvatarUrl?: string | null, deploymentStatus?: string | null }>, creator?: { __typename?: 'users', id: any, email?: any | null, displayName: string } | null }> }> };
export type GetWorkspaceAndProjectQuery = { __typename?: 'query_root', workspaces: Array<{ __typename?: 'workspaces', id: any, name: string, slug: string, creatorUserId?: any | null, workspaceMembers: Array<{ __typename?: 'workspaceMembers', id: any, type: string, user: { __typename?: 'users', id: any, email?: any | null, displayName: string } }>, projects: Array<{ __typename?: 'apps', id: any, slug: string, name: string, repositoryProductionBranch: string, subdomain: string, createdAt: any, desiredState: number, nhostBaseFolder: string, config?: { __typename?: 'ConfigConfig', observability: { __typename?: 'ConfigObservability', grafana: { __typename?: 'ConfigGrafana', adminPassword: string } }, hasura: { __typename?: 'ConfigHasura', adminSecret: string, settings?: { __typename?: 'ConfigHasuraSettings', enableConsole?: boolean | null } | null }, ai?: { __typename?: 'ConfigAI', version?: string | null } | null } | null, featureFlags: Array<{ __typename?: 'featureFlags', description: string, id: any, name: string, value: string }>, appStates: Array<{ __typename?: 'appStateHistory', id: any, appId: any, message?: string | null, stateId: number, createdAt: any }>, region: { __typename?: 'regions', id: any, countryCode: string, name: string, domain: string, city: string }, plan: { __typename?: 'plans', id: any, name: string, price: number, isFree: boolean, featureMaxDbSize: number }, githubRepository?: { __typename?: 'githubRepositories', fullName: string } | null, deployments: Array<{ __typename?: 'deployments', id: any, commitSHA: string, commitMessage?: string | null, commitUserName?: string | null, deploymentStartedAt?: any | null, deploymentEndedAt?: any | null, commitUserAvatarUrl?: string | null, deploymentStatus?: string | null }>, creator?: { __typename?: 'users', id: any, email?: any | null, displayName: string } | null }> }> };
export type InsertApplicationMutationVariables = Exact<{
app: Apps_Insert_Input;
@@ -23014,9 +23074,9 @@ export type GetFilesAggregateQuery = { __typename?: 'query_root', filesAggregate
export type AppStateHistoryFragment = { __typename?: 'appStateHistory', id: any, appId: any, message?: string | null, stateId: number, createdAt: any };
export type ProjectFragment = { __typename?: 'apps', id: any, slug: string, name: string, repositoryProductionBranch: string, subdomain: string, createdAt: any, desiredState: number, nhostBaseFolder: string, config?: { __typename?: 'ConfigConfig', observability: { __typename?: 'ConfigObservability', grafana: { __typename?: 'ConfigGrafana', adminPassword: string } }, hasura: { __typename?: 'ConfigHasura', adminSecret: string, settings?: { __typename?: 'ConfigHasuraSettings', enableConsole?: boolean | null } | null }, ai?: { __typename?: 'ConfigAI', version?: string | null } | null } | null, featureFlags: Array<{ __typename?: 'featureFlags', description: string, id: any, name: string, value: string }>, appStates: Array<{ __typename?: 'appStateHistory', id: any, appId: any, message?: string | null, stateId: number, createdAt: any }>, region: { __typename?: 'regions', id: any, countryCode: string, awsName: string, domain: string, city: string }, plan: { __typename?: 'plans', id: any, name: string, price: number, isFree: boolean, featureMaxDbSize: number }, githubRepository?: { __typename?: 'githubRepositories', fullName: string } | null, deployments: Array<{ __typename?: 'deployments', id: any, commitSHA: string, commitMessage?: string | null, commitUserName?: string | null, deploymentStartedAt?: any | null, deploymentEndedAt?: any | null, commitUserAvatarUrl?: string | null, deploymentStatus?: string | null }>, creator?: { __typename?: 'users', id: any, email?: any | null, displayName: string } | null };
export type ProjectFragment = { __typename?: 'apps', id: any, slug: string, name: string, repositoryProductionBranch: string, subdomain: string, createdAt: any, desiredState: number, nhostBaseFolder: string, config?: { __typename?: 'ConfigConfig', observability: { __typename?: 'ConfigObservability', grafana: { __typename?: 'ConfigGrafana', adminPassword: string } }, hasura: { __typename?: 'ConfigHasura', adminSecret: string, settings?: { __typename?: 'ConfigHasuraSettings', enableConsole?: boolean | null } | null }, ai?: { __typename?: 'ConfigAI', version?: string | null } | null } | null, featureFlags: Array<{ __typename?: 'featureFlags', description: string, id: any, name: string, value: string }>, appStates: Array<{ __typename?: 'appStateHistory', id: any, appId: any, message?: string | null, stateId: number, createdAt: any }>, region: { __typename?: 'regions', id: any, countryCode: string, name: string, domain: string, city: string }, plan: { __typename?: 'plans', id: any, name: string, price: number, isFree: boolean, featureMaxDbSize: number }, githubRepository?: { __typename?: 'githubRepositories', fullName: string } | null, deployments: Array<{ __typename?: 'deployments', id: any, commitSHA: string, commitMessage?: string | null, commitUserName?: string | null, deploymentStartedAt?: any | null, deploymentEndedAt?: any | null, commitUserAvatarUrl?: string | null, deploymentStatus?: string | null }>, creator?: { __typename?: 'users', id: any, email?: any | null, displayName: string } | null };
export type WorkspaceFragment = { __typename?: 'workspaces', id: any, name: string, slug: string, creatorUserId?: any | null, workspaceMembers: Array<{ __typename?: 'workspaceMembers', id: any, type: string, user: { __typename?: 'users', id: any, email?: any | null, displayName: string } }>, projects: Array<{ __typename?: 'apps', id: any, slug: string, name: string, repositoryProductionBranch: string, subdomain: string, createdAt: any, desiredState: number, nhostBaseFolder: string, config?: { __typename?: 'ConfigConfig', observability: { __typename?: 'ConfigObservability', grafana: { __typename?: 'ConfigGrafana', adminPassword: string } }, hasura: { __typename?: 'ConfigHasura', adminSecret: string, settings?: { __typename?: 'ConfigHasuraSettings', enableConsole?: boolean | null } | null }, ai?: { __typename?: 'ConfigAI', version?: string | null } | null } | null, featureFlags: Array<{ __typename?: 'featureFlags', description: string, id: any, name: string, value: string }>, appStates: Array<{ __typename?: 'appStateHistory', id: any, appId: any, message?: string | null, stateId: number, createdAt: any }>, region: { __typename?: 'regions', id: any, countryCode: string, awsName: string, domain: string, city: string }, plan: { __typename?: 'plans', id: any, name: string, price: number, isFree: boolean, featureMaxDbSize: number }, githubRepository?: { __typename?: 'githubRepositories', fullName: string } | null, deployments: Array<{ __typename?: 'deployments', id: any, commitSHA: string, commitMessage?: string | null, commitUserName?: string | null, deploymentStartedAt?: any | null, deploymentEndedAt?: any | null, commitUserAvatarUrl?: string | null, deploymentStatus?: string | null }>, creator?: { __typename?: 'users', id: any, email?: any | null, displayName: string } | null }> };
export type WorkspaceFragment = { __typename?: 'workspaces', id: any, name: string, slug: string, creatorUserId?: any | null, workspaceMembers: Array<{ __typename?: 'workspaceMembers', id: any, type: string, user: { __typename?: 'users', id: any, email?: any | null, displayName: string } }>, projects: Array<{ __typename?: 'apps', id: any, slug: string, name: string, repositoryProductionBranch: string, subdomain: string, createdAt: any, desiredState: number, nhostBaseFolder: string, config?: { __typename?: 'ConfigConfig', observability: { __typename?: 'ConfigObservability', grafana: { __typename?: 'ConfigGrafana', adminPassword: string } }, hasura: { __typename?: 'ConfigHasura', adminSecret: string, settings?: { __typename?: 'ConfigHasuraSettings', enableConsole?: boolean | null } | null }, ai?: { __typename?: 'ConfigAI', version?: string | null } | null } | null, featureFlags: Array<{ __typename?: 'featureFlags', description: string, id: any, name: string, value: string }>, appStates: Array<{ __typename?: 'appStateHistory', id: any, appId: any, message?: string | null, stateId: number, createdAt: any }>, region: { __typename?: 'regions', id: any, countryCode: string, name: string, domain: string, city: string }, plan: { __typename?: 'plans', id: any, name: string, price: number, isFree: boolean, featureMaxDbSize: number }, githubRepository?: { __typename?: 'githubRepositories', fullName: string } | null, deployments: Array<{ __typename?: 'deployments', id: any, commitSHA: string, commitMessage?: string | null, commitUserName?: string | null, deploymentStartedAt?: any | null, deploymentEndedAt?: any | null, commitUserAvatarUrl?: string | null, deploymentStatus?: string | null }>, creator?: { __typename?: 'users', id: any, email?: any | null, displayName: string } | null }> };
export type GithubRepositoryFragment = { __typename?: 'githubRepositories', id: any, name: string, fullName: string, private: boolean, githubAppInstallation: { __typename?: 'githubAppInstallations', id: any, accountLogin?: string | null, accountType?: string | null, accountAvatarUrl?: string | null } };
@@ -23559,7 +23619,7 @@ export const ProjectFragmentDoc = gql`
region {
id
countryCode
awsName
name
domain
city
}