From c54e519bb54509e7c539290800528838f5619b35 Mon Sep 17 00:00:00 2001
From: Chihiro Adachi <8196725+chihiro-adachi@users.noreply.github.com>
Date: Thu, 15 Aug 2024 16:16:00 +0900
Subject: [PATCH] feat(rest-api-client): add method of plugin.installPlugin
---
packages/rest-api-client/docs/plugin.md | 22 +++++++++++++++++++
.../src/client/PluginClient.ts | 9 ++++++++
.../src/client/__tests__/PluginClient.test.ts | 18 +++++++++++++++
.../src/client/types/plugin/index.ts | 9 ++++++++
4 files changed, 58 insertions(+)
diff --git a/packages/rest-api-client/docs/plugin.md b/packages/rest-api-client/docs/plugin.md
index 69c58b624e..ea49e2552e 100644
--- a/packages/rest-api-client/docs/plugin.md
+++ b/packages/rest-api-client/docs/plugin.md
@@ -4,6 +4,7 @@
- [getRequiredPlugins](#getRequiredPlugins)
- [getApps](#getApps)
- [updatePlugin](#updatePlugin)
+- [installPlugin](#installPlugin)
## Overview
@@ -119,3 +120,24 @@ Updates an imported plug-in in the Kintone environment.
#### Reference
- https://kintone.dev/en/docs/kintone/rest-api/plugins/update-plugin/
+
+### installPlugin
+
+Install an imported plug-in in the Kintone environment.
+
+#### Parameters
+
+| Name | Type | Required | Description |
+| ------- | :----: | :------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| fileKey | String | Yes | The fileKey representing an uploaded file.
Use the following API to upload the file and retrieve the fileKey: [Upload File](https://kintone.dev/en/docs/kintone/rest-api/files/upload-file/) |
+
+#### Returns
+
+| Name | Type | Description |
+| ------- | :----: | ---------------------------------- |
+| id | String | The installed plug-in ID. |
+| version | String | The version number of the plug-in. |
+
+#### Reference
+
+- https://kintone.dev/en/docs/kintone/rest-api/plugins/install-plugin/
diff --git a/packages/rest-api-client/src/client/PluginClient.ts b/packages/rest-api-client/src/client/PluginClient.ts
index 2c6f580f89..e493f6f77a 100644
--- a/packages/rest-api-client/src/client/PluginClient.ts
+++ b/packages/rest-api-client/src/client/PluginClient.ts
@@ -8,6 +8,8 @@ import type {
GetRequiredPluginsForResponse,
UpdatePluginForRequest,
UpdatePluginForResponse,
+ InstallPluginForRequest,
+ InstallPluginForResponse,
} from "./types/plugin";
export class PluginClient extends BaseClient {
@@ -36,4 +38,11 @@ export class PluginClient extends BaseClient {
const path = this.buildPath({ endpointName: "plugin" });
return this.client.put(path, params);
}
+
+ public installPlugin(
+ params: InstallPluginForRequest,
+ ): Promise {
+ const path = this.buildPath({ endpointName: "plugin" });
+ return this.client.post(path, params);
+ }
}
diff --git a/packages/rest-api-client/src/client/__tests__/PluginClient.test.ts b/packages/rest-api-client/src/client/__tests__/PluginClient.test.ts
index 665c8712e6..07955408d4 100644
--- a/packages/rest-api-client/src/client/__tests__/PluginClient.test.ts
+++ b/packages/rest-api-client/src/client/__tests__/PluginClient.test.ts
@@ -96,4 +96,22 @@ describe("PluginClient", () => {
expect(mockClient.getLogs()[0].params).toEqual(params);
});
});
+
+ describe("installPlugin", () => {
+ const params = {
+ fileKey: "fileKey",
+ };
+ beforeEach(async () => {
+ await pluginClient.installPlugin(params);
+ });
+ it("should pass the path to the http client", () => {
+ expect(mockClient.getLogs()[0].path).toBe("/k/v1/plugin.json");
+ });
+ it("should send a POST request", () => {
+ expect(mockClient.getLogs()[0].method).toBe("post");
+ });
+ it("should pass the param to the http client", () => {
+ expect(mockClient.getLogs()[0].params).toEqual(params);
+ });
+ });
});
diff --git a/packages/rest-api-client/src/client/types/plugin/index.ts b/packages/rest-api-client/src/client/types/plugin/index.ts
index 5cd3079e4d..387b46303b 100644
--- a/packages/rest-api-client/src/client/types/plugin/index.ts
+++ b/packages/rest-api-client/src/client/types/plugin/index.ts
@@ -46,3 +46,12 @@ export type UpdatePluginForResponse = {
id: PluginID;
version: string;
};
+
+export type InstallPluginForRequest = {
+ fileKey: string;
+};
+
+export type InstallPluginForResponse = {
+ id: PluginID;
+ version: string;
+};