2023-03-13 / @syui

bluesky , atproto

blueskyのatをdeployしてみた2

前回、deployしてみた感触ではtoken errorが出ていて、それを解消すれば良さそうに思ってたんだけど、気になる情報があったので、今回はそれにあたってみた。

atはplc.directoryに登録しなければいけなかったみたいで、その登録ができていなかったぽい。

重要なのはserverDidでserverを立てる際はここに登録した値を入れる必要があるみたいです。

$ git clone https://github.com/syui/atproto
$ cd !$:t

# error : python, not found better-sqlite3
$ nvm use 18
$ npm config edit
python=/usr/bin/python3

$ npm i node-gyp npm lerna
$ npm i better-sqlite3

$ npm i

今回、blueskyでKingYoSunさんに助けてもらいました。ありがとうございます。

https://github.com/KingYoSun/atproto-aws/tree/main

plc.directoryにdomainなどを登録して、didを取得するまでをやります。これをserverDidに使用する感じだと思います。

import * as cbor from '@ipld/dag-cbor'
import * as uint8arrays from 'uint8arrays'

console.log(`signingKey=${keypair.did()}`)
console.log(`recoveryKey=${keypair.did()}`)
const obj = {
  type: 'create',
  signingKey: keypair.did(),
  recoveryKey: keypair.did(),
  handle: '${ADMIN_USER_NAME}.${DOMAIN}',
  service: 'https://${DOMAIN}',
  prev: null,
}
const data = new Uint8Array(cbor.encode(obj))
console.log(
  `sig=${uint8arrays.toString(await keypair.sign(data), 'base64url')}`,
)
$ make build
$ make run-dev-env

$ handle=admin.example.com
$ service=https://example.com
$ url=https://plc.directory/did:plc:q4ugjxbx2mp6rmnnljjystesttesttest

$ json="{
  \"type\": \"create\",
  \"signingKey\": \"${signingKey}\",
  \"recoveryKey\": \"${recoveryKey}\",
  \"handle\": \"${handle}\",
  \"service\": \"${service}\",
  \"prev\": null,
  \"sig\": \"${sig}\"
}"

$ curl -X POST -H "Content-Type: application/json" -d "$json" $url
Hash of genesis operation does not match DID identifier: xxx

$ url=did:plc:xxx
$ curl -X POST -H "Content-Type: application/json" -d "$json" $url
Ok

適当な解説

package.json, Makefileからコマンド体系化がわかります。

まずは依存関係を解消するためにnpm iyarn installを通さなければなりません。

それが通ったら初めてbuildなどが成功します。これはlerna run build, make buildなどがそれに当たります。

buildが通ったら、./dist/index.jsがそのままで動きます。

localhostで動かす場合やpreviewなどはmake run-dev-envなどがそれにあたります。

atprotoで重要なのはpakages/{pds, dev-env}の2つです。環境変数を与え、動かせてみるといいかも。