feat(grpc): implement getPNIDs

This commit is contained in:
Jemma Poffinbarger 2026-04-19 13:39:32 -05:00
parent 77feb81df0
commit 876a182e7b
2 changed files with 123 additions and 1 deletions

View File

@ -0,0 +1,120 @@
// import { Status, ServerError } from 'nice-grpc';
import { getPNIDByPID } from '@/database';
import { PNID_PERMISSION_FLAGS } from '@/types/common/permission-flags';
import { config } from '@/config-manager';
import { Device } from '@/models/device';
import type { GetPNIDsRequest, GetPNIDsResponse } from '@pretendonetwork/grpc/account/v2/get_pnids_rpc';
export async function getPNIDs(request: GetPNIDsRequest): Promise<GetPNIDsResponse> {
const response: GetPNIDsResponse = { userData: [] };
for (const pid of request.pid) {
const pnid = await getPNIDByPID(pid);
if (!pnid) {
response.userData[pid] = {
deleted: true,
pid: pid,
username: 'Unknown',
accessLevel: -1,
serverAccessLevel: 'prod',
mii: {
name: 'Unknown',
data: '',
url: ''
},
creationDate: '',
birthdate: '',
gender: '',
country: '',
language: '',
emailAddress: '',
tierName: '',
permissions: {
bannedAllPermanently: false,
bannedAllTemporarily: false,
betaAccess: false,
accessAdminPanel: false,
createServerConfigs: false,
modifyServerConfigs: false,
deployServer: false,
modifyPnids: false,
modifyNexAccounts: false,
modifyConsoles: false,
banPnids: false,
banNexAccounts: false,
banConsoles: false,
moderateMiiverse: false,
createApiKeys: false,
createBossTasks: false,
updateBossTasks: false,
deleteBossTasks: false,
uploadBossFiles: false,
updateBossFiles: false,
deleteBossFiles: false,
updatePnidPermissions: false
},
linkedDevices: []
};
continue;
}
const devices = (await Device.find({
linked_pids: pnid.pid
})).map((device) => {
return {
model: device.get('model'), // ".model" gives the Mongoose model...
serial: device.serial,
linkedPids: device.linked_pids,
accessLevel: device.access_level,
serverAccessLevel: device.server_access_level,
deviceId: device.device_id
};
});
response.userData[pid] = {
deleted: pnid.deleted || pnid.marked_for_deletion,
pid: pnid.pid,
username: pnid.username,
accessLevel: pnid.access_level,
serverAccessLevel: pnid.server_access_level,
mii: {
name: pnid.mii.name,
data: pnid.mii.data,
url: `${config.cdn.base_url}/mii/${pnid.pid}/standard.tga`
},
creationDate: pnid.creation_date,
birthdate: pnid.birthdate,
gender: pnid.gender,
country: pnid.country,
language: pnid.language,
emailAddress: pnid.email.address,
tierName: pnid.connections.stripe.tier_name,
permissions: {
bannedAllPermanently: pnid.hasPermission(PNID_PERMISSION_FLAGS.BANNED_ALL_PERMANENTLY),
bannedAllTemporarily: pnid.hasPermission(PNID_PERMISSION_FLAGS.BANNED_ALL_TEMPORARILY),
betaAccess: pnid.hasPermission(PNID_PERMISSION_FLAGS.BETA_ACCESS),
accessAdminPanel: pnid.hasPermission(PNID_PERMISSION_FLAGS.ACCESS_ADMIN_PANEL),
createServerConfigs: pnid.hasPermission(PNID_PERMISSION_FLAGS.CREATE_SERVER_CONFIGS),
modifyServerConfigs: pnid.hasPermission(PNID_PERMISSION_FLAGS.MODIFY_SERVER_CONFIGS),
deployServer: pnid.hasPermission(PNID_PERMISSION_FLAGS.DEPLOY_SERVER),
modifyPnids: pnid.hasPermission(PNID_PERMISSION_FLAGS.MODIFY_PNIDS),
modifyNexAccounts: pnid.hasPermission(PNID_PERMISSION_FLAGS.MODIFY_NEX_ACCOUNTS),
modifyConsoles: pnid.hasPermission(PNID_PERMISSION_FLAGS.MODIFY_CONSOLES),
banPnids: pnid.hasPermission(PNID_PERMISSION_FLAGS.BAN_PNIDS),
banNexAccounts: pnid.hasPermission(PNID_PERMISSION_FLAGS.BAN_NEX_ACCOUNTS),
banConsoles: pnid.hasPermission(PNID_PERMISSION_FLAGS.BAN_CONSOLES),
moderateMiiverse: pnid.hasPermission(PNID_PERMISSION_FLAGS.MODERATE_MIIVERSE),
createApiKeys: pnid.hasPermission(PNID_PERMISSION_FLAGS.CREATE_API_KEYS),
createBossTasks: pnid.hasPermission(PNID_PERMISSION_FLAGS.CREATE_BOSS_TASKS),
updateBossTasks: pnid.hasPermission(PNID_PERMISSION_FLAGS.UPDATE_BOSS_TASKS),
deleteBossTasks: pnid.hasPermission(PNID_PERMISSION_FLAGS.DELETE_BOSS_TASKS),
uploadBossFiles: pnid.hasPermission(PNID_PERMISSION_FLAGS.UPLOAD_BOSS_FILES),
updateBossFiles: pnid.hasPermission(PNID_PERMISSION_FLAGS.UPDATE_BOSS_FILES),
deleteBossFiles: pnid.hasPermission(PNID_PERMISSION_FLAGS.DELETE_BOSS_FILES),
updatePnidPermissions: pnid.hasPermission(PNID_PERMISSION_FLAGS.UPDATE_PNID_PERMISSIONS)
},
linkedDevices: devices
};
}
return response;
}

View File

@ -34,6 +34,7 @@ import { updateBan } from '@/services/grpc/account/v2/update-ban';
import { pardonBan } from '@/services/grpc/account/v2/pardon-ban';
import { listBanComments } from '@/services/grpc/account/v2/list-ban-comments';
import { createBanComment } from '@/services/grpc/account/v2/create-ban-comment';
import { getPNIDs } from '@/services/grpc/account/v2/get-pnids';
import type { AccountServiceImplementation } from '@pretendonetwork/grpc/account/v2/account_service';
export const accountServiceImplementationV2: AccountServiceImplementation = {
@ -72,5 +73,6 @@ export const accountServiceImplementationV2: AccountServiceImplementation = {
updateBan,
pardonBan,
listBanComments,
createBanComment
createBanComment,
getPNIDs
};