@@ -3,6 +3,8 @@ import { inject, injectable } from "tsyringe";
33import { PlayerPlayData , PlayerMusicData , PlayerPlayLog , PlayerCourseLog , PlayerCustomizeSetting , PlayerRivalData } from "../../types/p2d/index.js" ;
44import { Pdata } from "../../types/p2d/pdata.js" ;
55import { fromKBinXml , toObject } from "../../utils/kbinxml.js" ;
6+ import { to_bin , to_xml } from "@geekidos/kbinxml" ;
7+ import { sha256 } from "../../utils/sha256.js" ;
68
79@injectable ( )
810export class UserService {
@@ -143,6 +145,15 @@ export class UserService {
143145 if ( ! result )
144146 return undefined ;
145147
148+ // TODO: implement actual kbinxml encoding/decoding library in js
149+ // to avoid hacking like this and in utils/kbinxml/kxml-value.ts
150+ let { data } = to_xml ( result . pdata . buffer )
151+ if ( ! data . includes ( "premium_pass" ) ) {
152+ data = data . replace ( "<pdata>" , "<pdata><premium_pass __type=\"bool\">1</premium_pass>" )
153+ result . pdata . buffer = to_bin ( data ) . data ;
154+ result . check_sum = sha256 ( Buffer . from ( result . pdata . buffer ) ) ;
155+ }
156+
146157 return {
147158 pdata : Buffer . from ( result . pdata . buffer ) ,
148159 check_sum : result . check_sum ,
@@ -153,19 +164,19 @@ export class UserService {
153164 const binary = await this . getPDataBinary ( player ) ;
154165 if ( ! binary ) return undefined ;
155166
156- return toObject ( fromKBinXml ( binary . pdata ) ) . pdata ;
167+ return toObject ( fromKBinXml ( binary . pdata as Uint8Array ) ) . pdata ;
157168 }
158169
159170 upsertPDataBinary ( player : string , pdata : Buffer , check_sum : string ) {
160- const unpacked = toObject ( fromKBinXml ( pdata ) ) as { pdata : Pdata } ;
171+ const unpacked = toObject ( fromKBinXml ( pdata as Uint8Array ) ) as { pdata : Pdata } ;
161172 const { djname, infinitas_id } = unpacked . pdata . player ;
162173
163174 return this . playDataCol
164175 . updateOne ( { _id : player } , {
165176 $set : {
166177 djname, infinitas_id,
167178
168- pdata : new Binary ( pdata ) ,
179+ pdata : new Binary ( pdata as Uint8Array ) ,
169180 check_sum,
170181 }
171182 } , { upsert : true } ) ;
0 commit comments