diff --git a/packages/clients/src/api/webhosting/v1alpha1/api.gen.ts b/packages/clients/src/api/webhosting/v1alpha1/api.gen.ts index 819eeda9c..fc85a0bfc 100644 --- a/packages/clients/src/api/webhosting/v1alpha1/api.gen.ts +++ b/packages/clients/src/api/webhosting/v1alpha1/api.gen.ts @@ -14,6 +14,7 @@ import { marshalUpdateHostingRequest, unmarshalDnsRecords, unmarshalHosting, + unmarshalListControlPanelsResponse, unmarshalListHostingsResponse, unmarshalListOffersResponse, } from './marshalling.gen' @@ -24,6 +25,8 @@ import type { GetDomainDnsRecordsRequest, GetHostingRequest, Hosting, + ListControlPanelsRequest, + ListControlPanelsResponse, ListHostingsRequest, ListHostingsResponse, ListOffersRequest, @@ -39,7 +42,7 @@ const jsonContentHeaders = { /** Web Hosting API. */ export class API extends ParentAPI { /** Lists the available regions of the API. */ - public static readonly LOCALITIES: Region[] = ['fr-par'] + public static readonly LOCALITIES: Region[] = ['fr-par', 'nl-ams'] /** * Order a Web Hosting plan. Order a Web Hosting plan, specifying the offer @@ -75,6 +78,7 @@ export class API extends ParentAPI { request.region ?? this.client.settings.defaultRegion, )}/hostings`, urlParams: urlParams( + ['control_panels', request.controlPanels], ['domain', request.domain], ['order_by', request.orderBy], ['organization_id', request.organizationId], @@ -257,4 +261,35 @@ export class API extends ParentAPI { }, unmarshalListOffersResponse, ) + + protected pageOfListControlPanels = ( + request: Readonly = {}, + ) => + this.client.fetch( + { + method: 'GET', + path: `/webhosting/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/control-panels`, + urlParams: urlParams( + ['page', request.page], + [ + 'page_size', + request.pageSize ?? this.client.settings.defaultPageSize, + ], + ), + }, + unmarshalListControlPanelsResponse, + ) + + /** + * List all control panels type. List the control panels type: cpanel or + * plesk. + * + * @param request - The request {@link ListControlPanelsRequest} + * @returns A Promise of ListControlPanelsResponse + */ + listControlPanels = (request: Readonly = {}) => + enrichForPagination('controlPanels', this.pageOfListControlPanels, request) } diff --git a/packages/clients/src/api/webhosting/v1alpha1/index.gen.ts b/packages/clients/src/api/webhosting/v1alpha1/index.gen.ts index a67a6aa17..c770c965f 100644 --- a/packages/clients/src/api/webhosting/v1alpha1/index.gen.ts +++ b/packages/clients/src/api/webhosting/v1alpha1/index.gen.ts @@ -3,6 +3,7 @@ export { API } from './api.gen' export * from './content.gen' export type { + ControlPanel, CreateHostingRequest, DeleteHostingRequest, DnsRecord, @@ -17,6 +18,8 @@ export type { HostingDnsStatus, HostingOption, HostingStatus, + ListControlPanelsRequest, + ListControlPanelsResponse, ListHostingsRequest, ListHostingsRequestOrderBy, ListHostingsResponse, diff --git a/packages/clients/src/api/webhosting/v1alpha1/marshalling.gen.ts b/packages/clients/src/api/webhosting/v1alpha1/marshalling.gen.ts index ab79f3ba5..0d795332f 100644 --- a/packages/clients/src/api/webhosting/v1alpha1/marshalling.gen.ts +++ b/packages/clients/src/api/webhosting/v1alpha1/marshalling.gen.ts @@ -8,12 +8,14 @@ import { } from '../../../bridge' import type { DefaultValues } from '../../../bridge' import type { + ControlPanel, CreateHostingRequest, DnsRecord, DnsRecords, Hosting, HostingCpanelUrls, HostingOption, + ListControlPanelsResponse, ListHostingsResponse, ListOffersResponse, Nameserver, @@ -56,6 +58,7 @@ export const unmarshalHosting = (data: unknown): Hosting => { } return { + controlPanelName: data.control_panel_name, cpanelUrls: data.cpanel_urls ? unmarshalHostingCpanelUrls(data.cpanel_urls) : undefined, @@ -124,6 +127,38 @@ export const unmarshalDnsRecords = (data: unknown): DnsRecords => { } as DnsRecords } +const unmarshalControlPanel = (data: unknown): ControlPanel => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'ControlPanel' failed as data isn't a dictionary.`, + ) + } + + return { + available: data.available, + logoUrl: data.logo_url, + name: data.name, + } as ControlPanel +} + +export const unmarshalListControlPanelsResponse = ( + data: unknown, +): ListControlPanelsResponse => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'ListControlPanelsResponse' failed as data isn't a dictionary.`, + ) + } + + return { + controlPanels: unmarshalArrayOfObject( + data.control_panels, + unmarshalControlPanel, + ), + totalCount: data.total_count, + } as ListControlPanelsResponse +} + export const unmarshalListHostingsResponse = ( data: unknown, ): ListHostingsResponse => { @@ -170,6 +205,7 @@ const unmarshalOffer = (data: unknown): Offer => { return { available: data.available, billingOperationPath: data.billing_operation_path, + controlPanelName: data.control_panel_name, endOfLife: data.end_of_life, id: data.id, price: data.price ? unmarshalMoney(data.price) : undefined, diff --git a/packages/clients/src/api/webhosting/v1alpha1/types.gen.ts b/packages/clients/src/api/webhosting/v1alpha1/types.gen.ts index 26b264110..26d7176b6 100644 --- a/packages/clients/src/api/webhosting/v1alpha1/types.gen.ts +++ b/packages/clients/src/api/webhosting/v1alpha1/types.gen.ts @@ -97,6 +97,15 @@ export interface Nameserver { isDefault: boolean } +export interface ControlPanel { + /** Control panel name. */ + name: string + /** Define if the control panel type is available to order. */ + available: boolean + /** URL of this control panel's logo. */ + logoUrl: string +} + export interface Hosting { /** ID of the Web Hosting plan. */ id: string @@ -132,6 +141,8 @@ export interface Hosting { username: string /** Indicates if the hosting offer has reached its end of life. */ offerEndOfLife: boolean + /** Name of the control panel. */ + controlPanelName: string /** Region where the Web Hosting plan is hosted. */ region: Region } @@ -154,6 +165,8 @@ export interface Offer { quotaWarnings: OfferQuotaWarning[] /** Indicates if the offer has reached its end of life. */ endOfLife: boolean + /** Name of the control panel. */ + controlPanelName: string } export type CreateHostingRequest = { @@ -218,6 +231,31 @@ export type GetHostingRequest = { hostingId: string } +export type ListControlPanelsRequest = { + /** + * Region to target. If none is passed will use default region from the + * config. + */ + region?: Region + /** + * Page number to return, from the paginated results (must be a positive + * integer). + */ + page?: number + /** + * Number of control panels to return (must be a positive integer lower or + * equal to 100). + */ + pageSize?: number +} + +export interface ListControlPanelsResponse { + /** Number of control panels returned. */ + totalCount: number + /** List of control panels. */ + controlPanels: ControlPanel[] +} + export type ListHostingsRequest = { /** * Region to target. If none is passed will use default region from the @@ -261,6 +299,11 @@ export type ListHostingsRequest = { * Organization will be returned. */ organizationId?: string + /** + * Name of the control panel to filter for, only Web Hosting plans from this + * control panel will be returned. + */ + controlPanels?: string[] } export interface ListHostingsResponse { diff --git a/packages/clients/src/api/webhosting/v1alpha1/validation-rules.gen.ts b/packages/clients/src/api/webhosting/v1alpha1/validation-rules.gen.ts index 59dc683bb..3619289a8 100644 --- a/packages/clients/src/api/webhosting/v1alpha1/validation-rules.gen.ts +++ b/packages/clients/src/api/webhosting/v1alpha1/validation-rules.gen.ts @@ -1,6 +1,16 @@ // This file was automatically generated. DO NOT EDIT. // If you have any remark or suggestion do not hesitate to open an issue. +export const ListControlPanelsRequest = { + page: { + greaterThan: 0, + }, + pageSize: { + greaterThan: 0, + lessThanOrEqual: 100, + }, +} + export const ListHostingsRequest = { page: { greaterThan: 0,