Merge 5c0821ddfc
into 65ba33867b
This commit is contained in:
commit
b43483634a
|
@ -17,6 +17,8 @@
|
|||
- Feat: 全てのチャットメッセージを既読にするAPIを追加(chat/read-all)
|
||||
- Fix: アカウント削除が正常に行われないことがあった問題を修正
|
||||
|
||||
### Misskey.js
|
||||
- Feat: MiAuth 認証ラッパー
|
||||
|
||||
## 2025.6.0
|
||||
|
||||
|
|
|
@ -37,8 +37,44 @@ import * as Misskey from 'misskey-js';
|
|||
import { api as misskeyApi } from 'misskey-js';
|
||||
```
|
||||
|
||||
## Authenticate
|
||||
todo
|
||||
## Authenticate (MiAuth)
|
||||
MiAuthでの認証に対応しています。
|
||||
|
||||
### Step 1: 認証URLを生成
|
||||
`APIClient`クラスの`getMiAuthURL`メソッドを使用して認証URLを生成します(これは同期関数です)。生成したURLにユーザーを誘導し、認可させてください。
|
||||
|
||||
``` ts
|
||||
const cli = new Misskey.api.APIClient({
|
||||
origin: 'https://misskey.test',
|
||||
});
|
||||
|
||||
const { url } = cli.getMiAuthURL({
|
||||
name: 'My app',
|
||||
callback: 'https://example.com/callback',
|
||||
permission: ['read:account'],
|
||||
});
|
||||
|
||||
// URLに飛ばす(例)
|
||||
location.href = url;
|
||||
```
|
||||
|
||||
### Step 2: セッションIDからアクセストークンを取得
|
||||
`APIClient`クラスの`authWithMiAuth`メソッドを使用してセッションIDからアクセストークンを取得します。アクセストークンは返却されるほか、以降同一のインスタンスを利用したリクエストに自動で設定されます(この挙動は第2引数に`false`を与えることで回避できます)。
|
||||
|
||||
コールバックURLを指定した場合、セッションIDはURLパラメータの`session`から取得できます。
|
||||
|
||||
``` ts
|
||||
const sessionId = new URL(location.href).searchParams.get('session');
|
||||
|
||||
const cli = new Misskey.api.APIClient({
|
||||
origin: 'https://misskey.test',
|
||||
});
|
||||
|
||||
const { token } = await cli.authWithMiAuth(sessionId);
|
||||
|
||||
// 以後、同じAPIClientを使い続ける場合はトークンが自動で設定されます
|
||||
const i = await cli.request('i');
|
||||
```
|
||||
|
||||
## API request
|
||||
APIを利用する際は、利用するサーバーの情報とアクセストークンを与えて`APIClient`クラスのインスタンスを初期化し、そのインスタンスの`request`メソッドを呼び出してリクエストを行います。
|
||||
|
|
|
@ -521,10 +521,22 @@ class APIClient {
|
|||
fetch?: APIClient['fetch'] | null | undefined;
|
||||
});
|
||||
// (undocumented)
|
||||
authWithMiAuth(sessionId: string, setToken?: boolean): Promise<MiAuthCheckResponse>;
|
||||
// (undocumented)
|
||||
credential: string | null | undefined;
|
||||
// (undocumented)
|
||||
fetch: FetchLike;
|
||||
// (undocumented)
|
||||
getMiAuthURL(options: {
|
||||
name?: string;
|
||||
icon?: string;
|
||||
callback?: string;
|
||||
permission?: typeof permissions_2[number][];
|
||||
}, sessionId?: string): {
|
||||
sessionId: string;
|
||||
url: string;
|
||||
};
|
||||
// (undocumented)
|
||||
origin: string;
|
||||
}
|
||||
|
||||
|
@ -1463,6 +1475,7 @@ declare namespace entities {
|
|||
SigninWithPasskeyRequest,
|
||||
SigninWithPasskeyInitResponse,
|
||||
SigninWithPasskeyResponse,
|
||||
MiAuthCheckResponse,
|
||||
PartialRolePolicyOverride,
|
||||
EmptyRequest,
|
||||
EmptyResponse,
|
||||
|
@ -2758,6 +2771,12 @@ type MetaRequest = operations['meta']['requestBody']['content']['application/jso
|
|||
// @public (undocumented)
|
||||
type MetaResponse = operations['meta']['responses']['200']['content']['application/json'];
|
||||
|
||||
// @public (undocumented)
|
||||
type MiAuthCheckResponse = {
|
||||
token: string;
|
||||
user: UserDetailedNotMe;
|
||||
};
|
||||
|
||||
// @public (undocumented)
|
||||
type MiauthGenTokenRequest = operations['miauth___gen-token']['requestBody']['content']['application/json'];
|
||||
|
||||
|
@ -3748,6 +3767,7 @@ type V2AdminEmojiListResponse = operations['v2___admin___emoji___list']['respons
|
|||
|
||||
// Warnings were encountered during analysis:
|
||||
//
|
||||
// src/api.ts:135:3 - (ae-forgotten-export) The symbol "permissions_2" needs to be exported by the entry point index.d.ts
|
||||
// src/entities.ts:50:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts
|
||||
// src/streaming.ts:57:3 - (ae-forgotten-export) The symbol "ReconnectingWebSocket" needs to be exported by the entry point index.d.ts
|
||||
// src/streaming.types.ts:218:4 - (ae-forgotten-export) The symbol "ReversiUpdateKey" needs to be exported by the entry point index.d.ts
|
||||
|
|
|
@ -41,17 +41,17 @@
|
|||
"@types/node": "22.15.21",
|
||||
"@typescript-eslint/eslint-plugin": "8.32.1",
|
||||
"@typescript-eslint/parser": "8.32.1",
|
||||
"esbuild": "0.25.4",
|
||||
"execa": "8.0.1",
|
||||
"glob": "11.0.2",
|
||||
"jest": "29.7.0",
|
||||
"jest-fetch-mock": "3.0.3",
|
||||
"jest-websocket-mock": "2.5.0",
|
||||
"mock-socket": "9.3.1",
|
||||
"ncp": "2.0.0",
|
||||
"nodemon": "3.1.10",
|
||||
"execa": "8.0.1",
|
||||
"tsd": "0.32.0",
|
||||
"typescript": "5.8.3",
|
||||
"esbuild": "0.25.4",
|
||||
"glob": "11.0.2"
|
||||
"typescript": "5.8.3"
|
||||
},
|
||||
"files": [
|
||||
"built"
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
import './autogen/apiClientJSDoc.js';
|
||||
|
||||
import { endpointReqTypes } from './autogen/endpoint.js';
|
||||
import { permissions } from './consts.js';
|
||||
import type { SwitchCaseResponseType, Endpoints } from './api.types.js';
|
||||
import type { MiAuthCheckResponse } from './entities.js';
|
||||
|
||||
export type {
|
||||
SwitchCaseResponseType,
|
||||
|
@ -125,4 +127,55 @@ export class APIClient {
|
|||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
public getMiAuthURL(options: {
|
||||
name?: string;
|
||||
icon?: string;
|
||||
callback?: string;
|
||||
permission?: typeof permissions[number][];
|
||||
}, sessionId?: string): {
|
||||
sessionId: string;
|
||||
url: string;
|
||||
} {
|
||||
const params = new URLSearchParams();
|
||||
if (options.name) params.set('name', options.name);
|
||||
if (options.icon) params.set('icon', options.icon);
|
||||
if (options.callback) params.set('callback', options.callback);
|
||||
if (options.permission) params.set('permission', options.permission.join(','));
|
||||
|
||||
const _sessionId = sessionId ?? crypto.randomUUID();
|
||||
|
||||
return {
|
||||
sessionId: _sessionId,
|
||||
url: `${this.origin}/miauth/${_sessionId}?${params.toString()}`,
|
||||
};
|
||||
}
|
||||
|
||||
public authWithMiAuth(sessionId: string, setToken = true): Promise<MiAuthCheckResponse> {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.fetch(`${this.origin}/api/miauth/${sessionId}/check`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
credentials: 'omit',
|
||||
cache: 'no-cache',
|
||||
}).then(async (res) => {
|
||||
const body = res.status === 204 ? null : await res.json();
|
||||
|
||||
if (res.status === 200 && body) {
|
||||
if (setToken) {
|
||||
this.credential = body.token;
|
||||
}
|
||||
|
||||
resolve(body as MiAuthCheckResponse);
|
||||
} else {
|
||||
reject({
|
||||
[MK_API_ERROR]: true,
|
||||
...body.error,
|
||||
});
|
||||
}
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -314,6 +314,11 @@ export type SigninWithPasskeyResponse = {
|
|||
signinResponse: SigninFlowResponse & { finished: true };
|
||||
};
|
||||
|
||||
export type MiAuthCheckResponse = {
|
||||
token: string,
|
||||
user: UserDetailedNotMe,
|
||||
};
|
||||
|
||||
type Values<T extends Record<PropertyKey, unknown>> = T[keyof T];
|
||||
|
||||
export type PartialRolePolicyOverride = Partial<{ [k in keyof RolePolicies]: Omit<Values<Role['policies']>, 'value'> & { value: RolePolicies[k] } }>;
|
||||
|
|
|
@ -14418,7 +14418,7 @@ snapshots:
|
|||
|
||||
'@stylistic/eslint-plugin@2.13.0(eslint@9.27.0)(typescript@5.8.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3)
|
||||
'@typescript-eslint/utils': 8.33.0(eslint@9.27.0)(typescript@5.8.3)
|
||||
eslint: 9.27.0
|
||||
eslint-visitor-keys: 4.2.0
|
||||
espree: 10.3.0
|
||||
|
@ -14658,7 +14658,7 @@ snapshots:
|
|||
|
||||
'@tokenizer/inflate@0.2.7':
|
||||
dependencies:
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
fflate: 0.8.2
|
||||
token-types: 6.0.0
|
||||
transitivePeerDependencies:
|
||||
|
@ -15077,7 +15077,7 @@ snapshots:
|
|||
'@typescript-eslint/types': 8.33.0
|
||||
'@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3)
|
||||
'@typescript-eslint/visitor-keys': 8.33.0
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
eslint: 9.27.0
|
||||
typescript: 5.8.3
|
||||
transitivePeerDependencies:
|
||||
|
@ -15087,7 +15087,7 @@ snapshots:
|
|||
dependencies:
|
||||
'@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3)
|
||||
'@typescript-eslint/types': 8.33.0
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
@ -15121,7 +15121,7 @@ snapshots:
|
|||
dependencies:
|
||||
'@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3)
|
||||
'@typescript-eslint/utils': 8.33.0(eslint@9.27.0)(typescript@5.8.3)
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
eslint: 9.27.0
|
||||
ts-api-utils: 2.1.0(typescript@5.8.3)
|
||||
typescript: 5.8.3
|
||||
|
@ -15152,7 +15152,7 @@ snapshots:
|
|||
'@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3)
|
||||
'@typescript-eslint/types': 8.33.0
|
||||
'@typescript-eslint/visitor-keys': 8.33.0
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
fast-glob: 3.3.3
|
||||
is-glob: 4.0.3
|
||||
minimatch: 9.0.5
|
||||
|
@ -15205,7 +15205,7 @@ snapshots:
|
|||
dependencies:
|
||||
'@ampproject/remapping': 2.3.0
|
||||
'@bcoe/v8-coverage': 1.0.2
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
istanbul-lib-coverage: 3.2.2
|
||||
istanbul-lib-report: 3.0.1
|
||||
istanbul-lib-source-maps: 5.0.6
|
||||
|
@ -15546,7 +15546,7 @@ snapshots:
|
|||
|
||||
agent-base@6.0.2:
|
||||
dependencies:
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
optional: true
|
||||
|
@ -17037,7 +17037,7 @@ snapshots:
|
|||
|
||||
esbuild-register@3.5.0(esbuild@0.25.5):
|
||||
dependencies:
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
esbuild: 0.25.5
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
@ -17679,7 +17679,7 @@ snapshots:
|
|||
|
||||
follow-redirects@1.15.9(debug@4.4.1):
|
||||
optionalDependencies:
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
|
||||
for-each@0.3.3:
|
||||
dependencies:
|
||||
|
@ -18077,7 +18077,7 @@ snapshots:
|
|||
http-proxy-agent@7.0.2:
|
||||
dependencies:
|
||||
agent-base: 7.1.3
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
|
@ -18105,7 +18105,7 @@ snapshots:
|
|||
https-proxy-agent@5.0.1:
|
||||
dependencies:
|
||||
agent-base: 6.0.2
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
optional: true
|
||||
|
@ -18113,7 +18113,7 @@ snapshots:
|
|||
https-proxy-agent@7.0.6:
|
||||
dependencies:
|
||||
agent-base: 7.1.3
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
|
@ -18209,7 +18209,7 @@ snapshots:
|
|||
dependencies:
|
||||
'@ioredis/commands': 1.2.0
|
||||
cluster-key-slot: 1.1.2
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
denque: 2.1.0
|
||||
lodash.defaults: 4.2.0
|
||||
lodash.isarguments: 3.1.0
|
||||
|
@ -18428,7 +18428,7 @@ snapshots:
|
|||
istanbul-lib-source-maps@5.0.6:
|
||||
dependencies:
|
||||
'@jridgewell/trace-mapping': 0.3.25
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
istanbul-lib-coverage: 3.2.2
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
@ -19474,7 +19474,7 @@ snapshots:
|
|||
micromark@4.0.0:
|
||||
dependencies:
|
||||
'@types/debug': 4.1.12
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
decode-named-character-reference: 1.0.2
|
||||
devlop: 1.1.0
|
||||
micromark-core-commonmark: 2.0.0
|
||||
|
@ -20863,7 +20863,7 @@ snapshots:
|
|||
|
||||
require-in-the-middle@7.3.0:
|
||||
dependencies:
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
module-details-from-path: 1.0.3
|
||||
resolve: 1.22.8
|
||||
transitivePeerDependencies:
|
||||
|
@ -21220,7 +21220,7 @@ snapshots:
|
|||
dependencies:
|
||||
'@hapi/hoek': 11.0.4
|
||||
'@hapi/wreck': 18.0.1
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
joi: 17.13.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
@ -21320,7 +21320,7 @@ snapshots:
|
|||
socks-proxy-agent@8.0.5:
|
||||
dependencies:
|
||||
agent-base: 7.1.3
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
socks: 2.8.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
@ -21417,7 +21417,7 @@ snapshots:
|
|||
arg: 5.0.2
|
||||
bluebird: 3.7.2
|
||||
check-more-types: 2.24.0
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
execa: 5.1.1
|
||||
lazy-ass: 1.6.0
|
||||
ps-tree: 1.2.0
|
||||
|
@ -21595,7 +21595,7 @@ snapshots:
|
|||
dependencies:
|
||||
component-emitter: 1.3.1
|
||||
cookiejar: 2.1.4
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
fast-safe-stringify: 2.1.1
|
||||
form-data: 4.0.2
|
||||
formidable: 3.5.4
|
||||
|
@ -21940,7 +21940,7 @@ snapshots:
|
|||
app-root-path: 3.1.0
|
||||
buffer: 6.0.3
|
||||
dayjs: 1.11.13
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
dedent: 1.6.0
|
||||
dotenv: 16.4.7
|
||||
glob: 10.4.5
|
||||
|
@ -22136,7 +22136,7 @@ snapshots:
|
|||
vite-node@3.1.4(@types/node@22.15.28)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4):
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
es-module-lexer: 1.7.0
|
||||
pathe: 2.0.3
|
||||
vite: 6.3.5(@types/node@22.15.28)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)
|
||||
|
@ -22185,7 +22185,7 @@ snapshots:
|
|||
'@vitest/spy': 3.1.4
|
||||
'@vitest/utils': 3.1.4
|
||||
chai: 5.2.0
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
expect-type: 1.2.1
|
||||
magic-string: 0.30.17
|
||||
pathe: 2.0.3
|
||||
|
@ -22272,7 +22272,7 @@ snapshots:
|
|||
|
||||
vue-eslint-parser@10.1.3(eslint@9.27.0):
|
||||
dependencies:
|
||||
debug: 4.4.1(supports-color@5.5.0)
|
||||
debug: 4.4.1(supports-color@8.1.1)
|
||||
eslint: 9.27.0
|
||||
eslint-scope: 8.3.0
|
||||
eslint-visitor-keys: 4.2.0
|
||||
|
|
Loading…
Reference in New Issue