diff --git a/locales/en-US.yml b/locales/en-US.yml
index 230717f372..3f0b88c613 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -51,6 +51,7 @@ copyContent: "Copy contents"
copyLink: "Copy link"
copyRemoteLink: "Copy remote link"
copyLinkRenote: "Copy renote link"
+clone: "Clone"
delete: "Delete"
deleteAndEdit: "Delete and edit"
deleteAndEditConfirm: "Are you sure you want to redraft this note? This means you will lose all reactions, renotes, and replies to it."
diff --git a/packages/frontend/src/pages/admin/roles.role.vue b/packages/frontend/src/pages/admin/roles.role.vue
index 04e6405f9b..2cc2500efb 100644
--- a/packages/frontend/src/pages/admin/roles.role.vue
+++ b/packages/frontend/src/pages/admin/roles.role.vue
@@ -9,6 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.edit }}
+ {{ i18n.ts.clone }}
{{ i18n.ts.delete }}
@@ -97,6 +98,13 @@ function edit() {
router.push('/admin/roles/' + role.id + '/edit');
}
+async function clone() {
+ const newRole = await misskeyApi('admin/roles/clone', {
+ roleId: role.id,
+ });
+ router.push('/admin/roles/' + newRole.id + '/edit');
+}
+
async function del() {
const { canceled } = await os.confirm({
type: 'warning',
diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md
index 44700add31..f9a68b1cac 100644
--- a/packages/misskey-js/etc/misskey-js.api.md
+++ b/packages/misskey-js/etc/misskey-js.api.md
@@ -326,6 +326,12 @@ type AdminResolveAbuseUserReportRequest = operations['admin___resolve-abuse-user
// @public (undocumented)
type AdminRolesAssignRequest = operations['admin___roles___assign']['requestBody']['content']['application/json'];
+// @public (undocumented)
+type AdminRolesCloneRequest = operations['admin___roles___clone']['requestBody']['content']['application/json'];
+
+// @public (undocumented)
+type AdminRolesCloneResponse = operations['admin___roles___clone']['responses']['200']['content']['application/json'];
+
// @public (undocumented)
type AdminRolesCreateRequest = operations['admin___roles___create']['requestBody']['content']['application/json'];
@@ -1585,6 +1591,8 @@ declare namespace entities {
AdminResetPasswordResponse,
AdminResolveAbuseUserReportRequest,
AdminRolesAssignRequest,
+ AdminRolesCloneRequest,
+ AdminRolesCloneResponse,
AdminRolesCreateRequest,
AdminRolesCreateResponse,
AdminRolesDeleteRequest,
diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts
index 8827fe9c39..be7479b009 100644
--- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts
+++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts
@@ -856,6 +856,17 @@ declare module '../api.js' {
credential?: string | null,
): Promise>;
+ /**
+ * No description provided.
+ *
+ * **Credential required**: *Yes* / **Permission**: *write:admin:roles*
+ */
+ request(
+ endpoint: E,
+ params: P,
+ credential?: string | null,
+ ): Promise>;
+
/**
* No description provided.
*
diff --git a/packages/misskey-js/src/autogen/endpoint.ts b/packages/misskey-js/src/autogen/endpoint.ts
index b424927316..4712c16265 100644
--- a/packages/misskey-js/src/autogen/endpoint.ts
+++ b/packages/misskey-js/src/autogen/endpoint.ts
@@ -98,6 +98,8 @@ import type {
AdminResetPasswordResponse,
AdminResolveAbuseUserReportRequest,
AdminRolesAssignRequest,
+ AdminRolesCloneRequest,
+ AdminRolesCloneResponse,
AdminRolesCreateRequest,
AdminRolesCreateResponse,
AdminRolesDeleteRequest,
@@ -738,6 +740,7 @@ export type Endpoints = {
'admin/reset-password': { req: AdminResetPasswordRequest; res: AdminResetPasswordResponse };
'admin/resolve-abuse-user-report': { req: AdminResolveAbuseUserReportRequest; res: EmptyResponse };
'admin/roles/assign': { req: AdminRolesAssignRequest; res: EmptyResponse };
+ 'admin/roles/clone': { req: AdminRolesCloneRequest; res: AdminRolesCloneResponse };
'admin/roles/create': { req: AdminRolesCreateRequest; res: AdminRolesCreateResponse };
'admin/roles/delete': { req: AdminRolesDeleteRequest; res: EmptyResponse };
'admin/roles/list': { req: EmptyRequest; res: AdminRolesListResponse };
diff --git a/packages/misskey-js/src/autogen/entities.ts b/packages/misskey-js/src/autogen/entities.ts
index 39359e3cfa..e1ba4e9704 100644
--- a/packages/misskey-js/src/autogen/entities.ts
+++ b/packages/misskey-js/src/autogen/entities.ts
@@ -101,6 +101,8 @@ export type AdminResetPasswordRequest = operations['admin___reset-password']['re
export type AdminResetPasswordResponse = operations['admin___reset-password']['responses']['200']['content']['application/json'];
export type AdminResolveAbuseUserReportRequest = operations['admin___resolve-abuse-user-report']['requestBody']['content']['application/json'];
export type AdminRolesAssignRequest = operations['admin___roles___assign']['requestBody']['content']['application/json'];
+export type AdminRolesCloneRequest = operations['admin___roles___clone']['requestBody']['content']['application/json'];
+export type AdminRolesCloneResponse = operations['admin___roles___clone']['responses']['200']['content']['application/json'];
export type AdminRolesCreateRequest = operations['admin___roles___create']['requestBody']['content']['application/json'];
export type AdminRolesCreateResponse = operations['admin___roles___create']['responses']['200']['content']['application/json'];
export type AdminRolesDeleteRequest = operations['admin___roles___delete']['requestBody']['content']['application/json'];
diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts
index 8debdec9c1..97356e0c6e 100644
--- a/packages/misskey-js/src/autogen/types.ts
+++ b/packages/misskey-js/src/autogen/types.ts
@@ -711,6 +711,15 @@ export type paths = {
*/
post: operations['admin___roles___assign'];
};
+ '/admin/roles/clone': {
+ /**
+ * admin/roles/clone
+ * @description No description provided.
+ *
+ * **Credential required**: *Yes* / **Permission**: *write:admin:roles*
+ */
+ post: operations['admin___roles___clone'];
+ };
'/admin/roles/create': {
/**
* admin/roles/create
@@ -10385,6 +10394,60 @@ export type operations = {
};
};
};
+ /**
+ * admin/roles/clone
+ * @description No description provided.
+ *
+ * **Credential required**: *Yes* / **Permission**: *write:admin:roles*
+ */
+ admin___roles___clone: {
+ requestBody: {
+ content: {
+ 'application/json': {
+ /** Format: misskey:id */
+ roleId: string;
+ };
+ };
+ };
+ responses: {
+ /** @description OK (with results) */
+ 200: {
+ content: {
+ 'application/json': components['schemas']['Role'];
+ };
+ };
+ /** @description Client error */
+ 400: {
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Authentication error */
+ 401: {
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Forbidden error */
+ 403: {
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description I'm Ai */
+ 418: {
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ /** @description Internal server error */
+ 500: {
+ content: {
+ 'application/json': components['schemas']['Error'];
+ };
+ };
+ };
+ };
/**
* admin/roles/create
* @description No description provided.