diff --git a/packages/backend/src/database.ts b/packages/backend/src/database.ts index 82a79f21..2fd7232a 100644 --- a/packages/backend/src/database.ts +++ b/packages/backend/src/database.ts @@ -642,7 +642,7 @@ export class Database { return domain; } - async getLatestDNSDataByProjectId( + async getLatestDNSRecordByProjectId( projectId: string, ): Promise { const deploymentRepository = this.dataSource.getRepository(Deployment); diff --git a/packages/backend/src/registry.ts b/packages/backend/src/registry.ts index 8d43c969..ac437e25 100644 --- a/packages/backend/src/registry.ts +++ b/packages/backend/src/registry.ts @@ -16,7 +16,7 @@ import { ApplicationDeploymentRequest, ApplicationDeploymentRemovalRequest } from './entity/Deployment'; -import { AppDeploymentRecord, AppDeploymentRemovalRecord, AuctionParams, DeployerRecord, DNSRecord, RegistryRecord } from './types'; +import { AppDeploymentRecord, AppDeploymentRemovalRecord, AuctionParams, DeployerRecord, RegistryRecord } from './types'; import { getConfig, getRepoDetails, registryTransactionWithRetry, sleep } from './utils'; const log = debug('snowball:registry'); diff --git a/packages/backend/src/resolvers.ts b/packages/backend/src/resolvers.ts index 404dd239..237cc1ad 100644 --- a/packages/backend/src/resolvers.ts +++ b/packages/backend/src/resolvers.ts @@ -108,11 +108,11 @@ export const createResolvers = async (service: Service): Promise => { return service.verifyTx(txHash, amount, senderAddress); }, - getLatestDNSDataByProjectId: async ( + latestDNSRecord: async ( _: any, { projectId }: { projectId: string }, ) => { - return service.getLatestDNSDataByProjectId(projectId); + return service.getLatestDNSRecordByProjectId(projectId); }, }, diff --git a/packages/backend/src/schema.gql b/packages/backend/src/schema.gql index dca39278..d99d84c8 100644 --- a/packages/backend/src/schema.gql +++ b/packages/backend/src/schema.gql @@ -273,7 +273,7 @@ type Query { projectMembers(projectId: String!): [ProjectMember!] searchProjects(searchText: String!): [Project!] getAuctionData(auctionId: String!): Auction! - getLatestDNSDataByProjectId(projectId: String!): DNSRecordAttributes + latestDNSRecord(projectId: String!): DNSRecordAttributes oldestDomain(projectId: String!): Domain domains(projectId: String!, filter: FilterDomainsInput): [Domain] deployers: [Deployer] diff --git a/packages/backend/src/service.ts b/packages/backend/src/service.ts index 7a6eaad9..c5cb7125 100644 --- a/packages/backend/src/service.ts +++ b/packages/backend/src/service.ts @@ -215,7 +215,7 @@ export class Service { const dnsRecordData: DNSRecordAttributes = { name: dnsRecord.attributes.name, request: dnsRecord.attributes.request, - resourceType: dnsRecord.attributes.resourceType, + resourceType: dnsRecord.attributes.resource_type, value: dnsRecord.attributes.value, version: dnsRecord.attributes.version, } @@ -486,8 +486,8 @@ export class Service { return commitDeployments; } - async getLatestDNSDataByProjectId(projectId: string): Promise { - const dnsDeployments = await this.db.getLatestDNSDataByProjectId(projectId); + async getLatestDNSRecordByProjectId(projectId: string): Promise { + const dnsDeployments = await this.db.getLatestDNSRecordByProjectId(projectId); return dnsDeployments; } diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts index 89ba3de4..f02998ff 100644 --- a/packages/backend/src/types.ts +++ b/packages/backend/src/types.ts @@ -48,6 +48,14 @@ export interface DNSRecordAttributes { version: string; } +export interface RegistryDNSRecordAttributes { + name: string; + value: string; + request: string; + resource_type: string; + version: string; +} + export interface AppDeploymentRemovalRecordAttributes { deployment: string; request: string; @@ -73,7 +81,7 @@ export interface AppDeploymentRemovalRecord extends RegistryRecord { } export interface DNSRecord extends RegistryRecord { - attributes: DNSRecordAttributes + attributes: RegistryDNSRecordAttributes } export interface AddProjectFromTemplateInput { diff --git a/packages/frontend/src/components/projects/project/settings/DomainCard.tsx b/packages/frontend/src/components/projects/project/settings/DomainCard.tsx index 84f8fc6a..125b8425 100644 --- a/packages/frontend/src/components/projects/project/settings/DomainCard.tsx +++ b/packages/frontend/src/components/projects/project/settings/DomainCard.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import { Domain, DomainStatus, Project } from 'gql-client'; +import { DNSRecordAttributes, Domain, DomainStatus, Project } from 'gql-client'; import { Typography, @@ -18,8 +18,8 @@ import { useToast } from 'components/shared/Toast'; import { // CheckIcon, // CrossIcon, - GearIcon, // LoadingIcon, + GearIcon, } from 'components/shared/CustomIcon'; import { Heading } from 'components/shared/Heading'; import { Button } from 'components/shared/Button'; @@ -61,7 +61,7 @@ const DomainCard = ({ // const [refreshStatus, SetRefreshStatus] = useState(RefreshStatus.IDLE); const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); const [editDialogOpen, setEditDialogOpen] = useState(false); - const [IPAddress, setIPAddress] = useState(); + const [dnsRecord, setDnsRecord] = useState(null); const client = useGQLClient(); @@ -98,9 +98,9 @@ const DomainCard = ({ return; } - const dnsData = await client.getLatestDNSDataByProjectId(id); + const dnsRecordResponse = await client.getLatestDNSRecordByProjectId(id); - setIPAddress(dnsData.value); + setDnsRecord(dnsRecordResponse.latestDNSRecord); }; fetchDNSData(); @@ -187,9 +187,9 @@ const DomainCard = ({ {domain.status === DomainStatus.Pending && ( {/* {refreshStatus === RefreshStatus.IDLE ? ( */} - - ^ Add these records to your domain {/* and refresh to check */} - + + ^ Add these records to your domain {/* and refresh to check */} + {/* ) : refreshStatus === RefreshStatus.CHECKING ? ( ^ Checking records for {domain.name} @@ -212,11 +212,15 @@ const DomainCard = ({ - - {DOMAIN_RECORD.type} - {DOMAIN_RECORD.name} - {IPAddress ?? 'Not Configured'} - + {dnsRecord ? ( + + {dnsRecord.resourceType} + {DOMAIN_RECORD.name} + {dnsRecord.value ?? 'Not Configured'} + + ) : ( +

DNS record data not available

+ )}
diff --git a/packages/frontend/src/components/projects/project/settings/EditDomainDialog.tsx b/packages/frontend/src/components/projects/project/settings/EditDomainDialog.tsx index 45e3a938..a7f65be5 100644 --- a/packages/frontend/src/components/projects/project/settings/EditDomainDialog.tsx +++ b/packages/frontend/src/components/projects/project/settings/EditDomainDialog.tsx @@ -1,7 +1,7 @@ import { + // useMemo, useCallback, useEffect, - // useMemo } from 'react'; import { // Controller, @@ -11,9 +11,9 @@ import { import { Domain } from 'gql-client'; import { - Typography, // Select, // Option, + Typography, } from '@snowballtools/material-tailwind-react-fork'; import { useGQLClient } from 'context/GQLClientContext'; diff --git a/packages/frontend/src/components/projects/project/settings/SetupDomain.tsx b/packages/frontend/src/components/projects/project/settings/SetupDomain.tsx index ae157438..39ae042e 100644 --- a/packages/frontend/src/components/projects/project/settings/SetupDomain.tsx +++ b/packages/frontend/src/components/projects/project/settings/SetupDomain.tsx @@ -2,11 +2,11 @@ import { useNavigate } from 'react-router-dom'; import { useForm } from 'react-hook-form'; -import { Heading } from 'components/shared/Heading'; // import { InlineNotification } from 'components/shared/InlineNotification'; +// import { Radio } from 'components/shared/Radio'; +import { Heading } from 'components/shared/Heading'; import { Input } from 'components/shared/Input'; import { Button } from 'components/shared/Button'; -// import { Radio } from 'components/shared/Radio'; interface SetupDomainFormValues { domainName: string; diff --git a/packages/frontend/src/pages/org-slug/projects/id/Overview.tsx b/packages/frontend/src/pages/org-slug/projects/id/Overview.tsx index ac47fee9..9d55569d 100644 --- a/packages/frontend/src/pages/org-slug/projects/id/Overview.tsx +++ b/packages/frontend/src/pages/org-slug/projects/id/Overview.tsx @@ -6,30 +6,30 @@ import { } from 'react-router-dom'; import { RequestError } from 'octokit'; -import { useOctokit } from 'context/OctokitContext'; -import { GitCommitWithBranch, OutletContextType } from '../../../../types'; // import { useGQLClient } from 'context/GQLClientContext'; import { // Button, + // Tag, Heading, Avatar, - // Tag } from 'components/shared'; -import { getInitials } from 'utils/geInitials'; import { - BranchStrokeIcon, // CheckRoundFilledIcon, // ClockIcon, + // GlobeIcon, + BranchStrokeIcon, CursorBoxIcon, GithubStrokeIcon, - // GlobeIcon, LinkIcon, CalendarDaysIcon, } from 'components/shared/CustomIcon'; +// import { Domain, DomainStatus } from 'gql-client'; +import { useOctokit } from 'context/OctokitContext'; +import { GitCommitWithBranch, OutletContextType } from '../../../../types'; +import { getInitials } from 'utils/geInitials'; import { Activity } from 'components/projects/project/overview/Activity'; import { OverviewInfo } from 'components/projects/project/overview/OverviewInfo'; import { relativeTimeMs } from 'utils/time'; -// import { Domain, DomainStatus } from 'gql-client'; import { AuctionCard } from 'components/projects/project/overview/Activity/AuctionCard'; const COMMITS_PER_PAGE = 4; diff --git a/packages/frontend/src/pages/org-slug/projects/id/settings/domains/add/Config.tsx b/packages/frontend/src/pages/org-slug/projects/id/settings/domains/add/Config.tsx index 1752c66a..b56fae5b 100644 --- a/packages/frontend/src/pages/org-slug/projects/id/settings/domains/add/Config.tsx +++ b/packages/frontend/src/pages/org-slug/projects/id/settings/domains/add/Config.tsx @@ -8,6 +8,7 @@ import { ArrowRightCircleIcon } from 'components/shared/CustomIcon'; import { ProjectSettingContainer } from 'components/projects/project/settings/ProjectSettingContainer'; import { useToast } from 'components/shared/Toast'; import { useEffect, useState } from 'react'; +import { DNSRecordAttributes } from 'gql-client'; const Config = () => { const { id, orgSlug } = useParams(); @@ -17,7 +18,7 @@ const Config = () => { const primaryDomainName = searchParams.get('name'); const { toast, dismiss } = useToast(); - const [IPAddress, setIPAddress] = useState(); + const [dnsRecord, setDnsRecord] = useState(null); const handleSubmitDomain = async () => { if (primaryDomainName === null) { @@ -74,9 +75,9 @@ const Config = () => { return; } - const dnsData = await client.getLatestDNSDataByProjectId(id); + const dnsRecordResponse = await client.getLatestDNSRecordByProjectId(id); - setIPAddress(dnsData.value); + setDnsRecord(dnsRecordResponse.latestDNSRecord); }; fetchDNSData(); @@ -85,49 +86,57 @@ const Config = () => { // TODO: Figure out DNS Provider if possible and update appropriatly return ( -

- Add the following records to your domain. -

+ {dnsRecord ? ( + <> +

+ Add the following records to your domain. +

- - - - Type - Host - Value - - +
+ + + Type + Host + Value + + - - - A - @ - -

- {IPAddress ?? 'Not available'} -

-
-
-
-
+ + + + {dnsRecord.resourceType} + + @ + +

+ {dnsRecord.value ?? 'Not available'} +

+
+
+
+ - {IPAddress && ( - + {dnsRecord?.value && ( + + )} + + + ) : ( +

DNS record data not available

)} -
); }; diff --git a/packages/gql-client/src/client.ts b/packages/gql-client/src/client.ts index 872cd02f..207e6942 100644 --- a/packages/gql-client/src/client.ts +++ b/packages/gql-client/src/client.ts @@ -467,14 +467,14 @@ export class GQLClient { return data.verifyTx; } - async getLatestDNSDataByProjectId(projectId: string): Promise { + async getLatestDNSRecordByProjectId(projectId: string): Promise { const { data } = await this.client.query({ - query: queries.getLatestDNSDataByProjectId, + query: queries.getLatestDNSRecordByProjectId, variables: { projectId, }, }); - return data.getLatestDNSDataByProjectId; + return data; } } diff --git a/packages/gql-client/src/queries.ts b/packages/gql-client/src/queries.ts index 23b83032..cd6dc875 100644 --- a/packages/gql-client/src/queries.ts +++ b/packages/gql-client/src/queries.ts @@ -357,9 +357,9 @@ query ($txHash: String!, $amount: String!, $senderAddress: String!) { } `; -export const getLatestDNSDataByProjectId = gql` +export const getLatestDNSRecordByProjectId = gql` query($projectId: String!) { - getLatestDNSDataByProjectId(projectId: $projectId) { + latestDNSRecord(projectId: $projectId) { name value request diff --git a/packages/gql-client/src/types.ts b/packages/gql-client/src/types.ts index e4f15d45..085c33e9 100644 --- a/packages/gql-client/src/types.ts +++ b/packages/gql-client/src/types.ts @@ -381,10 +381,14 @@ export type AuctionParams = { numProviders: number; }; -export type GetLatestDNSDataResponse = { +export type DNSRecordAttributes = { name: string; value: string; request: string; resourceType: string; version: string; } + +export type GetLatestDNSDataResponse = { + latestDNSRecord: DNSRecordAttributes | null +}