@salesforce/core 3.30.14 → 3.31.7
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/LICENSE.txt +11 -11
- package/README.md +222 -227
- package/lib/config/aliasesConfig.d.ts +12 -12
- package/lib/config/aliasesConfig.js +27 -27
- package/lib/config/authInfoConfig.d.ts +19 -19
- package/lib/config/authInfoConfig.js +34 -34
- package/lib/config/config.d.ts +311 -311
- package/lib/config/config.js +574 -574
- package/lib/config/configAggregator.d.ts +232 -232
- package/lib/config/configAggregator.js +379 -379
- package/lib/config/configFile.d.ts +199 -199
- package/lib/config/configFile.js +340 -340
- package/lib/config/configGroup.d.ts +141 -141
- package/lib/config/configGroup.js +224 -224
- package/lib/config/configStore.d.ts +241 -241
- package/lib/config/configStore.js +352 -352
- package/lib/config/envVars.d.ts +101 -101
- package/lib/config/envVars.js +456 -456
- package/lib/config/orgUsersConfig.d.ts +31 -31
- package/lib/config/orgUsersConfig.js +41 -41
- package/lib/config/sandboxOrgConfig.d.ts +37 -37
- package/lib/config/sandboxOrgConfig.js +50 -50
- package/lib/config/sandboxProcessCache.d.ts +16 -16
- package/lib/config/sandboxProcessCache.js +37 -37
- package/lib/config/tokensConfig.d.ts +10 -10
- package/lib/config/tokensConfig.js +28 -28
- package/lib/config/ttlConfig.d.ts +34 -34
- package/lib/config/ttlConfig.js +54 -54
- package/lib/crypto/crypto.d.ts +54 -54
- package/lib/crypto/crypto.js +220 -220
- package/lib/crypto/keyChain.d.ts +8 -8
- package/lib/crypto/keyChain.js +61 -61
- package/lib/crypto/keyChainImpl.d.ts +116 -116
- package/lib/crypto/keyChainImpl.js +486 -486
- package/lib/crypto/secureBuffer.d.ts +46 -46
- package/lib/crypto/secureBuffer.js +82 -82
- package/lib/deviceOauthService.d.ts +71 -71
- package/lib/deviceOauthService.js +191 -191
- package/lib/exported.d.ts +38 -38
- package/lib/exported.js +118 -118
- package/lib/global.d.ts +70 -70
- package/lib/global.js +109 -109
- package/lib/lifecycleEvents.d.ts +93 -93
- package/lib/lifecycleEvents.js +188 -188
- package/lib/logger.d.ts +381 -381
- package/lib/logger.js +734 -734
- package/lib/messages.d.ts +291 -291
- package/lib/messages.js +543 -543
- package/lib/org/authInfo.d.ts +344 -344
- package/lib/org/authInfo.js +892 -892
- package/lib/org/authRemover.d.ts +88 -88
- package/lib/org/authRemover.js +182 -182
- package/lib/org/connection.d.ts +197 -197
- package/lib/org/connection.js +395 -395
- package/lib/org/index.d.ts +6 -6
- package/lib/org/index.js +28 -28
- package/lib/org/org.d.ts +558 -558
- package/lib/org/org.js +1267 -1267
- package/lib/org/orgConfigProperties.d.ts +69 -69
- package/lib/org/orgConfigProperties.js +136 -136
- package/lib/org/permissionSetAssignment.d.ts +35 -35
- package/lib/org/permissionSetAssignment.js +125 -125
- package/lib/org/scratchOrgCache.d.ts +20 -20
- package/lib/org/scratchOrgCache.js +32 -32
- package/lib/org/scratchOrgCreate.d.ts +54 -54
- package/lib/org/scratchOrgCreate.js +216 -216
- package/lib/org/scratchOrgErrorCodes.d.ts +10 -10
- package/lib/org/scratchOrgErrorCodes.js +88 -88
- package/lib/org/scratchOrgFeatureDeprecation.d.ts +26 -26
- package/lib/org/scratchOrgFeatureDeprecation.js +109 -109
- package/lib/org/scratchOrgInfoApi.d.ts +68 -68
- package/lib/org/scratchOrgInfoApi.js +413 -413
- package/lib/org/scratchOrgInfoGenerator.d.ts +64 -64
- package/lib/org/scratchOrgInfoGenerator.js +241 -241
- package/lib/org/scratchOrgLifecycleEvents.d.ts +10 -10
- package/lib/org/scratchOrgLifecycleEvents.js +40 -40
- package/lib/org/scratchOrgSettingsGenerator.d.ts +78 -78
- package/lib/org/scratchOrgSettingsGenerator.js +276 -276
- package/lib/org/scratchOrgTypes.d.ts +43 -43
- package/lib/org/scratchOrgTypes.js +8 -8
- package/lib/org/user.d.ts +187 -187
- package/lib/org/user.js +448 -448
- package/lib/schema/printer.d.ts +79 -79
- package/lib/schema/printer.js +260 -260
- package/lib/schema/validator.d.ts +70 -70
- package/lib/schema/validator.js +169 -169
- package/lib/sfError.d.ts +73 -73
- package/lib/sfError.js +136 -136
- package/lib/sfProject.d.ts +357 -357
- package/lib/sfProject.js +671 -671
- package/lib/stateAggregator/accessors/aliasAccessor.d.ts +98 -98
- package/lib/stateAggregator/accessors/aliasAccessor.js +145 -145
- package/lib/stateAggregator/accessors/orgAccessor.d.ts +101 -101
- package/lib/stateAggregator/accessors/orgAccessor.js +240 -240
- package/lib/stateAggregator/accessors/sandboxAccessor.d.ts +8 -8
- package/lib/stateAggregator/accessors/sandboxAccessor.js +27 -27
- package/lib/stateAggregator/accessors/tokenAccessor.d.ts +63 -63
- package/lib/stateAggregator/accessors/tokenAccessor.js +79 -79
- package/lib/stateAggregator/index.d.ts +4 -4
- package/lib/stateAggregator/index.js +26 -26
- package/lib/stateAggregator/stateAggregator.d.ts +25 -25
- package/lib/stateAggregator/stateAggregator.js +45 -45
- package/lib/status/myDomainResolver.d.ts +66 -66
- package/lib/status/myDomainResolver.js +124 -124
- package/lib/status/pollingClient.d.ts +85 -85
- package/lib/status/pollingClient.js +115 -115
- package/lib/status/streamingClient.d.ts +244 -244
- package/lib/status/streamingClient.js +436 -436
- package/lib/status/types.d.ts +89 -89
- package/lib/status/types.js +17 -17
- package/lib/testSetup.d.ts +553 -530
- package/lib/testSetup.js +871 -727
- package/lib/util/cache.d.ts +11 -11
- package/lib/util/cache.js +69 -69
- package/lib/util/checkLightningDomain.d.ts +1 -1
- package/lib/util/checkLightningDomain.js +28 -28
- package/lib/util/directoryWriter.d.ts +12 -12
- package/lib/util/directoryWriter.js +53 -53
- package/lib/util/getJwtAudienceUrl.d.ts +4 -4
- package/lib/util/getJwtAudienceUrl.js +18 -18
- package/lib/util/internal.d.ts +58 -58
- package/lib/util/internal.js +118 -118
- package/lib/util/jsonXmlTools.d.ts +14 -14
- package/lib/util/jsonXmlTools.js +38 -38
- package/lib/util/mapKeys.d.ts +14 -14
- package/lib/util/mapKeys.js +51 -51
- package/lib/util/sfdc.d.ts +52 -52
- package/lib/util/sfdc.js +85 -85
- package/lib/util/sfdcUrl.d.ts +72 -72
- package/lib/util/sfdcUrl.js +215 -215
- package/lib/util/structuredWriter.d.ts +9 -9
- package/lib/util/structuredWriter.js +2 -2
- package/lib/util/zipWriter.d.ts +16 -16
- package/lib/util/zipWriter.js +67 -67
- package/lib/webOAuthServer.d.ts +156 -156
- package/lib/webOAuthServer.js +388 -388
- package/messages/auth.md +37 -37
- package/messages/config.md +156 -156
- package/messages/connection.md +30 -30
- package/messages/core.json +20 -20
- package/messages/core.md +67 -67
- package/messages/encryption.md +85 -85
- package/messages/envVars.md +303 -303
- package/messages/org.md +63 -63
- package/messages/permissionSetAssignment.md +31 -31
- package/messages/scratchOrgCreate.md +23 -23
- package/messages/scratchOrgErrorCodes.md +115 -115
- package/messages/scratchOrgFeatureDeprecation.md +11 -11
- package/messages/scratchOrgInfoApi.md +15 -15
- package/messages/scratchOrgInfoGenerator.md +23 -23
- package/messages/streaming.md +23 -23
- package/messages/user.md +35 -35
- package/package.json +97 -97
|
@@ -1,241 +1,241 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (c) 2021, salesforce.com, inc.
|
|
4
|
-
* All rights reserved.
|
|
5
|
-
* Licensed under the BSD 3-Clause license.
|
|
6
|
-
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.OrgAccessor = exports.BaseOrgAccessor = void 0;
|
|
10
|
-
const fs = require("fs");
|
|
11
|
-
const path = require("path");
|
|
12
|
-
const kit_1 = require("@salesforce/kit");
|
|
13
|
-
const authInfoConfig_1 = require("../../config/authInfoConfig");
|
|
14
|
-
const global_1 = require("../../global");
|
|
15
|
-
const logger_1 = require("../../logger");
|
|
16
|
-
const messages_1 = require("../../messages");
|
|
17
|
-
function chunk(array, chunkSize) {
|
|
18
|
-
const final = [];
|
|
19
|
-
for (let i = 0, len = array.length; i < len; i += chunkSize)
|
|
20
|
-
final.push(array.slice(i, i + chunkSize));
|
|
21
|
-
return final;
|
|
22
|
-
}
|
|
23
|
-
class BaseOrgAccessor extends kit_1.AsyncOptionalCreatable {
|
|
24
|
-
constructor() {
|
|
25
|
-
super(...arguments);
|
|
26
|
-
this.configs = new Map();
|
|
27
|
-
this.contents = new Map();
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Read the auth file for the given username. Once the file has been read, it can be re-accessed with the `get` method.
|
|
31
|
-
*
|
|
32
|
-
* @param username username to read
|
|
33
|
-
* @param decrypt if true, decrypt encrypted values
|
|
34
|
-
* @param throwOnNotFound throw if file is not found for username
|
|
35
|
-
*/
|
|
36
|
-
async read(username, decrypt = false, throwOnNotFound = true) {
|
|
37
|
-
try {
|
|
38
|
-
const config = await this.initAuthFile(username, throwOnNotFound);
|
|
39
|
-
this.configs.set(username, config);
|
|
40
|
-
return this.get(username, decrypt);
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Read all the auth files under the global state directory
|
|
48
|
-
*
|
|
49
|
-
* @param decrypt if true, decrypt encrypted values
|
|
50
|
-
*/
|
|
51
|
-
async readAll(decrypt = false) {
|
|
52
|
-
const fileChunks = chunk(await this.getAllFiles(), 50);
|
|
53
|
-
for (const fileChunk of fileChunks) {
|
|
54
|
-
const promises = fileChunk.map(async (f) => {
|
|
55
|
-
const username = this.parseUsername(f);
|
|
56
|
-
const config = await this.initAuthFile(username);
|
|
57
|
-
this.configs.set(username, config);
|
|
58
|
-
});
|
|
59
|
-
// eslint-disable-next-line no-await-in-loop
|
|
60
|
-
await Promise.all(promises);
|
|
61
|
-
}
|
|
62
|
-
return this.getAll(decrypt);
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Return the contents of the username's auth file from cache.
|
|
66
|
-
* The `read` or `readAll` methods must be called first in order to populate the cache.
|
|
67
|
-
* If throwOnNotFound is not true, an empty object {} is returned if the org is not found.
|
|
68
|
-
*
|
|
69
|
-
* @param username username to get
|
|
70
|
-
* @param decrypt if true, decrypt encrypted values
|
|
71
|
-
* @param throwOnNotFound if true, throw if the auth file does not already exist in the cache
|
|
72
|
-
*/
|
|
73
|
-
get(username, decrypt = false, throwOnNotFound = false) {
|
|
74
|
-
const config = this.configs.get(username);
|
|
75
|
-
if (throwOnNotFound && config?.keys().length === 0) {
|
|
76
|
-
messages_1.Messages.importMessagesDirectory(__dirname);
|
|
77
|
-
const messages = messages_1.Messages.load('@salesforce/core', 'core', ['namedOrgNotFound']);
|
|
78
|
-
throw messages.createError('namedOrgNotFound', [username]);
|
|
79
|
-
}
|
|
80
|
-
if (config) {
|
|
81
|
-
this.contents.set(username, config.getContents(decrypt));
|
|
82
|
-
}
|
|
83
|
-
return this.contents.get(username);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Return the contents of all the auth files from cache. The `read` or `readAll` methods must be called first in order to populate the cache.
|
|
87
|
-
*
|
|
88
|
-
* @param decrypt if true, decrypt encrypted values
|
|
89
|
-
* @returns
|
|
90
|
-
*/
|
|
91
|
-
getAll(decrypt = false) {
|
|
92
|
-
return [...this.configs.keys()].map((username) => this.get(username, decrypt)).filter((org) => !(0, kit_1.isEmpty)(org));
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Returns true if the username has been cached.
|
|
96
|
-
*
|
|
97
|
-
* @param username
|
|
98
|
-
*/
|
|
99
|
-
has(username) {
|
|
100
|
-
return this.contents.has(username);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Returns true if there is an auth file for the given username. The `read` or `readAll` methods must be called first in order to populate the cache.
|
|
104
|
-
*
|
|
105
|
-
* @param username
|
|
106
|
-
*/
|
|
107
|
-
async exists(username) {
|
|
108
|
-
const config = this.configs.get(username);
|
|
109
|
-
return config ? config.exists() : false;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Return the file stats for a given userame's auth file.
|
|
113
|
-
*
|
|
114
|
-
* @param username
|
|
115
|
-
*/
|
|
116
|
-
async stat(username) {
|
|
117
|
-
const config = this.configs.get(username);
|
|
118
|
-
return config ? config.stat() : null;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Returns true if there is an auth file for the given username
|
|
122
|
-
*
|
|
123
|
-
* @param username
|
|
124
|
-
*/
|
|
125
|
-
async hasFile(username) {
|
|
126
|
-
try {
|
|
127
|
-
await fs.promises.access(this.parseFilename(username));
|
|
128
|
-
return true;
|
|
129
|
-
}
|
|
130
|
-
catch {
|
|
131
|
-
this.logger.debug(`No auth file found for ${username}`);
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Return all auth files under the global state directory.
|
|
137
|
-
*/
|
|
138
|
-
async list() {
|
|
139
|
-
return this.getAllFiles();
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Set the contents for a given username.
|
|
143
|
-
*
|
|
144
|
-
* @param username
|
|
145
|
-
* @param org
|
|
146
|
-
*/
|
|
147
|
-
set(username, org) {
|
|
148
|
-
const config = this.configs.get(username);
|
|
149
|
-
if (config) {
|
|
150
|
-
config.setContentsFromObject(org);
|
|
151
|
-
const contents = config.getContents();
|
|
152
|
-
contents.username ?? (contents.username = username);
|
|
153
|
-
this.contents.set(username, contents);
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
157
|
-
// @ts-ignore
|
|
158
|
-
org.username ?? (org.username = username);
|
|
159
|
-
this.contents.set(username, org);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Update the contents for a given username.
|
|
164
|
-
*
|
|
165
|
-
* @param username
|
|
166
|
-
* @param org
|
|
167
|
-
*/
|
|
168
|
-
update(username, org) {
|
|
169
|
-
const existing = this.get(username) || {};
|
|
170
|
-
const merged = Object.assign({}, existing, org);
|
|
171
|
-
return this.set(username, merged);
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Delete the auth file for a given username.
|
|
175
|
-
*
|
|
176
|
-
* @param username
|
|
177
|
-
*/
|
|
178
|
-
async remove(username) {
|
|
179
|
-
await this.configs.get(username)?.unlink();
|
|
180
|
-
this.configs.delete(username);
|
|
181
|
-
this.contents.delete(username);
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Write the contents of the auth file for a given username.
|
|
185
|
-
*
|
|
186
|
-
* @param username
|
|
187
|
-
*/
|
|
188
|
-
async write(username) {
|
|
189
|
-
const config = this.configs.get(username);
|
|
190
|
-
if (config) {
|
|
191
|
-
return (await config.write());
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
const contents = this.contents.get(username) ?? {};
|
|
195
|
-
await this.read(username, false, false);
|
|
196
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
197
|
-
const readConfig = this.configs.get(username);
|
|
198
|
-
readConfig.setContentsFromObject(contents);
|
|
199
|
-
return (await readConfig.write());
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
async init() {
|
|
203
|
-
this.logger = await logger_1.Logger.child(this.constructor.name);
|
|
204
|
-
}
|
|
205
|
-
async getAllFiles() {
|
|
206
|
-
const regex = this.getFileRegex();
|
|
207
|
-
try {
|
|
208
|
-
return (await fs.promises.readdir(global_1.Global.DIR)).filter((file) => regex.test(file));
|
|
209
|
-
}
|
|
210
|
-
catch {
|
|
211
|
-
return [];
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
parseUsername(filename) {
|
|
215
|
-
return filename.replace(this.getFileExtension(), '');
|
|
216
|
-
}
|
|
217
|
-
parseFilename(username) {
|
|
218
|
-
return path.join(global_1.Global.DIR, `${username}${this.getFileExtension()}`);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
exports.BaseOrgAccessor = BaseOrgAccessor;
|
|
222
|
-
class OrgAccessor extends BaseOrgAccessor {
|
|
223
|
-
// eslint-disable-next-line class-methods-use-this
|
|
224
|
-
async initAuthFile(username, throwOnNotFound = false) {
|
|
225
|
-
return authInfoConfig_1.AuthInfoConfig.create({
|
|
226
|
-
...authInfoConfig_1.AuthInfoConfig.getOptions(username),
|
|
227
|
-
throwOnNotFound,
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
// eslint-disable-next-line class-methods-use-this
|
|
231
|
-
getFileRegex() {
|
|
232
|
-
// The regular expression that filters files stored in $HOME/.sfdx
|
|
233
|
-
return /^[^.][^@]*@[^.]+(\.[^.\s]+)+\.json$/;
|
|
234
|
-
}
|
|
235
|
-
// eslint-disable-next-line class-methods-use-this
|
|
236
|
-
getFileExtension() {
|
|
237
|
-
return '.json';
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
exports.OrgAccessor = OrgAccessor;
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
* Licensed under the BSD 3-Clause license.
|
|
6
|
+
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.OrgAccessor = exports.BaseOrgAccessor = void 0;
|
|
10
|
+
const fs = require("fs");
|
|
11
|
+
const path = require("path");
|
|
12
|
+
const kit_1 = require("@salesforce/kit");
|
|
13
|
+
const authInfoConfig_1 = require("../../config/authInfoConfig");
|
|
14
|
+
const global_1 = require("../../global");
|
|
15
|
+
const logger_1 = require("../../logger");
|
|
16
|
+
const messages_1 = require("../../messages");
|
|
17
|
+
function chunk(array, chunkSize) {
|
|
18
|
+
const final = [];
|
|
19
|
+
for (let i = 0, len = array.length; i < len; i += chunkSize)
|
|
20
|
+
final.push(array.slice(i, i + chunkSize));
|
|
21
|
+
return final;
|
|
22
|
+
}
|
|
23
|
+
class BaseOrgAccessor extends kit_1.AsyncOptionalCreatable {
|
|
24
|
+
constructor() {
|
|
25
|
+
super(...arguments);
|
|
26
|
+
this.configs = new Map();
|
|
27
|
+
this.contents = new Map();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Read the auth file for the given username. Once the file has been read, it can be re-accessed with the `get` method.
|
|
31
|
+
*
|
|
32
|
+
* @param username username to read
|
|
33
|
+
* @param decrypt if true, decrypt encrypted values
|
|
34
|
+
* @param throwOnNotFound throw if file is not found for username
|
|
35
|
+
*/
|
|
36
|
+
async read(username, decrypt = false, throwOnNotFound = true) {
|
|
37
|
+
try {
|
|
38
|
+
const config = await this.initAuthFile(username, throwOnNotFound);
|
|
39
|
+
this.configs.set(username, config);
|
|
40
|
+
return this.get(username, decrypt);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Read all the auth files under the global state directory
|
|
48
|
+
*
|
|
49
|
+
* @param decrypt if true, decrypt encrypted values
|
|
50
|
+
*/
|
|
51
|
+
async readAll(decrypt = false) {
|
|
52
|
+
const fileChunks = chunk(await this.getAllFiles(), 50);
|
|
53
|
+
for (const fileChunk of fileChunks) {
|
|
54
|
+
const promises = fileChunk.map(async (f) => {
|
|
55
|
+
const username = this.parseUsername(f);
|
|
56
|
+
const config = await this.initAuthFile(username);
|
|
57
|
+
this.configs.set(username, config);
|
|
58
|
+
});
|
|
59
|
+
// eslint-disable-next-line no-await-in-loop
|
|
60
|
+
await Promise.all(promises);
|
|
61
|
+
}
|
|
62
|
+
return this.getAll(decrypt);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Return the contents of the username's auth file from cache.
|
|
66
|
+
* The `read` or `readAll` methods must be called first in order to populate the cache.
|
|
67
|
+
* If throwOnNotFound is not true, an empty object {} is returned if the org is not found.
|
|
68
|
+
*
|
|
69
|
+
* @param username username to get
|
|
70
|
+
* @param decrypt if true, decrypt encrypted values
|
|
71
|
+
* @param throwOnNotFound if true, throw if the auth file does not already exist in the cache
|
|
72
|
+
*/
|
|
73
|
+
get(username, decrypt = false, throwOnNotFound = false) {
|
|
74
|
+
const config = this.configs.get(username);
|
|
75
|
+
if (throwOnNotFound && config?.keys().length === 0) {
|
|
76
|
+
messages_1.Messages.importMessagesDirectory(__dirname);
|
|
77
|
+
const messages = messages_1.Messages.load('@salesforce/core', 'core', ['namedOrgNotFound']);
|
|
78
|
+
throw messages.createError('namedOrgNotFound', [username]);
|
|
79
|
+
}
|
|
80
|
+
if (config) {
|
|
81
|
+
this.contents.set(username, config.getContents(decrypt));
|
|
82
|
+
}
|
|
83
|
+
return this.contents.get(username);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Return the contents of all the auth files from cache. The `read` or `readAll` methods must be called first in order to populate the cache.
|
|
87
|
+
*
|
|
88
|
+
* @param decrypt if true, decrypt encrypted values
|
|
89
|
+
* @returns
|
|
90
|
+
*/
|
|
91
|
+
getAll(decrypt = false) {
|
|
92
|
+
return [...this.configs.keys()].map((username) => this.get(username, decrypt)).filter((org) => !(0, kit_1.isEmpty)(org));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Returns true if the username has been cached.
|
|
96
|
+
*
|
|
97
|
+
* @param username
|
|
98
|
+
*/
|
|
99
|
+
has(username) {
|
|
100
|
+
return this.contents.has(username);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Returns true if there is an auth file for the given username. The `read` or `readAll` methods must be called first in order to populate the cache.
|
|
104
|
+
*
|
|
105
|
+
* @param username
|
|
106
|
+
*/
|
|
107
|
+
async exists(username) {
|
|
108
|
+
const config = this.configs.get(username);
|
|
109
|
+
return config ? config.exists() : false;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Return the file stats for a given userame's auth file.
|
|
113
|
+
*
|
|
114
|
+
* @param username
|
|
115
|
+
*/
|
|
116
|
+
async stat(username) {
|
|
117
|
+
const config = this.configs.get(username);
|
|
118
|
+
return config ? config.stat() : null;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Returns true if there is an auth file for the given username
|
|
122
|
+
*
|
|
123
|
+
* @param username
|
|
124
|
+
*/
|
|
125
|
+
async hasFile(username) {
|
|
126
|
+
try {
|
|
127
|
+
await fs.promises.access(this.parseFilename(username));
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
this.logger.debug(`No auth file found for ${username}`);
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Return all auth files under the global state directory.
|
|
137
|
+
*/
|
|
138
|
+
async list() {
|
|
139
|
+
return this.getAllFiles();
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Set the contents for a given username.
|
|
143
|
+
*
|
|
144
|
+
* @param username
|
|
145
|
+
* @param org
|
|
146
|
+
*/
|
|
147
|
+
set(username, org) {
|
|
148
|
+
const config = this.configs.get(username);
|
|
149
|
+
if (config) {
|
|
150
|
+
config.setContentsFromObject(org);
|
|
151
|
+
const contents = config.getContents();
|
|
152
|
+
contents.username ?? (contents.username = username);
|
|
153
|
+
this.contents.set(username, contents);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
157
|
+
// @ts-ignore
|
|
158
|
+
org.username ?? (org.username = username);
|
|
159
|
+
this.contents.set(username, org);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Update the contents for a given username.
|
|
164
|
+
*
|
|
165
|
+
* @param username
|
|
166
|
+
* @param org
|
|
167
|
+
*/
|
|
168
|
+
update(username, org) {
|
|
169
|
+
const existing = this.get(username) || {};
|
|
170
|
+
const merged = Object.assign({}, existing, org);
|
|
171
|
+
return this.set(username, merged);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Delete the auth file for a given username.
|
|
175
|
+
*
|
|
176
|
+
* @param username
|
|
177
|
+
*/
|
|
178
|
+
async remove(username) {
|
|
179
|
+
await this.configs.get(username)?.unlink();
|
|
180
|
+
this.configs.delete(username);
|
|
181
|
+
this.contents.delete(username);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Write the contents of the auth file for a given username.
|
|
185
|
+
*
|
|
186
|
+
* @param username
|
|
187
|
+
*/
|
|
188
|
+
async write(username) {
|
|
189
|
+
const config = this.configs.get(username);
|
|
190
|
+
if (config) {
|
|
191
|
+
return (await config.write());
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
const contents = this.contents.get(username) ?? {};
|
|
195
|
+
await this.read(username, false, false);
|
|
196
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
197
|
+
const readConfig = this.configs.get(username);
|
|
198
|
+
readConfig.setContentsFromObject(contents);
|
|
199
|
+
return (await readConfig.write());
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async init() {
|
|
203
|
+
this.logger = await logger_1.Logger.child(this.constructor.name);
|
|
204
|
+
}
|
|
205
|
+
async getAllFiles() {
|
|
206
|
+
const regex = this.getFileRegex();
|
|
207
|
+
try {
|
|
208
|
+
return (await fs.promises.readdir(global_1.Global.DIR)).filter((file) => regex.test(file));
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return [];
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
parseUsername(filename) {
|
|
215
|
+
return filename.replace(this.getFileExtension(), '');
|
|
216
|
+
}
|
|
217
|
+
parseFilename(username) {
|
|
218
|
+
return path.join(global_1.Global.DIR, `${username}${this.getFileExtension()}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
exports.BaseOrgAccessor = BaseOrgAccessor;
|
|
222
|
+
class OrgAccessor extends BaseOrgAccessor {
|
|
223
|
+
// eslint-disable-next-line class-methods-use-this
|
|
224
|
+
async initAuthFile(username, throwOnNotFound = false) {
|
|
225
|
+
return authInfoConfig_1.AuthInfoConfig.create({
|
|
226
|
+
...authInfoConfig_1.AuthInfoConfig.getOptions(username),
|
|
227
|
+
throwOnNotFound,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
// eslint-disable-next-line class-methods-use-this
|
|
231
|
+
getFileRegex() {
|
|
232
|
+
// The regular expression that filters files stored in $HOME/.sfdx
|
|
233
|
+
return /^[^.][^@]*@[^.]+(\.[^.\s]+)+\.json$/;
|
|
234
|
+
}
|
|
235
|
+
// eslint-disable-next-line class-methods-use-this
|
|
236
|
+
getFileExtension() {
|
|
237
|
+
return '.json';
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
exports.OrgAccessor = OrgAccessor;
|
|
241
241
|
//# sourceMappingURL=orgAccessor.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { SandboxOrgConfig } from '../../config/sandboxOrgConfig';
|
|
2
|
-
import { SandboxFields } from '../../org';
|
|
3
|
-
import { BaseOrgAccessor } from './orgAccessor';
|
|
4
|
-
export declare class SandboxAccessor extends BaseOrgAccessor<SandboxOrgConfig, SandboxFields> {
|
|
5
|
-
protected initAuthFile(username: string, throwOnNotFound?: boolean): Promise<SandboxOrgConfig>;
|
|
6
|
-
protected getFileRegex(): RegExp;
|
|
7
|
-
protected getFileExtension(): string;
|
|
8
|
-
}
|
|
1
|
+
import { SandboxOrgConfig } from '../../config/sandboxOrgConfig';
|
|
2
|
+
import { SandboxFields } from '../../org';
|
|
3
|
+
import { BaseOrgAccessor } from './orgAccessor';
|
|
4
|
+
export declare class SandboxAccessor extends BaseOrgAccessor<SandboxOrgConfig, SandboxFields> {
|
|
5
|
+
protected initAuthFile(username: string, throwOnNotFound?: boolean): Promise<SandboxOrgConfig>;
|
|
6
|
+
protected getFileRegex(): RegExp;
|
|
7
|
+
protected getFileExtension(): string;
|
|
8
|
+
}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (c) 2021, salesforce.com, inc.
|
|
4
|
-
* All rights reserved.
|
|
5
|
-
* Licensed under the BSD 3-Clause license.
|
|
6
|
-
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
|
-
*/
|
|
8
|
-
/* eslint-disable class-methods-use-this */
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.SandboxAccessor = void 0;
|
|
11
|
-
const sandboxOrgConfig_1 = require("../../config/sandboxOrgConfig");
|
|
12
|
-
const orgAccessor_1 = require("./orgAccessor");
|
|
13
|
-
class SandboxAccessor extends orgAccessor_1.BaseOrgAccessor {
|
|
14
|
-
async initAuthFile(username, throwOnNotFound = false) {
|
|
15
|
-
return sandboxOrgConfig_1.SandboxOrgConfig.create({
|
|
16
|
-
...sandboxOrgConfig_1.SandboxOrgConfig.getOptions(username),
|
|
17
|
-
throwOnNotFound,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
getFileRegex() {
|
|
21
|
-
return /^(00D.*?)\.sandbox\.json$/;
|
|
22
|
-
}
|
|
23
|
-
getFileExtension() {
|
|
24
|
-
return '.sandbox.json';
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
exports.SandboxAccessor = SandboxAccessor;
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
* Licensed under the BSD 3-Clause license.
|
|
6
|
+
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
|
+
*/
|
|
8
|
+
/* eslint-disable class-methods-use-this */
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SandboxAccessor = void 0;
|
|
11
|
+
const sandboxOrgConfig_1 = require("../../config/sandboxOrgConfig");
|
|
12
|
+
const orgAccessor_1 = require("./orgAccessor");
|
|
13
|
+
class SandboxAccessor extends orgAccessor_1.BaseOrgAccessor {
|
|
14
|
+
async initAuthFile(username, throwOnNotFound = false) {
|
|
15
|
+
return sandboxOrgConfig_1.SandboxOrgConfig.create({
|
|
16
|
+
...sandboxOrgConfig_1.SandboxOrgConfig.getOptions(username),
|
|
17
|
+
throwOnNotFound,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
getFileRegex() {
|
|
21
|
+
return /^(00D.*?)\.sandbox\.json$/;
|
|
22
|
+
}
|
|
23
|
+
getFileExtension() {
|
|
24
|
+
return '.sandbox.json';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.SandboxAccessor = SandboxAccessor;
|
|
28
28
|
//# sourceMappingURL=sandboxAccessor.js.map
|