TL; DR
npm token create --json
経緯
記事のタイトルとは関係ないけど、Node.jsのプログラム中からnpmアカウントのAuth Tokenを生成する方法で困ってた。
https://docs.npmjs.com/creating-and-viewing-authentication-tokens
ここにあるnpm token create
以外にAPIが見つからないけど、npm token create
はCLI上でインタラクティブにパスワードの入力を求めてくる。
これについては下記の方法で可能だということがわかった。
意外とお手軽で良かった。
main.js
constchild=require('child_process')child.spawn("npm",["token","create"],{stdio:'inherit'})
ということで実行してみたところ、パスワードも問題なく親プロセスから対話的に入力でき、トークンが生成できた。(トークン部分は隠してあります)
node main.js
npm password:
┌────────────────┬──────────────────────────────────────┐
│ token │ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │
├────────────────┼──────────────────────────────────────┤
│ cidr_whitelist │ │
├────────────────┼──────────────────────────────────────┤
│ readonly │ false │
├────────────────┼──────────────────────────────────────┤
│ created │ 2020-08-13T07:53:39.394Z │
└────────────────┴──────────────────────────────────────┘
しかし実際にはこのトークンをは次の処理への入力にする必要があり、(これパースするのか・・・面倒だな・・・)と思って、ダメ元で--json
オプションを渡してみたらJSONで取得できた。
感謝感謝。
main.js
constchild=require('child_process')child.spawn("npm",["token","create","--json"],{stdio:'inherit'})
node main.js
npm password:
{"token":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","cidr_whitelist":[],"readonly":false,"created":"2020-08-13T08:04:16.531Z"}
これならあとはstdoutへの出力を親プロセスで受け取るだけなのでいけそう。