mirror of
https://github.com/samuelthomas2774/nxapi.git
synced 2026-03-21 18:04:10 -05:00
Accept numbers for the hash_method option when generating f parameters
This commit is contained in:
parent
960624cae4
commit
66c8efdb96
|
|
@ -1,7 +1,7 @@
|
|||
import fetch, { Response } from 'node-fetch';
|
||||
import { v4 as uuidgen } from 'uuid';
|
||||
import createDebug from 'debug';
|
||||
import { f, FResult } from './f.js';
|
||||
import { f, FResult, HashMethod } from './f.js';
|
||||
import { AccountLogin, AccountToken, Announcements, CurrentUser, CurrentUserPermissions, Event, Friends, GetActiveEventResult, PresencePermissions, User, WebServices, WebServiceToken, CoralErrorResponse, CoralResponse, CoralStatus, CoralSuccessResponse, FriendCodeUser, FriendCodeUrl, AccountTokenParameter, AccountLoginParameter } from './coral-types.js';
|
||||
import { getNintendoAccountToken, getNintendoAccountUser, NintendoAccountToken, NintendoAccountUser } from './na.js';
|
||||
import { ErrorResponse } from './util.js';
|
||||
|
|
@ -178,7 +178,7 @@ export default class CoralApi {
|
|||
}
|
||||
|
||||
async getWebServiceToken(id: string) {
|
||||
const data = await f(this.token, '2', this.useragent ?? getAdditionalUserAgents());
|
||||
const data = await f(this.token, HashMethod.WEB_SERVICE, this.useragent ?? getAdditionalUserAgents());
|
||||
|
||||
const req = {
|
||||
id,
|
||||
|
|
@ -195,7 +195,8 @@ export default class CoralApi {
|
|||
// Nintendo Account token
|
||||
const nintendoAccountToken = await getNintendoAccountToken(token, ZNCA_CLIENT_ID);
|
||||
|
||||
const fdata = await f(nintendoAccountToken.id_token, '1', this.useragent ?? getAdditionalUserAgents());
|
||||
const fdata = await f(nintendoAccountToken.id_token, HashMethod.CORAL,
|
||||
this.useragent ?? getAdditionalUserAgents());
|
||||
|
||||
const req: AccountTokenParameter = {
|
||||
naBirthday: user.birthday,
|
||||
|
|
@ -250,7 +251,7 @@ export default class CoralApi {
|
|||
// Nintendo Account user data
|
||||
const user = await getNintendoAccountUser(nintendoAccountToken);
|
||||
|
||||
const fdata = await f(nintendoAccountToken.id_token, '1', useragent);
|
||||
const fdata = await f(nintendoAccountToken.id_token, HashMethod.CORAL, useragent);
|
||||
|
||||
debug('Getting Nintendo Switch Online app token');
|
||||
|
||||
|
|
|
|||
44
src/api/f.ts
44
src/api/f.ts
|
|
@ -16,7 +16,12 @@ export abstract class ZncaApi {
|
|||
public useragent?: string
|
||||
) {}
|
||||
|
||||
abstract genf(token: string, hash_method: '1' | '2'): Promise<FResult>;
|
||||
abstract genf(token: string, hash_method: HashMethod): Promise<FResult>;
|
||||
}
|
||||
|
||||
export enum HashMethod {
|
||||
CORAL = 1,
|
||||
WEB_SERVICE = 2,
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -67,7 +72,7 @@ export interface LoginHashApiError {
|
|||
}
|
||||
|
||||
export async function flapg(
|
||||
hash_method: '1' | '2', token: string,
|
||||
hash_method: HashMethod, token: string,
|
||||
timestamp?: string | number, request_id?: string,
|
||||
useragent?: string
|
||||
) {
|
||||
|
|
@ -79,7 +84,7 @@ export async function flapg(
|
|||
});
|
||||
|
||||
const req: FlapgApiRequest = {
|
||||
hash_method,
|
||||
hash_method: '' + hash_method as `${HashMethod}`,
|
||||
token,
|
||||
timestamp: typeof timestamp === 'number' ? '' + timestamp : undefined,
|
||||
request_id,
|
||||
|
|
@ -115,7 +120,13 @@ export enum FlapgIid {
|
|||
APP = 'app',
|
||||
}
|
||||
|
||||
export type FlapgApiRequest = IminkFRequest;
|
||||
export interface FlapgApiRequest {
|
||||
hash_method: '1' | '2';
|
||||
token: string;
|
||||
timestamp?: string;
|
||||
request_id?: string;
|
||||
}
|
||||
|
||||
export type FlapgApiResponse = IminkFResponse;
|
||||
export type FlapgApiError = IminkFError;
|
||||
|
||||
|
|
@ -125,7 +136,7 @@ export class ZncaApiFlapg extends ZncaApi {
|
|||
return getLoginHash(id_token, timestamp, this.useragent);
|
||||
}
|
||||
|
||||
async genf(token: string, hash_method: '1' | '2') {
|
||||
async genf(token: string, hash_method: HashMethod) {
|
||||
const request_id = uuidgen();
|
||||
|
||||
const result = await flapg(hash_method, token, undefined, request_id, this.useragent);
|
||||
|
|
@ -145,7 +156,7 @@ export class ZncaApiFlapg extends ZncaApi {
|
|||
//
|
||||
|
||||
export async function iminkf(
|
||||
hash_method: '1' | '2', token: string,
|
||||
hash_method: HashMethod, token: string,
|
||||
timestamp?: number, request_id?: string,
|
||||
useragent?: string
|
||||
) {
|
||||
|
|
@ -190,9 +201,9 @@ export async function iminkf(
|
|||
}
|
||||
|
||||
export interface IminkFRequest {
|
||||
hash_method: '1' | '2';
|
||||
hash_method: 1 | 2 | '1' | '2';
|
||||
token: string;
|
||||
timestamp?: string;
|
||||
timestamp?: string | number;
|
||||
request_id?: string;
|
||||
}
|
||||
export interface IminkFResponse {
|
||||
|
|
@ -206,7 +217,7 @@ export interface IminkFError {
|
|||
}
|
||||
|
||||
export class ZncaApiImink extends ZncaApi {
|
||||
async genf(token: string, hash_method: '1' | '2') {
|
||||
async genf(token: string, hash_method: HashMethod) {
|
||||
const request_id = uuidgen();
|
||||
|
||||
const result = await iminkf(hash_method, token, undefined, request_id, this.useragent);
|
||||
|
|
@ -226,7 +237,7 @@ export class ZncaApiImink extends ZncaApi {
|
|||
//
|
||||
|
||||
export async function genf(
|
||||
url: string, hash_method: '1' | '2',
|
||||
url: string, hash_method: HashMethod,
|
||||
token: string, timestamp?: number, request_id?: string,
|
||||
useragent?: string
|
||||
) {
|
||||
|
|
@ -235,7 +246,7 @@ export async function genf(
|
|||
});
|
||||
|
||||
const req: AndroidZncaFRequest = {
|
||||
hash_method,
|
||||
hash_method: '' + hash_method as `${HashMethod}`,
|
||||
token,
|
||||
timestamp,
|
||||
request_id,
|
||||
|
|
@ -260,7 +271,7 @@ export async function genf(
|
|||
|
||||
if ('error' in data) {
|
||||
debugZncaApi('Error getting f parameter "%s"', data.error);
|
||||
throw new ErrorResponse<AndroidZncaFError>('[znca-api] ' + data.error, response, data);
|
||||
throw new ErrorResponse<AndroidZncaFError>('[znca-api] ' + data.error_message ?? data.error, response, data);
|
||||
}
|
||||
|
||||
debugZncaApi('Got f parameter', data, response.headers);
|
||||
|
|
@ -281,6 +292,7 @@ export interface AndroidZncaFResponse {
|
|||
}
|
||||
export interface AndroidZncaFError {
|
||||
error: string;
|
||||
error_message?: string;
|
||||
}
|
||||
|
||||
export class ZncaApiNxapi extends ZncaApi {
|
||||
|
|
@ -288,7 +300,7 @@ export class ZncaApiNxapi extends ZncaApi {
|
|||
super(useragent);
|
||||
}
|
||||
|
||||
async genf(token: string, hash_method: '1' | '2') {
|
||||
async genf(token: string, hash_method: HashMethod) {
|
||||
const request_id = uuidgen();
|
||||
|
||||
const result = await genf(this.url + '/f', hash_method, token, undefined, request_id, this.useragent);
|
||||
|
|
@ -304,7 +316,9 @@ export class ZncaApiNxapi extends ZncaApi {
|
|||
}
|
||||
}
|
||||
|
||||
export async function f(token: string, hash_method: '1' | '2', useragent?: string): Promise<FResult> {
|
||||
export async function f(token: string, hash_method: HashMethod | `${HashMethod}`, useragent?: string): Promise<FResult> {
|
||||
if (typeof hash_method === 'string') hash_method = parseInt(hash_method);
|
||||
|
||||
const provider = getPreferredZncaApiFromEnvironment(useragent) ?? await getDefaultZncaApi(useragent);
|
||||
|
||||
return provider.genf(token, hash_method);
|
||||
|
|
@ -312,7 +326,7 @@ export async function f(token: string, hash_method: '1' | '2', useragent?: strin
|
|||
|
||||
export type FResult = {
|
||||
provider: string;
|
||||
hash_method: '1' | '2';
|
||||
hash_method: HashMethod;
|
||||
token: string;
|
||||
timestamp: number;
|
||||
request_id: string;
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ export async function handler(argv: ArgumentsCamelCase<Arguments>) {
|
|||
await ready;
|
||||
|
||||
let data: {
|
||||
hash_method: '1' | '2';
|
||||
hash_method: '1' | '2' | 1 | 2;
|
||||
token: string;
|
||||
timestamp?: string | number;
|
||||
request_id?: string;
|
||||
|
|
@ -203,6 +203,9 @@ export async function handler(argv: ArgumentsCamelCase<Arguments>) {
|
|||
request_id: data.uuid,
|
||||
};
|
||||
|
||||
if (data && data.hash_method === 1) data.hash_method = '1';
|
||||
if (data && data.hash_method === 2) data.hash_method = '2';
|
||||
|
||||
if (
|
||||
!data ||
|
||||
typeof data !== 'object' ||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ export { default as ZncProxyApi } from '../api/znc-proxy.js';
|
|||
|
||||
export {
|
||||
ZncaApi,
|
||||
HashMethod,
|
||||
getPreferredZncaApiFromEnvironment,
|
||||
getDefaultZncaApi,
|
||||
f,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user