From 65d1069edf187c32ede131f319caaacb98d96a1d Mon Sep 17 00:00:00 2001 From: Samuel Elliott Date: Tue, 16 Aug 2022 17:00:38 +0100 Subject: [PATCH] Only request data necessary to appear as if opening Nintendo's app --- src/cli/nso/friendcode.ts | 12 +++++++----- src/cli/nso/friends.ts | 11 +++++++---- src/cli/nso/lookup.ts | 9 ++++++++- src/cli/nso/permissions.ts | 9 ++++++++- src/cli/nso/user.ts | 11 +++++++++-- src/cli/nso/webservices.ts | 7 +++++-- src/cli/nso/webservicetoken.ts | 7 +++++-- src/common/auth/coral.ts | 6 ++++++ src/common/auth/nooklink.ts | 9 ++++++++- src/common/auth/splatnet2.ts | 9 ++++++++- 10 files changed, 71 insertions(+), 19 deletions(-) diff --git a/src/cli/nso/friendcode.ts b/src/cli/nso/friendcode.ts index 6b6dd8b..37835fe 100644 --- a/src/cli/nso/friendcode.ts +++ b/src/cli/nso/friendcode.ts @@ -2,7 +2,7 @@ import createDebug from 'debug'; import type { Arguments as ParentArguments } from '../nso.js'; import { ArgumentsCamelCase, Argv, YargsArguments } from '../../util/yargs.js'; import { initStorage } from '../../util/storage.js'; -import { getToken } from '../../common/auth/coral.js'; +import { getToken, Login } from '../../common/auth/coral.js'; const debug = createDebug('cli:nso:friendcode'); @@ -35,10 +35,12 @@ export async function handler(argv: ArgumentsCamelCase) { await storage.getItem('NintendoAccountToken.' + usernsid); const {nso, data} = await getToken(storage, token, argv.zncProxyUrl); - const announcements = await nso.getAnnouncements(); - const friends = await nso.getFriendList(); - const webservices = await nso.getWebServices(); - const activeevent = await nso.getActiveEvent(); + if (data[Login]) { + const announcements = await nso.getAnnouncements(); + const friends = await nso.getFriendList(); + const webservices = await nso.getWebServices(); + const activeevent = await nso.getActiveEvent(); + } const friendcodeurl = await nso.getFriendCodeUrl(); diff --git a/src/cli/nso/friends.ts b/src/cli/nso/friends.ts index 4b5e290..8345b96 100644 --- a/src/cli/nso/friends.ts +++ b/src/cli/nso/friends.ts @@ -5,7 +5,7 @@ import type { Arguments as ParentArguments } from '../nso.js'; import { ArgumentsCamelCase, Argv, YargsArguments } from '../../util/yargs.js'; import { initStorage } from '../../util/storage.js'; import { hrduration } from '../../util/misc.js'; -import { getToken } from '../../common/auth/coral.js'; +import { getToken, Login } from '../../common/auth/coral.js'; const debug = createDebug('cli:nso:friends'); @@ -40,10 +40,13 @@ export async function handler(argv: ArgumentsCamelCase) { await storage.getItem('NintendoAccountToken.' + usernsid); const {nso, data} = await getToken(storage, token, argv.zncProxyUrl); - const announcements = await nso.getAnnouncements(); + if (data[Login]) { + const announcements = await nso.getAnnouncements(); + const webservices = await nso.getWebServices(); + const activeevent = await nso.getActiveEvent(); + } + const friends = await nso.getFriendList(); - const webservices = await nso.getWebServices(); - const activeevent = await nso.getActiveEvent(); if (argv.jsonPrettyPrint) { console.log(JSON.stringify(friends.result.friends, null, 4)); diff --git a/src/cli/nso/lookup.ts b/src/cli/nso/lookup.ts index 46a11a3..2dc3f1d 100644 --- a/src/cli/nso/lookup.ts +++ b/src/cli/nso/lookup.ts @@ -2,7 +2,7 @@ import createDebug from 'debug'; import type { Arguments as ParentArguments } from '../nso.js'; import { ArgumentsCamelCase, Argv, YargsArguments } from '../../util/yargs.js'; import { initStorage } from '../../util/storage.js'; -import { getToken } from '../../common/auth/coral.js'; +import { getToken, Login } from '../../common/auth/coral.js'; const debug = createDebug('cli:nso:lookup'); @@ -39,6 +39,13 @@ export async function handler(argv: ArgumentsCamelCase) { await storage.getItem('NintendoAccountToken.' + usernsid); const {nso, data} = await getToken(storage, token, argv.zncProxyUrl); + if (data[Login]) { + const announcements = await nso.getAnnouncements(); + const friends = await nso.getFriendList(); + const webservices = await nso.getWebServices(); + const activeevent = await nso.getActiveEvent(); + } + const user = await nso.getUserByFriendCode(argv.id); if (argv.jsonPrettyPrint) { diff --git a/src/cli/nso/permissions.ts b/src/cli/nso/permissions.ts index 1d820aa..108426a 100644 --- a/src/cli/nso/permissions.ts +++ b/src/cli/nso/permissions.ts @@ -3,7 +3,7 @@ import { PresencePermissions } from '../../api/coral-types.js'; import type { Arguments as ParentArguments } from '../nso.js'; import { ArgumentsCamelCase, Argv, YargsArguments } from '../../util/yargs.js'; import { initStorage } from '../../util/storage.js'; -import { getToken } from '../../common/auth/coral.js'; +import { getToken, Login } from '../../common/auth/coral.js'; const debug = createDebug('cli:nso:permissions'); @@ -43,6 +43,13 @@ export async function handler(argv: ArgumentsCamelCase) { await storage.getItem('NintendoAccountToken.' + usernsid); const {nso, data} = await getToken(storage, token, argv.zncProxyUrl); + if (data[Login]) { + const announcements = await nso.getAnnouncements(); + const friends = await nso.getFriendList(); + const webservices = await nso.getWebServices(); + const activeevent = await nso.getActiveEvent(); + } + const permissions = await nso.getCurrentUserPermissions(); if (argv.presence) { diff --git a/src/cli/nso/user.ts b/src/cli/nso/user.ts index fbe4d77..516b7c7 100644 --- a/src/cli/nso/user.ts +++ b/src/cli/nso/user.ts @@ -2,7 +2,7 @@ import createDebug from 'debug'; import type { Arguments as ParentArguments } from '../nso.js'; import { ArgumentsCamelCase, Argv, YargsArguments } from '../../util/yargs.js'; import { initStorage } from '../../util/storage.js'; -import { getToken } from '../../common/auth/coral.js'; +import { getToken, Login } from '../../common/auth/coral.js'; const debug = createDebug('cli:nso:user'); @@ -33,7 +33,14 @@ export async function handler(argv: ArgumentsCamelCase) { await storage.getItem('NintendoAccountToken.' + usernsid); const {nso, data} = await getToken(storage, token, argv.zncProxyUrl); - if (argv.forceRefresh && 'expires_at' in data) { + if (data[Login]) { + const announcements = await nso.getAnnouncements(); + const friends = await nso.getFriendList(); + const webservices = await nso.getWebServices(); + const activeevent = await nso.getActiveEvent(); + } + + if (argv.forceRefresh && !data[Login]) { const user = await nso.getCurrentUser(); console.log('Nintendo Account', data.user); diff --git a/src/cli/nso/webservices.ts b/src/cli/nso/webservices.ts index d72f573..155254a 100644 --- a/src/cli/nso/webservices.ts +++ b/src/cli/nso/webservices.ts @@ -3,7 +3,7 @@ import Table from '../util/table.js'; import type { Arguments as ParentArguments } from '../nso.js'; import { ArgumentsCamelCase, Argv, YargsArguments } from '../../util/yargs.js'; import { initStorage } from '../../util/storage.js'; -import { getToken } from '../../common/auth/coral.js'; +import { getToken, Login } from '../../common/auth/coral.js'; const debug = createDebug('cli:nso:webservices'); @@ -38,7 +38,10 @@ export async function handler(argv: ArgumentsCamelCase) { await storage.getItem('NintendoAccountToken.' + usernsid); const {nso, data} = await getToken(storage, token, argv.zncProxyUrl); - const announcements = await nso.getAnnouncements(); + if (data[Login]) { + const announcements = await nso.getAnnouncements(); + } + const friends = await nso.getFriendList(); const webservices = await nso.getWebServices(); const activeevent = await nso.getActiveEvent(); diff --git a/src/cli/nso/webservicetoken.ts b/src/cli/nso/webservicetoken.ts index dadb087..fd0eed8 100644 --- a/src/cli/nso/webservicetoken.ts +++ b/src/cli/nso/webservicetoken.ts @@ -2,7 +2,7 @@ import createDebug from 'debug'; import type { Arguments as ParentArguments } from '../nso.js'; import { ArgumentsCamelCase, Argv, YargsArguments } from '../../util/yargs.js'; import { initStorage } from '../../util/storage.js'; -import { getToken } from '../../common/auth/coral.js'; +import { getToken, Login } from '../../common/auth/coral.js'; const debug = createDebug('cli:nso:webservicetoken'); @@ -39,7 +39,10 @@ export async function handler(argv: ArgumentsCamelCase) { await storage.getItem('NintendoAccountToken.' + usernsid); const {nso, data} = await getToken(storage, token, argv.zncProxyUrl); - const announcements = await nso.getAnnouncements(); + if (data[Login]) { + const announcements = await nso.getAnnouncements(); + } + const friends = await nso.getFriendList(); const webservices = await nso.getWebServices(); const activeevent = await nso.getActiveEvent(); diff --git a/src/common/auth/coral.ts b/src/common/auth/coral.ts index 3f199eb..53e52a8 100644 --- a/src/common/auth/coral.ts +++ b/src/common/auth/coral.ts @@ -10,9 +10,13 @@ import { checkUseLimit, SHOULD_LIMIT_USE } from './util.js'; const debug = createDebug('nxapi:auth:coral'); +export const Login = Symbol('Login'); + export interface SavedToken extends CoralAuthData { expires_at: number; proxy_url?: string; + /** Indicates we just logged in and didn't use a cached token */ + [Login]?: boolean; } export async function getToken( @@ -74,6 +78,8 @@ export async function getToken( await storage.setItem('NsoToken.' + token, existingToken); await storage.setItem('NintendoAccountToken.' + data.user.id, token); + existingToken[Login] = true; + return {nso, data: existingToken}; } diff --git a/src/common/auth/nooklink.ts b/src/common/auth/nooklink.ts index f60b558..d540694 100644 --- a/src/common/auth/nooklink.ts +++ b/src/common/auth/nooklink.ts @@ -1,6 +1,6 @@ import createDebug from 'debug'; import persist from 'node-persist'; -import { getToken } from './coral.js'; +import { getToken, Login } from './coral.js'; import NooklinkApi, { NooklinkUserApi } from '../../api/nooklink.js'; import { AuthToken, Users } from '../../api/nooklink-types.js'; import { WebServiceToken } from '../../api/coral-types.js'; @@ -47,6 +47,13 @@ export async function getWebServiceToken( const {nso, data} = await getToken(storage, token, proxy_url); + if (data[Login]) { + const announcements = await nso.getAnnouncements(); + const friends = await nso.getFriendList(); + const webservices = await nso.getWebServices(); + const activeevent = await nso.getActiveEvent(); + } + const existingToken: SavedToken = await NooklinkApi.loginWithCoral(nso, data.user); await storage.setItem('NookToken.' + token, existingToken); diff --git a/src/common/auth/splatnet2.ts b/src/common/auth/splatnet2.ts index ad41e43..2948a68 100644 --- a/src/common/auth/splatnet2.ts +++ b/src/common/auth/splatnet2.ts @@ -2,7 +2,7 @@ import process from 'node:process'; import * as fs from 'node:fs'; import createDebug from 'debug'; import persist from 'node-persist'; -import { getToken } from './coral.js'; +import { getToken, Login } from './coral.js'; import SplatNet2Api, { SplatNet2AuthData, updateIksmSessionLastUsed } from '../../api/splatnet2.js'; import { checkUseLimit, SHOULD_LIMIT_USE } from './util.js'; import { Jwt } from '../../util/jwt.js'; @@ -44,6 +44,13 @@ export async function getIksmToken( const {nso, data} = await getToken(storage, token, proxy_url); + if (data[Login]) { + const announcements = await nso.getAnnouncements(); + const friends = await nso.getFriendList(); + const webservices = await nso.getWebServices(); + const activeevent = await nso.getActiveEvent(); + } + const existingToken: SavedIksmSessionToken = await SplatNet2Api.loginWithCoral(nso, data.user); await storage.setItem('IksmToken.' + token, existingToken);