@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/index.mjs CHANGED
@@ -151601,7 +151601,7 @@ const zipFolder = async (from, to, log) => {
151601
151601
  });
151602
151602
  };
151603
151603
  //#endregion
151604
- //#region src/assets/script.ts
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 ?? "", "google-chrome");
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
- for (const p of ["https_editor.construct.net_0.indexeddb.blob", "https_editor.construct.net_0.indexeddb.leveldb"]) await cp(join(indexedDbPathSource, p), join(indexedDbPathDestination, p), { recursive: true });
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",