@ibm-cloud/secrets-manager 0.0.4 → 0.1.1

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/auth/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * (C) Copyright IBM Corp. 2019.
2
+ * (C) Copyright IBM Corp. 2019, 2020.
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,4 +13,4 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- export { NoAuthAuthenticator, BasicAuthenticator, BearerTokenAuthenticator, IamAuthenticator, CloudPakForDataAuthenticator, IamTokenManager, Cp4dTokenManager, getAuthenticatorFromEnvironment, } from 'ibm-cloud-sdk-core';
16
+ export { NoAuthAuthenticator, BasicAuthenticator, BearerTokenAuthenticator, IamAuthenticator, CloudPakForDataAuthenticator, IamTokenManager, Cp4dTokenManager, getAuthenticatorFromEnvironment } from 'ibm-cloud-sdk-core';
package/auth/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * (C) Copyright IBM Corp. 2019.
3
+ * (C) Copyright IBM Corp. 2019, 2020.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
6
6
  * you may not use this file except in compliance with the License.
@@ -16,12 +16,12 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  var ibm_cloud_sdk_core_1 = require("ibm-cloud-sdk-core");
19
- exports.NoAuthAuthenticator = ibm_cloud_sdk_core_1.NoAuthAuthenticator;
20
- exports.BasicAuthenticator = ibm_cloud_sdk_core_1.BasicAuthenticator;
21
- exports.BearerTokenAuthenticator = ibm_cloud_sdk_core_1.BearerTokenAuthenticator;
22
- exports.IamAuthenticator = ibm_cloud_sdk_core_1.IamAuthenticator;
23
- exports.CloudPakForDataAuthenticator = ibm_cloud_sdk_core_1.CloudPakForDataAuthenticator;
24
- exports.IamTokenManager = ibm_cloud_sdk_core_1.IamTokenManager;
25
- exports.Cp4dTokenManager = ibm_cloud_sdk_core_1.Cp4dTokenManager;
26
- exports.getAuthenticatorFromEnvironment = ibm_cloud_sdk_core_1.getAuthenticatorFromEnvironment;
19
+ Object.defineProperty(exports, "NoAuthAuthenticator", { enumerable: true, get: function () { return ibm_cloud_sdk_core_1.NoAuthAuthenticator; } });
20
+ Object.defineProperty(exports, "BasicAuthenticator", { enumerable: true, get: function () { return ibm_cloud_sdk_core_1.BasicAuthenticator; } });
21
+ Object.defineProperty(exports, "BearerTokenAuthenticator", { enumerable: true, get: function () { return ibm_cloud_sdk_core_1.BearerTokenAuthenticator; } });
22
+ Object.defineProperty(exports, "IamAuthenticator", { enumerable: true, get: function () { return ibm_cloud_sdk_core_1.IamAuthenticator; } });
23
+ Object.defineProperty(exports, "CloudPakForDataAuthenticator", { enumerable: true, get: function () { return ibm_cloud_sdk_core_1.CloudPakForDataAuthenticator; } });
24
+ Object.defineProperty(exports, "IamTokenManager", { enumerable: true, get: function () { return ibm_cloud_sdk_core_1.IamTokenManager; } });
25
+ Object.defineProperty(exports, "Cp4dTokenManager", { enumerable: true, get: function () { return ibm_cloud_sdk_core_1.Cp4dTokenManager; } });
26
+ Object.defineProperty(exports, "getAuthenticatorFromEnvironment", { enumerable: true, get: function () { return ibm_cloud_sdk_core_1.getAuthenticatorFromEnvironment; } });
27
27
  //# sourceMappingURL=index.js.map
package/auth/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../auth/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AAEH,yDAS4B;AAR1B,mDAAA,mBAAmB,CAAA;AACnB,kDAAA,kBAAkB,CAAA;AAClB,wDAAA,wBAAwB,CAAA;AACxB,gDAAA,gBAAgB,CAAA;AAChB,4DAAA,4BAA4B,CAAA;AAC5B,+CAAA,eAAe,CAAA;AACf,gDAAA,gBAAgB,CAAA;AAChB,+DAAA,+BAA+B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../auth/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AAEH,yDAS4B;AAR1B,yHAAA,mBAAmB,OAAA;AACnB,wHAAA,kBAAkB,OAAA;AAClB,8HAAA,wBAAwB,OAAA;AACxB,sHAAA,gBAAgB,OAAA;AAChB,kIAAA,4BAA4B,OAAA;AAC5B,qHAAA,eAAe,OAAA;AACf,sHAAA,gBAAgB,OAAA;AAChB,qIAAA,+BAA+B,OAAA"}
package/lib/common.d.ts CHANGED
@@ -16,4 +16,7 @@
16
16
  export declare type SdkHeaders = {
17
17
  'User-Agent': string;
18
18
  };
19
+ /**
20
+ * Get the request headers to be sent in requests by the SDK.
21
+ */
19
22
  export declare function getSdkHeaders(serviceName: string, serviceVersion: string, operationId: string): SdkHeaders | {};
package/lib/common.js CHANGED
@@ -15,9 +15,13 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.getSdkHeaders = void 0;
18
19
  var os = require("os");
19
20
  // tslint:disable-next-line:no-var-requires
20
- var pkg = require('../../package.json');
21
+ var pkg = require('../package.json');
22
+ /**
23
+ * Get the request headers to be sent in requests by the SDK.
24
+ */
21
25
  function getSdkHeaders(serviceName, serviceVersion, operationId) {
22
26
  var sdkName = 'secrets-manager-nodejs-sdk';
23
27
  var sdkVersion = pkg.version;
@@ -25,7 +29,7 @@ function getSdkHeaders(serviceName, serviceVersion, operationId) {
25
29
  var osVersion = os.release();
26
30
  var nodeVersion = process.version;
27
31
  var headers = {
28
- 'User-Agent': sdkName + "/" + sdkVersion + " (lang=node.js; os.name=" + osName + " os.version=" + osVersion + " node.version=" + nodeVersion + ")",
32
+ 'User-Agent': sdkName + "/" + sdkVersion + " (lang=node.js; os.name=" + osName + " os.version=" + osVersion + " node.version=" + nodeVersion + ")"
29
33
  };
30
34
  return headers;
31
35
  }
package/lib/common.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../lib/common.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AAEH,uBAA0B;AAE1B,2CAA2C;AAC3C,IAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAM1C,SAAgB,aAAa,CAAC,WAAmB,EAAE,cAAsB,EAAE,WAAmB;IAC5F,IAAM,OAAO,GAAG,4BAA4B,CAAC;IAC7C,IAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;IAC/B,IAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC7B,IAAM,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/B,IAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAEpC,IAAM,OAAO,GAAG;QACd,YAAY,EAAK,OAAO,SAAI,UAAU,gCAA2B,MAAM,oBAAe,SAAS,sBAAiB,WAAW,MAAG;KAC/H,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAZD,sCAYC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../lib/common.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,uBAA0B;AAE1B,2CAA2C;AAC3C,IAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAMvC;;GAEG;AACH,SAAgB,aAAa,CAAC,WAAmB,EAAE,cAAsB,EAAE,WAAmB;IAC5F,IAAM,OAAO,GAAG,4BAA4B,CAAC;IAC7C,IAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;IAC/B,IAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC7B,IAAM,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/B,IAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAEpC,IAAM,OAAO,GAAG;QACd,YAAY,EAAK,OAAO,SAAI,UAAU,gCAA2B,MAAM,oBAAe,SAAS,sBAAiB,WAAW,MAAG;KAC/H,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAZD,sCAYC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibm-cloud/secrets-manager",
3
- "version": "0.0.4",
3
+ "version": "0.1.1",
4
4
  "description": "Client library for IBM Cloud Secrets Manager",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,51 +18,57 @@
18
18
  "tslint:check": "tslint -p . -c ./tslint.json",
19
19
  "lint": "npm run eslint:check && npm run tslint:check",
20
20
  "lint-fix": "npm run eslint:fix && npm run tslint:fix",
21
+ "build": "tsc && cp package.json dist/ && cp README.md dist/",
22
+ "postversion": "tsc-publish --no-checks --dry-run",
23
+ "publishDist": "npm run build && cd dist && npm publish --access public",
21
24
  "jest": "jest",
22
25
  "test": "npm run build && npm run lint && jest test/",
23
26
  "test-unit": "npm run build && jest test/unit/",
24
27
  "test-integration": "npm run build && jest test/integration",
28
+ "test-examples": "npm run build && jest examples/",
29
+ "test-travis": "jest --runInBand --testNamePattern='^((?!@slow).)*$' test/",
30
+ "test-unit-travis": "jest --runInBand test/unit/",
31
+ "test-integration-travis": "jest --runInBand --no-colors --testNamePattern='^((?!@slow).)*$' --json test/integration > test-output.log",
25
32
  "report-coverage": "codecov",
26
- "check-packages": "installed-check -e -d -v",
27
- "build": "tsc",
28
- "prepublishOnly": "npm run build",
29
- "postversion": "tsc-publish --no-checks --dry-run",
30
- "publishDist": "cp {package.json,readme.md} dist/ && cd dist && npm publish --access public"
33
+ "check-packages": "installed-check -e -d -v"
31
34
  },
32
35
  "license": "Apache-2.0",
33
36
  "engines": {
34
- "node": ">=12.0.0"
37
+ "node": ">=10.0.0"
35
38
  },
36
39
  "dependencies": {
37
40
  "@types/node": "^12.0.8",
38
41
  "extend": "^3.0.2",
39
- "ibm-cloud-sdk-core": "^2.0.3",
40
- "tsc-publish": "^0.5.2"
42
+ "ibm-cloud-sdk-core": "^2.8.0"
41
43
  },
42
44
  "devDependencies": {
43
- "axios": "^0.19.0",
44
- "codecov": "^3.7.1",
45
+ "@semantic-release/changelog": "5.0.1",
46
+ "@semantic-release/git": "9.0.0",
47
+ "axios": "^0.21.1",
48
+ "codecov": "^3.7.0",
49
+ "dotenv": "^8.2.0",
45
50
  "eslint": "^5.16.0",
46
51
  "eslint-config-google": "^0.12.0",
47
52
  "eslint-config-prettier": "^4.2.0",
48
53
  "eslint-plugin-node": "^9.0.0",
49
54
  "eslint-plugin-prettier": "^3.0.1",
50
55
  "installed-check": "^2.2.0",
51
- "jest": "^24.8.0",
56
+ "jest": "^25.4.0",
52
57
  "prettier": "^1.17.1",
53
- "semantic-release": "^15.13.25",
58
+ "tsc-publish": "^0.5.2",
54
59
  "tslint": "^5.16.0",
55
60
  "tslint-config-prettier": "^1.18.0",
56
61
  "tslint-eslint-rules": "^5.4.0",
57
62
  "typedoc": "^0.15.0",
58
- "typescript": "^3.4.5"
63
+ "typescript": "^3.8.3"
59
64
  },
60
65
  "jest": {
61
66
  "collectCoverage": true,
62
67
  "coverageDirectory": "./coverage/",
63
68
  "coveragePathIgnorePatterns": [
64
- "<rootDir>/test/"
69
+ "<rootDir>/test/",
70
+ "<rootDir>/examples/"
65
71
  ],
66
72
  "testEnvironment": "node"
67
73
  }
68
- }
74
+ }
package/readme.md CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  # IBM Cloud Secrets Manager Node.js SDK
4
4
 
5
- A Node.js client library to use the IBM Cloud® Secrets Manager APIs.
5
+ A Node.js client library to interact with
6
+ the [IBM Cloud® Secrets Manager APIs](https://cloud.ibm.com/apidocs/secrets-manager).
6
7
 
7
8
  <details>
8
9
  <summary>Table of Contents</summary>
@@ -12,18 +13,32 @@ A Node.js client library to use the IBM Cloud® Secrets Manager APIs.
12
13
  * [Installation](#installation)
13
14
  * [Authentication](#authentication)
14
15
  * [Using the SDK](#using-the-sdk)
15
- * [Documentation](#documentation)
16
16
  * [Tests](#tests)
17
+ * [Questions](#questions)
18
+ * [Issues](#issues)
19
+ * [Contributing](#contributing)
20
+ * [License](#license)
21
+
17
22
  </details>
18
23
 
19
24
  ## Overview
20
25
 
21
- The IBM Cloud Secrets Manager Node.js SDK allows developers to programmatically interact with IBM Cloud Secrets Manager.
26
+ The IBM Cloud Secrets Manager Node.js SDK allows developers to programmatically interact with the following IBM Cloud
27
+ services:
28
+
29
+ Service name | Import path
30
+ --- | ---
31
+ [Secrets Manager](https://cloud.ibm.com/apidocs/secrets-manager) | @ibm-cloud/secrets-manager/secrets-manager/v1
22
32
 
23
33
  ## Prerequisites
24
- - You need an [IBM Cloud account](https://cloud.ibm.com/registration).
25
34
 
26
- - **Node >=12**: This SDK is tested with Node versions 12 and up. It may work on previous versions but this is not officially supported.
35
+ - An [IBM Cloud account](https://cloud.ibm.com/registration).
36
+ - A [Secrets Manager service instance](https://cloud.ibm.com/catalog/services/secrets-manager).
37
+ - An [IBM Cloud API key](https://cloud.ibm.com/iam/apikeys) that allows the SDK to access your account.
38
+ - Node.js version 12 or above.
39
+
40
+ This SDK is tested with Node versions 12 and up. The SDK may work on previous versions, but this is not supported
41
+ officially.
27
42
 
28
43
  ## Installation
29
44
 
@@ -33,15 +48,20 @@ npm install @ibm-cloud/secrets-manager
33
48
 
34
49
  ## Authentication
35
50
 
36
- IBM Cloud Secrets Manager uses token-based Identity and Access Management (IAM) authentication.
51
+ Secrets Manager uses token-based Identity and Access Management (IAM) authentication.
37
52
 
38
- IAM authentication uses a service API key to get an access token that is passed with the call.
39
- Access tokens are valid for a limited amount of time and must be regenerated.
53
+ With IAM authentication, you supply an API key that is used to generate an access token. Then, the access token is
54
+ included in each API request to Secrets Manager. Access tokens are valid for a limited amount of time and must be
55
+ regenerated.
40
56
 
41
- Authentication is accomplished using dedicated Authenticators for each authentication scheme. Import authenticators from `@ibm-cloud/secrets-manager/auth`.
57
+ Authentication for this SDK is accomplished by
58
+ using [IAM authenticators](https://github.com/IBM/ibm-cloud-sdk-common/blob/master/README.md#authentication). Import
59
+ authenticators from `@ibm-cloud/secrets-manager/auth`.
42
60
 
43
61
  ### Examples
62
+
44
63
  #### Programmatic credentials
64
+
45
65
  ```js
46
66
  import { IamAuthenticator } from '@ibm-cloud/secrets-manager/auth';
47
67
 
@@ -51,6 +71,7 @@ const authenticator = new IamAuthenticator({
51
71
  ```
52
72
 
53
73
  #### External configuration
74
+
54
75
  ```js
55
76
  import { getAuthenticatorFromEnvironment } from '@ibm-cloud/secrets-manager/auth';
56
77
 
@@ -60,20 +81,25 @@ import { getAuthenticatorFromEnvironment } from '@ibm-cloud/secrets-manager/auth
60
81
  const iamAuthenticator = getAuthenticatorFromEnvironment('SECRETS_MANAGER_API');
61
82
  ```
62
83
 
63
- To learn more about the Authenticators and how to use them with your services, see [the detailed documentation](https://github.com/IBM/node-sdk-core/blob/master/AUTHENTICATION.md).
84
+ To learn more about IAM authenticators and how to use them in your Node.js application, see
85
+ the [IBM Node.js SDK Core documentation](https://github.com/IBM/node-sdk-core/blob/master/Authentication.md).
64
86
 
65
87
  ## Using the SDK
66
- ### Basic usage
67
88
 
68
- - All methods return a Promise that either resolves with the response from the service or rejects with an Error. The response contains the body, the headers, the status code, and the status text.
69
- If using async/await, use try/catch for handling errors.
89
+ ### Basic usage
70
90
 
71
- - Use the `serviceUrl` parameter to pass the URL of your Secrets Manager to `IbmCloudSecretsManagerApiV1`.
91
+ - All methods return a Promise that either resolves with the response from the service or rejects with an Error. The
92
+ response contains the body, the headers, the status code, and the status text. If using async/await, use try/catch for
93
+ handling errors.
94
+ - Use the `serviceUrl` parameter to set the endpoint URL that is specific to your Secrets Manager service instance. To
95
+ find your endpoint URL, you can copy it from the **Endpoints** page in the Secrets Manager UI.
72
96
 
73
97
  #### Examples
74
- Create an instance of the Secrets Manager API and then use it to create and retrieve a secret.
98
+
99
+ Construct a service client and use it to create and retrieve a secret from your Secrets Manager instance.
100
+
75
101
  ```js
76
- const IbmCloudSecretsManagerApiV1 = require('@ibm-cloud/secrets-manager/ibm-cloud-secrets-manager-api/v1');
102
+ const SecretsManager = require('@ibm-cloud/secrets-manager/secrets-manager/v1');
77
103
  const { IamAuthenticator } = require('@ibm-cloud/secrets-manager/auth');
78
104
 
79
105
 
@@ -84,14 +110,14 @@ async function secretsManagerSdkExample() {
84
110
  });
85
111
 
86
112
  // Create an instance of the SDK by providing an authentication mechanism and your Secrets Manager instance URL
87
- const secretsManagerApi = new IbmCloudSecretsManagerApiV1({
113
+ const secretsManager = new SecretsManager({
88
114
  authenticator,
89
115
  serviceUrl:
90
116
  'https://example-instance.us-south.secrets-manager.appdomain.cloud',
91
117
  });
92
118
 
93
119
  // Use the Secrets Manager API to create a secret
94
- let res = await secretsManagerApi.createSecret({
120
+ let res = await secretsManager.createSecret({
95
121
  secretType: 'username_password',
96
122
  'metadata': {
97
123
  'collection_type': 'application/vnd.ibm.secrets-manager.secret+json',
@@ -100,7 +126,7 @@ async function secretsManagerSdkExample() {
100
126
  'resources': [
101
127
  {
102
128
  'name': 'example-username-password-secret',
103
- 'description': 'text describing the secret',
129
+ 'description': 'Extended description for this secret.',
104
130
  'username': 'user123',
105
131
  'password': '123456789',
106
132
  'labels': ['label1', 'label2'],
@@ -115,12 +141,12 @@ async function secretsManagerSdkExample() {
115
141
  const secretId = res.result.resources[0].id;
116
142
 
117
143
  // Use the Secrets Manager API to get the secret using the secret ID
118
- res = await secretsManagerApi.getSecret({
144
+ res = await secretsManager.getSecret({
119
145
  secretType: 'username_password',
120
146
  id: secretId,
121
147
  });
122
148
 
123
- console.log('Get Secret:\n', JSON.stringify(res.result.resources, null, 2));
149
+ console.log('Get secret:\n', JSON.stringify(res.result.resources, null, 2));
124
150
  }
125
151
 
126
152
  secretsManagerSdkExample();
@@ -128,6 +154,7 @@ secretsManagerSdkExample();
128
154
  ```
129
155
 
130
156
  To delete a secret, specify the `secretType` and its `id`.
157
+
131
158
  ```js
132
159
  res = await secretsManagerApi.deleteSecret({
133
160
  secretType: 'username_password',
@@ -139,6 +166,7 @@ To delete a secret, specify the `secretType` and its `id`.
139
166
  ```
140
167
 
141
168
  Create a secret group, and then add a new secret to this group.
169
+
142
170
  ```js
143
171
  // Create a secret group
144
172
  const createGroupParams = {
@@ -163,7 +191,7 @@ Create a secret group, and then add a new secret to this group.
163
191
  {
164
192
  secret_group_id: secretGroupId,
165
193
  name: "Test secret",
166
- description: 'Secret used for testing',
194
+ description: 'Secret used for testing.',
167
195
  username: 'test_user',
168
196
  password: 'test_password',
169
197
  labels: ['label1'],
@@ -174,6 +202,7 @@ Create a secret group, and then add a new secret to this group.
174
202
  ```
175
203
 
176
204
  Create a rotation policy of one month for a secret.
205
+
177
206
  ```js
178
207
  let res = await ibmCloudSecretsManagerApiService.putPolicy({
179
208
  metadata: {
@@ -194,23 +223,46 @@ Create a rotation policy of one month for a secret.
194
223
  });
195
224
  ```
196
225
 
197
- ## Documentation
198
-
199
- For more information about Secrets Manager, check out the [Secrets Manager documentation](https://cloud.ibm.com/docs/secrets-manager) and [API reference](https://cloud.ibm.com/apidocs/secrets-manager).
226
+ For more information and IBM Cloud SDK usage examples for Node.js, see
227
+ the [IBM Cloud SDK Common documentation](https://github.com/IBM/ibm-cloud-sdk-common/blob/master/README.md)
200
228
 
201
229
  ## Tests
202
230
 
203
231
  This project includes unit tests `test/unit` and integration tests `test/integration`.
204
232
 
205
- The integration test are running against an actual instance of a Secrets Manager and require the following environment variables to be set:
233
+ The integration tests are run against an actual Secrets Manager instance and require the following environment variables
234
+ to be set:
235
+
206
236
  ```
207
237
  SECRETS_MANAGER_API_AUTH_TYPE=iam;
208
- SECRETS_MANAGER_API_APIKEY=<api key>
209
- SERVICE_URL=<url to a secrets manager instance>
238
+ SECRETS_MANAGER_API_APIKEY=<API_KEY>
239
+ SERVICE_URL=<SECRETS_MANAGER_ENDPOINT_URL>
210
240
  ```
211
241
 
212
- Running all the tests:
242
+ To run the tests:
243
+
213
244
  ```sh
214
245
  npm test
215
246
  ```
216
247
 
248
+ ## Questions
249
+
250
+ If you're having difficulties using this SDK, you can ask questions about this project by
251
+ using [Stack Overflow](https://stackoverflow.com/questions/tagged/ibm-cloud+secrets-manager). Be sure to include
252
+ the `ibm-cloud` and `secrets-manager` tags.
253
+
254
+ You can also check out the [Secrets Manager documentation](https://cloud.ibm.com/docs/secrets-manager)
255
+ and [API reference](https://cloud.ibm.com/apidocs/secrets-manager) for more information about the service.
256
+
257
+ ## Issues
258
+
259
+ If you encounter an issue with the project, you're welcome to submit
260
+ a [bug report](https://github.com/IBM/secrets-manager-nodejs-sdk/issues) to help us improve.
261
+
262
+ ## Contributing
263
+
264
+ For general contribution guidelines, see [CONTRIBUTING](CONTRIBUTING.md).
265
+
266
+ ## License
267
+
268
+ This SDK project is released under the Apache 2.0 license. The license's full text can be found in [LICENSE](LICENSE).