@datacamp/learn-vm-scripts 0.0.1-rc.2 → 0.0.1-rc.4

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,22 +1,22 @@
1
1
  {
2
2
  "name": "@datacamp/learn-vm-scripts",
3
- "version": "0.0.1-rc.2",
3
+ "version": "0.0.1-rc.4",
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
20
  "test": "vitest"
21
21
  },
22
22
  "keywords": [],
@@ -39,6 +39,7 @@
39
39
  "@types/yargs": "^17.0.32",
40
40
  "@typescript-eslint/eslint-plugin": "^7.17.0",
41
41
  "@typescript-eslint/parser": "^7.17.0",
42
+ "esbuild": "^0.23.0",
42
43
  "eslint": "^8.32.0",
43
44
  "eslint-config-prettier": "^9.1.0",
44
45
  "eslint-plugin-jest": "^28.6.0",
package/dist/awsLogin.js DELETED
@@ -1,19 +0,0 @@
1
- import chalk from 'chalk';
2
- import ora from 'ora';
3
- import { ensureHttps } from './utils';
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,SAAS,CAAC;AAGtC,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';
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,SAAS,CAAC;AAGvD,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,89 +0,0 @@
1
- import yargs from 'yargs';
2
- import * as fs from 'node:fs/promises';
3
- import * as readline from 'node:readline';
4
- import * as z from 'zod';
5
- import { setupBrowser } from './setup.js';
6
- import { loginToAzure } from './azureLogin.js';
7
- import chalk from 'chalk';
8
- import { loginToAWS } from './awsLogin.js';
9
- import { loginToDatabricks } from './databricksLogin.js';
10
- const argv = yargs(process.argv.slice(2))
11
- .options({
12
- inputFilePath: { demandOption: true, type: 'string' },
13
- outputFilePath: { demandOption: true, type: 'string' },
14
- })
15
- .parseSync();
16
- const Input = z.object({
17
- cloudProvider: z.enum(['aws', 'azure', 'databricks']),
18
- password: z.string(),
19
- url: z.string(),
20
- username: z.string(),
21
- });
22
- const handleInput = async (line) => {
23
- try {
24
- console.log('DEBUG line: ', line);
25
- const { cloudProvider, url, password, username } = Input.parse(JSON.parse(line));
26
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
27
- const { browser, page } = await setupBrowser();
28
- switch (cloudProvider) {
29
- case 'azure':
30
- await loginToAzure({ url, username, page, password });
31
- break;
32
- case 'aws':
33
- if (!url) {
34
- console.error(chalk.red('AWS URL is required'));
35
- process.exit(1);
36
- }
37
- await loginToAWS({ url, username, page, password });
38
- break;
39
- case 'databricks':
40
- if (!url) {
41
- console.error(chalk.red('Databricks URL is required'));
42
- process.exit(1);
43
- }
44
- await loginToAzure({
45
- url: undefined,
46
- username,
47
- page,
48
- password,
49
- });
50
- await loginToDatabricks({ url, page });
51
- break;
52
- default:
53
- console.error(chalk.red('Unsupported cloud provider'));
54
- }
55
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
- }
57
- catch (error) {
58
- console.error(chalk.red(`Error: ${error.message}`));
59
- }
60
- };
61
- const startInputWatcher = async () => {
62
- let position = 0;
63
- const inputFileHandle = await fs.open(argv.inputFilePath, 'r');
64
- const outputFileHandle = await fs.open(argv.outputFilePath, 'a');
65
- for await (const event of fs.watch(argv.inputFilePath)) {
66
- if (event.eventType !== 'change') {
67
- continue;
68
- }
69
- const stats = await inputFileHandle.stat();
70
- if (stats.size === position) {
71
- continue;
72
- }
73
- const stream = inputFileHandle.createReadStream({
74
- start: position,
75
- end: stats.size,
76
- });
77
- const rl = readline.createInterface({
78
- input: stream,
79
- crlfDelay: Infinity,
80
- });
81
- for await (const line of rl) {
82
- await handleInput(line);
83
- await outputFileHandle.appendFile(`Done: ${line}\n`);
84
- }
85
- position = stats.size;
86
- }
87
- };
88
- void startInputWatcher();
89
- //# sourceMappingURL=cloudLoginService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloudLoginService.js","sourceRoot":"","sources":["../src/cloudLoginService.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import chalk from 'chalk';
2
- import ora from 'ora';
3
- import { ensureHttps } from './utils';
4
- export async function loginToDatabricks({ url, page, }) {
5
- const spinner = ora('Navigating to Databricks login page...').start();
6
- await page.goto(ensureHttps(url));
7
- await page.waitForSelector('.aad-btn');
8
- await page.click('.aad-btn');
9
- spinner.succeed(chalk.green('Logged in to Databricks successfully'));
10
- }
11
- //# sourceMappingURL=databricksLogin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"databricksLogin.js","sourceRoot":"","sources":["../src/databricksLogin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,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,10 +0,0 @@
1
- import yargs from 'yargs';
2
- import { startInputWatcher } from './startInputWatcher';
3
- const argv = yargs(process.argv.slice(2))
4
- .options({
5
- inputFilePath: { demandOption: true, type: 'string' },
6
- outputFilePath: { demandOption: true, type: 'string' },
7
- })
8
- .parseSync();
9
- void startInputWatcher(argv);
10
- //# 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,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACtC,OAAO,CAAC;IACP,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IACrD,cAAc,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;CACvD,CAAC;KACD,SAAS,EAAE,CAAC;AAEf,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC"}
package/dist/setup.js DELETED
@@ -1,21 +0,0 @@
1
- import * as 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
- return { browser, page: pages[0] };
17
- }
18
- const page = await browser.newPage();
19
- return { browser, page };
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,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,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;IACpC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
@@ -1,80 +0,0 @@
1
- import * as fs from 'node:fs/promises';
2
- import * as readline from 'node:readline';
3
- import * as z from 'zod';
4
- import { setupBrowser } from './setup';
5
- import { loginToAzure } from './azureLogin';
6
- import chalk from 'chalk';
7
- import { loginToAWS } from './awsLogin';
8
- import { loginToDatabricks } from './databricksLogin';
9
- const Input = z.object({
10
- cloudProvider: z.enum(['aws', 'azure', 'databricks']),
11
- password: z.string(),
12
- url: z.string(),
13
- username: z.string(),
14
- });
15
- const handleInput = async (line) => {
16
- try {
17
- const { cloudProvider, url, password, username } = Input.parse(JSON.parse(line));
18
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
19
- const { browser, page } = await setupBrowser();
20
- switch (cloudProvider) {
21
- case 'azure':
22
- await loginToAzure({ url, username, page, password });
23
- break;
24
- case 'aws':
25
- if (!url) {
26
- console.error(chalk.red('AWS URL is required'));
27
- process.exit(1);
28
- }
29
- await loginToAWS({ url, username, page, password });
30
- break;
31
- case 'databricks':
32
- if (!url) {
33
- console.error(chalk.red('Databricks URL is required'));
34
- process.exit(1);
35
- }
36
- await loginToAzure({
37
- url: undefined,
38
- username,
39
- page,
40
- password,
41
- });
42
- await loginToDatabricks({ url, page });
43
- break;
44
- default:
45
- console.error(chalk.red('Unsupported cloud provider'));
46
- }
47
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
- }
49
- catch (error) {
50
- console.error(chalk.red(`Error: ${error.message}`));
51
- }
52
- };
53
- export const startInputWatcher = async ({ inputFilePath, outputFilePath, }) => {
54
- let position = 0;
55
- const inputFileHandle = await fs.open(inputFilePath, 'r');
56
- const outputFileHandle = await fs.open(outputFilePath, 'a');
57
- for await (const event of fs.watch(inputFilePath)) {
58
- if (event.eventType !== 'change') {
59
- continue;
60
- }
61
- const stats = await inputFileHandle.stat();
62
- if (stats.size === position) {
63
- continue;
64
- }
65
- const stream = inputFileHandle.createReadStream({
66
- start: position,
67
- end: stats.size,
68
- });
69
- const rl = readline.createInterface({
70
- input: stream,
71
- crlfDelay: Infinity,
72
- });
73
- for await (const line of rl) {
74
- await handleInput(line);
75
- await outputFileHandle.appendFile(`Done: ${line}\n`);
76
- }
77
- position = stats.size;
78
- }
79
- };
80
- //# sourceMappingURL=startInputWatcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startInputWatcher.js","sourceRoot":"","sources":["../src/startInputWatcher.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
1
- import { loginToAzure } from './azureLogin';
2
- import { startInputWatcher } from './startInputWatcher';
3
- import * as fs from 'node:fs/promises';
4
- import { test, describe, expect, afterEach, vitest, beforeEach, } from 'vitest';
5
- import { setupBrowser } from './setup';
6
- vitest.mock('./azureLogin');
7
- vitest.mock('./setup');
8
- const loginToAzureMock = loginToAzure;
9
- const setupBrowserMock = setupBrowser;
10
- describe('startInputWatcher', () => {
11
- beforeEach(() => {
12
- setupBrowserMock.mockResolvedValue({
13
- browser: 'chrome',
14
- page: 'some-page',
15
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
- });
17
- });
18
- afterEach(() => {
19
- vitest.restoreAllMocks();
20
- });
21
- test('starts an input watcher that calls loginToAzure', async () => {
22
- loginToAzureMock.mockResolvedValue(undefined);
23
- const temporaryDirectory = await fs.mkdtemp('/tmp/');
24
- const inputFilePath = `${temporaryDirectory}/input.txt`;
25
- const outputFilePath = `${temporaryDirectory}/output.txt`;
26
- await fs.writeFile(inputFilePath, '');
27
- await fs.writeFile(outputFilePath, '');
28
- void startInputWatcher({
29
- inputFilePath,
30
- outputFilePath,
31
- });
32
- const input = {
33
- cloudProvider: 'azure',
34
- password: 'password',
35
- url: 'url',
36
- username: 'username',
37
- };
38
- await new Promise((resolve) => setTimeout(resolve, 100));
39
- await fs.writeFile(inputFilePath, JSON.stringify(input));
40
- await new Promise((resolve) => setTimeout(resolve, 100));
41
- expect(loginToAzureMock).toHaveBeenCalledOnce();
42
- expect(loginToAzureMock).toHaveBeenCalledWith({
43
- url: input.url,
44
- username: input.username,
45
- password: input.password,
46
- page: 'some-page',
47
- });
48
- }, { timeout: 100000000 });
49
- });
50
- //# sourceMappingURL=startInputWatcher.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startInputWatcher.spec.js","sourceRoot":"","sources":["../src/startInputWatcher.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAEL,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,SAAS,EACT,MAAM,EACN,UAAU,GACX,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC5B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEvB,MAAM,gBAAgB,GAAG,YAAmD,CAAC;AAC7E,MAAM,gBAAgB,GAAG,YAAmD,CAAC;AAE7E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,gBAAgB,CAAC,iBAAiB,CAAC;YACjC,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,WAAW;YACjB,8DAA8D;SACxD,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,IAAI,CACF,iDAAiD,EACjD,KAAK,IAAI,EAAE;QACT,gBAAgB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,GAAG,kBAAkB,YAAY,CAAC;QACxD,MAAM,cAAc,GAAG,GAAG,kBAAkB,aAAa,CAAC;QAC1D,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACvC,KAAK,iBAAiB,CAAC;YACrB,aAAa;YACb,cAAc;SACf,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG;YACZ,aAAa,EAAE,OAAO;YACtB,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,KAAK;YACV,QAAQ,EAAE,UAAU;SACrB,CAAC;QACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAEzD,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC;YAC5C,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;IACL,CAAC,EACD,EAAE,OAAO,EAAE,SAAS,EAAE,CACvB,CAAC;AACJ,CAAC,CAAC,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"}