dceky 1.0.23 → 1.0.25
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/lib/src/commands/getCredentialValue.d.ts +18 -0
- package/lib/{commands/assertHasClass.js → src/commands/getCredentialValue.js} +8 -6
- package/lib/src/commands/getCredentialValue.js.map +1 -0
- package/lib/src/commands/getCredentialValues.d.ts +18 -0
- package/lib/{commands/getTitle.js → src/commands/getCredentialValues.js} +5 -9
- package/lib/src/commands/getCredentialValues.js.map +1 -0
- package/lib/src/commands/getProfileValue.d.ts +15 -0
- package/lib/{commands/getId.js → src/commands/getProfileValue.js} +5 -10
- package/lib/src/commands/getProfileValue.js.map +1 -0
- package/lib/src/commands/handleHarvardKey.js +36 -33
- package/lib/src/commands/handleHarvardKey.js.map +1 -1
- package/lib/src/commands/index.js +6 -0
- package/lib/src/commands/index.js.map +1 -1
- package/lib/src/commands/launchAs.js +70 -68
- package/lib/src/commands/launchAs.js.map +1 -1
- package/lib/src/commands/logIntoPorta.js +46 -43
- package/lib/src/commands/logIntoPorta.js.map +1 -1
- package/lib/src/genConfiguration/index.js +7 -4
- package/lib/src/genConfiguration/index.js.map +1 -1
- package/package.json +2 -2
- package/src/commands/getCredentialValue.ts +45 -0
- package/src/commands/getCredentialValues.ts +43 -0
- package/src/commands/getProfileValue.ts +40 -0
- package/src/commands/handleHarvardKey.ts +41 -38
- package/src/commands/index.ts +6 -0
- package/src/commands/launchAs.ts +90 -88
- package/src/commands/logIntoPorta.ts +61 -57
- package/src/genConfiguration/index.ts +11 -4
- package/cypress/e2e/profile-test.cy.ts +0 -10
- package/cypress/fixtures/example.json +0 -5
- package/cypress/support/commands.ts +0 -37
- package/cypress/support/e2e.ts +0 -17
- package/lib/commands/assertDoesNotHaveClass.d.ts +0 -18
- package/lib/commands/assertDoesNotHaveClass.js +0 -17
- package/lib/commands/assertDoesNotHaveClass.js.map +0 -1
- package/lib/commands/assertHasClass.d.ts +0 -18
- package/lib/commands/assertHasClass.js.map +0 -1
- package/lib/commands/assertNumElements.d.ts +0 -18
- package/lib/commands/assertNumElements.js +0 -17
- package/lib/commands/assertNumElements.js.map +0 -1
- package/lib/commands/clickWithRetry.d.ts +0 -19
- package/lib/commands/clickWithRetry.js +0 -29
- package/lib/commands/clickWithRetry.js.map +0 -1
- package/lib/commands/genTextOfLength.d.ts +0 -20
- package/lib/commands/genTextOfLength.js +0 -20
- package/lib/commands/genTextOfLength.js.map +0 -1
- package/lib/commands/getAttribute.d.ts +0 -20
- package/lib/commands/getAttribute.js +0 -22
- package/lib/commands/getAttribute.js.map +0 -1
- package/lib/commands/getClassName.d.ts +0 -15
- package/lib/commands/getClassName.js +0 -21
- package/lib/commands/getClassName.js.map +0 -1
- package/lib/commands/getCurrentDateInfo.d.ts +0 -21
- package/lib/commands/getCurrentDateInfo.js +0 -25
- package/lib/commands/getCurrentDateInfo.js.map +0 -1
- package/lib/commands/getId.d.ts +0 -15
- package/lib/commands/getId.js.map +0 -1
- package/lib/commands/getNumElements.d.ts +0 -14
- package/lib/commands/getNumElements.js +0 -19
- package/lib/commands/getNumElements.js.map +0 -1
- package/lib/commands/getSpecialChars.d.ts +0 -14
- package/lib/commands/getSpecialChars.js +0 -16
- package/lib/commands/getSpecialChars.js.map +0 -1
- package/lib/commands/getTitle.d.ts +0 -13
- package/lib/commands/getTitle.js.map +0 -1
- package/lib/commands/handleHarvardKey.d.ts +0 -18
- package/lib/commands/handleHarvardKey.js +0 -56
- package/lib/commands/handleHarvardKey.js.map +0 -1
- package/lib/commands/handleHarvardKey2.d.ts +0 -14
- package/lib/commands/handleHarvardKey2.js +0 -88
- package/lib/commands/handleHarvardKey2.js.map +0 -1
- package/lib/commands/launchAs.d.ts +0 -20
- package/lib/commands/launchAs.js +0 -60
- package/lib/commands/launchAs.js.map +0 -1
- package/lib/commands/launchLTIUsingToken.d.ts +0 -19
- package/lib/commands/launchLTIUsingToken.js +0 -74
- package/lib/commands/launchLTIUsingToken.js.map +0 -1
- package/lib/commands/listSelectLabels.d.ts +0 -15
- package/lib/commands/listSelectLabels.js +0 -24
- package/lib/commands/listSelectLabels.js.map +0 -1
- package/lib/commands/listSelectValues.d.ts +0 -15
- package/lib/commands/listSelectValues.js +0 -26
- package/lib/commands/listSelectValues.js.map +0 -1
- package/lib/commands/navigateToHref.d.ts +0 -19
- package/lib/commands/navigateToHref.js +0 -23
- package/lib/commands/navigateToHref.js.map +0 -1
- package/lib/commands/padWithZeros.d.ts +0 -20
- package/lib/commands/padWithZeros.js +0 -24
- package/lib/commands/padWithZeros.js.map +0 -1
- package/lib/commands/runScript.d.ts +0 -16
- package/lib/commands/runScript.js +0 -25
- package/lib/commands/runScript.js.map +0 -1
- package/lib/commands/typeInto.d.ts +0 -20
- package/lib/commands/typeInto.js +0 -28
- package/lib/commands/typeInto.js.map +0 -1
- package/lib/commands/uniquify.d.ts +0 -15
- package/lib/commands/uniquify.js +0 -25
- package/lib/commands/uniquify.js.map +0 -1
- package/lib/commands/visitCanvasEndpoint.d.ts +0 -27
- package/lib/commands/visitCanvasEndpoint.js +0 -35
- package/lib/commands/visitCanvasEndpoint.js.map +0 -1
- package/lib/commands/visitCanvasGETEndpoint.d.ts +0 -20
- package/lib/commands/visitCanvasGETEndpoint.js +0 -26
- package/lib/commands/visitCanvasGETEndpoint.js.map +0 -1
- package/lib/commands/waitForAtLeastOneElementPresent.d.ts +0 -23
- package/lib/commands/waitForAtLeastOneElementPresent.js +0 -27
- package/lib/commands/waitForAtLeastOneElementPresent.js.map +0 -1
- package/lib/commands/waitForElementVisible.d.ts +0 -14
- package/lib/commands/waitForElementVisible.js +0 -20
- package/lib/commands/waitForElementVisible.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/init.d.ts +0 -6
- package/lib/init.js +0 -69
- package/lib/init.js.map +0 -1
- package/lib/postinstall/helpers/exec.d.ts +0 -8
- package/lib/postinstall/helpers/exec.js +0 -18
- package/lib/postinstall/helpers/exec.js.map +0 -1
- package/lib/setup/checkRequiredFiles.d.ts +0 -6
- package/lib/setup/checkRequiredFiles.js +0 -60
- package/lib/setup/checkRequiredFiles.js.map +0 -1
- package/lib/setup/genEmptyGlobalFile.d.ts +0 -7
- package/lib/setup/genEmptyGlobalFile.js +0 -41
- package/lib/setup/genEmptyGlobalFile.js.map +0 -1
- package/lib/src/commands/launchLTIUsingToken.d.ts +0 -21
- package/lib/src/commands/launchLTIUsingToken.js +0 -76
- package/lib/src/commands/launchLTIUsingToken.js.map +0 -1
- package/lib/src/commands/visitCanvasGETEndpoint.d.ts +0 -20
- package/lib/src/commands/visitCanvasGETEndpoint.js +0 -26
- package/lib/src/commands/visitCanvasGETEndpoint.js.map +0 -1
- package/lib/src/init.d.ts +0 -6
- package/lib/src/init.js +0 -71
- package/lib/src/init.js.map +0 -1
- package/lib/src/node.d.ts +0 -2
- package/lib/src/node.js +0 -10
- package/lib/src/node.js.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
namespace Cypress {
|
|
3
|
+
interface Chainable {
|
|
4
|
+
/**
|
|
5
|
+
* Alias for cy.env for retrieving a single environment variable
|
|
6
|
+
* Obtains a credential value from the Cypress env depending on
|
|
7
|
+
* the provided key.
|
|
8
|
+
* @author Allison Zhang
|
|
9
|
+
* @param key the key of the environment variable to retrieve
|
|
10
|
+
* @return The value of the specified environment variable
|
|
11
|
+
* the corresponding environment variable values from global credentials
|
|
12
|
+
*/
|
|
13
|
+
getCredentialValue(key: string): Chainable<any>;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
declare const getCredentialValue: () => void;
|
|
18
|
+
export default getCredentialValue;
|
|
@@ -4,14 +4,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
/*----------------------------------------*/
|
|
5
5
|
/* --------------- Command -------------- */
|
|
6
6
|
/*----------------------------------------*/
|
|
7
|
-
var
|
|
8
|
-
Cypress.Commands.add('
|
|
9
|
-
cy.
|
|
10
|
-
|
|
7
|
+
var getCredentialValue = function () {
|
|
8
|
+
Cypress.Commands.add('getCredentialValue', function (key) {
|
|
9
|
+
return cy.env([key]).then(function (_a) {
|
|
10
|
+
var _b = key, value = _a[_b];
|
|
11
|
+
return cy.wrap(value);
|
|
12
|
+
});
|
|
11
13
|
});
|
|
12
14
|
};
|
|
13
15
|
/*----------------------------------------*/
|
|
14
16
|
/* --------------- Export --------------- */
|
|
15
17
|
/*----------------------------------------*/
|
|
16
|
-
exports.default =
|
|
17
|
-
//# sourceMappingURL=
|
|
18
|
+
exports.default = getCredentialValue;
|
|
19
|
+
//# sourceMappingURL=getCredentialValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCredentialValue.js","sourceRoot":"","sources":["../../../src/commands/getCredentialValue.ts"],"names":[],"mappings":";AAAA,iCAAiC;;AAyBjC,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,IAAM,kBAAkB,GAAG;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAClB,oBAAoB,EACpB,UAAC,GAAG;QACF,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAC,EAAgB;gBAAd,KAAC,GAAI,EAAE,KAAK,SAAA;YACvC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,kBAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
namespace Cypress {
|
|
3
|
+
interface Chainable {
|
|
4
|
+
/**
|
|
5
|
+
* Alias for cy.env for retrieving multiple environment variables at once
|
|
6
|
+
* Obtains multiple credential values from the Cypress env depending on
|
|
7
|
+
* the provided keys.
|
|
8
|
+
* @author Allison Zhang
|
|
9
|
+
* @param keys the keys of the environment variables to retrieve
|
|
10
|
+
* @return Object where keys are the provided keys and the values are
|
|
11
|
+
* the corresponding environment variable values from global credentials
|
|
12
|
+
*/
|
|
13
|
+
getCredentialValues(keys: string[]): Chainable<Record<string, any>>;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
declare const getCredentialValues: () => void;
|
|
18
|
+
export default getCredentialValues;
|
|
@@ -4,17 +4,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
/*----------------------------------------*/
|
|
5
5
|
/* --------------- Command -------------- */
|
|
6
6
|
/*----------------------------------------*/
|
|
7
|
-
var
|
|
8
|
-
Cypress.Commands.add('
|
|
9
|
-
return (
|
|
10
|
-
.title()
|
|
11
|
-
.then(function (title) {
|
|
12
|
-
return title;
|
|
13
|
-
}));
|
|
7
|
+
var getCredentialValues = function () {
|
|
8
|
+
Cypress.Commands.add('getCredentialValues', function (keys) {
|
|
9
|
+
return cy.env(keys);
|
|
14
10
|
});
|
|
15
11
|
};
|
|
16
12
|
/*----------------------------------------*/
|
|
17
13
|
/* --------------- Export --------------- */
|
|
18
14
|
/*----------------------------------------*/
|
|
19
|
-
exports.default =
|
|
20
|
-
//# sourceMappingURL=
|
|
15
|
+
exports.default = getCredentialValues;
|
|
16
|
+
//# sourceMappingURL=getCredentialValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCredentialValues.js","sourceRoot":"","sources":["../../../src/commands/getCredentialValues.ts"],"names":[],"mappings":";AAAA,iCAAiC;;AAyBjC,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,IAAM,mBAAmB,GAAG;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAClB,qBAAqB,EACrB,UAAC,IAAI;QACH,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,kBAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
namespace Cypress {
|
|
3
|
+
interface Chainable {
|
|
4
|
+
/**
|
|
5
|
+
* Alias for Cypress.expose
|
|
6
|
+
* @author Allison Zhang
|
|
7
|
+
* @param key the key of the environment variable to retrieve
|
|
8
|
+
* @return Environment variable from the exposed environment
|
|
9
|
+
*/
|
|
10
|
+
getProfileValue(key: string): ObjectLike;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
declare const getProfileValue: () => void;
|
|
15
|
+
export default getProfileValue;
|
|
@@ -4,18 +4,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
/*----------------------------------------*/
|
|
5
5
|
/* --------------- Command -------------- */
|
|
6
6
|
/*----------------------------------------*/
|
|
7
|
-
var
|
|
8
|
-
Cypress.Commands.add('
|
|
9
|
-
return (
|
|
10
|
-
.get(selector)
|
|
11
|
-
.invoke('attr', 'id')
|
|
12
|
-
.then(function (attr) {
|
|
13
|
-
return attr;
|
|
14
|
-
}));
|
|
7
|
+
var getProfileValue = function () {
|
|
8
|
+
Cypress.Commands.add('getProfileValue', function (key) {
|
|
9
|
+
return Cypress.expose(key);
|
|
15
10
|
});
|
|
16
11
|
};
|
|
17
12
|
/*----------------------------------------*/
|
|
18
13
|
/* --------------- Export --------------- */
|
|
19
14
|
/*----------------------------------------*/
|
|
20
|
-
exports.default =
|
|
21
|
-
//# sourceMappingURL=
|
|
15
|
+
exports.default = getProfileValue;
|
|
16
|
+
//# sourceMappingURL=getProfileValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getProfileValue.js","sourceRoot":"","sources":["../../../src/commands/getProfileValue.ts"],"names":[],"mappings":";AAAA,iCAAiC;;AAsBjC,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,IAAM,eAAe,GAAG;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAClB,iBAAiB,EACjB,UAAC,GAAG;QACF,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,kBAAe,eAAe,CAAC"}
|
|
@@ -7,41 +7,44 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
var handleHarvardKey = function () {
|
|
8
8
|
Cypress.Commands.add('handleHarvardKey', function (name) {
|
|
9
9
|
cy.log('🔓 Handling HarvardKey authentication via UI');
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// Clicking the button doesn't work for some reason, so we access the href attribute instead
|
|
21
|
-
return cy.navigateToHref('#idp_1001962798_button');
|
|
22
|
-
}).then(function (fullUrl) {
|
|
23
|
-
// Navigate to the Harvard login page using originWithKaixa
|
|
24
|
-
cy.origin('https://harvard.idp.cirrusidentity.com', {
|
|
25
|
-
args: { username: username, password: password, fullUrl: fullUrl },
|
|
26
|
-
}, function (args) {
|
|
10
|
+
// Get user credentials from environment variables
|
|
11
|
+
cy.env([name]).then(function (environment) {
|
|
12
|
+
var userInfo = environment[name];
|
|
13
|
+
if (!userInfo) {
|
|
14
|
+
throw new Error("Could not find ".concat(name, " in environment variables"));
|
|
15
|
+
}
|
|
16
|
+
// Destructure the user info object
|
|
17
|
+
var username = userInfo.username, password = userInfo.password;
|
|
18
|
+
// Get the Harvard login URL using originWithKaixa with auto-initialized functions
|
|
19
|
+
cy.origin('https://apps.cirrusidentity.com', function () {
|
|
27
20
|
Cypress.require('dceky');
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
21
|
+
// To go the login screen
|
|
22
|
+
// Clicking the button doesn't work for some reason, so we access the href attribute instead
|
|
23
|
+
return cy.navigateToHref('#idp_1001962798_button');
|
|
24
|
+
}).then(function (fullUrl) {
|
|
25
|
+
// Navigate to the Harvard login page using originWithKaixa
|
|
26
|
+
cy.origin('https://harvard.idp.cirrusidentity.com', {
|
|
27
|
+
args: { username: username, password: password, fullUrl: fullUrl },
|
|
28
|
+
}, function (args) {
|
|
29
|
+
Cypress.require('dceky');
|
|
30
|
+
var harvardUsername = args.username, harvardPassword = args.password, harvardLoginUrl = args.fullUrl;
|
|
31
|
+
cy.on('uncaught:exception', function (e) {
|
|
32
|
+
// Ignore known HarvardKey errors
|
|
33
|
+
if (!e.message.includes('ready is not defined')) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
});
|
|
38
|
+
// Visit the Harvard login page
|
|
39
|
+
cy.visit(harvardLoginUrl);
|
|
40
|
+
// Wait for and fill in the login form
|
|
41
|
+
cy.waitForElementVisible('#username');
|
|
42
|
+
cy.waitForElementVisible('#password');
|
|
43
|
+
cy.typeInto({ item: '#username', text: harvardUsername });
|
|
44
|
+
cy.typeInto({ item: '#password', text: harvardPassword });
|
|
45
|
+
// Submit the form
|
|
46
|
+
cy.get('input[type="submit"], button[type="submit"], .btn-primary').click();
|
|
35
47
|
});
|
|
36
|
-
// Visit the Harvard login page
|
|
37
|
-
cy.visit(harvardLoginUrl);
|
|
38
|
-
// Wait for and fill in the login form
|
|
39
|
-
cy.waitForElementVisible('#username');
|
|
40
|
-
cy.waitForElementVisible('#password');
|
|
41
|
-
cy.typeInto({ item: '#username', text: harvardUsername });
|
|
42
|
-
cy.typeInto({ item: '#password', text: harvardPassword });
|
|
43
|
-
// Submit the form
|
|
44
|
-
cy.get('input[type="submit"], button[type="submit"], .btn-primary').click();
|
|
45
48
|
});
|
|
46
49
|
});
|
|
47
50
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleHarvardKey.js","sourceRoot":"","sources":["../../../src/commands/handleHarvardKey.ts"],"names":[],"mappings":";AAAA,iCAAiC;;AAsBjC,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,IAAM,gBAAgB,GAAG;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAClB,kBAAkB,EAClB,UACE,IAAY;QAEZ,EAAE,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAEvD,
|
|
1
|
+
{"version":3,"file":"handleHarvardKey.js","sourceRoot":"","sources":["../../../src/commands/handleHarvardKey.ts"],"names":[],"mappings":";AAAA,iCAAiC;;AAsBjC,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,IAAM,gBAAgB,GAAG;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAClB,kBAAkB,EAClB,UACE,IAAY;QAEZ,EAAE,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAEvD,kDAAkD;QAClD,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAC,WAAW;YAC9B,IAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,yBAAkB,IAAI,8BAA2B,CAAC,CAAC;YACrE,CAAC;YAED,mCAAmC;YAC3B,IAAA,QAAQ,GAAe,QAAQ,SAAvB,EAAE,QAAQ,GAAK,QAAQ,SAAb,CAAc;YAExC,kFAAkF;YAClF,EAAE,CAAC,MAAM,CAAC,iCAAiC,EAAE;gBAC3C,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACzB,yBAAyB;gBACzB,4FAA4F;gBAC5F,OAAO,EAAE,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC,IAAI,CAAC,UAAC,OAAe;gBACxB,2DAA2D;gBACzD,EAAE,CAAC,MAAM,CAAC,wCAAwC,EAAE;oBAClD,IAAI,EAAE,EAAE,QAAQ,UAAA,EAAE,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAE;iBACtC,EAAE,UAAC,IAAI;oBACN,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAEvB,IAAU,eAAe,GAGvB,IAAI,SAHmB,EACf,eAAe,GAEvB,IAAI,SAFmB,EAChB,eAAe,GACtB,IAAI,QADkB,CACjB;oBAET,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,UAAC,CAAQ;wBACnC,iCAAiC;wBACjC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;4BAChD,OAAO,IAAI,CAAC;wBACd,CAAC;wBACD,OAAO,KAAK,CAAC;oBACf,CAAC,CAAC,CAAC;oBAEH,+BAA+B;oBAC/B,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;oBAE1B,sCAAsC;oBACtC,EAAE,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;oBACtC,EAAE,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;oBAEtC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;oBAC1D,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;oBAE1D,kBAAkB;oBAClB,EAAE,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC9E,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,kBAAe,gBAAgB,CAAC"}
|
|
@@ -34,6 +34,9 @@ var uniquify_1 = __importDefault(require("./uniquify"));
|
|
|
34
34
|
var visitCanvasEndpoint_1 = __importDefault(require("./visitCanvasEndpoint"));
|
|
35
35
|
var waitForAtLeastOneElementPresent_1 = __importDefault(require("./waitForAtLeastOneElementPresent"));
|
|
36
36
|
var waitForElementVisible_1 = __importDefault(require("./waitForElementVisible"));
|
|
37
|
+
var getProfileValue_1 = __importDefault(require("./getProfileValue"));
|
|
38
|
+
var getCredentialValue_1 = __importDefault(require("./getCredentialValue"));
|
|
39
|
+
var getCredentialValues_1 = __importDefault(require("./getCredentialValues"));
|
|
37
40
|
/**
|
|
38
41
|
* Initialize custom commands
|
|
39
42
|
* @author Gabe Abrams
|
|
@@ -70,6 +73,9 @@ var commands = function () {
|
|
|
70
73
|
(0, visitCanvasEndpoint_1.default)();
|
|
71
74
|
(0, waitForAtLeastOneElementPresent_1.default)();
|
|
72
75
|
(0, waitForElementVisible_1.default)();
|
|
76
|
+
(0, getProfileValue_1.default)();
|
|
77
|
+
(0, getCredentialValue_1.default)();
|
|
78
|
+
(0, getCredentialValues_1.default)();
|
|
73
79
|
};
|
|
74
80
|
exports.default = commands;
|
|
75
81
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":";;;;;AAAA,sBAAsB;AACtB,oFAA8D;AAC9D,oEAA8C;AAC9C,0EAAoD;AACpD,gFAA0D;AAC1D,gFAA0D;AAC1D,oGAA8E;AAC9E,sEAAgD;AAChD,gEAA0C;AAC1C,gEAA0C;AAC1C,4EAAsD;AACtD,kDAA4B;AAC5B,sDAAgC;AAChC,oEAA8C;AAC9C,sEAAgD;AAChD,wDAAkC;AAClC,wEAAkD;AAClD,wDAAkC;AAClC,wEAAkD;AAClD,wEAAkD;AAClD,gEAA0C;AAC1C,oEAA8C;AAC9C,gEAA0C;AAC1C,0DAAoC;AACpC,8CAAwB;AACxB,8DAAwC;AACxC,wDAAkC;AAClC,wDAAkC;AAClC,8EAAwD;AACxD,sGAAgF;AAChF,kFAA4D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":";;;;;AAAA,sBAAsB;AACtB,oFAA8D;AAC9D,oEAA8C;AAC9C,0EAAoD;AACpD,gFAA0D;AAC1D,gFAA0D;AAC1D,oGAA8E;AAC9E,sEAAgD;AAChD,gEAA0C;AAC1C,gEAA0C;AAC1C,4EAAsD;AACtD,kDAA4B;AAC5B,sDAAgC;AAChC,oEAA8C;AAC9C,sEAAgD;AAChD,wDAAkC;AAClC,wEAAkD;AAClD,wDAAkC;AAClC,wEAAkD;AAClD,wEAAkD;AAClD,gEAA0C;AAC1C,oEAA8C;AAC9C,gEAA0C;AAC1C,0DAAoC;AACpC,8CAAwB;AACxB,8DAAwC;AACxC,wDAAkC;AAClC,wDAAkC;AAClC,8EAAwD;AACxD,sGAAgF;AAChF,kFAA4D;AAC5D,sEAAgD;AAChD,4EAAsD;AACtD,8EAAwD;AAExD;;;GAGG;AACH,IAAM,QAAQ,GAAG;IACf,6BAA6B;IAC7B,IAAA,gCAAsB,GAAE,CAAC;IACzB,IAAA,wBAAc,GAAE,CAAC;IACjB,IAAA,2BAAiB,GAAE,CAAC;IACpB,IAAA,8BAAoB,GAAE,CAAC;IACvB,IAAA,8BAAoB,GAAE,CAAC;IACvB,IAAA,wCAA8B,GAAE,CAAC;IACjC,IAAA,yBAAe,GAAE,CAAC;IAClB,IAAA,sBAAY,GAAE,CAAC;IACf,IAAA,sBAAY,GAAE,CAAC;IACf,IAAA,4BAAkB,GAAE,CAAC;IACrB,IAAA,eAAK,GAAE,CAAC;IACR,IAAA,iBAAO,GAAE,CAAC;IACV,IAAA,wBAAc,GAAE,CAAC;IACjB,IAAA,yBAAe,GAAE,CAAC;IAClB,IAAA,kBAAQ,GAAE,CAAC;IACX,IAAA,0BAAgB,GAAE,CAAC;IACnB,IAAA,kBAAQ,GAAE,CAAC;IACX,IAAA,0BAAgB,GAAE,CAAC;IACnB,IAAA,0BAAgB,GAAE,CAAC;IACnB,IAAA,sBAAY,GAAE,CAAC;IACf,IAAA,wBAAc,GAAE,CAAC;IACjB,IAAA,sBAAY,GAAE,CAAC;IACf,IAAA,mBAAS,GAAE,CAAC;IACZ,IAAA,aAAG,GAAE,CAAC;IACN,IAAA,qBAAW,GAAE,CAAC;IACd,IAAA,kBAAQ,GAAE,CAAC;IACX,IAAA,kBAAQ,GAAE,CAAC;IACX,IAAA,6BAAmB,GAAE,CAAC;IACtB,IAAA,yCAA+B,GAAE,CAAC;IAClC,IAAA,+BAAqB,GAAE,CAAC;IACxB,IAAA,yBAAe,GAAE,CAAC;IAClB,IAAA,4BAAkB,GAAE,CAAC;IACrB,IAAA,6BAAmB,GAAE,CAAC;AACxB,CAAC,CAAC;AAEF,kBAAe,QAAQ,CAAC"}
|
|
@@ -16,94 +16,96 @@ var launchAs = function () {
|
|
|
16
16
|
cy.visit(baseURL);
|
|
17
17
|
// Get courseId from environment variables if not provided
|
|
18
18
|
if (!courseId) {
|
|
19
|
-
var envCourseId = Cypress.
|
|
19
|
+
var envCourseId = Cypress.expose('courseId');
|
|
20
20
|
if (!envCourseId) {
|
|
21
21
|
throw new Error('Could not find courseId in environment variables');
|
|
22
22
|
}
|
|
23
23
|
courseId = Number.parseInt(envCourseId, 10);
|
|
24
24
|
}
|
|
25
25
|
// Get appName from environment variables if not provided
|
|
26
|
-
appName = appName || Cypress.
|
|
26
|
+
appName = appName || Cypress.expose('appName');
|
|
27
27
|
if (!appName) {
|
|
28
28
|
throw new Error('Could not find appName in environment variables');
|
|
29
29
|
}
|
|
30
30
|
// Get user accessToken from environment variables
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
// List external tools in the course
|
|
40
|
-
return (cy
|
|
41
|
-
.request({
|
|
42
|
-
method: 'GET',
|
|
43
|
-
url: "https://canvas.harvard.edu/api/v1/courses/".concat(courseId, "/external_tools"),
|
|
44
|
-
body: {
|
|
45
|
-
per_page: 200,
|
|
46
|
-
access_token: accessToken,
|
|
47
|
-
},
|
|
48
|
-
})
|
|
49
|
-
.then(function (response) {
|
|
50
|
-
// Extract tools from the body
|
|
51
|
-
var externalTools = response.body;
|
|
52
|
-
// Find the external tool of interest
|
|
53
|
-
var matchingTool = externalTools.find(function (externalTool) {
|
|
54
|
-
// Skip non-nav items
|
|
55
|
-
if (
|
|
56
|
-
// No nav
|
|
57
|
-
!externalTool.course_navigation
|
|
58
|
-
// No nav information
|
|
59
|
-
|| typeof externalTool.course_navigation !== 'object') {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
// Skip non-labeled items
|
|
63
|
-
if (!externalTool.course_navigation.text) {
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
// Skip if the app name does not match the expected name
|
|
67
|
-
var thisAppName = (externalTool
|
|
68
|
-
.course_navigation
|
|
69
|
-
.text
|
|
70
|
-
.trim()
|
|
71
|
-
.toLowerCase());
|
|
72
|
-
return thisAppName === appName.trim().toLowerCase();
|
|
73
|
-
});
|
|
74
|
-
// Make sure we found the app
|
|
75
|
-
if (!matchingTool) {
|
|
76
|
-
throw new Error("Could not find any apps named \"".concat(appName, "\" in course ").concat(courseId));
|
|
31
|
+
cy.env([name]).then(function (environment) {
|
|
32
|
+
var userInfo = environment[name];
|
|
33
|
+
if (!userInfo) {
|
|
34
|
+
throw new Error("Could not find ".concat(name, " in environment variables"));
|
|
35
|
+
}
|
|
36
|
+
var accessToken = userInfo.accessToken;
|
|
37
|
+
if (!accessToken) {
|
|
38
|
+
throw new Error("Could not find accessToken for ".concat(name, " in environment variables"));
|
|
77
39
|
}
|
|
78
|
-
//
|
|
79
|
-
var toolId = (matchingTool === null || matchingTool === void 0 ? void 0 : matchingTool.id) || 0;
|
|
80
|
-
return cy.wrap(toolId);
|
|
81
|
-
})
|
|
82
|
-
.then(function (toolId) {
|
|
83
|
-
// Request sessionless launch URL
|
|
40
|
+
// List external tools in the course
|
|
84
41
|
return (cy
|
|
85
42
|
.request({
|
|
86
43
|
method: 'GET',
|
|
87
|
-
url: "https://canvas.harvard.edu/api/v1/courses/".concat(courseId, "/external_tools
|
|
44
|
+
url: "https://canvas.harvard.edu/api/v1/courses/".concat(courseId, "/external_tools"),
|
|
88
45
|
body: {
|
|
89
46
|
per_page: 200,
|
|
90
47
|
access_token: accessToken,
|
|
91
48
|
},
|
|
92
49
|
})
|
|
93
|
-
.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
50
|
+
.then(function (response) {
|
|
51
|
+
// Extract tools from the body
|
|
52
|
+
var externalTools = response.body;
|
|
53
|
+
// Find the external tool of interest
|
|
54
|
+
var matchingTool = externalTools.find(function (externalTool) {
|
|
55
|
+
// Skip non-nav items
|
|
56
|
+
if (
|
|
57
|
+
// No nav
|
|
58
|
+
!externalTool.course_navigation
|
|
59
|
+
// No nav information
|
|
60
|
+
|| typeof externalTool.course_navigation !== 'object') {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
// Skip non-labeled items
|
|
64
|
+
if (!externalTool.course_navigation.text) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
// Skip if the app name does not match the expected name
|
|
68
|
+
var thisAppName = (externalTool
|
|
69
|
+
.course_navigation
|
|
70
|
+
.text
|
|
71
|
+
.trim()
|
|
72
|
+
.toLowerCase());
|
|
73
|
+
return thisAppName === appName.trim().toLowerCase();
|
|
74
|
+
});
|
|
75
|
+
// Make sure we found the app
|
|
76
|
+
if (!matchingTool) {
|
|
77
|
+
throw new Error("Could not find any apps named \"".concat(appName, "\" in course ").concat(courseId));
|
|
100
78
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
79
|
+
// Get the toolId for the matching tool
|
|
80
|
+
var toolId = (matchingTool === null || matchingTool === void 0 ? void 0 : matchingTool.id) || 0;
|
|
81
|
+
return cy.wrap(toolId);
|
|
82
|
+
})
|
|
83
|
+
.then(function (toolId) {
|
|
84
|
+
// Request sessionless launch URL
|
|
85
|
+
return (cy
|
|
86
|
+
.request({
|
|
87
|
+
method: 'GET',
|
|
88
|
+
url: "https://canvas.harvard.edu/api/v1/courses/".concat(courseId, "/external_tools/sessionless_launch?id=").concat(toolId),
|
|
89
|
+
body: {
|
|
90
|
+
per_page: 200,
|
|
91
|
+
access_token: accessToken,
|
|
92
|
+
},
|
|
93
|
+
})
|
|
94
|
+
.its('body'));
|
|
95
|
+
})
|
|
96
|
+
.then(function (sessionlessLaunchInfo) {
|
|
97
|
+
cy.on('uncaught:exception', function (e) {
|
|
98
|
+
// Ignore known LTI launch errors
|
|
99
|
+
if (!e.message.includes('postMessage')) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
});
|
|
104
|
+
// Launch via the sessionless launch URL
|
|
105
|
+
var launchURL = sessionlessLaunchInfo.url;
|
|
106
|
+
cy.visit(launchURL);
|
|
107
|
+
}));
|
|
108
|
+
});
|
|
107
109
|
});
|
|
108
110
|
};
|
|
109
111
|
/*----------------------------------------*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launchAs.js","sourceRoot":"","sources":["../../../src/commands/launchAs.ts"],"names":[],"mappings":";AAAA,iCAAiC;;AAkCjC,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,IAAM,QAAQ,GAAG;IACf,OAAO,CAAC,QAAQ,CAAC,GAAG,CAClB,UAAU,EACV,UACE,IAAY,EACZ,IAGM;QAHN,qBAAA,EAAA,SAGM;QAEN,iBAAiB;QACjB,EAAE,CAAC,GAAG,CAAC,iCAAgB,IAAI,CAAE,CAAC,CAAC;QAE/B,mBAAmB;QACb,IAAA,QAAQ,GAAc,IAAI,SAAlB,EAAE,OAAO,GAAK,IAAI,QAAT,CAAU;QAEjC,2CAA2C;QAC3C,IAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAElB,0DAA0D;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAM,WAAW,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"launchAs.js","sourceRoot":"","sources":["../../../src/commands/launchAs.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,65 +52,68 @@ var getFormData = function (html, formSelector) {
|
|
|
52
52
|
var logIntoPorta = function () {
|
|
53
53
|
Cypress.Commands.add('logIntoPorta', function (name) {
|
|
54
54
|
cy.log('🔓 Handling HarvardKey authentication via API');
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
// Request 1: GET Cirrus Identity discovery page
|
|
66
|
-
cy.request({
|
|
67
|
-
url: LOGIN_PAGE,
|
|
68
|
-
followRedirect: true,
|
|
69
|
-
failOnStatusCode: false,
|
|
70
|
-
headers: htmlHeaders,
|
|
71
|
-
}).then(function (discoveryRes) {
|
|
72
|
-
// Parse discovery page for HarvardKey IdP button href
|
|
73
|
-
var btnMatch = discoveryRes.body.match(new RegExp("href=[\"']([^\"']+)[\"'][^>]*id=[\"']".concat(HARVARDKEY_IDP_BUTTON_ID, "[\"']")));
|
|
74
|
-
if (!btnMatch) {
|
|
75
|
-
throw new Error('Could not find HarvardKey IdP button link on discovery page');
|
|
55
|
+
// Get user credentials from environment variables
|
|
56
|
+
cy.env([name]).then(function (environment) {
|
|
57
|
+
var userInfo = environment[name];
|
|
58
|
+
if (!userInfo) {
|
|
59
|
+
throw new Error("Could not find ".concat(name, " in environment variables"));
|
|
60
|
+
}
|
|
61
|
+
var username = userInfo.username, password = userInfo.password;
|
|
62
|
+
// Check if username and password are set
|
|
63
|
+
if (!username || !password) {
|
|
64
|
+
throw new Error("Credential \"".concat(name, "\" is missing username and/or password"));
|
|
76
65
|
}
|
|
77
|
-
var
|
|
78
|
-
// Request
|
|
66
|
+
var htmlHeaders = { accept: 'text/html' };
|
|
67
|
+
// Request 1: GET Cirrus Identity discovery page
|
|
79
68
|
cy.request({
|
|
80
|
-
url:
|
|
69
|
+
url: LOGIN_PAGE,
|
|
81
70
|
followRedirect: true,
|
|
82
71
|
failOnStatusCode: false,
|
|
83
72
|
headers: htmlHeaders,
|
|
84
|
-
}).then(function (
|
|
85
|
-
// Parse
|
|
86
|
-
var
|
|
87
|
-
if (!
|
|
88
|
-
throw new Error('Could not find
|
|
73
|
+
}).then(function (discoveryRes) {
|
|
74
|
+
// Parse discovery page for HarvardKey IdP button href
|
|
75
|
+
var btnMatch = discoveryRes.body.match(new RegExp("href=[\"']([^\"']+)[\"'][^>]*id=[\"']".concat(HARVARDKEY_IDP_BUTTON_ID, "[\"']")));
|
|
76
|
+
if (!btnMatch) {
|
|
77
|
+
throw new Error('Could not find HarvardKey IdP button link on discovery page');
|
|
89
78
|
}
|
|
90
|
-
|
|
79
|
+
var idpUrl = "".concat(IDP_BASE_URL).concat(btnMatch[1]);
|
|
80
|
+
// Request 2: GET HarvardKey IdP login page
|
|
91
81
|
cy.request({
|
|
92
|
-
|
|
93
|
-
url: loginFormUrl,
|
|
94
|
-
form: true,
|
|
82
|
+
url: idpUrl,
|
|
95
83
|
followRedirect: true,
|
|
96
84
|
failOnStatusCode: false,
|
|
97
85
|
headers: htmlHeaders,
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
throw new Error('Could not find SAML form in login response');
|
|
86
|
+
}).then(function (loginPageRes) {
|
|
87
|
+
// Parse login form action and hidden fields
|
|
88
|
+
var _a = getFormData(loginPageRes.body), loginFormUrl = _a.action, loginHiddenFields = _a.fields;
|
|
89
|
+
if (!loginFormUrl) {
|
|
90
|
+
throw new Error('Could not find login form action on HarvardKey page');
|
|
104
91
|
}
|
|
105
|
-
// Request
|
|
106
|
-
|
|
92
|
+
// Request 3: POST credentials to HarvardKey login form
|
|
93
|
+
cy.request({
|
|
107
94
|
method: 'POST',
|
|
108
|
-
url:
|
|
95
|
+
url: loginFormUrl,
|
|
109
96
|
form: true,
|
|
110
97
|
followRedirect: true,
|
|
111
98
|
failOnStatusCode: false,
|
|
112
99
|
headers: htmlHeaders,
|
|
113
|
-
body:
|
|
100
|
+
body: __assign(__assign({}, loginHiddenFields), { username: username, password: password }),
|
|
101
|
+
}).then(function (authRes) {
|
|
102
|
+
// Parse SAML form from login response
|
|
103
|
+
var _a = getFormData(authRes.body, 'form[action*="saml2-acs"]'), samlFormUrl = _a.action, samlHiddenFields = _a.fields;
|
|
104
|
+
if (!samlFormUrl) {
|
|
105
|
+
throw new Error('Could not find SAML form in login response');
|
|
106
|
+
}
|
|
107
|
+
// Request 4: POST SAML assertion to ACS
|
|
108
|
+
return cy.request({
|
|
109
|
+
method: 'POST',
|
|
110
|
+
url: samlFormUrl,
|
|
111
|
+
form: true,
|
|
112
|
+
followRedirect: true,
|
|
113
|
+
failOnStatusCode: false,
|
|
114
|
+
headers: htmlHeaders,
|
|
115
|
+
body: samlHiddenFields,
|
|
116
|
+
});
|
|
114
117
|
});
|
|
115
118
|
});
|
|
116
119
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logIntoPorta.js","sourceRoot":"","sources":["../../../src/commands/logIntoPorta.ts"],"names":[],"mappings":";AAAA,iCAAiC;;;;;;;;;;;;;AA6BjC,4CAA4C;AAC5C,kDAAkD;AAClD,4CAA4C;AAE5C,6CAA6C;AAC7C,IAAM,UAAU,GAAG,uHAAuH,CAAC;AAC3I,0CAA0C;AAC1C,IAAM,YAAY,GAAG,iCAAiC,CAAC;AACvD,oDAAoD;AACpD,IAAM,wBAAwB,GAAG,uBAAuB,CAAC;AAEzD,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C;;;;;;GAMG;AACH,IAAM,WAAW,GAAG,UAAC,IAAY,EAAE,YAAqB;;IAArB,6BAAA,EAAA,qBAAqB;IACtD,IAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/D,IAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAM,MAAM,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,QAAQ,CAAC,mCAAI,EAAE,CAAC;IAClD,IAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,CAAC,oBAAoB,EAAE,OAAO,CAAC,UAAC,KAAK;;QACzD,IAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAA,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,mCAAI,EAAE,CAAC;IAC7D,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,IAAM,YAAY,GAAG;IACnB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAClB,cAAc,EACd,UACE,IAAY;QAEZ,EAAE,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAExD,
|
|
1
|
+
{"version":3,"file":"logIntoPorta.js","sourceRoot":"","sources":["../../../src/commands/logIntoPorta.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,7 +70,6 @@ var genConfiguration = function () {
|
|
|
70
70
|
}
|
|
71
71
|
// NOTE: Order matters (later overrides earlier)
|
|
72
72
|
var sources = [
|
|
73
|
-
GlobalCredentials,
|
|
74
73
|
GlobalResources,
|
|
75
74
|
GlobalValues,
|
|
76
75
|
profileModules,
|
|
@@ -92,8 +91,11 @@ var genConfiguration = function () {
|
|
|
92
91
|
// Resolve dependencies
|
|
93
92
|
var dependents = (0, resolveDependents_1.default)(dependentValues, basics);
|
|
94
93
|
// Add basics, depends, and profileName into the final env
|
|
95
|
-
var
|
|
96
|
-
|
|
94
|
+
var exposed = __assign(__assign(__assign({}, basics), dependents), { profileName: profileName });
|
|
95
|
+
// Add all global values and credentials into the final env
|
|
96
|
+
// Does not support dependent values in GlobalCredentials, TODO: Fix
|
|
97
|
+
var securedEnv = __assign(__assign({}, GlobalCredentials), exposed);
|
|
98
|
+
var baseUrl = exposed.baseURL;
|
|
97
99
|
if (!(baseUrl === null || baseUrl === void 0 ? void 0 : baseUrl.startsWith('http'))) {
|
|
98
100
|
baseUrl = "https://".concat(baseUrl);
|
|
99
101
|
}
|
|
@@ -103,7 +105,8 @@ var genConfiguration = function () {
|
|
|
103
105
|
experimentalWebKitSupport: true,
|
|
104
106
|
experimentalOriginDependencies: true,
|
|
105
107
|
baseUrl: baseUrl,
|
|
106
|
-
|
|
108
|
+
expose: exposed,
|
|
109
|
+
env: securedEnv,
|
|
107
110
|
},
|
|
108
111
|
});
|
|
109
112
|
};
|