diff --git a/src/client.ts b/src/client.ts index dc31d14..379325f 100644 --- a/src/client.ts +++ b/src/client.ts @@ -24,7 +24,10 @@ function loadEnvFile(): void { const eqIndex = trimmed.indexOf("="); if (eqIndex === -1) continue; const key = trimmed.slice(0, eqIndex).trim(); - const value = trimmed.slice(eqIndex + 1).trim().replace(/^["']|["']$/g, ""); + const value = trimmed + .slice(eqIndex + 1) + .trim() + .replace(/^["']|["']$/g, ""); if (!process.env[key]) { process.env[key] = value; } @@ -86,11 +89,8 @@ export async function apiPost( data?: Record, ) { const client = createClient(); - const response = await client.post( - `/trpc/${endpoint}`, - data ? { json: data } : undefined, - ); - return response.data?.result?.data?.json ?? response.data; + const response = await client.post(`/${endpoint}`, data); + return response.data; } export async function apiGet( @@ -98,9 +98,6 @@ export async function apiGet( params?: Record, ) { const client = createClient(); - const query = params - ? `?input=${encodeURIComponent(JSON.stringify(params))}` - : ""; - const response = await client.get(`/trpc/${endpoint}${query}`); - return response.data?.result?.data?.json ?? response.data; + const response = await client.get(`/${endpoint}`, { params }); + return response.data; } diff --git a/tests/client.test.ts b/tests/client.test.ts index 849213f..5f64004 100644 --- a/tests/client.test.ts +++ b/tests/client.test.ts @@ -1,5 +1,17 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +const axiosMocks = vi.hoisted(() => ({ + create: vi.fn(), + get: vi.fn(), + post: vi.fn(), +})); + +vi.mock("axios", () => ({ + default: { + create: axiosMocks.create, + }, +})); + describe("readAuthConfig", () => { const originalEnv = { ...process.env }; @@ -54,3 +66,50 @@ describe("saveAuthConfig", () => { expect(typeof saveAuthConfig).toBe("function"); }); }); + +describe("REST API client", () => { + beforeEach(() => { + process.env.DOKPLOY_URL = "https://test.dokploy.com"; + process.env.DOKPLOY_API_KEY = "test-key"; + axiosMocks.create.mockReturnValue({ + get: axiosMocks.get, + post: axiosMocks.post, + }); + }); + + afterEach(() => { + delete process.env.DOKPLOY_URL; + delete process.env.DOKPLOY_API_KEY; + vi.clearAllMocks(); + }); + + it("sends GET parameters to the REST endpoint", async () => { + const responseData = { projectId: "project-1" }; + axiosMocks.get.mockResolvedValue({ data: responseData }); + + const { apiGet } = await import("../src/client.js"); + const result = await apiGet("project.one", { + projectId: "project with spaces", + }); + + expect(axiosMocks.get).toHaveBeenCalledWith("/project.one", { + params: { projectId: "project with spaces" }, + }); + expect(result).toEqual(responseData); + }); + + it("sends POST data directly to the REST endpoint", async () => { + const requestData = { name: "My Project" }; + const responseData = { projectId: "project-1", ...requestData }; + axiosMocks.post.mockResolvedValue({ data: responseData }); + + const { apiPost } = await import("../src/client.js"); + const result = await apiPost("project.create", requestData); + + expect(axiosMocks.post).toHaveBeenCalledWith( + "/project.create", + requestData, + ); + expect(result).toEqual(responseData); + }); +});