143 lines
2.7 KiB
Bash
Executable File
143 lines
2.7 KiB
Bash
Executable File
#!/bin/zsh
|
|
|
|
help=(
|
|
at.zsh d handle
|
|
at.zsh u at-uri
|
|
at.zsh c at-uri -r
|
|
at.zsh docs
|
|
at.zsh l handle password
|
|
at.zsh r
|
|
)
|
|
host=(
|
|
bsky.social
|
|
public.api.bsky.app
|
|
plc.directory
|
|
)
|
|
lexicon=(
|
|
com.atproto.repo.describeRepo
|
|
com.atproto.repo.getRecord
|
|
com.atproto.repo.listRecords
|
|
com.atproto.identity.resolveHandle
|
|
com.atproto.server.createSession
|
|
com.atproto.server.refreshSession
|
|
)
|
|
|
|
function at-env() {
|
|
host=bsky.social
|
|
at_uri=at://did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.game.user/syui
|
|
docs_uri=https://docs.bsky.app/docs/api
|
|
handle=yui.syui.ai
|
|
did=`echo $at_uri|cut -d / -f 3`
|
|
collection=`echo $at_uri|cut -d / -f 4`
|
|
rkey=`echo $at_uri|cut -d / -f 5`
|
|
d=${0:a:h}
|
|
f=~/.config/.at-zsh.json
|
|
}
|
|
|
|
function at-uri-search() {
|
|
if [ -n "$1" ];then
|
|
at_uri=$1
|
|
fi
|
|
req=/xrpc/com.atproto.repo.getRecord
|
|
url=https://${host}${req}
|
|
did=`echo $at_uri|cut -d / -f 3`
|
|
collection=`echo $at_uri|cut -d / -f 4`
|
|
rkey=`echo $at_uri|cut -d / -f 5`
|
|
curl -sL "$url?repo=$did&collection=$collection&rkey=$rkey"|jq .
|
|
}
|
|
|
|
function at-did-search() {
|
|
if [ -n "$1" ];then
|
|
handle=$1
|
|
fi
|
|
req=/xrpc/com.atproto.repo.describeRepo
|
|
url=https://${host}${req}
|
|
curl -sL "$url?repo=$handle"|jq .
|
|
}
|
|
|
|
function at-collection-search() {
|
|
reverse=false
|
|
if [ -n "$1" ];then
|
|
at_uri=$1
|
|
fi
|
|
if [ "$2" = "-r" ];then
|
|
reverse=true
|
|
fi
|
|
req=/xrpc/com.atproto.repo.listRecords
|
|
url=https://${host}${req}
|
|
did=`echo $at_uri|cut -d / -f 3`
|
|
collection=`echo $at_uri|cut -d / -f 4`
|
|
curl -sL "$url?repo=$did&collection=$collection&reverse=$reverse"|jq .
|
|
}
|
|
|
|
|
|
function at-docs() {
|
|
for i in $lexicon; do
|
|
req=`echo $i|tr '.' '-'|sed 's/[A-Z]/-&/g'|tr '[A-Z]' '[a-z]'`
|
|
url=$docs_uri/$req
|
|
echo $url
|
|
done
|
|
}
|
|
|
|
function at-login() {
|
|
if [ -z "$1" ] || [ -z "$2" ];then
|
|
echo handle password
|
|
exit
|
|
fi
|
|
handle=$1
|
|
password=$2
|
|
echo $password
|
|
json="{\"identifier\":\"$handle\",\"password\":\"$password\"}"
|
|
req=/xrpc/com.atproto.server.createSession
|
|
url=https://${host}${req}
|
|
if [ ! -d ~/.config ];then
|
|
mkdir -p ~/.config
|
|
fi
|
|
t=`curl -sL -X POST -H "Content-Type: application/json" -d $json $url`
|
|
if echo $t |jq .;then
|
|
echo $t >! $f
|
|
fi
|
|
unset t password
|
|
}
|
|
|
|
function at-refresh() {
|
|
echo $f
|
|
token=`cat $f|jq -r .accessJwt`
|
|
refresh=`cat $f|jq -r .refreshJwt`
|
|
req=/xrpc/com.atproto.server.refreshSession
|
|
url=https://${host}${req}
|
|
t=`curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $refresh" $url`
|
|
if echo $t |jq .;then
|
|
echo $t >! $f
|
|
fi
|
|
unset t token refresh
|
|
}
|
|
|
|
at-env
|
|
case $1 in
|
|
uri|u)
|
|
at-uri-search $2
|
|
;;
|
|
did|d)
|
|
at-did-search $2
|
|
;;
|
|
collection|c)
|
|
at-collection-search $2 $3
|
|
;;
|
|
at-docs|docs)
|
|
at-docs
|
|
;;
|
|
login|l)
|
|
at-login $2 $3
|
|
;;
|
|
refresh|r)
|
|
at-refresh
|
|
;;
|
|
*)
|
|
echo "${help[@]}"
|
|
echo "${host[@]}"
|
|
echo "${lexicon[@]}"
|
|
;;
|
|
esac
|
|
|