+++ date = "2023-03-13" tags = ["bluesky","atproto"] title = "blueskyのatをdeployしてみた2" slug = "bluesky" +++ 前回、deployしてみた感触では`token error`が出ていて、それを解消すれば良さそうに思ってたんだけど、気になる情報があったので、今回はそれにあたってみた。 atは`plc.directory`に登録しなければいけなかったみたいで、その登録ができていなかったぽい。 重要なのは`serverDid`でserverを立てる際はここに登録した値を入れる必要があるみたいです。 ```sh $ 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)さんに助けてもらいました。ありがとうございます。 https://github.com/KingYoSun/atproto-aws/tree/main plc.directoryにdomainなどを登録して、didを取得するまでをやります。これを`serverDid`に使用する感じだと思います。 ```js:packages/dev-env/src/main.ts 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')}`, ) ``` ```sh $ 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 i`か`yarn install`を通さなければなりません。 それが通ったら初めてbuildなどが成功します。これは`lerna run build`, `make build`などがそれに当たります。 buildが通ったら、`./dist/index.js`がそのままで動きます。 localhostで動かす場合やpreviewなどは`make run-dev-env`などがそれにあたります。 atprotoで重要なのは`pakages/{pds, dev-env}`の2つです。環境変数を与え、動かせてみるといいかも。