2023-03-08 / @syui

bluesky , atproto

blueskyでhandle.updateしてみた

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 -> login -> profile -> handle.update

note: re-login

cli

$ sudo pacman -S rust --noconfirm
$ git clone https://github.com/syui/atr
$ cd !$:t
$ cargo build
host = "bsky.social"
pass = "password"
user = "syui.bsky.social"
$ ./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でも書いてみました。大体はこんな感じです。

#!/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する

# 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のほうが重要ですね。