pressship 0.1.1 → 0.1.2
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/auth/login.js +14 -5
- package/dist/auth/login.js.map +1 -1
- package/dist/auth/session.d.ts +1 -0
- package/dist/auth/session.js +3 -1
- package/dist/auth/session.js.map +1 -1
- package/dist/auth/whoami.js +9 -4
- package/dist/auth/whoami.js.map +1 -1
- package/package.json +1 -1
package/dist/auth/login.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { openBrowserSession, saveBrowserSession } from "./session.js";
|
|
1
|
+
import { isLoggedIn, openBrowserSession, saveBrowserSession } from "./session.js";
|
|
2
2
|
import { accountFromLoggedInCookie, accountFromLoggedInText, accountFromCurrentPageProfileLink } from "./whoami.js";
|
|
3
3
|
import { ui } from "../ui.js";
|
|
4
4
|
const loginTimeoutMs = 5 * 60 * 1000;
|
|
5
5
|
const loginPollMs = 1_000;
|
|
6
6
|
export async function login() {
|
|
7
7
|
ui.intro("Login to WordPress.org");
|
|
8
|
-
const { context, page } = await openBrowserSession({ headless: false });
|
|
8
|
+
const { context, page } = await openBrowserSession({ headless: false, useSavedSession: false });
|
|
9
9
|
try {
|
|
10
10
|
await page.goto("https://login.wordpress.org/", { waitUntil: "domcontentloaded" });
|
|
11
11
|
ui.info("Complete the WordPress.org login in the opened browser. Pressship will continue automatically.");
|
|
@@ -19,21 +19,30 @@ export async function login() {
|
|
|
19
19
|
const deadline = Date.now() + loginTimeoutMs;
|
|
20
20
|
while (Date.now() < deadline) {
|
|
21
21
|
const cookieAccount = await accountFromLoggedInCookie(context);
|
|
22
|
-
if (cookieAccount) {
|
|
22
|
+
if (cookieAccount && (await sessionWorksOnWordPressOrg())) {
|
|
23
23
|
return cookieAccount;
|
|
24
24
|
}
|
|
25
25
|
const linkAccount = await accountFromCurrentPageProfileLink(page).catch(() => undefined);
|
|
26
|
-
if (linkAccount) {
|
|
26
|
+
if (linkAccount && (await sessionWorksOnWordPressOrg())) {
|
|
27
27
|
return linkAccount;
|
|
28
28
|
}
|
|
29
29
|
const pageText = await page.locator("body").innerText({ timeout: 1_000 }).catch(() => "");
|
|
30
30
|
const textAccount = accountFromLoggedInText(pageText);
|
|
31
|
-
if (textAccount) {
|
|
31
|
+
if (textAccount && (await sessionWorksOnWordPressOrg())) {
|
|
32
32
|
return textAccount;
|
|
33
33
|
}
|
|
34
34
|
await page.waitForTimeout(loginPollMs);
|
|
35
35
|
}
|
|
36
36
|
throw new Error("Timed out waiting for WordPress.org login. Run `pressship login` again.");
|
|
37
37
|
}
|
|
38
|
+
async function sessionWorksOnWordPressOrg() {
|
|
39
|
+
const verificationPage = await context.newPage();
|
|
40
|
+
try {
|
|
41
|
+
return await isLoggedIn(verificationPage);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
await verificationPage.close();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
38
47
|
}
|
|
39
48
|
//# sourceMappingURL=login.js.map
|
package/dist/auth/login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,iCAAiC,EAElC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,MAAM,WAAW,GAAG,KAAK,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,EAAE,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACnC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,kBAAkB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;IAEhG,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACnF,EAAE,CAAC,IAAI,CAAC,gGAAgG,CAAC,CAAC;QAE1G,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,iCAAiC,EAAE,sBAAsB,EAAE,CAAC,KAAK,EAAE,EAAE,CACjG,gBAAgB,KAAK,CAAC,QAAQ,EAAE,CACjC,CAAC;QAEF,MAAM,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAC9E,iDAAiD,OAAO,CAAC,QAAQ,GAAG,CACrE,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,UAAU,sBAAsB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC;QAE7C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;YAC/D,IAAI,aAAa,IAAI,CAAC,MAAM,0BAA0B,EAAE,CAAC,EAAE,CAAC;gBAC1D,OAAO,aAAa,CAAC;YACvB,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,iCAAiC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACzF,IAAI,WAAW,IAAI,CAAC,MAAM,0BAA0B,EAAE,CAAC,EAAE,CAAC;gBACxD,OAAO,WAAW,CAAC;YACrB,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1F,MAAM,WAAW,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAI,WAAW,IAAI,CAAC,MAAM,0BAA0B,EAAE,CAAC,EAAE,CAAC;gBACxD,OAAO,WAAW,CAAC;YACrB,CAAC;YAED,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IAED,KAAK,UAAU,0BAA0B;QACvC,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,OAAO,MAAM,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC5C,CAAC;gBAAS,CAAC;YACT,MAAM,gBAAgB,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/auth/session.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type BrowserContext, type Page } from "playwright";
|
|
2
2
|
export type BrowserSessionOptions = {
|
|
3
3
|
headless?: boolean;
|
|
4
|
+
useSavedSession?: boolean;
|
|
4
5
|
};
|
|
5
6
|
export declare function openBrowserSession(options?: BrowserSessionOptions): Promise<{
|
|
6
7
|
context: BrowserContext;
|
package/dist/auth/session.js
CHANGED
|
@@ -8,7 +8,9 @@ export async function openBrowserSession(options = {}) {
|
|
|
8
8
|
await ensureConfigDir();
|
|
9
9
|
const browser = await launchChromium(options);
|
|
10
10
|
const storageStatePath = getStorageStatePath();
|
|
11
|
-
const context = await browser.newContext(
|
|
11
|
+
const context = await browser.newContext(options.useSavedSession !== false && pathExists(storageStatePath)
|
|
12
|
+
? { storageState: storageStatePath }
|
|
13
|
+
: undefined);
|
|
12
14
|
const page = await context.newPage();
|
|
13
15
|
return { context, page };
|
|
14
16
|
}
|
package/dist/auth/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/auth/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAkC,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAErF,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/auth/session.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/whoami.js
CHANGED
|
@@ -21,10 +21,6 @@ export async function getWordPressOrgAccount() {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
export async function detectWordPressOrgAccount(context, page) {
|
|
24
|
-
const cookieAccount = await accountFromLoggedInCookie(context);
|
|
25
|
-
if (cookieAccount) {
|
|
26
|
-
return cookieAccount;
|
|
27
|
-
}
|
|
28
24
|
if (page) {
|
|
29
25
|
const account = await accountFromCurrentPageProfileLink(page);
|
|
30
26
|
if (account) {
|
|
@@ -35,6 +31,15 @@ export async function detectWordPressOrgAccount(context, page) {
|
|
|
35
31
|
if (navigatedAccount) {
|
|
36
32
|
return navigatedAccount;
|
|
37
33
|
}
|
|
34
|
+
const pageText = await page.locator("body").innerText({ timeout: 10_000 }).catch(() => "");
|
|
35
|
+
const textAccount = accountFromLoggedInText(pageText);
|
|
36
|
+
if (textAccount) {
|
|
37
|
+
return textAccount;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const cookieAccount = page ? undefined : await accountFromLoggedInCookie(context);
|
|
41
|
+
if (cookieAccount) {
|
|
42
|
+
return cookieAccount;
|
|
38
43
|
}
|
|
39
44
|
throw new Error("Saved WordPress.org session is not logged in. Run `pressship login` again.");
|
|
40
45
|
}
|
package/dist/auth/whoami.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/auth/whoami.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAY9B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAyB,EAAE;IACtD,IAAI,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,sCAAsC,EAAE,sBAAsB,EAAE,CAAC,KAAK,EAAE,EAAE,CACtG,oBAAoB,KAAK,CAAC,QAAQ,EAAE,CACrC,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvE,IAAI,CAAC;QACH,OAAO,MAAM,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAuB,EACvB,IAAW;IAEX,MAAM,
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/auth/whoami.ts"],"names":[],"mappings":"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"}
|