From 11d68c45520dce27be14c0358e49f033c05a1910 Mon Sep 17 00:00:00 2001 From: lborv Date: Mon, 27 Oct 2025 20:07:07 +0200 Subject: [PATCH] feat: implement API token management and project settings methods --- src/index.ts | 109 +++++++++++++++++++++++++++++++++++++--- src/types/token.type.ts | 5 ++ 2 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 src/types/token.type.ts diff --git a/src/index.ts b/src/index.ts index 540e5eb..1753890 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,104 @@ -export class FewLineSDK { - constructor(private url: string, private token: string) {} +import axios from "axios"; +import { GenerateTokenResponse } from "./types/token.type"; - public getUrl(): string { - return this.url; - } -} \ No newline at end of file +export class FewLineSDK { + constructor(private url: string, private token: string) {} + + public getUrl(): string { + return this.url; + } + + private async createRequestWithAuthHeaders( + url: string, + method: string, + data?: any, + headers: any = {} + ): Promise { + return await axios.request({ + url, + method, + data, + headers: { + "x-api-token": this.token, + ...headers, + }, + }); + } + + /** + * API Tokens part + */ + async generateToken(projectId: string): Promise { + const response = await this.createRequestWithAuthHeaders( + `${this.url}/api/token/generate`, + "POST", + { + id: projectId, + } + ); + + return response.data; + } + + async revokeToken(token: string): Promise { + const response = await this.createRequestWithAuthHeaders( + `${this.url}/api/token/revoke/${token}`, + "DELETE" + ); + + return response.data; + } + + /** + * Projects management part + */ + async createProject(name: string, withDb: boolean = true): Promise { + const response = await this.createRequestWithAuthHeaders( + `${this.url}/project/${withDb ? "create" : "create-without-db"}`, + "PUT", + { + name, + } + ); + + return response.data; + } + + async createSettings(setting: { key: string; value: string }): Promise { + const response = await this.createRequestWithAuthHeaders( + `${this.url}/project/settings/create`, + "PUT", + setting + ); + + return response.data; + } + + async deleteSetting(key: string): Promise { + const response = await this.createRequestWithAuthHeaders( + `${this.url}/project/settings/delete`, + "DELETE", + { key } + ); + + return response.data; + } + + async getAllSettings(): Promise { + const response = await this.createRequestWithAuthHeaders( + `${this.url}/project/settings`, + "GET" + ); + + return response.data; + } + + async getAllApiTokens(): Promise { + const response = await this.createRequestWithAuthHeaders( + `${this.url}/project/api-tokens`, + "GET" + ); + + return response.data; + } +} diff --git a/src/types/token.type.ts b/src/types/token.type.ts new file mode 100644 index 0000000..8e932db --- /dev/null +++ b/src/types/token.type.ts @@ -0,0 +1,5 @@ +export type GenerateTokenResponse = { + token: string; + isActive: boolean; + isAdmin: boolean; +};