feat: create folders, environments, and projects
This commit is contained in:
33
src/custom/environments.ts
Normal file
33
src/custom/environments.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { RawAxiosRequestConfig } from "axios";
|
||||
import { DefaultApi as InfisicalApi } from "../infisicalapi_client";
|
||||
import type { ApiV1WorkspaceWorkspaceIdEnvironmentsPostRequest, ApiV1WorkspaceWorkspaceIdEnvironmentsPost200Response } from "../infisicalapi_client";
|
||||
import { newInfisicalError } from "./errors";
|
||||
|
||||
export type CreateEnvironmentOptions = {
|
||||
projectId: string;
|
||||
} & ApiV1WorkspaceWorkspaceIdEnvironmentsPostRequest;
|
||||
export type CreateEnvironmentResult = ApiV1WorkspaceWorkspaceIdEnvironmentsPost200Response;
|
||||
|
||||
export default class EnvironmentsClient {
|
||||
#apiInstance: InfisicalApi;
|
||||
#requestOptions: RawAxiosRequestConfig | undefined;
|
||||
constructor(apiInstance: InfisicalApi, requestOptions: RawAxiosRequestConfig | undefined) {
|
||||
this.#apiInstance = apiInstance;
|
||||
this.#requestOptions = requestOptions;
|
||||
}
|
||||
|
||||
create = async (options: CreateEnvironmentOptions): Promise<CreateEnvironmentResult["environment"]> => {
|
||||
try {
|
||||
const res = await this.#apiInstance.apiV1WorkspaceWorkspaceIdEnvironmentsPost(
|
||||
{
|
||||
workspaceId: options.projectId,
|
||||
apiV1WorkspaceWorkspaceIdEnvironmentsPostRequest: options
|
||||
},
|
||||
this.#requestOptions
|
||||
);
|
||||
return res.data.environment;
|
||||
} catch (err) {
|
||||
throw newInfisicalError(err);
|
||||
}
|
||||
};
|
||||
}
|
||||
35
src/custom/folders.ts
Normal file
35
src/custom/folders.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { RawAxiosRequestConfig } from "axios";
|
||||
import { DefaultApi as InfisicalApi } from "../infisicalapi_client";
|
||||
import type { ApiV1FoldersPostRequest, ApiV1FoldersPost200Response } from "../infisicalapi_client";
|
||||
import { newInfisicalError } from "./errors";
|
||||
|
||||
export type CreateFolderOptions = {
|
||||
projectId: string;
|
||||
} & Omit<ApiV1FoldersPostRequest, "workspaceId" | "directory">;
|
||||
export type CreateFolderResult = ApiV1FoldersPost200Response;
|
||||
|
||||
export default class FoldersClient {
|
||||
#apiInstance: InfisicalApi;
|
||||
#requestOptions: RawAxiosRequestConfig | undefined;
|
||||
constructor(apiInstance: InfisicalApi, requestOptions: RawAxiosRequestConfig | undefined) {
|
||||
this.#apiInstance = apiInstance;
|
||||
this.#requestOptions = requestOptions;
|
||||
}
|
||||
|
||||
create = async (options: CreateFolderOptions): Promise<CreateFolderResult["folder"]> => {
|
||||
try {
|
||||
const res = await this.#apiInstance.apiV1FoldersPost(
|
||||
{
|
||||
apiV1FoldersPostRequest: {
|
||||
...options,
|
||||
workspaceId: options.projectId
|
||||
}
|
||||
},
|
||||
this.#requestOptions
|
||||
);
|
||||
return res.data.folder;
|
||||
} catch (err) {
|
||||
throw newInfisicalError(err);
|
||||
}
|
||||
};
|
||||
}
|
||||
30
src/custom/projects.ts
Normal file
30
src/custom/projects.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import { RawAxiosRequestConfig } from "axios";
|
||||
import { DefaultApi as InfisicalApi } from "../infisicalapi_client";
|
||||
import type { ApiV2WorkspacePost200Response, ApiV2WorkspacePostRequest } from "../infisicalapi_client";
|
||||
import { newInfisicalError } from "./errors";
|
||||
|
||||
export type CreateProjectOptions = ApiV2WorkspacePostRequest;
|
||||
export type CreateProjectResult = ApiV2WorkspacePost200Response;
|
||||
|
||||
export default class ProjectsClient {
|
||||
#apiInstance: InfisicalApi;
|
||||
#requestOptions: RawAxiosRequestConfig | undefined;
|
||||
constructor(apiInstance: InfisicalApi, requestOptions: RawAxiosRequestConfig | undefined) {
|
||||
this.#apiInstance = apiInstance;
|
||||
this.#requestOptions = requestOptions;
|
||||
}
|
||||
|
||||
create = async (options: CreateProjectOptions): Promise<CreateProjectResult["project"]> => {
|
||||
try {
|
||||
const res = await this.#apiInstance.apiV2WorkspacePost(
|
||||
{
|
||||
apiV2WorkspacePostRequest: options
|
||||
},
|
||||
this.#requestOptions
|
||||
);
|
||||
return res.data.project;
|
||||
} catch (err) {
|
||||
throw newInfisicalError(err);
|
||||
}
|
||||
};
|
||||
}
|
||||
15
src/index.ts
15
src/index.ts
@@ -6,6 +6,9 @@ import { RawAxiosRequestConfig } from "axios";
|
||||
import DynamicSecretsClient from "./custom/dynamic-secrets";
|
||||
|
||||
import * as ApiClient from "./infisicalapi_client";
|
||||
import EnvironmentsClient from "./custom/environments";
|
||||
import ProjectsClient from "./custom/projects";
|
||||
import FoldersClient from "./custom/folders";
|
||||
|
||||
const buildRestClient = (apiClient: InfisicalApi, requestOptions?: RawAxiosRequestConfig) => {
|
||||
return {
|
||||
@@ -26,6 +29,9 @@ class InfisicalSDK {
|
||||
#requestOptions: RawAxiosRequestConfig | undefined;
|
||||
#secretsClient: SecretsClient;
|
||||
#dynamicSecretsClient: DynamicSecretsClient;
|
||||
#environmentsClient: EnvironmentsClient;
|
||||
#projectsClient: ProjectsClient;
|
||||
#foldersClient: FoldersClient;
|
||||
#authClient: AuthClient;
|
||||
#basePath: string;
|
||||
|
||||
@@ -41,6 +47,9 @@ class InfisicalSDK {
|
||||
this.#authClient = new AuthClient(this.authenticate.bind(this), this.#apiInstance);
|
||||
this.#dynamicSecretsClient = new DynamicSecretsClient(this.#apiInstance, this.#requestOptions);
|
||||
this.#secretsClient = new SecretsClient(this.#apiInstance, this.#requestOptions);
|
||||
this.#environmentsClient = new EnvironmentsClient(this.#apiInstance, this.#requestOptions);
|
||||
this.#projectsClient = new ProjectsClient(this.#apiInstance, this.#requestOptions);
|
||||
this.#foldersClient = new FoldersClient(this.#apiInstance, this.#requestOptions);
|
||||
this.rest = () => buildRestClient(this.#apiInstance, this.#requestOptions);
|
||||
}
|
||||
|
||||
@@ -62,11 +71,17 @@ class InfisicalSDK {
|
||||
this.#secretsClient = new SecretsClient(this.#apiInstance, this.#requestOptions);
|
||||
this.#dynamicSecretsClient = new DynamicSecretsClient(this.#apiInstance, this.#requestOptions);
|
||||
this.#authClient = new AuthClient(this.authenticate.bind(this), this.#apiInstance, accessToken);
|
||||
this.#environmentsClient = new EnvironmentsClient(this.#apiInstance, this.#requestOptions);
|
||||
this.#projectsClient = new ProjectsClient(this.#apiInstance, this.#requestOptions);
|
||||
this.#foldersClient = new FoldersClient(this.#apiInstance, this.#requestOptions);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
secrets = () => this.#secretsClient;
|
||||
environments = () => this.#environmentsClient;
|
||||
projects = () => this.#projectsClient;
|
||||
folders = () => this.#foldersClient;
|
||||
dynamicSecrets = () => this.#dynamicSecretsClient;
|
||||
auth = () => this.#authClient;
|
||||
rest = () => buildRestClient(this.#apiInstance, this.#requestOptions);
|
||||
|
||||
Reference in New Issue
Block a user