@ atcute/ password- session
基于密码的AT 协议服务的会话管理. 管理访问/更新代号生命周期, 401自动刷新,通过回调持续会话.
对于基于浏览器的应用程序,选择基于 OAuth 的认证。 当使用密码认证时,请使用应用程序 密码而不是主账户证书.
npm install @atcute/password-session @atcute/client @atcute/bluesky
使用量
登录
import { Client, ok } from '@atcute/client';
import { PasswordSession } from '@atcute/password-session';
import type {} from '@atcute/bluesky';
const session = await PasswordSession.login(
{ service: 'https://bsky.social', identifier: 'you.bsky.social', password: 'your-app-password' },
{
onUpdate(data) {
// called on login and token refresh — persist the session
localStorage.setItem('session', JSON.stringify(data));
},
onDelete(data) {
// called on logout or session invalidation — clean up
localStorage.removeItem('session');
},
},
);
const rpc = new Client({ handler: session });
const data = await ok(rpc.get('com.atproto.server.getSession'));
console.log(data.did);
URL 简称
对于 bots 和脚本,请使用 URL 的快手 await using 自动登录 :
await using session = await PasswordSession.login('https://handle:[email protected]');
const rpc = new Client({ handler: session });
续会
在不重新进入全权证书的情况下继续开会:
const saved = localStorage.getItem('session');
if (saved) {
const session = await PasswordSession.resume(JSON.parse(saved), {
onUpdate(data) {
localStorage.setItem('session', JSON.stringify(data));
},
onDelete(data) {
localStorage.removeItem('session');
},
});
const rpc = new Client({ handler: session });
}
带有证书倒置的缓存会话
对于既存有证书又存有缓存会话的bot, login() 能够尝试缓存会话
首先返回到新认证 :
const session = await PasswordSession.login('https://handle:[email protected]', {
session: loadFromDisk(),
onUpdate(data) {
saveToDisk(data);
},
});
懒惰的建筑
如果您不需要前置验证, 请直接构造 。 符号在 401 上懒散地刷新 :
const session = new PasswordSession(savedData, { onUpdate, onDelete });
const rpc = new Client({ handler: session });
清理
删除无效会话服务器侧, 不恢复 :
await PasswordSession.delete(savedData);
调用
| 回调 | 何时 | 会话状态 |
|---|---|---|
onUpdate | 登录成功, 令牌刷新成功 | 活动( 更新) |
onUpdateFailure | 符号刷新暂时失败( 网络) | 活动(保留) |
onDelete | 登录成功, 会话无效 | 已销毁 |
onDeleteFailure | 暂时停用( 网络) | 活动(保留) |
所有回调收到 this: PasswordSession 上下文,不能抛出.