Add coral/SplatNet 3 client

https://github.com/samuelthomas2774/nxapi/issues/42
This commit is contained in:
Samuel Elliott
2022-12-26 20:51:30 +00:00
parent 11077b02ee
commit 788083b7f6
13 changed files with 965 additions and 5 deletions

View File

@@ -280,6 +280,14 @@ export default class CoralApi {
return {nso: this.createWithSavedToken(data, useragent), data};
}
static async createWithNintendoAccountToken(
token: NintendoAccountToken, user: NintendoAccountUser,
useragent = getAdditionalUserAgents()
) {
const data = await this.loginWithNintendoAccountToken(token, user, useragent);
return {nso: this.createWithSavedToken(data, useragent), data};
}
static createWithSavedToken(data: CoralAuthData, useragent = getAdditionalUserAgents()) {
return new this(
data.credential.accessToken,
@@ -291,9 +299,7 @@ export default class CoralApi {
static async loginWithSessionToken(token: string, useragent = getAdditionalUserAgents()): Promise<CoralAuthData> {
const { default: { coral: config } } = await import('../common/remote-config.js');
if (!config) throw new Error('Remote configuration prevents Coral authentication');
const znca_useragent = `com.nintendo.znca/${config.znca_version}(${ZNCA_PLATFORM}/${ZNCA_PLATFORM_VERSION})`;
// Nintendo Account token
const nintendoAccountToken = await getNintendoAccountToken(token, ZNCA_CLIENT_ID);
@@ -301,6 +307,19 @@ export default class CoralApi {
// Nintendo Account user data
const user = await getNintendoAccountUser(nintendoAccountToken);
return this.loginWithNintendoAccountToken(nintendoAccountToken, user, useragent);
}
static async loginWithNintendoAccountToken(
nintendoAccountToken: NintendoAccountToken,
user: NintendoAccountUser,
useragent = getAdditionalUserAgents()
) {
const { default: { coral: config } } = await import('../common/remote-config.js');
if (!config) throw new Error('Remote configuration prevents Coral authentication');
const znca_useragent = `com.nintendo.znca/${config.znca_version}(${ZNCA_PLATFORM}/${ZNCA_PLATFORM_VERSION})`;
const fdata = await f(nintendoAccountToken.id_token, HashMethod.CORAL, useragent);
debug('Getting Nintendo Switch Online app token');

View File

@@ -116,7 +116,7 @@ export interface NintendoAccountSessionToken {
code: string;
}
export interface NintendoAccountSessionTokenJwtPayload extends JwtPayload {
jti: string;
jti: number;
typ: 'session_token';
iss: 'https://accounts.nintendo.com';
/** Unknown - scopes the token is valid for? */