feat: add DomainLifecycleSteps

This commit is contained in:
Maël Gangloff 2024-08-23 21:19:34 +02:00
parent eeb2477611
commit 6ed2983665
No known key found for this signature in database
GPG Key ID: 11FDC81C24A7F629
16 changed files with 604 additions and 521 deletions

View File

@ -0,0 +1,55 @@
import {StepProps, Steps, Tooltip} from "antd";
import React from "react";
import {t} from "ttag";
import {
CheckOutlined,
DeleteOutlined,
ExclamationCircleOutlined,
ReloadOutlined,
SignatureOutlined
} from "@ant-design/icons";
import {rdapEventDetailTranslation, rdapStatusCodeDetailTranslation} from "../../utils/functions/rdapTranslation";
export function DomainLifecycleSteps({status}: { status: string[] }) {
const rdapEventDetailTranslated = rdapEventDetailTranslation()
const rdapStatusCodeDetailTranslated = rdapStatusCodeDetailTranslation()
const steps: StepProps[] = [
{
title: <Tooltip title={rdapEventDetailTranslated.registration}>{t`Registration`}</Tooltip>,
icon: <SignatureOutlined/>
},
{
title: <Tooltip title={rdapStatusCodeDetailTranslated.active}>{t`Active`}</Tooltip>,
icon: <CheckOutlined/>
},
{
title: <Tooltip title={rdapStatusCodeDetailTranslated["renew period"]}>{t`Renew Period`}</Tooltip>,
icon: <ReloadOutlined/>
},
{
title: <Tooltip
title={rdapStatusCodeDetailTranslated["redemption period"]}>{t`Redemption Period`}</Tooltip>,
icon: <ExclamationCircleOutlined/>
},
{
title: <Tooltip title={rdapStatusCodeDetailTranslated["pending delete"]}>{t`Pending Delete`}</Tooltip>,
icon: <DeleteOutlined/>
}
]
let currentStep = 1
if (status.includes('redemption period')) {
currentStep = 4
} else if (status.includes('pending delete')) {
currentStep = 5
}
return <Steps
current={currentStep}
items={steps}
/>
}

View File

@ -5,15 +5,18 @@ import {EntitiesList} from "./EntitiesList";
import {DomainDiagram} from "./DomainDiagram"; import {DomainDiagram} from "./DomainDiagram";
import React from "react"; import React from "react";
import {Domain} from "../../utils/api"; import {Domain} from "../../utils/api";
import {rdapStatusCodeDetailTranslation} from "./rdapTranslation"; import {rdapStatusCodeDetailTranslation} from "../../utils/functions/rdapTranslation";
import {regionNames} from "../../i18n"; import {regionNames} from "../../i18n";
import {getCountryCode} from "../../utils/functions/getCountryCode"; import {getCountryCode} from "../../utils/functions/getCountryCode";
import {eppStatusCodeToColor} from "../../utils/functions/eppStatusCodeToColor";
import {DomainLifecycleSteps} from "./DomainLifecycleSteps";
export function DomainResult({domain}: { domain: Domain }) { export function DomainResult({domain}: { domain: Domain }) {
const rdapStatusCodeDetailTranslated = rdapStatusCodeDetailTranslation() const rdapStatusCodeDetailTranslated = rdapStatusCodeDetailTranslation()
const {tld} = domain const {tld, events} = domain
const domainEvents = events.sort((e1, e2) => new Date(e2.date).getTime() - new Date(e1.date).getTime())
return <Space direction="vertical" size="middle" style={{width: '100%'}}> return <Space direction="vertical" size="middle" style={{width: '100%'}}>
@ -34,6 +37,9 @@ export function DomainResult({domain}: { domain: Domain }) {
{domain.ldhName}{domain.handle && <Typography.Text code>{domain.handle}</Typography.Text>} {domain.ldhName}{domain.handle && <Typography.Text code>{domain.handle}</Typography.Text>}
</Space>} </Space>}
size="small"> size="small">
{
domain.events.length > 0 && <DomainLifecycleSteps status={domain.status}/>
}
{domain.status.length > 0 && {domain.status.length > 0 &&
<> <>
<Divider orientation="left">{t`EPP Status Codes`}</Divider> <Divider orientation="left">{t`EPP Status Codes`}</Divider>
@ -43,15 +49,19 @@ export function DomainResult({domain}: { domain: Domain }) {
<Tooltip <Tooltip
placement='bottomLeft' placement='bottomLeft'
title={s in rdapStatusCodeDetailTranslated ? rdapStatusCodeDetailTranslated[s as keyof typeof rdapStatusCodeDetailTranslated] : undefined}> title={s in rdapStatusCodeDetailTranslated ? rdapStatusCodeDetailTranslated[s as keyof typeof rdapStatusCodeDetailTranslated] : undefined}>
<Tag color={['active', 'ok'].includes(s) ? 'green' : 'blue'}>{s}</Tag> <Tag color={eppStatusCodeToColor(s)}>{s}</Tag>
</Tooltip> </Tooltip>
) )
} }
</Flex> </Flex>
</> </>
} }
<Divider orientation="left">{t`Timeline`}</Divider> {
<EventTimeline domain={domain}/> domain.events.length > 0 && <>
<Divider orientation="left">{t`Timeline`}</Divider>
<EventTimeline events={domainEvents}/>
</>
}
{ {
domain.entities.length > 0 && domain.entities.length > 0 &&
<> <>

View File

@ -10,10 +10,9 @@ export type FieldType = {
export function DomainSearchBar({onFinish}: { onFinish: (values: FieldType) => void }) { export function DomainSearchBar({onFinish}: { onFinish: (values: FieldType) => void }) {
return <Form return <Form
labelCol={{span: 8}}
wrapperCol={{span: 16}}
onFinish={onFinish} onFinish={onFinish}
autoComplete="off" autoComplete="off"
style={{width: '100%'}}
> >
<Form.Item<FieldType> <Form.Item<FieldType>
name="ldhName" name="ldhName"

View File

@ -1,7 +1,7 @@
import {List, Tag, Tooltip} from "antd"; import {List, Tag, Tooltip} from "antd";
import React from "react"; import React from "react";
import {Domain} from "../../utils/api"; import {Domain} from "../../utils/api";
import {rdapRoleDetailTranslation, rdapRoleTranslation} from "./rdapTranslation"; import {rdapRoleDetailTranslation, rdapRoleTranslation} from "../../utils/functions/rdapTranslation";
import {roleToAvatar} from "../../utils/functions/roleToAvatar"; import {roleToAvatar} from "../../utils/functions/roleToAvatar";
import {rolesToColor} from "../../utils/functions/rolesToColor"; import {rolesToColor} from "../../utils/functions/rolesToColor";
import {entityToName} from "../../utils/functions/entityToName"; import {entityToName} from "../../utils/functions/entityToName";

View File

@ -1,53 +1,53 @@
import {Timeline, Tooltip, Typography} from "antd"; import {Progress, Timeline, Tooltip, Typography} from "antd";
import React from "react"; import React from "react";
import {Domain} from "../../utils/api"; import {Event} from "../../utils/api";
import useBreakpoint from "../../hooks/useBreakpoint"; import useBreakpoint from "../../hooks/useBreakpoint";
import {rdapEventDetailTranslation, rdapEventNameTranslation} from "./rdapTranslation"; import {rdapEventDetailTranslation, rdapEventNameTranslation} from "../../utils/functions/rdapTranslation";
import {actionToColor} from "../../utils/functions/actionToColor"; import {actionToColor} from "../../utils/functions/actionToColor";
import {actionToIcon} from "../../utils/functions/actionToIcon"; import {actionToIcon} from "../../utils/functions/actionToIcon";
export function EventTimeline({domain}: { domain: Domain }) { export function EventTimeline({events}: { events: Event[] }) {
const sm = useBreakpoint('sm') const sm = useBreakpoint('sm')
const locale = navigator.language.split('-')[0] const locale = navigator.language.split('-')[0]
const rdapEventNameTranslated = rdapEventNameTranslation() const rdapEventNameTranslated = rdapEventNameTranslation()
const rdapEventDetailTranslated = rdapEventDetailTranslation() const rdapEventDetailTranslated = rdapEventDetailTranslation()
const domainEvents = domain.events.sort((e1, e2) => new Date(e2.date).getTime() - new Date(e1.date).getTime()) return <>
<Timeline
mode={sm ? "left" : "right"}
items={events.map(e => {
const sameEvents = events.filter(se => se.action === e.action)
const isRelevant = !(sameEvents.length > 1 && sameEvents.indexOf(e) !== 0)
return <Timeline const eventName = <Typography.Text style={{color: isRelevant ? 'default' : 'grey'}}>
mode={sm ? "left" : "right"} {e.action in rdapEventNameTranslated ? rdapEventNameTranslated[e.action as keyof typeof rdapEventNameTranslated] : e.action}
items={domainEvents.map(e => { </Typography.Text>
const sameEvents = domainEvents.filter(se => se.action === e.action)
const isRelevant = !(sameEvents.length > 1 && sameEvents.indexOf(e) !== 0)
const eventName = <Typography.Text style={{color: isRelevant ? 'default' : 'grey'}}> const dateStr = <Typography.Text
{e.action in rdapEventNameTranslated ? rdapEventNameTranslated[e.action as keyof typeof rdapEventNameTranslated] : e.action} style={{color: isRelevant ? 'default' : 'grey'}}>{new Date(e.date).toLocaleString(locale)}
</Typography.Text> </Typography.Text>
const dateStr = <Typography.Text const eventDetail = e.action in rdapEventDetailTranslated ? rdapEventDetailTranslated[e.action as keyof typeof rdapEventDetailTranslated] : undefined
style={{color: isRelevant ? 'default' : 'grey'}}>{new Date(e.date).toLocaleString(locale)}
</Typography.Text>
const eventDetail = e.action in rdapEventDetailTranslated ? rdapEventDetailTranslated[e.action as keyof typeof rdapEventDetailTranslated] : undefined const text = sm ? {
children: <Tooltip placement='bottom' title={eventDetail}>
{eventName}&emsp;{dateStr}
</Tooltip>
} : {
label: dateStr,
children: <Tooltip placement='left' title={eventDetail}>{eventName}</Tooltip>,
}
const text = sm ? { return {
children: <Tooltip placement='bottom' title={eventDetail}> color: isRelevant ? actionToColor(e.action) : 'grey',
{eventName}&emsp;{dateStr} dot: actionToIcon(e.action),
</Tooltip> pending: new Date(e.date).getTime() > new Date().getTime(),
} : { ...text
label: dateStr, }
children: <Tooltip placement='left' title={eventDetail}>{eventName}</Tooltip>,
}
return {
color: isRelevant ? actionToColor(e.action) : 'grey',
dot: actionToIcon(e.action),
pending: new Date(e.date).getTime() > new Date().getTime(),
...text
} }
)
} }
) />
} </>
/>
} }

View File

@ -10,7 +10,7 @@ import {Watchlist} from "../../../pages/tracking/WatchlistPage";
import {Connector} from "../../../utils/api/connectors"; import {Connector} from "../../../utils/api/connectors";
import useBreakpoint from "../../../hooks/useBreakpoint"; import useBreakpoint from "../../../hooks/useBreakpoint";
import {CalendarWatchlistButton} from "./CalendarWatchlistButton"; import {CalendarWatchlistButton} from "./CalendarWatchlistButton";
import {rdapEventDetailTranslation, rdapEventNameTranslation} from "../../search/rdapTranslation"; import {rdapEventDetailTranslation, rdapEventNameTranslation} from "../../../utils/functions/rdapTranslation";
import {actionToColor} from "../../../utils/functions/actionToColor"; import {actionToColor} from "../../../utils/functions/actionToColor";

View File

@ -3,7 +3,7 @@ import {t} from "ttag";
import {ApiOutlined, MinusCircleOutlined, PlusOutlined} from "@ant-design/icons"; import {ApiOutlined, MinusCircleOutlined, PlusOutlined} from "@ant-design/icons";
import React from "react"; import React from "react";
import {Connector} from "../../../utils/api/connectors"; import {Connector} from "../../../utils/api/connectors";
import {rdapEventDetailTranslation, rdapEventNameTranslation} from "../../search/rdapTranslation"; import {rdapEventDetailTranslation, rdapEventNameTranslation} from "../../../utils/functions/rdapTranslation";
import {actionToColor} from "../../../utils/functions/actionToColor"; import {actionToColor} from "../../../utils/functions/actionToColor";
import {actionToIcon} from "../../../utils/functions/actionToIcon"; import {actionToIcon} from "../../../utils/functions/actionToIcon";

View File

@ -1,5 +1,5 @@
import {Domain, Watchlist} from "../../../../utils/api"; import {Domain, Watchlist} from "../../../../utils/api";
import {rdapRoleTranslation} from "../../../search/rdapTranslation"; import {rdapRoleTranslation} from "../../../../utils/functions/rdapTranslation";
import {t} from "ttag"; import {t} from "ttag";
import {rolesToColor} from "../../../../utils/functions/rolesToColor"; import {rolesToColor} from "../../../../utils/functions/rolesToColor";

View File

@ -1,5 +1,5 @@
import React, {useState} from "react"; import React, {useState} from "react";
import {Card, Empty, Flex, FormProps, message, Skeleton} from "antd"; import {Empty, Flex, FormProps, message, Skeleton} from "antd";
import {Domain, getDomain} from "../../utils/api"; import {Domain, getDomain} from "../../utils/api";
import {AxiosError} from "axios" import {AxiosError} from "axios"
import {t} from 'ttag' import {t} from 'ttag'
@ -23,18 +23,16 @@ export default function DomainSearchPage() {
} }
return <Flex gap="middle" align="center" justify="center" vertical> return <Flex gap="middle" align="center" justify="center" vertical>
<Card title={t`Domain finder`} style={{width: '100%'}}> {contextHolder}
{contextHolder} <DomainSearchBar onFinish={onFinish}/>
<DomainSearchBar onFinish={onFinish}/>
<Skeleton loading={domain === null} active> <Skeleton loading={domain === null} active>
{ {
domain && domain &&
(!domain.deleted ? <DomainResult domain={domain}/> (!domain.deleted ? <DomainResult domain={domain}/>
: <Empty : <Empty
description={t`Although the domain exists in my database, it has been deleted from the WHOIS by its registrar.`}/>) description={t`Although the domain exists in my database, it has been deleted from the WHOIS by its registrar.`}/>)
} }
</Skeleton> </Skeleton>
</Card>
</Flex> </Flex>
} }

View File

@ -0,0 +1,5 @@
export const eppStatusCodeToColor = (s: string) =>
['active', 'ok'].includes(s) ? 'green' :
s.startsWith('client') ? 'purple' :
s.startsWith('server') ? 'geekblue' :
s.includes('prohibited') ? 'red' : 'blue'

View File

@ -1,6 +1,6 @@
export const rolesToColor = (roles: string[]) => roles.includes('registrant') ? 'green' : export const rolesToColor = (roles: string[]) => roles.includes('registrant') ? 'green' :
roles.includes('administrative') ? 'blue' : roles.includes('technical') ? 'orange' :
roles.includes('technical') ? 'orange' : roles.includes('administrative') ? 'blue' :
roles.includes('registrar') ? 'purple' : roles.includes('registrar') ? 'purple' :
roles.includes('sponsor') ? 'magenta' : roles.includes('sponsor') ? 'magenta' :
roles.includes('billing') ? 'cyan' : 'default' roles.includes('billing') ? 'cyan' : 'default'

View File

@ -10,7 +10,6 @@
], ],
"scope": "/", "scope": "/",
"start_url": "/", "start_url": "/",
"orientation": "landscape",
"display": "standalone", "display": "standalone",
"background_color": "#fff", "background_color": "#fff",
"description": "A standalone app that collects open access information about domain names, helping users track the history and changes associated with domain names. " "description": "A standalone app that collects open access information about domain names, helping users track the history and changes associated with domain names. "

View File

@ -52,7 +52,10 @@ class WatchListController extends AbstractController
private readonly SerializerInterface $serializer, private readonly SerializerInterface $serializer,
private readonly EntityManagerInterface $em, private readonly EntityManagerInterface $em,
private readonly WatchListRepository $watchListRepository, private readonly WatchListRepository $watchListRepository,
private readonly LoggerInterface $logger, private readonly HttpClientInterface $httpClient, private readonly CacheItemPoolInterface $cacheItemPool, private readonly KernelInterface $kernel private readonly LoggerInterface $logger,
private readonly HttpClientInterface $httpClient,
private readonly CacheItemPoolInterface $cacheItemPool,
private readonly KernelInterface $kernel
) { ) {
} }

View File

@ -43,7 +43,8 @@ final readonly class ProcessDomainTriggerHandler
private KernelInterface $kernel, private KernelInterface $kernel,
private LoggerInterface $logger, private LoggerInterface $logger,
private HttpClientInterface $client, private HttpClientInterface $client,
private MailerInterface $mailer, private CacheItemPoolInterface $cacheItemPool private MailerInterface $mailer,
private CacheItemPoolInterface $cacheItemPool
) { ) {
$this->sender = new Address($mailerSenderEmail, $mailerSenderName); $this->sender = new Address($mailerSenderEmail, $mailerSenderName);
} }

View File

@ -12,7 +12,7 @@ msgstr ""
#: assets/components/LoginForm.tsx:62 #: assets/components/LoginForm.tsx:62
#: assets/components/RegisterForm.tsx:41 #: assets/components/RegisterForm.tsx:41
#: assets/components/RegisterForm.tsx:49 #: assets/components/RegisterForm.tsx:49
#: assets/components/search/DomainSearchBar.tsx:22 #: assets/components/search/DomainSearchBar.tsx:21
#: assets/components/tracking/connector/ConnectorForm.tsx:43 #: assets/components/tracking/connector/ConnectorForm.tsx:43
#: assets/components/tracking/connector/ConnectorForm.tsx:69 #: assets/components/tracking/connector/ConnectorForm.tsx:69
#: assets/components/tracking/connector/ConnectorForm.tsx:77 #: assets/components/tracking/connector/ConnectorForm.tsx:77
@ -40,471 +40,44 @@ msgstr ""
msgid "Log in with SSO" msgid "Log in with SSO"
msgstr "" msgstr ""
#: assets/components/search/rdapTranslation.ts:7 #: assets/components/search/DomainResult.tsx:45
msgid "Registrant"
msgstr ""
#: assets/components/search/rdapTranslation.ts:8
msgid "Technical"
msgstr ""
#: assets/components/search/rdapTranslation.ts:9
msgid "Administrative"
msgstr ""
#: assets/components/search/rdapTranslation.ts:10
msgid "Abuse"
msgstr ""
#: assets/components/search/rdapTranslation.ts:11
msgid "Billing"
msgstr ""
#: assets/components/search/rdapTranslation.ts:12
msgid "Registrar"
msgstr ""
#: assets/components/search/rdapTranslation.ts:13
msgid "Reseller"
msgstr ""
#: assets/components/search/rdapTranslation.ts:14
msgid "Sponsor"
msgstr ""
#: assets/components/search/rdapTranslation.ts:15
msgid "Proxy"
msgstr ""
#: assets/components/search/rdapTranslation.ts:16
msgid "Notifications"
msgstr ""
#: assets/components/search/rdapTranslation.ts:17
msgid "Noc"
msgstr ""
#: assets/components/search/rdapTranslation.ts:25
msgid ""
"The entity object instance is the registrant of the registration. In some "
"registries, this is known as a maintainer."
msgstr ""
#: assets/components/search/rdapTranslation.ts:26
msgid "The entity object instance is a technical contact for the registration."
msgstr ""
#: assets/components/search/rdapTranslation.ts:27
msgid ""
"The entity object instance is an administrative contact for the "
"registration."
msgstr ""
#: assets/components/search/rdapTranslation.ts:28
msgid ""
"The entity object instance handles network abuse issues on behalf of the "
"registrant of the registration."
msgstr ""
#: assets/components/search/rdapTranslation.ts:29
msgid ""
"The entity object instance handles payment and billing issues on behalf of "
"the registrant of the registration."
msgstr ""
#: assets/components/search/rdapTranslation.ts:30
msgid ""
"The entity object instance represents the authority responsible for the "
"registration in the registry."
msgstr ""
#: assets/components/search/rdapTranslation.ts:31
msgid ""
"The entity object instance represents a third party through which the "
"registration was conducted (i.e., not the registry or registrar)."
msgstr ""
#: assets/components/search/rdapTranslation.ts:32
msgid ""
"The entity object instance represents a domain policy sponsor, such as an "
"ICANN-approved sponsor."
msgstr ""
#: assets/components/search/rdapTranslation.ts:33
msgid ""
"The entity object instance represents a proxy for another entity object, "
"such as a registrant."
msgstr ""
#: assets/components/search/rdapTranslation.ts:34
msgid ""
"An entity object instance designated to receive notifications about "
"association object instances."
msgstr ""
#: assets/components/search/rdapTranslation.ts:35
msgid ""
"The entity object instance handles communications related to a network "
"operations center (NOC)."
msgstr ""
#: assets/components/search/rdapTranslation.ts:43
msgid "Registration"
msgstr ""
#: assets/components/search/rdapTranslation.ts:44
msgid "Reregistration"
msgstr ""
#: assets/components/search/rdapTranslation.ts:45
msgid "Changed"
msgstr ""
#: assets/components/search/rdapTranslation.ts:46
msgid "Expiration"
msgstr ""
#: assets/components/search/rdapTranslation.ts:47
msgid "Deletion"
msgstr ""
#: assets/components/search/rdapTranslation.ts:48
msgid "Reinstantiation"
msgstr ""
#: assets/components/search/rdapTranslation.ts:49
msgid "Transfer"
msgstr ""
#: assets/components/search/rdapTranslation.ts:50
msgid "Locked"
msgstr ""
#: assets/components/search/rdapTranslation.ts:51
msgid "Unlocked"
msgstr ""
#: assets/components/search/rdapTranslation.ts:52
msgid "Registrar expiration"
msgstr ""
#: assets/components/search/rdapTranslation.ts:53
msgid "ENUM validation expiration"
msgstr ""
#: assets/components/search/rdapTranslation.ts:60
msgid "The object instance was initially registered."
msgstr ""
#: assets/components/search/rdapTranslation.ts:61
msgid "The object instance was registered subsequently to initial registration."
msgstr ""
#: assets/components/search/rdapTranslation.ts:62
msgid ""
"An action noting when the information in the object instance was last "
"changed."
msgstr ""
#: assets/components/search/rdapTranslation.ts:63
msgid ""
"The object instance has been removed or will be removed at a predetermined "
"date and time from the registry."
msgstr ""
#: assets/components/search/rdapTranslation.ts:64
msgid ""
"The object instance was removed from the registry at a point in time that "
"was not predetermined."
msgstr ""
#: assets/components/search/rdapTranslation.ts:65
msgid ""
"The object instance was reregistered after having been removed from the "
"registry."
msgstr ""
#: assets/components/search/rdapTranslation.ts:66
msgid "The object instance was transferred from one registrar to another."
msgstr ""
#: assets/components/search/rdapTranslation.ts:67
msgid "The object instance was locked."
msgstr ""
#: assets/components/search/rdapTranslation.ts:68
msgid "The object instance was unlocked."
msgstr ""
#: assets/components/search/rdapTranslation.ts:69
msgid "An action noting the expiration date of the object in the registrar system."
msgstr ""
#: assets/components/search/rdapTranslation.ts:70
msgid ""
"Association of phone number represented by this ENUM domain to registrant "
"has expired or will expire at a predetermined date and time."
msgstr ""
#: assets/components/search/rdapTranslation.ts:78
msgid ""
"Signifies that the data of the object instance has been found to be "
"accurate."
msgstr ""
#: assets/components/search/rdapTranslation.ts:79
msgid "Renewal or reregistration of the object instance is forbidden."
msgstr ""
#: assets/components/search/rdapTranslation.ts:80
msgid "Updates to the object instance are forbidden."
msgstr ""
#: assets/components/search/rdapTranslation.ts:81
msgid "Transfers of the registration from one registrar to another are forbidden."
msgstr ""
#: assets/components/search/rdapTranslation.ts:82
msgid "Deletion of the registration of the object instance is forbidden."
msgstr ""
#: assets/components/search/rdapTranslation.ts:83
msgid "The registration of the object instance has been performed by a third party."
msgstr ""
#: assets/components/search/rdapTranslation.ts:84
msgid ""
"The information of the object instance is not designated for public "
"consumption."
msgstr ""
#: assets/components/search/rdapTranslation.ts:85
msgid ""
"Some of the information of the object instance has not been made available "
"and has been removed."
msgstr ""
#: assets/components/search/rdapTranslation.ts:86
msgid ""
"Some of the information of the object instance has been altered for the "
"purposes of not readily revealing the actual information of the object "
"instance."
msgstr ""
#: assets/components/search/rdapTranslation.ts:87
msgid ""
"The object instance is associated with other object instances in the "
"registry."
msgstr ""
#: assets/components/search/rdapTranslation.ts:88
msgid ""
"Changes to the object instance cannot be made, including the association of "
"other object instances."
msgstr ""
#: assets/components/search/rdapTranslation.ts:90
#: assets/components/search/rdapTranslation.ts:99
msgid ""
"This is the standard status for a domain, meaning it has no pending "
"operations or prohibitions."
msgstr ""
#: assets/components/search/rdapTranslation.ts:91
msgid ""
"This status code indicates that delegation information (name servers) has "
"not been associated with your domain. Your domain is not activated in the "
"DNS and will not resolve."
msgstr ""
#: assets/components/search/rdapTranslation.ts:92
msgid ""
"This status code indicates that a request to create your domain has been "
"received and is being processed."
msgstr ""
#: assets/components/search/rdapTranslation.ts:93
msgid ""
"This status code indicates that a request to renew your domain has been "
"received and is being processed."
msgstr ""
#: assets/components/search/rdapTranslation.ts:94
msgid ""
"This status code indicates that a request to transfer your domain to a new "
"registrar has been received and is being processed."
msgstr ""
#: assets/components/search/rdapTranslation.ts:95
msgid ""
"This status code indicates that a request to update your domain has been "
"received and is being processed."
msgstr ""
#: assets/components/search/rdapTranslation.ts:96
msgid ""
"This status code may be mixed with redemptionPeriod or pendingRestore. In "
"such case, depending on the status (i.e. redemptionPeriod or "
"pendingRestore) set in the domain name, the corresponding description "
"presented above applies. If this status is not combined with the "
"redemptionPeriod or pendingRestore status, the pendingDelete status code "
"indicates that your domain has been in redemptionPeriod status for 30 days "
"and you have not restored it within that 30-day period. Your domain will "
"remain in this status for several days, after which time your domain will "
"be purged and dropped from the registry database. Once deletion occurs, the "
"domain is available for re-registration in accordance with the registry's "
"policies."
msgstr ""
#: assets/components/search/rdapTranslation.ts:97
msgid ""
"This grace period is provided after the initial registration of a domain "
"name. If the registrar deletes the domain name during this period, the "
"registry may provide credit to the registrar for the cost of the "
"registration."
msgstr ""
#: assets/components/search/rdapTranslation.ts:98
msgid ""
"This grace period is provided after a domain name registration period "
"expires and is extended (renewed) automatically by the registry. If the "
"registrar deletes the domain name during this period, the registry provides "
"a credit to the registrar for the cost of the renewal."
msgstr ""
#: assets/components/search/rdapTranslation.ts:100
msgid ""
"This status code tells your domain's registry to reject requests to delete "
"the domain."
msgstr ""
#: assets/components/search/rdapTranslation.ts:101
msgid ""
"This status code tells your domain's registry to not activate your domain "
"in the DNS and as a consequence, it will not resolve. It is an uncommon "
"status that is usually enacted during legal disputes, non-payment, or when "
"your domain is subject to deletion."
msgstr ""
#: assets/components/search/rdapTranslation.ts:102
msgid ""
"This status code tells your domain's registry to reject requests to renew "
"your domain. It is an uncommon status that is usually enacted during legal "
"disputes or when your domain is subject to deletion."
msgstr ""
#: assets/components/search/rdapTranslation.ts:103
msgid ""
"This status code tells your domain's registry to reject requests to "
"transfer the domain from your current registrar to another."
msgstr ""
#: assets/components/search/rdapTranslation.ts:104
msgid ""
"This status code tells your domain's registry to reject requests to update "
"the domain."
msgstr ""
#: assets/components/search/rdapTranslation.ts:105
msgid ""
"This status code indicates that your registrar has asked the registry to "
"restore your domain that was in redemptionPeriod status. Your registry will "
"hold the domain in this status while waiting for your registrar to provide "
"required restoration documentation. If your registrar fails to provide "
"documentation to the registry operator within a set time period to confirm "
"the restoration request, the domain will revert to redemptionPeriod status."
msgstr ""
#: assets/components/search/rdapTranslation.ts:106
msgid ""
"This status code indicates that your registrar has asked the registry to "
"delete your domain. Your domain will be held in this status for 30 days. "
"After five calendar days following the end of the redemptionPeriod, your "
"domain is purged from the registry database and becomes available for "
"registration."
msgstr ""
#: assets/components/search/rdapTranslation.ts:107
msgid ""
"This grace period is provided after a domain name registration period is "
"explicitly extended (renewed) by the registrar. If the registrar deletes "
"the domain name during this period, the registry provides a credit to the "
"registrar for the cost of the renewal."
msgstr ""
#: assets/components/search/rdapTranslation.ts:108
msgid ""
"This status code prevents your domain from being deleted. It is an uncommon "
"status that is usually enacted during legal disputes, at your request, or "
"when a redemptionPeriod status is in place."
msgstr ""
#: assets/components/search/rdapTranslation.ts:109
msgid ""
"This status code indicates your domain's Registry Operator will not allow "
"your registrar to renew your domain. It is an uncommon status that is "
"usually enacted during legal disputes or when your domain is subject to "
"deletion."
msgstr ""
#: assets/components/search/rdapTranslation.ts:110
msgid ""
"This status code prevents your domain from being transferred from your "
"current registrar to another. It is an uncommon status that is usually "
"enacted during legal or other disputes, at your request, or when a "
"redemptionPeriod status is in place."
msgstr ""
#: assets/components/search/rdapTranslation.ts:111
msgid ""
"This status code locks your domain preventing it from being updated. It is "
"an uncommon status that is usually enacted during legal disputes, at your "
"request, or when a redemptionPeriod status is in place."
msgstr ""
#: assets/components/search/rdapTranslation.ts:112
msgid ""
"This status code is set by your domain's Registry Operator. Your domain is "
"not activated in the DNS."
msgstr ""
#: assets/components/search/rdapTranslation.ts:113
msgid ""
"This grace period is provided after the successful transfer of a domain "
"name from one registrar to another. If the new registrar deletes the domain "
"name during this period, the registry provides a credit to the registrar "
"for the cost of the transfer."
msgstr ""
#: assets/components/search/rdapTranslation.ts:115
msgid ""
"The object instance has been allocated administratively (i.e., not for use "
"by the recipient in their own right in operational networks)."
msgstr ""
#: assets/components/search/rdapTranslation.ts:116
msgid ""
"The object instance has been allocated to an IANA special-purpose address "
"registry."
msgstr ""
#: assets/components/search/DomainResult.tsx:39
msgid "EPP Status Codes" msgid "EPP Status Codes"
msgstr "" msgstr ""
#: assets/components/search/DomainResult.tsx:53 #: assets/components/search/DomainResult.tsx:61
msgid "Timeline" msgid "Timeline"
msgstr "" msgstr ""
#: assets/components/search/DomainResult.tsx:58 #: assets/components/search/DomainResult.tsx:68
msgid "Entities" msgid "Entities"
msgstr "" msgstr ""
#: assets/components/search/DomainSearchBar.tsx:25 #: assets/components/search/DomainSearchBar.tsx:24
#: assets/components/tracking/watchlist/WatchlistForm.tsx:118 #: assets/components/tracking/watchlist/WatchlistForm.tsx:118
msgid "This domain name does not appear to be valid" msgid "This domain name does not appear to be valid"
msgstr "" msgstr ""
#: assets/components/search/DomainLifecycleSteps.tsx:21
#: assets/utils/functions/rdapTranslation.ts:43
msgid "Registration"
msgstr ""
#: assets/components/search/DomainLifecycleSteps.tsx:25
msgid "Active"
msgstr ""
#: assets/components/search/DomainLifecycleSteps.tsx:29
msgid "Renew Period"
msgstr ""
#: assets/components/search/DomainLifecycleSteps.tsx:34
msgid "Redemption Period"
msgstr ""
#: assets/components/search/DomainLifecycleSteps.tsx:38
msgid "Pending Delete"
msgstr ""
#: assets/components/tracking/connector/ConnectorForm.tsx:40 #: assets/components/tracking/connector/ConnectorForm.tsx:40
msgid "Provider" msgid "Provider"
msgstr "" msgstr ""
@ -818,11 +391,7 @@ msgstr ""
msgid "Found !" msgid "Found !"
msgstr "" msgstr ""
#: assets/pages/search/DomainSearchPage.tsx:26 #: assets/pages/search/DomainSearchPage.tsx:34
msgid "Domain finder"
msgstr ""
#: assets/pages/search/DomainSearchPage.tsx:35
msgid "" msgid ""
"Although the domain exists in my database, it has been deleted from the " "Although the domain exists in my database, it has been deleted from the "
"WHOIS by its registrar." "WHOIS by its registrar."
@ -963,6 +532,450 @@ msgstr ""
msgid "Roles" msgid "Roles"
msgstr "" msgstr ""
#: assets/utils/functions/rdapTranslation.ts:7
msgid "Registrant"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:8
msgid "Technical"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:9
msgid "Administrative"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:10
msgid "Abuse"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:11
msgid "Billing"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:12
msgid "Registrar"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:13
msgid "Reseller"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:14
msgid "Sponsor"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:15
msgid "Proxy"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:16
msgid "Notifications"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:17
msgid "Noc"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:25
msgid ""
"The entity object instance is the registrant of the registration. In some "
"registries, this is known as a maintainer."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:26
msgid "The entity object instance is a technical contact for the registration."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:27
msgid ""
"The entity object instance is an administrative contact for the "
"registration."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:28
msgid ""
"The entity object instance handles network abuse issues on behalf of the "
"registrant of the registration."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:29
msgid ""
"The entity object instance handles payment and billing issues on behalf of "
"the registrant of the registration."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:30
msgid ""
"The entity object instance represents the authority responsible for the "
"registration in the registry."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:31
msgid ""
"The entity object instance represents a third party through which the "
"registration was conducted (i.e., not the registry or registrar)."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:32
msgid ""
"The entity object instance represents a domain policy sponsor, such as an "
"ICANN-approved sponsor."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:33
msgid ""
"The entity object instance represents a proxy for another entity object, "
"such as a registrant."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:34
msgid ""
"An entity object instance designated to receive notifications about "
"association object instances."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:35
msgid ""
"The entity object instance handles communications related to a network "
"operations center (NOC)."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:44
msgid "Reregistration"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:45
msgid "Changed"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:46
msgid "Expiration"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:47
msgid "Deletion"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:48
msgid "Reinstantiation"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:49
msgid "Transfer"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:50
msgid "Locked"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:51
msgid "Unlocked"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:52
msgid "Registrar expiration"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:53
msgid "ENUM validation expiration"
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:60
msgid "The object instance was initially registered."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:61
msgid "The object instance was registered subsequently to initial registration."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:62
msgid ""
"An action noting when the information in the object instance was last "
"changed."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:63
msgid ""
"The object instance has been removed or will be removed at a predetermined "
"date and time from the registry."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:64
msgid ""
"The object instance was removed from the registry at a point in time that "
"was not predetermined."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:65
msgid ""
"The object instance was reregistered after having been removed from the "
"registry."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:66
msgid "The object instance was transferred from one registrar to another."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:67
msgid "The object instance was locked."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:68
msgid "The object instance was unlocked."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:69
msgid "An action noting the expiration date of the object in the registrar system."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:70
msgid ""
"Association of phone number represented by this ENUM domain to registrant "
"has expired or will expire at a predetermined date and time."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:78
msgid ""
"Signifies that the data of the object instance has been found to be "
"accurate."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:79
msgid "Renewal or reregistration of the object instance is forbidden."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:80
msgid "Updates to the object instance are forbidden."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:81
msgid "Transfers of the registration from one registrar to another are forbidden."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:82
msgid "Deletion of the registration of the object instance is forbidden."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:83
msgid "The registration of the object instance has been performed by a third party."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:84
msgid ""
"The information of the object instance is not designated for public "
"consumption."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:85
msgid ""
"Some of the information of the object instance has not been made available "
"and has been removed."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:86
msgid ""
"Some of the information of the object instance has been altered for the "
"purposes of not readily revealing the actual information of the object "
"instance."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:87
msgid ""
"The object instance is associated with other object instances in the "
"registry."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:88
msgid ""
"Changes to the object instance cannot be made, including the association of "
"other object instances."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:90
#: assets/utils/functions/rdapTranslation.ts:99
msgid ""
"This is the standard status for a domain, meaning it has no pending "
"operations or prohibitions."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:91
msgid ""
"This status code indicates that delegation information (name servers) has "
"not been associated with your domain. Your domain is not activated in the "
"DNS and will not resolve."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:92
msgid ""
"This status code indicates that a request to create your domain has been "
"received and is being processed."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:93
msgid ""
"This status code indicates that a request to renew your domain has been "
"received and is being processed."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:94
msgid ""
"This status code indicates that a request to transfer your domain to a new "
"registrar has been received and is being processed."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:95
msgid ""
"This status code indicates that a request to update your domain has been "
"received and is being processed."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:96
msgid ""
"This status code may be mixed with redemptionPeriod or pendingRestore. In "
"such case, depending on the status (i.e. redemptionPeriod or "
"pendingRestore) set in the domain name, the corresponding description "
"presented above applies. If this status is not combined with the "
"redemptionPeriod or pendingRestore status, the pendingDelete status code "
"indicates that your domain has been in redemptionPeriod status for 30 days "
"and you have not restored it within that 30-day period. Your domain will "
"remain in this status for several days, after which time your domain will "
"be purged and dropped from the registry database. Once deletion occurs, the "
"domain is available for re-registration in accordance with the registry's "
"policies."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:97
msgid ""
"This grace period is provided after the initial registration of a domain "
"name. If the registrar deletes the domain name during this period, the "
"registry may provide credit to the registrar for the cost of the "
"registration."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:98
msgid ""
"This grace period is provided after a domain name registration period "
"expires and is extended (renewed) automatically by the registry. If the "
"registrar deletes the domain name during this period, the registry provides "
"a credit to the registrar for the cost of the renewal."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:100
msgid ""
"This status code tells your domain's registry to reject requests to delete "
"the domain."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:101
msgid ""
"This status code tells your domain's registry to not activate your domain "
"in the DNS and as a consequence, it will not resolve. It is an uncommon "
"status that is usually enacted during legal disputes, non-payment, or when "
"your domain is subject to deletion."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:102
msgid ""
"This status code tells your domain's registry to reject requests to renew "
"your domain. It is an uncommon status that is usually enacted during legal "
"disputes or when your domain is subject to deletion."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:103
msgid ""
"This status code tells your domain's registry to reject requests to "
"transfer the domain from your current registrar to another."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:104
msgid ""
"This status code tells your domain's registry to reject requests to update "
"the domain."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:105
msgid ""
"This status code indicates that your registrar has asked the registry to "
"restore your domain that was in redemptionPeriod status. Your registry will "
"hold the domain in this status while waiting for your registrar to provide "
"required restoration documentation. If your registrar fails to provide "
"documentation to the registry operator within a set time period to confirm "
"the restoration request, the domain will revert to redemptionPeriod status."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:106
msgid ""
"This status code indicates that your registrar has asked the registry to "
"delete your domain. Your domain will be held in this status for 30 days. "
"After five calendar days following the end of the redemptionPeriod, your "
"domain is purged from the registry database and becomes available for "
"registration."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:107
msgid ""
"This grace period is provided after a domain name registration period is "
"explicitly extended (renewed) by the registrar. If the registrar deletes "
"the domain name during this period, the registry provides a credit to the "
"registrar for the cost of the renewal."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:108
msgid ""
"This status code prevents your domain from being deleted. It is an uncommon "
"status that is usually enacted during legal disputes, at your request, or "
"when a redemptionPeriod status is in place."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:109
msgid ""
"This status code indicates your domain's Registry Operator will not allow "
"your registrar to renew your domain. It is an uncommon status that is "
"usually enacted during legal disputes or when your domain is subject to "
"deletion."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:110
msgid ""
"This status code prevents your domain from being transferred from your "
"current registrar to another. It is an uncommon status that is usually "
"enacted during legal or other disputes, at your request, or when a "
"redemptionPeriod status is in place."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:111
msgid ""
"This status code locks your domain preventing it from being updated. It is "
"an uncommon status that is usually enacted during legal disputes, at your "
"request, or when a redemptionPeriod status is in place."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:112
msgid ""
"This status code is set by your domain's Registry Operator. Your domain is "
"not activated in the DNS."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:113
msgid ""
"This grace period is provided after the successful transfer of a domain "
"name from one registrar to another. If the new registrar deletes the domain "
"name during this period, the registry provides a credit to the registrar "
"for the cost of the transfer."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:115
msgid ""
"The object instance has been allocated administratively (i.e., not for use "
"by the recipient in their own right in operational networks)."
msgstr ""
#: assets/utils/functions/rdapTranslation.ts:116
msgid ""
"The object instance has been allocated to an IANA special-purpose address "
"registry."
msgstr ""
#: assets/utils/functions/showErrorAPI.tsx:19 #: assets/utils/functions/showErrorAPI.tsx:19
#, javascript-format #, javascript-format
msgid "Please retry after ${ duration } seconds" msgid "Please retry after ${ duration } seconds"