refresh
今まではcreateSessionで都度、tokenを取得し、新しいsessionを作成してきました。
これらsessionは2時間有効で、apiを呼び出すたびにsessionを作成していると有効なsessionがいくつもできてしまいます。
そして、それぞれが2時間後に無効になります。
これを回避する方法としては、refreshSessionがあります。refresh-tokenとも呼ばれます。
基本的には、https://bsky.social/xrpc/com.atproto.server.refreshSessionにtokenとしてrefreshJwtを指定するだけです。
$ cat ~/.config/atr/token.json|jq -r .refreshJwt
$ refresh=`cat ~/.config/atr/token.json|jq -r .refreshJwt`
$ curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $refresh" https://bsky.social/xrpc/com.atproto.server.refreshSession
これを保存しておけば、約2ヶ月有効だそうです。
これをrustで書いてみると、こんな感じになります。
src/refresh.rs
extern crate reqwest;
use crate::token_toml;
use crate::url;
use serde_json::json;
pub async fn post_request() -> String {
    let access = token_toml(&"access");
    let refresh = token_toml(&"refresh");
    let did = token_toml(&"did");
    let handle = token_toml(&"handle");
    let url = url(&"session_refresh");
    let client = reqwest::Client::new();
    let res = client
        .post(url)
        .header("Authorization", "Bearer ".to_owned() + &refresh)
        .send()
        .await
        .unwrap()
        .text()
        .await
        .unwrap();
    return res
}