diff options
| author | tamaina <tamaina@hotmail.co.jp> | 2022-01-18 22:27:10 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-18 22:27:10 +0900 |
| commit | efb0ffc4ec1e0b9f6af922cee11481c28dd9a8d6 (patch) | |
| tree | ea0b4d3d13b14d84eca747d93e0cad6585d07de4 /packages/backend/src/server/api/endpoints/ap | |
| parent | refactor (diff) | |
| download | sharkey-efb0ffc4ec1e0b9f6af922cee11481c28dd9a8d6.tar.gz sharkey-efb0ffc4ec1e0b9f6af922cee11481c28dd9a8d6.tar.bz2 sharkey-efb0ffc4ec1e0b9f6af922cee11481c28dd9a8d6.zip | |
refactor: APIエンドポイントファイルの定義を良い感じにする (#8154)
* Fix API Schema Error
* Delete SimpleSchema/SimpleObj
and Move schemas to dedicated files
* Userのスキーマを分割してみる
* define packMany type
* add ,
* Ensure enum schema and Make "as const" put once
* test?
* Revert "test?"
This reverts commit 97dc9bfa70851bfb7d1cf38e883f8df20fb78b79.
* Revert "Fix API Schema Error"
This reverts commit 21b6176d974ed8e3eb73723ad21a105c5d297323.
* :v:
* clean up
* test?
* wip
* wip
* better schema def
* :v:
* fix
* add minLength property
* wip
* wip
* wip
* anyOf/oneOf/allOfに対応? ~ relation.ts
* refactor!
* Define MinimumSchema
* wip
* wip
* anyOf/oneOf/allOfが動作するようにUnionSchemaTypeを修正
* anyOf/oneOf/allOfが動作するようにUnionSchemaTypeを修正
* Update packages/backend/src/misc/schema.ts
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
* fix
* array oneOfをより正確な型に
* array oneOfをより正確な型に
* wip
* :v:
* なんかもういろいろ
* remove
* very good schema
* api schema
* wip
* refactor: awaitAllの型定義を変えてみる
* fix
* specify types in awaitAll
* specify types in awaitAll
* :v:
* wip
* ...
* :v:
* AllowDateはやめておく
* 不必要なoptional: false, nullable: falseを廃止
* Packedが展開されないように
* 続packed
* wip
* define note type
* wip
* UserDetailedをMeDetailedかUserDetailedNotMeかを区別できるように
* wip
* wip
* wip specify user type of other schemas
* ok
* convertSchemaToOpenApiSchemaを改修
* convertSchemaToOpenApiSchemaを改修
* Fix
* fix
* :v:
* wip
* 分割代入ではなくallOfで定義するように
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
Diffstat (limited to 'packages/backend/src/server/api/endpoints/ap')
| -rw-r--r-- | packages/backend/src/server/api/endpoints/ap/get.ts | 8 | ||||
| -rw-r--r-- | packages/backend/src/server/api/endpoints/ap/show.ts | 57 |
2 files changed, 43 insertions, 22 deletions
diff --git a/packages/backend/src/server/api/endpoints/ap/get.ts b/packages/backend/src/server/api/endpoints/ap/get.ts index 0acce9bdbc..ff8c677b91 100644 --- a/packages/backend/src/server/api/endpoints/ap/get.ts +++ b/packages/backend/src/server/api/endpoints/ap/get.ts @@ -7,7 +7,7 @@ import ms from 'ms'; export const meta = { tags: ['federation'], - requireCredential: true as const, + requireCredential: true, limit: { duration: ms('1hour'), @@ -24,10 +24,10 @@ export const meta = { }, res: { - type: 'object' as const, - optional: false as const, nullable: false as const, + type: 'object', + optional: false, nullable: false, }, -}; +} as const; // eslint-disable-next-line import/no-default-export export default define(meta, async (ps) => { diff --git a/packages/backend/src/server/api/endpoints/ap/show.ts b/packages/backend/src/server/api/endpoints/ap/show.ts index e4e13117e6..7d17d8edce 100644 --- a/packages/backend/src/server/api/endpoints/ap/show.ts +++ b/packages/backend/src/server/api/endpoints/ap/show.ts @@ -12,11 +12,12 @@ import { User } from '@/models/entities/user'; import { fetchMeta } from '@/misc/fetch-meta'; import { isActor, isPost, getApId } from '@/remote/activitypub/type'; import ms from 'ms'; +import { SchemaType } from '@/misc/schema'; export const meta = { tags: ['federation'], - requireCredential: true as const, + requireCredential: true, limit: { duration: ms('1hour'), @@ -38,21 +39,41 @@ export const meta = { }, res: { - type: 'object' as const, - optional: false as const, nullable: false as const, - properties: { - type: { - type: 'string' as const, - optional: false as const, nullable: false as const, - enum: ['User', 'Note'], - }, - object: { - type: 'object' as const, - optional: false as const, nullable: false as const, + optional: false, nullable: false, + oneOf: [ + { + type: 'object', + properties: { + type: { + type: 'string', + optional: false, nullable: false, + enum: ['User'], + }, + object: { + type: 'object', + optional: false, nullable: false, + ref: 'UserDetailedNotMe', + } + } }, - }, + { + type: 'object', + properties: { + type: { + type: 'string', + optional: false, nullable: false, + enum: ['Note'], + }, + object: { + type: 'object', + optional: false, nullable: false, + ref: 'Note', + } + } + } + ], }, -}; +} as const; // eslint-disable-next-line import/no-default-export export default define(meta, async (ps) => { @@ -67,7 +88,7 @@ export default define(meta, async (ps) => { /*** * URIからUserかNoteを解決する */ -async function fetchAny(uri: string) { +async function fetchAny(uri: string): Promise<SchemaType<typeof meta['res']> | null> { // URIがこのサーバーを指しているなら、ローカルユーザーIDとしてDBからフェッチ if (uri.startsWith(config.url + '/')) { const parts = uri.split('/'); @@ -96,8 +117,8 @@ async function fetchAny(uri: string) { } // ブロックしてたら中断 - const meta = await fetchMeta(); - if (meta.blockedHosts.includes(extractDbHost(uri))) return null; + const fetchedMeta = await fetchMeta(); + if (fetchedMeta.blockedHosts.includes(extractDbHost(uri))) return null; // URI(AP Object id)としてDB検索 { @@ -172,7 +193,7 @@ async function fetchAny(uri: string) { return null; } -async function mergePack(user: User | null | undefined, note: Note | null | undefined) { +async function mergePack(user: User | null | undefined, note: Note | null | undefined): Promise<SchemaType<typeof meta.res> | null> { if (user != null) { return { type: 'User', |