diff --git a/api/config/imageBuilder.ts b/api/config/imageBuilder.ts index 3306a5e3..fe124cca 100644 --- a/api/config/imageBuilder.ts +++ b/api/config/imageBuilder.ts @@ -8,6 +8,8 @@ const config: ConfigFile = { exportName: 'imageBuilderApi', hooks: true, filterEndpoints: [ + 'cloneCompose', + 'composeImage', 'getComposes', 'getComposeStatus', 'getComposeClones', diff --git a/src/store/imageBuilderApi.ts b/src/store/imageBuilderApi.ts index b8e538da..db0b26f6 100644 --- a/src/store/imageBuilderApi.ts +++ b/src/store/imageBuilderApi.ts @@ -19,6 +19,13 @@ const injectedRtkApi = api.injectEndpoints({ >({ query: (queryArg) => ({ url: `/composes/${queryArg.composeId}` }), }), + cloneCompose: build.mutation({ + query: (queryArg) => ({ + url: `/composes/${queryArg.composeId}/clone`, + method: "POST", + body: queryArg.cloneRequest, + }), + }), getComposeClones: build.query< GetComposeClonesApiResponse, GetComposeClonesApiArg @@ -34,6 +41,13 @@ const injectedRtkApi = api.injectEndpoints({ >({ query: (queryArg) => ({ url: `/clones/${queryArg.id}` }), }), + composeImage: build.mutation({ + query: (queryArg) => ({ + url: `/compose`, + method: "POST", + body: queryArg.composeRequest, + }), + }), getPackages: build.query({ query: (queryArg) => ({ url: `/packages`, @@ -70,6 +84,14 @@ export type GetComposeStatusApiArg = { /** Id of compose */ composeId: string; }; +export type CloneComposeApiResponse = + /** status 201 cloning has started */ CloneResponse; +export type CloneComposeApiArg = { + /** Id of compose to clone */ + composeId: string; + /** details of the new clone */ + cloneRequest: CloneRequest; +}; export type GetComposeClonesApiResponse = /** status 200 compose clones */ ClonesResponse; export type GetComposeClonesApiArg = { @@ -86,6 +108,12 @@ export type GetCloneStatusApiArg = { /** Id of clone status to get */ id: string; }; +export type ComposeImageApiResponse = + /** status 201 compose has started */ ComposeResponse; +export type ComposeImageApiArg = { + /** details of image to be composed */ + composeRequest: ComposeRequest; +}; export type GetPackagesApiResponse = /** status 200 a list of packages */ PackagesResponse; export type GetPackagesApiArg = { @@ -295,6 +323,9 @@ export type ComposeStatus = { image_status: ImageStatus; request: ComposeRequest; }; +export type CloneResponse = { + id: string; +}; export type Awsec2Clone = { region: string; share_with_accounts?: string[]; @@ -316,6 +347,16 @@ export type ClonesResponse = { }; data: ClonesResponseItem[]; }; +export type ComposeResponse = { + id: string; +}; +export type HttpError = { + title: string; + detail: string; +}; +export type HttpErrorList = { + errors: HttpError[]; +}; export type Package = { name: string; summary: string; @@ -334,7 +375,9 @@ export const { useGetArchitecturesQuery, useGetComposesQuery, useGetComposeStatusQuery, + useCloneComposeMutation, useGetComposeClonesQuery, useGetCloneStatusQuery, + useComposeImageMutation, useGetPackagesQuery, } = injectedRtkApi;