Only request data necessary to appear as if opening Nintendo's app

This commit is contained in:
Samuel Elliott 2022-08-16 17:00:38 +01:00
parent 77f07eb1b3
commit 65d1069edf
No known key found for this signature in database
GPG Key ID: 8420C7CDE43DC4D6
10 changed files with 71 additions and 19 deletions

View File

@ -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<Arguments>) {
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();

View File

@ -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<Arguments>) {
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));

View File

@ -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<Arguments>) {
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) {

View File

@ -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<Arguments>) {
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) {

View File

@ -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<Arguments>) {
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);

View File

@ -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<Arguments>) {
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();

View File

@ -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<Arguments>) {
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();

View File

@ -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};
}

View File

@ -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);

View File

@ -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);