@rockcarver/frodo-lib 0.12.2-2 → 0.12.2-3
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/CHANGELOG.md +5 -1
- package/cjs/api/SecretsApi.js +79 -1
- package/cjs/api/SecretsApi.js.map +1 -1
- package/cjs/api/SecretsApi.test.js.map +1 -0
- package/cjs/index.js +5 -1
- package/cjs/index.js.map +1 -1
- package/cjs/ops/SecretsOps.js +4 -4
- package/cjs/ops/SecretsOps.js.map +1 -1
- package/cjs/ops/StartupOps.js +1 -1
- package/cjs/ops/StartupOps.js.map +1 -1
- package/esm/api/SecretsApi.mjs +76 -1
- package/esm/api/SecretsApi.test.mjs +283 -0
- package/esm/index.mjs +2 -1
- package/esm/ops/SecretsOps.mjs +5 -5
- package/esm/ops/StartupOps.mjs +1 -1
- package/package.json +1 -1
- package/types/api/SecretsApi.d.ts +64 -1
- package/types/api/SecretsApi.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/ops/SecretsOps.d.ts.map +1 -1
- package/types/ops/StartupOps.d.ts.map +1 -1
package/esm/api/SecretsApi.mjs
CHANGED
|
@@ -16,6 +16,11 @@ const getApiConfig = () => ({
|
|
|
16
16
|
path: `/environment/secrets`,
|
|
17
17
|
apiVersion
|
|
18
18
|
});
|
|
19
|
+
/**
|
|
20
|
+
* Get all secrets
|
|
21
|
+
* @returns {Promise<unknown[]>} a promise that resolves to an array of secrets
|
|
22
|
+
*/
|
|
23
|
+
|
|
19
24
|
|
|
20
25
|
export async function getSecrets() {
|
|
21
26
|
const urlString = util.format(secretsListURLTemplate, getTenantURL(storage.session.getTenant()));
|
|
@@ -24,8 +29,14 @@ export async function getSecrets() {
|
|
|
24
29
|
} = await generateESVApi(getApiConfig()).get(urlString, {
|
|
25
30
|
withCredentials: true
|
|
26
31
|
});
|
|
27
|
-
return data
|
|
32
|
+
return data;
|
|
28
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Get secret
|
|
36
|
+
* @param secretId secret id/name
|
|
37
|
+
* @returns {Promise<unknown>} a promise that resolves to a secret
|
|
38
|
+
*/
|
|
39
|
+
|
|
29
40
|
export async function getSecret(secretId) {
|
|
30
41
|
const urlString = util.format(secretURLTemplate, getTenantURL(storage.session.getTenant()), secretId);
|
|
31
42
|
const {
|
|
@@ -35,6 +46,16 @@ export async function getSecret(secretId) {
|
|
|
35
46
|
});
|
|
36
47
|
return data;
|
|
37
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Create secret
|
|
51
|
+
* @param {string} secretId secret id/name
|
|
52
|
+
* @param {string} value secret value
|
|
53
|
+
* @param {string} description secret description
|
|
54
|
+
* @param {string} encoding secret encoding (only `generic` is supported)
|
|
55
|
+
* @param {boolean} useInPlaceholders flag indicating if the secret can be used in placeholders
|
|
56
|
+
* @returns {Promise<unknown>} a promise that resolves to a secret
|
|
57
|
+
*/
|
|
58
|
+
|
|
38
59
|
export async function putSecret(secretId, value, description, encoding = 'generic', useInPlaceholders = true) {
|
|
39
60
|
if (encoding !== 'generic') throw new Error(`Unsupported encoding: ${encoding}`);
|
|
40
61
|
const secretData = {
|
|
@@ -51,6 +72,13 @@ export async function putSecret(secretId, value, description, encoding = 'generi
|
|
|
51
72
|
});
|
|
52
73
|
return data;
|
|
53
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Set secret description
|
|
77
|
+
* @param {string} secretId secret id/name
|
|
78
|
+
* @param {string} description secret description
|
|
79
|
+
* @returns {Promise<unknown>} a promise that resolves to a status object
|
|
80
|
+
*/
|
|
81
|
+
|
|
54
82
|
export async function setSecretDescription(secretId, description) {
|
|
55
83
|
const urlString = util.format(secretSetDescriptionURLTemplate, getTenantURL(storage.session.getTenant()), secretId);
|
|
56
84
|
const {
|
|
@@ -62,6 +90,12 @@ export async function setSecretDescription(secretId, description) {
|
|
|
62
90
|
});
|
|
63
91
|
return data;
|
|
64
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Delete secret
|
|
95
|
+
* @param {string} secretId secret id/name
|
|
96
|
+
* @returns {Promise<unknown>} a promise that resolves to a secret object
|
|
97
|
+
*/
|
|
98
|
+
|
|
65
99
|
export async function deleteSecret(secretId) {
|
|
66
100
|
const urlString = util.format(secretURLTemplate, getTenantURL(storage.session.getTenant()), secretId);
|
|
67
101
|
const {
|
|
@@ -71,6 +105,12 @@ export async function deleteSecret(secretId) {
|
|
|
71
105
|
});
|
|
72
106
|
return data;
|
|
73
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Get secret versions
|
|
110
|
+
* @param {string} secretId secret id/name
|
|
111
|
+
* @returns {Promise<unknown>} a promise that resolves to an array of secret versions
|
|
112
|
+
*/
|
|
113
|
+
|
|
74
114
|
export async function getSecretVersions(secretId) {
|
|
75
115
|
const urlString = util.format(secretListVersionsURLTemplate, getTenantURL(storage.session.getTenant()), secretId);
|
|
76
116
|
const {
|
|
@@ -80,6 +120,13 @@ export async function getSecretVersions(secretId) {
|
|
|
80
120
|
});
|
|
81
121
|
return data;
|
|
82
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Create new secret version
|
|
125
|
+
* @param {string} secretId secret id/name
|
|
126
|
+
* @param {string} value secret value
|
|
127
|
+
* @returns {Promise<unknown>} a promise that resolves to a version object
|
|
128
|
+
*/
|
|
129
|
+
|
|
83
130
|
export async function createNewVersionOfSecret(secretId, value) {
|
|
84
131
|
const urlString = util.format(secretCreateNewVersionURLTemplate, getTenantURL(storage.session.getTenant()), secretId);
|
|
85
132
|
const {
|
|
@@ -91,6 +138,13 @@ export async function createNewVersionOfSecret(secretId, value) {
|
|
|
91
138
|
});
|
|
92
139
|
return data;
|
|
93
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Get version of secret
|
|
143
|
+
* @param {string} secretId secret id/name
|
|
144
|
+
* @param {string} version secret version
|
|
145
|
+
* @returns {Promise<unknown>} a promise that resolves to a version object
|
|
146
|
+
*/
|
|
147
|
+
|
|
94
148
|
export async function getVersionOfSecret(secretId, version) {
|
|
95
149
|
const urlString = util.format(secretGetVersionURLTemplate, getTenantURL(storage.session.getTenant()), secretId, version);
|
|
96
150
|
const {
|
|
@@ -100,6 +154,20 @@ export async function getVersionOfSecret(secretId, version) {
|
|
|
100
154
|
});
|
|
101
155
|
return data;
|
|
102
156
|
}
|
|
157
|
+
export let VersionOfSecretStatus;
|
|
158
|
+
/**
|
|
159
|
+
* Update the status of a version of a secret
|
|
160
|
+
* @param {string} secretId secret id/name
|
|
161
|
+
* @param {string} version secret version
|
|
162
|
+
* @param {VersionOfSecretStatus} status status
|
|
163
|
+
* @returns {Promise<unknown>} a promise that resolves to a status object
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
(function (VersionOfSecretStatus) {
|
|
167
|
+
VersionOfSecretStatus["DISABLED"] = "DISABLED";
|
|
168
|
+
VersionOfSecretStatus["ENABLED"] = "ENABLED";
|
|
169
|
+
})(VersionOfSecretStatus || (VersionOfSecretStatus = {}));
|
|
170
|
+
|
|
103
171
|
export async function setStatusOfVersionOfSecret(secretId, version, status) {
|
|
104
172
|
const urlString = util.format(secretVersionStatusURLTemplate, getTenantURL(storage.session.getTenant()), secretId, version);
|
|
105
173
|
const {
|
|
@@ -111,6 +179,13 @@ export async function setStatusOfVersionOfSecret(secretId, version, status) {
|
|
|
111
179
|
});
|
|
112
180
|
return data;
|
|
113
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Delete version of secret
|
|
184
|
+
* @param {string} secretId secret id/name
|
|
185
|
+
* @param {string} version secret version
|
|
186
|
+
* @returns {Promise<unknown>} a promise that resolves to a version object
|
|
187
|
+
*/
|
|
188
|
+
|
|
114
189
|
export async function deleteVersionOfSecret(secretId, version) {
|
|
115
190
|
const urlString = util.format(secretGetVersionURLTemplate, getTenantURL(storage.session.getTenant()), secretId, version);
|
|
116
191
|
const {
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import MockAdapter from 'axios-mock-adapter';
|
|
3
|
+
import { SecretsRaw, state } from '../index';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
|
|
8
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
|
|
10
|
+
const mock = new MockAdapter(axios);
|
|
11
|
+
state.default.session.setTenant('https://openam-frodo-dev.forgeblocks.com/am');
|
|
12
|
+
state.default.session.setRealm('alpha');
|
|
13
|
+
state.default.session.setCookieName('cookieName');
|
|
14
|
+
state.default.session.setCookieValue('cookieValue');
|
|
15
|
+
describe('SecretsApi - getSecrets()', () => {
|
|
16
|
+
test('getSecrets() 1: Get all secrets - success', async () => {
|
|
17
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/getSecrets/secrets.json'), 'utf8'));
|
|
18
|
+
mock.onGet('https://openam-frodo-dev.forgeblocks.com/environment/secrets').reply(200, mockResponse);
|
|
19
|
+
const response = await SecretsRaw.getSecrets();
|
|
20
|
+
expect(response).toBeTruthy();
|
|
21
|
+
expect(response).toMatchObject(mockResponse);
|
|
22
|
+
});
|
|
23
|
+
test('getSecrets() 2: Get all secrets - error', async () => {
|
|
24
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/getSecrets/error.json'), 'utf8'));
|
|
25
|
+
mock.onGet('https://openam-frodo-dev.forgeblocks.com/environment/secrets').reply(500, mockResponse);
|
|
26
|
+
expect.assertions(4);
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
await SecretsRaw.getSecrets();
|
|
30
|
+
} catch (error) {
|
|
31
|
+
// console.dir(error);
|
|
32
|
+
expect(error).toBeTruthy();
|
|
33
|
+
expect(error.response.status).toBe(500);
|
|
34
|
+
expect(error.response.data.code).toBe(500);
|
|
35
|
+
expect(error.response.data.message).toBe('Server Error');
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('SecretsApi - getSecret()', () => {
|
|
40
|
+
test('getSecret() 1: Get existing secret: esv-volkerstestsecret1', async () => {
|
|
41
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/getSecret/esv-volkerstestsecret1.json'), 'utf8'));
|
|
42
|
+
mock.onGet('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1').reply(200, mockResponse);
|
|
43
|
+
const response = await SecretsRaw.getSecret('esv-volkerstestsecret1');
|
|
44
|
+
expect(response).toBeTruthy();
|
|
45
|
+
expect(response).toMatchObject(mockResponse);
|
|
46
|
+
});
|
|
47
|
+
test('getSecret() 2: Get non-existing secret: esv-does-not-exist', async () => {
|
|
48
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/getSecret/esv-does-not-exist.json'), 'utf8'));
|
|
49
|
+
mock.onGet('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-does-not-exist').reply(404, mockResponse);
|
|
50
|
+
expect.assertions(4);
|
|
51
|
+
|
|
52
|
+
try {
|
|
53
|
+
await SecretsRaw.getSecret('esv-does-not-exist');
|
|
54
|
+
} catch (error) {
|
|
55
|
+
// console.dir(error);
|
|
56
|
+
expect(error).toBeTruthy();
|
|
57
|
+
expect(error.response.status).toBe(404);
|
|
58
|
+
expect(error.response.data.code).toBe(404);
|
|
59
|
+
expect(error.response.data.message).toBe('The secret does not exist or does not have a version');
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe('SecretsApi - putSecret()', () => {
|
|
64
|
+
test('putSecret() 1: Create secret: esv-volkerstestsecret1 - success', async () => {
|
|
65
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/putSecret/esv-volkerstestsecret1.json'), 'utf8'));
|
|
66
|
+
mock.onPut('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1').reply(200, mockResponse);
|
|
67
|
+
const response = await SecretsRaw.putSecret('esv-volkerstestsecret1', "Volker's Test Secret Value", "Volker's Test Secret Description", 'generic', true);
|
|
68
|
+
expect(response).toBeTruthy();
|
|
69
|
+
expect(response).toMatchObject(mockResponse);
|
|
70
|
+
});
|
|
71
|
+
test('putSecret() 2: Create secret: esv-volkerstestsecret1 - error', async () => {
|
|
72
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/putSecret/error.json'), 'utf8'));
|
|
73
|
+
mock.onPut('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1').reply(500, mockResponse);
|
|
74
|
+
expect.assertions(4);
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
await SecretsRaw.putSecret('esv-volkerstestsecret1', "Volker's Test Secret Value", "Volker's Test Secret Description", 'generic', true);
|
|
78
|
+
} catch (error) {
|
|
79
|
+
// console.dir(error);
|
|
80
|
+
expect(error).toBeTruthy();
|
|
81
|
+
expect(error.response.status).toBe(500);
|
|
82
|
+
expect(error.response.data.code).toBe(500);
|
|
83
|
+
expect(error.response.data.message).toBe('Server Error');
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('SecretsApi - setSecretDescription()', () => {
|
|
88
|
+
test('setSecretDescription() 1: Set secret description: esv-volkerstestsecret1 - success', async () => {
|
|
89
|
+
const mockResponse = '';
|
|
90
|
+
mock.onPost('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1?_action=setDescription').reply(200, mockResponse);
|
|
91
|
+
const response = await SecretsRaw.setSecretDescription('esv-volkerstestsecret1', "Volker's Updated Test Secret Description");
|
|
92
|
+
expect(response).toBe('');
|
|
93
|
+
});
|
|
94
|
+
test('setSecretDescription() 2: Set secret description: esv-volkerstestsecret1 - error', async () => {
|
|
95
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/setSecretDescription/error.json'), 'utf8'));
|
|
96
|
+
mock.onPost('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1?_action=setDescription').reply(500, mockResponse);
|
|
97
|
+
expect.assertions(4);
|
|
98
|
+
|
|
99
|
+
try {
|
|
100
|
+
await SecretsRaw.setSecretDescription('esv-volkerstestsecret1', "Volker's Updated Test Secret Description");
|
|
101
|
+
} catch (error) {
|
|
102
|
+
// console.dir(error);
|
|
103
|
+
expect(error).toBeTruthy();
|
|
104
|
+
expect(error.response.status).toBe(500);
|
|
105
|
+
expect(error.response.data.code).toBe(500);
|
|
106
|
+
expect(error.response.data.message).toBe('Server Error');
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
describe('SecretsApi - deleteSecret()', () => {
|
|
111
|
+
test('deleteSecret() 1: Delete secret: esv-volkerstestsecret1 - success', async () => {
|
|
112
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/deleteSecret/esv-volkerstestsecret1.json'), 'utf8'));
|
|
113
|
+
mock.onDelete('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1').reply(200, mockResponse);
|
|
114
|
+
const response = await SecretsRaw.deleteSecret('esv-volkerstestsecret1');
|
|
115
|
+
expect(response).toBeTruthy();
|
|
116
|
+
expect(response).toMatchObject(mockResponse);
|
|
117
|
+
});
|
|
118
|
+
test('deleteSecret() 2: Delete secret: esv-volkerstestsecret1 - error', async () => {
|
|
119
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/deleteSecret/error.json'), 'utf8'));
|
|
120
|
+
mock.onDelete('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1').reply(500, mockResponse);
|
|
121
|
+
expect.assertions(4);
|
|
122
|
+
|
|
123
|
+
try {
|
|
124
|
+
await SecretsRaw.deleteSecret('esv-volkerstestsecret1');
|
|
125
|
+
} catch (error) {
|
|
126
|
+
// console.dir(error);
|
|
127
|
+
expect(error).toBeTruthy();
|
|
128
|
+
expect(error.response.status).toBe(500);
|
|
129
|
+
expect(error.response.data.code).toBe(500);
|
|
130
|
+
expect(error.response.data.message).toBe('Server Error');
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
describe('SecretsApi - getSecretVersions()', () => {
|
|
135
|
+
test('getSecretVersions() 1: Get versions of existing secret: esv-volkerstestsecret1', async () => {
|
|
136
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/getSecretVersions/esv-volkerstestsecret1.json'), 'utf8'));
|
|
137
|
+
mock.onGet('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1/versions').reply(200, mockResponse);
|
|
138
|
+
const response = await SecretsRaw.getSecretVersions('esv-volkerstestsecret1');
|
|
139
|
+
expect(response).toBeTruthy();
|
|
140
|
+
expect(response).toMatchObject(mockResponse);
|
|
141
|
+
});
|
|
142
|
+
test('getSecretVersions() 2: Get versions of non-existing secret: esv-does-not-exist', async () => {
|
|
143
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/getSecretVersions/esv-does-not-exist.json'), 'utf8'));
|
|
144
|
+
mock.onGet('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-does-not-exist/versions').reply(404, mockResponse);
|
|
145
|
+
expect.assertions(4);
|
|
146
|
+
|
|
147
|
+
try {
|
|
148
|
+
await SecretsRaw.getSecretVersions('esv-does-not-exist');
|
|
149
|
+
} catch (error) {
|
|
150
|
+
// console.dir(error);
|
|
151
|
+
expect(error).toBeTruthy();
|
|
152
|
+
expect(error.response.status).toBe(404);
|
|
153
|
+
expect(error.response.data.code).toBe(404);
|
|
154
|
+
expect(error.response.data.message).toBe('The secret does not exist or does not have a version');
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe('SecretsApi - createNewVersionOfSecret()', () => {
|
|
159
|
+
test('createNewVersionOfSecret() 1: Create new version of existing secret: esv-volkerstestsecret1 - success', async () => {
|
|
160
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/createNewVersionOfSecret/esv-volkerstestsecret1.json'), 'utf8'));
|
|
161
|
+
mock.onPost('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1/versions?_action=create').reply(200, mockResponse);
|
|
162
|
+
const response = await SecretsRaw.createNewVersionOfSecret('esv-volkerstestsecret1', "Volker's Test Secret Value");
|
|
163
|
+
expect(response).toBeTruthy();
|
|
164
|
+
expect(response).toMatchObject(mockResponse);
|
|
165
|
+
});
|
|
166
|
+
test('createNewVersionOfSecret() 2: Create new version of existing secret: esv-volkerstestsecret1 - error', async () => {
|
|
167
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/createNewVersionOfSecret/error.json'), 'utf8'));
|
|
168
|
+
mock.onPost('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1/versions?_action=create').reply(500, mockResponse);
|
|
169
|
+
expect.assertions(4);
|
|
170
|
+
|
|
171
|
+
try {
|
|
172
|
+
await SecretsRaw.createNewVersionOfSecret('esv-volkerstestsecret1', "Volker's Test Secret Value");
|
|
173
|
+
} catch (error) {
|
|
174
|
+
// console.dir(error);
|
|
175
|
+
expect(error).toBeTruthy();
|
|
176
|
+
expect(error.response.status).toBe(500);
|
|
177
|
+
expect(error.response.data.code).toBe(500);
|
|
178
|
+
expect(error.response.data.message).toBe('Server Error');
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
test('createNewVersionOfSecret() 3: Create new version of non-existing secret: esv-does-not-exist - error', async () => {
|
|
182
|
+
const mockResponse = fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/createNewVersionOfSecret/esv-does-not-exist.txt'), 'utf8');
|
|
183
|
+
mock.onPost('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1/versions?_action=create').reply(500, mockResponse);
|
|
184
|
+
expect.assertions(3);
|
|
185
|
+
|
|
186
|
+
try {
|
|
187
|
+
await SecretsRaw.createNewVersionOfSecret('esv-volkerstestsecret1', "Volker's Test Secret Value");
|
|
188
|
+
} catch (error) {
|
|
189
|
+
// console.dir(error);
|
|
190
|
+
expect(error).toBeTruthy();
|
|
191
|
+
expect(error.response.status).toBe(500);
|
|
192
|
+
expect(error.response.data).toBe(mockResponse);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
describe('SecretsApi - getVersionOfSecret()', () => {
|
|
197
|
+
test('getVersionOfSecret() 1: Get version 2 of existing secret: esv-volkerstestsecret1', async () => {
|
|
198
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/getVersionOfSecret/esv-volkerstestsecret1_v2.json'), 'utf8'));
|
|
199
|
+
mock.onGet('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1/versions/2').reply(200, mockResponse);
|
|
200
|
+
const response = await SecretsRaw.getVersionOfSecret('esv-volkerstestsecret1', '2');
|
|
201
|
+
expect(response).toBeTruthy();
|
|
202
|
+
expect(response).toMatchObject(mockResponse);
|
|
203
|
+
});
|
|
204
|
+
test('getVersionOfSecret() 2: Get version 2 of non-existing secret: esv-does-not-exist', async () => {
|
|
205
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/getVersionOfSecret/esv-does-not-exist_v2.json'), 'utf8'));
|
|
206
|
+
mock.onGet('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-does-not-exist/versions/2').reply(500, mockResponse);
|
|
207
|
+
expect.assertions(4);
|
|
208
|
+
|
|
209
|
+
try {
|
|
210
|
+
await SecretsRaw.getVersionOfSecret('esv-does-not-exist', '2');
|
|
211
|
+
} catch (error) {
|
|
212
|
+
// console.dir(error);
|
|
213
|
+
expect(error).toBeTruthy();
|
|
214
|
+
expect(error.response.status).toBe(500);
|
|
215
|
+
expect(error.response.data.code).toBe(500);
|
|
216
|
+
expect(error.response.data.message).toBe('Failed to update secret version');
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
describe('SecretsApi - setStatusOfVersionOfSecret()', () => {
|
|
221
|
+
test('setStatusOfVersionOfSecret() 1: Disable version 2 of existing secret: esv-volkerstestsecret1 - success', async () => {
|
|
222
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/setStatusOfVersionOfSecret/esv-volkerstestsecret1_v2_DISABLED.json'), 'utf8'));
|
|
223
|
+
mock.onPost('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1/versions/2?_action=changestatus').reply(200, mockResponse);
|
|
224
|
+
const response = await SecretsRaw.setStatusOfVersionOfSecret('esv-volkerstestsecret1', '2', SecretsRaw.VersionOfSecretStatus.DISABLED);
|
|
225
|
+
expect(response).toBeTruthy();
|
|
226
|
+
expect(response).toMatchObject(mockResponse);
|
|
227
|
+
});
|
|
228
|
+
test('setStatusOfVersionOfSecret() 2: Disable version 2 of existing secret: esv-volkerstestsecret1 - error', async () => {
|
|
229
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/setStatusOfVersionOfSecret/error.json'), 'utf8'));
|
|
230
|
+
mock.onPost('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1/versions/2?_action=changestatus').reply(500, mockResponse);
|
|
231
|
+
expect.assertions(4);
|
|
232
|
+
|
|
233
|
+
try {
|
|
234
|
+
await SecretsRaw.setStatusOfVersionOfSecret('esv-volkerstestsecret1', '2', SecretsRaw.VersionOfSecretStatus.DISABLED);
|
|
235
|
+
} catch (error) {
|
|
236
|
+
// console.dir(error);
|
|
237
|
+
expect(error).toBeTruthy();
|
|
238
|
+
expect(error.response.status).toBe(500);
|
|
239
|
+
expect(error.response.data.code).toBe(500);
|
|
240
|
+
expect(error.response.data.message).toBe('Server Error');
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
test('setStatusOfVersionOfSecret() 3: Disable version 2 of non-existing secret: esv-does-not-exist - error', async () => {
|
|
244
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/setStatusOfVersionOfSecret/esv-does-not-exist_v2_DISABLED.json'), 'utf8'));
|
|
245
|
+
mock.onPost('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-does-not-exist/versions/2?_action=changestatus').reply(404, mockResponse);
|
|
246
|
+
expect.assertions(4);
|
|
247
|
+
|
|
248
|
+
try {
|
|
249
|
+
await SecretsRaw.setStatusOfVersionOfSecret('esv-does-not-exist', '2', SecretsRaw.VersionOfSecretStatus.DISABLED);
|
|
250
|
+
} catch (error) {
|
|
251
|
+
// console.dir(error);
|
|
252
|
+
expect(error).toBeTruthy();
|
|
253
|
+
expect(error.response.status).toBe(404);
|
|
254
|
+
expect(error.response.data.code).toBe(404);
|
|
255
|
+
expect(error.response.data.message).toBe('The secret does not exist or does not have a version');
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
describe('SecretsApi - deleteVersionOfSecret()', () => {
|
|
260
|
+
test('deleteVersionOfSecret() 1: Delete version 2 of secret: esv-volkerstestsecret1 - success', async () => {
|
|
261
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/deleteVersionOfSecret/esv-volkerstestsecret1_v2.json'), 'utf8'));
|
|
262
|
+
mock.onDelete('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1/versions/2').reply(200, mockResponse);
|
|
263
|
+
const response = await SecretsRaw.deleteVersionOfSecret('esv-volkerstestsecret1', '2');
|
|
264
|
+
expect(response).toBeTruthy();
|
|
265
|
+
expect(response).toMatchObject(mockResponse);
|
|
266
|
+
});
|
|
267
|
+
test('deleteVersionOfSecret() 2: Delete version 2 of secret: esv-volkerstestsecret1 - error', async () => {
|
|
268
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../test/mocks/SecretsApi/deleteVersionOfSecret/error.json'), 'utf8'));
|
|
269
|
+
mock.onDelete('https://openam-frodo-dev.forgeblocks.com/environment/secrets/esv-volkerstestsecret1/versions/2').reply(500, mockResponse);
|
|
270
|
+
expect.assertions(4);
|
|
271
|
+
|
|
272
|
+
try {
|
|
273
|
+
await SecretsRaw.deleteVersionOfSecret('esv-volkerstestsecret1', '2');
|
|
274
|
+
} catch (error) {
|
|
275
|
+
// console.dir(error);
|
|
276
|
+
expect(error).toBeTruthy();
|
|
277
|
+
expect(error.response.status).toBe(500);
|
|
278
|
+
expect(error.response.data.code).toBe(500);
|
|
279
|
+
expect(error.response.data.message).toBe('Server Error');
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
//# sourceMappingURL=SecretsApi.test.js.map
|
package/esm/index.mjs
CHANGED
|
@@ -11,7 +11,8 @@ export function getVersion() {
|
|
|
11
11
|
|
|
12
12
|
export * as NodeRaw from './api/NodeApi';
|
|
13
13
|
export * as TreeRaw from './api/TreeApi';
|
|
14
|
-
export * as StartupRaw from './api/StartupApi';
|
|
14
|
+
export * as StartupRaw from './api/StartupApi';
|
|
15
|
+
export * as SecretsRaw from './api/SecretsApi'; // Ops Layer
|
|
15
16
|
|
|
16
17
|
export * as Admin from './ops/AdminOps';
|
|
17
18
|
export * as Authenticate from './ops/AuthenticateOps';
|
package/esm/ops/SecretsOps.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createKeyValueTable, createProgressIndicator, createTable, printMessage, stopProgressIndicator, updateProgressIndicator } from './utils/Console';
|
|
2
|
-
import { createNewVersionOfSecret, deleteSecret, deleteVersionOfSecret, getSecret, getSecrets, getSecretVersions, putSecret, setSecretDescription, setStatusOfVersionOfSecret } from '../api/SecretsApi';
|
|
2
|
+
import { createNewVersionOfSecret, deleteSecret, deleteVersionOfSecret, getSecret, getSecrets, getSecretVersions, putSecret, setSecretDescription, setStatusOfVersionOfSecret, VersionOfSecretStatus } from '../api/SecretsApi';
|
|
3
3
|
import wordwrap from './utils/Wordwrap';
|
|
4
4
|
import { resolveUserName } from './ManagedObjectOps';
|
|
5
5
|
/**
|
|
@@ -11,7 +11,7 @@ export async function listSecrets(long) {
|
|
|
11
11
|
let secrets = [];
|
|
12
12
|
|
|
13
13
|
try {
|
|
14
|
-
secrets = await getSecrets();
|
|
14
|
+
secrets = (await getSecrets()).results;
|
|
15
15
|
} catch (error) {
|
|
16
16
|
printMessage(`${error.message}`, 'error');
|
|
17
17
|
printMessage(error.response.data, 'error');
|
|
@@ -101,7 +101,7 @@ export async function deleteSecretCmd(secretId) {
|
|
|
101
101
|
|
|
102
102
|
export async function deleteSecretsCmd() {
|
|
103
103
|
try {
|
|
104
|
-
const secrets = await getSecrets();
|
|
104
|
+
const secrets = (await getSecrets()).results;
|
|
105
105
|
createProgressIndicator(secrets.length, `Deleting secrets...`);
|
|
106
106
|
|
|
107
107
|
for (const secret of secrets) {
|
|
@@ -202,7 +202,7 @@ export async function activateVersionOfSecret(secretId, version) {
|
|
|
202
202
|
createProgressIndicator(undefined, `Activating version ${version} of secret ${secretId}...`, 'indeterminate');
|
|
203
203
|
|
|
204
204
|
try {
|
|
205
|
-
await setStatusOfVersionOfSecret(secretId, version,
|
|
205
|
+
await setStatusOfVersionOfSecret(secretId, version, VersionOfSecretStatus.ENABLED);
|
|
206
206
|
stopProgressIndicator(`Activated version ${version} of secret ${secretId}`, 'success');
|
|
207
207
|
} catch (error) {
|
|
208
208
|
stopProgressIndicator(`Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
|
|
@@ -218,7 +218,7 @@ export async function deactivateVersionOfSecret(secretId, version) {
|
|
|
218
218
|
createProgressIndicator(undefined, `Deactivating version ${version} of secret ${secretId}...`, 'indeterminate');
|
|
219
219
|
|
|
220
220
|
try {
|
|
221
|
-
await setStatusOfVersionOfSecret(secretId, version,
|
|
221
|
+
await setStatusOfVersionOfSecret(secretId, version, VersionOfSecretStatus.DISABLED);
|
|
222
222
|
stopProgressIndicator(`Deactivated version ${version} of secret ${secretId}`, 'success');
|
|
223
223
|
} catch (error) {
|
|
224
224
|
stopProgressIndicator(`Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
|
package/esm/ops/StartupOps.mjs
CHANGED
|
@@ -20,7 +20,7 @@ export async function checkForUpdates() {
|
|
|
20
20
|
createProgressIndicator(undefined, `Checking for updates to apply...`, 'indeterminate');
|
|
21
21
|
|
|
22
22
|
try {
|
|
23
|
-
updates.secrets = (await getSecrets()).filter(secret => !secret.loaded);
|
|
23
|
+
updates.secrets = (await getSecrets()).results.filter(secret => !secret.loaded);
|
|
24
24
|
updates.variables = (await getVariables()).filter(variable => !variable.loaded);
|
|
25
25
|
} catch (error) {
|
|
26
26
|
stopProgressIndicator(`Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
|
package/package.json
CHANGED
|
@@ -1,10 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get all secrets
|
|
3
|
+
* @returns {Promise<unknown[]>} a promise that resolves to an array of secrets
|
|
4
|
+
*/
|
|
1
5
|
export declare function getSecrets(): Promise<any>;
|
|
6
|
+
/**
|
|
7
|
+
* Get secret
|
|
8
|
+
* @param secretId secret id/name
|
|
9
|
+
* @returns {Promise<unknown>} a promise that resolves to a secret
|
|
10
|
+
*/
|
|
2
11
|
export declare function getSecret(secretId: any): Promise<any>;
|
|
12
|
+
/**
|
|
13
|
+
* Create secret
|
|
14
|
+
* @param {string} secretId secret id/name
|
|
15
|
+
* @param {string} value secret value
|
|
16
|
+
* @param {string} description secret description
|
|
17
|
+
* @param {string} encoding secret encoding (only `generic` is supported)
|
|
18
|
+
* @param {boolean} useInPlaceholders flag indicating if the secret can be used in placeholders
|
|
19
|
+
* @returns {Promise<unknown>} a promise that resolves to a secret
|
|
20
|
+
*/
|
|
3
21
|
export declare function putSecret(secretId: any, value: any, description: any, encoding?: string, useInPlaceholders?: boolean): Promise<any>;
|
|
22
|
+
/**
|
|
23
|
+
* Set secret description
|
|
24
|
+
* @param {string} secretId secret id/name
|
|
25
|
+
* @param {string} description secret description
|
|
26
|
+
* @returns {Promise<unknown>} a promise that resolves to a status object
|
|
27
|
+
*/
|
|
4
28
|
export declare function setSecretDescription(secretId: any, description: any): Promise<any>;
|
|
29
|
+
/**
|
|
30
|
+
* Delete secret
|
|
31
|
+
* @param {string} secretId secret id/name
|
|
32
|
+
* @returns {Promise<unknown>} a promise that resolves to a secret object
|
|
33
|
+
*/
|
|
5
34
|
export declare function deleteSecret(secretId: any): Promise<any>;
|
|
35
|
+
/**
|
|
36
|
+
* Get secret versions
|
|
37
|
+
* @param {string} secretId secret id/name
|
|
38
|
+
* @returns {Promise<unknown>} a promise that resolves to an array of secret versions
|
|
39
|
+
*/
|
|
6
40
|
export declare function getSecretVersions(secretId: any): Promise<any>;
|
|
41
|
+
/**
|
|
42
|
+
* Create new secret version
|
|
43
|
+
* @param {string} secretId secret id/name
|
|
44
|
+
* @param {string} value secret value
|
|
45
|
+
* @returns {Promise<unknown>} a promise that resolves to a version object
|
|
46
|
+
*/
|
|
7
47
|
export declare function createNewVersionOfSecret(secretId: any, value: any): Promise<any>;
|
|
48
|
+
/**
|
|
49
|
+
* Get version of secret
|
|
50
|
+
* @param {string} secretId secret id/name
|
|
51
|
+
* @param {string} version secret version
|
|
52
|
+
* @returns {Promise<unknown>} a promise that resolves to a version object
|
|
53
|
+
*/
|
|
8
54
|
export declare function getVersionOfSecret(secretId: any, version: any): Promise<any>;
|
|
9
|
-
export declare
|
|
55
|
+
export declare enum VersionOfSecretStatus {
|
|
56
|
+
DISABLED = "DISABLED",
|
|
57
|
+
ENABLED = "ENABLED"
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Update the status of a version of a secret
|
|
61
|
+
* @param {string} secretId secret id/name
|
|
62
|
+
* @param {string} version secret version
|
|
63
|
+
* @param {VersionOfSecretStatus} status status
|
|
64
|
+
* @returns {Promise<unknown>} a promise that resolves to a status object
|
|
65
|
+
*/
|
|
66
|
+
export declare function setStatusOfVersionOfSecret(secretId: string, version: string, status: VersionOfSecretStatus): Promise<any>;
|
|
67
|
+
/**
|
|
68
|
+
* Delete version of secret
|
|
69
|
+
* @param {string} secretId secret id/name
|
|
70
|
+
* @param {string} version secret version
|
|
71
|
+
* @returns {Promise<unknown>} a promise that resolves to a version object
|
|
72
|
+
*/
|
|
10
73
|
export declare function deleteVersionOfSecret(secretId: any, version: any): Promise<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/SecretsApi.ts"],"names":[],"mappings":"AAoBA,wBAAsB,UAAU,iBAS/B;AAED,wBAAsB,SAAS,CAAC,QAAQ,KAAA,gBAUvC;AAED,wBAAsB,SAAS,CAC7B,QAAQ,KAAA,EACR,KAAK,KAAA,EACL,WAAW,KAAA,EACX,QAAQ,SAAY,EACpB,iBAAiB,UAAO,gBAuBzB;AAED,wBAAsB,oBAAoB,CAAC,QAAQ,KAAA,EAAE,WAAW,KAAA,gBAY/D;AAED,wBAAsB,YAAY,CAAC,QAAQ,KAAA,gBAU1C;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,KAAA,gBAU/C;AAED,wBAAsB,wBAAwB,CAAC,QAAQ,KAAA,EAAE,KAAK,KAAA,gBAY7D;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAA,gBAWzD;AAED,wBAAsB,0BAA0B,
|
|
1
|
+
{"version":3,"sources":["../src/api/SecretsApi.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,wBAAsB,UAAU,iBAS/B;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,QAAQ,KAAA,gBAUvC;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,KAAA,EACR,KAAK,KAAA,EACL,WAAW,KAAA,EACX,QAAQ,SAAY,EACpB,iBAAiB,UAAO,gBAuBzB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,KAAA,EAAE,WAAW,KAAA,gBAY/D;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,QAAQ,KAAA,gBAU1C;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,KAAA,gBAU/C;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,QAAQ,KAAA,EAAE,KAAK,KAAA,gBAY7D;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAA,gBAWzD;AAED,oBAAY,qBAAqB;IAC/B,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,qBAAqB,gBAc9B;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAA,gBAW5D","file":"SecretsApi.d.ts","sourcesContent":["import util from 'util';\nimport { encode } from './utils/Base64';\nimport { getTenantURL } from './utils/ApiUtils';\nimport { generateESVApi } from './BaseApi';\nimport storage from '../storage/SessionStorage';\n\nconst secretsListURLTemplate = '%s/environment/secrets';\nconst secretListVersionsURLTemplate = '%s/environment/secrets/%s/versions';\nconst secretCreateNewVersionURLTemplate = `${secretListVersionsURLTemplate}?_action=create`;\nconst secretGetVersionURLTemplate = `${secretListVersionsURLTemplate}/%s`;\nconst secretVersionStatusURLTemplate = `${secretGetVersionURLTemplate}?_action=changestatus`;\nconst secretURLTemplate = '%s/environment/secrets/%s';\nconst secretSetDescriptionURLTemplate = `${secretURLTemplate}?_action=setDescription`;\n\nconst apiVersion = 'protocol=1.0,resource=1.0';\nconst getApiConfig = () => ({\n path: `/environment/secrets`,\n apiVersion,\n});\n\n/**\n * Get all secrets\n * @returns {Promise<unknown[]>} a promise that resolves to an array of secrets\n */\nexport async function getSecrets() {\n const urlString = util.format(\n secretsListURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n const { data } = await generateESVApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n return data;\n}\n\n/**\n * Get secret\n * @param secretId secret id/name\n * @returns {Promise<unknown>} a promise that resolves to a secret\n */\nexport async function getSecret(secretId) {\n const urlString = util.format(\n secretURLTemplate,\n getTenantURL(storage.session.getTenant()),\n secretId\n );\n const { data } = await generateESVApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n return data;\n}\n\n/**\n * Create secret\n * @param {string} secretId secret id/name\n * @param {string} value secret value\n * @param {string} description secret description\n * @param {string} encoding secret encoding (only `generic` is supported)\n * @param {boolean} useInPlaceholders flag indicating if the secret can be used in placeholders\n * @returns {Promise<unknown>} a promise that resolves to a secret\n */\nexport async function putSecret(\n secretId,\n value,\n description,\n encoding = 'generic',\n useInPlaceholders = true\n) {\n if (encoding !== 'generic')\n throw new Error(`Unsupported encoding: ${encoding}`);\n const secretData = {\n valueBase64: encode(value),\n description,\n encoding,\n useInPlaceholders,\n };\n const urlString = util.format(\n secretURLTemplate,\n getTenantURL(storage.session.getTenant()),\n secretId\n );\n const { data } = await generateESVApi(getApiConfig()).put(\n urlString,\n secretData,\n {\n withCredentials: true,\n }\n );\n return data;\n}\n\n/**\n * Set secret description\n * @param {string} secretId secret id/name\n * @param {string} description secret description\n * @returns {Promise<unknown>} a promise that resolves to a status object\n */\nexport async function setSecretDescription(secretId, description) {\n const urlString = util.format(\n secretSetDescriptionURLTemplate,\n getTenantURL(storage.session.getTenant()),\n secretId\n );\n const { data } = await generateESVApi(getApiConfig()).post(\n urlString,\n { description },\n { withCredentials: true }\n );\n return data;\n}\n\n/**\n * Delete secret\n * @param {string} secretId secret id/name\n * @returns {Promise<unknown>} a promise that resolves to a secret object\n */\nexport async function deleteSecret(secretId) {\n const urlString = util.format(\n secretURLTemplate,\n getTenantURL(storage.session.getTenant()),\n secretId\n );\n const { data } = await generateESVApi(getApiConfig()).delete(urlString, {\n withCredentials: true,\n });\n return data;\n}\n\n/**\n * Get secret versions\n * @param {string} secretId secret id/name\n * @returns {Promise<unknown>} a promise that resolves to an array of secret versions\n */\nexport async function getSecretVersions(secretId) {\n const urlString = util.format(\n secretListVersionsURLTemplate,\n getTenantURL(storage.session.getTenant()),\n secretId\n );\n const { data } = await generateESVApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n return data;\n}\n\n/**\n * Create new secret version\n * @param {string} secretId secret id/name\n * @param {string} value secret value\n * @returns {Promise<unknown>} a promise that resolves to a version object\n */\nexport async function createNewVersionOfSecret(secretId, value) {\n const urlString = util.format(\n secretCreateNewVersionURLTemplate,\n getTenantURL(storage.session.getTenant()),\n secretId\n );\n const { data } = await generateESVApi(getApiConfig()).post(\n urlString,\n { valueBase64: encode(value) },\n { withCredentials: true }\n );\n return data;\n}\n\n/**\n * Get version of secret\n * @param {string} secretId secret id/name\n * @param {string} version secret version\n * @returns {Promise<unknown>} a promise that resolves to a version object\n */\nexport async function getVersionOfSecret(secretId, version) {\n const urlString = util.format(\n secretGetVersionURLTemplate,\n getTenantURL(storage.session.getTenant()),\n secretId,\n version\n );\n const { data } = await generateESVApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n return data;\n}\n\nexport enum VersionOfSecretStatus {\n DISABLED = 'DISABLED',\n ENABLED = 'ENABLED',\n}\n\n/**\n * Update the status of a version of a secret\n * @param {string} secretId secret id/name\n * @param {string} version secret version\n * @param {VersionOfSecretStatus} status status\n * @returns {Promise<unknown>} a promise that resolves to a status object\n */\nexport async function setStatusOfVersionOfSecret(\n secretId: string,\n version: string,\n status: VersionOfSecretStatus\n) {\n const urlString = util.format(\n secretVersionStatusURLTemplate,\n getTenantURL(storage.session.getTenant()),\n secretId,\n version\n );\n const { data } = await generateESVApi(getApiConfig()).post(\n urlString,\n { status },\n { withCredentials: true }\n );\n return data;\n}\n\n/**\n * Delete version of secret\n * @param {string} secretId secret id/name\n * @param {string} version secret version\n * @returns {Promise<unknown>} a promise that resolves to a version object\n */\nexport async function deleteVersionOfSecret(secretId, version) {\n const urlString = util.format(\n secretGetVersionURLTemplate,\n getTenantURL(storage.session.getTenant()),\n secretId,\n version\n );\n const { data } = await generateESVApi(getApiConfig()).delete(urlString, {\n withCredentials: true,\n });\n return data;\n}\n"]}
|
package/types/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export declare function getVersion(): string;
|
|
|
2
2
|
export * as NodeRaw from './api/NodeApi';
|
|
3
3
|
export * as TreeRaw from './api/TreeApi';
|
|
4
4
|
export * as StartupRaw from './api/StartupApi';
|
|
5
|
+
export * as SecretsRaw from './api/SecretsApi';
|
|
5
6
|
export * as Admin from './ops/AdminOps';
|
|
6
7
|
export * as Authenticate from './ops/AuthenticateOps';
|
|
7
8
|
export * as CirclesOfTrust from './ops/CirclesOfTrustOps';
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAUA,wBAAgB,UAAU,WAEzB;AAGD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,iBAAiB,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAG9C,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAIlD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC","file":"index.d.ts","sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst pkg = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf8')\n);\n\nexport function getVersion() {\n return `v${pkg.version}`;\n}\n\n// Api Layer\nexport * as NodeRaw from './api/NodeApi';\nexport * as TreeRaw from './api/TreeApi';\nexport * as StartupRaw from './api/StartupApi';\n\n// Ops Layer\nexport * as Admin from './ops/AdminOps';\nexport * as Authenticate from './ops/AuthenticateOps';\nexport * as CirclesOfTrust from './ops/CirclesOfTrustOps';\nexport * as ConnectionProfile from './ops/ConnectionProfileOps';\nexport * as EmailTemplate from './ops/EmailTemplateOps';\nexport * as Idm from './ops/IdmOps';\nexport * as Idp from './ops/IdmOps';\nexport * as Journey from './ops/JourneyOps';\nexport * as Log from './ops/LogOps';\nexport * as ManagedObject from './ops/ManagedObjectOps';\nexport * as OAuth2Client from './ops/OAuth2ClientOps';\nexport * as Organization from './ops/OrganizationOps';\nexport * as Realm from './ops/RealmOps';\nexport * as Saml from './ops/SamlOps';\nexport * as Script from './ops/ScriptOps';\nexport * as Secrets from './ops/SecretsOps';\nexport * as Startup from './ops/StartupOps';\nexport * as Theme from './ops/ThemeOps';\nexport * as Variables from './ops/VariablesOps';\n// TODO: revisit if there are better ways\nexport * as Utils from './ops/utils/OpsUtils';\n// TODO: reconsider the aproach to pass in state from client\n// lib should be stateless, an aplication should own its state\nexport * as state from './storage/SessionStorage';\n// TODO: need to figure out if this is the right approach or if we should even\n// use a public oauth2/oidc library. might be ok for now since there is only\n// one place where the cli needs to execute an oauth flow.\nexport * as OAuth2OIDCApi from './api/OAuth2OIDCApi';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAUA,wBAAgB,UAAU,WAEzB;AAGD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,iBAAiB,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAG9C,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAIlD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC","file":"index.d.ts","sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst pkg = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf8')\n);\n\nexport function getVersion() {\n return `v${pkg.version}`;\n}\n\n// Api Layer\nexport * as NodeRaw from './api/NodeApi';\nexport * as TreeRaw from './api/TreeApi';\nexport * as StartupRaw from './api/StartupApi';\nexport * as SecretsRaw from './api/SecretsApi';\n\n// Ops Layer\nexport * as Admin from './ops/AdminOps';\nexport * as Authenticate from './ops/AuthenticateOps';\nexport * as CirclesOfTrust from './ops/CirclesOfTrustOps';\nexport * as ConnectionProfile from './ops/ConnectionProfileOps';\nexport * as EmailTemplate from './ops/EmailTemplateOps';\nexport * as Idm from './ops/IdmOps';\nexport * as Idp from './ops/IdmOps';\nexport * as Journey from './ops/JourneyOps';\nexport * as Log from './ops/LogOps';\nexport * as ManagedObject from './ops/ManagedObjectOps';\nexport * as OAuth2Client from './ops/OAuth2ClientOps';\nexport * as Organization from './ops/OrganizationOps';\nexport * as Realm from './ops/RealmOps';\nexport * as Saml from './ops/SamlOps';\nexport * as Script from './ops/ScriptOps';\nexport * as Secrets from './ops/SecretsOps';\nexport * as Startup from './ops/StartupOps';\nexport * as Theme from './ops/ThemeOps';\nexport * as Variables from './ops/VariablesOps';\n// TODO: revisit if there are better ways\nexport * as Utils from './ops/utils/OpsUtils';\n// TODO: reconsider the aproach to pass in state from client\n// lib should be stateless, an aplication should own its state\nexport * as state from './storage/SessionStorage';\n// TODO: need to figure out if this is the right approach or if we should even\n// use a public oauth2/oidc library. might be ok for now since there is only\n// one place where the cli needs to execute an oauth flow.\nexport * as OAuth2OIDCApi from './api/OAuth2OIDCApi';\n"]}
|