@datacamp/learn-vm-scripts 0.0.1-rc.1 → 0.0.1-rc.11

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/package.json CHANGED
@@ -1,33 +1,34 @@
1
1
  {
2
2
  "name": "@datacamp/learn-vm-scripts",
3
- "version": "0.0.1-rc.1",
3
+ "version": "0.0.1-rc.11",
4
4
  "repository": "git@github.com:datacamp-engineering/learn-vm-scripts.git",
5
5
  "description": "Scripts used by VMs in learn.",
6
- "main": "./dist/index.js",
6
+ "main": "./dist/index.cjs",
7
7
  "files": [
8
8
  "dist"
9
9
  ],
10
10
  "bin": {
11
- "vm-scripts": "./dist/index.js"
11
+ "vm-scripts": "./dist/index.cjs"
12
12
  },
13
13
  "type": "module",
14
14
  "scripts": {
15
- "build": "tsc",
15
+ "build": "esbuild src/index.ts --bundle --platform=node --outfile=dist/index.cjs",
16
16
  "dev": "NODE_ENV=development yarn build && yarn cli",
17
17
  "lint": "eslint --ext ts .",
18
18
  "deduplicate": "yarn-deduplicate",
19
- "cli": "node dist/index.js"
19
+ "cli": "node dist/index.cjs",
20
+ "test": "vitest"
20
21
  },
21
22
  "keywords": [],
22
23
  "author": "Content Platform <content-platform@datacamp.com>",
23
24
  "license": "UNLICENSED",
24
25
  "dependencies": {
25
26
  "chalk": "^5.3.0",
26
- "dotenv": "^16.4.5",
27
27
  "eslint-plugin-prettier": "^5.2.1",
28
28
  "ora": "8.0.1",
29
29
  "puppeteer-core": "^22.14.0",
30
- "yargs": "^17.7.2"
30
+ "yargs": "^17.7.2",
31
+ "zod": "^3.23.8"
31
32
  },
32
33
  "devDependencies": {
33
34
  "@datacamp/eslint-config": "^7.1.0",
@@ -37,6 +38,7 @@
37
38
  "@types/yargs": "^17.0.32",
38
39
  "@typescript-eslint/eslint-plugin": "^7.17.0",
39
40
  "@typescript-eslint/parser": "^7.17.0",
41
+ "esbuild": "^0.23.0",
40
42
  "eslint": "^8.32.0",
41
43
  "eslint-config-prettier": "^9.1.0",
42
44
  "eslint-plugin-jest": "^28.6.0",
@@ -45,6 +47,7 @@
45
47
  "ts-node": "^10.9.2",
46
48
  "ts-node-dev": "^2.0.0",
47
49
  "typescript": "^5.5.4",
50
+ "vitest": "^2.0.5",
48
51
  "yarn-deduplicate": "^6.0.2"
49
52
  }
50
53
  }
package/dist/awsLogin.js DELETED
@@ -1,19 +0,0 @@
1
- import chalk from 'chalk';
2
- import ora from 'ora';
3
- import { ensureHttps } from './utils.js';
4
- export async function loginToAWS({ url, username, page, password, }) {
5
- const spinner = ora('Launching browser...').start();
6
- spinner.succeed('Browser launched');
7
- spinner.start('Navigating to AWS login page...');
8
- await page.goto(ensureHttps(url));
9
- await page.waitForSelector('input[name="username"]');
10
- await page.type('input[name="username"]', username);
11
- await page.waitForSelector('input[name="password"]');
12
- await page.type('input[name="password"]', password);
13
- await page.waitForSelector('input[id="remember_account_checkbox"]');
14
- await page.click('input[id="remember_account_checkbox"]');
15
- await page.waitForSelector('a[id="signin_button"]');
16
- await page.click('a[id="signin_button"]');
17
- spinner.succeed(chalk.green('Logged in to AWS successfully'));
18
- }
19
- //# sourceMappingURL=awsLogin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"awsLogin.js","sourceRoot":"","sources":["../src/awsLogin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAC/B,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,QAAQ,GAMT;IACC,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IACpD,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEpC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjD,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAElC,MAAM,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;IACrD,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;IAEpD,MAAM,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;IACrD,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;IAEpD,MAAM,IAAI,CAAC,eAAe,CAAC,uCAAuC,CAAC,CAAC;IACpE,MAAM,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAE1D,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC;IACpD,MAAM,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC1C,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;AAChE,CAAC"}
@@ -1,30 +0,0 @@
1
- import chalk from 'chalk';
2
- import ora from 'ora';
3
- import { AZURE_LOGIN_URL, ensureHttps } from './utils.js';
4
- export async function loginToAzure({ url, username, page, password, }) {
5
- const spinner = ora('Launching browser...').start();
6
- spinner.succeed('Browser launched');
7
- spinner.start('Navigating to Azure login page...');
8
- await page.goto(ensureHttps(url || AZURE_LOGIN_URL));
9
- spinner.start('Entering email...');
10
- await page.waitForNavigation();
11
- await page.waitForSelector('[name="loginfmt"]');
12
- await page.type('[name="loginfmt"]', username);
13
- await page.click('[type="submit"]');
14
- spinner.start('Entering password...');
15
- await new Promise((resolve) => {
16
- setTimeout(resolve, 1000);
17
- });
18
- await page.waitForSelector('input[type="password"]', { visible: true });
19
- await page.type('input[type="password"]', password);
20
- await page.keyboard.press('Enter');
21
- await page.waitForNavigation();
22
- await page.waitForSelector('[type="submit"]');
23
- await page.click('[type="submit"]');
24
- // continue after "Stay signed-in" modal:
25
- await page.keyboard.press('Enter');
26
- spinner.start('Logging in...');
27
- await page.waitForNavigation();
28
- spinner.succeed(chalk.green('Logged in to Azure successfully'));
29
- }
30
- //# sourceMappingURL=azureLogin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"azureLogin.js","sourceRoot":"","sources":["../src/azureLogin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG1D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,QAAQ,GAMT;IACC,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IACpD,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEpC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACnD,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC;IAErD,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACnC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAE/B,MAAM,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;IAChD,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAEpC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAEtC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC5B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAE/B,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAEpC,yCAAyC;IACzC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEnC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC/B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC/B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;AAClE,CAAC"}
@@ -1,12 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-vars */
2
- import chalk from 'chalk';
3
- import ora from 'ora';
4
- import { ensureHttps } from './utils.js';
5
- export async function loginToDatabricks({ url, page, }) {
6
- const spinner = ora('Navigating to Databricks login page...').start();
7
- await page.goto(ensureHttps(url));
8
- await page.waitForSelector('.aad-btn');
9
- await page.click('.aad-btn');
10
- spinner.succeed(chalk.green('Logged in to Databricks successfully'));
11
- }
12
- //# sourceMappingURL=databricksLogin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"databricksLogin.js","sourceRoot":"","sources":["../src/databricksLogin.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,GAAG,EACH,IAAI,GAIL;IACC,MAAM,OAAO,GAAG,GAAG,CAAC,wCAAwC,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtE,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAElC,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAEvC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;AACvE,CAAC"}
package/dist/index.js DELETED
@@ -1,59 +0,0 @@
1
- import chalk from 'chalk';
2
- import yargs from 'yargs';
3
- import { loginToAWS } from './awsLogin.js';
4
- import { loginToAzure } from './azureLogin.js';
5
- import { loginToDatabricks } from './databricksLogin.js';
6
- import { setupBrowser } from './setup.js';
7
- const SUPPORTED_CLOUD_PROVIDERS = ['aws', 'azure', 'databricks'];
8
- const argv = yargs(process.argv.slice(2))
9
- .options({
10
- cloudProvider: {
11
- demandOption: true,
12
- choices: SUPPORTED_CLOUD_PROVIDERS,
13
- type: 'string',
14
- },
15
- password: { demandOption: true, type: 'string' },
16
- url: { demandOption: false, type: 'string' },
17
- username: { demandOption: true, type: 'string' },
18
- })
19
- .parseSync();
20
- (async () => {
21
- const { url, password, username, cloudProvider } = argv;
22
- try {
23
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
24
- const { browser, page } = await setupBrowser();
25
- switch (cloudProvider) {
26
- case 'azure':
27
- await loginToAzure({ url, username, page, password });
28
- break;
29
- case 'aws':
30
- if (!url) {
31
- console.error(chalk.red('AWS URL is required'));
32
- process.exit(1);
33
- }
34
- await loginToAWS({ url, username, page, password });
35
- break;
36
- case 'databricks':
37
- if (!url) {
38
- console.error(chalk.red('Databricks URL is required'));
39
- process.exit(1);
40
- }
41
- await loginToAzure({
42
- url: undefined,
43
- username,
44
- page,
45
- password,
46
- });
47
- await loginToDatabricks({ url, page });
48
- break;
49
- default:
50
- console.error(chalk.red('Unsupported cloud provider'));
51
- }
52
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
- }
54
- catch (error) {
55
- console.error(chalk.red(`Error: ${error.message}`));
56
- }
57
- await new Promise(() => { });
58
- })();
59
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAU,CAAC;AAE1E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACtC,OAAO,CAAC;IACP,aAAa,EAAE;QACb,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,yBAAyB;QAClC,IAAI,EAAE,QAAQ;KACf;IACD,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IAChD,GAAG,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC5C,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;CACjD,CAAC;KACD,SAAS,EAAE,CAAC;AAEf,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAExD,IAAI,CAAC;QACH,6DAA6D;QAC7D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;QAE/C,QAAQ,aAAa,EAAE,CAAC;YACtB,KAAK,OAAO;gBACV,MAAM,YAAY,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACtD,MAAM;YACR,KAAK,KAAK;gBACR,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;oBAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,UAAU,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpD,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;oBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,YAAY,CAAC;oBACjB,GAAG,EAAE,SAAS;oBACd,QAAQ;oBACR,IAAI;oBACJ,QAAQ;iBACT,CAAC,CAAC;gBACH,MAAM,iBAAiB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvC,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,8DAA8D;IAChE,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC9B,CAAC,CAAC,EAAE,CAAC"}
package/dist/setup.js DELETED
@@ -1,21 +0,0 @@
1
- import dotenv from 'dotenv';
2
- import puppeteer from 'puppeteer-core';
3
- const envFile = process.env.NODE_ENV === 'production' ? '.env' : '.env.development';
4
- dotenv.config({ path: envFile });
5
- export async function setupBrowser() {
6
- const browser = await puppeteer.launch({
7
- args: ['--start-maximized', '--enable-save-password-bubble'],
8
- executablePath: process.env.EXECUTABLE_PATH,
9
- headless: false,
10
- defaultViewport: null,
11
- ignoreDefaultArgs: ['--enable-automation'],
12
- userDataDir: process.env.USER_DATA_DIR,
13
- });
14
- const pages = await browser.pages();
15
- if (pages[0] === undefined) {
16
- const page = await browser.newPage();
17
- return { browser, page };
18
- }
19
- return { browser, page: pages[0] };
20
- }
21
- //# sourceMappingURL=setup.js.map
package/dist/setup.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACtE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;QACrC,IAAI,EAAE,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;QAC5D,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;QAC3C,QAAQ,EAAE,KAAK;QACf,eAAe,EAAE,IAAI;QACrB,iBAAiB,EAAE,CAAC,qBAAqB,CAAC;QAC1C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;KACvC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAEpC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,CAAC"}
package/dist/utils.js DELETED
@@ -1,9 +0,0 @@
1
- export const AZURE_LOGIN_URL = 'https://portal.azure.com/';
2
- export function ensureHttps(url) {
3
- const hasProtocol = /^(http|https):\/\//i.test(url);
4
- if (!hasProtocol) {
5
- return `https://${url}`;
6
- }
7
- return url;
8
- }
9
- //# sourceMappingURL=utils.js.map
package/dist/utils.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAE3D,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,WAAW,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}