Skip to content

Commit 7db7c5b

Browse files
authored
feat(secret-manager): add secret path (#798)
1 parent effdfef commit 7db7c5b

File tree

4 files changed

+219
-1
lines changed

4 files changed

+219
-1
lines changed

packages/clients/src/api/secret/v1alpha1/api.gen.ts

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,15 @@ import {
99
import type { Region } from '../../../bridge'
1010
import {
1111
marshalAddSecretOwnerRequest,
12+
marshalCreateFolderRequest,
1213
marshalCreateSecretRequest,
1314
marshalCreateSecretVersionRequest,
1415
marshalGeneratePasswordRequest,
1516
marshalUpdateSecretRequest,
1617
marshalUpdateSecretVersionRequest,
1718
unmarshalAccessSecretVersionResponse,
19+
unmarshalFolder,
20+
unmarshalListFoldersResponse,
1821
unmarshalListSecretVersionsResponse,
1922
unmarshalListSecretsResponse,
2023
unmarshalListTagsResponse,
@@ -26,17 +29,22 @@ import type {
2629
AccessSecretVersionRequest,
2730
AccessSecretVersionResponse,
2831
AddSecretOwnerRequest,
32+
CreateFolderRequest,
2933
CreateSecretRequest,
3034
CreateSecretVersionRequest,
35+
DeleteFolderRequest,
3136
DeleteSecretRequest,
3237
DestroySecretVersionRequest,
3338
DisableSecretVersionRequest,
3439
EnableSecretVersionRequest,
40+
Folder,
3541
GeneratePasswordRequest,
3642
GetSecretByNameRequest,
3743
GetSecretRequest,
3844
GetSecretVersionByNameRequest,
3945
GetSecretVersionRequest,
46+
ListFoldersRequest,
47+
ListFoldersResponse,
4048
ListSecretVersionsByNameRequest,
4149
ListSecretVersionsRequest,
4250
ListSecretVersionsResponse,
@@ -67,7 +75,7 @@ export class API extends ParentAPI {
6775
public static readonly LOCALITIES: Region[] = ['fr-par']
6876

6977
/**
70-
* Create a secret. You must sepcify the `region` to create a secret.
78+
* Create a secret. You must specify the `region` to create a secret.
7179
*
7280
* @param request - The request {@link CreateSecretRequest}
7381
* @returns A Promise of Secret
@@ -88,6 +96,28 @@ export class API extends ParentAPI {
8896
unmarshalSecret,
8997
)
9098

99+
/**
100+
* Create folder.
101+
*
102+
* @param request - The request {@link CreateFolderRequest}
103+
* @returns A Promise of Folder
104+
*/
105+
createFolder = (request: Readonly<CreateFolderRequest>) =>
106+
this.client.fetch<Folder>(
107+
{
108+
body: JSON.stringify(
109+
marshalCreateFolderRequest(request, this.client.settings),
110+
),
111+
headers: jsonContentHeaders,
112+
method: 'POST',
113+
path: `/secret-manager/v1alpha1/regions/${validatePathParam(
114+
'region',
115+
request.region ?? this.client.settings.defaultRegion,
116+
)}/folders`,
117+
},
118+
unmarshalFolder,
119+
)
120+
91121
/**
92122
* Get metadata using the secret's ID. Retrieve the metadata of a secret
93123
* specified by the `region` and `secret_id` parameters.
@@ -111,6 +141,11 @@ export class API extends ParentAPI {
111141
* Get metadata using the secret's name. Retrieve the metadata of a secret
112142
* specified by the `region` and `secret_name` parameters.
113143
*
144+
* GetSecretByName usage is now deprecated.
145+
*
146+
* Scaleway recommends you to use ListSecrets with the `name` filter.
147+
*
148+
* @deprecated
114149
* @param request - The request {@link GetSecretByNameRequest}
115150
* @returns A Promise of Secret
116151
*/
@@ -172,6 +207,7 @@ export class API extends ParentAPI {
172207
'page_size',
173208
request.pageSize ?? this.client.settings.defaultPageSize,
174209
],
210+
['path', request.path],
175211
['project_id', request.projectId],
176212
['tags', request.tags],
177213
),
@@ -190,6 +226,40 @@ export class API extends ParentAPI {
190226
listSecrets = (request: Readonly<ListSecretsRequest> = {}) =>
191227
enrichForPagination('secrets', this.pageOfListSecrets, request)
192228

229+
protected pageOfListFolders = (request: Readonly<ListFoldersRequest> = {}) =>
230+
this.client.fetch<ListFoldersResponse>(
231+
{
232+
method: 'GET',
233+
path: `/secret-manager/v1alpha1/regions/${validatePathParam(
234+
'region',
235+
request.region ?? this.client.settings.defaultRegion,
236+
)}/folders`,
237+
urlParams: urlParams(
238+
['order_by', request.orderBy ?? 'created_at_asc'],
239+
['page', request.page],
240+
[
241+
'page_size',
242+
request.pageSize ?? this.client.settings.defaultPageSize,
243+
],
244+
['path', request.path],
245+
[
246+
'project_id',
247+
request.projectId ?? this.client.settings.defaultProjectId,
248+
],
249+
),
250+
},
251+
unmarshalListFoldersResponse,
252+
)
253+
254+
/**
255+
* List secrets. Retrieve the list of folders created within a Project.
256+
*
257+
* @param request - The request {@link ListFoldersRequest}
258+
* @returns A Promise of ListFoldersResponse
259+
*/
260+
listFolders = (request: Readonly<ListFoldersRequest> = {}) =>
261+
enrichForPagination('folders', this.pageOfListFolders, request)
262+
193263
/**
194264
* Delete a secret. Delete a given secret specified by the `region` and
195265
* `secret_id` parameters.
@@ -205,6 +275,20 @@ export class API extends ParentAPI {
205275
)}/secrets/${validatePathParam('secretId', request.secretId)}`,
206276
})
207277

278+
/**
279+
* Delete a given folder specified by the and `folder_id` parameter.
280+
*
281+
* @param request - The request {@link DeleteFolderRequest}
282+
*/
283+
deleteFolder = (request: Readonly<DeleteFolderRequest>) =>
284+
this.client.fetch<void>({
285+
method: 'DELETE',
286+
path: `/secret-manager/v1alpha1/regions/${validatePathParam(
287+
'region',
288+
request.region ?? this.client.settings.defaultRegion,
289+
)}/folders/${validatePathParam('folderId', request.folderId)}`,
290+
})
291+
208292
/**
209293
* Protect a secret. Protect a given secret specified by the `secret_id`
210294
* parameter. A protected secret can be read and modified but cannot be

packages/clients/src/api/secret/v1alpha1/index.gen.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,23 @@ export type {
66
AccessSecretVersionRequest,
77
AccessSecretVersionResponse,
88
AddSecretOwnerRequest,
9+
CreateFolderRequest,
910
CreateSecretRequest,
1011
CreateSecretVersionRequest,
12+
DeleteFolderRequest,
1113
DeleteSecretRequest,
1214
DestroySecretVersionRequest,
1315
DisableSecretVersionRequest,
1416
EnableSecretVersionRequest,
17+
Folder,
1518
GeneratePasswordRequest,
1619
GetSecretByNameRequest,
1720
GetSecretRequest,
1821
GetSecretVersionByNameRequest,
1922
GetSecretVersionRequest,
23+
ListFoldersRequest,
24+
ListFoldersRequestOrderBy,
25+
ListFoldersResponse,
2026
ListSecretVersionsByNameRequest,
2127
ListSecretVersionsRequest,
2228
ListSecretVersionsResponse,

packages/clients/src/api/secret/v1alpha1/marshalling.gen.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ import type { DefaultValues } from '../../../bridge'
1010
import type {
1111
AccessSecretVersionResponse,
1212
AddSecretOwnerRequest,
13+
CreateFolderRequest,
1314
CreateSecretRequest,
1415
CreateSecretVersionRequest,
16+
Folder,
1517
GeneratePasswordRequest,
18+
ListFoldersResponse,
1619
ListSecretVersionsResponse,
1720
ListSecretsResponse,
1821
ListTagsResponse,
@@ -23,6 +26,22 @@ import type {
2326
UpdateSecretVersionRequest,
2427
} from './types.gen'
2528

29+
export const unmarshalFolder = (data: unknown) => {
30+
if (!isJSONObject(data)) {
31+
throw new TypeError(
32+
`Unmarshalling the type 'Folder' failed as data isn't a dictionary.`,
33+
)
34+
}
35+
36+
return {
37+
createdAt: unmarshalDate(data.created_at),
38+
id: data.id,
39+
name: data.name,
40+
path: data.path,
41+
projectId: data.project_id,
42+
} as Folder
43+
}
44+
2645
export const unmarshalSecret = (data: unknown) => {
2746
if (!isJSONObject(data)) {
2847
throw new TypeError(
@@ -37,6 +56,7 @@ export const unmarshalSecret = (data: unknown) => {
3756
isManaged: data.is_managed,
3857
isProtected: data.is_protected,
3958
name: data.name,
59+
path: data.path,
4060
projectId: data.project_id,
4161
region: data.region,
4262
status: data.status,
@@ -80,6 +100,19 @@ export const unmarshalAccessSecretVersionResponse = (data: unknown) => {
80100
} as AccessSecretVersionResponse
81101
}
82102

103+
export const unmarshalListFoldersResponse = (data: unknown) => {
104+
if (!isJSONObject(data)) {
105+
throw new TypeError(
106+
`Unmarshalling the type 'ListFoldersResponse' failed as data isn't a dictionary.`,
107+
)
108+
}
109+
110+
return {
111+
folders: unmarshalArrayOfObject(data.folders, unmarshalFolder),
112+
totalCount: data.total_count,
113+
} as ListFoldersResponse
114+
}
115+
83116
export const unmarshalListSecretVersionsResponse = (data: unknown) => {
84117
if (!isJSONObject(data)) {
85118
throw new TypeError(
@@ -135,12 +168,22 @@ export const marshalAddSecretOwnerRequest = (
135168
product_name: request.productName,
136169
})
137170

171+
export const marshalCreateFolderRequest = (
172+
request: CreateFolderRequest,
173+
defaults: DefaultValues,
174+
): Record<string, unknown> => ({
175+
name: request.name,
176+
path: request.path,
177+
project_id: request.projectId ?? defaults.defaultProjectId,
178+
})
179+
138180
export const marshalCreateSecretRequest = (
139181
request: CreateSecretRequest,
140182
defaults: DefaultValues,
141183
): Record<string, unknown> => ({
142184
description: request.description,
143185
name: request.name,
186+
path: request.path,
144187
project_id: request.projectId ?? defaults.defaultProjectId,
145188
tags: request.tags,
146189
type: request.type ?? 'unknown_secret_type',
@@ -183,6 +226,7 @@ export const marshalUpdateSecretRequest = (
183226
): Record<string, unknown> => ({
184227
description: request.description,
185228
name: request.name,
229+
path: request.path,
186230
tags: request.tags,
187231
})
188232

0 commit comments

Comments
 (0)