@pipelab/plugin-construct 1.0.0-beta.20 → 1.0.0-beta.23
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/assets/listeners.ts +144 -0
- package/dist/assets/script.ts +59 -185
- package/dist/index.cjs +64 -28
- package/dist/index.mjs +64 -28
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.mjs
CHANGED
|
@@ -151601,7 +151601,7 @@ const zipFolder = async (from, to, log) => {
|
|
|
151601
151601
|
});
|
|
151602
151602
|
};
|
|
151603
151603
|
//#endregion
|
|
151604
|
-
//#region src/assets/
|
|
151604
|
+
//#region src/assets/listeners.ts
|
|
151605
151605
|
const registerInstallButtonListener = (page, log) => {
|
|
151606
151606
|
const installBtn = page.locator("#addonConfirmInstallDialog").locator(".okButton");
|
|
151607
151607
|
installBtn.waitFor({ timeout: 0 }).then(async () => {
|
|
@@ -151678,7 +151678,60 @@ const registerNewVersionAvailableListener = (page, log) => {
|
|
|
151678
151678
|
log("cancelButton.click() failed", e.message);
|
|
151679
151679
|
});
|
|
151680
151680
|
};
|
|
151681
|
+
const registerNotNowListener = (page, log) => {
|
|
151682
|
+
const notNowBtn = page.getByText("Not now");
|
|
151683
|
+
notNowBtn.waitFor({ timeout: 0 }).then(async () => {
|
|
151684
|
+
await notNowBtn.click();
|
|
151685
|
+
log("notNowBtn clicked");
|
|
151686
|
+
}).catch(async (e) => {
|
|
151687
|
+
if (e.message.includes("Target page, context or browser has been closed")) return;
|
|
151688
|
+
log("notNowBtn.click() failed", e.message);
|
|
151689
|
+
});
|
|
151690
|
+
};
|
|
151691
|
+
//#endregion
|
|
151692
|
+
//#region src/assets/script.ts
|
|
151681
151693
|
const script = async (page, log, filePath, username, password, version, downloadDir) => {
|
|
151694
|
+
if (username && password) {
|
|
151695
|
+
log("Directly authenticating via Construct 3 account API...");
|
|
151696
|
+
const formData = new FormData();
|
|
151697
|
+
formData.append("username", username);
|
|
151698
|
+
formData.append("password", password);
|
|
151699
|
+
formData.append("productType", "games");
|
|
151700
|
+
const json = await (await fetch("https://account.construct.net/login.json", {
|
|
151701
|
+
method: "POST",
|
|
151702
|
+
body: formData
|
|
151703
|
+
})).json();
|
|
151704
|
+
if (json.request.status !== "ok") throw new Error(json.request.errorMessage || "Invalid credentials");
|
|
151705
|
+
const { userID, token } = json.response;
|
|
151706
|
+
log("API login successful, injecting credentials into browser context...");
|
|
151707
|
+
await page.goto("https://account.construct.net/");
|
|
151708
|
+
await page.evaluate(async ({ userID, token }) => {
|
|
151709
|
+
return new Promise((resolve, reject) => {
|
|
151710
|
+
const request = indexedDB.open("localforage", 1);
|
|
151711
|
+
request.onerror = () => reject(/* @__PURE__ */ new Error("Failed to open DB"));
|
|
151712
|
+
request.onsuccess = (e) => {
|
|
151713
|
+
const db = e.target.result;
|
|
151714
|
+
try {
|
|
151715
|
+
const putRequest = db.transaction(["keyvaluepairs"], "readwrite").objectStore("keyvaluepairs").put({
|
|
151716
|
+
userID,
|
|
151717
|
+
token
|
|
151718
|
+
}, "login-data");
|
|
151719
|
+
putRequest.onsuccess = () => resolve();
|
|
151720
|
+
putRequest.onerror = () => reject(/* @__PURE__ */ new Error("Failed to put item"));
|
|
151721
|
+
} catch (err) {
|
|
151722
|
+
reject(err);
|
|
151723
|
+
}
|
|
151724
|
+
};
|
|
151725
|
+
request.onupgradeneeded = (e) => {
|
|
151726
|
+
e.target.result.createObjectStore("keyvaluepairs");
|
|
151727
|
+
};
|
|
151728
|
+
});
|
|
151729
|
+
}, {
|
|
151730
|
+
userID,
|
|
151731
|
+
token
|
|
151732
|
+
});
|
|
151733
|
+
log("Credentials injected successfully.");
|
|
151734
|
+
}
|
|
151682
151735
|
let url = "https://editor.construct.net/";
|
|
151683
151736
|
if (version) url += version;
|
|
151684
151737
|
log("Navigating to URL", url);
|
|
@@ -151686,24 +151739,9 @@ const script = async (page, log, filePath, username, password, version, download
|
|
|
151686
151739
|
log("after navigating");
|
|
151687
151740
|
registerWelcomeToConstructListener(page, log);
|
|
151688
151741
|
registerNewVersionAvailableListener(page, log);
|
|
151742
|
+
registerNotNowListener(page, log);
|
|
151689
151743
|
log("after event");
|
|
151690
151744
|
await page.waitForTimeout(2e3);
|
|
151691
|
-
log("after wait");
|
|
151692
|
-
if (username && password) {
|
|
151693
|
-
log("Authenticating");
|
|
151694
|
-
await page.getByTitle("User account").locator("ui-icon").click();
|
|
151695
|
-
await page.getByRole("menuitem", { name: "Log in" }).locator("span").click();
|
|
151696
|
-
await page.frameLocator("#loginDialog iframe").getByLabel("Username").fill(username);
|
|
151697
|
-
await page.frameLocator("#loginDialog iframe").getByLabel("Password").fill(password);
|
|
151698
|
-
const tokenPromise = page.waitForResponse(/https:\/\/account.*\.construct\.net\/login.json/i);
|
|
151699
|
-
await page.frameLocator("#loginDialog iframe").getByRole("button", { name: "Log in" }).click();
|
|
151700
|
-
if ((await (await tokenPromise).json()).request.status === "error") {
|
|
151701
|
-
await page.close();
|
|
151702
|
-
throw new Error("Invalid credentials");
|
|
151703
|
-
}
|
|
151704
|
-
log("Authenticated");
|
|
151705
|
-
}
|
|
151706
|
-
await page.waitForTimeout(2e3);
|
|
151707
151745
|
const [fileChooser] = await Promise.all([page.waitForEvent("filechooser"), page.keyboard.press("ControlOrMeta+O")]);
|
|
151708
151746
|
log("filechooser");
|
|
151709
151747
|
console.log("filePath", filePath);
|
|
@@ -151719,15 +151757,6 @@ const script = async (page, log, filePath, username, password, version, download
|
|
|
151719
151757
|
const textAsNumber = parseFloat(text);
|
|
151720
151758
|
log("progress", `${(Number.isNaN(textAsNumber) ? 0 : textAsNumber) * 100}%`);
|
|
151721
151759
|
}, 500);
|
|
151722
|
-
const notNowBtn = page.getByText("Not now");
|
|
151723
|
-
notNowBtn.waitFor({ timeout: 0 }).then(async () => {
|
|
151724
|
-
return notNowBtn.click();
|
|
151725
|
-
}).then(() => {
|
|
151726
|
-
log("notNowBtn clicked");
|
|
151727
|
-
}).catch(async (e) => {
|
|
151728
|
-
if (e.message.includes("Target page, context or browser has been closed")) return;
|
|
151729
|
-
log("notNowBtn.click() failed", e.message);
|
|
151730
|
-
});
|
|
151731
151760
|
registerInstallButtonListener(page, log);
|
|
151732
151761
|
registerWebglErrorListener(page, log);
|
|
151733
151762
|
registerMissingAddonErrorListener(page, log);
|
|
@@ -151769,7 +151798,7 @@ const { LOCALAPPDATA, XDG_CONFIG_HOME } = process.env;
|
|
|
151769
151798
|
const isCI = process.env.CI === "true";
|
|
151770
151799
|
let baseProfile;
|
|
151771
151800
|
if (platform$1 === "win32") baseProfile = join(LOCALAPPDATA ?? "", "Google", "Chrome", "User Data");
|
|
151772
|
-
else if (platform$1 === "linux") baseProfile = join(XDG_CONFIG_HOME
|
|
151801
|
+
else if (platform$1 === "linux") baseProfile = join(XDG_CONFIG_HOME && XDG_CONFIG_HOME.trim() !== "" ? XDG_CONFIG_HOME : join(homedir(), ".config"), "google-chrome");
|
|
151773
151802
|
else if (platform$1 === "darwin") baseProfile = join(homedir(), "Library", "Application Support", "Google", "Chrome");
|
|
151774
151803
|
const sharedParams = {
|
|
151775
151804
|
username: createStringParam("", {
|
|
@@ -151864,7 +151893,14 @@ const exportc3p = async (file, { cwd, log, inputs, setOutput, paths, abortSignal
|
|
|
151864
151893
|
await mkdir(customProfile, { recursive: true });
|
|
151865
151894
|
const indexedDbPathSource = join(newInputs.customProfile, "Default", "IndexedDB");
|
|
151866
151895
|
const indexedDbPathDestination = join(customProfile, "Default", "IndexedDB");
|
|
151867
|
-
|
|
151896
|
+
await mkdir(indexedDbPathDestination, { recursive: true });
|
|
151897
|
+
for (const p of ["https_editor.construct.net_0.indexeddb.blob", "https_editor.construct.net_0.indexeddb.leveldb"]) {
|
|
151898
|
+
const from = join(indexedDbPathSource, p);
|
|
151899
|
+
const to = join(indexedDbPathDestination, p);
|
|
151900
|
+
try {
|
|
151901
|
+
await cp(from, to, { recursive: true });
|
|
151902
|
+
} catch (e) {}
|
|
151903
|
+
}
|
|
151868
151904
|
browserContext = await browserInstance.launchPersistentContext(customProfile, {
|
|
151869
151905
|
headless,
|
|
151870
151906
|
locale: "en-US",
|