Skip to content

Commit 52d8a54

Browse files
feat(misskey-js): POST admin/roles/createの型を具象化 (misskey-dev#14167)
* feat(misskey-js): `POST admin/roles/create`の型を具象化 * fix * docs: CHANGELOG.md * test(misskey-js): admin/roles/createの型が合うことを表明 * test(misskey-js): single quote * test(misskey-js): 無を読もうとして爆発するのを修正 * test(misskey-js): fix comment
1 parent 02e0a86 commit 52d8a54

File tree

5 files changed

+76
-3
lines changed

5 files changed

+76
-3
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
### Misskey.js
3939
- Feat: `/drive/files/create` のリクエストに対応(`multipart/form-data`に対応)
40+
- Feat: `/admin/role/create` のロールポリシーの型を修正
4041

4142
## 2024.5.0
4243

packages/misskey-js/etc/misskey-js.api.md

+17-1
Original file line numberDiff line numberDiff line change
@@ -1160,6 +1160,12 @@ export type Endpoints = Overwrite<Endpoints_2, {
11601160
req: SigninRequest;
11611161
res: SigninResponse;
11621162
};
1163+
'admin/roles/create': {
1164+
req: Overwrite<AdminRolesCreateRequest, {
1165+
policies: PartialRolePolicyOverride;
1166+
}>;
1167+
res: AdminRolesCreateResponse;
1168+
};
11631169
}>;
11641170

11651171
// @public (undocumented)
@@ -1185,6 +1191,7 @@ declare namespace entities {
11851191
SignupPendingResponse,
11861192
SigninRequest,
11871193
SigninResponse,
1194+
PartialRolePolicyOverride,
11881195
EmptyRequest,
11891196
EmptyResponse,
11901197
AdminMetaResponse,
@@ -2725,6 +2732,15 @@ type PagesUpdateRequest = operations['pages___update']['requestBody']['content']
27252732
// @public (undocumented)
27262733
function parse(acct: string): Acct;
27272734

2735+
// Warning: (ae-forgotten-export) The symbol "Values" needs to be exported by the entry point index.d.ts
2736+
//
2737+
// @public (undocumented)
2738+
type PartialRolePolicyOverride = Partial<{
2739+
[k in keyof RolePolicies]: Omit<Values<Role['policies']>, 'value'> & {
2740+
value: RolePolicies[k];
2741+
};
2742+
}>;
2743+
27282744
// @public (undocumented)
27292745
export const permissions: readonly ["read:account", "write:account", "read:blocks", "write:blocks", "read:drive", "write:drive", "read:favorites", "write:favorites", "read:following", "write:following", "read:messaging", "write:messaging", "read:mutes", "write:mutes", "write:notes", "read:notifications", "write:notifications", "read:reactions", "write:reactions", "write:votes", "read:pages", "write:pages", "write:page-likes", "read:page-likes", "read:user-groups", "write:user-groups", "read:channels", "write:channels", "read:gallery", "write:gallery", "read:gallery-likes", "write:gallery-likes", "read:flash", "write:flash", "read:flash-likes", "write:flash-likes", "read:admin:abuse-user-reports", "write:admin:delete-account", "write:admin:delete-all-files-of-a-user", "read:admin:index-stats", "read:admin:table-stats", "read:admin:user-ips", "read:admin:meta", "write:admin:reset-password", "write:admin:resolve-abuse-user-report", "write:admin:send-email", "read:admin:server-info", "read:admin:show-moderation-log", "read:admin:show-user", "write:admin:suspend-user", "write:admin:unset-user-avatar", "write:admin:unset-user-banner", "write:admin:unsuspend-user", "write:admin:meta", "write:admin:user-note", "write:admin:roles", "read:admin:roles", "write:admin:relays", "read:admin:relays", "write:admin:invite-codes", "read:admin:invite-codes", "write:admin:announcements", "read:admin:announcements", "write:admin:avatar-decorations", "read:admin:avatar-decorations", "write:admin:federation", "write:admin:account", "read:admin:account", "write:admin:emoji", "read:admin:emoji", "write:admin:queue", "read:admin:queue", "write:admin:promo", "write:admin:drive", "read:admin:drive", "write:admin:ad", "read:admin:ad", "write:invite-codes", "read:invite-codes", "write:clip-favorite", "read:clip-favorite", "read:federation", "write:report-abuse"];
27302746

@@ -3213,7 +3229,7 @@ type UsersUpdateMemoRequest = operations['users___update-memo']['requestBody']['
32133229

32143230
// Warnings were encountered during analysis:
32153231
//
3216-
// src/entities.ts:25:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts
3232+
// src/entities.ts:34:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts
32173233

32183234
// (No @packageDocumentation comment for this package)
32193235

packages/misskey-js/src/api.types.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { Endpoints as Gen } from './autogen/endpoint.js';
22
import { UserDetailed } from './autogen/models.js';
3-
import { UsersShowRequest } from './autogen/entities.js';
3+
import { AdminRolesCreateRequest, AdminRolesCreateResponse, UsersShowRequest } from './autogen/entities.js';
44
import {
5+
PartialRolePolicyOverride,
56
SigninRequest,
67
SigninResponse,
78
SignupPendingRequest,
@@ -79,5 +80,9 @@ export type Endpoints = Overwrite<
7980
req: SigninRequest;
8081
res: SigninResponse;
8182
},
83+
'admin/roles/create': {
84+
req: Overwrite<AdminRolesCreateRequest, { policies: PartialRolePolicyOverride }>;
85+
res: AdminRolesCreateResponse;
86+
}
8287
}
8388
>

packages/misskey-js/src/entities.ts

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
import { ModerationLogPayloads } from './consts.js';
2-
import { Announcement, EmojiDetailed, MeDetailed, Page, User, UserDetailedNotMe } from './autogen/models.js';
2+
import {
3+
Announcement,
4+
EmojiDetailed,
5+
MeDetailed,
6+
Page,
7+
Role,
8+
RolePolicies,
9+
User,
10+
UserDetailedNotMe
11+
} from './autogen/models.js';
312

413
export * from './autogen/entities.js';
514
export * from './autogen/models.js';
@@ -236,3 +245,7 @@ export type SigninResponse = {
236245
id: User['id'],
237246
i: string,
238247
};
248+
249+
type Values<T extends Record<PropertyKey, unknown>> = T[keyof T];
250+
251+
export type PartialRolePolicyOverride = Partial<{[k in keyof RolePolicies]: Omit<Values<Role['policies']>, 'value'> & { value: RolePolicies[k] }}>;

packages/misskey-js/test/api.ts

+38
Original file line numberDiff line numberDiff line change
@@ -259,4 +259,42 @@ describe('API', () => {
259259
expect(isAPIError(e)).toEqual(false);
260260
}
261261
});
262+
263+
test('admin/roles/create の型が合う', async() => {
264+
fetchMock.resetMocks();
265+
fetchMock.mockResponse(async () => {
266+
return {
267+
// 本来返すべき値は`Role`型だが、テストなのでお茶を濁す
268+
status: 200,
269+
body: '{}'
270+
};
271+
});
272+
273+
const cli = new APIClient({
274+
origin: 'https://misskey.test',
275+
credential: 'TOKEN',
276+
});
277+
await cli.request('admin/roles/create', {
278+
name: 'aaa',
279+
asBadge: false,
280+
canEditMembersByModerator: false,
281+
color: '#123456',
282+
condFormula: {},
283+
description: '',
284+
displayOrder: 0,
285+
iconUrl: '',
286+
isAdministrator: false,
287+
isExplorable: false,
288+
isModerator: false,
289+
isPublic: false,
290+
policies: {
291+
ltlAvailable: {
292+
value: true,
293+
priority: 0,
294+
useDefault: false,
295+
},
296+
},
297+
target: 'manual',
298+
});
299+
})
262300
});

0 commit comments

Comments
 (0)