Skip to content

Commit a080bd8

Browse files
authored
upcoming: [UIE-9343] - Add API endpoints and types for /v4/images/sharegroups/members and /v4/images/sharegroups/tokens (#12984)
* upcoming: [UIE-9311] - Add API endpoints and types for `/v4/images/sharegroups` * Add validation schema * upcoming: [UIE-9343] - Add API endpoints and types for `/v4beta/images/sharegroups/members` and `/v4beta/images/sharegroups/tokens` * rename sharegroup.ts * add named arguments for functions with more than 2 parameters * pr split + validation schema separation * PR feedback @pmakode-akamai * Added changeset: Add endpoints for `/v4/images/sharegroups/members` and `/v4/images/sharegroups/tokens` * Added changeset: Add validation schemas for creating and updating Sharegroup Members and Tokens
1 parent e12d772 commit a080bd8

File tree

5 files changed

+432
-0
lines changed

5 files changed

+432
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/api-v4": Upcoming Features
3+
---
4+
5+
Add endpoints for `/v4/images/sharegroups/members` and `/v4/images/sharegroups/tokens` ([#12984](https://github.com/linode/manager/pull/12984))
Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
import {
2+
addSharegroupMemberSchema,
3+
generateSharegroupTokenSchema,
4+
updateSharegroupMemberSchema,
5+
updateSharegroupTokenSchema,
6+
} from '@linode/validation/lib/images.schema';
7+
8+
import { BETA_API_ROOT } from '../constants';
9+
import Request, {
10+
setData,
11+
setMethod,
12+
setParams,
13+
setURL,
14+
setXFilter,
15+
} from '../request';
16+
17+
import type { Filter, ResourcePage as Page, Params } from '../types';
18+
import type {
19+
AddSharegroupMemberPayload,
20+
GenerateSharegroupTokenPayload,
21+
Image,
22+
Sharegroup,
23+
SharegroupMember,
24+
SharegroupToken,
25+
UpdateSharegroupMemberPayload,
26+
} from './types';
27+
28+
/**
29+
* Add Member to the Sharegroup
30+
*
31+
* @param sharegroupId {string} ID of the Sharegroup to add member
32+
* @param data {AddSharegroupMemberPayload} the Member details
33+
*/
34+
export const addMembersToSharegroup = (
35+
sharegroupId: number,
36+
data: AddSharegroupMemberPayload,
37+
) => {
38+
return Request<Sharegroup>(
39+
setURL(
40+
`${BETA_API_ROOT}/images/sharegroups/${encodeURIComponent(sharegroupId)}/images`,
41+
),
42+
setMethod('POST'),
43+
setData(data, addSharegroupMemberSchema),
44+
);
45+
};
46+
47+
/**
48+
* Generate user token for the Sharegroup
49+
*
50+
* @param data {GenerateSharegroupTokenPayload} the token details
51+
*/
52+
export const generateSharegroupToken = (
53+
data: GenerateSharegroupTokenPayload,
54+
) => {
55+
return Request<SharegroupToken>(
56+
setURL(`${BETA_API_ROOT}/images/sharegroups/tokens`),
57+
setMethod('POST'),
58+
setData(data, generateSharegroupTokenSchema),
59+
);
60+
};
61+
62+
/**
63+
* Get details of the Sharegroup the token has been accepted into
64+
*
65+
* @param token_uuid {string} Token UUID of the user
66+
*/
67+
export const getSharegroupFromToken = (token_uuid: string) => {
68+
Request<Sharegroup>(
69+
setURL(
70+
`${BETA_API_ROOT}/images/sharegroups/tokens/${encodeURIComponent(token_uuid)}/sharegroup`,
71+
),
72+
setMethod('GET'),
73+
);
74+
};
75+
76+
/**
77+
* Get a paginated list of Sharegroup Images the token has been accepted into
78+
*
79+
* @param token_uuid {string} Token UUID of the user
80+
*/
81+
export const getSharegroupImagesFromToken = (
82+
token_uuid: string,
83+
params: Params = {},
84+
filters: Filter = {},
85+
) => {
86+
Request<Page<Image>>(
87+
setURL(
88+
`${BETA_API_ROOT}/images/sharegroups/tokens/${encodeURIComponent(token_uuid)}/sharegroups/images`,
89+
),
90+
setMethod('GET'),
91+
setParams(params),
92+
setXFilter(filters),
93+
);
94+
};
95+
96+
/**
97+
* Get a paginated list of members part of the Sharegroup
98+
*
99+
* @param sharegroupId {string} ID of the Sharegroup to look up
100+
*/
101+
export const getSharegroupMembers = (
102+
sharegroupId: string,
103+
params: Params = {},
104+
filters: Filter = {},
105+
) => {
106+
Request<Page<SharegroupMember>>(
107+
setURL(
108+
`${BETA_API_ROOT}/images/sharegroups/${encodeURIComponent(sharegroupId)}/members`,
109+
),
110+
setMethod('GET'),
111+
setParams(params),
112+
setXFilter(filters),
113+
);
114+
};
115+
116+
/**
117+
* Get member details of a user from the Sharegroup
118+
*
119+
* @param sharegroupId {string} ID of the Sharegroup to look up
120+
* @param token_uuid {string} Token UUID of the user to look up
121+
*/
122+
export const getSharegroupMember = (
123+
sharegroupId: string,
124+
token_uuid: string,
125+
) => {
126+
Request<SharegroupMember>(
127+
setURL(
128+
`${BETA_API_ROOT}/images/sharegroups/${encodeURIComponent(sharegroupId)}/members/${encodeURIComponent(token_uuid)}`,
129+
),
130+
setMethod('GET'),
131+
);
132+
};
133+
134+
/**
135+
* Returns a paginated list of tokens created by the user
136+
*/
137+
export const getUserSharegroupTokens = (
138+
params: Params = {},
139+
filters: Filter = {},
140+
) => {
141+
Request<Page<SharegroupToken>>(
142+
setURL(`${BETA_API_ROOT}/images/sharegroups/tokens`),
143+
setMethod('GET'),
144+
setParams(params),
145+
setXFilter(filters),
146+
);
147+
};
148+
149+
/**
150+
* Get details about a specific token created by the user
151+
*
152+
* @param token_uuid Token UUID of the user to look up
153+
*/
154+
export const getUserSharegroupToken = (token_uuid: string) => {
155+
Request<SharegroupToken>(
156+
setURL(
157+
`${BETA_API_ROOT}/images/sharegroups/tokens/${encodeURIComponent(token_uuid)}`,
158+
),
159+
setMethod('GET'),
160+
);
161+
};
162+
163+
/**
164+
* Update a user token's label
165+
*
166+
* @param token_uuid {string} token UUID of the user
167+
* @param data {UpdateSharegroupMemberPayload} the updated label
168+
*/
169+
export const updateSharegroupToken = (
170+
token_uuid: string,
171+
data: UpdateSharegroupMemberPayload,
172+
) => {
173+
return Request<SharegroupToken>(
174+
setURL(
175+
`${BETA_API_ROOT}/images/sharegroups/tokens/${encodeURIComponent(token_uuid)}`,
176+
),
177+
setMethod('PUT'),
178+
setData(data, updateSharegroupTokenSchema),
179+
);
180+
};
181+
182+
/**
183+
* Update a Sharegroup member's label
184+
*
185+
* @param token_uuid {string} token UUID of the user
186+
* @param data {UpdateSharegroupMemberPayload} the updated label
187+
*/
188+
interface UpdateSharegroupMember {
189+
data: UpdateSharegroupMemberPayload;
190+
sharegroupId: string;
191+
token_uuid: string;
192+
}
193+
194+
export const updateSharegroupMember = ({
195+
sharegroupId,
196+
token_uuid,
197+
data,
198+
}: UpdateSharegroupMember) => {
199+
return Request<SharegroupMember>(
200+
setURL(
201+
`${BETA_API_ROOT}/images/sharegroups/${encodeURIComponent(sharegroupId)}/members/${encodeURIComponent(token_uuid)}`,
202+
),
203+
setMethod('PUT'),
204+
setData(data, updateSharegroupMemberSchema),
205+
);
206+
};
207+
208+
/**
209+
* Delete a user token
210+
*
211+
* @param token_uuid {string} Token UUID of the user to delete
212+
*/
213+
export const deleteSharegroupToken = (token_uuid: string) => {
214+
return Request<{}>(
215+
setURL(
216+
`${BETA_API_ROOT}/images/sharegroups/tokens/${encodeURIComponent(token_uuid)}`,
217+
),
218+
setMethod('DELETE'),
219+
);
220+
};
221+
222+
/**
223+
* Delete a sharegroup Member
224+
*
225+
* @param token_uuid {string} Token UUID of the member to delete
226+
*/
227+
export const deleteSharegroupMember = (
228+
sharegroupId: string,
229+
token_uuid: string,
230+
) => {
231+
return Request<{}>(
232+
setURL(
233+
`${BETA_API_ROOT}/images/sharegroups/${encodeURIComponent(sharegroupId)}/members/${encodeURIComponent(token_uuid)}`,
234+
),
235+
setMethod('DELETE'),
236+
);
237+
};

0 commit comments

Comments
 (0)