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.
- package/LICENSE.md +10 -0
- package/README.md +351 -0
- package/app/inject/_placeholder +0 -0
- package/app/lib/main.js +11772 -0
- package/app/lib/main.js.map +1 -0
- package/app/lib/preload.js +338 -0
- package/app/lib/preload.js.map +1 -0
- package/app/lib/static/login.css +57 -0
- package/app/lib/static/login.html +24 -0
- package/app/lib/static/login.js +10 -0
- package/app/nativefier.json +8 -0
- package/app/npm-shrinkwrap.json +1170 -0
- package/app/package.json +25 -0
- package/icon-scripts/convertToIcns +56 -0
- package/icon-scripts/convertToIco +39 -0
- package/icon-scripts/convertToIconset +68 -0
- package/icon-scripts/convertToPng +76 -0
- package/icon-scripts/convertToTrayIcon +32 -0
- package/lib/autologin/index.d.ts +25 -0
- package/lib/autologin/index.js +189 -0
- package/lib/autologin/index.js.map +1 -0
- package/lib/build/buildIcon.d.ts +6 -0
- package/lib/build/buildIcon.js +110 -0
- package/lib/build/buildIcon.js.map +1 -0
- package/lib/build/buildNativefierApp.d.ts +2 -0
- package/lib/build/buildNativefierApp.js +234 -0
- package/lib/build/buildNativefierApp.js.map +1 -0
- package/lib/build/prepareElectronApp.d.ts +15 -0
- package/lib/build/prepareElectronApp.js +220 -0
- package/lib/build/prepareElectronApp.js.map +1 -0
- package/lib/cli.d.ts +6 -0
- package/lib/cli.js +783 -0
- package/lib/cli.js.map +1 -0
- package/lib/config/index.d.ts +87 -0
- package/lib/config/index.js +460 -0
- package/lib/config/index.js.map +1 -0
- package/lib/constants.d.ts +11 -0
- package/lib/constants.js +58 -0
- package/lib/constants.js.map +1 -0
- package/lib/helpers/fsHelpers.d.ts +2 -0
- package/lib/helpers/fsHelpers.js +57 -0
- package/lib/helpers/fsHelpers.js.map +1 -0
- package/lib/helpers/helpers.d.ts +29 -0
- package/lib/helpers/helpers.js +225 -0
- package/lib/helpers/helpers.js.map +1 -0
- package/lib/helpers/iconShellHelpers.d.ts +5 -0
- package/lib/helpers/iconShellHelpers.js +91 -0
- package/lib/helpers/iconShellHelpers.js.map +1 -0
- package/lib/helpers/upgrade/executableHelpers.d.ts +2 -0
- package/lib/helpers/upgrade/executableHelpers.js +173 -0
- package/lib/helpers/upgrade/executableHelpers.js.map +1 -0
- package/lib/helpers/upgrade/plistInfoXMLHelpers.d.ts +2 -0
- package/lib/helpers/upgrade/plistInfoXMLHelpers.js +29 -0
- package/lib/helpers/upgrade/plistInfoXMLHelpers.js.map +1 -0
- package/lib/helpers/upgrade/rceditGet.d.ts +1 -0
- package/lib/helpers/upgrade/rceditGet.js +65 -0
- package/lib/helpers/upgrade/rceditGet.js.map +1 -0
- package/lib/helpers/upgrade/upgrade.d.ts +8 -0
- package/lib/helpers/upgrade/upgrade.js +193 -0
- package/lib/helpers/upgrade/upgrade.js.map +1 -0
- package/lib/infer/browsers/inferChromeVersion.d.ts +1 -0
- package/lib/infer/browsers/inferChromeVersion.js +73 -0
- package/lib/infer/browsers/inferChromeVersion.js.map +1 -0
- package/lib/infer/browsers/inferFirefoxVersion.d.ts +1 -0
- package/lib/infer/browsers/inferFirefoxVersion.js +61 -0
- package/lib/infer/browsers/inferFirefoxVersion.js.map +1 -0
- package/lib/infer/browsers/inferSafariVersion.d.ts +6 -0
- package/lib/infer/browsers/inferSafariVersion.js +96 -0
- package/lib/infer/browsers/inferSafariVersion.js.map +1 -0
- package/lib/infer/inferDefaults.d.ts +33 -0
- package/lib/infer/inferDefaults.js +272 -0
- package/lib/infer/inferDefaults.js.map +1 -0
- package/lib/infer/inferIcon.d.ts +1 -0
- package/lib/infer/inferIcon.js +116 -0
- package/lib/infer/inferIcon.js.map +1 -0
- package/lib/infer/inferOs.d.ts +4 -0
- package/lib/infer/inferOs.js +69 -0
- package/lib/infer/inferOs.js.map +1 -0
- package/lib/infer/inferTitle.d.ts +1 -0
- package/lib/infer/inferTitle.js +56 -0
- package/lib/infer/inferTitle.js.map +1 -0
- package/lib/integration-test.d.ts +1 -0
- package/lib/main.d.ts +11 -0
- package/lib/main.js +18 -0
- package/lib/main.js.map +1 -0
- package/lib/options/asyncConfig.d.ts +5 -0
- package/lib/options/asyncConfig.js +46 -0
- package/lib/options/asyncConfig.js.map +1 -0
- package/lib/options/fields/fields.d.ts +2 -0
- package/lib/options/fields/fields.js +32 -0
- package/lib/options/fields/fields.js.map +1 -0
- package/lib/options/fields/icon.d.ts +9 -0
- package/lib/options/fields/icon.js +106 -0
- package/lib/options/fields/icon.js.map +1 -0
- package/lib/options/fields/name.d.ts +9 -0
- package/lib/options/fields/name.js +59 -0
- package/lib/options/fields/name.js.map +1 -0
- package/lib/options/fields/userAgent.d.ts +10 -0
- package/lib/options/fields/userAgent.js +81 -0
- package/lib/options/fields/userAgent.js.map +1 -0
- package/lib/options/normalizeUrl.d.ts +1 -0
- package/lib/options/normalizeUrl.js +62 -0
- package/lib/options/normalizeUrl.js.map +1 -0
- package/lib/options/optionsMain.d.ts +6 -0
- package/lib/options/optionsMain.js +305 -0
- package/lib/options/optionsMain.js.map +1 -0
- package/lib/presets/index.d.ts +27 -0
- package/lib/presets/index.js +162 -0
- package/lib/presets/index.js.map +1 -0
- package/lib/pwa/index.d.ts +57 -0
- package/lib/pwa/index.js +241 -0
- package/lib/pwa/index.js.map +1 -0
- package/lib/security/index.d.ts +27 -0
- package/lib/security/index.js +202 -0
- package/lib/security/index.js.map +1 -0
- package/lib/updater/index.d.ts +34 -0
- package/lib/updater/index.js +264 -0
- package/lib/updater/index.js.map +1 -0
- package/lib/utils/parseUtils.d.ts +3 -0
- package/lib/utils/parseUtils.js +95 -0
- package/lib/utils/parseUtils.js.map +1 -0
- package/lib/utils/sanitizeFilename.d.ts +1 -0
- package/lib/utils/sanitizeFilename.js +53 -0
- package/lib/utils/sanitizeFilename.js.map +1 -0
- package/lib/wizard/index.d.ts +13 -0
- package/lib/wizard/index.js +252 -0
- package/lib/wizard/index.js.map +1 -0
- package/npm-shrinkwrap.json +8144 -0
- package/package.json +148 -0
|
@@ -0,0 +1,338 @@
|
|
|
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.INJECT_DIR = void 0;
|
|
37
|
+
/**
|
|
38
|
+
* Preload file that will be executed in the renderer process.
|
|
39
|
+
* Note: This needs to be attached **prior to imports**, as imports
|
|
40
|
+
* would delay the attachment till after the event has been raised.
|
|
41
|
+
*/
|
|
42
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
43
|
+
injectScripts(); // eslint-disable-line @typescript-eslint/no-use-before-define
|
|
44
|
+
});
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
const os = __importStar(require("os"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const electron_1 = require("electron");
|
|
49
|
+
// Do *NOT* add 3rd-party imports here in preload (except for webpack `externals` like electron).
|
|
50
|
+
// They will work during development, but break in the prod build :-/ .
|
|
51
|
+
// Electron doc isn't explicit about that, so maybe *we*'re doing something wrong.
|
|
52
|
+
// At any rate, that's what we have now. If you want an import here, go ahead, but
|
|
53
|
+
// verify that apps built with a non-devbuild nativefier (installed from tarball) work.
|
|
54
|
+
// Recipe to monkey around this, assuming you git-cloned nativefier in /opt/nativefier/ :
|
|
55
|
+
// cd /opt/nativefier/ && rm -f nativefier-43.1.0.tgz && npm run build && npm pack && mkdir -p ~/n4310/ && cd ~/n4310/ \
|
|
56
|
+
// && rm -rf ./* && npm i /opt/nativefier/nativefier-43.1.0.tgz && ./node_modules/.bin/nativefier 'google.com'
|
|
57
|
+
// See https://github.com/nativefier/nativefier/issues/1175
|
|
58
|
+
// and https://www.electronjs.org/docs/api/browser-window#new-browserwindowoptions / preload
|
|
59
|
+
const log = console; // since we can't have `loglevel` here in preload
|
|
60
|
+
exports.INJECT_DIR = path.join(__dirname, '..', 'inject');
|
|
61
|
+
/**
|
|
62
|
+
* Patches window.Notification to:
|
|
63
|
+
* - set a callback on a new Notification
|
|
64
|
+
* - set a callback for clicks on notifications
|
|
65
|
+
* @param createCallback
|
|
66
|
+
* @param clickCallback
|
|
67
|
+
*/
|
|
68
|
+
function setNotificationCallback(createCallback, clickCallback) {
|
|
69
|
+
const OldNotify = window.Notification;
|
|
70
|
+
const newNotify = function (title, opt) {
|
|
71
|
+
createCallback(title, opt);
|
|
72
|
+
const instance = new OldNotify(title, opt);
|
|
73
|
+
instance.addEventListener('click', clickCallback);
|
|
74
|
+
return instance;
|
|
75
|
+
};
|
|
76
|
+
newNotify.requestPermission = OldNotify.requestPermission.bind(OldNotify);
|
|
77
|
+
Object.defineProperty(newNotify, 'permission', {
|
|
78
|
+
get: () => OldNotify.permission,
|
|
79
|
+
});
|
|
80
|
+
// @ts-expect-error TypeScript says its not compatible, but it works?
|
|
81
|
+
window.Notification = newNotify;
|
|
82
|
+
}
|
|
83
|
+
async function getDisplayMedia(sourceId) {
|
|
84
|
+
var _a;
|
|
85
|
+
if (!((_a = window === null || window === void 0 ? void 0 : window.navigator) === null || _a === void 0 ? void 0 : _a.mediaDevices)) {
|
|
86
|
+
throw Error('window.navigator.mediaDevices is not present');
|
|
87
|
+
}
|
|
88
|
+
// Electron supports an outdated specification for mediaDevices,
|
|
89
|
+
// see https://www.electronjs.org/docs/latest/api/desktop-capturer/
|
|
90
|
+
const stream = await window.navigator.mediaDevices.getUserMedia({
|
|
91
|
+
audio: false,
|
|
92
|
+
video: {
|
|
93
|
+
mandatory: {
|
|
94
|
+
chromeMediaSource: 'desktop',
|
|
95
|
+
chromeMediaSourceId: sourceId,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
return stream;
|
|
100
|
+
}
|
|
101
|
+
function setupScreenSharePickerStyles(id) {
|
|
102
|
+
const screenShareStyles = document.createElement('style');
|
|
103
|
+
screenShareStyles.id = id;
|
|
104
|
+
screenShareStyles.innerHTML = `
|
|
105
|
+
.desktop-capturer-selection {
|
|
106
|
+
--overlay-color: hsla(0, 0%, 11.8%, 0.75);
|
|
107
|
+
--highlight-color: highlight;
|
|
108
|
+
--text-content-color: #fff;
|
|
109
|
+
--selection-button-color: hsl(180, 1.3%, 14.7%);
|
|
110
|
+
}
|
|
111
|
+
.desktop-capturer-selection {
|
|
112
|
+
position: fixed;
|
|
113
|
+
top: 0;
|
|
114
|
+
left: 0;
|
|
115
|
+
width: 100%;
|
|
116
|
+
height: 100vh;
|
|
117
|
+
background: var(--overlay-color);
|
|
118
|
+
color: var(--text-content-color);
|
|
119
|
+
z-index: 10000000;
|
|
120
|
+
display: flex;
|
|
121
|
+
align-items: center;
|
|
122
|
+
justify-content: center;
|
|
123
|
+
}
|
|
124
|
+
.desktop-capturer-selection__close {
|
|
125
|
+
-moz-appearance: none;
|
|
126
|
+
-webkit-appearance: none;
|
|
127
|
+
appearance: none;
|
|
128
|
+
padding: 1rem;
|
|
129
|
+
color: inherit;
|
|
130
|
+
position: absolute;
|
|
131
|
+
left: 1rem;
|
|
132
|
+
top: 1rem;
|
|
133
|
+
cursor: pointer;
|
|
134
|
+
}
|
|
135
|
+
.desktop-capturer-selection__scroller {
|
|
136
|
+
width: 100%;
|
|
137
|
+
max-height: 100vh;
|
|
138
|
+
overflow-y: auto;
|
|
139
|
+
}
|
|
140
|
+
.desktop-capturer-selection__list {
|
|
141
|
+
max-width: calc(100% - 100px);
|
|
142
|
+
margin: 50px;
|
|
143
|
+
padding: 0;
|
|
144
|
+
display: flex;
|
|
145
|
+
flex-wrap: wrap;
|
|
146
|
+
list-style: none;
|
|
147
|
+
overflow: hidden;
|
|
148
|
+
justify-content: center;
|
|
149
|
+
}
|
|
150
|
+
.desktop-capturer-selection__item {
|
|
151
|
+
display: flex;
|
|
152
|
+
margin: 4px;
|
|
153
|
+
}
|
|
154
|
+
.desktop-capturer-selection__btn {
|
|
155
|
+
display: flex;
|
|
156
|
+
flex-direction: column;
|
|
157
|
+
align-items: stretch;
|
|
158
|
+
width: 145px;
|
|
159
|
+
margin: 0;
|
|
160
|
+
border: 0;
|
|
161
|
+
border-radius: 3px;
|
|
162
|
+
padding: 4px;
|
|
163
|
+
background: var(--selection-button-color);
|
|
164
|
+
text-align: left;
|
|
165
|
+
transition: background-color .15s, box-shadow .15s;
|
|
166
|
+
}
|
|
167
|
+
.desktop-capturer-selection__btn:hover,
|
|
168
|
+
.desktop-capturer-selection__btn:focus {
|
|
169
|
+
background: var(--highlight-color);
|
|
170
|
+
}
|
|
171
|
+
.desktop-capturer-selection__thumbnail {
|
|
172
|
+
width: 100%;
|
|
173
|
+
height: 81px;
|
|
174
|
+
object-fit: cover;
|
|
175
|
+
}
|
|
176
|
+
.desktop-capturer-selection__name {
|
|
177
|
+
margin: 6px 0 6px;
|
|
178
|
+
white-space: nowrap;
|
|
179
|
+
text-overflow: ellipsis;
|
|
180
|
+
overflow: hidden;
|
|
181
|
+
}
|
|
182
|
+
@media (prefers-color-scheme: light) {
|
|
183
|
+
.desktop-capturer-selection {
|
|
184
|
+
--overlay-color: hsla(0, 0%, 90.2%, 0.75);
|
|
185
|
+
--text-content-color: hsl(0, 0%, 12.9%);
|
|
186
|
+
--selection-button-color: hsl(180, 1.3%, 85.3%);
|
|
187
|
+
}
|
|
188
|
+
}`;
|
|
189
|
+
document.head.appendChild(screenShareStyles);
|
|
190
|
+
}
|
|
191
|
+
function setupScreenSharePickerElement(id, sources) {
|
|
192
|
+
const selectionElem = document.createElement('div');
|
|
193
|
+
selectionElem.classList.add('desktop-capturer-selection');
|
|
194
|
+
selectionElem.id = id;
|
|
195
|
+
selectionElem.innerHTML = `
|
|
196
|
+
<button class="desktop-capturer-selection__close" id="${id}-close" aria-label="Close screen share picker" type="button">
|
|
197
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32">
|
|
198
|
+
<path fill="currentColor" d="m12 10.586 4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/>
|
|
199
|
+
</svg>
|
|
200
|
+
</button>
|
|
201
|
+
<div class="desktop-capturer-selection__scroller">
|
|
202
|
+
<ul class="desktop-capturer-selection__list">
|
|
203
|
+
${sources
|
|
204
|
+
.map(({ id, name, thumbnail }) => `
|
|
205
|
+
<li class="desktop-capturer-selection__item">
|
|
206
|
+
<button class="desktop-capturer-selection__btn" data-id="${id}" title="${name}">
|
|
207
|
+
<img class="desktop-capturer-selection__thumbnail" src="${thumbnail.toDataURL()}" />
|
|
208
|
+
<span class="desktop-capturer-selection__name">${name}</span>
|
|
209
|
+
</button>
|
|
210
|
+
</li>
|
|
211
|
+
`)
|
|
212
|
+
.join('')}
|
|
213
|
+
</ul>
|
|
214
|
+
</div>
|
|
215
|
+
`;
|
|
216
|
+
document.body.appendChild(selectionElem);
|
|
217
|
+
}
|
|
218
|
+
function setupScreenSharePicker(resolve, reject, sources) {
|
|
219
|
+
var _a;
|
|
220
|
+
const baseElementsId = 'native-screen-share-picker';
|
|
221
|
+
const pickerStylesElementId = baseElementsId + '-styles';
|
|
222
|
+
setupScreenSharePickerElement(baseElementsId, sources);
|
|
223
|
+
setupScreenSharePickerStyles(pickerStylesElementId);
|
|
224
|
+
const clearElements = () => {
|
|
225
|
+
var _a, _b;
|
|
226
|
+
(_a = document.getElementById(pickerStylesElementId)) === null || _a === void 0 ? void 0 : _a.remove();
|
|
227
|
+
(_b = document.getElementById(baseElementsId)) === null || _b === void 0 ? void 0 : _b.remove();
|
|
228
|
+
};
|
|
229
|
+
(_a = document
|
|
230
|
+
.getElementById(`${baseElementsId}-close`)) === null || _a === void 0 ? void 0 : _a.addEventListener('click', () => {
|
|
231
|
+
clearElements();
|
|
232
|
+
reject('Screen share was cancelled by the user.');
|
|
233
|
+
});
|
|
234
|
+
document
|
|
235
|
+
.querySelectorAll('.desktop-capturer-selection__btn')
|
|
236
|
+
.forEach((button) => {
|
|
237
|
+
button.addEventListener('click', () => {
|
|
238
|
+
const id = button.getAttribute('data-id');
|
|
239
|
+
if (!id) {
|
|
240
|
+
log.error("Couldn't find `data-id` of element");
|
|
241
|
+
clearElements();
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
const source = sources.find((source) => source.id === id);
|
|
245
|
+
if (!source) {
|
|
246
|
+
log.error(`Source with id "${id}" does not exist`);
|
|
247
|
+
clearElements();
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
getDisplayMedia(source.id)
|
|
251
|
+
.then((stream) => {
|
|
252
|
+
resolve(stream);
|
|
253
|
+
})
|
|
254
|
+
.catch((err) => {
|
|
255
|
+
log.error('Error selecting desktop capture source:', err);
|
|
256
|
+
reject(err);
|
|
257
|
+
})
|
|
258
|
+
.finally(() => {
|
|
259
|
+
clearElements();
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
function setDisplayMediaPromise() {
|
|
265
|
+
var _a;
|
|
266
|
+
// Since no implementation for `getDisplayMedia` exists in Electron we write our own.
|
|
267
|
+
if (!((_a = window === null || window === void 0 ? void 0 : window.navigator) === null || _a === void 0 ? void 0 : _a.mediaDevices)) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
window.navigator.mediaDevices.getDisplayMedia = () => {
|
|
271
|
+
return new Promise((resolve, reject) => {
|
|
272
|
+
const sources = electron_1.ipcRenderer.invoke('desktop-capturer-get-sources');
|
|
273
|
+
sources
|
|
274
|
+
.then(async (sources) => {
|
|
275
|
+
if (isWayland()) {
|
|
276
|
+
// No documentation is provided wether the first element is always PipeWire-picked or not
|
|
277
|
+
// i.e. maybe it's not deterministic, we are only taking a guess here.
|
|
278
|
+
const stream = await getDisplayMedia(sources[0].id);
|
|
279
|
+
resolve(stream);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
setupScreenSharePicker(resolve, reject, sources);
|
|
283
|
+
}
|
|
284
|
+
})
|
|
285
|
+
.catch((err) => {
|
|
286
|
+
reject(err);
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
function injectScripts() {
|
|
292
|
+
const needToInject = fs.existsSync(exports.INJECT_DIR);
|
|
293
|
+
if (!needToInject) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
// Dynamically require scripts
|
|
297
|
+
try {
|
|
298
|
+
const jsFiles = fs
|
|
299
|
+
.readdirSync(exports.INJECT_DIR, { withFileTypes: true })
|
|
300
|
+
.filter((injectFile) => injectFile.isFile() && injectFile.name.endsWith('.js'))
|
|
301
|
+
.map((jsFileStat) => path.join('..', 'inject', jsFileStat.name));
|
|
302
|
+
for (const jsFile of jsFiles) {
|
|
303
|
+
log.debug('Injecting JS file', jsFile);
|
|
304
|
+
require(jsFile);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
catch (err) {
|
|
308
|
+
log.error('Error encoutered injecting JS files', err);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
function notifyNotificationCreate(title, opt) {
|
|
312
|
+
electron_1.ipcRenderer.send('notification', title, opt);
|
|
313
|
+
}
|
|
314
|
+
function notifyNotificationClick() {
|
|
315
|
+
electron_1.ipcRenderer.send('notification-click');
|
|
316
|
+
}
|
|
317
|
+
// @ts-expect-error TypeScript thinks these are incompatible but they aren't
|
|
318
|
+
setNotificationCallback(notifyNotificationCreate, notifyNotificationClick);
|
|
319
|
+
setDisplayMediaPromise();
|
|
320
|
+
electron_1.ipcRenderer.on('params', (event, message) => {
|
|
321
|
+
log.debug('ipcRenderer.params', { event, message });
|
|
322
|
+
const appArgs = JSON.parse(message);
|
|
323
|
+
log.info('nativefier.json', appArgs);
|
|
324
|
+
});
|
|
325
|
+
electron_1.ipcRenderer.on('debug', (event, message) => {
|
|
326
|
+
log.debug('ipcRenderer.debug', { event, message });
|
|
327
|
+
});
|
|
328
|
+
// Copy-pastaed as unable to get imports to work in preload.
|
|
329
|
+
// If modifying, update also app/src/helpers/helpers.ts
|
|
330
|
+
function isWayland() {
|
|
331
|
+
return (isLinux() &&
|
|
332
|
+
(Boolean(process.env.WAYLAND_DISPLAY) ||
|
|
333
|
+
process.env.XDG_SESSION_TYPE === 'wayland'));
|
|
334
|
+
}
|
|
335
|
+
function isLinux() {
|
|
336
|
+
return os.platform() === 'linux';
|
|
337
|
+
}
|
|
338
|
+
//# sourceMappingURL=preload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preload.js","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
label, input {
|
|
2
|
+
display: block;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
* {
|
|
6
|
+
font-family: Verdana, sans-serif;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
html, body {
|
|
10
|
+
height: 100%;
|
|
11
|
+
margin: 0;
|
|
12
|
+
-webkit-app-region: drag;
|
|
13
|
+
}
|
|
14
|
+
.login-form {
|
|
15
|
+
height: 100%;
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
justify-content: center;
|
|
19
|
+
align-items: center;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.login-form > div {
|
|
23
|
+
margin-bottom: 30px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.login-form > div > label {
|
|
27
|
+
margin-bottom: 25px;
|
|
28
|
+
letter-spacing: 5px;
|
|
29
|
+
font-weight: 100;
|
|
30
|
+
text-transform: uppercase;
|
|
31
|
+
font-size: 18px;
|
|
32
|
+
text-align: center;
|
|
33
|
+
color: rgba(0, 0, 0, 0.7);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.login-form > div > input {
|
|
37
|
+
height: 30px;
|
|
38
|
+
width: 225px;
|
|
39
|
+
font-size: 16px;
|
|
40
|
+
-webkit-app-region: no-drag;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.login-form > div > button {
|
|
44
|
+
border: 0;
|
|
45
|
+
font-size: 15px;
|
|
46
|
+
font-weight: 100;
|
|
47
|
+
text-transform: uppercase;
|
|
48
|
+
height: 35px;
|
|
49
|
+
width: 225px;
|
|
50
|
+
background-color: #2196F3;
|
|
51
|
+
color: white;
|
|
52
|
+
-webkit-app-region: no-drag;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
button:hover {
|
|
56
|
+
background-color: #0D47A1;
|
|
57
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>Login</title>
|
|
6
|
+
<link rel="stylesheet" type="text/css" href="login.css">
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<form class="login-form" id="login-form">
|
|
10
|
+
<div>
|
|
11
|
+
<label for="username-input">Username</label>
|
|
12
|
+
<input type="text" id="username-input" autofocus/>
|
|
13
|
+
</div>
|
|
14
|
+
<div>
|
|
15
|
+
<label for="password-input">Password</label>
|
|
16
|
+
<input type="password" id="password-input"/>
|
|
17
|
+
</div>
|
|
18
|
+
<div>
|
|
19
|
+
<button id="submit-form-button" type="submit">Login</button>
|
|
20
|
+
</div>
|
|
21
|
+
</form>
|
|
22
|
+
<script src="login.js"></script>
|
|
23
|
+
</body>
|
|
24
|
+
</html>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const { ipcRenderer } = require('electron');
|
|
2
|
+
|
|
3
|
+
document.getElementById('login-form').addEventListener('submit', (event) => {
|
|
4
|
+
event.preventDefault();
|
|
5
|
+
const usernameInput = document.getElementById('username-input');
|
|
6
|
+
const username = usernameInput.nodeValue || usernameInput.value;
|
|
7
|
+
const passwordInput = document.getElementById('password-input');
|
|
8
|
+
const password = passwordInput.nodeValue || passwordInput.value;
|
|
9
|
+
ipcRenderer.send('login-message', [username, password]);
|
|
10
|
+
});
|