@lvce-editor/main-process 6.18.0 → 6.19.1
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/dist/mainProcessMain.js +252 -28
- package/package.json +1 -1
package/dist/mainProcessMain.js
CHANGED
|
@@ -7,7 +7,7 @@ import { spawn } from 'node:child_process';
|
|
|
7
7
|
import { Console } from 'node:console';
|
|
8
8
|
import { mkdirSync, createWriteStream, readFileSync, openAsBlob, existsSync, writeFileSync, rmSync, openSync, writeSync, closeSync } from 'node:fs';
|
|
9
9
|
import * as NodePath from 'node:path';
|
|
10
|
-
import { dirname, join as join$1 } from 'node:path';
|
|
10
|
+
import { dirname, join as join$1, isAbsolute } from 'node:path';
|
|
11
11
|
import { homedir, tmpdir } from 'node:os';
|
|
12
12
|
import { pbkdf2Sync, createDecipheriv, createHash } from 'node:crypto';
|
|
13
13
|
import { DatabaseSync } from 'node:sqlite';
|
|
@@ -4645,7 +4645,7 @@ const decrypt$1 = (hostKey, encryptedValue, databaseVersion) => {
|
|
|
4645
4645
|
|
|
4646
4646
|
const chromeEpochOffsetMicroseconds = 11_644_473_600_000_000n;
|
|
4647
4647
|
const microsecondsPerSecond = 1_000_000n;
|
|
4648
|
-
const getSameSite = sameSite => {
|
|
4648
|
+
const getSameSite$1 = sameSite => {
|
|
4649
4649
|
switch (sameSite) {
|
|
4650
4650
|
case 0:
|
|
4651
4651
|
return 'no_restriction';
|
|
@@ -4667,7 +4667,7 @@ const getValue = (row, databaseVersion) => {
|
|
|
4667
4667
|
}
|
|
4668
4668
|
return decrypt$1(row.hostKey, row.encryptedValue, databaseVersion);
|
|
4669
4669
|
};
|
|
4670
|
-
const convert = (row, databaseVersion, now = Date.now() / 1000) => {
|
|
4670
|
+
const convert$1 = (row, databaseVersion, now = Date.now() / 1000) => {
|
|
4671
4671
|
if (!row.hostKey || row.topFrameSiteKey) {
|
|
4672
4672
|
return undefined;
|
|
4673
4673
|
}
|
|
@@ -4680,7 +4680,7 @@ const convert = (row, databaseVersion, now = Date.now() / 1000) => {
|
|
|
4680
4680
|
httpOnly: Boolean(row.isHttpOnly),
|
|
4681
4681
|
name: row.name,
|
|
4682
4682
|
path: row.path || '/',
|
|
4683
|
-
sameSite: getSameSite(row.sameSite),
|
|
4683
|
+
sameSite: getSameSite$1(row.sameSite),
|
|
4684
4684
|
secure,
|
|
4685
4685
|
url: `${secure ? 'https' : 'http'}://${host}/`,
|
|
4686
4686
|
value: getValue(row, databaseVersion)
|
|
@@ -4699,14 +4699,14 @@ const convert = (row, databaseVersion, now = Date.now() / 1000) => {
|
|
|
4699
4699
|
};
|
|
4700
4700
|
|
|
4701
4701
|
/* eslint-disable n/no-unsupported-features/node-builtins -- Electron 43 provides the node:sqlite API used by the main process */
|
|
4702
|
-
const getDatabaseError = error => {
|
|
4702
|
+
const getDatabaseError$1 = error => {
|
|
4703
4703
|
const message = error instanceof Error ? error.message : String(error);
|
|
4704
4704
|
if (message.toLowerCase().includes('locked') || message.toLowerCase().includes('busy')) {
|
|
4705
4705
|
return new Error('Chrome cookie database is busy. Close Chrome and try again.');
|
|
4706
4706
|
}
|
|
4707
4707
|
return new Error('Failed to read the Chrome cookie database');
|
|
4708
4708
|
};
|
|
4709
|
-
const withDatabase = (path, fn) => {
|
|
4709
|
+
const withDatabase$1 = (path, fn) => {
|
|
4710
4710
|
let database;
|
|
4711
4711
|
try {
|
|
4712
4712
|
database = new DatabaseSync(path, {
|
|
@@ -4718,12 +4718,12 @@ const withDatabase = (path, fn) => {
|
|
|
4718
4718
|
if (error instanceof Error && error.message.startsWith('Unsupported Chrome cookie database version')) {
|
|
4719
4719
|
throw error;
|
|
4720
4720
|
}
|
|
4721
|
-
throw getDatabaseError(error);
|
|
4721
|
+
throw getDatabaseError$1(error);
|
|
4722
4722
|
} finally {
|
|
4723
4723
|
database?.close();
|
|
4724
4724
|
}
|
|
4725
4725
|
};
|
|
4726
|
-
const getVersion = database => {
|
|
4726
|
+
const getVersion$1 = database => {
|
|
4727
4727
|
const row = database.prepare(`SELECT value FROM meta WHERE key = 'version'`).get();
|
|
4728
4728
|
const version = Number(row?.value);
|
|
4729
4729
|
if (version !== 24) {
|
|
@@ -4731,16 +4731,16 @@ const getVersion = database => {
|
|
|
4731
4731
|
}
|
|
4732
4732
|
return version;
|
|
4733
4733
|
};
|
|
4734
|
-
const getCookieCount = path => {
|
|
4735
|
-
return withDatabase(path, database => {
|
|
4736
|
-
getVersion(database);
|
|
4734
|
+
const getCookieCount$1 = path => {
|
|
4735
|
+
return withDatabase$1(path, database => {
|
|
4736
|
+
getVersion$1(database);
|
|
4737
4737
|
const row = database.prepare('SELECT COUNT(*) AS count FROM cookies').get();
|
|
4738
4738
|
return row.count;
|
|
4739
4739
|
});
|
|
4740
4740
|
};
|
|
4741
|
-
const readCookies = path => {
|
|
4742
|
-
return withDatabase(path, database => {
|
|
4743
|
-
const version = getVersion(database);
|
|
4741
|
+
const readCookies$1 = path => {
|
|
4742
|
+
return withDatabase$1(path, database => {
|
|
4743
|
+
const version = getVersion$1(database);
|
|
4744
4744
|
const rows = database.prepare(`
|
|
4745
4745
|
SELECT
|
|
4746
4746
|
encrypted_value AS encryptedValue,
|
|
@@ -4795,7 +4795,7 @@ const getChromeDataDirectory = () => {
|
|
|
4795
4795
|
const configDirectory = process.env.XDG_CONFIG_HOME || join$1(homedir(), '.config');
|
|
4796
4796
|
return join$1(configDirectory, 'google-chrome');
|
|
4797
4797
|
};
|
|
4798
|
-
const getActiveProfile = chromeDataDirectory => {
|
|
4798
|
+
const getActiveProfile$1 = chromeDataDirectory => {
|
|
4799
4799
|
const localStatePath = join$1(chromeDataDirectory, 'Local State');
|
|
4800
4800
|
if (!existsSync(localStatePath)) {
|
|
4801
4801
|
throw new Error(`Google Chrome profile data was not found at ${chromeDataDirectory}`);
|
|
@@ -4953,31 +4953,31 @@ const assertLinux = () => {
|
|
|
4953
4953
|
throw new Error('Importing Chrome cookies is only supported on Linux');
|
|
4954
4954
|
}
|
|
4955
4955
|
};
|
|
4956
|
-
const getInfoFromDirectory = chromeDataDirectory => {
|
|
4957
|
-
const profile = getActiveProfile(chromeDataDirectory);
|
|
4958
|
-
const cookieCount = getCookieCount(profile.cookieDatabasePath);
|
|
4956
|
+
const getInfoFromDirectory$1 = chromeDataDirectory => {
|
|
4957
|
+
const profile = getActiveProfile$1(chromeDataDirectory);
|
|
4958
|
+
const cookieCount = getCookieCount$1(profile.cookieDatabasePath);
|
|
4959
4959
|
return {
|
|
4960
4960
|
cookieCount,
|
|
4961
4961
|
profileDirectory: profile.directory,
|
|
4962
4962
|
profileName: profile.name
|
|
4963
4963
|
};
|
|
4964
4964
|
};
|
|
4965
|
-
const getInfo = () => {
|
|
4965
|
+
const getInfo$1 = () => {
|
|
4966
4966
|
assertLinux();
|
|
4967
|
-
return getInfoFromDirectory(getChromeDataDirectory());
|
|
4967
|
+
return getInfoFromDirectory$1(getChromeDataDirectory());
|
|
4968
4968
|
};
|
|
4969
|
-
const importFromDirectory = async (chromeDataDirectory, session) => {
|
|
4970
|
-
const profile = getActiveProfile(chromeDataDirectory);
|
|
4969
|
+
const importFromDirectory$1 = async (chromeDataDirectory, session) => {
|
|
4970
|
+
const profile = getActiveProfile$1(chromeDataDirectory);
|
|
4971
4971
|
const {
|
|
4972
4972
|
rows,
|
|
4973
4973
|
version
|
|
4974
|
-
} = readCookies(profile.cookieDatabasePath);
|
|
4974
|
+
} = readCookies$1(profile.cookieDatabasePath);
|
|
4975
4975
|
const cookies = [];
|
|
4976
4976
|
let skipped = 0;
|
|
4977
4977
|
let unsupportedEncryption = 0;
|
|
4978
4978
|
for (const row of rows) {
|
|
4979
4979
|
try {
|
|
4980
|
-
const cookie = convert(row, version);
|
|
4980
|
+
const cookie = convert$1(row, version);
|
|
4981
4981
|
if (cookie) {
|
|
4982
4982
|
cookies.push(cookie);
|
|
4983
4983
|
} else {
|
|
@@ -5010,9 +5010,9 @@ const importFromDirectory = async (chromeDataDirectory, session) => {
|
|
|
5010
5010
|
skipped
|
|
5011
5011
|
};
|
|
5012
5012
|
};
|
|
5013
|
-
const importCookies = async () => {
|
|
5013
|
+
const importCookies$1 = async () => {
|
|
5014
5014
|
assertLinux();
|
|
5015
|
-
return importFromDirectory(getChromeDataDirectory(), getSession());
|
|
5015
|
+
return importFromDirectory$1(getChromeDataDirectory(), getSession());
|
|
5016
5016
|
};
|
|
5017
5017
|
|
|
5018
5018
|
const handleTimeout = () => {
|
|
@@ -6849,6 +6849,228 @@ const open2 = async (options, url) => {
|
|
|
6849
6849
|
}
|
|
6850
6850
|
};
|
|
6851
6851
|
|
|
6852
|
+
const getSameSite = sameSite => {
|
|
6853
|
+
switch (sameSite) {
|
|
6854
|
+
case 0:
|
|
6855
|
+
return 'no_restriction';
|
|
6856
|
+
case 1:
|
|
6857
|
+
return 'lax';
|
|
6858
|
+
case 2:
|
|
6859
|
+
return 'strict';
|
|
6860
|
+
default:
|
|
6861
|
+
return 'unspecified';
|
|
6862
|
+
}
|
|
6863
|
+
};
|
|
6864
|
+
const getUrlHost = host => {
|
|
6865
|
+
return host.includes(':') && !host.startsWith('[') ? `[${host}]` : host;
|
|
6866
|
+
};
|
|
6867
|
+
const convert = (row, now = Date.now() / 1000) => {
|
|
6868
|
+
if (!row.host || row.originAttributes) {
|
|
6869
|
+
return undefined;
|
|
6870
|
+
}
|
|
6871
|
+
const host = row.host.startsWith('.') ? row.host.slice(1) : row.host;
|
|
6872
|
+
if (!host) {
|
|
6873
|
+
return undefined;
|
|
6874
|
+
}
|
|
6875
|
+
const expirationDate = row.expiry;
|
|
6876
|
+
if (!Number.isFinite(expirationDate) || expirationDate <= now) {
|
|
6877
|
+
return undefined;
|
|
6878
|
+
}
|
|
6879
|
+
const secure = Boolean(row.isSecure);
|
|
6880
|
+
const details = {
|
|
6881
|
+
expirationDate,
|
|
6882
|
+
httpOnly: Boolean(row.isHttpOnly),
|
|
6883
|
+
name: row.name,
|
|
6884
|
+
path: row.path || '/',
|
|
6885
|
+
sameSite: getSameSite(row.sameSite),
|
|
6886
|
+
secure,
|
|
6887
|
+
url: `${secure ? 'https' : 'http'}://${getUrlHost(host)}/`,
|
|
6888
|
+
value: row.value
|
|
6889
|
+
};
|
|
6890
|
+
if (row.host.startsWith('.')) {
|
|
6891
|
+
details.domain = row.host;
|
|
6892
|
+
}
|
|
6893
|
+
return details;
|
|
6894
|
+
};
|
|
6895
|
+
|
|
6896
|
+
/* eslint-disable n/no-unsupported-features/node-builtins -- Electron 43 provides the node:sqlite API used by the main process */
|
|
6897
|
+
const getDatabaseError = error => {
|
|
6898
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
6899
|
+
if (message.toLowerCase().includes('locked') || message.toLowerCase().includes('busy')) {
|
|
6900
|
+
return new Error('Firefox cookie database is busy. Close Firefox and try again.');
|
|
6901
|
+
}
|
|
6902
|
+
return new Error('Failed to read the Firefox cookie database');
|
|
6903
|
+
};
|
|
6904
|
+
const withDatabase = (path, fn) => {
|
|
6905
|
+
let database;
|
|
6906
|
+
try {
|
|
6907
|
+
database = new DatabaseSync(path, {
|
|
6908
|
+
readOnly: true
|
|
6909
|
+
});
|
|
6910
|
+
database.exec('PRAGMA busy_timeout = 1000');
|
|
6911
|
+
return fn(database);
|
|
6912
|
+
} catch (error) {
|
|
6913
|
+
if (error instanceof Error && error.message.startsWith('Unsupported Firefox cookie database version')) {
|
|
6914
|
+
throw error;
|
|
6915
|
+
}
|
|
6916
|
+
throw getDatabaseError(error);
|
|
6917
|
+
} finally {
|
|
6918
|
+
database?.close();
|
|
6919
|
+
}
|
|
6920
|
+
};
|
|
6921
|
+
const getVersion = database => {
|
|
6922
|
+
const row = database.prepare('PRAGMA user_version').get();
|
|
6923
|
+
if (row.user_version < 9) {
|
|
6924
|
+
throw new Error(`Unsupported Firefox cookie database version ${row.user_version}`);
|
|
6925
|
+
}
|
|
6926
|
+
return row.user_version;
|
|
6927
|
+
};
|
|
6928
|
+
const getCookieCount = path => {
|
|
6929
|
+
return withDatabase(path, database => {
|
|
6930
|
+
getVersion(database);
|
|
6931
|
+
const row = database.prepare('SELECT COUNT(*) AS count FROM moz_cookies').get();
|
|
6932
|
+
return row.count;
|
|
6933
|
+
});
|
|
6934
|
+
};
|
|
6935
|
+
const readCookies = path => {
|
|
6936
|
+
return withDatabase(path, database => {
|
|
6937
|
+
const version = getVersion(database);
|
|
6938
|
+
const rows = database.prepare(`
|
|
6939
|
+
SELECT
|
|
6940
|
+
expiry,
|
|
6941
|
+
host,
|
|
6942
|
+
isHttpOnly,
|
|
6943
|
+
isSecure,
|
|
6944
|
+
name,
|
|
6945
|
+
originAttributes,
|
|
6946
|
+
path,
|
|
6947
|
+
sameSite,
|
|
6948
|
+
value
|
|
6949
|
+
FROM moz_cookies
|
|
6950
|
+
`).all();
|
|
6951
|
+
return {
|
|
6952
|
+
rows,
|
|
6953
|
+
version
|
|
6954
|
+
};
|
|
6955
|
+
});
|
|
6956
|
+
};
|
|
6957
|
+
|
|
6958
|
+
const parseIni = content => {
|
|
6959
|
+
const sections = {};
|
|
6960
|
+
let section;
|
|
6961
|
+
for (const line of content.split(/\r?\n/)) {
|
|
6962
|
+
const trimmed = line.trim();
|
|
6963
|
+
const sectionMatch = /^\[([^\]]+)\]$/.exec(trimmed);
|
|
6964
|
+
if (sectionMatch) {
|
|
6965
|
+
section = {};
|
|
6966
|
+
sections[sectionMatch[1]] = section;
|
|
6967
|
+
} else if (section && trimmed && !trimmed.startsWith(';') && !trimmed.startsWith('#')) {
|
|
6968
|
+
const separatorIndex = trimmed.indexOf('=');
|
|
6969
|
+
if (separatorIndex !== -1) {
|
|
6970
|
+
section[trimmed.slice(0, separatorIndex)] = trimmed.slice(separatorIndex + 1);
|
|
6971
|
+
}
|
|
6972
|
+
}
|
|
6973
|
+
}
|
|
6974
|
+
return sections;
|
|
6975
|
+
};
|
|
6976
|
+
const getProfilePath = (firefoxDataDirectory, profile) => {
|
|
6977
|
+
if (profile.IsRelative === '0' || isAbsolute(profile.Path)) {
|
|
6978
|
+
return profile.Path;
|
|
6979
|
+
}
|
|
6980
|
+
return join$1(firefoxDataDirectory, profile.Path);
|
|
6981
|
+
};
|
|
6982
|
+
const getFirefoxDataDirectory = () => {
|
|
6983
|
+
const homeDirectory = homedir();
|
|
6984
|
+
if (process.platform === 'win32') {
|
|
6985
|
+
const applicationDataDirectory = process.env.APPDATA || join$1(homeDirectory, 'AppData', 'Roaming');
|
|
6986
|
+
return join$1(applicationDataDirectory, 'Mozilla', 'Firefox');
|
|
6987
|
+
}
|
|
6988
|
+
if (process.platform === 'darwin') {
|
|
6989
|
+
return join$1(homeDirectory, 'Library', 'Application Support', 'Firefox');
|
|
6990
|
+
}
|
|
6991
|
+
const candidates = [join$1(homeDirectory, '.mozilla', 'firefox'), join$1(homeDirectory, 'snap', 'firefox', 'common', '.mozilla', 'firefox'), join$1(homeDirectory, '.var', 'app', 'org.mozilla.firefox', '.mozilla', 'firefox')];
|
|
6992
|
+
const directory = candidates.find(candidate => existsSync(join$1(candidate, 'profiles.ini')));
|
|
6993
|
+
return directory || candidates[0];
|
|
6994
|
+
};
|
|
6995
|
+
const getActiveProfile = firefoxDataDirectory => {
|
|
6996
|
+
const profilesPath = join$1(firefoxDataDirectory, 'profiles.ini');
|
|
6997
|
+
if (!existsSync(profilesPath)) {
|
|
6998
|
+
throw new Error(`Firefox profile data was not found at ${firefoxDataDirectory}`);
|
|
6999
|
+
}
|
|
7000
|
+
let sections;
|
|
7001
|
+
try {
|
|
7002
|
+
sections = parseIni(readFileSync(profilesPath, 'utf8'));
|
|
7003
|
+
} catch {
|
|
7004
|
+
throw new Error('Firefox profile metadata is invalid');
|
|
7005
|
+
}
|
|
7006
|
+
const profiles = Object.entries(sections).filter(([sectionName, profile]) => sectionName.startsWith('Profile') && profile.Path);
|
|
7007
|
+
const installs = Object.entries(sections).filter(([sectionName, install]) => sectionName.startsWith('Install') && install.Default);
|
|
7008
|
+
const installDefault = (installs.find(([, install]) => install.Locked === '1') || installs[0])?.[1].Default;
|
|
7009
|
+
const selected = profiles.find(([, profile]) => profile.Path === installDefault) || profiles.find(([, profile]) => profile.Default === '1') || profiles[0];
|
|
7010
|
+
if (!selected) {
|
|
7011
|
+
throw new Error('Firefox profile metadata does not contain a profile');
|
|
7012
|
+
}
|
|
7013
|
+
const [, profile] = selected;
|
|
7014
|
+
const profilePath = getProfilePath(firefoxDataDirectory, profile);
|
|
7015
|
+
const cookieDatabasePath = join$1(profilePath, 'cookies.sqlite');
|
|
7016
|
+
if (!existsSync(cookieDatabasePath)) {
|
|
7017
|
+
throw new Error(`Firefox cookie database was not found for profile ${profile.Path}`);
|
|
7018
|
+
}
|
|
7019
|
+
return {
|
|
7020
|
+
cookieDatabasePath,
|
|
7021
|
+
directory: profile.Path,
|
|
7022
|
+
name: profile.Name || profile.Path
|
|
7023
|
+
};
|
|
7024
|
+
};
|
|
7025
|
+
|
|
7026
|
+
const getInfoFromDirectory = firefoxDataDirectory => {
|
|
7027
|
+
const profile = getActiveProfile(firefoxDataDirectory);
|
|
7028
|
+
const cookieCount = getCookieCount(profile.cookieDatabasePath);
|
|
7029
|
+
return {
|
|
7030
|
+
cookieCount,
|
|
7031
|
+
profileDirectory: profile.directory,
|
|
7032
|
+
profileName: profile.name
|
|
7033
|
+
};
|
|
7034
|
+
};
|
|
7035
|
+
const getInfo = () => {
|
|
7036
|
+
return getInfoFromDirectory(getFirefoxDataDirectory());
|
|
7037
|
+
};
|
|
7038
|
+
const importFromDirectory = async (firefoxDataDirectory, session) => {
|
|
7039
|
+
const profile = getActiveProfile(firefoxDataDirectory);
|
|
7040
|
+
const {
|
|
7041
|
+
rows
|
|
7042
|
+
} = readCookies(profile.cookieDatabasePath);
|
|
7043
|
+
const cookies = [];
|
|
7044
|
+
let skipped = 0;
|
|
7045
|
+
for (const row of rows) {
|
|
7046
|
+
const cookie = convert(row);
|
|
7047
|
+
if (cookie) {
|
|
7048
|
+
cookies.push(cookie);
|
|
7049
|
+
} else {
|
|
7050
|
+
skipped++;
|
|
7051
|
+
}
|
|
7052
|
+
}
|
|
7053
|
+
let imported = 0;
|
|
7054
|
+
let failed = 0;
|
|
7055
|
+
for (const cookie of cookies) {
|
|
7056
|
+
try {
|
|
7057
|
+
await session.cookies.set(cookie);
|
|
7058
|
+
imported++;
|
|
7059
|
+
} catch {
|
|
7060
|
+
failed++;
|
|
7061
|
+
}
|
|
7062
|
+
}
|
|
7063
|
+
await session.cookies.flushStore();
|
|
7064
|
+
return {
|
|
7065
|
+
failed,
|
|
7066
|
+
imported,
|
|
7067
|
+
skipped
|
|
7068
|
+
};
|
|
7069
|
+
};
|
|
7070
|
+
const importCookies = async () => {
|
|
7071
|
+
return importFromDirectory(getFirefoxDataDirectory(), getSession());
|
|
7072
|
+
};
|
|
7073
|
+
|
|
6852
7074
|
const getWindowId = webContentsId => {
|
|
6853
7075
|
number(webContentsId);
|
|
6854
7076
|
const webContents = Electron.webContents.fromId(webContentsId);
|
|
@@ -7006,8 +7228,8 @@ const trash = async path => {
|
|
|
7006
7228
|
const commandMap = {
|
|
7007
7229
|
'AppWindow.createAppWindow': createAppWindow,
|
|
7008
7230
|
'Beep.beep': beep$1,
|
|
7009
|
-
'ChromeCookieImport.getInfo': getInfo,
|
|
7010
|
-
'ChromeCookieImport.importCookies': importCookies,
|
|
7231
|
+
'ChromeCookieImport.getInfo': getInfo$1,
|
|
7232
|
+
'ChromeCookieImport.importCookies': importCookies$1,
|
|
7011
7233
|
'Crash.crashMainProcess': crashMainProcess$1,
|
|
7012
7234
|
'CreateMessagePort.createMessagePort': createMessagePort,
|
|
7013
7235
|
'CreatePidMap.createPidMap': createPidMap,
|
|
@@ -7080,6 +7302,8 @@ const commandMap = {
|
|
|
7080
7302
|
'ElectronWindowGpuInfo.open': open,
|
|
7081
7303
|
'ElectronWindowProcessExplorer.open2': open2,
|
|
7082
7304
|
'Exit.exit': exit,
|
|
7305
|
+
'FirefoxCookieImport.getInfo': getInfo,
|
|
7306
|
+
'FirefoxCookieImport.importCookies': importCookies,
|
|
7083
7307
|
'GetWindowId.getWindowId': getWindowId,
|
|
7084
7308
|
'HandleElectronMessagePort.handleElectronMessagePort': handleElectronMessagePort,
|
|
7085
7309
|
'IpcParent.create': create$1,
|