enhance: api.jsonのレスポンスの内容を実際の内容に合わせる (#12723)
* Create packedAdSchema * admin/emoji/add * admin/get-user-ips * admin/roles/users * admin/get-index-stats * admin/accounts/find-by-email * fix type of admin/ad/list * federation/stats * endpoints * get-online-users-count * i/2fa/register-key * i/2fa/key-done * i/2fa/register * i/apps * i/authorized-apps * i/registry/get-all * i/registry/get * i/registry/get-detail * i/registry/key-with-type * i/registry/scopes-with-domain * i/update-email * i/move * i/webhooks/create * fix miss type * i/webhooks/show * i/webhooks/list * flash/create * roles/users * server-info * test * users/lists/get-memberships * users/achievements * fetch-rss * fetch-external-resources
This commit is contained in:
parent
07d4632cd7
commit
79ca93cefb
35 changed files with 822 additions and 7 deletions
|
@ -38,6 +38,7 @@ import { packedFlashSchema } from '@/models/json-schema/flash.js';
|
||||||
import { packedAnnouncementSchema } from '@/models/json-schema/announcement.js';
|
import { packedAnnouncementSchema } from '@/models/json-schema/announcement.js';
|
||||||
import { packedSigninSchema } from '@/models/json-schema/signin.js';
|
import { packedSigninSchema } from '@/models/json-schema/signin.js';
|
||||||
import { packedRoleLiteSchema, packedRoleSchema } from '@/models/json-schema/role.js';
|
import { packedRoleLiteSchema, packedRoleSchema } from '@/models/json-schema/role.js';
|
||||||
|
import { packedAdSchema } from '@/models/json-schema/ad.js';
|
||||||
|
|
||||||
export const refs = {
|
export const refs = {
|
||||||
UserLite: packedUserLiteSchema,
|
UserLite: packedUserLiteSchema,
|
||||||
|
@ -49,6 +50,7 @@ export const refs = {
|
||||||
User: packedUserSchema,
|
User: packedUserSchema,
|
||||||
|
|
||||||
UserList: packedUserListSchema,
|
UserList: packedUserListSchema,
|
||||||
|
Ad: packedAdSchema,
|
||||||
Announcement: packedAnnouncementSchema,
|
Announcement: packedAnnouncementSchema,
|
||||||
App: packedAppSchema,
|
App: packedAppSchema,
|
||||||
Note: packedNoteSchema,
|
Note: packedNoteSchema,
|
||||||
|
|
64
packages/backend/src/models/json-schema/ad.ts
Normal file
64
packages/backend/src/models/json-schema/ad.ts
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: syuilo and other misskey contributors
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const packedAdSchema = {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
format: 'id',
|
||||||
|
example: 'xxxxxxxxxx',
|
||||||
|
},
|
||||||
|
expiresAt: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
format: 'date-time',
|
||||||
|
},
|
||||||
|
startsAt: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
format: 'date-time',
|
||||||
|
},
|
||||||
|
place: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
priority: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
ratio: {
|
||||||
|
type: 'number',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
url: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
imageUrl: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
memo: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
dayOfWeek: {
|
||||||
|
type: 'integer',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as const;
|
|
@ -25,6 +25,11 @@ export const meta = {
|
||||||
id: 'cb865949-8af5-4062-a88c-ef55e8786d1d',
|
id: 'cb865949-8af5-4062-a88c-ef55e8786d1d',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
optional: false, nullable: false,
|
||||||
|
ref: 'User',
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -17,6 +17,12 @@ export const meta = {
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
ref: 'Ad',
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
@ -63,7 +69,18 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
ad: ad,
|
ad: ad,
|
||||||
});
|
});
|
||||||
|
|
||||||
return ad;
|
return {
|
||||||
|
id: ad.id,
|
||||||
|
expiresAt: ad.expiresAt.toISOString(),
|
||||||
|
startsAt: ad.startsAt.toISOString(),
|
||||||
|
dayOfWeek: ad.dayOfWeek,
|
||||||
|
url: ad.url,
|
||||||
|
imageUrl: ad.imageUrl,
|
||||||
|
priority: ad.priority,
|
||||||
|
ratio: ad.ratio,
|
||||||
|
place: ad.place,
|
||||||
|
memo: ad.memo,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,17 @@ export const meta = {
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
ref: 'Ad',
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
@ -46,7 +57,18 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
}
|
}
|
||||||
const ads = await query.limit(ps.limit).getMany();
|
const ads = await query.limit(ps.limit).getMany();
|
||||||
|
|
||||||
return ads;
|
return ads.map(ad => ({
|
||||||
|
id: ad.id,
|
||||||
|
expiresAt: ad.expiresAt.toISOString(),
|
||||||
|
startsAt: ad.startsAt.toISOString(),
|
||||||
|
dayOfWeek: ad.dayOfWeek,
|
||||||
|
url: ad.url,
|
||||||
|
imageUrl: ad.imageUrl,
|
||||||
|
memo: ad.memo,
|
||||||
|
place: ad.place,
|
||||||
|
priority: ad.priority,
|
||||||
|
ratio: ad.ratio,
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,8 @@ export const meta = {
|
||||||
id: 'f7a3462c-4e6e-4069-8421-b9bd4f4c3975',
|
id: 'f7a3462c-4e6e-4069-8421-b9bd4f4c3975',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
ref: 'EmojiDetailed',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -15,6 +15,16 @@ export const meta = {
|
||||||
kind: 'read:admin',
|
kind: 'read:admin',
|
||||||
|
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
tablename: { type: 'string' },
|
||||||
|
indexname: { type: 'string' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -16,6 +16,25 @@ export const meta = {
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
properties: {
|
||||||
|
ip: { type: 'string' },
|
||||||
|
createdAt: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
format: 'date-time',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -28,6 +28,20 @@ export const meta = {
|
||||||
id: '224eff5e-2488-4b18-b3e7-f50d94421648',
|
id: '224eff5e-2488-4b18-b3e7-f50d94421648',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: { type: 'string', format: 'misskey:id' },
|
||||||
|
createdAt: { type: 'string', format: 'date-time' },
|
||||||
|
user: { ref: 'UserDetailed' },
|
||||||
|
expiresAt: { type: 'string', format: 'date-time', nullable: true },
|
||||||
|
},
|
||||||
|
required: ['id', 'createdAt', 'user'],
|
||||||
|
},
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
@ -80,7 +94,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
id: assign.id,
|
id: assign.id,
|
||||||
createdAt: this.idService.parse(assign.id).date.toISOString(),
|
createdAt: this.idService.parse(assign.id).date.toISOString(),
|
||||||
user: await this.userEntityService.pack(assign.user!, me, { detail: true }),
|
user: await this.userEntityService.pack(assign.user!, me, { detail: true }),
|
||||||
expiresAt: assign.expiresAt,
|
expiresAt: assign.expiresAt?.toISOString() ?? null,
|
||||||
})));
|
})));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,23 @@ export const meta = {
|
||||||
requireCredential: false,
|
requireCredential: false,
|
||||||
|
|
||||||
tags: ['meta'],
|
tags: ['meta'],
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
nullable: true,
|
||||||
|
properties: {
|
||||||
|
params: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
name: { type: 'string' },
|
||||||
|
type: { type: 'string' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -18,6 +18,92 @@ export const meta = {
|
||||||
|
|
||||||
allowGet: true,
|
allowGet: true,
|
||||||
cacheSec: 60 * 60,
|
cacheSec: 60 * 60,
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
properties: {
|
||||||
|
topSubInstances: {
|
||||||
|
type: 'array',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
items: {
|
||||||
|
properties: {
|
||||||
|
id: { type: 'string' },
|
||||||
|
firstRetrievedAt: { type: 'string' },
|
||||||
|
host: { type: 'string' },
|
||||||
|
usersCount: { type: 'number' },
|
||||||
|
notesCount: { type: 'number' },
|
||||||
|
followingCount: { type: 'number' },
|
||||||
|
followersCount: { type: 'number' },
|
||||||
|
isNotResponding: { type: 'boolean' },
|
||||||
|
isSuspended: { type: 'boolean' },
|
||||||
|
isBlocked: { type: 'boolean' },
|
||||||
|
softwareName: { type: 'string' },
|
||||||
|
softwareVersion: { type: 'string' },
|
||||||
|
openRegistrations: { type: 'boolean' },
|
||||||
|
name: { type: 'string' },
|
||||||
|
description: { type: 'string' },
|
||||||
|
maintainerName: { type: 'string' },
|
||||||
|
maintainerEmail: { type: 'string' },
|
||||||
|
isSilenced: { type: 'boolean' },
|
||||||
|
iconUrl: { type: 'string' },
|
||||||
|
faviconUrl: { type: 'string' },
|
||||||
|
themeColor: { type: 'string' },
|
||||||
|
infoUpdatedAt: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
latestRequestReceivedAt: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
otherFollowersCount: { type: 'number' },
|
||||||
|
topPubInstances: {
|
||||||
|
type: 'array',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
items: {
|
||||||
|
properties: {
|
||||||
|
id: { type: 'string' },
|
||||||
|
firstRetrievedAt: { type: 'string' },
|
||||||
|
host: { type: 'string' },
|
||||||
|
usersCount: { type: 'number' },
|
||||||
|
notesCount: { type: 'number' },
|
||||||
|
followingCount: { type: 'number' },
|
||||||
|
followersCount: { type: 'number' },
|
||||||
|
isNotResponding: { type: 'boolean' },
|
||||||
|
isSuspended: { type: 'boolean' },
|
||||||
|
isBlocked: { type: 'boolean' },
|
||||||
|
softwareName: { type: 'string' },
|
||||||
|
softwareVersion: { type: 'string' },
|
||||||
|
openRegistrations: { type: 'boolean' },
|
||||||
|
name: { type: 'string' },
|
||||||
|
description: { type: 'string' },
|
||||||
|
maintainerName: { type: 'string' },
|
||||||
|
maintainerEmail: { type: 'string' },
|
||||||
|
isSilenced: { type: 'boolean' },
|
||||||
|
iconUrl: { type: 'string' },
|
||||||
|
faviconUrl: { type: 'string' },
|
||||||
|
themeColor: { type: 'string' },
|
||||||
|
infoUpdatedAt: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
latestRequestReceivedAt: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
otherFollowingCount: { type: 'number' },
|
||||||
|
},
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -32,6 +32,18 @@ export const meta = {
|
||||||
id: '693ba8ba-b486-40df-a174-72f8279b56a4',
|
id: '693ba8ba-b486-40df-a174-72f8279b56a4',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
type: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -16,6 +16,18 @@ export const meta = {
|
||||||
requireCredential: false,
|
requireCredential: false,
|
||||||
allowGet: true,
|
allowGet: true,
|
||||||
cacheSec: 60 * 3,
|
cacheSec: 60 * 3,
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
items: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -27,6 +27,12 @@ export const meta = {
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
optional: false, nullable: false,
|
||||||
|
ref: 'Flash',
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -16,6 +16,16 @@ export const meta = {
|
||||||
requireCredential: false,
|
requireCredential: false,
|
||||||
allowGet: true,
|
allowGet: true,
|
||||||
cacheSec: 60 * 1,
|
cacheSec: 60 * 1,
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
optional: false, nullable: false,
|
||||||
|
properties: {
|
||||||
|
count: {
|
||||||
|
type: 'number',
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -32,6 +32,16 @@ export const meta = {
|
||||||
id: '798d6847-b1ed-4f9c-b1f9-163c42655995',
|
id: '798d6847-b1ed-4f9c-b1f9-163c42655995',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
nullable: false,
|
||||||
|
optional: false,
|
||||||
|
properties: {
|
||||||
|
id: { type: 'string' },
|
||||||
|
name: { type: 'string' },
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -36,6 +36,140 @@ export const meta = {
|
||||||
id: 'bf32b864-449b-47b8-974e-f9a5468546f1',
|
id: 'bf32b864-449b-47b8-974e-f9a5468546f1',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
nullable: false,
|
||||||
|
optional: false,
|
||||||
|
properties: {
|
||||||
|
rp: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
user: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
displayName: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
challenge: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
pubKeyCredParams: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
type: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
alg: {
|
||||||
|
type: 'number',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
timeout: {
|
||||||
|
type: 'number',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
excludeCredentials: {
|
||||||
|
type: 'array',
|
||||||
|
nullable: true,
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
transports: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'string',
|
||||||
|
enum: [
|
||||||
|
"ble",
|
||||||
|
"cable",
|
||||||
|
"hybrid",
|
||||||
|
"internal",
|
||||||
|
"nfc",
|
||||||
|
"smart-card",
|
||||||
|
"usb",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
authenticatorSelection: {
|
||||||
|
type: 'object',
|
||||||
|
nullable: true,
|
||||||
|
properties: {
|
||||||
|
authenticatorAttachment: {
|
||||||
|
type: 'string',
|
||||||
|
enum: [
|
||||||
|
"cross-platform",
|
||||||
|
"platform",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
requireResidentKey: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
userVerification: {
|
||||||
|
type: 'string',
|
||||||
|
enum: [
|
||||||
|
"discouraged",
|
||||||
|
"preferred",
|
||||||
|
"required",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
attestation: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: true,
|
||||||
|
enum: [
|
||||||
|
"direct",
|
||||||
|
"enterprise",
|
||||||
|
"indirect",
|
||||||
|
"none",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
extensions: {
|
||||||
|
type: 'object',
|
||||||
|
nullable: true,
|
||||||
|
properties: {
|
||||||
|
appid: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
credProps: {
|
||||||
|
type: 'boolean',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
hmacCreateSecret: {
|
||||||
|
type: 'boolean',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -26,6 +26,19 @@ export const meta = {
|
||||||
id: '78d6c839-20c9-4c66-b90a-fc0542168b48',
|
id: '78d6c839-20c9-4c66-b90a-fc0542168b48',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
nullable: false,
|
||||||
|
optional: false,
|
||||||
|
properties: {
|
||||||
|
qr: { type: 'string' },
|
||||||
|
url: { type: 'string' },
|
||||||
|
secret: { type: 'string' },
|
||||||
|
label: { type: 'string' },
|
||||||
|
issuer: { type: 'string' },
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -13,6 +13,37 @@ export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
|
|
||||||
secure: true,
|
secure: true,
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id',
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
createdAt: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'date-time',
|
||||||
|
},
|
||||||
|
lastUsedAt: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'date-time',
|
||||||
|
},
|
||||||
|
permission: {
|
||||||
|
type: 'array',
|
||||||
|
uniqueItems: true,
|
||||||
|
items: {
|
||||||
|
type: 'string'
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
@ -50,7 +81,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
id: token.id,
|
id: token.id,
|
||||||
name: token.name ?? token.app?.name,
|
name: token.name ?? token.app?.name,
|
||||||
createdAt: this.idService.parse(token.id).date.toISOString(),
|
createdAt: this.idService.parse(token.id).date.toISOString(),
|
||||||
lastUsedAt: token.lastUsedAt,
|
lastUsedAt: token.lastUsedAt?.toISOString(),
|
||||||
permission: token.permission,
|
permission: token.permission,
|
||||||
})));
|
})));
|
||||||
});
|
});
|
||||||
|
|
|
@ -14,6 +14,36 @@ export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
|
|
||||||
secure: true,
|
secure: true,
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id',
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
callbackUrl: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
permission: {
|
||||||
|
type: 'array',
|
||||||
|
uniqueItems: true,
|
||||||
|
items: {
|
||||||
|
type: 'string'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
isAuthorized: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -64,6 +64,10 @@ export const meta = {
|
||||||
id: 'b234a14e-9ebe-4581-8000-074b3c215962',
|
id: 'b234a14e-9ebe-4581-8000-074b3c215962',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -9,6 +9,10 @@ import { RegistryApiService } from '@/core/RegistryApiService.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -18,6 +18,10 @@ export const meta = {
|
||||||
id: '97a1e8e7-c0f7-47d2-957a-92e61256e01a',
|
id: '97a1e8e7-c0f7-47d2-957a-92e61256e01a',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -18,6 +18,10 @@ export const meta = {
|
||||||
id: 'ac3ed68a-62f0-422b-a7bc-d5e09e8f6a6a',
|
id: 'ac3ed68a-62f0-422b-a7bc-d5e09e8f6a6a',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -9,6 +9,10 @@ import { RegistryApiService } from '@/core/RegistryApiService.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -10,6 +10,28 @@ import { RegistryApiService } from '@/core/RegistryApiService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
secure: true,
|
secure: true,
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
scopes: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'string',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
domain: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -40,6 +40,11 @@ export const meta = {
|
||||||
id: 'a2defefb-f220-8849-0af6-17f816099323',
|
id: 'a2defefb-f220-8849-0af6-17f816099323',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
ref: 'UserDetailed',
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -27,6 +27,33 @@ export const meta = {
|
||||||
id: '87a9bb19-111e-4e37-81d3-a3e7426453b0',
|
id: '87a9bb19-111e-4e37-81d3-a3e7426453b0',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id'
|
||||||
|
},
|
||||||
|
userId: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id',
|
||||||
|
},
|
||||||
|
name: { type: 'string' },
|
||||||
|
on: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'string',
|
||||||
|
enum: webhookEventTypes,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
url: { type: 'string' },
|
||||||
|
secret: { type: 'string' },
|
||||||
|
active: { type: 'boolean' },
|
||||||
|
latestSentAt: { type: 'string', format: 'date-time', nullable: true },
|
||||||
|
latestStatus: { type: 'integer', nullable: true },
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
@ -73,7 +100,17 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
|
|
||||||
this.globalEventService.publishInternalEvent('webhookCreated', webhook);
|
this.globalEventService.publishInternalEvent('webhookCreated', webhook);
|
||||||
|
|
||||||
return webhook;
|
return {
|
||||||
|
id: webhook.id,
|
||||||
|
userId: webhook.userId,
|
||||||
|
name: webhook.name,
|
||||||
|
on: webhook.on,
|
||||||
|
url: webhook.url,
|
||||||
|
secret: webhook.secret,
|
||||||
|
active: webhook.active,
|
||||||
|
latestSentAt: webhook.latestSentAt?.toISOString(),
|
||||||
|
latestStatus: webhook.latestStatus,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { Endpoint } from '@/server/api/endpoint-base.js';
|
import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||||
|
import { webhookEventTypes } from '@/models/Webhook.js';
|
||||||
import type { WebhooksRepository } from '@/models/_.js';
|
import type { WebhooksRepository } from '@/models/_.js';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
|
|
||||||
|
@ -14,6 +15,36 @@ export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
|
|
||||||
kind: 'read:account',
|
kind: 'read:account',
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id'
|
||||||
|
},
|
||||||
|
userId: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id',
|
||||||
|
},
|
||||||
|
name: { type: 'string' },
|
||||||
|
on: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'string',
|
||||||
|
enum: webhookEventTypes,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
url: { type: 'string' },
|
||||||
|
secret: { type: 'string' },
|
||||||
|
active: { type: 'boolean' },
|
||||||
|
latestSentAt: { type: 'string', format: 'date-time', nullable: true },
|
||||||
|
latestStatus: { type: 'integer', nullable: true },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
@ -33,7 +64,19 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
userId: me.id,
|
userId: me.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
return webhooks;
|
return webhooks.map(webhook => (
|
||||||
|
{
|
||||||
|
id: webhook.id,
|
||||||
|
userId: webhook.userId,
|
||||||
|
name: webhook.name,
|
||||||
|
on: webhook.on,
|
||||||
|
url: webhook.url,
|
||||||
|
secret: webhook.secret,
|
||||||
|
active: webhook.active,
|
||||||
|
latestSentAt: webhook.latestSentAt?.toISOString(),
|
||||||
|
latestStatus: webhook.latestStatus,
|
||||||
|
}
|
||||||
|
));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { Endpoint } from '@/server/api/endpoint-base.js';
|
import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||||
|
import { webhookEventTypes } from '@/models/Webhook.js';
|
||||||
import type { WebhooksRepository } from '@/models/_.js';
|
import type { WebhooksRepository } from '@/models/_.js';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
import { ApiError } from '../../../error.js';
|
import { ApiError } from '../../../error.js';
|
||||||
|
@ -23,6 +24,33 @@ export const meta = {
|
||||||
id: '50f614d9-3047-4f7e-90d8-ad6b2d5fb098',
|
id: '50f614d9-3047-4f7e-90d8-ad6b2d5fb098',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id'
|
||||||
|
},
|
||||||
|
userId: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id',
|
||||||
|
},
|
||||||
|
name: { type: 'string' },
|
||||||
|
on: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'string',
|
||||||
|
enum: webhookEventTypes,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
url: { type: 'string' },
|
||||||
|
secret: { type: 'string' },
|
||||||
|
active: { type: 'boolean' },
|
||||||
|
latestSentAt: { type: 'string', format: 'date-time', nullable: true },
|
||||||
|
latestStatus: { type: 'integer', nullable: true },
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
@ -49,7 +77,17 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
throw new ApiError(meta.errors.noSuchWebhook);
|
throw new ApiError(meta.errors.noSuchWebhook);
|
||||||
}
|
}
|
||||||
|
|
||||||
return webhook;
|
return {
|
||||||
|
id: webhook.id,
|
||||||
|
userId: webhook.userId,
|
||||||
|
name: webhook.name,
|
||||||
|
on: webhook.on,
|
||||||
|
url: webhook.url,
|
||||||
|
secret: webhook.secret,
|
||||||
|
active: webhook.active,
|
||||||
|
latestSentAt: webhook.latestSentAt?.toISOString(),
|
||||||
|
latestStatus: webhook.latestStatus,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,25 @@ export const meta = {
|
||||||
id: '30aaaee3-4792-48dc-ab0d-cf501a575ac5',
|
id: '30aaaee3-4792-48dc-ab0d-cf501a575ac5',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
nullable: false,
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id'
|
||||||
|
},
|
||||||
|
user: {
|
||||||
|
type: 'object',
|
||||||
|
ref: 'User'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
required: ['id', 'user'],
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -15,6 +15,53 @@ export const meta = {
|
||||||
cacheSec: 60 * 1,
|
cacheSec: 60 * 1,
|
||||||
|
|
||||||
tags: ['meta'],
|
tags: ['meta'],
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
optional: false, nullable: false,
|
||||||
|
properties: {
|
||||||
|
machine: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
cpu: {
|
||||||
|
type: 'object',
|
||||||
|
nullable: false,
|
||||||
|
properties: {
|
||||||
|
model: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
cores: {
|
||||||
|
type: 'number',
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mem: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
total: {
|
||||||
|
type: 'number',
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
fs: {
|
||||||
|
type: 'object',
|
||||||
|
nullable: false,
|
||||||
|
properties: {
|
||||||
|
total: {
|
||||||
|
type: 'number',
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
used: {
|
||||||
|
type: 'number',
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -12,6 +12,30 @@ export const meta = {
|
||||||
description: 'Endpoint for testing input validation.',
|
description: 'Endpoint for testing input validation.',
|
||||||
|
|
||||||
requireCredential: false,
|
requireCredential: false,
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id'
|
||||||
|
},
|
||||||
|
required: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
string: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
default: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
nullableDefault: {
|
||||||
|
type: 'string',
|
||||||
|
default: 'hello',
|
||||||
|
nullable: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -10,6 +10,21 @@ import { DI } from '@/di-symbols.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
name: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
unlockedAt: {
|
||||||
|
type: 'number',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -25,6 +25,35 @@ export const meta = {
|
||||||
id: '7bc05c21-1d7a-41ae-88f1-66820f4dc686',
|
id: '7bc05c21-1d7a-41ae-88f1-66820f4dc686',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
nullable: false,
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id',
|
||||||
|
},
|
||||||
|
createdAt: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'date-time',
|
||||||
|
},
|
||||||
|
userId: {
|
||||||
|
type: 'string',
|
||||||
|
format: 'misskey:id',
|
||||||
|
},
|
||||||
|
user: {
|
||||||
|
type: 'object',
|
||||||
|
ref: 'User',
|
||||||
|
},
|
||||||
|
withReplies: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
Loading…
Reference in a new issue