diff --git a/dist/alks.cjs.js b/dist/alks.cjs.js index a25b2f6c..f5dec51c 100644 --- a/dist/alks.cjs.js +++ b/dist/alks.cjs.js @@ -1,6 +1,6 @@ 'use strict'; -var version = "1.1.0"; +var version = "1.2.0"; const Buffer = require('buffer').Buffer; const fetch = require('node-fetch'); @@ -116,12 +116,12 @@ class alks { * role: 'PowerUser', * sessionTime: 2 * }).then((creds) => { - * // creds.accessKey, creds.secretKey, creds.sessionToken + * // creds.accessKey, creds.secretKey, creds.sessionToken, creds.consoleURL * }) */ getKeys(props) { return(this._doFetch('getKeys', props).then(results => - pick(results, ['accessKey', 'secretKey', 'sessionToken']) + pick(results, ['accessKey', 'secretKey', 'sessionToken', 'consoleURL']) )) } @@ -143,12 +143,12 @@ class alks { * role: 'IAMAdmin', * sessionTime: 1 * }).then((creds) => { - * // creds.accessKey, creds.secretKey, creds.sessionToken + * // creds.accessKey, creds.secretKey, creds.sessionToken, creds.consoleURL * }) */ getIAMKeys(props) { return(this._doFetch('getIAMKeys', props).then(results => - pick(results, ['accessKey', 'secretKey', 'sessionToken']) + pick(results, ['accessKey', 'secretKey', 'sessionToken', 'consoleURL']) )) } diff --git a/dist/alks.esm.js b/dist/alks.esm.js index 9107b737..2a413d42 100644 --- a/dist/alks.esm.js +++ b/dist/alks.esm.js @@ -1,4 +1,4 @@ -var version = "1.1.0"; +var version = "1.2.0"; const fetch = window.fetch.bind(window); @@ -113,12 +113,12 @@ class alks { * role: 'PowerUser', * sessionTime: 2 * }).then((creds) => { - * // creds.accessKey, creds.secretKey, creds.sessionToken + * // creds.accessKey, creds.secretKey, creds.sessionToken, creds.consoleURL * }) */ getKeys(props) { return(this._doFetch('getKeys', props).then(results => - pick(results, ['accessKey', 'secretKey', 'sessionToken']) + pick(results, ['accessKey', 'secretKey', 'sessionToken', 'consoleURL']) )) } @@ -140,12 +140,12 @@ class alks { * role: 'IAMAdmin', * sessionTime: 1 * }).then((creds) => { - * // creds.accessKey, creds.secretKey, creds.sessionToken + * // creds.accessKey, creds.secretKey, creds.sessionToken, creds.consoleURL * }) */ getIAMKeys(props) { return(this._doFetch('getIAMKeys', props).then(results => - pick(results, ['accessKey', 'secretKey', 'sessionToken']) + pick(results, ['accessKey', 'secretKey', 'sessionToken', 'consoleURL']) )) } diff --git a/dist/alks.min.js b/dist/alks.min.js index 97aa4263..365ad092 100644 --- a/dist/alks.min.js +++ b/dist/alks.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).alks=t()}(this,function(){"use strict";var n=window.fetch.bind(window),t=function(e,t){void 0===t&&(t={}),this.defaults=Object.assign({},t,{_fetch:n},e)};t.prototype._base64Encode=function(e){return void 0===e&&(e=""),btoa(e)},t.prototype.create=function(e){return new t(e,this.defaults)},t.prototype.getAccounts=function(e){return this._doFetch("getAccounts",e).then(function(t){return Object.keys(t.accountListRole).map(function(e){return{account:e,role:t.accountListRole[e][0].role,iamKeyActive:t.accountListRole[e][0].iamKeyActive}})})},t.prototype.getKeys=function(e){return this._doFetch("getKeys",e).then(function(e){return o(e,["accessKey","secretKey","sessionToken"])})},t.prototype.getIAMKeys=function(e){return this._doFetch("getIAMKeys",e).then(function(e){return o(e,["accessKey","secretKey","sessionToken"])})},t.prototype.getAWSRoleTypes=function(e){return this._doFetch("getAWSRoleTypes",e).then(function(e){return JSON.parse(e.roleTypes)})},t.prototype.getNonServiceAWSRoleTypes=function(e){return this._doFetch("getNonServiceAWSRoleTypes",e).then(function(e){return JSON.parse(e.roleTypes)})},t.prototype.createRole=function(e){return this._doFetch("createRole",e).then(function(e){return e.denyArns=e.denyArns.split(","),o(e,["roleArn","denyArns","instanceProfileArn","addedRoleToInstanceProfile"])})},t.prototype.createNonServiceRole=function(e){return this._doFetch("createNonServiceRole",e).then(function(e){return e.denyArns=e.denyArns.split(","),o(e,["roleArn","denyArns","instanceProfileArn","addedRoleToInstanceProfile"])})},t.prototype.listAWSAccountRoles=function(e){return this._doFetch("listAWSAccountRoles",e).then(function(e){return JSON.parse(e.jsonAWSRoleList).map(function(e){return e.split("/").slice(-1)[0]})})},t.prototype.getAccountRole=function(t){return this._doFetch("getAccountRole",t).then(function(e){if(!e.roleExists)throw new Error("Role "+t.roleName+" does not exist in this account");return e.roleARN})},t.prototype.deleteRole=function(e){return this._doFetch("deleteRole",e).then(function(){return!0})},t.prototype.createAccessKeys=function(e){return this._doFetch("accessKeys",e).then(function(e){return o(e,["iamUserArn","accessKey","secretKey","addedIAMUserToGroup"])})},t.prototype.deleteIAMUser=function(e){return this._doFetch("IAMUser",e,"DELETE").then(function(){return!0})},t.prototype.version=function(e){return this._doFetch("version",e,"GET").then(function(e){return o(e,["version"])})},t.prototype.getLoginRole=function(e){var t=e.accountId,n=e.role;return this._doFetch("loginRoles/id/"+t+"/"+n,null).then(function(e){return o(e,["account","role","iamKeyActive","maxKeyDuration"])})},t.prototype.getAccessToken=function(e){return this._doFetch("accessToken",e).then(function(e){return o(e,["accessToken","expiresIn"])})},t.prototype.getRefreshTokens=function(e){return this._doFetch("refreshTokens",e,"GET").then(function(e){return e.refreshTokens.map(function(e){return o(e,["clientId","id","userId","value"])})})},t.prototype.revoke=function(e){return this._doFetch("revoke",e).then(function(e){return"Success"==e.statusMessage})},t.prototype._doFetch=function(e,t,n){void 0===t&&(t={}),void 0===n&&(n="POST");var o=Object.assign({},this.defaults,t),r={"Content-Type":"application/json","User-Agent":"AlksJS/1.1.0"};if(o.accessToken&&(r.Authorization="Bearer "+o.accessToken,delete o.accessToken),o.userid||o.password){console.error("The userid and password properties are deprecated and should be replaced with an access token");var s=this._base64Encode(o.userid+":"+o.password);r.Authorization="Basic "+s,delete o.userid,delete o.password}var c=o._fetch(o.baseUrl+"/"+e+"/",{method:n,headers:r,body:"GET"==n?void 0:JSON.stringify(o)}),i=c.then(function(e){return e.json()}).catch(function(){});return Promise.all([c,i]).then(function(e){var t=e[0],n=e[1];if(!t.ok)throw new u(t,n);return n})};var o=function(n,e){return e.reduce(function(e,t){return e[t]=n[t],e},{})},u=function(n){function e(e,t){n.call(this,e.statusText),this.status=e.status,Object.assign(this,t)}return n&&(e.__proto__=n),(e.prototype=Object.create(n&&n.prototype)).constructor=e}(Error);return new t}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).alks=t()}(this,function(){"use strict";var n=window.fetch.bind(window),t=function(e,t){void 0===t&&(t={}),this.defaults=Object.assign({},t,{_fetch:n},e)};t.prototype._base64Encode=function(e){return void 0===e&&(e=""),btoa(e)},t.prototype.create=function(e){return new t(e,this.defaults)},t.prototype.getAccounts=function(e){return this._doFetch("getAccounts",e).then(function(t){return Object.keys(t.accountListRole).map(function(e){return{account:e,role:t.accountListRole[e][0].role,iamKeyActive:t.accountListRole[e][0].iamKeyActive}})})},t.prototype.getKeys=function(e){return this._doFetch("getKeys",e).then(function(e){return o(e,["accessKey","secretKey","sessionToken","consoleURL"])})},t.prototype.getIAMKeys=function(e){return this._doFetch("getIAMKeys",e).then(function(e){return o(e,["accessKey","secretKey","sessionToken","consoleURL"])})},t.prototype.getAWSRoleTypes=function(e){return this._doFetch("getAWSRoleTypes",e).then(function(e){return JSON.parse(e.roleTypes)})},t.prototype.getNonServiceAWSRoleTypes=function(e){return this._doFetch("getNonServiceAWSRoleTypes",e).then(function(e){return JSON.parse(e.roleTypes)})},t.prototype.createRole=function(e){return this._doFetch("createRole",e).then(function(e){return e.denyArns=e.denyArns.split(","),o(e,["roleArn","denyArns","instanceProfileArn","addedRoleToInstanceProfile"])})},t.prototype.createNonServiceRole=function(e){return this._doFetch("createNonServiceRole",e).then(function(e){return e.denyArns=e.denyArns.split(","),o(e,["roleArn","denyArns","instanceProfileArn","addedRoleToInstanceProfile"])})},t.prototype.listAWSAccountRoles=function(e){return this._doFetch("listAWSAccountRoles",e).then(function(e){return JSON.parse(e.jsonAWSRoleList).map(function(e){return e.split("/").slice(-1)[0]})})},t.prototype.getAccountRole=function(t){return this._doFetch("getAccountRole",t).then(function(e){if(!e.roleExists)throw new Error("Role "+t.roleName+" does not exist in this account");return e.roleARN})},t.prototype.deleteRole=function(e){return this._doFetch("deleteRole",e).then(function(){return!0})},t.prototype.createAccessKeys=function(e){return this._doFetch("accessKeys",e).then(function(e){return o(e,["iamUserArn","accessKey","secretKey","addedIAMUserToGroup"])})},t.prototype.deleteIAMUser=function(e){return this._doFetch("IAMUser",e,"DELETE").then(function(){return!0})},t.prototype.version=function(e){return this._doFetch("version",e,"GET").then(function(e){return o(e,["version"])})},t.prototype.getLoginRole=function(e){var t=e.accountId,n=e.role;return this._doFetch("loginRoles/id/"+t+"/"+n,null).then(function(e){return o(e,["account","role","iamKeyActive","maxKeyDuration"])})},t.prototype.getAccessToken=function(e){return this._doFetch("accessToken",e).then(function(e){return o(e,["accessToken","expiresIn"])})},t.prototype.getRefreshTokens=function(e){return this._doFetch("refreshTokens",e,"GET").then(function(e){return e.refreshTokens.map(function(e){return o(e,["clientId","id","userId","value"])})})},t.prototype.revoke=function(e){return this._doFetch("revoke",e).then(function(e){return"Success"==e.statusMessage})},t.prototype._doFetch=function(e,t,n){void 0===t&&(t={}),void 0===n&&(n="POST");var o=Object.assign({},this.defaults,t),r={"Content-Type":"application/json","User-Agent":"AlksJS/1.2.0"};if(o.accessToken&&(r.Authorization="Bearer "+o.accessToken,delete o.accessToken),o.userid||o.password){console.error("The userid and password properties are deprecated and should be replaced with an access token");var s=this._base64Encode(o.userid+":"+o.password);r.Authorization="Basic "+s,delete o.userid,delete o.password}var c=o._fetch(o.baseUrl+"/"+e+"/",{method:n,headers:r,body:"GET"==n?void 0:JSON.stringify(o)}),i=c.then(function(e){return e.json()}).catch(function(){});return Promise.all([c,i]).then(function(e){var t=e[0],n=e[1];if(!t.ok)throw new u(t,n);return n})};var o=function(n,e){return e.reduce(function(e,t){return e[t]=n[t],e},{})},u=function(n){function e(e,t){n.call(this,e.statusText),this.status=e.status,Object.assign(this,t)}return n&&(e.__proto__=n),(e.prototype=Object.create(n&&n.prototype)).constructor=e}(Error);return new t}); diff --git a/dist/alks.umd.js b/dist/alks.umd.js index 46815313..4a2021a8 100644 --- a/dist/alks.umd.js +++ b/dist/alks.umd.js @@ -4,7 +4,7 @@ (global = global || self, global.alks = factory()); }(this, function () { 'use strict'; - var version = "1.1.0"; + var version = "1.2.0"; var fetch = window.fetch.bind(window); @@ -121,11 +121,11 @@ * role: 'PowerUser', * sessionTime: 2 * }).then((creds) => { - * // creds.accessKey, creds.secretKey, creds.sessionToken + * // creds.accessKey, creds.secretKey, creds.sessionToken, creds.consoleURL * }) */ alks.prototype.getKeys = function getKeys (props) { - return(this._doFetch('getKeys', props).then(function (results) { return pick(results, ['accessKey', 'secretKey', 'sessionToken']); } + return(this._doFetch('getKeys', props).then(function (results) { return pick(results, ['accessKey', 'secretKey', 'sessionToken', 'consoleURL']); } )) }; @@ -147,11 +147,11 @@ * role: 'IAMAdmin', * sessionTime: 1 * }).then((creds) => { - * // creds.accessKey, creds.secretKey, creds.sessionToken + * // creds.accessKey, creds.secretKey, creds.sessionToken, creds.consoleURL * }) */ alks.prototype.getIAMKeys = function getIAMKeys (props) { - return(this._doFetch('getIAMKeys', props).then(function (results) { return pick(results, ['accessKey', 'secretKey', 'sessionToken']); } + return(this._doFetch('getIAMKeys', props).then(function (results) { return pick(results, ['accessKey', 'secretKey', 'sessionToken', 'consoleURL']); } )) }; diff --git a/package-lock.json b/package-lock.json index 1e86fe70..a5482205 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "alks.js", - "version": "1.0.1", + "version": "1.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 0dca1dec..884bacfd 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "alks.js", - "version": "1.1.0", + "version": "1.2.0", "description": "JavaScript client for the ALKS API, usable in both modern browsers and node.js", "main": "dist/alks.cjs.js", "unpkg": "dist/alks.min.js", diff --git a/src/alks.js b/src/alks.js index 20a15414..555baf76 100755 --- a/src/alks.js +++ b/src/alks.js @@ -115,12 +115,12 @@ class alks { * role: 'PowerUser', * sessionTime: 2 * }).then((creds) => { - * // creds.accessKey, creds.secretKey, creds.sessionToken + * // creds.accessKey, creds.secretKey, creds.sessionToken, creds.consoleURL * }) */ getKeys(props) { return(this._doFetch('getKeys', props).then(results => - pick(results, ['accessKey', 'secretKey', 'sessionToken']) + pick(results, ['accessKey', 'secretKey', 'sessionToken', 'consoleURL']) )) } @@ -142,12 +142,12 @@ class alks { * role: 'IAMAdmin', * sessionTime: 1 * }).then((creds) => { - * // creds.accessKey, creds.secretKey, creds.sessionToken + * // creds.accessKey, creds.secretKey, creds.sessionToken, creds.consoleURL * }) */ getIAMKeys(props) { return(this._doFetch('getIAMKeys', props).then(results => - pick(results, ['accessKey', 'secretKey', 'sessionToken']) + pick(results, ['accessKey', 'secretKey', 'sessionToken', 'consoleURL']) )) } diff --git a/test/test.js b/test/test.js index 7f514afe..02e45df5 100755 --- a/test/test.js +++ b/test/test.js @@ -50,9 +50,9 @@ describe('alks.js', function() { consoleErrorSpy.restore() }) - it('should return an access key, secret key, and session token', async () => { + it('should return an access key, secret key, session token and console URL', async () => { const _fetch = fetchMock.sandbox().mock('https://your.alks-host.com/getKeys/', { - body: { accessKey: 'foo', secretKey: 'bar', sessionToken: 'baz', statusMessage: 'Success'}, + body: { accessKey: 'foo', secretKey: 'bar', sessionToken: 'baz', consoleURL: 'https://foo.com', statusMessage: 'Success'}, status: 200 }) @@ -65,7 +65,7 @@ describe('alks.js', function() { _fetch }) - expect(result).to.have.keys('accessKey', 'secretKey', 'sessionToken') + expect(result).to.have.keys('accessKey', 'secretKey', 'sessionToken', 'consoleURL') }) it('should send basic credentials via the Authorization header', async () => { @@ -193,9 +193,9 @@ describe('alks.js', function() { describe('getIAMKeys', () => { - it('getIAMKeys', async () => { + it('should return an access key, secret key, session token and console URL', async () => { const _fetch = fetchMock.sandbox().mock('https://your.alks-host.com/getIAMKeys/', { - body: { accessKey: 'foo', secretKey: 'bar', sessionToken: 'baz', statusMessage: 'Success' }, + body: { accessKey: 'foo', secretKey: 'bar', sessionToken: 'baz', consoleURL: 'https://foo.com', statusMessage: 'Success' }, status: 200 }) @@ -208,7 +208,7 @@ describe('alks.js', function() { _fetch }) - expect(result).to.have.keys('accessKey', 'secretKey', 'sessionToken') + expect(result).to.have.keys('accessKey', 'secretKey', 'sessionToken', 'consoleURL') }) })