From ed91f2d08577e774e861c3bfc96cc4ba2854b5e2 Mon Sep 17 00:00:00 2001 From: Samuel Elliott Date: Sun, 26 Jun 2022 17:55:56 +0100 Subject: [PATCH] Add a command to get a NookLink user token --- src/cli/nooklink/index.ts | 1 + src/cli/nooklink/user-token.ts | 53 ++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/cli/nooklink/user-token.ts diff --git a/src/cli/nooklink/index.ts b/src/cli/nooklink/index.ts index 91df394..7d35b17 100644 --- a/src/cli/nooklink/index.ts +++ b/src/cli/nooklink/index.ts @@ -7,3 +7,4 @@ export * as dumpNewspapers from './dump-newspapers.js'; export * as keyboard from './keyboard.js'; export * as reactions from './reactions.js'; export * as postReaction from './post-reaction.js'; +export * as userToken from './user-token.js'; diff --git a/src/cli/nooklink/user-token.ts b/src/cli/nooklink/user-token.ts new file mode 100644 index 0000000..ac6830e --- /dev/null +++ b/src/cli/nooklink/user-token.ts @@ -0,0 +1,53 @@ +import createDebug from 'debug'; +import type { Arguments as ParentArguments } from '../nooklink.js'; +import { ArgumentsCamelCase, Argv, YargsArguments } from '../../util/yargs.js'; +import { initStorage } from '../../util/storage.js'; +import { getUserToken } from '../../common/auth/nooklink.js'; + +const debug = createDebug('cli:nooklink:user-token'); + +export const command = 'user-token'; +export const desc = 'Get the player\'s NookLink user authentication token'; + +export function builder(yargs: Argv) { + return yargs.option('user', { + describe: 'Nintendo Account ID', + type: 'string', + }).option('token', { + describe: 'Nintendo Account session token', + type: 'string', + }).option('islander', { + describe: 'NookLink user ID', + type: 'string', + }).option('json', { + describe: 'Output raw JSON', + type: 'boolean', + }).option('json-pretty-print', { + describe: 'Output pretty-printed JSON', + type: 'boolean', + }); +} + +type Arguments = YargsArguments>; + +export async function handler(argv: ArgumentsCamelCase) { + const storage = await initStorage(argv.dataPath); + + const usernsid = argv.user ?? await storage.getItem('SelectedUser'); + const token: string = argv.token || + await storage.getItem('NintendoAccountToken.' + usernsid); + const {nooklinkuser, data} = await getUserToken(storage, token, argv.islander, argv.zncProxyUrl, argv.autoUpdateSession); + + if (argv.json || argv.jsonPrettyPrint) { + const result = { + auth_token: data.token.token, + expires_at: data.token.expireAt, + user_id: data.user, + }; + + console.log(JSON.stringify(result, null, argv.jsonPrettyPrint ? 4 : 0)); + return; + } + + console.log(data.token.token); +}