Merge Helios Launcher v2.2.1 updates.

This commit is contained in:
peunsu 2024-06-22 20:18:47 +09:00
parent 03dccf95a4
commit 6dcaef224b
10 changed files with 1101 additions and 181 deletions

View File

@ -20,7 +20,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v3
with:
node-version: 18
node-version: 20
- name: Set up Python
uses: actions/setup-python@v4

2
.nvmrc
View File

@ -1 +1 @@
18
20

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2017-2022 Daniel D. Scalzi
Copyright (c) 2017-2024 Daniel D. Scalzi
Copyright (c) 2024 peunsu
Permission is hereby granted, free of charge, to any person obtaining a copy

View File

@ -86,7 +86,7 @@ This section details the setup of a basic developmentment environment.
**System Requirements**
* [Node.js][nodejs] v18
* [Node.js][nodejs] v20
---
@ -191,6 +191,7 @@ For instructions on setting up Microsoft Authentication, see https://github.com/
* [Wiki][wiki]
* [Nebula (Create Distribution.json)][nebula]
* [v2 Rewrite Branch (Inactive)][v2branch]
The best way to contact the developers is on Discord.

View File

@ -12,12 +12,122 @@
const ConfigManager = require('./configmanager')
const { LoggerUtil } = require('helios-core')
const { RestResponseStatus } = require('helios-core/common')
const { MojangRestAPI, mojangErrorDisplayable, MojangErrorCode } = require('helios-core/mojang')
const { MicrosoftAuth, microsoftErrorDisplayable, MicrosoftErrorCode } = require('helios-core/microsoft')
const { MojangRestAPI, MojangErrorCode } = require('helios-core/mojang')
const { MicrosoftAuth, MicrosoftErrorCode } = require('helios-core/microsoft')
const { AZURE_CLIENT_ID } = require('./ipcconstants')
const Lang = require('./langloader')
const log = LoggerUtil.getLogger('AuthManager')
// Error messages
function microsoftErrorDisplayable(errorCode) {
switch (errorCode) {
case MicrosoftErrorCode.NO_PROFILE:
return {
title: Lang.queryJS('auth.microsoft.error.noProfileTitle'),
desc: Lang.queryJS('auth.microsoft.error.noProfileDesc')
}
case MicrosoftErrorCode.NO_XBOX_ACCOUNT:
return {
title: Lang.queryJS('auth.microsoft.error.noXboxAccountTitle'),
desc: Lang.queryJS('auth.microsoft.error.noXboxAccountDesc')
}
case MicrosoftErrorCode.XBL_BANNED:
return {
title: Lang.queryJS('auth.microsoft.error.xblBannedTitle'),
desc: Lang.queryJS('auth.microsoft.error.xblBannedDesc')
}
case MicrosoftErrorCode.UNDER_18:
return {
title: Lang.queryJS('auth.microsoft.error.under18Title'),
desc: Lang.queryJS('auth.microsoft.error.under18Desc')
}
case MicrosoftErrorCode.UNKNOWN:
return {
title: Lang.queryJS('auth.microsoft.error.unknownTitle'),
desc: Lang.queryJS('auth.microsoft.error.unknownDesc')
}
}
}
function mojangErrorDisplayable(errorCode) {
switch(errorCode) {
case MojangErrorCode.ERROR_METHOD_NOT_ALLOWED:
return {
title: Lang.queryJS('auth.mojang.error.methodNotAllowedTitle'),
desc: Lang.queryJS('auth.mojang.error.methodNotAllowedDesc')
}
case MojangErrorCode.ERROR_NOT_FOUND:
return {
title: Lang.queryJS('auth.mojang.error.notFoundTitle'),
desc: Lang.queryJS('auth.mojang.error.notFoundDesc')
}
case MojangErrorCode.ERROR_USER_MIGRATED:
return {
title: Lang.queryJS('auth.mojang.error.accountMigratedTitle'),
desc: Lang.queryJS('auth.mojang.error.accountMigratedDesc')
}
case MojangErrorCode.ERROR_INVALID_CREDENTIALS:
return {
title: Lang.queryJS('auth.mojang.error.invalidCredentialsTitle'),
desc: Lang.queryJS('auth.mojang.error.invalidCredentialsDesc')
}
case MojangErrorCode.ERROR_RATELIMIT:
return {
title: Lang.queryJS('auth.mojang.error.tooManyAttemptsTitle'),
desc: Lang.queryJS('auth.mojang.error.tooManyAttemptsDesc')
}
case MojangErrorCode.ERROR_INVALID_TOKEN:
return {
title: Lang.queryJS('auth.mojang.error.invalidTokenTitle'),
desc: Lang.queryJS('auth.mojang.error.invalidTokenDesc')
}
case MojangErrorCode.ERROR_ACCESS_TOKEN_HAS_PROFILE:
return {
title: Lang.queryJS('auth.mojang.error.tokenHasProfileTitle'),
desc: Lang.queryJS('auth.mojang.error.tokenHasProfileDesc')
}
case MojangErrorCode.ERROR_CREDENTIALS_MISSING:
return {
title: Lang.queryJS('auth.mojang.error.credentialsMissingTitle'),
desc: Lang.queryJS('auth.mojang.error.credentialsMissingDesc')
}
case MojangErrorCode.ERROR_INVALID_SALT_VERSION:
return {
title: Lang.queryJS('auth.mojang.error.invalidSaltVersionTitle'),
desc: Lang.queryJS('auth.mojang.error.invalidSaltVersionDesc')
}
case MojangErrorCode.ERROR_UNSUPPORTED_MEDIA_TYPE:
return {
title: Lang.queryJS('auth.mojang.error.unsupportedMediaTypeTitle'),
desc: Lang.queryJS('auth.mojang.error.unsupportedMediaTypeDesc')
}
case MojangErrorCode.ERROR_GONE:
return {
title: Lang.queryJS('auth.mojang.error.accountGoneTitle'),
desc: Lang.queryJS('auth.mojang.error.accountGoneDesc')
}
case MojangErrorCode.ERROR_UNREACHABLE:
return {
title: Lang.queryJS('auth.mojang.error.unreachableTitle'),
desc: Lang.queryJS('auth.mojang.error.unreachableDesc')
}
case MojangErrorCode.ERROR_NOT_PAID:
return {
title: Lang.queryJS('auth.mojang.error.gameNotPurchasedTitle'),
desc: Lang.queryJS('auth.mojang.error.gameNotPurchasedDesc')
}
case MojangErrorCode.UNKNOWN:
return {
title: Lang.queryJS('auth.mojang.error.unknownErrorTitle'),
desc: Lang.queryJS('auth.mojang.error.unknownErrorDesc')
}
default:
throw new Error(`Unknown error code: ${errorCode}`)
}
}
// Functions
/**

View File

@ -279,6 +279,11 @@ latestVersionTitle = "You Are Running the Latest Version"
checkForUpdatesButton = "Check for Updates"
checkingForUpdatesButton = "Checking for Updates.."
[js.settings.msftLogin]
errorTitle = "Microsoft Login Failed"
errorMessage = "We were unable to authenticate your Microsoft account. Please try again."
okButton = "OK"
[js.uibinder.startup]
fatalErrorTitle = "Fatal Error: Unable to Load Distribution Index"
fatalErrorMessage = "A connection could not be established to our servers to download the distribution index. No local copies were available to load. <br><br>The distribution index is an essential file which provides the latest server information. The launcher is unable to start without it. Ensure you are connected to the internet and relaunch the application."
@ -295,3 +300,45 @@ selectAnotherAccountButton = "Select Another Account"
checkingForUpdateButton = "Checking for Updates..."
installNowButton = "Install Now"
checkForUpdatesButton = "Check for Updates"
[js.auth.microsoft.error]
noProfileTitle = "Error During Login:<br>Profile Not Set Up"
noProfileDesc = "Your Microsoft account does not yet have a Minecraft profile set up. If you have recently purchased the game or redeemed it through Xbox Game Pass, you have to set up your profile on <a href=\"https://minecraft.net/\">Minecraft.net</a>.<br><br>If you have not yet purchased the game, you can also do that on <a href=\"https://minecraft.net/\">Minecraft.net</a>."
noXboxAccountTitle = "Error During Login:<br>No Xbox Account"
noXboxAccountDesc = "Your Microsoft account has no Xbox account associated with it."
xblBannedTitle = "Error During Login:<br>Xbox Live Unavailable"
xblBannedDesc = "Your Microsoft account is from a country where Xbox Live is not available or banned."
under18Title = "Error During Login:<br>Parental Approval Required"
under18Desc = "Accounts for users under the age of 18 must be added to a Family by an adult."
unknownTitle = "Unknown Error During Login"
unknownDesc = "An unknown error has occurred. Please see the console for details."
[js.auth.mojang.error]
methodNotAllowedTitle = "Internal Error:<br>Method Not Allowed"
methodNotAllowedDesc = "Method not allowed. Please report this error."
notFoundTitle = "Internal Error:<br>Not Found"
notFoundDesc = "The authentication endpoint was not found. Please report this issue."
accountMigratedTitle = "Error During Login:<br>Account Migrated"
accountMigratedDesc = "You've attempted to login with a migrated account. Try again using the account email as the username."
invalidCredentialsTitle = "Error During Login:<br>Invalid Credentials"
invalidCredentialsDesc = "The email or password you've entered is incorrect. Please try again."
tooManyAttemptsTitle = "Error During Login:<br>Too Many Attempts"
tooManyAttemptsDesc = "There have been too many login attempts with this account recently. Please try again later."
invalidTokenTitle = "Error During Login:<br>Invalid Token"
invalidTokenDesc = "The provided access token is invalid."
tokenHasProfileTitle = "Error During Login:<br>Token Has Profile"
tokenHasProfileDesc = "Access token already has a profile assigned. Selecting profiles is not implemented yet."
credentialsMissingTitle = "Error During Login:<br>Credentials Missing"
credentialsMissingDesc = "Username/password was not submitted or password is less than 3 characters."
invalidSaltVersionTitle = "Error During Login:<br>Invalid Salt Version"
invalidSaltVersionDesc = "Invalid salt version."
unsupportedMediaTypeTitle = "Internal Error:<br>Unsupported Media Type"
unsupportedMediaTypeDesc = "Unsupported media type. Please report this error."
accountGoneTitle = "Error During Login:<br>Account Migrated"
accountGoneDesc = "Account has been migrated to a Microsoft account. Please log in with Microsoft."
unreachableTitle = "Error During Login:<br>Unreachable"
unreachableDesc = "Unable to reach the authentication servers. Ensure that they are online and you are connected to the internet."
gameNotPurchasedTitle = "Error During Login:<br>Game Not Purchased"
gameNotPurchasedDesc = "The account you are trying to login with has not purchased a copy of Minecraft. You may purchase a copy on <a href=\"https://minecraft.net/\">Minecraft.net</a>"
unknownErrorTitle = "Unknown Error During Login"
unknownErrorDesc = "An unknown error has occurred. Please see the console for details."

View File

@ -99,8 +99,8 @@ jvmOptsTitle = "JVM 인수 설정"
jvmOptsDesc = "실행 시 JVM에 전달할 추가 인수를 설정합니다. <em>-Xms</em>와 <em>-Xmx</em>는 포함되지 않아야 합니다."
launcherTabHeaderText = "런처 설정"
launcherTabHeaderDesc = "런처와 관련된 설정입니다."
allowPrereleaseTitle = "Pre-Release 업데이트를 허용합니다."
allowPrereleaseDesc = "Pre-Release는 안정성이 보장되지 않은 기능을 포함할 수 있습니다.<br>현재 실행 중인 런처가 Pre-Release 버전이라면, 이 설정은 항상 활성화됩니다."
allowPrereleaseTitle = "프리릴리즈 업데이트를 허용합니다."
allowPrereleaseDesc = "프리릴리즈는 안정성이 보장되지 않은 기능을 포함할 수 있습니다.<br>현재 실행 중인 런처가 Pre-Release 버전이라면, 이 설정은 항상 활성화됩니다."
dataDirectoryTitle = "데이터 디렉토리"
selectDataDirectory = "데이터 디렉토리 선택"
chooseFolder = "폴더 선택"
@ -279,6 +279,11 @@ latestVersionTitle = "최신 버전을 사용하고 있습니다"
checkForUpdatesButton = "업데이트 확인"
checkingForUpdatesButton = "업데이트 확인 중.."
[js.settings.msftLogin]
errorTitle = "Microsoft 로그인 실패"
errorMessage = "Microsoft 계정으로 로그인할 수 없습니다. 다시 시도해 주세요."
okButton = "확인"
[js.uibinder.startup]
fatalErrorTitle = "치명적 오류: 배포 인덱스를 불러올 수 없습니다."
fatalErrorMessage = "배포 인덱스 다운로드 서버에 연결할 수 없습니다. 로컬 복사본도 존재하지 않습니다.<br><br>배포 인덱스는 최신 서버 정보를 제공하는 필수 파일로 런처를 실행하기 위해 필요합니다. 인터넷 연결을 확인하고 프로그램을 다시 실행해 보세요."
@ -295,3 +300,45 @@ selectAnotherAccountButton = "다른 계정 선택"
checkingForUpdateButton = "업데이트 확인 중..."
installNowButton = "설치하기"
checkForUpdatesButton = "업데이트 확인"
[js.auth.microsoft.error]
noProfileTitle = "로그인 중 오류 발생:<br>프로필이 설정되지 않음"
noProfileDesc = "Microsoft 계정에 마인크래프트 프로필이 설정되지 않았습니다. 마인크래프트를 구매했거나 Xbox Game Pass를 사용 중이라면, <a href=\"https://www.minecraft.net/\">Minecraft.net</a>에서 로그인하여 프로필을 설정하세요.<br><br>아직 게임을 구매하지 않았다면, <a href=\"https://www.minecraft.net/\">Minecraft.net</a>에서 구매하세요."
noXboxAccountTitle = "로그인 중 오류 발생:<br>Xbox 계정 없음"
noXboxAccountDesc = "Microsoft 계정에 연결된 Xbox 계정이 없습니다."
xblBannedTitle = "로그인 중 오류 발생:<br>Xbox Live 이용 불가"
xblBannedDesc = "Xbox Live 이용이 제한되거나 차단된 국가의 Microsoft 계정으로 로그인할 수 없습니다."
under18Title = "로그인 중 오류 발생:<br>부모 동의 필요"
under18Desc = "18세 미만 유저의 계정은 부모의 가족 구성원으로 등록되어 있어야 합니다."
unknownTitle = "로그인 중 알 수 없는 오류 발생"
unknownDesc = "로그인 중 알 수 없는 오류가 발생했습니다. 콘솔에서 자세한 내용을 확인하세요."
[js.auth.mojang.error]
methodNotAllowedTitle = "내부 오류 발생:<br>허용되지 않은 메소드"
methodNotAllowedDesc = "메소드가 허용되지 않습니다. 개발자에게 이 문제를 보고하세요."
notFoundTitle = "내부 오류 발생:<br>엔드포인트를 찾을 수 없음"
notFoundDesc = "인증 엔드포인트를 찾을 수 없습니다. 개발자에게 이 문제를 보고하세요."
accountMigratedTitle = "로그인 중 오류 발생:<br>마이그레이션된 계정"
accountMigratedDesc = "마이그레이션된 계정으로 로그인을 시도했습니다. 사용자 이름에 계정 이메일 주소를 입력하여 로그인하세요."
invalidCredentialsTitle = "로그인 중 오류 발생:<br>잘못된 자격 증명"
invalidCredentialsDesc = "이메일 또는 비밀번호가 잘못되었습니다. 다시 시도하세요."
tooManyAttemptsTitle = "로그인 중 오류 발생:<br>시도 횟수 초과"
tooManyAttemptsDesc = "로그인 시도 횟수가 너무 많습니다. 잠시 후 다시 시도하세요."
invalidTokenTitle = "로그인 중 오류 발생:<br>유효하지 않은 토큰"
invalidTokenDesc = "유효하지 않은 액세스 토큰입니다."
tokenHasProfileTitle = "로그인 중 오류 발생:<br>프로필이 할당된 토큰"
tokenHasProfileDesc = "액세스 토큰에 이미 프로필이 할당되어 있습니다. 프로필 선택은 아직 지원되지 않습니다."
credentialsMissingTitle = "로그인 중 오류 발생:<br>자격 증명 누락"
credentialsMissingDesc = "사용자 이름 또는 비밀번호가 비어있거나, 비밀번호가 3글자 미만으로 입력되었습니다."
invalidSaltVersionTitle = "로그인 중 오류 발생:<br>유효하지 않은 Salt 버전"
invalidSaltVersionDesc = "유효하지 않은 Salt 버전입니다."
unsupportedMediaTypeTitle = "내부 오류 발새:<br>지원되지 않는 미디어 타입"
unsupportedMediaTypeDesc = "지원되지 않는 미디어 타입입니다. 개발자에게 이 문제를 보고하세요."
accountGoneTitle = "로그인 중 오류 발생:<br>마이그레이션된 계정"
accountGoneDesc = "Microsoft로 마이그레이션된 계정입니다. Microsoft 계정으로 로그인하세요."
unreachableTitle = "로그인 중 오류 발생:<br>서버에 연결할 수 없음"
unreachableDesc = "인증 서버에 연결할 수 없습니다. 인증 서버가 온라인 상태이고 인터넷 연결이 정상인지 확인하세요."
gameNotPurchasedTitle = "로그인 중 오류 발생:<br>게임을 구매하지 않음"
gameNotPurchasedDesc = "로그인을 시도한 계정은 마인크래프트를 구매하지 않았습니다. <a href=\"https://minecraft.net/\">Minecraft.net</a>에서 게임을 구매하세요."
unknownErrorTitle = "로그인 중 알 수 없는 오류 발생"
unknownErrorDesc = "로그인 중 알 수 없는 오류가 발생했습니다. 콘솔에서 자세한 내용을 확인하세요."

View File

@ -2,7 +2,7 @@ appId: 'mrslauncher'
productName: 'MRS Launcher'
artifactName: 'MRS-Launcher-setup-${version}.${ext}'
copyright: 'Copyright © 2018-2022 Daniel Scalzi, Copyright © 2024 peunsu'
copyright: 'Copyright © 2018-2024 Daniel Scalzi, Copyright © 2024 peunsu'
asar: true
compression: 'maximum'

1035
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "mrslauncher",
"version": "3.0.2",
"version": "3.0.3",
"productName": "MRS Launcher",
"description": "Modded Minecraft Launcher",
"author": "Daniel Scalzi (https://github.com/dscalzi/), peunsu (https://github.com/peunsu)",
@ -20,29 +20,29 @@
"lint": "eslint --config .eslintrc.json ."
},
"engines": {
"node": "18.x.x"
"node": "20.x.x"
},
"dependencies": {
"@electron/remote": "^2.1.0",
"adm-zip": "^0.5.9",
"@electron/remote": "^2.1.2",
"adm-zip": "^0.5.12",
"discord-rpc-patch": "^4.0.1",
"ejs": "^3.1.9",
"ejs-electron": "^2.1.1",
"electron-updater": "^6.1.7",
"ejs": "^3.1.10",
"ejs-electron": "^3.0.0",
"electron-updater": "^6.1.8",
"fs-extra": "^11.1.1",
"github-syntax-dark": "^0.5.0",
"got": "^11.8.5",
"helios-core": "~2.1.1",
"helios-core": "~2.2.1",
"helios-distribution-types": "^1.3.0",
"jquery": "^3.7.1",
"lodash.merge": "^4.6.2",
"semver": "^7.5.4",
"semver": "^7.6.0",
"toml": "^3.0.0"
},
"devDependencies": {
"electron": "^27.1.3",
"electron-builder": "^24.9.1",
"eslint": "^8.56.0"
"electron": "^30.0.1",
"electron-builder": "^24.13.3",
"eslint": "^8.57.0"
},
"repository": {
"type": "git",