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 Size | 42.70 GiB |
+ | Packed Size | 35.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 Size | 42.70 GiB |
+ | Packed Size | 35.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 Size | 566.08 MiB |
+ | Packed Size | 253.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',
},
},
},