diff --git a/packages/clients/src/api/account/v3/api.gen.ts b/packages/clients/src/api/account/v3/api.gen.ts index d71c1fa25..ced97fae8 100644 --- a/packages/clients/src/api/account/v3/api.gen.ts +++ b/packages/clients/src/api/account/v3/api.gen.ts @@ -7,12 +7,25 @@ import { validatePathParam, } from '../../../bridge' import { + marshalContractApiCheckContractSignatureRequest, + marshalContractApiCreateContractSignatureRequest, marshalProjectApiCreateProjectRequest, marshalProjectApiUpdateProjectRequest, + unmarshalCheckContractSignatureResponse, + unmarshalContractSignature, + unmarshalListContractSignaturesResponse, unmarshalListProjectsResponse, unmarshalProject, } from './marshalling.gen' import type { + CheckContractSignatureResponse, + ContractApiCheckContractSignatureRequest, + ContractApiCreateContractSignatureRequest, + ContractApiDownloadContractSignatureRequest, + ContractApiListContractSignaturesRequest, + ContractApiValidateContractSignatureRequest, + ContractSignature, + ListContractSignaturesResponse, ListProjectsResponse, Project, ProjectApiCreateProjectRequest, @@ -26,6 +39,141 @@ const jsonContentHeaders = { 'Content-Type': 'application/json; charset=utf-8', } +/** + * Contract API. + * + * The Contract API allows you to manage contracts. + */ +export class ContractAPI extends ParentAPI { + /** + * Download a contract content. + * + * @param request - The request + * {@link ContractApiDownloadContractSignatureRequest} + * @returns A Promise of Blob + */ + downloadContractSignature = ( + request: Readonly, + ) => + this.client.fetch({ + method: 'GET', + path: `/account/v3/contract-signatures/${validatePathParam('contractSignatureId', request.contractSignatureId)}/download`, + urlParams: urlParams(['dl', 1], ['locale', request.locale]), + responseType: 'blob', + }) + + /** + * Create a signature for your Organization for the latest version of the + * requested contract. + * + * @param request - The request + * {@link ContractApiCreateContractSignatureRequest} + * @returns A Promise of ContractSignature + */ + createContractSignature = ( + request: Readonly, + ) => + this.client.fetch( + { + body: JSON.stringify( + marshalContractApiCreateContractSignatureRequest( + request, + this.client.settings, + ), + ), + headers: jsonContentHeaders, + method: 'POST', + path: `/account/v3/contract-signatures`, + }, + unmarshalContractSignature, + ) + + /** + * Sign a contract for your Organization. + * + * @param request - The request + * {@link ContractApiValidateContractSignatureRequest} + * @returns A Promise of ContractSignature + */ + validateContractSignature = ( + request: Readonly, + ) => + this.client.fetch( + { + body: '{}', + headers: jsonContentHeaders, + method: 'POST', + path: `/account/v3/contract-signatures/${validatePathParam('contractSignatureId', request.contractSignatureId)}/validate`, + }, + unmarshalContractSignature, + ) + + /** + * Check if a contract is signed for your Organization. + * + * @param request - The request + * {@link ContractApiCheckContractSignatureRequest} + * @returns A Promise of CheckContractSignatureResponse + */ + checkContractSignature = ( + request: Readonly, + ) => + this.client.fetch( + { + body: JSON.stringify( + marshalContractApiCheckContractSignatureRequest( + request, + this.client.settings, + ), + ), + headers: jsonContentHeaders, + method: 'POST', + path: `/account/v3/contract-signatures/check`, + }, + unmarshalCheckContractSignatureResponse, + ) + + protected pageOfListContractSignatures = ( + request: Readonly = {}, + ) => + this.client.fetch( + { + method: 'GET', + path: `/account/v3/contract-signatures`, + urlParams: urlParams( + ['order_by', request.orderBy], + [ + 'organization_id', + request.organizationId ?? + this.client.settings.defaultOrganizationId, + ], + ['page', request.page], + [ + 'page_size', + request.pageSize ?? this.client.settings.defaultPageSize, + ], + ), + }, + unmarshalListContractSignaturesResponse, + ) + + /** + * List contract signatures for an Organization. + * + * @param request - The request + * {@link ContractApiListContractSignaturesRequest} + * @returns A Promise of ListContractSignaturesResponse + */ + listContractSignatures = ( + request: Readonly = {}, + ) => + enrichForPagination( + 'contractSignatures', + this.pageOfListContractSignatures, + request, + ) +} + /** * Account API. * diff --git a/packages/clients/src/api/account/v3/index.gen.ts b/packages/clients/src/api/account/v3/index.gen.ts index 2760d6891..4ece97ed7 100644 --- a/packages/clients/src/api/account/v3/index.gen.ts +++ b/packages/clients/src/api/account/v3/index.gen.ts @@ -1,7 +1,18 @@ // This file was automatically generated. DO NOT EDIT. // If you have any remark or suggestion do not hesitate to open an issue. -export { ProjectAPI } from './api.gen' +export { ContractAPI, ProjectAPI } from './api.gen' export type { + CheckContractSignatureResponse, + Contract, + ContractApiCheckContractSignatureRequest, + ContractApiCreateContractSignatureRequest, + ContractApiDownloadContractSignatureRequest, + ContractApiListContractSignaturesRequest, + ContractApiValidateContractSignatureRequest, + ContractSignature, + ContractType, + ListContractSignaturesRequestOrderBy, + ListContractSignaturesResponse, ListProjectsRequestOrderBy, ListProjectsResponse, Project, diff --git a/packages/clients/src/api/account/v3/marshalling.gen.ts b/packages/clients/src/api/account/v3/marshalling.gen.ts index 619dbb9dc..aad39aeb7 100644 --- a/packages/clients/src/api/account/v3/marshalling.gen.ts +++ b/packages/clients/src/api/account/v3/marshalling.gen.ts @@ -8,12 +8,54 @@ import { } from '../../../bridge' import type { DefaultValues } from '../../../bridge' import type { + CheckContractSignatureResponse, + Contract, + ContractApiCheckContractSignatureRequest, + ContractApiCreateContractSignatureRequest, + ContractSignature, + ListContractSignaturesResponse, ListProjectsResponse, Project, ProjectApiCreateProjectRequest, ProjectApiUpdateProjectRequest, } from './types.gen' +const unmarshalContract = (data: unknown): Contract => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'Contract' failed as data isn't a dictionary.`, + ) + } + + return { + createdAt: unmarshalDate(data.created_at), + id: data.id, + name: data.name, + type: data.type, + updatedAt: unmarshalDate(data.updated_at), + version: data.version, + } as Contract +} + +export const unmarshalContractSignature = ( + data: unknown, +): ContractSignature => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'ContractSignature' failed as data isn't a dictionary.`, + ) + } + + return { + contract: data.contract ? unmarshalContract(data.contract) : undefined, + createdAt: unmarshalDate(data.created_at), + expiresAt: unmarshalDate(data.expires_at), + id: data.id, + organizationId: data.organization_id, + signedAt: unmarshalDate(data.signed_at), + } as ContractSignature +} + export const unmarshalProject = (data: unknown): Project => { if (!isJSONObject(data)) { throw new TypeError( @@ -31,6 +73,39 @@ export const unmarshalProject = (data: unknown): Project => { } as Project } +export const unmarshalCheckContractSignatureResponse = ( + data: unknown, +): CheckContractSignatureResponse => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'CheckContractSignatureResponse' failed as data isn't a dictionary.`, + ) + } + + return { + created: data.created, + validated: data.validated, + } as CheckContractSignatureResponse +} + +export const unmarshalListContractSignaturesResponse = ( + data: unknown, +): ListContractSignaturesResponse => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'ListContractSignaturesResponse' failed as data isn't a dictionary.`, + ) + } + + return { + contractSignatures: unmarshalArrayOfObject( + data.contract_signatures, + unmarshalContractSignature, + ), + totalCount: data.total_count, + } as ListContractSignaturesResponse +} + export const unmarshalListProjectsResponse = ( data: unknown, ): ListProjectsResponse => { @@ -46,6 +121,25 @@ export const unmarshalListProjectsResponse = ( } as ListProjectsResponse } +export const marshalContractApiCheckContractSignatureRequest = ( + request: ContractApiCheckContractSignatureRequest, + defaults: DefaultValues, +): Record => ({ + contract_name: request.contractName, + contract_type: request.contractType, + organization_id: request.organizationId ?? defaults.defaultOrganizationId, +}) + +export const marshalContractApiCreateContractSignatureRequest = ( + request: ContractApiCreateContractSignatureRequest, + defaults: DefaultValues, +): Record => ({ + contract_name: request.contractName, + contract_type: request.contractType, + organization_id: request.organizationId ?? defaults.defaultOrganizationId, + validated: request.validated, +}) + export const marshalProjectApiCreateProjectRequest = ( request: ProjectApiCreateProjectRequest, defaults: DefaultValues, diff --git a/packages/clients/src/api/account/v3/types.gen.ts b/packages/clients/src/api/account/v3/types.gen.ts index b86955ac0..5da29d33c 100644 --- a/packages/clients/src/api/account/v3/types.gen.ts +++ b/packages/clients/src/api/account/v3/types.gen.ts @@ -1,5 +1,22 @@ // This file was automatically generated. DO NOT EDIT. // If you have any remark or suggestion do not hesitate to open an issue. +import type { LanguageCode as StdLanguageCode } from '../../std/types.gen' + +export type ContractType = + | 'unknown_type' + | 'global' + | 'k8s' + | 'instance' + | 'container' + | 'baremetal' + +export type ListContractSignaturesRequestOrderBy = + | 'signed_at_asc' + | 'signed_at_desc' + | 'expires_at_asc' + | 'expires_at_desc' + | 'name_asc' + | 'name_desc' export type ListProjectsRequestOrderBy = | 'created_at_asc' @@ -7,6 +24,36 @@ export type ListProjectsRequestOrderBy = | 'name_asc' | 'name_desc' +export interface Contract { + /** ID of the contract. */ + id: string + /** The type of the contract. */ + type: ContractType + /** The name of the contract. */ + name: string + /** The version of the contract. */ + version: number + /** The creation date of the contract. */ + createdAt?: Date + /** The last modification date of the contract. */ + updatedAt?: Date +} + +export interface ContractSignature { + /** ID of the contract signature. */ + id: string + /** The Organization ID which signed the contract. */ + organizationId: string + /** The creation date of the contract signature. */ + createdAt?: Date + /** The signing date of the contract signature. */ + signedAt?: Date + /** The expiration date of the contract signature. */ + expiresAt?: Date + /** The contract signed. */ + contract?: Contract +} + export interface Project { /** ID of the Project. */ id: string @@ -22,6 +69,63 @@ export interface Project { description: string } +export interface CheckContractSignatureResponse { + /** Whether a signature has been requested for this contract. */ + created: boolean + /** Whether the signature for this contract has been validated. */ + validated: boolean +} + +export type ContractApiCheckContractSignatureRequest = { + /** ID of the Organization to check the contract signature for. */ + organizationId?: string + /** Filter on contract type. */ + contractType?: ContractType + /** Filter on contract name. */ + contractName: string +} + +export type ContractApiCreateContractSignatureRequest = { + /** The type of the contract. */ + contractType?: ContractType + /** The name of the contract. */ + contractName: string + /** Whether the contract is validated at creation. */ + validated: boolean + /** ID of the Organization. */ + organizationId?: string +} + +export type ContractApiDownloadContractSignatureRequest = { + /** The contract signature ID. */ + contractSignatureId: string + /** The locale requested for the content of the contract. */ + locale?: StdLanguageCode +} + +export type ContractApiListContractSignaturesRequest = { + /** The page number for the returned contracts. */ + page?: number + /** The maximum number of contracts per page. */ + pageSize?: number + /** How the contracts are ordered in the response. */ + orderBy?: ListContractSignaturesRequestOrderBy + /** Filter on Organization ID. */ + organizationId?: string +} + +export type ContractApiValidateContractSignatureRequest = { + /** The contract linked to your Organization you want to sign. */ + contractSignatureId: string +} + +export interface ListContractSignaturesResponse { + /** The total number of contract signatures. */ + totalCount: number + /** The paginated returned contract signatures. */ + contractSignatures: ContractSignature[] +} + export interface ListProjectsResponse { /** Total number of Projects. */ totalCount: number diff --git a/packages/clients/src/api/account/v3/validation-rules.gen.ts b/packages/clients/src/api/account/v3/validation-rules.gen.ts index f8adbd9da..574b1d235 100644 --- a/packages/clients/src/api/account/v3/validation-rules.gen.ts +++ b/packages/clients/src/api/account/v3/validation-rules.gen.ts @@ -1,6 +1,28 @@ // This file was automatically generated. DO NOT EDIT. // If you have any remark or suggestion do not hesitate to open an issue. +export const ContractApiCheckContractSignatureRequest = { + contractName: { + minLength: 1, + }, +} + +export const ContractApiCreateContractSignatureRequest = { + contractName: { + minLength: 1, + }, +} + +export const ContractApiListContractSignaturesRequest = { + page: { + greaterThan: 0, + }, + pageSize: { + greaterThanOrEqual: 1, + lessThanOrEqual: 100, + }, +} + export const ProjectApiCreateProjectRequest = { description: { maxLength: 200,