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