@datacamp/learn-vm-scripts 1.8.8 → 1.9.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/dist/index.cjs +46 -10
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -366835,30 +366835,34 @@ var resetChrome = async ({ userDataDir }) => {
|
|
|
366835
366835
|
};
|
|
366836
366836
|
|
|
366837
366837
|
// src/snowflakeLogin.ts
|
|
366838
|
+
var USERNAME_SELECTOR = 'input[autocomplete="username"]';
|
|
366839
|
+
var PASSWORD_SELECTOR = 'input[autocomplete="current-password"]';
|
|
366840
|
+
var OTP_SELECTOR = 'input[autocomplete="one-time-code"]';
|
|
366838
366841
|
async function loginToSnowflake({
|
|
366839
366842
|
url,
|
|
366840
366843
|
username,
|
|
366841
366844
|
page,
|
|
366842
|
-
password
|
|
366845
|
+
password,
|
|
366846
|
+
otp
|
|
366843
366847
|
}) {
|
|
366844
366848
|
log("Navigating to Snowflake login page...");
|
|
366845
366849
|
await page.goto(ensureHttps(url));
|
|
366846
|
-
await page.waitForSelector(
|
|
366847
|
-
const usernameField = await page.$(
|
|
366850
|
+
await page.waitForSelector(USERNAME_SELECTOR);
|
|
366851
|
+
const usernameField = await page.$(USERNAME_SELECTOR);
|
|
366848
366852
|
if (!usernameField) {
|
|
366849
366853
|
throw new Error("Username field not found");
|
|
366850
366854
|
}
|
|
366851
366855
|
await usernameField.click({ clickCount: 3 });
|
|
366852
366856
|
await page.keyboard.press("Backspace");
|
|
366853
|
-
await page.type(
|
|
366854
|
-
await page.waitForSelector(
|
|
366855
|
-
const passwordField = await page.$(
|
|
366857
|
+
await page.type(USERNAME_SELECTOR, username);
|
|
366858
|
+
await page.waitForSelector(PASSWORD_SELECTOR);
|
|
366859
|
+
const passwordField = await page.$(PASSWORD_SELECTOR);
|
|
366856
366860
|
if (!passwordField) {
|
|
366857
366861
|
throw new Error("Password field not found");
|
|
366858
366862
|
}
|
|
366859
366863
|
await passwordField.click({ clickCount: 3 });
|
|
366860
366864
|
await page.keyboard.press("Backspace");
|
|
366861
|
-
await page.type(
|
|
366865
|
+
await page.type(PASSWORD_SELECTOR, password);
|
|
366862
366866
|
await page.waitForSelector("button:not([disabled])");
|
|
366863
366867
|
const buttons = await page.$$("button:not([disabled])");
|
|
366864
366868
|
let signInButtonHandle;
|
|
@@ -366876,7 +366880,37 @@ async function loginToSnowflake({
|
|
|
366876
366880
|
throw new Error("Could not find an enabled Sign in button on the page.");
|
|
366877
366881
|
}
|
|
366878
366882
|
await signInButtonHandle.click();
|
|
366879
|
-
|
|
366883
|
+
if (otp != null) {
|
|
366884
|
+
log("Handling Snowflake OTP challenge...");
|
|
366885
|
+
await page.waitForSelector(OTP_SELECTOR, {
|
|
366886
|
+
timeout: 15e3
|
|
366887
|
+
});
|
|
366888
|
+
const otpField = await page.$(OTP_SELECTOR);
|
|
366889
|
+
if (!otpField) {
|
|
366890
|
+
throw new Error("OTP field not found");
|
|
366891
|
+
}
|
|
366892
|
+
await otpField.click({ clickCount: 3 });
|
|
366893
|
+
await page.keyboard.press("Backspace");
|
|
366894
|
+
await page.type(OTP_SELECTOR, otp);
|
|
366895
|
+
const enabledButtons = await page.$$("button:not([disabled])");
|
|
366896
|
+
let continueButtonHandle;
|
|
366897
|
+
for (const btn of enabledButtons) {
|
|
366898
|
+
const textContent = await page.evaluate(
|
|
366899
|
+
(el) => el.textContent?.trim(),
|
|
366900
|
+
btn
|
|
366901
|
+
);
|
|
366902
|
+
if (textContent === "Continue") {
|
|
366903
|
+
continueButtonHandle = btn;
|
|
366904
|
+
break;
|
|
366905
|
+
}
|
|
366906
|
+
}
|
|
366907
|
+
if (!continueButtonHandle) {
|
|
366908
|
+
throw new Error("Could not find an enabled Continue button on the page.");
|
|
366909
|
+
}
|
|
366910
|
+
await continueButtonHandle.click();
|
|
366911
|
+
log("Snowflake OTP challenge completed");
|
|
366912
|
+
}
|
|
366913
|
+
log("Logged in to Snowflake");
|
|
366880
366914
|
}
|
|
366881
366915
|
|
|
366882
366916
|
// src/fabricLogin.ts
|
|
@@ -366989,7 +367023,8 @@ var LoggedInProvidersSchema = objectType({
|
|
|
366989
367023
|
cloudProvider: enumType(["aws", "azure", "snowflake", "n8n"]),
|
|
366990
367024
|
username: stringType(),
|
|
366991
367025
|
password: stringType(),
|
|
366992
|
-
url: stringType()
|
|
367026
|
+
url: stringType(),
|
|
367027
|
+
otp: stringType().min(1).optional()
|
|
366993
367028
|
});
|
|
366994
367029
|
var Input = discriminatedUnionType("cloudProvider", [
|
|
366995
367030
|
LoggedOutProvidersSchema,
|
|
@@ -367045,7 +367080,8 @@ var handleInput = async ({ line, page }) => {
|
|
|
367045
367080
|
url: input.url,
|
|
367046
367081
|
username: input.username,
|
|
367047
367082
|
page,
|
|
367048
|
-
password: input.password
|
|
367083
|
+
password: input.password,
|
|
367084
|
+
otp: input.otp
|
|
367049
367085
|
});
|
|
367050
367086
|
break;
|
|
367051
367087
|
case "perplexity":
|
package/package.json
CHANGED