@datacamp/learn-vm-scripts 0.0.11 → 1.0.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 CHANGED
@@ -92669,6 +92669,9 @@ function ensureHttps(url) {
92669
92669
  }
92670
92670
  return url;
92671
92671
  }
92672
+ var unreachable = (_) => {
92673
+ throw new Error("unreachable");
92674
+ };
92672
92675
 
92673
92676
  // src/setInput.ts
92674
92677
  var setInput = ({
@@ -92690,7 +92693,7 @@ var log = (message) => {
92690
92693
  };
92691
92694
 
92692
92695
  // src/azureLogin.ts
92693
- var optionalPartsOfLogin = async (page) => {
92696
+ var closeOnboardingPopups = async (page) => {
92694
92697
  const welcomeSurveyCloseButton = 'span.fxs-welcomesurvey-close-icon[role="button"]';
92695
92698
  await page.waitForSelector(welcomeSurveyCloseButton);
92696
92699
  await page.click(welcomeSurveyCloseButton);
@@ -92702,7 +92705,8 @@ async function loginToAzure({
92702
92705
  url,
92703
92706
  username,
92704
92707
  page,
92705
- password
92708
+ password,
92709
+ skipOnboarding = true
92706
92710
  }) {
92707
92711
  log("Navigating to Azure login page...");
92708
92712
  await Promise.all([
@@ -92738,9 +92742,12 @@ async function loginToAzure({
92738
92742
  log("Ensuring user stays signed in ...");
92739
92743
  await page.waitForSelector('[type="submit"]');
92740
92744
  await page.click('[type="submit"]');
92741
- void optionalPartsOfLogin(page).catch((error) => {
92742
- console.error("Error in optional part of Azure login: ", error);
92743
- });
92745
+ if (skipOnboarding) {
92746
+ log("Skipping onboarding...");
92747
+ void closeOnboardingPopups(page).catch((error) => {
92748
+ console.error("Error in onboarding of Azure login: ", error);
92749
+ });
92750
+ }
92744
92751
  log("Logged in to Azure successfully");
92745
92752
  }
92746
92753
 
@@ -92790,8 +92797,17 @@ async function loginToAWS({
92790
92797
  // src/databricksLogin.ts
92791
92798
  async function loginToDatabricks({
92792
92799
  url,
92793
- page
92800
+ page,
92801
+ username,
92802
+ password
92794
92803
  }) {
92804
+ await loginToAzure({
92805
+ url: void 0,
92806
+ username,
92807
+ page,
92808
+ password,
92809
+ skipOnboarding: false
92810
+ });
92795
92811
  log("Navigating to Databricks login page...");
92796
92812
  await page.goto(ensureHttps(url));
92797
92813
  await page.waitForSelector(".aad-btn");
@@ -92837,9 +92853,51 @@ var resetChrome = async ({ userDataDir }) => {
92837
92853
  console.log("Chrome reset!");
92838
92854
  };
92839
92855
 
92856
+ // src/snowflakeLogin.ts
92857
+ var findAsync = (elements, predicate) => {
92858
+ const promises = elements.map(predicate);
92859
+ return Promise.all(promises).then(
92860
+ (results) => elements.find((_, i) => results[i])
92861
+ );
92862
+ };
92863
+ async function loginToSnowflake({
92864
+ url,
92865
+ username,
92866
+ page,
92867
+ password
92868
+ }) {
92869
+ log("Navigating to Snowflake login page...");
92870
+ await page.goto(ensureHttps(url));
92871
+ await page.waitForSelector('input[name="username"]');
92872
+ await setInput({
92873
+ page,
92874
+ querySelector: 'input[name="username"]',
92875
+ value: username
92876
+ });
92877
+ await page.waitForSelector('input[name="password"]');
92878
+ await setInput({
92879
+ page,
92880
+ querySelector: 'input[name="password"]',
92881
+ value: password
92882
+ });
92883
+ const loginButton = 'div[data-test-id="loginButton"][aria-disabled="false"]';
92884
+ await page.waitForSelector(loginButton);
92885
+ await page.click(loginButton);
92886
+ log("Logged in to Snowflake!");
92887
+ log("Skipping optional parts of login");
92888
+ await page.waitForSelector('[data-testid="Dialog Footer"]');
92889
+ log("Dialog Footer found");
92890
+ const buttons = await page.$$('div[role="button"]');
92891
+ const notNowButton = await findAsync(buttons, async (button) => {
92892
+ const innerText = await page.evaluate((el) => el.innerText, button);
92893
+ return innerText === "Not now";
92894
+ });
92895
+ await notNowButton?.click();
92896
+ }
92897
+
92840
92898
  // src/startInputWatcher.ts
92841
92899
  var Input = objectType({
92842
- cloudProvider: enumType(["aws", "azure", "databricks"]),
92900
+ cloudProvider: enumType(["aws", "azure", "databricks", "snowflake"]),
92843
92901
  password: stringType(),
92844
92902
  url: stringType(),
92845
92903
  username: stringType()
@@ -92851,30 +92909,15 @@ var handleInput = async ({ line, page }) => {
92851
92909
  );
92852
92910
  switch (cloudProvider) {
92853
92911
  case "azure":
92854
- await loginToAzure({ url, username, page, password });
92855
- break;
92912
+ return loginToAzure({ url, username, page, password });
92856
92913
  case "aws":
92857
- if (!url) {
92858
- console.error("AWS URL is required");
92859
- process.exit(1);
92860
- }
92861
- await loginToAWS({ url, username, page, password });
92862
- break;
92914
+ return loginToAWS({ url, username, page, password });
92863
92915
  case "databricks":
92864
- if (!url) {
92865
- console.error("Databricks URL is required");
92866
- process.exit(1);
92867
- }
92868
- await loginToAzure({
92869
- url: void 0,
92870
- username,
92871
- page,
92872
- password
92873
- });
92874
- await loginToDatabricks({ url, page });
92875
- break;
92916
+ return loginToDatabricks({ url, page, password, username });
92917
+ case "snowflake":
92918
+ return loginToSnowflake({ url, username, page, password });
92876
92919
  default:
92877
- console.error("Unsupported cloud provider");
92920
+ return unreachable(cloudProvider);
92878
92921
  }
92879
92922
  } catch (error) {
92880
92923
  console.error(`Error: "${error.message}" on input ${line}`);
package/dist/local.cjs CHANGED
@@ -85609,13 +85609,7 @@ async function setupPuppeteerPage({
85609
85609
  userDataDir: userDataDir2
85610
85610
  }) {
85611
85611
  const browser = await puppeteer_core_default.launch({
85612
- args: [
85613
- "--start-maximized"
85614
- // '--kiosk',
85615
- // '--no-prompts',
85616
- // '--no-dialogs',
85617
- // '--disable-pinch',
85618
- ],
85612
+ args: ["--start-maximized", "--enable-save-password-bubble"],
85619
85613
  executablePath: executablePath3,
85620
85614
  headless: false,
85621
85615
  defaultViewport: null,
@@ -85629,6 +85623,11 @@ async function setupPuppeteerPage({
85629
85623
  return browser.newPage();
85630
85624
  }
85631
85625
 
85626
+ // src/log.ts
85627
+ var log = (message) => {
85628
+ console.log(`[${(/* @__PURE__ */ new Date()).toISOString()}] ${message}`);
85629
+ };
85630
+
85632
85631
  // src/utils.ts
85633
85632
  var AZURE_LOGIN_URL = "https://portal.azure.com/";
85634
85633
  function ensureHttps(url) {
@@ -85639,11 +85638,6 @@ function ensureHttps(url) {
85639
85638
  return url;
85640
85639
  }
85641
85640
 
85642
- // src/log.ts
85643
- var log = (message) => {
85644
- console.log(`[${(/* @__PURE__ */ new Date()).toISOString()}] ${message}`);
85645
- };
85646
-
85647
85641
  // src/setInput.ts
85648
85642
  var setInput = ({
85649
85643
  page,
@@ -85659,7 +85653,7 @@ var setInput = ({
85659
85653
  };
85660
85654
 
85661
85655
  // src/azureLogin.ts
85662
- var optionalPartsOfLogin = async (page) => {
85656
+ var closeOnboardingPopups = async (page) => {
85663
85657
  const welcomeSurveyCloseButton = 'span.fxs-welcomesurvey-close-icon[role="button"]';
85664
85658
  await page.waitForSelector(welcomeSurveyCloseButton);
85665
85659
  await page.click(welcomeSurveyCloseButton);
@@ -85671,7 +85665,8 @@ async function loginToAzure({
85671
85665
  url,
85672
85666
  username,
85673
85667
  page,
85674
- password
85668
+ password,
85669
+ skipOnboarding = true
85675
85670
  }) {
85676
85671
  log("Navigating to Azure login page...");
85677
85672
  await Promise.all([
@@ -85707,10 +85702,36 @@ async function loginToAzure({
85707
85702
  log("Ensuring user stays signed in ...");
85708
85703
  await page.waitForSelector('[type="submit"]');
85709
85704
  await page.click('[type="submit"]');
85710
- void optionalPartsOfLogin(page);
85705
+ if (skipOnboarding) {
85706
+ log("Skipping onboarding...");
85707
+ void closeOnboardingPopups(page).catch((error) => {
85708
+ console.error("Error in onboarding of Azure login: ", error);
85709
+ });
85710
+ }
85711
85711
  log("Logged in to Azure successfully");
85712
85712
  }
85713
85713
 
85714
+ // src/databricksLogin.ts
85715
+ async function loginToDatabricks({
85716
+ url,
85717
+ page,
85718
+ username,
85719
+ password
85720
+ }) {
85721
+ await loginToAzure({
85722
+ url: void 0,
85723
+ username,
85724
+ page,
85725
+ password,
85726
+ skipOnboarding: false
85727
+ });
85728
+ log("Navigating to Databricks login page...");
85729
+ await page.goto(ensureHttps(url));
85730
+ await page.waitForSelector(".aad-btn");
85731
+ await page.click(".aad-btn");
85732
+ log("Logged in to Databricks successfully");
85733
+ }
85734
+
85714
85735
  // src/local.ts
85715
85736
  var executablePath2 = `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`;
85716
85737
  var userDataDir = `/tmp/chrome-learn-vm-scripts-data-dir`;
@@ -85719,10 +85740,10 @@ var main = async () => {
85719
85740
  executablePath: executablePath2,
85720
85741
  userDataDir
85721
85742
  });
85722
- await loginToAzure({
85723
- url: "https://portal.azure.com",
85724
- username: "student-be1288f0-5375-4105-ab58-ed0fc2ca5d2e@datacamplearn.onmicrosoft.com",
85725
- password: "9y4*E6kr&q)dtfiWP@5s",
85743
+ await loginToDatabricks({
85744
+ url: "adb-3441331393732493.13.azuredatabricks.net",
85745
+ username: "student-759f4c3e-6920-46f2-ab12-9cf921068e4a@datacamplearn.onmicrosoft.com",
85746
+ password: "b_ufA6HDCWtljmRfP@5s",
85726
85747
  page
85727
85748
  });
85728
85749
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datacamp/learn-vm-scripts",
3
- "version": "0.0.11",
3
+ "version": "1.0.0",
4
4
  "repository": "git@github.com:datacamp-engineering/learn-vm-scripts.git",
5
5
  "description": "Scripts used by VMs in learn.",
6
6
  "main": "./dist/index.cjs",