From 4ecb833d352554669c3cf8b71bf92266c939dd29 Mon Sep 17 00:00:00 2001 From: Jonathan Barrow Date: Sat, 26 Aug 2023 02:05:31 -0400 Subject: [PATCH] Separate task ID and in-game ID --- package-lock.json | 14 +++++++------- package.json | 2 +- src/database.ts | 6 +++--- src/models/task.ts | 1 + src/services/grpc/boss/list-files.ts | 4 ---- src/services/grpc/boss/list-tasks.ts | 1 + src/services/grpc/boss/register-task.ts | 18 +++++++++++++----- src/services/grpc/boss/update-file-metadata.ts | 3 +-- src/services/grpc/boss/upload-file.ts | 4 ---- src/types/mongoose/task.ts | 1 + 10 files changed, 28 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 66b13b5..b1e61d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@aws-sdk/client-s3": "^3.395.0", "@pretendonetwork/boss-crypto": "^1.0.0", - "@pretendonetwork/grpc": "^1.0.2", + "@pretendonetwork/grpc": "^1.0.3", "@typegoose/auto-increment": "^3.4.0", "boss-js": "github:PretendoNetwork/boss-js", "cacache": "^18.0.0", @@ -1157,9 +1157,9 @@ "integrity": "sha512-ybd3sB356v5Azxj99R62+7kytgAzfUYuXRJbdOznGL6infgCJ056TjTadN4V48m7t+3f6sPOUgo9YWUFNxlLLg==" }, "node_modules/@pretendonetwork/grpc": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-1.0.2.tgz", - "integrity": "sha512-g78VP+/wY4VIlQ5EXP5lPzXK1uVflrM3ZA0PW1NZi88EaJRqNPVkYmb6iW+FM0j/lxlu07UcwqLJSHsy9eU01Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-1.0.3.tgz", + "integrity": "sha512-NlfzonmHqNRUDuc1nCON6u3f6II3KtSQgs7g5u4TEG8KKIIvBWKQT3mWVsRIkBEEpPdtad/dwASVzIR7lymKWw==", "dependencies": { "long": "^5.2.1", "protobufjs": "^7.2.3" @@ -6291,9 +6291,9 @@ "integrity": "sha512-ybd3sB356v5Azxj99R62+7kytgAzfUYuXRJbdOznGL6infgCJ056TjTadN4V48m7t+3f6sPOUgo9YWUFNxlLLg==" }, "@pretendonetwork/grpc": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-1.0.2.tgz", - "integrity": "sha512-g78VP+/wY4VIlQ5EXP5lPzXK1uVflrM3ZA0PW1NZi88EaJRqNPVkYmb6iW+FM0j/lxlu07UcwqLJSHsy9eU01Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-1.0.3.tgz", + "integrity": "sha512-NlfzonmHqNRUDuc1nCON6u3f6II3KtSQgs7g5u4TEG8KKIIvBWKQT3mWVsRIkBEEpPdtad/dwASVzIR7lymKWw==", "requires": { "long": "^5.2.1", "protobufjs": "^7.2.3" diff --git a/package.json b/package.json index 211563b..adb002c 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dependencies": { "@aws-sdk/client-s3": "^3.395.0", "@pretendonetwork/boss-crypto": "^1.0.0", - "@pretendonetwork/grpc": "^1.0.2", + "@pretendonetwork/grpc": "^1.0.3", "@typegoose/auto-increment": "^3.4.0", "boss-js": "github:PretendoNetwork/boss-js", "cacache": "^18.0.0", diff --git a/src/database.ts b/src/database.ts index 62061fc..6dfc3b9 100644 --- a/src/database.ts +++ b/src/database.ts @@ -44,7 +44,7 @@ export function getTask(bossAppID: string, taskID: string): Promise({ deleted: false, - id: taskID, + id: taskID.slice(0, 7), boss_app_id: bossAppID }); } @@ -53,7 +53,7 @@ export function getTaskFiles(allowDeleted: boolean, bossAppID: string, taskID: s verifyConnected(); const filter: mongoose.FilterQuery = { - task_id: taskID, + task_id: taskID.slice(0, 7), boss_app_id: bossAppID }; @@ -82,7 +82,7 @@ export function getTaskFile(bossAppID: string, taskID: string, name: string): Pr return File.findOne({ deleted: false, boss_app_id: bossAppID, - task_id: taskID, + task_id: taskID.slice(0, 7), name: name }); } diff --git a/src/models/task.ts b/src/models/task.ts index 536616d..7d60111 100644 --- a/src/models/task.ts +++ b/src/models/task.ts @@ -7,6 +7,7 @@ const TaskSchema = new mongoose.Schema({ default: false }, id: String, + in_game_id: String, boss_app_id: String, creator_pid: Number, status: { diff --git a/src/services/grpc/boss/list-files.ts b/src/services/grpc/boss/list-files.ts index 4fe4d7e..5051f4f 100644 --- a/src/services/grpc/boss/list-files.ts +++ b/src/services/grpc/boss/list-files.ts @@ -22,10 +22,6 @@ export async function listFiles(request: ListFilesRequest): Promise 8) { - throw new ServerError(Status.INVALID_ARGUMENT, 'Task ID must be 1-8 characters'); - } - if (!bossAppID) { throw new ServerError(Status.INVALID_ARGUMENT, 'Missing BOSS app ID'); } diff --git a/src/services/grpc/boss/list-tasks.ts b/src/services/grpc/boss/list-tasks.ts index e85845d..4066f94 100644 --- a/src/services/grpc/boss/list-tasks.ts +++ b/src/services/grpc/boss/list-tasks.ts @@ -8,6 +8,7 @@ export async function listTasks(): Promise { tasks: tasks.map(task => ({ deleted: task.deleted, id: task.id, + inGameId: task.in_game_id, bossAppId: task.boss_app_id, creatorPid: task.creator_pid, status: task.status, diff --git a/src/services/grpc/boss/register-task.ts b/src/services/grpc/boss/register-task.ts index 2ed7176..e29d47c 100644 --- a/src/services/grpc/boss/register-task.ts +++ b/src/services/grpc/boss/register-task.ts @@ -24,10 +24,6 @@ export async function registerTask(request: RegisterTaskRequest, context: CallCo throw new ServerError(Status.INVALID_ARGUMENT, 'Missing task ID'); } - if (taskID.length > 8) { - throw new ServerError(Status.INVALID_ARGUMENT, 'Task ID must be 1-8 characters'); - } - if (!bossAppID) { throw new ServerError(Status.INVALID_ARGUMENT, 'Missing BOSS app ID'); } @@ -44,8 +40,19 @@ export async function registerTask(request: RegisterTaskRequest, context: CallCo throw new ServerError(Status.ALREADY_EXISTS, `Task ${taskID} already exists for BOSS app ${bossAppID}`); } + // * BOSS tasks have 2 IDs + // * - 1: The ID which is registered in-game + // * - 2: The ID which is registered on the server + // * The in-game task ID can be any length, but the + // * ID registered on the server is capped at 7 characters. + // * When querying tasks in the API, the server ignores + // * all characters after the 7th. For example, Splatoon + // * registers task optdata2 in-game, but the server + // * tracks it as task optdata + const task = await Task.create({ - id: taskID, + id: taskID.slice(0, 7), + in_game_id: taskID, boss_app_id: bossAppID, creator_pid: user.pid, status: 'open', // TODO - Make this configurable @@ -59,6 +66,7 @@ export async function registerTask(request: RegisterTaskRequest, context: CallCo task: { deleted: task.deleted, id: task.id, + inGameId: task.in_game_id, bossAppId: task.boss_app_id, creatorPid: task.creator_pid, status: task.status, diff --git a/src/services/grpc/boss/update-file-metadata.ts b/src/services/grpc/boss/update-file-metadata.ts index 39a61a7..d014e6d 100644 --- a/src/services/grpc/boss/update-file-metadata.ts +++ b/src/services/grpc/boss/update-file-metadata.ts @@ -41,8 +41,7 @@ export async function updateFileMetadata(request: UpdateFileMetadataRequest, con } } - // TODO - Find a better way to remove "as mongoose.Types.Array" - file.task_id = updateData.taskId; + file.task_id = updateData.taskId.slice(0, 7); file.boss_app_id = updateData.bossAppId; file.supported_countries = updateData.supportedCountries; file.supported_languages = updateData.supportedLanguages; diff --git a/src/services/grpc/boss/upload-file.ts b/src/services/grpc/boss/upload-file.ts index 2d5108f..d10998c 100644 --- a/src/services/grpc/boss/upload-file.ts +++ b/src/services/grpc/boss/upload-file.ts @@ -33,10 +33,6 @@ export async function uploadFile(request: UploadFileRequest, context: CallContex throw new ServerError(Status.INVALID_ARGUMENT, 'Missing task ID'); } - if (taskID.length > 8) { - throw new ServerError(Status.INVALID_ARGUMENT, 'Task ID must be 1-8 characters'); - } - if (!bossAppID) { throw new ServerError(Status.INVALID_ARGUMENT, 'Missing BOSS app ID'); } diff --git a/src/types/mongoose/task.ts b/src/types/mongoose/task.ts index ec2aaf4..3efca4a 100644 --- a/src/types/mongoose/task.ts +++ b/src/types/mongoose/task.ts @@ -3,6 +3,7 @@ import { Model, HydratedDocument } from 'mongoose'; export interface ITask { deleted: boolean; id: string; + in_game_id: string; boss_app_id: string; creator_pid: number; status: 'open'; // TODO - Make this a union. What else is there?