chore: update @pretendonetwork/boss-crypto and @pretendonetwork/grpc

This commit is contained in:
Jonathan Barrow 2025-11-01 16:21:23 -04:00
parent 92f9c09a37
commit 3bf0334c0c
No known key found for this signature in database
GPG Key ID: 2A7DAA6DED5A77E5
9 changed files with 35 additions and 32 deletions

40
package-lock.json generated
View File

@ -10,8 +10,8 @@
"license": "AGPL-3.0-only",
"dependencies": {
"@aws-sdk/client-s3": "^3.723.0",
"@pretendonetwork/boss-crypto": "^1.1.2",
"@pretendonetwork/grpc": "^2.3.2",
"@pretendonetwork/boss-crypto": "^1.1.3",
"@pretendonetwork/grpc": "^2.3.3",
"@typegoose/auto-increment": "^4.13.0",
"commander": "^14.0.0",
"cron": "^4.3.3",
@ -918,9 +918,9 @@
}
},
"node_modules/@bufbuild/protobuf": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.9.0.tgz",
"integrity": "sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==",
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.10.0.tgz",
"integrity": "sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==",
"license": "(Apache-2.0 AND BSD-3-Clause)"
},
"node_modules/@emnapi/core": {
@ -2045,9 +2045,9 @@
}
},
"node_modules/@pretendonetwork/boss-crypto": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@pretendonetwork/boss-crypto/-/boss-crypto-1.1.2.tgz",
"integrity": "sha512-3rDp29vAmOPvQ7L/Vyqon52Wqqz2dvhDdHAOqxruHo5Ag2k0wAnIDBNq5NaTGW+H1OYzkouIR/9nnaOmY1GHXQ==",
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@pretendonetwork/boss-crypto/-/boss-crypto-1.1.3.tgz",
"integrity": "sha512-7SJFgpR7RVsfhWL9SGMbChYrE/IOU5PmO1kWIifXSX5H6GEAIvpdV9HV1werru/pA6DyWJw0dGWlPmHvT3AWnA==",
"license": "LGPL-3.0-only"
},
"node_modules/@pretendonetwork/eslint-config": {
@ -2070,9 +2070,9 @@
}
},
"node_modules/@pretendonetwork/grpc": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-2.3.2.tgz",
"integrity": "sha512-gnSHLHkYVgxb64chdvQGuKfAz14l6KWrjG0ch7l6YwRhnuVYMZNeUM7FNQ0zjwFKo0VAW1uI8UzGnWdzq50MOA==",
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-2.3.3.tgz",
"integrity": "sha512-65QH9XneS1xQDTmZ/0XhHEXCPd4Sx3fMt9RDlCc0m7nl2LhaupkAW//GJhJ4QTGbN3gggv5JKME0ZfFqO6Pqbg==",
"license": "AGPL-3.0-only",
"dependencies": {
"@bufbuild/protobuf": "^2.2.2",
@ -10628,9 +10628,9 @@
}
},
"@bufbuild/protobuf": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.9.0.tgz",
"integrity": "sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA=="
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.10.0.tgz",
"integrity": "sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ=="
},
"@emnapi/core": {
"version": "1.4.5",
@ -11286,9 +11286,9 @@
"optional": true
},
"@pretendonetwork/boss-crypto": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@pretendonetwork/boss-crypto/-/boss-crypto-1.1.2.tgz",
"integrity": "sha512-3rDp29vAmOPvQ7L/Vyqon52Wqqz2dvhDdHAOqxruHo5Ag2k0wAnIDBNq5NaTGW+H1OYzkouIR/9nnaOmY1GHXQ=="
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@pretendonetwork/boss-crypto/-/boss-crypto-1.1.3.tgz",
"integrity": "sha512-7SJFgpR7RVsfhWL9SGMbChYrE/IOU5PmO1kWIifXSX5H6GEAIvpdV9HV1werru/pA6DyWJw0dGWlPmHvT3AWnA=="
},
"@pretendonetwork/eslint-config": {
"version": "0.1.1",
@ -11307,9 +11307,9 @@
}
},
"@pretendonetwork/grpc": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-2.3.2.tgz",
"integrity": "sha512-gnSHLHkYVgxb64chdvQGuKfAz14l6KWrjG0ch7l6YwRhnuVYMZNeUM7FNQ0zjwFKo0VAW1uI8UzGnWdzq50MOA==",
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-2.3.3.tgz",
"integrity": "sha512-65QH9XneS1xQDTmZ/0XhHEXCPd4Sx3fMt9RDlCc0m7nl2LhaupkAW//GJhJ4QTGbN3gggv5JKME0ZfFqO6Pqbg==",
"requires": {
"@bufbuild/protobuf": "^2.2.2",
"nice-grpc-common": "^2.0.2",

View File

@ -14,8 +14,8 @@
},
"dependencies": {
"@aws-sdk/client-s3": "^3.723.0",
"@pretendonetwork/boss-crypto": "^1.1.2",
"@pretendonetwork/grpc": "^2.3.2",
"@pretendonetwork/boss-crypto": "^1.1.3",
"@pretendonetwork/grpc": "^2.3.3",
"@typegoose/auto-increment": "^4.13.0",
"commander": "^14.0.0",
"cron": "^4.3.3",

View File

@ -252,7 +252,7 @@ export function getWUPTaskFile(bossAppID: string, taskID: string, name: string,
return FileWUP.findOne<HydratedFileWUPDocument>(filter);
}
export function getCTRTaskFileBySerialNumber(serialNumber: number): Promise<HydratedFileCTRDocument | null> {
export function getCTRTaskFileBySerialNumber(serialNumber: bigint): Promise<HydratedFileCTRDocument | null> {
verifyConnected();
return FileCTR.findOne<HydratedFileCTRDocument>({

View File

@ -22,7 +22,7 @@ const FileCTRSchema = new mongoose.Schema<IFileCTR, FileCTRModel, IFileCTRMethod
description: String
},
name: String,
serial_number: Number, // * This is effectively the predecessor of the Wii U DataID. TODO - 3DBrew says this is a uint64?
serial_number: BigInt, // * This is effectively the predecessor of the Wii U DataID
payload_contents: [{
title_id: BigInt,
content_datatype: Number,

View File

@ -24,7 +24,7 @@ export async function deleteFile(request: DeleteFileRequest, context: CallContex
let file: HydratedFileCTRDocument | HydratedFileWUPDocument | null;
if (request.platformType === PlatformType.PLATFORM_TYPE_CTR) {
file = await getCTRTaskFileBySerialNumber(Number(dataID));
file = await getCTRTaskFileBySerialNumber(dataID);
} else if (request.platformType === PlatformType.PLATFORM_TYPE_WUP) {
file = await getWUPTaskFileByDataID(dataID);
} else {

View File

@ -40,7 +40,7 @@ export async function listFilesCTR(request: ListFilesCTRRequest): Promise<ListFi
return {
files: files.map(file => ({
deleted: file.deleted,
dataId: BigInt(file.serial_number), // TODO - Is this okay?
dataId: file.serial_number, // TODO - Is this okay?
taskId: file.task_id,
bossAppId: file.boss_app_id,
supportedCountries: file.supported_countries,

View File

@ -22,7 +22,7 @@ export async function updateFileMetadataCTR(request: UpdateFileMetadataCTRReques
throw new ServerError(Status.INVALID_ARGUMENT, 'Missing file update data');
}
const file = await getCTRTaskFileBySerialNumber(Number(serialNumber));
const file = await getCTRTaskFileBySerialNumber(serialNumber);
if (!file || file.deleted) {
throw new ServerError(Status.INVALID_ARGUMENT, `File ${serialNumber} not found`);

View File

@ -1,5 +1,5 @@
import { Status, ServerError } from 'nice-grpc';
import { encrypt3DS } from '@pretendonetwork/boss-crypto';
import { CTR_BOSS_FLAGS, encrypt3DS } from '@pretendonetwork/boss-crypto';
import { isValidCountryCode, isValidLanguage, md5 } from '@/util';
import { connection as databaseConnection, getTask, getCTRTaskFile } from '@/database';
import { FileCTR } from '@/models/file-ctr';
@ -110,10 +110,13 @@ export async function uploadFileCTR(request: UploadFileCTRRequest, context: Call
content: payload.content
}));
// TODO - Add flags here. @pretendonetwork/boss-crypto does not export CTR_BOSS_FLAGS at the moment
let flags = 0n;
if (request.flags?.markArrivedPrivileged) {
flags |= CTR_BOSS_FLAGS.MARK_ARRIVED_PRIVILEGED;
}
// TODO - Somehow support pre-encrypted content?
const encryptedData = encrypt3DS(config.crypto.ctr.aes_key, BigInt(file.serial_number), cryptoOptions);
const encryptedData = encrypt3DS(config.crypto.ctr.aes_key, file.serial_number, cryptoOptions, flags);
const contentHash = md5(encryptedData);
const key = `${bossAppID}/${taskID}/${contentHash}`;
@ -140,7 +143,7 @@ export async function uploadFileCTR(request: UploadFileCTRRequest, context: Call
return {
file: {
deleted: file.deleted,
dataId: BigInt(file.serial_number), // TODO - Is this okay?
dataId: file.serial_number,
taskId: file.task_id,
bossAppId: file.boss_app_id,
supportedCountries: file.supported_countries,

View File

@ -17,7 +17,7 @@ export interface IFileCTR {
description: string;
};
name: string;
serial_number: number; // * This is effectively the predecessor of the Wii U DataID
serial_number: bigint; // * This is effectively the predecessor of the Wii U DataID
payload_contents: {
title_id: bigint;
content_datatype: number;