1
0
hugo/content/blog/2023-03-08-bluesky.md
2024-04-23 22:21:26 +09:00

128 lines
4.1 KiB
Markdown

+++
date = "2023-03-08"
tags = ["bluesky","atproto"]
title = "blueskyでhandle.updateしてみた"
slug = "bluesky"
+++
bluesky(bsky.social)では現在、handle.updateが追加されていて、いわゆるcustom-domain(custom-handle)のようなことができるようになっています。これを`handle.update`と呼びます。
具体的には、`syui.bsky.social -> syui.cf`などにhandleを変更することができます。
で、実際にこのhandle.updateをやってみた感想を書きます。
web, cliの両方に簡単に機能を追加しましたので、誰でもできると思います。
### web
[bsky.syui.cf](https://bsky.syui.cf/login) -> login -> profile -> handle.update
note: re-login
### cli
```sh
$ sudo pacman -S rust --noconfirm
$ git clone https://github.com/syui/atr
$ cd !$:t
$ cargo build
```
```toml:~/.config/atr/config.toml
host = "bsky.social"
pass = "password"
user = "syui.bsky.social"
```
```sh
$ ./target/debug/atr h xxx.bsky.social
$ ./target/debug/atr h example.com
# note: change config.toml
# user = "example.com"
$ ./target/debug/atr a
$ ./target/debug/atr profile
```
### shell
shellでも書いてみました。大体はこんな感じです。
```sh
#!/bin/zsh
# session.create
user=syui.bsky.social
pass=xxx
url=https://bsky.social/xrpc/com.atproto.session.create
curl -sL -X POST -H "Content-Type: application/json" -d "{\"handle\":\"$user\",\"password\":\"$pass\"}" $url >! token.json
cat token.json|jq .
# get : did, accessJwt
did=`cat token.json|jq -r .did`
token=`cat token.json|jq -r .accessJwt`
# handle.update
url=https://bsky.social/xrpc/com.atproto.handle.update
json="{\"handle\":\"syui.cf\"}"
curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d "$json" $url
```
### handle.update
なぜatではhandle.customと言わず、handle.updateという単語が採用されているのでしょう。
atでは、handleを削除した場合、そのhandleは空き状態になります。
つまり、誰でも取得できるようになります。
これはatの設計思想だと思われます。
handleを凍結するか、空きにするかで設計思想が異なります。それぞれにメリット、デメリットがあります。
atはhandleの空きを積極的に作ることで、ユーザーがお気に入りのhandleを取得しやすくなっています。
これは、handle.updateの処理にも影響します。
handle.updateとは、handleの完全な移行を意味します。
具体的には、以前のhandleは削除され、空き状態になり、誰でも取得できるようになります。
これについては、matrixでwhy氏に教えてもらいました。
ですから、handle.customではなくhandle.updateという単語が採用されているのだと思います。
しかし、一般的にはhandle.customのほうがわかりやすいので、私もそのように表記することがあります。
ですが、実態は、handleの完全な移行であり、以前のhandleは削除されるという認識です。
handle.update後のerror時の処理ですが、`handle = email`でre-loginすると解消されます。
### handle.save
これは、atの設計思想からあまりおすすめできるものではありませんが、`bsky.social`のhandleを確保しておきたい場合、以下のような処理を行いましょう。
1. handle.updateする
2. 以前のhandleでaccountをcreateする
![](https://raw.githubusercontent.com/syui/img/master/other/bluesky_20230307_0001.jpg)
```sh
# restore
# account delete : syui.bsky.social
$ atr h syui.bsky.social
# note: invite code x2
```
### did
atのhandleはusernameのようなものです。didがidですね。
didはnostrでいうpubkeyのようなもので、ユーザー固有で変更できないもの、確実なものとして、基本的には内部でdidが参照されています。
handleはあくまでaliasのようなもので、search, mention, loginなどの処理のときに人間にわかりやすいようにしている感じです。
とはいえ、人間にとってhandleのほうが重要ですね。