From a355eba85d24340ea70ba8e4644f230fe807a829 Mon Sep 17 00:00:00 2001 From: daydreamer-json Date: Mon, 26 Jan 2026 08:00:33 +0900 Subject: [PATCH] Add patch data --- config/config.yaml | 4 + .../akEndfield/launcher/game/6/all_patch.json | 226 ++++++++++++++++++ output/akEndfield/launcher/game/6/list.md | 96 ++++++++ .../akEndfield/launcher/game/6/list_patch.md | 15 ++ .../launcher/game_resources/6/list.md | 7 + src/cmd.ts | 2 +- src/cmds/authTest.ts | 191 ++++++++++++++- src/cmds/test.ts | 212 ++++++++++++++++ src/types/api/akEndfield/Api.ts | 170 ++++++++++++- src/utils/api.ts | 118 ++++++++- src/utils/config.ts | 8 +- 11 files changed, 1031 insertions(+), 18 deletions(-) create mode 100644 output/akEndfield/launcher/game/6/all_patch.json create mode 100644 output/akEndfield/launcher/game/6/list.md create mode 100644 output/akEndfield/launcher/game/6/list_patch.md create mode 100644 output/akEndfield/launcher/game_resources/6/list.md diff --git a/config/config.yaml b/config/config.yaml index c97eb66..f16ba87 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -8,6 +8,8 @@ network: osWinRel: TiaytKBUIEdoEwRT accountService: osWinRel: d9f6dbb6bbd6bb33 + skport: 6eb76d4e13aa36e6 + binding: 3dacefa138426cfe u8: osWinRel: 973bd727dd11cbb6ead8 osWinRel: YDUTE5gscDZ229CW @@ -17,6 +19,8 @@ network: accountService: YXMuZ3J5cGhsaW5lLmNvbQ== launcher: bGF1bmNoZXIuZ3J5cGhsaW5lLmNvbS9hcGk= u8: dTguZ3J5cGhsaW5lLmNvbQ== + binding: YmluZGluZy1hcGktYWNjb3VudC1wcm9kLmdyeXBobGluZS5jb20= + webview: ZWYtd2Vidmlldy5ncnlwaGxpbmUuY29t launcherAppCode: osWinRel: TiaytKBUIEdoEwRT userAgent: diff --git a/output/akEndfield/launcher/game/6/all_patch.json b/output/akEndfield/launcher/game/6/all_patch.json new file mode 100644 index 0000000..8b2fce6 --- /dev/null +++ b/output/akEndfield/launcher/game/6/all_patch.json @@ -0,0 +1,226 @@ +[ + { + "updatedAt": "2026-01-26T02:33:36.883+09:00", + "req": { + "appCode": "YDUTE5gscDZ229CW", + "launcherAppCode": "TiaytKBUIEdoEwRT", + "channel": 6, + "subChannel": 6, + "launcherSubChannel": 6, + "version": "1.0.13" + }, + "rsp": { + "action": 1, + "version": "1.0.14", + "request_version": "1.0.13", + "pkg": { + "packs": [ + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.001", + "md5": "ad1cffeb64aebb246c55d7b09438008a", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.002", + "md5": "7bd488729aef0fe092877fc0743486a9", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.003", + "md5": "76231688bc7bf0368383edd0a03c426b", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.004", + "md5": "60f885317bf8ecb427ace0e2c9061ce8", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.005", + "md5": "99d240a0ceb9504565aa1a3becb7bef2", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.006", + "md5": "6fe19215340108f2dd8e65ab0e934ddb", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.007", + "md5": "2304524b72f16fc9ab2da8bb8cc663c8", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.008", + "md5": "5731d94ae60808993a6b2d742b4248e2", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.009", + "md5": "2b8fc32ae45d76ddc78f38ffda6de42c", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.010", + "md5": "efdc65be7ee80d6160a1753bdd4777d9", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.011", + "md5": "a4d7c04709286f14222db7045e8d0d06", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.012", + "md5": "3ecc43f11f95ad0d35a58c8ae4f75367", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.013", + "md5": "dbc3d2fa04ccfdb9a82ff99ee08f2f11", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.014", + "md5": "b27e60ed5229fadc88a60bb025b6d864", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.015", + "md5": "ed170d90dc6a68265a935442fbabc05f", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.016", + "md5": "551aa014b722549d577d78c6f4ed9397", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.017", + "md5": "96234d784f2d8a0483d468d6e82e442d", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.018", + "md5": "684bf6171adf7b65a121f505c4f88326", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.019", + "md5": "5aad24ec29a7e86398ac580d07b4d2d0", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.020", + "md5": "7dc498f38cc9bfe2aa49ae46e93ad6d0", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.021", + "md5": "b1c4c8f2567a67e36619b26efd9623b8", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.022", + "md5": "e05f7a7225c1e5bdc455a02ee5f4c592", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.023", + "md5": "c2c56d8f21ebdb6be475f63fa90589ee", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.024", + "md5": "f7a2f641e4ea7adeeef7024600c1df03", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.025", + "md5": "12ec236841e28115281c8ab439a75be2", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.026", + "md5": "d739b06fbc88e2b69fcf49cb8e12dfcb", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.027", + "md5": "cb1c2771307d21525e83a60efe11512e", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.028", + "md5": "dce4b3515d8ae79e6a8bc5ec1468e71b", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.029", + "md5": "d3e04f71d35fb6bd587d2aca7c937cbd", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.030", + "md5": "59297f3044871636f1e99cb5cec8952c", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.031", + "md5": "587f6388563dbf95133c0c0e5b965c92", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.032", + "md5": "f26a973a62e675d9ac62275cf0f597a0", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.033", + "md5": "29029e49fe83003181c2bfc16f80f52f", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.034", + "md5": "8cdd1fcfce5ebf4b2dee38f6e1a5f703", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.035", + "md5": "b24d5bef90212250cbab9c6a7c155dc3", + "package_size": "1073741824" + }, + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.036", + "md5": "c4f3ea1c97272e755fb55598da7b1c8d", + "package_size": "499876308" + } + ], + "total_size": "83933592494", + "file_path": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/files", + "url": "", + "md5": "", + "package_size": "0", + "file_id": "0", + "sub_channel": "6", + "game_files_md5": "c36ad08e5d4a7cfd580228971d7a4563" + }, + "patch": { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/patches/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official_1_0_13.zip", + "md5": "ff65cde0fc206c0968fff396d9a3d0b4", + "package_size": "266133954", + "total_size": "859716544", + "file_id": "1", + "patches": [ + { + "url": "https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/patches/1.0.13/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official_1_0_13.zip.001", + "md5": "ff65cde0fc206c0968fff396d9a3d0b4", + "package_size": "266133954" + } + ] + }, + "state": 0, + "launcher_action": 0 + } + } +] diff --git a/output/akEndfield/launcher/game/6/list.md b/output/akEndfield/launcher/game/6/list.md new file mode 100644 index 0000000..7b3dfd6 --- /dev/null +++ b/output/akEndfield/launcher/game/6/list.md @@ -0,0 +1,96 @@ +# Game Packages + +- [1.0.13 (2026/01/22 16:31:25)](#ver-1.0.13-1769070686) +- [1.0.14 (2026/01/25 18:30:20)](#ver-1.0.14-1769337021) + +

1.0.13 (2026/01/22 16:31:25)

+ + + + +
Unpacked Size42.70 GiB
Packed Size35.46 GiB
+ +| File | MD5 Checksum | Size | +| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------- | ---------: | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.001](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.001) | `a9293f997725d61d71187c57209e636e` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.002](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.002) | `02c003418063205264e5aee87e36f9cb` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.003](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.003) | `9d5cf81af11b85b0367344317cbf5e9f` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.004](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.004) | `dc0d26102e181de1a22b4f3094318a08` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.005](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.005) | `da021e3d3e75ac991778eca3aa90e6cc` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.006](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.006) | `f82ce5ea69d62ffe262c3950a595883e` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.007](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.007) | `e58bb7f771e83821ad634ace3c526698` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.008](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.008) | `7239c3f35d3abad970eceef387c05572` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.009](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.009) | `ce8087310741f0ab07019f4dc783c525` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.010](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.010) | `037649cb0c44b5b10498e4a1ce60dece` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.011](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.011) | `436e2bf3dd2760fb76d8026a7952cf35` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.012](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.012) | `3001d1cbfaa53f8be93be410bcc1780d` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.013](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.013) | `dd1d9a851caf1d4c0970695d99e4b8ac` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.014](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.014) | `5c170b17e37631b5859ef3fb9a46ec60` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.015](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.015) | `4796753e929d523351fd763968d2d7c3` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.016](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.016) | `0287f48269c73ef89da165e633e084d3` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.017](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.017) | `fd3041f85e74b2089d6ff2d740de9785` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.018](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.018) | `693b185f634ba58cd0dd442eb413827f` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.019](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.019) | `f10d3a8d3ef155bd6d2e4613b5e0e6fc` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.020](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.020) | `d8934b6db9372c4876ca5f1e623875ca` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.021](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.021) | `cbb96b0248fa01c42b657899a850b291` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.022](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.022) | `3e73fcef3b876467011df062e7a34b4b` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.023](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.023) | `c34300069b5583b418a10b70cab436eb` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.024](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.024) | `19b5cafa5fe8af5549fbe3a50a79ef5a` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.025](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.025) | `0a32c4951d576d02fd121aa9155f3233` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.026](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.026) | `be4383a5cbbfeb8fe7b0a7c47e3bd5ec` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.027](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.027) | `2264449764ed50609415a12c97e3b2fe` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.028](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.028) | `c7b298c5eed57379465cc6683de69f3d` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.029](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.029) | `fedaf3f16eb3e7daec12c9d617b608cd` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.030](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.030) | `1f6a074fe86e49a93adb0eb3719d7d0a` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.031](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.031) | `a18df89af4fdf15c3d0c529c44634120` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.032](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.032) | `46210e8a82e41c2562ee34bf67d3ab32` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.033](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.033) | `f3bc56bbcc7cec7a7eabb6dcc8f75ccc` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.034](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.034) | `fa540c8f605d3e748c8f94889e6880f0` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.035](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.035) | `16c65c2d5db089f7b3bdb4da64aa0807` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.036](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.13_i5QZm30fLgOWSldR/packs/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official.zip.036) | `9d95ea1486e5cf51d3adf555660a0de6` | 475.73 MiB | + +

1.0.14 (2026/01/25 18:30:20)

+ + + + +
Unpacked Size42.70 GiB
Packed Size35.47 GiB
+ +| File | MD5 Checksum | Size | +| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------- | ---------: | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.001](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.001) | `ad1cffeb64aebb246c55d7b09438008a` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.002](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.002) | `7bd488729aef0fe092877fc0743486a9` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.003](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.003) | `76231688bc7bf0368383edd0a03c426b` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.004](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.004) | `60f885317bf8ecb427ace0e2c9061ce8` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.005](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.005) | `99d240a0ceb9504565aa1a3becb7bef2` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.006](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.006) | `6fe19215340108f2dd8e65ab0e934ddb` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.007](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.007) | `2304524b72f16fc9ab2da8bb8cc663c8` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.008](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.008) | `5731d94ae60808993a6b2d742b4248e2` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.009](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.009) | `2b8fc32ae45d76ddc78f38ffda6de42c` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.010](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.010) | `efdc65be7ee80d6160a1753bdd4777d9` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.011](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.011) | `a4d7c04709286f14222db7045e8d0d06` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.012](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.012) | `3ecc43f11f95ad0d35a58c8ae4f75367` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.013](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.013) | `dbc3d2fa04ccfdb9a82ff99ee08f2f11` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.014](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.014) | `b27e60ed5229fadc88a60bb025b6d864` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.015](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.015) | `ed170d90dc6a68265a935442fbabc05f` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.016](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.016) | `551aa014b722549d577d78c6f4ed9397` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.017](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.017) | `96234d784f2d8a0483d468d6e82e442d` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.018](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.018) | `684bf6171adf7b65a121f505c4f88326` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.019](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.019) | `5aad24ec29a7e86398ac580d07b4d2d0` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.020](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.020) | `7dc498f38cc9bfe2aa49ae46e93ad6d0` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.021](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.021) | `b1c4c8f2567a67e36619b26efd9623b8` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.022](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.022) | `e05f7a7225c1e5bdc455a02ee5f4c592` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.023](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.023) | `c2c56d8f21ebdb6be475f63fa90589ee` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.024](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.024) | `f7a2f641e4ea7adeeef7024600c1df03` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.025](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.025) | `12ec236841e28115281c8ab439a75be2` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.026](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.026) | `d739b06fbc88e2b69fcf49cb8e12dfcb` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.027](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.027) | `cb1c2771307d21525e83a60efe11512e` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.028](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.028) | `dce4b3515d8ae79e6a8bc5ec1468e71b` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.029](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.029) | `d3e04f71d35fb6bd587d2aca7c937cbd` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.030](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.030) | `59297f3044871636f1e99cb5cec8952c` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.031](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.031) | `587f6388563dbf95133c0c0e5b965c92` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.032](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.032) | `f26a973a62e675d9ac62275cf0f597a0` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.033](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.033) | `29029e49fe83003181c2bfc16f80f52f` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.034](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.034) | `8cdd1fcfce5ebf4b2dee38f6e1a5f703` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.035](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.035) | `b24d5bef90212250cbab9c6a7c155dc3` | 1.00 GiB | +| [Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.036](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/packs/Beyond_Release_v1d0-Rel-os-5157154-11_prod_obt_official.zip.036) | `c4f3ea1c97272e755fb55598da7b1c8d` | 476.72 MiB | diff --git a/output/akEndfield/launcher/game/6/list_patch.md b/output/akEndfield/launcher/game/6/list_patch.md new file mode 100644 index 0000000..7eb7138 --- /dev/null +++ b/output/akEndfield/launcher/game/6/list_patch.md @@ -0,0 +1,15 @@ +# Game Patch Packages + +- [1.0.13 → 1.0.14 (2026/01/26 01:33:36)](#ver-1.0.13-1.0.14-1769362417) + +

1.0.13 → 1.0.14 (2026/01/26 01:33:36)

+ + + + +
Unpacked Size566.08 MiB
Packed Size253.81 MiB
+ +| File | MD5 Checksum | Size | +| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------- | ---------: | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official_1_0_13.zip](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/patches/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official_1_0_13.zip) | `ff65cde0fc206c0968fff396d9a3d0b4` | 253.81 MiB | +| [Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official_1_0_13.zip.001](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/update/6/6/Windows/1.0.14_Qk2mXHuAH1JWKF37/patches/1.0.13/Beyond_Release_v1d0-Rel-os-5157154-10_prod_obt_official_1_0_13.zip.001) | `ff65cde0fc206c0968fff396d9a3d0b4` | 253.81 MiB | diff --git a/output/akEndfield/launcher/game_resources/6/list.md b/output/akEndfield/launcher/game_resources/6/list.md new file mode 100644 index 0000000..d4e154a --- /dev/null +++ b/output/akEndfield/launcher/game_resources/6/list.md @@ -0,0 +1,7 @@ +# Game Resources + +| Res version | Initial | Main | Game version | +| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------- | +| `initial_5327933-13_main_5327933-13` | [5327933-13](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/resource/Windows/initial/5327933-13_MxibWISDlHu4FYDu/files) | [5327933-13](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/resource/Windows/main/5327933-13_pYX1R4dE1CSyfylE/files) | 1.0.13 | +| `initial_5340632-14_main_5340632-14` | [5340632-14](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/resource/Windows/initial/5340632-14_dQKNcTzL53b3s9ZH/files) | [5340632-14](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/resource/Windows/main/5340632-14_9p3lPE9qFFEWBOaC/files) | 1.0.13 | +| `initial_5367902-17_main_5367902-17` | [5367902-17](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/resource/Windows/initial/5367902-17_LrQj49LPFpyDgIej/files) | [5367902-17](https://beyond.hg-cdn.com/YDUTE5gscDZ229CW/1.0/resource/Windows/main/5367902-17_fLACemodWWueNQYf/files) | 1.0.13, 1.0.14 | diff --git a/src/cmd.ts b/src/cmd.ts index c1c912a..c3924c4 100644 --- a/src/cmd.ts +++ b/src/cmd.ts @@ -44,7 +44,7 @@ async function parseCommand() { ) .command( ['authTest [token] [email] [password]'], - 'Auth test command', + 'Auth and gacha fetch test command', (yargs) => { yargs .positional('token', { diff --git a/src/cmds/authTest.ts b/src/cmds/authTest.ts index 49ea39f..06d89e2 100644 --- a/src/cmds/authTest.ts +++ b/src/cmds/authTest.ts @@ -1,6 +1,7 @@ import chalk from 'chalk'; import CliTable3 from 'cli-table3'; import { HTTPError } from 'ky'; +import { DateTime } from 'luxon'; import prompts from 'prompts'; import apiUtils from '../utils/api.js'; import argvUtils from '../utils/argv.js'; @@ -35,8 +36,10 @@ async function mainCmdHandler() { argvUtils.setArgv({ ...argvUtils.getArgv(), token: tokenUserRsp }); } } + logger.info('Authorization in progress ...'); if (needRetrieveToken === false) { try { + logger.debug('Retrieving account service OAuth 2.0 code ...'); oauth2TokenPreRsp = await apiUtils.apiAkEndfield.accountService.user.oauth2.v2.grant( cfg.appCode.accountService.osWinRel, argvUtils.getArgv()['token'], @@ -82,7 +85,7 @@ async function mainCmdHandler() { argvUtils.setArgv({ ...argvUtils.getArgv(), password: pwdRsp }); } })(); - logger.info('Retrieving account service token ...'); + logger.debug('Retrieving account service token ...'); const accSrvTokenRsp = await apiUtils.apiAkEndfield.accountService.user.auth.v1.tokenByEmailPassword( argvUtils.getArgv()['email'], argvUtils.getArgv()['password'], @@ -90,37 +93,116 @@ async function mainCmdHandler() { argvUtils.setArgv({ ...argvUtils.getArgv(), token: accSrvTokenRsp.data.token }); } - logger.info('Retrieving account service OAuth 2.0 token ...'); - const oauth2TokenRsp = await apiUtils.apiAkEndfield.accountService.user.oauth2.v2.grant( - cfg.appCode.accountService.osWinRel, + oauth2TokenPreRsp === null ? logger.debug('Retrieving account service OAuth 2.0 code ...') : undefined; + const oauth2TokenRsp = + oauth2TokenPreRsp === null + ? await apiUtils.apiAkEndfield.accountService.user.oauth2.v2.grant( + cfg.appCode.accountService.osWinRel, + argvUtils.getArgv()['token'], + ) + : oauth2TokenPreRsp; + const oauth2TokenBindRsp = await apiUtils.apiAkEndfield.accountService.user.oauth2.v2.grant( + cfg.appCode.accountService.binding, argvUtils.getArgv()['token'], + 1, ); - logger.info('Retrieving u8 access token ...'); + logger.debug('Retrieving u8 access token ...'); const u8TokenRsp = await apiUtils.apiAkEndfield.u8.user.auth.v2.tokenByChToken( cfg.appCode.u8.osWinRel, cfg.channel.osWinRel, oauth2TokenRsp.data.code, ); + // logger.debug('Retrieving u8 OAuth 2.0 code ...'); + // const u8OAuth2Rsp = await apiUtils.apiAkEndfield.u8.user.auth.v2.grant(u8TokenRsp.data.token); logger.info('Authentication successful!'); - logger.info('Retrieving user account data ...'); + logger.info('Retrieving user information data ...'); + + logger.debug('Retrieving user account data ...'); const userAccData = await apiUtils.apiAkEndfield.accountService.user.info.v1.basic( cfg.appCode.accountService.osWinRel, argvUtils.getArgv()['token'], ); - logger.info('Retrieving user game server data ...'); + logger.debug('Retrieving user game server data ...'); const userGameData = await apiUtils.apiAkEndfield.u8.game.server.v1.serverList(u8TokenRsp.data.token); + const userGameBindingData = await apiUtils.apiAkEndfield.binding.account.binding.v1.bindingList( + oauth2TokenBindRsp.data.token, + ); + logger.debug('Retrieving gacha record ...'); + const selectedServerId = await (async () => { + const selectedServerAccData = userGameBindingData.data.list + .find((f) => f.appCode === 'endfield')! + .bindingList[0]!.roles.filter((e) => e.isBanned === false) + .sort((a, b) => b.level - a.level)[0]; + if (!selectedServerAccData) throw new Error('Game account not found'); + const id = selectedServerAccData.serverId; + logger.debug('Confirming server availability ...'); + const confirmServerRsp = await apiUtils.apiAkEndfield.u8.game.role.v1.confirmServer( + u8TokenRsp.data.token, + parseInt(id), + ); + if (confirmServerRsp.status !== 0) + throw new Error('Game server availability error: ' + JSON.stringify(confirmServerRsp)); + return id; + })(); + const gachaRecordRsp = await (async () => { + const overallRsp = await (async () => { + const poolTypeList = [ + 'E_CharacterGachaPoolType_Standard', + 'E_CharacterGachaPoolType_Beginner', + 'E_CharacterGachaPoolType_Special', + ] as const; + const recordArr = []; + for (const poolTypeEntry of poolTypeList) { + let seqId: string | null = null; + while (true) { + const rsp = await apiUtils.apiAkEndfield.webview.record.char( + u8TokenRsp.data.token, + parseInt(selectedServerId), + poolTypeEntry, + seqId, + ); + recordArr.push(...rsp.data.list.map((e) => ({ poolType: poolTypeEntry, ...e }))); + logger.trace(`Loaded: ${poolTypeEntry}, ${recordArr.length} entries, hasMore=${rsp.data.hasMore}`); + if (rsp.data.hasMore === false) break; + if (!rsp.data.list.at(-1)) break; + seqId = rsp.data.list.at(-1)!.seqId; + } + } + return recordArr; + })(); + return overallRsp.toReversed(); + })(); + const gachaPoolInfoList = await (async () => { + logger.debug('Retrieving gacha pool info ...'); + const arr = []; + const poolIdList = [...new Set(gachaRecordRsp.map((e) => e.poolId))]; + for (const poolId of poolIdList) { + const rsp = await apiUtils.apiAkEndfield.webview.content(parseInt(selectedServerId), poolId, 'ja-jp'); + arr.push({ poolId, ...rsp.data.pool }); + } + return arr; + })(); logger.info('Data retrieval completed!'); (() => { const table = new CliTable3(termPrettyUtils.cliTableConfig.rounded); table.push( + // [{ colSpan: 2, hAlign: 'center', content: chalk.bold('Account Info') }], ...[ - ['Account ID', userAccData.data.hgId], + ['Hypergryph ID', userAccData.data.hgId], + ['OAuth Grant ID', oauth2TokenRsp.data.uid], + ['Game Overall UID', userGameBindingData.data.list.find((e) => e.appCode === 'endfield')!.bindingList[0]!.uid], ['Email', userAccData.data.realEmail], ['Nickname', userAccData.data.nickName === '' ? chalk.dim('(none)') : userAccData.data.nickName], ['Age Region', userAccData.data.ageGate.regionInfo['en-us']], + [ + 'Registered', + DateTime.fromSeconds( + userGameBindingData.data.list.find((e) => e.appCode === 'endfield')!.bindingList[0]!.registerTs, + ).toFormat('yyyy/MM/dd HH:mm:ss'), + ], ].map((e) => [chalk.dim(e[0]), e[1]]), ); console.log(table.toString()); @@ -147,17 +229,108 @@ async function mainCmdHandler() { const table = new CliTable3(termPrettyUtils.cliTableConfig.rounded); table.push( ...[ - ['ID', 'UID', 'Level', 'Default'].map((e) => chalk.dim(e)), + ['ID', 'UID', 'Lv', 'Found', 'Default', 'Nickname', 'Registered'].map((e) => chalk.dim(e)), ...userGameData.data.serverList.map((e) => [ e.serverId, e.roleId, { hAlign: 'right' as const, content: e.level }, + Boolean( + userGameBindingData.data.list + .find((f) => f.appCode === 'endfield')! + .bindingList[0]!.roles.find((f) => f.serverId === e.serverId), + ), e.defaultChoose, + userGameBindingData.data.list + .find((f) => f.appCode === 'endfield')! + .bindingList[0]!.roles.find((f) => f.serverId === e.serverId)?.nickName, + userGameBindingData.data.list + .find((f) => f.appCode === 'endfield')! + .bindingList[0]!.roles.find((f) => f.serverId === e.serverId)?.registerTs + ? DateTime.fromSeconds( + userGameBindingData.data.list + .find((f) => f.appCode === 'endfield')! + .bindingList[0]!.roles.find((f) => f.serverId === e.serverId)?.registerTs!, + ).toFormat('yyyy/MM/dd HH:mm:ss') + : '', ]), ], ); console.log(table.toString()); })(); + + (() => { + const table = new CliTable3(termPrettyUtils.cliTableConfig.rounded); + table.push( + ...[ + ['Pool ID', 'Pool Name', 'Pulls', '*6', '*5', '*4', 'Pity *6', '*5', 'Latest'].map((e) => chalk.dim(e)), + ...gachaPoolInfoList.map((e) => [ + e.poolId, + e.pool_name, + ...[ + gachaRecordRsp.filter((f) => f.poolId === e.poolId).length, + gachaRecordRsp.filter((f) => f.poolId === e.poolId && f.rarity === 6).length, + gachaRecordRsp.filter((f) => f.poolId === e.poolId && f.rarity === 5).length, + gachaRecordRsp.filter((f) => f.poolId === e.poolId && f.rarity === 4).length, + (() => { + let counter = 0; + for (const pullEntry of gachaRecordRsp.filter((f) => f.poolId === e.poolId).toReversed()) { + if (pullEntry.rarity >= 6) break; + counter++; + } + return String(counter); + })(), + (() => { + let counter = 0; + for (const pullEntry of gachaRecordRsp.filter((f) => f.poolId === e.poolId).toReversed()) { + if (pullEntry.rarity >= 5) break; + counter++; + } + return String(counter); + })(), + ].map((f) => ({ hAlign: 'right' as const, content: f })), + (() => { + const latestRecord = gachaRecordRsp.filter((f) => f.poolId === e.poolId).at(-1)!; + const color = latestRecord.rarity === 6 ? chalk.yellow : chalk.magenta; + return color(`*${latestRecord.rarity} ${latestRecord.charName}`); + })(), + ]), + ], + ); + console.log(table.toString()); + })(); + + (() => { + const tableData: (string | number)[][] = []; + tableData.push(['Pool ID', 'Pool Name', 'Pulled', 'Pity', 'Character'].map((e) => chalk.dim(e))); + for (const [gachaPoolInfoIndex, gachaPoolInfoEntry] of Object.entries(gachaPoolInfoList)) { + const records = gachaRecordRsp.filter((e) => e.poolId === gachaPoolInfoEntry.poolId); + const tableSubData: typeof tableData = []; + let pityR6: number = 0; + let pityR5: number = 0; + for (const record of records) { + pityR6++; + pityR5++; + if (record.rarity >= 5) { + tableSubData.push([ + gachaPoolInfoEntry.poolId, + gachaPoolInfoEntry.pool_name, + DateTime.fromMillis(parseInt(record.gachaTs)).toFormat('yyyy/MM/dd hh:mm:ss'), + record.rarity === 6 ? pityR6 : pityR5, + record.rarity === 6 + ? chalk.yellow(`*${record.rarity} ${record.charName}`) + : chalk.magenta(`*${record.rarity} ${record.charName}`), + ]); + if (record.rarity === 6) pityR6 = 0; + pityR5 = 0; + } + } + tableData.push(...tableSubData.toReversed()); + if (parseInt(gachaPoolInfoIndex) < gachaPoolInfoList.length - 1) tableData.push(Array(4).fill('')); + } + const table = new CliTable3(termPrettyUtils.cliTableConfig.rounded); + table.push(...tableData); + console.log(table.toString()); + })(); } export default mainCmdHandler; diff --git a/src/cmds/test.ts b/src/cmds/test.ts index a56fe69..5d066fe 100644 --- a/src/cmds/test.ts +++ b/src/cmds/test.ts @@ -1,5 +1,6 @@ import path from 'node:path'; import { DateTime } from 'luxon'; +import PQueue from 'p-queue'; import semver from 'semver'; import apiUtils from '../utils/api.js'; import argvUtils from '../utils/argv.js'; @@ -115,6 +116,76 @@ async function mainCmdHandler() { await saveResult(['akEndfield', 'launcher', 'game', channelStr], rsp.version, prettyRsp); })(); + await (async () => { + logger.debug('Fetching latestGame (patch) ...'); + const gameAllJson = await Bun.file( + path.join(argvUtils.getArgv()['outputDir'], 'akEndfield', 'launcher', 'game', channelStr, 'all.json'), + ).json(); + const patchAllJson = await Bun.file( + path.join(argvUtils.getArgv()['outputDir'], 'akEndfield', 'launcher', 'game', channelStr, 'all_patch.json'), + ).json(); + const versionList = ([...new Set(gameAllJson.map((e: any) => e.rsp.version))] as string[]) + .sort((a, b) => semver.compare(b, a)) + .slice(1); + let needWrite: boolean = false; + const queue = new PQueue({ concurrency: appConfig.threadCount.network }); + for (const ver of versionList) { + queue.add(async () => { + const rsp = await apiUtils.apiAkEndfield.launcher.latestGame( + cfg.appCode.game.osWinRel, + cfg.appCode.launcher.osWinRel, + cfg.channel.osWinRel, + cfg.channel.osWinRel, + cfg.channel.osWinRel, + ver, + ); + const prettyRsp = { + req: { + appCode: cfg.appCode.game.osWinRel, + launcherAppCode: cfg.appCode.launcher.osWinRel, + channel: cfg.channel.osWinRel, + subChannel: cfg.channel.osWinRel, + launcherSubChannel: cfg.channel.osWinRel, + version: ver, + }, + rsp, + }; + if (rsp.patch === null) return; + if ( + patchAllJson + .map((e: any) => JSON.stringify({ req: e.req, rsp: e.rsp })) + .includes(JSON.stringify(prettyRsp)) === false + ) { + logger.debug( + `Fetched latestGame (patch): v${rsp.request_version} -> v${rsp.version}, ${mathUtils.formatFileSize( + parseInt(rsp.patch.total_size) - parseInt(rsp.patch.package_size), + { + decimals: 2, + decimalPadding: true, + unitVisible: true, + useBinaryUnit: true, + useBitUnit: false, + unit: null, + }, + )}`, + ); + patchAllJson.push({ + updatedAt: DateTime.now().toISO(), + ...prettyRsp, + }); + needWrite = true; + } + }); + } + await queue.onIdle(); + if (needWrite) { + await Bun.write( + path.join(argvUtils.getArgv()['outputDir'], 'akEndfield', 'launcher', 'game', channelStr, 'all_patch.json'), + JSON.stringify(patchAllJson, null, 2), + ); + } + })(); + await (async () => { logger.debug('Fetching latestGameRes ...'); @@ -202,6 +273,147 @@ async function mainCmdHandler() { ); } })(); + + await (async () => { + //* Markdown generate + await (async () => { + const gameAllJson = await Bun.file( + path.join(argvUtils.getArgv()['outputDir'], 'akEndfield', 'launcher', 'game', channelStr, 'all.json'), + ).json(); + const mdTexts: string[] = []; + mdTexts.push( + ...[ + '# Game Packages\n', + ...gameAllJson.map( + (e: any) => + `- [${e.rsp.version} (${DateTime.fromISO(e.updatedAt, { setZone: true }).setZone('UTC+8').toFormat('yyyy/MM/dd HH:mm:ss')})](#ver-${e.rsp.version}-${Math.ceil(DateTime.fromISO(e.updatedAt).toSeconds())})`, + ), + '', + ], + ...gameAllJson.map((e: any) => + [ + `

${e.rsp.version} (${DateTime.fromISO(e.updatedAt, { setZone: true }).setZone('UTC+8').toFormat('yyyy/MM/dd HH:mm:ss')})

\n`, + ``, + ` `, + ` `, + `
Unpacked Size${mathUtils.formatFileSize( + e.rsp.pkg.total_size - mathUtils.arrayTotal(e.rsp.pkg.packs.map((f: any) => parseInt(f.package_size))), + { + decimals: 2, + decimalPadding: true, + unitVisible: true, + useBinaryUnit: true, + useBitUnit: false, + unit: null, + }, + )}
Packed Size${mathUtils.formatFileSize(mathUtils.arrayTotal(e.rsp.pkg.packs.map((f: any) => parseInt(f.package_size))), { decimals: 2, decimalPadding: true, unitVisible: true, useBinaryUnit: true, useBitUnit: false, unit: null })}
\n`, + `|File|MD5 Checksum|Size|`, + `|:--|:--|--:|`, + ...e.rsp.pkg.packs.map((f: any) => [ + `|[${new URL(f.url).pathname.split('/').pop() ?? ''}](${f.url})|\`${f.md5}\`|${mathUtils.formatFileSize(parseInt(f.package_size), { decimals: 2, decimalPadding: true, unitVisible: true, useBinaryUnit: true, useBitUnit: false, unit: null })}|`, + ]), + '', + ].join('\n'), + ), + ); + await Bun.write( + path.join(argvUtils.getArgv()['outputDir'], 'akEndfield', 'launcher', 'game', channelStr, 'list.md'), + mdTexts.join('\n'), + ); + })(); + + await (async () => { + const gameAllJson = await Bun.file( + path.join(argvUtils.getArgv()['outputDir'], 'akEndfield', 'launcher', 'game', channelStr, 'all_patch.json'), + ).json(); + const mdTexts: string[] = []; + mdTexts.push( + ...[ + '# Game Patch Packages\n', + ...gameAllJson.map( + (e: any) => + `- [${e.rsp.request_version} → ${e.rsp.version} (${DateTime.fromISO(e.updatedAt, { setZone: true }).setZone('UTC+8').toFormat('yyyy/MM/dd HH:mm:ss')})](#ver-${e.rsp.request_version}-${e.rsp.version}-${Math.ceil(DateTime.fromISO(e.updatedAt).toSeconds())})`, + ), + '', + ], + ...gameAllJson.map((e: any) => + [ + `

${e.rsp.request_version} → ${e.rsp.version} (${DateTime.fromISO(e.updatedAt, { setZone: true }).setZone('UTC+8').toFormat('yyyy/MM/dd HH:mm:ss')})

\n`, + ``, + ` `, + ` `, + `
Unpacked Size${mathUtils.formatFileSize( + e.rsp.patch.total_size - + mathUtils.arrayTotal(e.rsp.patch.patches.map((f: any) => parseInt(f.package_size))), + { + decimals: 2, + decimalPadding: true, + unitVisible: true, + useBinaryUnit: true, + useBitUnit: false, + unit: null, + }, + )}
Packed Size${mathUtils.formatFileSize(mathUtils.arrayTotal(e.rsp.patch.patches.map((f: any) => parseInt(f.package_size))), { decimals: 2, decimalPadding: true, unitVisible: true, useBinaryUnit: true, useBitUnit: false, unit: null })}
\n`, + `|File|MD5 Checksum|Size|`, + `|:--|:--|--:|`, + ...(e.rsp.patch.url + ? [ + `|[${new URL(e.rsp.patch.url).pathname.split('/').pop() ?? ''}](${e.rsp.patch.url})|\`${e.rsp.patch.md5}\`|${mathUtils.formatFileSize(parseInt(e.rsp.patch.package_size), { decimals: 2, decimalPadding: true, unitVisible: true, useBinaryUnit: true, useBitUnit: false, unit: null })}|`, + ] + : []), + ...e.rsp.patch.patches.map((f: any) => [ + `|[${new URL(f.url).pathname.split('/').pop() ?? ''}](${f.url})|\`${f.md5}\`|${mathUtils.formatFileSize(parseInt(f.package_size), { decimals: 2, decimalPadding: true, unitVisible: true, useBinaryUnit: true, useBitUnit: false, unit: null })}|`, + ]), + '', + ].join('\n'), + ), + ); + await Bun.write( + path.join(argvUtils.getArgv()['outputDir'], 'akEndfield', 'launcher', 'game', channelStr, 'list_patch.md'), + mdTexts.join('\n'), + ); + })(); + + await (async () => { + const gameAllJson = await Bun.file( + path.join(argvUtils.getArgv()['outputDir'], 'akEndfield', 'launcher', 'game_resources', channelStr, 'all.json'), + ).json(); + const resVersionSet: { + resVersion: string; + rsp: { rsp: Awaited> }; + versions: string[]; + }[] = (() => { + const resVersions: string[] = [...new Set(gameAllJson.map((e: any) => e.rsp.res_version))] as string[]; + const arr: { resVersion: string; rsp: any; versions: string[] }[] = []; + for (const resVersion of resVersions) { + arr.push({ + resVersion, + rsp: gameAllJson.find((e: any) => e.rsp.res_version === resVersion), + versions: [ + ...new Set( + gameAllJson.filter((e: any) => e.rsp.res_version === resVersion).map((e: any) => e.req.version), + ), + ] as string[], + }); + } + return arr; + })(); + const mdTexts: string[] = []; + mdTexts.push( + '# Game Resources\n', + '|Res version|Initial|Main|Game version|', + '|--|--|--|--|', + ...resVersionSet.map( + (resVerObj) => + `|\`${resVerObj.rsp.rsp.res_version}\`|[${resVerObj.rsp.rsp.resources.find((e) => e.name === 'initial')!.version}](${resVerObj.rsp.rsp.resources.find((e) => e.name === 'initial')!.path})|[${resVerObj.rsp.rsp.resources.find((e) => e.name === 'main')!.version}](${resVerObj.rsp.rsp.resources.find((e) => e.name === 'main')!.path})|${resVerObj.versions.join(', ')}|`, + ), + ); + await Bun.write( + path.join(argvUtils.getArgv()['outputDir'], 'akEndfield', 'launcher', 'game_resources', channelStr, 'list.md'), + mdTexts.join('\n'), + ); + })(); + })(); } export default mainCmdHandler; diff --git a/src/types/api/akEndfield/Api.ts b/src/types/api/akEndfield/Api.ts index c14dcb0..47a0241 100644 --- a/src/types/api/akEndfield/Api.ts +++ b/src/types/api/akEndfield/Api.ts @@ -17,7 +17,18 @@ type LauncherLatestGame = { sub_channel: string; game_files_md5: string; }; - patch: unknown; + patch: { + url: string; + md5: string; + package_size: string; + total_size: string; + file_id: string; + patches: { + url: string; + md5: string; + package_size: string; + }[]; + } | null; state: number; launcher_action: number; }; @@ -156,11 +167,33 @@ type AccSrvUserInfoV1Basic = { type: string; }; +type AccSrvUserInfoV1ThirdParty = { + data: { + thirdPartyInfo: { + name: string; + channelId: number; // 2=google, 3=facebook, 4=apple, 5=twitter + }[]; + }; + msg: string; + status: number; + type: string; +}; + type AccSrvUserOAuth2V2Grant = { data: { - uid: string; // ??? + uid: string; // grant uid (Gxxxxxxxxxx) code: string; // this is channel token }; + msg: string; // OK | Login status expired. + status: number; // 0=OK, 3=expired + type: string; +}; + +type AccSrvUserOAuth2V2GrantType1 = { + data: { + hgId: string; // hypergryph account id + token: string; + }; msg: string; // OK, Login status expired. status: number; // 0=OK, 3=expired type: string; @@ -177,6 +210,17 @@ type U8UserAuthV2ChToken = { type: string; }; +type U8UserAuthV2Grant = { + data: { + uid: string; // game overall uid + code: string; + token: string; + }; + msg: string; + status: number; + type: string; +}; + type U8GameServerV1ServerList = { data: { serverList: { @@ -194,6 +238,119 @@ type U8GameServerV1ServerList = { type: string; }; +type U8GameRoleV1ConfirmServer = { + msg: string; + status: number; + type: string; +}; + +type BindApiAccBindV1BindList = { + data: { + list: { + appCode: string; // endfield + appName: string; // 明日方舟终末地 + supportMultiServer: boolean; + bindingList: { + uid: string; // game overall uid + isOfficial: boolean; // maybe always true + isDefault: boolean; + channelMasterId: number; // 6 + channelName: string; // 官服 + isDeleted: boolean; + isBanned: boolean; + registerTs: number; // unix + roles: { + isBanned: boolean; + serverId: string; // 2 + serverName: string; // Asia + roleId: string; // game server uid + nickName: string; + level: number; + isDefault: boolean; + registerTs: number; // unix + }[]; + }[]; + }[]; + }; + msg: string; + status: number; +}; + +type BindApiAccBindV1U8TokenByUid = { + data: { + token: string; // u8 token + }; + msg: string; + status: number; +}; + +type BindApiGeneralV1AuthAppList = { + data: { + appList: { + appCode: 'endfield' | 'arknights'; + appName: string; + channel: { + channelMasterId: number; + channelName: string; + isOfficial: boolean; + }[]; + supportServer: boolean; // is support multi server loc + serverList: { + serverId: string; // 2 or 3 or something + serverName: string; // Asia + }[]; + }[]; + }; + msg: string; + status: number; +}; + +type WebViewRecordChar = { + code: number; // 0 = ok + data: { + list: { + poolId: string; // beginner, standard, special_1_0_1, ... + poolName: string; // localized pool name + charId: string; // chr_0016_laevat or something + charName: string; // localized chara name + rarity: number; // 6-4 + isFree: boolean; + isNew: boolean; + gachaTs: string; // unix + seqId: string; + }[]; + hasMore: boolean; + }; + msg: string; +}; + +type WebViewRecordContent = { + code: number; // 0 = ok + data: { + pool: { + pool_gacha_type: string; // char + pool_name: string; // localized pool name + pool_type: string; // newbie or special or normal + up6_name: string; // localized up6 chara name, may blank + up6_image: string; + up5_name: string; + up5_image: string; + up6_item_name: string; // localized up6 item name (Laevatain's Token or something) + rotate_image: string; + ticket_name: string; // Firewalker's Trail HH Permit or something + ticket_ten_name: string; // Firewalker's Trail 10×Permit or something + all: { + id: string; // chr_0016_laevat or something + name: string; // localized chara name + rarity: number; // 6-4 + }[]; + rotate_list: unknown[]; // ??? + }; + timezone: number; // asia is 8 (hour) + }; + msg: string; +}; + export type { LauncherLatestGame, LauncherLatestGameResources, @@ -205,7 +362,16 @@ export type { LauncherWebAnnouncement, AccSrvUserAuthV1TokenByEmail, AccSrvUserInfoV1Basic, + AccSrvUserInfoV1ThirdParty, AccSrvUserOAuth2V2Grant, + AccSrvUserOAuth2V2GrantType1, U8UserAuthV2ChToken, + U8UserAuthV2Grant, U8GameServerV1ServerList, + U8GameRoleV1ConfirmServer, + BindApiAccBindV1BindList, + BindApiAccBindV1U8TokenByUid, + BindApiGeneralV1AuthAppList, + WebViewRecordChar, + WebViewRecordContent, }; diff --git a/src/utils/api.ts b/src/utils/api.ts index 89a926b..ef7bbb5 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -269,18 +269,20 @@ export default { }, oauth2: { v2: { - grant: async ( + grant: async ( appCode: string, token: string, - type: number = 0, - ): Promise => { + type: T = 0 as any, // 0 = return grant uid (Gxxxxxxxxx) and code, 1 = return hgId and token + ): Promise< + T extends 0 ? TypesApiAkEndfield.AccSrvUserOAuth2V2Grant : TypesApiAkEndfield.AccSrvUserOAuth2V2GrantType1 + > => { const rsp = await ky .post(`https://${appConfig.network.api.akEndfield.base.accountService}/user/oauth2/v2/grant`, { ...defaultKySettings, json: { appCode, token, type }, }) .json(); - return rsp as TypesApiAkEndfield.AccSrvUserOAuth2V2Grant; + return rsp as any; }, }, }, @@ -295,6 +297,18 @@ export default { .json(); return rsp as TypesApiAkEndfield.AccSrvUserInfoV1Basic; }, + thirdParty: async ( + appCode: string, + token: string, + ): Promise => { + const rsp = await ky + .get(`https://${appConfig.network.api.akEndfield.base.accountService}/user/info/v1/third_party`, { + ...defaultKySettings, + searchParams: { appCode, token }, + }) + .json(); + return rsp as TypesApiAkEndfield.AccSrvUserInfoV1ThirdParty; + }, }, }, }, @@ -328,6 +342,19 @@ export default { .json(); return rsp as TypesApiAkEndfield.U8UserAuthV2ChToken; }, + grant: async ( + token: string, + platform: number = 2, + type: number = 0, + ): Promise => { + const rsp = await ky + .post(`https://${appConfig.network.api.akEndfield.base.u8}/u8/user/auth/v2/grant`, { + ...defaultKySettings, + json: { token, type, platform }, + }) + .json(); + return rsp as TypesApiAkEndfield.U8UserAuthV2Grant; + }, }, }, }, @@ -345,6 +372,89 @@ export default { }, }, }, + role: { + v1: { + confirmServer: async ( + token: string, + serverId: number, + ): Promise => { + const rsp = await ky + .post(`https://${appConfig.network.api.akEndfield.base.u8}/game/role/v1/confirm_server`, { + ...defaultKySettings, + json: { token, serverId: String(serverId) }, + }) + .json(); + return rsp as TypesApiAkEndfield.U8GameRoleV1ConfirmServer; + }, + }, + }, + }, + }, + binding: { + account: { + binding: { + v1: { + bindingList: async ( + // appCode: 'arknights' | 'endfield', + token: string, + ): Promise => { + const rsp = await ky + .get(`https://${appConfig.network.api.akEndfield.base.binding}/account/binding/v1/binding_list`, { + ...defaultKySettings, + searchParams: { token }, + }) + .json(); + return rsp as TypesApiAkEndfield.BindApiAccBindV1BindList; + }, + u8TokenByUid: async ( + token: string, + uid: string, + ): Promise => { + const rsp = await ky + .post(`https://${appConfig.network.api.akEndfield.base.binding}/account/binding/v1/u8_token_by_uid`, { + ...defaultKySettings, + json: { token, uid }, + }) + .json(); + return rsp as TypesApiAkEndfield.BindApiAccBindV1U8TokenByUid; + }, + }, + }, + }, + }, + webview: { + record: { + char: async ( + token: string, + serverId: number, // 2 or 3 + poolType: + | 'E_CharacterGachaPoolType_Beginner' + | 'E_CharacterGachaPoolType_Standard' + | 'E_CharacterGachaPoolType_Special', + seqId: string | null, + lang: (typeof launcherWebLang)[number] = 'ja-jp', + ): Promise => { + const rsp = await ky + .get(`https://${appConfig.network.api.akEndfield.base.webview}/api/record/char`, { + ...defaultKySettings, + searchParams: { lang, seq_id: seqId ?? undefined, pool_type: poolType, token, server_id: serverId }, + }) + .json(); + return rsp as TypesApiAkEndfield.WebViewRecordChar; + }, + }, + content: async ( + serverId: number, // 2 or 3 + poolId: string, + lang: (typeof launcherWebLang)[number] = 'ja-jp', + ): Promise => { + const rsp = await ky + .get(`https://${appConfig.network.api.akEndfield.base.webview}/api/content`, { + ...defaultKySettings, + searchParams: { lang, pool_id: poolId, server_id: serverId }, + }) + .json(); + return rsp as TypesApiAkEndfield.WebViewRecordContent; }, }, }, diff --git a/src/utils/config.ts b/src/utils/config.ts index b61e1fb..77934fe 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -18,7 +18,7 @@ type ConfigType = AllRequired< appCode: { game: { osWinRel: string }; launcher: { osWinRel: string }; - accountService: { osWinRel: string }; + accountService: { osWinRel: string; skport: string; binding: string }; u8: { osWinRel: string }; }; channel: { osWinRel: number }; @@ -26,6 +26,8 @@ type ConfigType = AllRequired< accountService: string; launcher: string; u8: string; + binding: string; + webview: string; }; }; }; @@ -62,7 +64,7 @@ const initialConfig: ConfigType = { appCode: { game: { osWinRel: 'YDUTE5gscDZ229CW' }, launcher: { osWinRel: 'TiaytKBUIEdoEwRT' }, - accountService: { osWinRel: 'd9f6dbb6bbd6bb33' }, + accountService: { osWinRel: 'd9f6dbb6bbd6bb33', skport: '6eb76d4e13aa36e6', binding: '3dacefa138426cfe' }, u8: { osWinRel: '973bd727dd11cbb6ead8' }, }, channel: { osWinRel: 6 }, @@ -70,6 +72,8 @@ const initialConfig: ConfigType = { accountService: 'YXMuZ3J5cGhsaW5lLmNvbQ==', launcher: 'bGF1bmNoZXIuZ3J5cGhsaW5lLmNvbS9hcGk=', u8: 'dTguZ3J5cGhsaW5lLmNvbQ==', + binding: 'YmluZGluZy1hcGktYWNjb3VudC1wcm9kLmdyeXBobGluZS5jb20=', + webview: 'ZWYtd2Vidmlldy5ncnlwaGxpbmUuY29t', }, }, },