diff --git a/packages/clients/src/api/secret/v1alpha1/api.gen.ts b/packages/clients/src/api/secret/v1alpha1/api.gen.ts new file mode 100644 index 000000000..b728b28a1 --- /dev/null +++ b/packages/clients/src/api/secret/v1alpha1/api.gen.ts @@ -0,0 +1,357 @@ +// This file was automatically generated. DO NOT EDIT. +// If you have any remark or suggestion do not hesitate to open an issue. +import { + API as ParentAPI, + enrichForPagination, + urlParams, + validatePathParam, +} from '../../../bridge' +import type { Region } from '../../../bridge' +import { + marshalCreateSecretRequest, + marshalCreateSecretVersionRequest, + marshalUpdateSecretRequest, + marshalUpdateSecretVersionRequest, + unmarshalAccessSecretVersionResponse, + unmarshalListSecretVersionsResponse, + unmarshalListSecretsResponse, + unmarshalSecret, + unmarshalSecretVersion, +} from './marshalling.gen' +import type { + AccessSecretVersionRequest, + AccessSecretVersionResponse, + CreateSecretRequest, + CreateSecretVersionRequest, + DeleteSecretRequest, + DestroySecretVersionRequest, + DisableSecretVersionRequest, + EnableSecretVersionRequest, + GetSecretRequest, + GetSecretVersionRequest, + ListSecretVersionsRequest, + ListSecretVersionsResponse, + ListSecretsRequest, + ListSecretsResponse, + Secret, + SecretVersion, + UpdateSecretRequest, + UpdateSecretVersionRequest, +} from './types.gen' + +const jsonContentHeaders = { + 'Content-Type': 'application/json; charset=utf-8', +} + +/** + * Secret API (beta). + * + * This API allows you to conveniently store, access and share sensitive data. + */ +export class API extends ParentAPI { + /** Lists the available regions of the API. */ + public static readonly LOCALITIES: Region[] = ['fr-par'] + + /** + * Create a Secret containing no versions + * + * @param request - The request {@link CreateSecretRequest} + * @returns A Promise of Secret + */ + createSecret = (request: Readonly) => + this.client.fetch( + { + body: JSON.stringify( + marshalCreateSecretRequest(request, this.client.settings), + ), + headers: jsonContentHeaders, + method: 'POST', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets`, + }, + unmarshalSecret, + ) + + /** + * Get metadata of a Secret + * + * @param request - The request {@link GetSecretRequest} + * @returns A Promise of Secret + */ + getSecret = (request: Readonly) => + this.client.fetch( + { + method: 'GET', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets/${validatePathParam('secretId', request.secretId)}`, + }, + unmarshalSecret, + ) + + /** + * Update metadata of a Secret + * + * @param request - The request {@link UpdateSecretRequest} + * @returns A Promise of Secret + */ + updateSecret = (request: Readonly) => + this.client.fetch( + { + body: JSON.stringify( + marshalUpdateSecretRequest(request, this.client.settings), + ), + headers: jsonContentHeaders, + method: 'PATCH', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets/${validatePathParam('secretId', request.secretId)}`, + }, + unmarshalSecret, + ) + + protected pageOfListSecrets = (request: Readonly = {}) => + this.client.fetch( + { + method: 'GET', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets`, + urlParams: urlParams( + ['order_by', request.orderBy ?? 'name_asc'], + [ + 'organization_id', + request.organizationId ?? + this.client.settings.defaultOrganizationId, + ], + ['page', request.page], + [ + 'page_size', + request.pageSize ?? this.client.settings.defaultPageSize, + ], + [ + 'project_id', + request.projectId ?? this.client.settings.defaultProjectId, + ], + ['tags', request.tags], + ), + }, + unmarshalListSecretsResponse, + ) + + /** + * List Secrets + * + * @param request - The request {@link ListSecretsRequest} + * @returns A Promise of ListSecretsResponse + */ + listSecrets = (request: Readonly = {}) => + enrichForPagination('secrets', this.pageOfListSecrets, request) + + /** + * Delete a secret + * + * @param request - The request {@link DeleteSecretRequest} + */ + deleteSecret = (request: Readonly) => + this.client.fetch({ + method: 'DELETE', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets/${validatePathParam('secretId', request.secretId)}`, + }) + + /** + * Create a SecretVersion + * + * @param request - The request {@link CreateSecretVersionRequest} + * @returns A Promise of SecretVersion + */ + createSecretVersion = (request: Readonly) => + this.client.fetch( + { + body: JSON.stringify( + marshalCreateSecretVersionRequest(request, this.client.settings), + ), + headers: jsonContentHeaders, + method: 'POST', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets/${validatePathParam('secretId', request.secretId)}/versions`, + }, + unmarshalSecretVersion, + ) + + /** + * Get metadata of a SecretVersion + * + * @param request - The request {@link GetSecretVersionRequest} + * @returns A Promise of SecretVersion + */ + getSecretVersion = (request: Readonly) => + this.client.fetch( + { + method: 'GET', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets/${validatePathParam( + 'secretId', + request.secretId, + )}/versions/${validatePathParam('revision', request.revision)}`, + }, + unmarshalSecretVersion, + ) + + /** + * Update metadata of a SecretVersion + * + * @param request - The request {@link UpdateSecretVersionRequest} + * @returns A Promise of SecretVersion + */ + updateSecretVersion = (request: Readonly) => + this.client.fetch( + { + body: JSON.stringify( + marshalUpdateSecretVersionRequest(request, this.client.settings), + ), + headers: jsonContentHeaders, + method: 'PATCH', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets/${validatePathParam( + 'secretId', + request.secretId, + )}/versions/${validatePathParam('revision', request.revision)}`, + }, + unmarshalSecretVersion, + ) + + protected pageOfListSecretVersions = ( + request: Readonly, + ) => + this.client.fetch( + { + method: 'GET', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets/${validatePathParam('secretId', request.secretId)}/versions`, + urlParams: urlParams( + ['page', request.page], + [ + 'page_size', + request.pageSize ?? this.client.settings.defaultPageSize, + ], + ), + }, + unmarshalListSecretVersionsResponse, + ) + + /** + * List versions of a secret, not returning any sensitive data + * + * @param request - The request {@link ListSecretVersionsRequest} + * @returns A Promise of ListSecretVersionsResponse + */ + listSecretVersions = (request: Readonly) => + enrichForPagination('versions', this.pageOfListSecretVersions, request) + + /** + * Destroy a SecretVersion, permanently destroying the sensitive data + * + * @param request - The request {@link DestroySecretVersionRequest} + * @returns A Promise of SecretVersion + */ + destroySecretVersion = (request: Readonly) => + this.client.fetch( + { + body: '{}', + headers: jsonContentHeaders, + method: 'POST', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets/${validatePathParam( + 'secretId', + request.secretId, + )}/versions/${validatePathParam('revision', request.revision)}/destroy`, + }, + unmarshalSecretVersion, + ) + + /** + * Enable a SecretVersion + * + * @param request - The request {@link EnableSecretVersionRequest} + * @returns A Promise of SecretVersion + */ + enableSecretVersion = (request: Readonly) => + this.client.fetch( + { + body: '{}', + headers: jsonContentHeaders, + method: 'POST', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets/${validatePathParam( + 'secretId', + request.secretId, + )}/versions/${validatePathParam('revision', request.revision)}/enable`, + }, + unmarshalSecretVersion, + ) + + /** + * Disable a SecretVersion + * + * @param request - The request {@link DisableSecretVersionRequest} + * @returns A Promise of SecretVersion + */ + disableSecretVersion = (request: Readonly) => + this.client.fetch( + { + body: '{}', + headers: jsonContentHeaders, + method: 'POST', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets/${validatePathParam( + 'secretId', + request.secretId, + )}/versions/${validatePathParam('revision', request.revision)}/disable`, + }, + unmarshalSecretVersion, + ) + + /** + * Access a SecretVersion, returning the sensitive data + * + * @param request - The request {@link AccessSecretVersionRequest} + * @returns A Promise of AccessSecretVersionResponse + */ + accessSecretVersion = (request: Readonly) => + this.client.fetch( + { + method: 'GET', + path: `/secret-manager/v1alpha1/regions/${validatePathParam( + 'region', + request.region ?? this.client.settings.defaultRegion, + )}/secrets/${validatePathParam( + 'secretId', + request.secretId, + )}/versions/${validatePathParam('revision', request.revision)}/access`, + }, + unmarshalAccessSecretVersionResponse, + ) +} diff --git a/packages/clients/src/api/secret/v1alpha1/index.gen.ts b/packages/clients/src/api/secret/v1alpha1/index.gen.ts new file mode 100644 index 000000000..8a3ba82ed --- /dev/null +++ b/packages/clients/src/api/secret/v1alpha1/index.gen.ts @@ -0,0 +1,26 @@ +// This file was automatically generated. DO NOT EDIT. +// If you have any remark or suggestion do not hesitate to open an issue. +export { API } from './api.gen' +export type { + AccessSecretVersionRequest, + AccessSecretVersionResponse, + CreateSecretRequest, + CreateSecretVersionRequest, + DeleteSecretRequest, + DestroySecretVersionRequest, + DisableSecretVersionRequest, + EnableSecretVersionRequest, + GetSecretRequest, + GetSecretVersionRequest, + ListSecretVersionsRequest, + ListSecretVersionsResponse, + ListSecretsRequest, + ListSecretsRequestOrderBy, + ListSecretsResponse, + Secret, + SecretStatus, + SecretVersion, + SecretVersionStatus, + UpdateSecretRequest, + UpdateSecretVersionRequest, +} from './types.gen' diff --git a/packages/clients/src/api/secret/v1alpha1/marshalling.gen.ts b/packages/clients/src/api/secret/v1alpha1/marshalling.gen.ts new file mode 100644 index 000000000..378822a4b --- /dev/null +++ b/packages/clients/src/api/secret/v1alpha1/marshalling.gen.ts @@ -0,0 +1,131 @@ +// This file was automatically generated. DO NOT EDIT. +// If you have any remark or suggestion do not hesitate to open an issue. +import { + isJSONObject, + unmarshalArrayOfObject, + unmarshalDate, +} from '../../../bridge' +import type { DefaultValues } from '../../../bridge' +import type { + AccessSecretVersionResponse, + CreateSecretRequest, + CreateSecretVersionRequest, + ListSecretVersionsResponse, + ListSecretsResponse, + Secret, + SecretVersion, + UpdateSecretRequest, + UpdateSecretVersionRequest, +} from './types.gen' + +export const unmarshalSecret = (data: unknown) => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'Secret' failed as data isn't a dictionary.`, + ) + } + + return { + createdAt: unmarshalDate(data.created_at), + description: data.description, + id: data.id, + name: data.name, + projectId: data.project_id, + region: data.region, + status: data.status, + tags: data.tags, + updatedAt: unmarshalDate(data.updated_at), + versionCount: data.version_count, + } as Secret +} + +export const unmarshalSecretVersion = (data: unknown) => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'SecretVersion' failed as data isn't a dictionary.`, + ) + } + + return { + createdAt: unmarshalDate(data.created_at), + description: data.description, + revision: data.revision, + secretId: data.secret_id, + status: data.status, + updatedAt: unmarshalDate(data.updated_at), + } as SecretVersion +} + +export const unmarshalAccessSecretVersionResponse = (data: unknown) => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'AccessSecretVersionResponse' failed as data isn't a dictionary.`, + ) + } + + return { + data: data.data, + revision: data.revision, + secretId: data.secret_id, + } as AccessSecretVersionResponse +} + +export const unmarshalListSecretVersionsResponse = (data: unknown) => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'ListSecretVersionsResponse' failed as data isn't a dictionary.`, + ) + } + + return { + totalCount: data.total_count, + versions: unmarshalArrayOfObject(data.versions, unmarshalSecretVersion), + } as ListSecretVersionsResponse +} + +export const unmarshalListSecretsResponse = (data: unknown) => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'ListSecretsResponse' failed as data isn't a dictionary.`, + ) + } + + return { + secrets: unmarshalArrayOfObject(data.secrets, unmarshalSecret), + totalCount: data.total_count, + } as ListSecretsResponse +} + +export const marshalCreateSecretRequest = ( + request: CreateSecretRequest, + defaults: DefaultValues, +): Record => ({ + description: request.description, + name: request.name, + project_id: request.projectId ?? defaults.defaultProjectId, + tags: request.tags, +}) + +export const marshalCreateSecretVersionRequest = ( + request: CreateSecretVersionRequest, + defaults: DefaultValues, +): Record => ({ + data: request.data, + description: request.description, +}) + +export const marshalUpdateSecretRequest = ( + request: UpdateSecretRequest, + defaults: DefaultValues, +): Record => ({ + description: request.description, + name: request.name, + tags: request.tags, +}) + +export const marshalUpdateSecretVersionRequest = ( + request: UpdateSecretVersionRequest, + defaults: DefaultValues, +): Record => ({ + description: request.description, +}) diff --git a/packages/clients/src/api/secret/v1alpha1/types.gen.ts b/packages/clients/src/api/secret/v1alpha1/types.gen.ts new file mode 100644 index 000000000..378768c3c --- /dev/null +++ b/packages/clients/src/api/secret/v1alpha1/types.gen.ts @@ -0,0 +1,220 @@ +// This file was automatically generated. DO NOT EDIT. +// If you have any remark or suggestion do not hesitate to open an issue. +import type { Region } from '../../../bridge' + +export type ListSecretsRequestOrderBy = + | 'name_asc' + | 'name_desc' + | 'created_at_asc' + | 'created_at_desc' + | 'updated_at_asc' + | 'updated_at_desc' + +export type SecretStatus = 'ready' | 'locked' + +export type SecretVersionStatus = + | 'unknown' + | 'enabled' + | 'disabled' + | 'destroyed' + +/** Access secret version response */ +export interface AccessSecretVersionResponse { + /** ID of the Secret */ + secretId: string + /** Revision of the SecretVersion */ + revision: number + /** The base64-encoded secret payload of the SecretVersion */ + data: string +} + +/** List secret versions response */ +export interface ListSecretVersionsResponse { + /** Count of all SecretVersions */ + totalCount: number + /** Single page of SecretVersions */ + versions: Array +} + +/** List secrets response */ +export interface ListSecretsResponse { + /** Count of all Secrets matching the requested criteria */ + totalCount: number + /** Single page of Secrets matching the requested criteria */ + secrets: Array +} + +/** Secret */ +export interface Secret { + /** ID of the Secret */ + id: string + /** ID of the project containing the Secret */ + projectId: string + /** Name of the Secret */ + name: string + /** - `ready`: the Secret is ready. `locked`: the Secret is locked. */ + status: SecretStatus + /** The time at which the Secret was created */ + createdAt?: Date + /** The time at which the Secret was updated */ + updatedAt?: Date + /** List of tags associated to this Secret */ + tags: Array + /** Region of the Secret */ + region: Region + /** The number of versions for this Secret */ + versionCount: number + /** Description of the Secret */ + description?: string +} + +/** Secret version */ +export interface SecretVersion { + /** ID of the Secret */ + secretId: string + /** Revision of the SecretVersion */ + revision: number + /** + * - `unknown`: the SecretVersion is in an invalid state. `enabled`: the + * SecretVersion is accessible. `disabled`: the SecretVersion is not + * accessible but can be enabled. `destroyed`: the SecretVersion is + * permanently destroyed. + */ + status: SecretVersionStatus + /** The time at which the SecretVersion was created */ + createdAt?: Date + /** The time at which the SecretVersion was updated */ + updatedAt?: Date + /** Description of the SecretVersion */ + description?: string +} + +export type CreateSecretRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the project containing the Secret */ + projectId?: string + /** Name of the Secret */ + name: string + /** List of tags associated to this Secret */ + tags?: Array + /** Description of the Secret */ + description?: string +} + +export type GetSecretRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the Secret */ + secretId: string +} + +export type UpdateSecretRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the Secret */ + secretId: string + /** New name of the Secret (optional) */ + name?: string + /** New list of tags associated to this Secret (optional) */ + tags?: Array + /** Description of the Secret */ + description?: string +} + +export type ListSecretsRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of an organization to filter on (optional) */ + organizationId?: string + /** ID of a project to filter on (optional) */ + projectId?: string + /** List of tags to filter on (optional) */ + tags?: Array + orderBy?: ListSecretsRequestOrderBy + page?: number + pageSize?: number +} + +export type DeleteSecretRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the Secret */ + secretId: string +} + +export type CreateSecretVersionRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the Secret */ + secretId: string + /** The base64-encoded secret payload of the SecretVersion */ + data: string + /** Description of the SecretVersion */ + description?: string +} + +export type GetSecretVersionRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the Secret */ + secretId: string + /** Revision of the SecretVersion (may be a number or "latest") */ + revision: string +} + +export type UpdateSecretVersionRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the Secret */ + secretId: string + /** Revision of the SecretVersion (may be a number or "latest") */ + revision: string + /** Description of the SecretVersion */ + description?: string +} + +export type ListSecretVersionsRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the Secret */ + secretId: string + page?: number + pageSize?: number +} + +export type DestroySecretVersionRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the Secret */ + secretId: string + /** Revision of the SecretVersion (may be a number or "latest") */ + revision: string +} + +export type EnableSecretVersionRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the Secret */ + secretId: string + /** Revision of the SecretVersion (may be a number or "latest") */ + revision: string +} + +export type DisableSecretVersionRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the Secret */ + secretId: string + /** Revision of the SecretVersion (may be a number or "latest") */ + revision: string +} + +export type AccessSecretVersionRequest = { + /** Region to target. If none is passed will use default region from the config */ + region?: Region + /** ID of the Secret */ + secretId: string + /** Revision of the SecretVersion (may be a number or "latest") */ + revision: string +}