Dynamic secret support & rest client fix

This commit is contained in:
Daniel Hougaard
2024-08-30 08:02:35 +04:00
parent 6cb5ebfef2
commit d058b3d0ed
3 changed files with 142 additions and 41 deletions

View File

@@ -8,6 +8,7 @@
], ],
"scripts": { "scripts": {
"generate-api:infisical": "openapi-generator-cli generate -i https://app.infisical.com/api/docs/json -g typescript-axios -o ./src/infisicalapi_client --skip-validate-spec --additional-properties=useSingleRequestParameter=true,withSeparateModelsAndApi=true,apiPackage=server,modelPackage=model --openapi-normalizer REFACTOR_ALLOF_WITH_PROPERTIES_ONLY=true && npm run post-generate-api", "generate-api:infisical": "openapi-generator-cli generate -i https://app.infisical.com/api/docs/json -g typescript-axios -o ./src/infisicalapi_client --skip-validate-spec --additional-properties=useSingleRequestParameter=true,withSeparateModelsAndApi=true,apiPackage=server,modelPackage=model --openapi-normalizer REFACTOR_ALLOF_WITH_PROPERTIES_ONLY=true && npm run post-generate-api",
"generate-api:infisical-dev": "openapi-generator-cli generate -i http://localhost:8080/api/docs/json -g typescript-axios -o ./src/infisicalapi_client --skip-validate-spec --additional-properties=useSingleRequestParameter=true,withSeparateModelsAndApi=true,apiPackage=server,modelPackage=model --openapi-normalizer REFACTOR_ALLOF_WITH_PROPERTIES_ONLY=true && npm run post-generate-api",
"post-generate-api": "rm ./src/infisicalapi_client/git_push.sh", "post-generate-api": "rm ./src/infisicalapi_client/git_push.sh",
"build": "tsup src/index.ts --out-dir lib --dts --format cjs,esm --tsconfig tsconfig.json --no-splitting" "build": "tsup src/index.ts --out-dir lib --dts --format cjs,esm --tsconfig tsconfig.json --no-splitting"
}, },

View File

@@ -0,0 +1,83 @@
import { RawAxiosRequestConfig } from "axios";
import { Configuration, DefaultApi as InfisicalApi } from "../infisicalapi_client";
import type {
DefaultApiApiV1DynamicSecretsLeasesLeaseIdDeleteRequest,
DefaultApiApiV1DynamicSecretsLeasesLeaseIdRenewPostRequest,
DefaultApiApiV1DynamicSecretsLeasesPostRequest,
DefaultApiApiV1DynamicSecretsNameDeleteRequest,
DefaultApiApiV1DynamicSecretsPostRequest
} from "../infisicalapi_client";
export default class DynamicSecretsClient {
#apiInstance: InfisicalApi;
#requestOptions: RawAxiosRequestConfig | undefined;
constructor(apiInstance: InfisicalApi, requestOptions: RawAxiosRequestConfig | undefined) {
this.#apiInstance = apiInstance;
this.#requestOptions = requestOptions;
}
async create(options: DefaultApiApiV1DynamicSecretsPostRequest["apiV1DynamicSecretsPostRequest"]) {
const res = await this.#apiInstance.apiV1DynamicSecretsPost(
{
apiV1DynamicSecretsPostRequest: options
},
this.#requestOptions
);
return res.data;
}
async delete(dynamicSecretName: string, options: DefaultApiApiV1DynamicSecretsNameDeleteRequest["apiV1DynamicSecretsNameDeleteRequest"]) {
const res = await this.#apiInstance.apiV1DynamicSecretsNameDelete(
{
name: dynamicSecretName,
apiV1DynamicSecretsNameDeleteRequest: options
},
this.#requestOptions
);
return res.data;
}
leases = {
create: async (options: DefaultApiApiV1DynamicSecretsLeasesPostRequest["apiV1DynamicSecretsLeasesPostRequest"]) => {
const res = await this.#apiInstance.apiV1DynamicSecretsLeasesPost(
{
apiV1DynamicSecretsLeasesPostRequest: options
},
this.#requestOptions
);
return res.data;
},
delete: async (
leaseId: string,
options: DefaultApiApiV1DynamicSecretsLeasesLeaseIdDeleteRequest["apiV1DynamicSecretsLeasesLeaseIdDeleteRequest"]
) => {
const res = await this.#apiInstance.apiV1DynamicSecretsLeasesLeaseIdDelete(
{
leaseId: leaseId,
apiV1DynamicSecretsLeasesLeaseIdDeleteRequest: options
},
this.#requestOptions
);
return res.data;
},
renew: async (
leaseId: string,
options: DefaultApiApiV1DynamicSecretsLeasesLeaseIdRenewPostRequest["apiV1DynamicSecretsLeasesLeaseIdRenewPostRequest"]
) => {
const res = await this.#apiInstance.apiV1DynamicSecretsLeasesLeaseIdRenewPost(
{
leaseId: leaseId,
apiV1DynamicSecretsLeasesLeaseIdRenewPostRequest: options
},
this.#requestOptions
);
return res.data;
}
};
}

View File

@@ -1,3 +1,4 @@
import { RawAxiosRequestConfig } from "axios";
import { Configuration, DefaultApi as InfisicalApi } from "../infisicalapi_client"; import { Configuration, DefaultApi as InfisicalApi } from "../infisicalapi_client";
import type { import type {
DefaultApiApiV3SecretsRawSecretNameDeleteRequest, DefaultApiApiV3SecretsRawSecretNameDeleteRequest,
@@ -45,12 +46,14 @@ const convertBool = (value: boolean | undefined) => (value ? "true" : "false");
export default class SecretsClient { export default class SecretsClient {
#apiInstance: InfisicalApi; #apiInstance: InfisicalApi;
constructor(apiInstance: InfisicalApi) { #requestOptions: RawAxiosRequestConfig | undefined;
constructor(apiInstance: InfisicalApi, requestOptions: RawAxiosRequestConfig | undefined) {
this.#apiInstance = apiInstance; this.#apiInstance = apiInstance;
} }
listSecrets = async (options: ListSecretsOptions) => { listSecrets = async (options: ListSecretsOptions) => {
const res = await this.#apiInstance.apiV3SecretsRawGet({ const res = await this.#apiInstance.apiV3SecretsRawGet(
{
environment: options.environment, environment: options.environment,
workspaceId: options.projectId, workspaceId: options.projectId,
expandSecretReferences: convertBool(options.expandSecretReferences), expandSecretReferences: convertBool(options.expandSecretReferences),
@@ -58,12 +61,15 @@ export default class SecretsClient {
recursive: convertBool(options.recursive), recursive: convertBool(options.recursive),
secretPath: options.secretPath, secretPath: options.secretPath,
tagSlugs: options.tagSlugs ? options.tagSlugs.join(",") : undefined tagSlugs: options.tagSlugs ? options.tagSlugs.join(",") : undefined
}); },
this.#requestOptions
);
return res.data; return res.data;
}; };
getSecret = async (options: GetSecretOptions) => { getSecret = async (options: GetSecretOptions) => {
const res = await this.#apiInstance.apiV3SecretsRawSecretNameGet({ const res = await this.#apiInstance.apiV3SecretsRawSecretNameGet(
{
environment: options.environment, environment: options.environment,
secretName: options.secretName, secretName: options.secretName,
workspaceId: options.projectId, workspaceId: options.projectId,
@@ -72,40 +78,51 @@ export default class SecretsClient {
secretPath: options.secretPath, secretPath: options.secretPath,
type: options.type, type: options.type,
version: options.version version: options.version
}); },
this.#requestOptions
);
return res.data.secret; return res.data.secret;
}; };
updateSecret = async (secretName: DefaultApiApiV3SecretsRawSecretNamePatchRequest["secretName"], options: UpdateSecretOptions) => { updateSecret = async (secretName: DefaultApiApiV3SecretsRawSecretNamePatchRequest["secretName"], options: UpdateSecretOptions) => {
const res = await this.#apiInstance.apiV3SecretsRawSecretNamePatch({ const res = await this.#apiInstance.apiV3SecretsRawSecretNamePatch(
{
secretName, secretName,
apiV3SecretsRawSecretNamePatchRequest: { apiV3SecretsRawSecretNamePatchRequest: {
...options, ...options,
workspaceId: options.projectId workspaceId: options.projectId
} }
}); },
this.#requestOptions
);
return res.data; return res.data;
}; };
createSecret = async (secretName: DefaultApiApiV3SecretsRawSecretNamePostRequest["secretName"], options: CreateSecretOptions) => { createSecret = async (secretName: DefaultApiApiV3SecretsRawSecretNamePostRequest["secretName"], options: CreateSecretOptions) => {
const res = await this.#apiInstance.apiV3SecretsRawSecretNamePost({ const res = await this.#apiInstance.apiV3SecretsRawSecretNamePost(
{
secretName, secretName,
apiV3SecretsRawSecretNamePostRequest: { apiV3SecretsRawSecretNamePostRequest: {
...options, ...options,
workspaceId: options.projectId workspaceId: options.projectId
} }
}); },
this.#requestOptions
);
return res.data; return res.data;
}; };
deleteSecret = async (secretName: DefaultApiApiV3SecretsRawSecretNameDeleteRequest["secretName"], options: DeleteSecretOptions) => { deleteSecret = async (secretName: DefaultApiApiV3SecretsRawSecretNameDeleteRequest["secretName"], options: DeleteSecretOptions) => {
const res = await this.#apiInstance.apiV3SecretsRawSecretNameDelete({ const res = await this.#apiInstance.apiV3SecretsRawSecretNameDelete(
{
secretName, secretName,
apiV3SecretsRawSecretNameDeleteRequest: { apiV3SecretsRawSecretNameDeleteRequest: {
...options, ...options,
workspaceId: options.projectId workspaceId: options.projectId
} }
}); },
this.#requestOptions
);
return res.data; return res.data;
}; };
} }