feat(custom-domains): allow to register a custom domain (without UI) (#9879)

# In this PR
- Allow to register a custom domain
- Refacto subdomain generation

# In other PRs
- Add UI to deal with a custom domain
- Add logic to work with custom domain
This commit is contained in:
Antoine Moreaux
2025-01-30 13:51:16 +01:00
committed by GitHub
parent ae4bf8d929
commit e895aa27e6
33 changed files with 1049 additions and 240 deletions

View File

@ -109,6 +109,7 @@ export type AuthorizeApp = {
export type AvailableWorkspaceOutput = {
__typename?: 'AvailableWorkspaceOutput';
displayName?: Maybe<Scalars['String']['output']>;
hostname?: Maybe<Scalars['String']['output']>;
id: Scalars['String']['output'];
logo?: Maybe<Scalars['String']['output']>;
sso: Array<SsoConnection>;
@ -375,6 +376,28 @@ export type CursorPaging = {
last?: InputMaybe<Scalars['Int']['input']>;
};
export type CustomHostnameDetails = {
__typename?: 'CustomHostnameDetails';
hostname: Scalars['String']['output'];
id: Scalars['String']['output'];
ownershipVerifications: Array<OwnershipVerification>;
status?: Maybe<Scalars['String']['output']>;
};
export type CustomHostnameOwnershipVerificationHttp = {
__typename?: 'CustomHostnameOwnershipVerificationHttp';
body: Scalars['String']['output'];
type: Scalars['String']['output'];
url: Scalars['String']['output'];
};
export type CustomHostnameOwnershipVerificationTxt = {
__typename?: 'CustomHostnameOwnershipVerificationTxt';
name: Scalars['String']['output'];
type: Scalars['String']['output'];
value: Scalars['String']['output'];
};
export type DeleteOneFieldInput = {
/** The id of the field to delete. */
id: Scalars['UUID']['input'];
@ -1209,6 +1232,8 @@ export type OnboardingStepSuccess = {
success: Scalars['Boolean']['output'];
};
export type OwnershipVerification = CustomHostnameOwnershipVerificationHttp | CustomHostnameOwnershipVerificationTxt;
export type PageInfo = {
__typename?: 'PageInfo';
/** The cursor of the last returned record. */
@ -1246,6 +1271,7 @@ export type PublicWorkspaceDataOutput = {
__typename?: 'PublicWorkspaceDataOutput';
authProviders: AuthProviders;
displayName?: Maybe<Scalars['String']['output']>;
hostname?: Maybe<Scalars['String']['output']>;
id: Scalars['String']['output'];
logo?: Maybe<Scalars['String']['output']>;
subdomain: Scalars['String']['output'];
@ -1275,6 +1301,7 @@ export type Query = {
findWorkspaceFromInviteHash: Workspace;
findWorkspaceInvitations: Array<WorkspaceInvitation>;
getAvailablePackages: Scalars['JSON']['output'];
getHostnameDetails?: Maybe<CustomHostnameDetails>;
getPostgresCredentials?: Maybe<PostgresCredentials>;
getProductPrices: BillingProductPricesOutput;
getPublicWorkspaceDataBySubdomain: PublicWorkspaceDataOutput;
@ -1850,7 +1877,7 @@ export type UpdateWorkflowVersionStepInput = {
export type UpdateWorkspaceInput = {
allowImpersonation?: InputMaybe<Scalars['Boolean']['input']>;
displayName?: InputMaybe<Scalars['String']['input']>;
domainName?: InputMaybe<Scalars['String']['input']>;
hostname?: InputMaybe<Scalars['String']['input']>;
inviteHash?: InputMaybe<Scalars['String']['input']>;
isGoogleAuthEnabled?: InputMaybe<Scalars['Boolean']['input']>;
isMicrosoftAuthEnabled?: InputMaybe<Scalars['Boolean']['input']>;