ibm-cloud-sdk-core 5.0.1 → 5.1.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.
Files changed (98) hide show
  1. package/.secrets.baseline +128 -24
  2. package/Authentication.md +146 -21
  3. package/CHANGELOG.md +14 -0
  4. package/README.md +3 -2
  5. package/auth/authenticators/authenticator.d.ts +1 -0
  6. package/auth/authenticators/authenticator.js +1 -0
  7. package/auth/authenticators/basic-authenticator.d.ts +1 -1
  8. package/auth/authenticators/basic-authenticator.js +3 -1
  9. package/auth/authenticators/bearer-token-authenticator.js +2 -0
  10. package/auth/authenticators/container-authenticator.d.ts +6 -0
  11. package/auth/authenticators/container-authenticator.js +8 -0
  12. package/auth/authenticators/iam-assume-authenticator.d.ts +82 -0
  13. package/auth/authenticators/iam-assume-authenticator.js +92 -0
  14. package/auth/authenticators/iam-authenticator.d.ts +6 -0
  15. package/auth/authenticators/iam-authenticator.js +8 -0
  16. package/auth/authenticators/iam-request-based-authenticator-immutable.d.ts +64 -0
  17. package/auth/authenticators/iam-request-based-authenticator-immutable.js +74 -0
  18. package/auth/authenticators/iam-request-based-authenticator.d.ts +19 -47
  19. package/auth/authenticators/iam-request-based-authenticator.js +28 -36
  20. package/auth/authenticators/index.d.ts +4 -1
  21. package/auth/authenticators/index.js +3 -1
  22. package/auth/authenticators/token-request-based-authenticator-immutable.d.ts +71 -0
  23. package/auth/authenticators/token-request-based-authenticator-immutable.js +91 -0
  24. package/auth/authenticators/token-request-based-authenticator.d.ts +4 -42
  25. package/auth/authenticators/token-request-based-authenticator.js +5 -40
  26. package/auth/token-managers/container-token-manager.d.ts +6 -0
  27. package/auth/token-managers/container-token-manager.js +18 -50
  28. package/auth/token-managers/cp4d-token-manager.js +6 -1
  29. package/auth/token-managers/iam-assume-token-manager.d.ts +101 -0
  30. package/auth/token-managers/iam-assume-token-manager.js +220 -0
  31. package/auth/token-managers/iam-request-based-token-manager.d.ts +3 -9
  32. package/auth/token-managers/iam-request-based-token-manager.js +5 -9
  33. package/auth/token-managers/iam-token-manager.d.ts +8 -2
  34. package/auth/token-managers/iam-token-manager.js +10 -2
  35. package/auth/token-managers/index.d.ts +4 -2
  36. package/auth/token-managers/index.js +6 -3
  37. package/auth/token-managers/mcsp-token-manager.js +6 -1
  38. package/auth/token-managers/token-manager.js +7 -3
  39. package/auth/token-managers/vpc-instance-token-manager.js +4 -1
  40. package/auth/utils/get-authenticator-from-environment.js +3 -0
  41. package/auth/utils/helpers.d.ts +18 -23
  42. package/auth/utils/helpers.js +50 -30
  43. package/auth/utils/read-external-sources.js +2 -0
  44. package/docs/ibm-cloud-sdk-core.api.json +787 -404
  45. package/es/auth/authenticators/authenticator.d.ts +1 -0
  46. package/es/auth/authenticators/authenticator.js +1 -0
  47. package/es/auth/authenticators/basic-authenticator.d.ts +1 -1
  48. package/es/auth/authenticators/basic-authenticator.js +3 -1
  49. package/es/auth/authenticators/bearer-token-authenticator.js +2 -0
  50. package/es/auth/authenticators/container-authenticator.d.ts +6 -0
  51. package/es/auth/authenticators/container-authenticator.js +8 -0
  52. package/es/auth/authenticators/iam-assume-authenticator.d.ts +82 -0
  53. package/es/auth/authenticators/iam-assume-authenticator.js +70 -0
  54. package/es/auth/authenticators/iam-authenticator.d.ts +6 -0
  55. package/es/auth/authenticators/iam-authenticator.js +8 -0
  56. package/es/auth/authenticators/iam-request-based-authenticator-immutable.d.ts +64 -0
  57. package/es/auth/authenticators/iam-request-based-authenticator-immutable.js +51 -0
  58. package/es/auth/authenticators/iam-request-based-authenticator.d.ts +19 -47
  59. package/es/auth/authenticators/iam-request-based-authenticator.js +26 -35
  60. package/es/auth/authenticators/index.d.ts +4 -1
  61. package/es/auth/authenticators/index.js +1 -0
  62. package/es/auth/authenticators/token-request-based-authenticator-immutable.d.ts +71 -0
  63. package/es/auth/authenticators/token-request-based-authenticator-immutable.js +65 -0
  64. package/es/auth/authenticators/token-request-based-authenticator.d.ts +4 -42
  65. package/es/auth/authenticators/token-request-based-authenticator.js +3 -37
  66. package/es/auth/token-managers/container-token-manager.d.ts +6 -0
  67. package/es/auth/token-managers/container-token-manager.js +18 -24
  68. package/es/auth/token-managers/cp4d-token-manager.js +6 -1
  69. package/es/auth/token-managers/iam-assume-token-manager.d.ts +101 -0
  70. package/es/auth/token-managers/iam-assume-token-manager.js +164 -0
  71. package/es/auth/token-managers/iam-request-based-token-manager.d.ts +3 -9
  72. package/es/auth/token-managers/iam-request-based-token-manager.js +5 -9
  73. package/es/auth/token-managers/iam-token-manager.d.ts +8 -2
  74. package/es/auth/token-managers/iam-token-manager.js +10 -2
  75. package/es/auth/token-managers/index.d.ts +4 -2
  76. package/es/auth/token-managers/index.js +4 -2
  77. package/es/auth/token-managers/mcsp-token-manager.js +6 -1
  78. package/es/auth/token-managers/token-manager.js +7 -3
  79. package/es/auth/token-managers/vpc-instance-token-manager.js +4 -1
  80. package/es/auth/utils/get-authenticator-from-environment.js +4 -1
  81. package/es/auth/utils/helpers.d.ts +18 -23
  82. package/es/auth/utils/helpers.js +35 -27
  83. package/es/auth/utils/read-external-sources.js +2 -0
  84. package/es/lib/base-service.js +2 -0
  85. package/es/lib/private-helpers.d.ts +22 -0
  86. package/es/lib/private-helpers.js +58 -0
  87. package/es/lib/request-wrapper.d.ts +43 -1
  88. package/es/lib/request-wrapper.js +113 -14
  89. package/etc/ibm-cloud-sdk-core.api.md +46 -28
  90. package/ibm-cloud-sdk-core.d.ts +306 -68
  91. package/lib/base-service.js +2 -0
  92. package/lib/private-helpers.d.ts +22 -0
  93. package/lib/private-helpers.js +62 -0
  94. package/lib/request-wrapper.d.ts +43 -1
  95. package/lib/request-wrapper.js +113 -14
  96. package/package.json +5 -4
  97. package/sdk-test-utilities/package-lock.json +8 -5
  98. package/sdk-test-utilities/package.json +3 -0
@@ -0,0 +1,71 @@
1
+ /**
2
+ * (C) Copyright IBM Corp. 2024.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /// <reference types="node" />
17
+ import { OutgoingHttpHeaders } from 'http';
18
+ import { JwtTokenManager } from '../token-managers/jwt-token-manager';
19
+ import { Authenticator } from './authenticator';
20
+ import { AuthenticateOptions } from './authenticator-interface';
21
+ /** Configuration options for token-based authentication. */
22
+ export type BaseOptions = {
23
+ /** Headers to be sent with every outbound HTTP requests to token services. */
24
+ headers?: OutgoingHttpHeaders;
25
+ /**
26
+ * A flag that indicates whether verification of the token server's SSL
27
+ * certificate should be disabled or not.
28
+ */
29
+ disableSslVerification?: boolean;
30
+ /** Endpoint for HTTP token requests. */
31
+ url?: string;
32
+ /** Allow additional request config parameters */
33
+ [propName: string]: any;
34
+ };
35
+ /**
36
+ * Class for common functionality shared by token-request authenticators.
37
+ * Token-request authenticators use token managers to retrieve, store,
38
+ * and refresh tokens. Not intended to be used as stand-alone authenticator,
39
+ * but as base class to authenticators that have their own token manager
40
+ * implementations.
41
+ *
42
+ * The token will be added as an Authorization header in the form:
43
+ *
44
+ * Authorization: Bearer \<bearer-token\>
45
+ */
46
+ export declare class TokenRequestBasedAuthenticatorImmutable extends Authenticator {
47
+ protected tokenManager: JwtTokenManager;
48
+ protected url: string;
49
+ protected headers: OutgoingHttpHeaders;
50
+ protected disableSslVerification: boolean;
51
+ /**
52
+ * Create a new TokenRequestBasedAuthenticatorImmutable instance with an internal JwtTokenManager.
53
+ *
54
+ * @param options - Configuration options.
55
+ * This should be an object containing these fields:
56
+ * - url: (optional) the endpoint URL for the token service
57
+ * - disableSslVerification: (optional) a flag that indicates whether verification of the token server's SSL certificate
58
+ * should be disabled or not
59
+ * - headers: (optional) a set of HTTP headers to be sent with each request to the token service
60
+ */
61
+ constructor(options: BaseOptions);
62
+ /**
63
+ * Adds bearer token information to "requestOptions". The bearer token information
64
+ * will be set in the Authorization property of "requestOptions.headers" in the form:
65
+ *
66
+ * Authorization: Bearer \<bearer-token\>
67
+ *
68
+ * @param requestOptions - The request to augment with authentication information.
69
+ */
70
+ authenticate(requestOptions: AuthenticateOptions): Promise<void>;
71
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * (C) Copyright IBM Corp. 2024.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import extend from 'extend';
17
+ import { JwtTokenManager } from '../token-managers/jwt-token-manager';
18
+ import { Authenticator } from './authenticator';
19
+ import logger from '../../lib/logger';
20
+ /**
21
+ * Class for common functionality shared by token-request authenticators.
22
+ * Token-request authenticators use token managers to retrieve, store,
23
+ * and refresh tokens. Not intended to be used as stand-alone authenticator,
24
+ * but as base class to authenticators that have their own token manager
25
+ * implementations.
26
+ *
27
+ * The token will be added as an Authorization header in the form:
28
+ *
29
+ * Authorization: Bearer \<bearer-token\>
30
+ */
31
+ export class TokenRequestBasedAuthenticatorImmutable extends Authenticator {
32
+ /**
33
+ * Create a new TokenRequestBasedAuthenticatorImmutable instance with an internal JwtTokenManager.
34
+ *
35
+ * @param options - Configuration options.
36
+ * This should be an object containing these fields:
37
+ * - url: (optional) the endpoint URL for the token service
38
+ * - disableSslVerification: (optional) a flag that indicates whether verification of the token server's SSL certificate
39
+ * should be disabled or not
40
+ * - headers: (optional) a set of HTTP headers to be sent with each request to the token service
41
+ */
42
+ constructor(options) {
43
+ super();
44
+ this.disableSslVerification = Boolean(options.disableSslVerification);
45
+ this.url = options.url;
46
+ // default to empty object
47
+ this.headers = options.headers || {};
48
+ this.tokenManager = new JwtTokenManager(options);
49
+ }
50
+ /**
51
+ * Adds bearer token information to "requestOptions". The bearer token information
52
+ * will be set in the Authorization property of "requestOptions.headers" in the form:
53
+ *
54
+ * Authorization: Bearer \<bearer-token\>
55
+ *
56
+ * @param requestOptions - The request to augment with authentication information.
57
+ */
58
+ authenticate(requestOptions) {
59
+ return this.tokenManager.getToken().then((token) => {
60
+ const authHeader = { Authorization: `Bearer ${token}` };
61
+ requestOptions.headers = extend(true, {}, requestOptions.headers, authHeader);
62
+ logger.debug(`Authenticated outbound request (type=${this.authenticationType()})`);
63
+ });
64
+ }
65
+ }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * (C) Copyright IBM Corp. 2019, 2023.
2
+ * (C) Copyright IBM Corp. 2019, 2024.
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -15,23 +15,9 @@
15
15
  */
16
16
  /// <reference types="node" />
17
17
  import { OutgoingHttpHeaders } from 'http';
18
- import { JwtTokenManager } from '../token-managers/jwt-token-manager';
19
- import { Authenticator } from './authenticator';
20
- import { AuthenticateOptions } from './authenticator-interface';
18
+ import { TokenRequestBasedAuthenticatorImmutable } from './token-request-based-authenticator-immutable';
21
19
  /** Configuration options for token-based authentication. */
22
- export type BaseOptions = {
23
- /** Headers to be sent with every outbound HTTP requests to token services. */
24
- headers?: OutgoingHttpHeaders;
25
- /**
26
- * A flag that indicates whether verification of the token server's SSL
27
- * certificate should be disabled or not.
28
- */
29
- disableSslVerification?: boolean;
30
- /** Endpoint for HTTP token requests. */
31
- url?: string;
32
- /** Allow additional request config parameters */
33
- [propName: string]: any;
34
- };
20
+ export { BaseOptions } from './token-request-based-authenticator-immutable';
35
21
  /**
36
22
  * Class for common functionality shared by token-request authenticators.
37
23
  * TokenRequestBasedAuthenticators use token managers to retrieve, store,
@@ -43,22 +29,7 @@ export type BaseOptions = {
43
29
  *
44
30
  * Authorization: Bearer \<bearer-token\>
45
31
  */
46
- export declare class TokenRequestBasedAuthenticator extends Authenticator {
47
- protected tokenManager: JwtTokenManager;
48
- protected url: string;
49
- protected headers: OutgoingHttpHeaders;
50
- protected disableSslVerification: boolean;
51
- /**
52
- * Create a new TokenRequestBasedAuthenticator instance with an internal JwtTokenManager.
53
- *
54
- * @param options - Configuration options.
55
- * This should be an object containing these fields:
56
- * - url: (optional) the endpoint URL for the token service
57
- * - disableSslVerification: (optional) a flag that indicates whether verification of the token server's SSL certificate
58
- * should be disabled or not
59
- * - headers: (optional) a set of HTTP headers to be sent with each request to the token service
60
- */
61
- constructor(options: BaseOptions);
32
+ export declare class TokenRequestBasedAuthenticator extends TokenRequestBasedAuthenticatorImmutable {
62
33
  /**
63
34
  * Set the flag that indicates whether verification of the server's SSL
64
35
  * certificate should be disabled or not.
@@ -74,13 +45,4 @@ export declare class TokenRequestBasedAuthenticator extends Authenticator {
74
45
  * Overwrites previous default headers.
75
46
  */
76
47
  setHeaders(headers: OutgoingHttpHeaders): void;
77
- /**
78
- * Adds bearer token information to "requestOptions". The bearer token information
79
- * will be set in the Authorization property of "requestOptions.headers" in the form:
80
- *
81
- * Authorization: Bearer \<bearer-token\>
82
- *
83
- * @param requestOptions - The request to augment with authentication information.
84
- */
85
- authenticate(requestOptions: AuthenticateOptions): Promise<void>;
86
48
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * (C) Copyright IBM Corp. 2019, 2023.
2
+ * (C) Copyright IBM Corp. 2019, 2024.
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -13,9 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import extend from 'extend';
17
- import { JwtTokenManager } from '../token-managers/jwt-token-manager';
18
- import { Authenticator } from './authenticator';
16
+ import { TokenRequestBasedAuthenticatorImmutable } from './token-request-based-authenticator-immutable';
19
17
  /**
20
18
  * Class for common functionality shared by token-request authenticators.
21
19
  * TokenRequestBasedAuthenticators use token managers to retrieve, store,
@@ -27,25 +25,7 @@ import { Authenticator } from './authenticator';
27
25
  *
28
26
  * Authorization: Bearer \<bearer-token\>
29
27
  */
30
- export class TokenRequestBasedAuthenticator extends Authenticator {
31
- /**
32
- * Create a new TokenRequestBasedAuthenticator instance with an internal JwtTokenManager.
33
- *
34
- * @param options - Configuration options.
35
- * This should be an object containing these fields:
36
- * - url: (optional) the endpoint URL for the token service
37
- * - disableSslVerification: (optional) a flag that indicates whether verification of the token server's SSL certificate
38
- * should be disabled or not
39
- * - headers: (optional) a set of HTTP headers to be sent with each request to the token service
40
- */
41
- constructor(options) {
42
- super();
43
- this.disableSslVerification = Boolean(options.disableSslVerification);
44
- this.url = options.url;
45
- // default to empty object
46
- this.headers = options.headers || {};
47
- this.tokenManager = new JwtTokenManager(options);
48
- }
28
+ export class TokenRequestBasedAuthenticator extends TokenRequestBasedAuthenticatorImmutable {
49
29
  /**
50
30
  * Set the flag that indicates whether verification of the server's SSL
51
31
  * certificate should be disabled or not.
@@ -73,18 +53,4 @@ export class TokenRequestBasedAuthenticator extends Authenticator {
73
53
  this.headers = headers;
74
54
  this.tokenManager.setHeaders(this.headers);
75
55
  }
76
- /**
77
- * Adds bearer token information to "requestOptions". The bearer token information
78
- * will be set in the Authorization property of "requestOptions.headers" in the form:
79
- *
80
- * Authorization: Bearer \<bearer-token\>
81
- *
82
- * @param requestOptions - The request to augment with authentication information.
83
- */
84
- authenticate(requestOptions) {
85
- return this.tokenManager.getToken().then((token) => {
86
- const authHeader = { Authorization: `Bearer ${token}` };
87
- requestOptions.headers = extend(true, {}, requestOptions.headers, authHeader);
88
- });
89
- }
90
56
  }
@@ -65,6 +65,12 @@ export declare class ContainerTokenManager extends IamRequestBasedTokenManager {
65
65
  * @param iamProfileId - the ID of the IAM trusted profile
66
66
  */
67
67
  setIamProfileId(iamProfileId: string): void;
68
+ /**
69
+ * Returns the most recently stored refresh token.
70
+ *
71
+ * @returns the refresh token
72
+ */
73
+ getRefreshToken(): string;
68
74
  /**
69
75
  * Request an IAM token using a compute resource token.
70
76
  */
@@ -13,15 +13,6 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
- return new (P || (P = Promise))(function (resolve, reject) {
19
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
- step((generator = generator.apply(thisArg, _arguments || [])).next());
23
- });
24
- };
25
16
  import { atLeastOne } from '../utils/helpers';
26
17
  import { readCrTokenFile } from '../utils/file-reading-helpers';
27
18
  import { buildUserAgent } from '../../lib/build-user-agent';
@@ -95,25 +86,28 @@ export class ContainerTokenManager extends IamRequestBasedTokenManager {
95
86
  setIamProfileId(iamProfileId) {
96
87
  this.iamProfileId = iamProfileId;
97
88
  }
89
+ /**
90
+ * Returns the most recently stored refresh token.
91
+ *
92
+ * @returns the refresh token
93
+ */
94
+ getRefreshToken() {
95
+ return this.refreshToken;
96
+ }
98
97
  /**
99
98
  * Request an IAM token using a compute resource token.
100
99
  */
101
100
  requestToken() {
102
- const _super = Object.create(null, {
103
- requestToken: { get: () => super.requestToken }
104
- });
105
- return __awaiter(this, void 0, void 0, function* () {
106
- this.formData.cr_token = this.getCrToken();
107
- // these member variables can be reset, set them in the form data right
108
- // before making the request to ensure they're up to date
109
- if (this.iamProfileName) {
110
- this.formData.profile_name = this.iamProfileName;
111
- }
112
- if (this.iamProfileId) {
113
- this.formData.profile_id = this.iamProfileId;
114
- }
115
- return _super.requestToken.call(this);
116
- });
101
+ this.formData.cr_token = this.getCrToken();
102
+ // these member variables can be reset, set them in the form data right
103
+ // before making the request to ensure they're up to date
104
+ if (this.iamProfileName) {
105
+ this.formData.profile_name = this.iamProfileName;
106
+ }
107
+ if (this.iamProfileId) {
108
+ this.formData.profile_id = this.iamProfileId;
109
+ }
110
+ return super.requestToken();
117
111
  }
118
112
  /**
119
113
  * Retrieves the CR token from a file using this search order:
@@ -17,6 +17,7 @@ import extend from 'extend';
17
17
  import { validateInput } from '../utils/helpers';
18
18
  import { buildUserAgent } from '../../lib/build-user-agent';
19
19
  import { JwtTokenManager } from './jwt-token-manager';
20
+ import logger from '../../lib/logger';
20
21
  /**
21
22
  * Token Manager of CloudPak for data.
22
23
  *
@@ -76,6 +77,10 @@ export class Cp4dTokenManager extends JwtTokenManager {
76
77
  rejectUnauthorized: !this.disableSslVerification,
77
78
  },
78
79
  };
79
- return this.requestWrapperInstance.sendRequest(parameters);
80
+ logger.debug(`Invoking CP4D token service operation: ${parameters.options.url}`);
81
+ return this.requestWrapperInstance.sendRequest(parameters).then((response) => {
82
+ logger.debug('Returned from CP4D token service operation');
83
+ return response;
84
+ });
80
85
  }
81
86
  }
@@ -0,0 +1,101 @@
1
+ /**
2
+ * (C) Copyright IBM Corp. 2024.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /// <reference types="node" />
17
+ import { OutgoingHttpHeaders } from 'http';
18
+ import { IamRequestBasedTokenManager, IamRequestOptions } from './iam-request-based-token-manager';
19
+ /** Configuration options for IAM Assume token retrieval. */
20
+ interface Options extends IamRequestOptions {
21
+ apikey: string;
22
+ iamProfileId?: string;
23
+ iamProfileCrn?: string;
24
+ iamProfileName?: string;
25
+ iamAccountId?: string;
26
+ }
27
+ /**
28
+ * The IamAssumeTokenManager takes an api key, along with trusted profile information, and performs
29
+ * the necessary interactions with the IAM token service to obtain and store a suitable bearer token
30
+ * that "assumes" the identify of the trusted profile.
31
+ */
32
+ export declare class IamAssumeTokenManager extends IamRequestBasedTokenManager {
33
+ protected requiredOptions: string[];
34
+ private iamProfileId;
35
+ private iamProfileCrn;
36
+ private iamProfileName;
37
+ private iamAccountId;
38
+ private iamDelegate;
39
+ /**
40
+ *
41
+ * Create a new IamAssumeTokenManager instance.
42
+ *
43
+ * @param options - Configuration options.
44
+ * This should be an object containing these fields:
45
+ * - apikey: (required) the IAM api key
46
+ * - iamProfileId: (optional) the ID of the trusted profile to use
47
+ * - iamProfileCrn: (optional) the CRN of the trusted profile to use
48
+ * - iamProfileName: (optional) the name of the trusted profile to use (must be specified with iamAccountId)
49
+ * - iamAccountId: (optional) the ID of the account the trusted profile is in (must be specified with iamProfileName)
50
+ * - url: (optional) the endpoint URL for the IAM token service (default value: "https://iam.cloud.ibm.com")
51
+ * - disableSslVerification: (optional) a flag that indicates whether verification of the token server's SSL certificate
52
+ * should be disabled or not
53
+ * - headers: (optional) a set of HTTP headers to be sent with each request to the token service
54
+ * - clientId: (optional) the "clientId" and "clientSecret" fields are used to form a Basic
55
+ * Authorization header to be included in each request to the token service
56
+ * - clientSecret: (optional) the "clientId" and "clientSecret" fields are used to form a Basic
57
+ * Authorization header to be included in each request to the token service
58
+ * - scope: (optional) the "scope" parameter to use when fetching the bearer token from the token service
59
+ *
60
+ * @throws Error: the configuration options are not valid.
61
+ */
62
+ constructor(options: Options);
63
+ /**
64
+ * Request an IAM token using a standard access token and a trusted profile.
65
+ */
66
+ protected requestToken(): Promise<any>;
67
+ /**
68
+ * Extend this method from the parent class to erase the refresh token from
69
+ * the class - we do not want to expose it for IAM Assume authentication.
70
+ *
71
+ * @param tokenResponse - the response object from JWT service request
72
+ */
73
+ protected saveTokenInfo(tokenResponse: any): void;
74
+ /**
75
+ * Sets the IAM "scope" value.
76
+ * This value is sent as the "scope" form parameter in the IAM delegate request.
77
+ *
78
+ * @param scope - a space-separated string that contains one or more scope names
79
+ */
80
+ setScope(scope: string): void;
81
+ /**
82
+ * Sets the IAM "clientId" and "clientSecret" values for the IAM delegate.
83
+ *
84
+ * @param clientId - the client id.
85
+ * @param clientSecret - the client secret.
86
+ */
87
+ setClientIdAndSecret(clientId: string, clientSecret: string): void;
88
+ /**
89
+ * Sets the "disableSslVerification" property for the IAM delegate.
90
+ *
91
+ * @param value - the new value for the disableSslVerification property
92
+ */
93
+ setDisableSslVerification(value: boolean): void;
94
+ /**
95
+ * Sets the headers to be included in the IAM delegate's requests.
96
+ *
97
+ * @param headers - the set of headers to send with each request to the token server
98
+ */
99
+ setHeaders(headers: OutgoingHttpHeaders): void;
100
+ }
101
+ export {};
@@ -0,0 +1,164 @@
1
+ /**
2
+ * (C) Copyright IBM Corp. 2024.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ import { onlyOne, validateInput } from '../utils/helpers';
26
+ import { buildUserAgent } from '../../lib/build-user-agent';
27
+ import { IamRequestBasedTokenManager } from './iam-request-based-token-manager';
28
+ import { IamTokenManager } from './iam-token-manager';
29
+ /**
30
+ * The IamAssumeTokenManager takes an api key, along with trusted profile information, and performs
31
+ * the necessary interactions with the IAM token service to obtain and store a suitable bearer token
32
+ * that "assumes" the identify of the trusted profile.
33
+ */
34
+ export class IamAssumeTokenManager extends IamRequestBasedTokenManager {
35
+ /**
36
+ *
37
+ * Create a new IamAssumeTokenManager instance.
38
+ *
39
+ * @param options - Configuration options.
40
+ * This should be an object containing these fields:
41
+ * - apikey: (required) the IAM api key
42
+ * - iamProfileId: (optional) the ID of the trusted profile to use
43
+ * - iamProfileCrn: (optional) the CRN of the trusted profile to use
44
+ * - iamProfileName: (optional) the name of the trusted profile to use (must be specified with iamAccountId)
45
+ * - iamAccountId: (optional) the ID of the account the trusted profile is in (must be specified with iamProfileName)
46
+ * - url: (optional) the endpoint URL for the IAM token service (default value: "https://iam.cloud.ibm.com")
47
+ * - disableSslVerification: (optional) a flag that indicates whether verification of the token server's SSL certificate
48
+ * should be disabled or not
49
+ * - headers: (optional) a set of HTTP headers to be sent with each request to the token service
50
+ * - clientId: (optional) the "clientId" and "clientSecret" fields are used to form a Basic
51
+ * Authorization header to be included in each request to the token service
52
+ * - clientSecret: (optional) the "clientId" and "clientSecret" fields are used to form a Basic
53
+ * Authorization header to be included in each request to the token service
54
+ * - scope: (optional) the "scope" parameter to use when fetching the bearer token from the token service
55
+ *
56
+ * @throws Error: the configuration options are not valid.
57
+ */
58
+ constructor(options) {
59
+ super(options);
60
+ this.requiredOptions = ['apikey'];
61
+ // This just verifies that the API key is provided and is free of common issues.
62
+ validateInput(options, this.requiredOptions);
63
+ // This validates the assume-specific fields.
64
+ // Only one of the following three options may be specified.
65
+ if (!onlyOne(options.iamProfileId, options.iamProfileCrn, options.iamProfileName)) {
66
+ throw new Error('Exactly one of `iamProfileName`, `iamProfileCrn`, or `iamProfileId` must be specified.');
67
+ }
68
+ // `iamAccountId` may only be specified if `iamProfileName` is also specified.
69
+ if (Boolean(options.iamProfileName) !== Boolean(options.iamAccountId)) {
70
+ throw new Error('`iamProfileName` and `iamAccountId` must be provided together, or not at all.');
71
+ }
72
+ // Set class variables from options. If they are 'undefined' in options,
73
+ // they won't be changed, as they are 'undefined' to begin with.
74
+ this.iamProfileId = options.iamProfileId;
75
+ this.iamProfileCrn = options.iamProfileCrn;
76
+ this.iamProfileName = options.iamProfileName;
77
+ this.iamAccountId = options.iamAccountId;
78
+ this.iamDelegate = options.iamDelegate;
79
+ // Create an instance of the IamTokenManager, which will be used to obtain
80
+ // an IAM access token for use in the "assume" token exchange. Most option
81
+ // names are shared between these token manager, and extraneous options will
82
+ // be ignored, so we can pass the options structure to that constructor as-is.
83
+ this.iamDelegate = new IamTokenManager(options);
84
+ // These options are used by the delegate token manager
85
+ // but they are not supported by this token manager.
86
+ this.clientId = undefined;
87
+ this.clientSecret = undefined;
88
+ this.scope = undefined;
89
+ // Set the grant type and user agent for this flavor of authentication.
90
+ this.formData.grant_type = 'urn:ibm:params:oauth:grant-type:assume';
91
+ this.userAgent = buildUserAgent('iam-assume-authenticator');
92
+ }
93
+ /**
94
+ * Request an IAM token using a standard access token and a trusted profile.
95
+ */
96
+ requestToken() {
97
+ const _super = Object.create(null, {
98
+ requestToken: { get: () => super.requestToken }
99
+ });
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ // First, retrieve a standard IAM access token from the delegate and set it in the form data.
102
+ this.formData.access_token = yield this.iamDelegate.getToken();
103
+ if (this.iamProfileCrn) {
104
+ this.formData.profile_crn = this.iamProfileCrn;
105
+ }
106
+ else if (this.iamProfileId) {
107
+ this.formData.profile_id = this.iamProfileId;
108
+ }
109
+ else {
110
+ this.formData.profile_name = this.iamProfileName;
111
+ this.formData.account = this.iamAccountId;
112
+ }
113
+ return _super.requestToken.call(this);
114
+ });
115
+ }
116
+ /**
117
+ * Extend this method from the parent class to erase the refresh token from
118
+ * the class - we do not want to expose it for IAM Assume authentication.
119
+ *
120
+ * @param tokenResponse - the response object from JWT service request
121
+ */
122
+ saveTokenInfo(tokenResponse) {
123
+ super.saveTokenInfo(tokenResponse);
124
+ this.refreshToken = undefined;
125
+ }
126
+ // Override the inherited "setters". This token manager does not store these options
127
+ // but they can adjust properties on the stored IAM delegate.
128
+ /**
129
+ * Sets the IAM "scope" value.
130
+ * This value is sent as the "scope" form parameter in the IAM delegate request.
131
+ *
132
+ * @param scope - a space-separated string that contains one or more scope names
133
+ */
134
+ setScope(scope) {
135
+ this.iamDelegate.setScope(scope);
136
+ }
137
+ /**
138
+ * Sets the IAM "clientId" and "clientSecret" values for the IAM delegate.
139
+ *
140
+ * @param clientId - the client id.
141
+ * @param clientSecret - the client secret.
142
+ */
143
+ setClientIdAndSecret(clientId, clientSecret) {
144
+ this.iamDelegate.setClientIdAndSecret(clientId, clientSecret);
145
+ }
146
+ /**
147
+ * Sets the "disableSslVerification" property for the IAM delegate.
148
+ *
149
+ * @param value - the new value for the disableSslVerification property
150
+ */
151
+ setDisableSslVerification(value) {
152
+ super.setDisableSslVerification(value);
153
+ this.iamDelegate.setDisableSslVerification(value);
154
+ }
155
+ /**
156
+ * Sets the headers to be included in the IAM delegate's requests.
157
+ *
158
+ * @param headers - the set of headers to send with each request to the token server
159
+ */
160
+ setHeaders(headers) {
161
+ super.setHeaders(headers);
162
+ this.iamDelegate.setHeaders(headers);
163
+ }
164
+ }
@@ -28,9 +28,9 @@ export interface IamRequestOptions extends JwtTokenManagerOptions {
28
28
  * class be extended with specific implementations.
29
29
  */
30
30
  export declare class IamRequestBasedTokenManager extends JwtTokenManager {
31
- private clientId;
32
- private clientSecret;
33
- private scope;
31
+ protected clientId: string;
32
+ protected clientSecret: string;
33
+ protected scope: string;
34
34
  protected refreshToken: string;
35
35
  protected formData: any;
36
36
  /**
@@ -70,12 +70,6 @@ export declare class IamRequestBasedTokenManager extends JwtTokenManager {
70
70
  * @param clientSecret - the client secret.
71
71
  */
72
72
  setClientIdAndSecret(clientId: string, clientSecret: string): void;
73
- /**
74
- * Returns the most recently stored refresh token.
75
- *
76
- * @returns the refresh token
77
- */
78
- getRefreshToken(): string;
79
73
  /**
80
74
  * Extend this method from the parent class to extract the refresh token from
81
75
  * the request and save it.