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

95 lines
2.9 KiB
Markdown

+++
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つです。環境変数を与え、動かせてみるといいかも。