electrify-web 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/LICENSE.md +10 -0
  2. package/README.md +351 -0
  3. package/app/inject/_placeholder +0 -0
  4. package/app/lib/main.js +11772 -0
  5. package/app/lib/main.js.map +1 -0
  6. package/app/lib/preload.js +338 -0
  7. package/app/lib/preload.js.map +1 -0
  8. package/app/lib/static/login.css +57 -0
  9. package/app/lib/static/login.html +24 -0
  10. package/app/lib/static/login.js +10 -0
  11. package/app/nativefier.json +8 -0
  12. package/app/npm-shrinkwrap.json +1170 -0
  13. package/app/package.json +25 -0
  14. package/icon-scripts/convertToIcns +56 -0
  15. package/icon-scripts/convertToIco +39 -0
  16. package/icon-scripts/convertToIconset +68 -0
  17. package/icon-scripts/convertToPng +76 -0
  18. package/icon-scripts/convertToTrayIcon +32 -0
  19. package/lib/autologin/index.d.ts +25 -0
  20. package/lib/autologin/index.js +189 -0
  21. package/lib/autologin/index.js.map +1 -0
  22. package/lib/build/buildIcon.d.ts +6 -0
  23. package/lib/build/buildIcon.js +110 -0
  24. package/lib/build/buildIcon.js.map +1 -0
  25. package/lib/build/buildNativefierApp.d.ts +2 -0
  26. package/lib/build/buildNativefierApp.js +234 -0
  27. package/lib/build/buildNativefierApp.js.map +1 -0
  28. package/lib/build/prepareElectronApp.d.ts +15 -0
  29. package/lib/build/prepareElectronApp.js +220 -0
  30. package/lib/build/prepareElectronApp.js.map +1 -0
  31. package/lib/cli.d.ts +6 -0
  32. package/lib/cli.js +783 -0
  33. package/lib/cli.js.map +1 -0
  34. package/lib/config/index.d.ts +87 -0
  35. package/lib/config/index.js +460 -0
  36. package/lib/config/index.js.map +1 -0
  37. package/lib/constants.d.ts +11 -0
  38. package/lib/constants.js +58 -0
  39. package/lib/constants.js.map +1 -0
  40. package/lib/helpers/fsHelpers.d.ts +2 -0
  41. package/lib/helpers/fsHelpers.js +57 -0
  42. package/lib/helpers/fsHelpers.js.map +1 -0
  43. package/lib/helpers/helpers.d.ts +29 -0
  44. package/lib/helpers/helpers.js +225 -0
  45. package/lib/helpers/helpers.js.map +1 -0
  46. package/lib/helpers/iconShellHelpers.d.ts +5 -0
  47. package/lib/helpers/iconShellHelpers.js +91 -0
  48. package/lib/helpers/iconShellHelpers.js.map +1 -0
  49. package/lib/helpers/upgrade/executableHelpers.d.ts +2 -0
  50. package/lib/helpers/upgrade/executableHelpers.js +173 -0
  51. package/lib/helpers/upgrade/executableHelpers.js.map +1 -0
  52. package/lib/helpers/upgrade/plistInfoXMLHelpers.d.ts +2 -0
  53. package/lib/helpers/upgrade/plistInfoXMLHelpers.js +29 -0
  54. package/lib/helpers/upgrade/plistInfoXMLHelpers.js.map +1 -0
  55. package/lib/helpers/upgrade/rceditGet.d.ts +1 -0
  56. package/lib/helpers/upgrade/rceditGet.js +65 -0
  57. package/lib/helpers/upgrade/rceditGet.js.map +1 -0
  58. package/lib/helpers/upgrade/upgrade.d.ts +8 -0
  59. package/lib/helpers/upgrade/upgrade.js +193 -0
  60. package/lib/helpers/upgrade/upgrade.js.map +1 -0
  61. package/lib/infer/browsers/inferChromeVersion.d.ts +1 -0
  62. package/lib/infer/browsers/inferChromeVersion.js +73 -0
  63. package/lib/infer/browsers/inferChromeVersion.js.map +1 -0
  64. package/lib/infer/browsers/inferFirefoxVersion.d.ts +1 -0
  65. package/lib/infer/browsers/inferFirefoxVersion.js +61 -0
  66. package/lib/infer/browsers/inferFirefoxVersion.js.map +1 -0
  67. package/lib/infer/browsers/inferSafariVersion.d.ts +6 -0
  68. package/lib/infer/browsers/inferSafariVersion.js +96 -0
  69. package/lib/infer/browsers/inferSafariVersion.js.map +1 -0
  70. package/lib/infer/inferDefaults.d.ts +33 -0
  71. package/lib/infer/inferDefaults.js +272 -0
  72. package/lib/infer/inferDefaults.js.map +1 -0
  73. package/lib/infer/inferIcon.d.ts +1 -0
  74. package/lib/infer/inferIcon.js +116 -0
  75. package/lib/infer/inferIcon.js.map +1 -0
  76. package/lib/infer/inferOs.d.ts +4 -0
  77. package/lib/infer/inferOs.js +69 -0
  78. package/lib/infer/inferOs.js.map +1 -0
  79. package/lib/infer/inferTitle.d.ts +1 -0
  80. package/lib/infer/inferTitle.js +56 -0
  81. package/lib/infer/inferTitle.js.map +1 -0
  82. package/lib/integration-test.d.ts +1 -0
  83. package/lib/main.d.ts +11 -0
  84. package/lib/main.js +18 -0
  85. package/lib/main.js.map +1 -0
  86. package/lib/options/asyncConfig.d.ts +5 -0
  87. package/lib/options/asyncConfig.js +46 -0
  88. package/lib/options/asyncConfig.js.map +1 -0
  89. package/lib/options/fields/fields.d.ts +2 -0
  90. package/lib/options/fields/fields.js +32 -0
  91. package/lib/options/fields/fields.js.map +1 -0
  92. package/lib/options/fields/icon.d.ts +9 -0
  93. package/lib/options/fields/icon.js +106 -0
  94. package/lib/options/fields/icon.js.map +1 -0
  95. package/lib/options/fields/name.d.ts +9 -0
  96. package/lib/options/fields/name.js +59 -0
  97. package/lib/options/fields/name.js.map +1 -0
  98. package/lib/options/fields/userAgent.d.ts +10 -0
  99. package/lib/options/fields/userAgent.js +81 -0
  100. package/lib/options/fields/userAgent.js.map +1 -0
  101. package/lib/options/normalizeUrl.d.ts +1 -0
  102. package/lib/options/normalizeUrl.js +62 -0
  103. package/lib/options/normalizeUrl.js.map +1 -0
  104. package/lib/options/optionsMain.d.ts +6 -0
  105. package/lib/options/optionsMain.js +305 -0
  106. package/lib/options/optionsMain.js.map +1 -0
  107. package/lib/presets/index.d.ts +27 -0
  108. package/lib/presets/index.js +162 -0
  109. package/lib/presets/index.js.map +1 -0
  110. package/lib/pwa/index.d.ts +57 -0
  111. package/lib/pwa/index.js +241 -0
  112. package/lib/pwa/index.js.map +1 -0
  113. package/lib/security/index.d.ts +27 -0
  114. package/lib/security/index.js +202 -0
  115. package/lib/security/index.js.map +1 -0
  116. package/lib/updater/index.d.ts +34 -0
  117. package/lib/updater/index.js +264 -0
  118. package/lib/updater/index.js.map +1 -0
  119. package/lib/utils/parseUtils.d.ts +3 -0
  120. package/lib/utils/parseUtils.js +95 -0
  121. package/lib/utils/parseUtils.js.map +1 -0
  122. package/lib/utils/sanitizeFilename.d.ts +1 -0
  123. package/lib/utils/sanitizeFilename.js +53 -0
  124. package/lib/utils/sanitizeFilename.js.map +1 -0
  125. package/lib/wizard/index.d.ts +13 -0
  126. package/lib/wizard/index.js +252 -0
  127. package/lib/wizard/index.js.map +1 -0
  128. package/npm-shrinkwrap.json +8144 -0
  129. package/package.json +148 -0
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "nativefier-placeholder",
3
+ "version": "1.0.0",
4
+ "description": "Placeholder for the nativefier cli to override with a target url",
5
+ "main": "lib/main.js",
6
+ "author": "Jia Hao",
7
+ "license": "MIT",
8
+ "keywords": [
9
+ "desktop",
10
+ "electron",
11
+ "placeholder"
12
+ ],
13
+ "scripts": {},
14
+ "dependencies": {
15
+ "electron-context-menu": "^3.6.1",
16
+ "electron-dl": "^3.5.0",
17
+ "electron-squirrel-startup": "^1.0.0",
18
+ "electron-window-state": "^5.0.3",
19
+ "loglevel": "^1.8.1",
20
+ "source-map-support": "^0.5.21"
21
+ },
22
+ "devDependencies": {
23
+ "electron": "^25.7.0"
24
+ }
25
+ }
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ### USAGE
4
+
5
+ # ./convertToIcns <input png> <outp icns>
6
+ # Example
7
+ # ./convertToIcns ~/sample.png ~/Desktop/converted.icns
8
+
9
+ # exit the shell script on error immediately
10
+ set -e
11
+
12
+ # Exec Paths
13
+ HAVE_IMAGEMAGICK=
14
+ HAVE_ICONUTIL=
15
+ HAVE_SIPS=
16
+ HAVE_GRAPHICSMAGICK=
17
+
18
+ type convert &>/dev/null && HAVE_IMAGEMAGICK=true
19
+ type iconutil &>/dev/null && HAVE_ICONUTIL=true
20
+ type sips &>/dev/null && HAVE_SIPS=true
21
+ type gm &>/dev/null && gm version | grep GraphicsMagick &>/dev/null && HAVE_GRAPHICSMAGICK=true
22
+
23
+ [[ -z "$HAVE_ICONUTIL" ]] && { echo >&2 "Cannot find required iconutil executable"; exit 1; }
24
+ [[ -z "$HAVE_IMAGEMAGICK" && -z "$HAVE_SIPS" && -z "$HAVE_GRAPHICSMAGICK" ]] && { echo >&2 "Cannot find required image converter, please install sips, imagemagick or graphicsmagick"; exit 1; }
25
+
26
+ # Parameters
27
+ SOURCE="$1"
28
+ DEST="$2"
29
+
30
+ # Check source and destination arguments
31
+ if [ -z "${SOURCE}" ]; then
32
+ echo "No source image specified"
33
+ exit 1
34
+ fi
35
+
36
+ if [ -z "${DEST}" ]; then
37
+ echo "No destination specified"
38
+ exit 1
39
+ fi
40
+
41
+ TEMP_DIR="$(mktemp -d -t nativefier-icns-XXXXXX)"
42
+ ICONSET="${TEMP_DIR}/converted.iconset"
43
+
44
+ function cleanUp() {
45
+ rm -rf "${TEMP_DIR}"
46
+ }
47
+
48
+ trap cleanUp EXIT
49
+
50
+ "${BASH_SOURCE%/*}/convertToIconset" "${SOURCE}" "${ICONSET}"
51
+
52
+ # Create an icns file lefrom the iconset
53
+ iconutil -c icns "${ICONSET}" -o "${DEST}"
54
+
55
+ trap - EXIT
56
+ cleanUp
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # USAGE
4
+
5
+ # ./convertToIco <input png or ico> <outfilename>.ico
6
+ # Example
7
+ # ./convertToPng ~/sample.png ~/converted.ico
8
+
9
+ set -e
10
+
11
+ CONVERT=
12
+
13
+ type gm &>/dev/null && gm version | grep GraphicsMagick &>/dev/null && CONVERT="gm convert"
14
+ type convert &>/dev/null && CONVERT="convert"
15
+
16
+ [[ -z "$CONVERT" ]] && { echo >&2 "Cannot find required ImageMagick Convert or GraphicsMagick executable"; exit 1; }
17
+
18
+ SOURCE=$1
19
+ DEST=$2
20
+
21
+ if [ -z "${SOURCE}" ]; then
22
+ echo "No source image specified"
23
+ exit 1
24
+ fi
25
+
26
+ if [ -z "${DEST}" ]; then
27
+ echo "No destination specified"
28
+ exit 1
29
+ fi
30
+
31
+ NAME=$(basename "${SOURCE}")
32
+ EXT="${NAME##*.}"
33
+
34
+ if [ "${EXT}" == "ico" ]; then
35
+ cp "${SOURCE}" "${DEST}"
36
+ exit 0
37
+ fi
38
+
39
+ $CONVERT "${SOURCE}" -resize 256x256 "${DEST}"
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ### USAGE
4
+
5
+ # ./convertToIconset <input png> <outp iconset>
6
+ # Example
7
+ # ./convertToIconset ~/sample.png ~/Desktop/converted.iconset
8
+
9
+ # exit the shell script on error immediately
10
+ set -e
11
+
12
+ make_iconset_imagemagick() {
13
+ local file iconset
14
+ file="${1}"
15
+ iconset="${2}"
16
+
17
+ mkdir "$iconset"
18
+
19
+ for size in {16,32,64,128,256,512}; do
20
+ $CONVERT "${file}" -define png:big-depth=16 -define png:color-type=6 -sample "${size}x${size}" "${iconset}/icon_${size}x${size}.png"
21
+ $CONVERT "${file}" -define png:big-depth=16 -define png:color-type=6 -sample "$((size * 2))x$((size * 2))" "${iconset}/icon_${size}x${size}@2x.png"
22
+ done
23
+ }
24
+
25
+ make_iconset_sips() {
26
+ local file iconset
27
+ file="${1}"
28
+ iconset="${2}"
29
+
30
+ mkdir "$iconset"
31
+
32
+ for size in {16,32,64,128,256,512}; do
33
+ sips --setProperty format png --resampleHeightWidth "${size}" "${size}" "${file}" --out "${iconset}/icon_${size}x${size}.png" &> /dev/null
34
+ sips --setProperty format png --resampleHeightWidth "$((size * 2))" "$((size * 2))" "${file}" --out "${iconset}/icon_${size}x${size}@2x.png" &> /dev/null
35
+ done
36
+ }
37
+
38
+ # Parameters
39
+ SOURCE="$1"
40
+ DEST="$2"
41
+
42
+ # Check source and destination arguments
43
+ if [ -z "${SOURCE}" ]; then
44
+ echo >&2 "No source image specified"; exit 1
45
+ fi
46
+
47
+ if [ -z "${DEST}" ]; then
48
+ echo >&2 "No destination specified"; exit 1
49
+ fi
50
+
51
+ HAVE_IMAGEMAGICK=
52
+ HAVE_SIPS=
53
+ HAVE_GRAPHICSMAGICK=
54
+ CONVERT=
55
+
56
+ type gm &>/dev/null && gm version | grep GraphicsMagick &>/dev/null && HAVE_GRAPHICSMAGICK=true && CONVERT="gm convert"
57
+ type convert &>/dev/null && HAVE_IMAGEMAGICK=true && CONVERT="convert"
58
+ type sips &>/dev/null && HAVE_SIPS=true
59
+
60
+ if [[ -n "$HAVE_IMAGEMAGICK" || -n "$HAVE_GRAPHICSMAGICK" ]]; then
61
+ PNG_PATH="$(mktemp -d -t nativefier-iconset-XXXXXX)/icon.png"
62
+ "${BASH_SOURCE%/*}/convertToPng" "${SOURCE}" "${PNG_PATH}"
63
+ make_iconset_imagemagick "${PNG_PATH}" "${DEST}"
64
+ elif [[ -n "$HAVE_SIPS" ]]; then
65
+ make_iconset_sips "${SOURCE}" "${DEST}"
66
+ else
67
+ echo >&2 "Cannot find convert or sips executables"; exit 1;
68
+ fi
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # USAGE
4
+
5
+ # ./convertToPng <input png or ico> <outfilename>.png
6
+ # Example
7
+ # ./convertToPng ~/sample.ico ~/Desktop/converted.png
8
+
9
+ set -e
10
+
11
+ HAVE_IMAGEMAGICK=
12
+ HAVE_GRAPHICSMAGICK=
13
+
14
+ type convert &>/dev/null && type identify &>/dev/null && HAVE_IMAGEMAGICK=true
15
+ type gm &>/dev/null && gm version | grep GraphicsMagick &>/dev/null && HAVE_GRAPHICSMAGICK=true
16
+
17
+ if [[ -z "$HAVE_IMAGEMAGICK" && -z "$HAVE_GRAPHICSMAGICK" ]]; then
18
+ type convert >/dev/null 2>&1 || echo >&2 "Cannot find required ImageMagick 'convert' executable"
19
+ type identify >/dev/null 2>&1 || echo >&2 "Cannot find required ImageMagick 'identify' executable"
20
+ type gm &>/dev/null && gm version | grep GraphicsMagick &>/dev/null && echo >&2 "Cannot find GraphicsMagick"
21
+ echo >&2 "ImageMagic or GraphicsMagic is required, please ensure they are in your PATH"
22
+ exit 1
23
+ fi
24
+
25
+ CONVERT="convert"
26
+ IDENTIFY="identify"
27
+ if [[ -z "$HAVE_IMAGEMAGICK" ]]; then
28
+ # we must have GraphicsMagick then
29
+ CONVERT="gm convert"
30
+ IDENTIFY="gm identify"
31
+ fi
32
+
33
+ # Parameters
34
+ SOURCE="$1"
35
+ DEST="$2"
36
+
37
+ # Check source and destination arguments
38
+ if [ -z "${SOURCE}" ]; then
39
+ echo "No source image specified"
40
+ exit 1
41
+ fi
42
+
43
+ if [ -z "${DEST}" ]; then
44
+ echo "No destination specified"
45
+ exit 1
46
+ fi
47
+
48
+ # File Infrastructure
49
+ NAME=$(basename "${SOURCE}")
50
+ BASE="${NAME%.*}"
51
+ TEMP_DIR="convert_temp"
52
+
53
+ function cleanUp() {
54
+ rm -rf "${TEMP_DIR}"
55
+ }
56
+
57
+ trap cleanUp EXIT
58
+
59
+ mkdir -p "${TEMP_DIR}"
60
+
61
+ # check if .ico is a sequence
62
+ # pipe into cat so no exit code is given for grep if no matches are found
63
+ IS_ICO_SET="$($IDENTIFY "${SOURCE}" | grep -e "\w\.ico\[0" | cat )"
64
+
65
+ $CONVERT "${SOURCE}" "${TEMP_DIR}/${BASE}.png"
66
+ if [ "${IS_ICO_SET}" ]; then
67
+ # extract the largest(?) image from the set
68
+ cp "${TEMP_DIR}/${BASE}-0.png" "${DEST}"
69
+ else
70
+ cp "${TEMP_DIR}/${BASE}.png" "${DEST}"
71
+ fi
72
+
73
+ rm -rf "${TEMP_DIR}"
74
+
75
+ trap - EXIT
76
+ cleanUp
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # USAGE
4
+
5
+ # ./convertToTrayIcon <input png or icns> <outfilename>.png
6
+ # Example
7
+ # ./convertToTrayIcon ~/sample.icns ~/converted.png
8
+
9
+ set -e
10
+
11
+ SOURCE=$1
12
+ DEST=$2
13
+
14
+ if [ -z "${SOURCE}" ]; then
15
+ echo "No source image specified"
16
+ exit 1
17
+ fi
18
+
19
+ if [ -z "${DEST}" ]; then
20
+ echo "No destination specified"
21
+ exit 1
22
+ fi
23
+
24
+ NAME=$(basename "${SOURCE}")
25
+ EXT="${NAME##*.}"
26
+
27
+ if [ "${EXT}" == "png" ]; then
28
+ cp "${SOURCE}" "${DEST}"
29
+ exit 0
30
+ fi
31
+
32
+ sips --setProperty format png --resampleHeightWidth "256" "256" "${SOURCE}" --out "${DEST}"
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 自动登录脚本生成器
3
+ * 生成用于自动填充登录表单的 JS 脚本
4
+ *
5
+ * 安全说明:
6
+ * - 凭据使用 Base64 编码(非加密)
7
+ * - 脚本仅在构建时生成,凭据不会保存到源代码
8
+ * - 建议仅用于内部/私有应用
9
+ */
10
+ /**
11
+ * 生成自动登录脚本
12
+ */
13
+ export declare function generateAutoLoginScript(username: string, password: string): string;
14
+ /**
15
+ * 解析自动登录凭据
16
+ * 格式: username:password
17
+ */
18
+ export declare function parseAutoLogin(autoLoginStr: string): {
19
+ username: string;
20
+ password: string;
21
+ } | null;
22
+ /**
23
+ * 创建自动登录注入脚本文件
24
+ */
25
+ export declare function createAutoLoginInjectFile(autoLoginStr: string): string | null;
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ /**
3
+ * 自动登录脚本生成器
4
+ * 生成用于自动填充登录表单的 JS 脚本
5
+ *
6
+ * 安全说明:
7
+ * - 凭据使用 Base64 编码(非加密)
8
+ * - 脚本仅在构建时生成,凭据不会保存到源代码
9
+ * - 建议仅用于内部/私有应用
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.generateAutoLoginScript = generateAutoLoginScript;
46
+ exports.parseAutoLogin = parseAutoLogin;
47
+ exports.createAutoLoginInjectFile = createAutoLoginInjectFile;
48
+ const fs = __importStar(require("fs"));
49
+ const path = __importStar(require("path"));
50
+ const log = __importStar(require("loglevel"));
51
+ const helpers_1 = require("../helpers/helpers");
52
+ /**
53
+ * 生成自动登录脚本
54
+ */
55
+ function generateAutoLoginScript(username, password) {
56
+ const encodedUsername = Buffer.from(username).toString('base64');
57
+ const encodedPassword = Buffer.from(password).toString('base64');
58
+ return `
59
+ (function() {
60
+ 'use strict';
61
+
62
+ var AUTO_LOGIN_KEY = 'nativefier_auto_login_done';
63
+
64
+ function decode(str) {
65
+ return atob(str);
66
+ }
67
+
68
+ function simulateInput(element, value) {
69
+ element.focus();
70
+ element.value = value;
71
+ element.dispatchEvent(new Event('input', { bubbles: true }));
72
+ element.dispatchEvent(new Event('change', { bubbles: true }));
73
+ }
74
+
75
+ function autoLogin() {
76
+ if (sessionStorage.getItem(AUTO_LOGIN_KEY)) {
77
+ console.log('[Nativefier] Auto-login already performed');
78
+ return;
79
+ }
80
+
81
+ console.log('[Nativefier] Attempting auto-login...');
82
+
83
+ setTimeout(function() {
84
+ try {
85
+ var usernameSelectors = [
86
+ 'input[type="text"]',
87
+ 'input[type="email"]',
88
+ 'input[name="username"]',
89
+ 'input[name="email"]',
90
+ 'input[id="username"]',
91
+ 'input[id="email"]',
92
+ 'input[name="user"]',
93
+ 'input[autocomplete="username"]'
94
+ ];
95
+
96
+ var usernameInput = null;
97
+ for (var i = 0; i < usernameSelectors.length; i++) {
98
+ usernameInput = document.querySelector(usernameSelectors[i]);
99
+ if (usernameInput) break;
100
+ }
101
+
102
+ if (!usernameInput) {
103
+ console.log('[Nativefier] Username field not found, may already be logged in');
104
+ return;
105
+ }
106
+
107
+ var passwordInput = document.querySelector('input[type="password"]');
108
+ if (!passwordInput) {
109
+ console.log('[Nativefier] Password field not found');
110
+ return;
111
+ }
112
+
113
+ simulateInput(usernameInput, decode('${encodedUsername}'));
114
+
115
+ setTimeout(function() {
116
+ simulateInput(passwordInput, decode('${encodedPassword}'));
117
+
118
+ setTimeout(function() {
119
+ var submitBtn = document.querySelector('button[type="submit"]') ||
120
+ document.querySelector('input[type="submit"]') ||
121
+ document.querySelector('button.login') ||
122
+ document.querySelector('button.btn-primary') ||
123
+ document.querySelector('form button');
124
+
125
+ if (submitBtn) {
126
+ console.log('[Nativefier] Clicking submit button...');
127
+ submitBtn.click();
128
+ } else {
129
+ var form = usernameInput.closest('form');
130
+ if (form) {
131
+ console.log('[Nativefier] Submitting form...');
132
+ form.submit();
133
+ }
134
+ }
135
+
136
+ sessionStorage.setItem(AUTO_LOGIN_KEY, 'true');
137
+ console.log('[Nativefier] Auto-login completed');
138
+ }, 300);
139
+ }, 300);
140
+
141
+ } catch (err) {
142
+ console.error('[Nativefier] Auto-login failed:', err);
143
+ }
144
+ }, 1500);
145
+ }
146
+
147
+ if (document.readyState === 'complete') {
148
+ autoLogin();
149
+ } else {
150
+ window.addEventListener('load', autoLogin);
151
+ }
152
+ })();
153
+ `;
154
+ }
155
+ /**
156
+ * 解析自动登录凭据
157
+ * 格式: username:password
158
+ */
159
+ function parseAutoLogin(autoLoginStr) {
160
+ if (!autoLoginStr)
161
+ return null;
162
+ const colonIndex = autoLoginStr.indexOf(':');
163
+ if (colonIndex === -1) {
164
+ log.error('Invalid auto-login format. Use: username:password');
165
+ return null;
166
+ }
167
+ const username = autoLoginStr.substring(0, colonIndex);
168
+ const password = autoLoginStr.substring(colonIndex + 1);
169
+ if (!username || !password) {
170
+ log.error('Invalid auto-login credentials');
171
+ return null;
172
+ }
173
+ return { username, password };
174
+ }
175
+ /**
176
+ * 创建自动登录注入脚本文件
177
+ */
178
+ function createAutoLoginInjectFile(autoLoginStr) {
179
+ const credentials = parseAutoLogin(autoLoginStr);
180
+ if (!credentials)
181
+ return null;
182
+ const script = generateAutoLoginScript(credentials.username, credentials.password);
183
+ const tmpDir = (0, helpers_1.getTempDir)('autologin');
184
+ const scriptPath = path.join(tmpDir, 'auto-login.js');
185
+ fs.writeFileSync(scriptPath, script);
186
+ log.debug('Auto-login script created at:', scriptPath);
187
+ return scriptPath;
188
+ }
189
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/autologin/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUH,0DAoGC;AAMD,wCAkBC;AAKD,8DAYC;AArJD,uCAAyB;AACzB,2CAA6B;AAC7B,8CAAgC;AAChC,gDAAgD;AAEhD;;GAEG;AACH,SAAgB,uBAAuB,CAAC,QAAgB,EAAE,QAAgB;IACxE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEjE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CAuDsC,eAAe;;;iDAGb,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC/D,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,YAAoB;IACjD,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAExD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,YAAoB;IAC5D,MAAM,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IACjD,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,MAAM,GAAG,uBAAuB,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,IAAA,oBAAU,EAAC,WAAW,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAEtD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACrC,GAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE,UAAU,CAAC,CAAC;IAEvD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { AppOptions } from '../../shared/src/options/model';
2
+ /**
3
+ * Will convert a `.png` icon to the appropriate arch format (if necessary),
4
+ * and return adjusted options
5
+ */
6
+ export declare function convertIconIfNecessary(options: AppOptions): void;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.convertIconIfNecessary = convertIconIfNecessary;
37
+ const path = __importStar(require("path"));
38
+ const log = __importStar(require("loglevel"));
39
+ const helpers_1 = require("../helpers/helpers");
40
+ const iconShellHelpers_1 = require("../helpers/iconShellHelpers");
41
+ function iconIsIco(iconPath) {
42
+ return path.extname(iconPath) === '.ico';
43
+ }
44
+ function iconIsPng(iconPath) {
45
+ return path.extname(iconPath) === '.png';
46
+ }
47
+ function iconIsIcns(iconPath) {
48
+ return path.extname(iconPath) === '.icns';
49
+ }
50
+ /**
51
+ * Will convert a `.png` icon to the appropriate arch format (if necessary),
52
+ * and return adjusted options
53
+ */
54
+ function convertIconIfNecessary(options) {
55
+ if (!options.packager.icon) {
56
+ log.debug('Option "icon" not set, skipping icon conversion.');
57
+ return;
58
+ }
59
+ if (options.packager.platform === 'win32') {
60
+ if (iconIsIco(options.packager.icon)) {
61
+ log.debug('Building for Windows and icon is already a .ico, no conversion needed');
62
+ return;
63
+ }
64
+ try {
65
+ const iconPath = (0, iconShellHelpers_1.convertToIco)(options.packager.icon);
66
+ options.packager.icon = iconPath;
67
+ return;
68
+ }
69
+ catch (err) {
70
+ log.warn('Failed to convert icon to .ico, skipping.', err);
71
+ return;
72
+ }
73
+ }
74
+ if (options.packager.platform === 'linux') {
75
+ if (iconIsPng(options.packager.icon)) {
76
+ log.debug('Building for Linux and icon is already a .png, no conversion needed');
77
+ return;
78
+ }
79
+ try {
80
+ const iconPath = (0, iconShellHelpers_1.convertToPng)(options.packager.icon);
81
+ options.packager.icon = iconPath;
82
+ return;
83
+ }
84
+ catch (err) {
85
+ log.warn('Failed to convert icon to .png, skipping.', err);
86
+ return;
87
+ }
88
+ }
89
+ if (iconIsIcns(options.packager.icon)) {
90
+ log.debug('Building for macOS and icon is already a .icns, no conversion needed');
91
+ }
92
+ if (!(0, helpers_1.isOSX)()) {
93
+ log.warn('Skipping icon conversion to .icns, conversion is only supported on macOS');
94
+ return;
95
+ }
96
+ try {
97
+ if (!iconIsIcns(options.packager.icon)) {
98
+ const iconPath = (0, iconShellHelpers_1.convertToIcns)(options.packager.icon);
99
+ options.packager.icon = iconPath;
100
+ }
101
+ if (options.nativefier.tray !== 'false') {
102
+ (0, iconShellHelpers_1.convertToTrayIcon)(options.packager.icon);
103
+ }
104
+ }
105
+ catch (err) {
106
+ log.warn('Failed to convert icon to .icns, skipping.', err);
107
+ options.packager.icon = undefined;
108
+ }
109
+ }
110
+ //# sourceMappingURL=buildIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildIcon.js","sourceRoot":"","sources":["../../src/build/buildIcon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { RawOptions } from '../../shared/src/options/model';
2
+ export declare function buildNativefierApp(rawOptions: RawOptions): Promise<string>;