@salesforce/core 3.7.6 → 3.7.9
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 +14 -0
- package/README.md +4 -4
- package/lib/config/config.d.ts +7 -5
- package/lib/config/config.js +14 -9
- package/lib/config/configAggregator.d.ts +2 -2
- package/lib/config/configAggregator.js +2 -2
- package/lib/config/configFile.d.ts +2 -2
- package/lib/config/configFile.js +22 -20
- package/lib/config/configStore.js +5 -5
- package/lib/config/keychainConfig.js +4 -3
- package/lib/crypto/keyChainImpl.js +12 -10
- package/lib/deviceOauthService.js +2 -2
- package/lib/exported.d.ts +3 -4
- package/lib/exported.js +9 -7
- package/lib/global.js +2 -2
- package/lib/globalInfo/accessors/aliasAccessor.js +2 -2
- package/lib/globalInfo/sfdxDataHandler.d.ts +1 -1
- package/lib/globalInfo/sfdxDataHandler.js +5 -4
- package/lib/logger.d.ts +3 -3
- package/lib/logger.js +21 -19
- package/lib/messages.d.ts +42 -3
- package/lib/messages.js +55 -12
- package/lib/org/authInfo.d.ts +1 -1
- package/lib/org/authInfo.js +6 -6
- package/lib/org/authRemover.d.ts +2 -2
- package/lib/org/authRemover.js +2 -2
- package/lib/org/connection.d.ts +1 -1
- package/lib/org/connection.js +4 -4
- package/lib/org/org.d.ts +4 -4
- package/lib/org/org.js +16 -16
- package/lib/org/permissionSetAssignment.js +2 -2
- package/lib/org/scratchOrgCreate.js +4 -4
- package/lib/org/scratchOrgErrorCodes.js +6 -6
- package/lib/org/scratchOrgInfoApi.js +16 -16
- package/lib/org/scratchOrgInfoGenerator.d.ts +3 -3
- package/lib/org/scratchOrgInfoGenerator.js +17 -17
- package/lib/org/scratchOrgSettingsGenerator.js +2 -2
- package/lib/org/user.js +4 -4
- package/lib/schema/printer.js +2 -2
- package/lib/schema/validator.d.ts +4 -4
- package/lib/schema/validator.js +13 -13
- package/lib/{sfdxError.d.ts → sfError.d.ts} +14 -14
- package/lib/{sfdxError.js → sfError.js} +20 -21
- package/lib/{sfdxProject.d.ts → sfProject.d.ts} +37 -27
- package/lib/{sfdxProject.js → sfProject.js} +77 -65
- package/lib/status/pollingClient.js +3 -3
- package/lib/status/streamingClient.d.ts +2 -2
- package/lib/status/streamingClient.js +6 -6
- package/lib/testSetup.d.ts +4 -4
- package/lib/testSetup.js +8 -8
- package/lib/util/internal.d.ts +28 -2
- package/lib/util/internal.js +64 -6
- package/lib/util/sfdcUrl.d.ts +2 -2
- package/lib/util/sfdcUrl.js +2 -2
- package/lib/webOAuthServer.js +10 -10
- package/package.json +5 -5
- package/lib/util/fs.d.ts +0 -201
- package/lib/util/fs.js +0 -378
|
@@ -11,7 +11,7 @@ const kit_1 = require("@salesforce/kit");
|
|
|
11
11
|
const ts_types_1 = require("@salesforce/ts-types");
|
|
12
12
|
const ts_retry_promise_1 = require("ts-retry-promise");
|
|
13
13
|
const logger_1 = require("../logger");
|
|
14
|
-
const
|
|
14
|
+
const sfError_1 = require("../sfError");
|
|
15
15
|
const lifecycleEvents_1 = require("../lifecycleEvents");
|
|
16
16
|
/**
|
|
17
17
|
* This is a polling client that can be used to poll the status of long running tasks. It can be used as a replacement
|
|
@@ -65,7 +65,7 @@ class PollingClient extends kit_1.AsyncOptionalCreatable {
|
|
|
65
65
|
if (['ETIMEDOUT', 'ENOTFOUND', 'ECONNRESET', 'socket hang up'].some((retryableNetworkError) => err.message.includes(retryableNetworkError))) {
|
|
66
66
|
this.logger.debug('Network error on the request', err);
|
|
67
67
|
await lifecycleEvents_1.Lifecycle.getInstance().emitWarning('Network error occurred. Continuing to poll.');
|
|
68
|
-
throw
|
|
68
|
+
throw sfError_1.SfError.wrap(err);
|
|
69
69
|
}
|
|
70
70
|
// there was an actual error thrown, so we don't want to keep retrying
|
|
71
71
|
throw new ts_retry_promise_1.NotRetryableError(err.name);
|
|
@@ -88,7 +88,7 @@ class PollingClient extends kit_1.AsyncOptionalCreatable {
|
|
|
88
88
|
throw errorInPollingFunction;
|
|
89
89
|
}
|
|
90
90
|
this.logger.debug('Polling timed out');
|
|
91
|
-
throw new
|
|
91
|
+
throw new sfError_1.SfError('The client has timed out.', (_a = this.options.timeoutErrorName) !== null && _a !== void 0 ? _a : 'PollingClientTimeout');
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AsyncOptionalCreatable, Duration, Env } from '@salesforce/kit/lib';
|
|
2
2
|
import { AnyJson } from '@salesforce/ts-types/lib';
|
|
3
|
-
import { Org } from '../org';
|
|
3
|
+
import { Org } from '../org/org';
|
|
4
4
|
import { CometClient, CometSubscription, Message, StatusResult, StreamingExtension, StreamProcessor } from './types';
|
|
5
5
|
export { CometClient, CometSubscription, Message, StatusResult, StreamingExtension, StreamProcessor };
|
|
6
6
|
/**
|
|
@@ -113,7 +113,7 @@ export declare class StreamingClient extends AsyncOptionalCreatable<StreamingCli
|
|
|
113
113
|
* Subscribe to streaming events. When the streaming processor that's set in the options completes execution it
|
|
114
114
|
* returns a payload in the StatusResult object. The payload is just echoed here for convenience.
|
|
115
115
|
*
|
|
116
|
-
* **Throws** *{@link
|
|
116
|
+
* **Throws** *{@link SfError}{ name: '{@link StreamingClient.TimeoutErrorType.SUBSCRIBE}'}* When the subscribe timeout occurs.
|
|
117
117
|
*
|
|
118
118
|
* @param streamInit This function should call the platform apis that result in streaming updates on push topics.
|
|
119
119
|
* {@link StatusResult}
|
|
@@ -13,7 +13,7 @@ const lib_1 = require("@salesforce/kit/lib");
|
|
|
13
13
|
const lib_2 = require("@salesforce/ts-types/lib");
|
|
14
14
|
const Faye = require("faye");
|
|
15
15
|
const logger_1 = require("../logger");
|
|
16
|
-
const
|
|
16
|
+
const sfError_1 = require("../sfError");
|
|
17
17
|
const messages_1 = require("../messages");
|
|
18
18
|
const types_1 = require("./types");
|
|
19
19
|
Object.defineProperty(exports, "CometClient", { enumerable: true, get: function () { return types_1.CometClient; } });
|
|
@@ -151,7 +151,7 @@ class StreamingClient extends lib_1.AsyncOptionalCreatable {
|
|
|
151
151
|
this.cometClient.setHeader('Authorization', `OAuth ${accessToken}`);
|
|
152
152
|
}
|
|
153
153
|
else {
|
|
154
|
-
throw new
|
|
154
|
+
throw new sfError_1.SfError('Missing or invalid access token', 'MissingOrInvalidAccessToken');
|
|
155
155
|
}
|
|
156
156
|
this.log(`Streaming client target url: ${this.targetUrl}`);
|
|
157
157
|
this.log(`options.subscribeTimeout (ms): ${this.options.subscribeTimeout.milliseconds}`);
|
|
@@ -201,7 +201,7 @@ class StreamingClient extends lib_1.AsyncOptionalCreatable {
|
|
|
201
201
|
* Subscribe to streaming events. When the streaming processor that's set in the options completes execution it
|
|
202
202
|
* returns a payload in the StatusResult object. The payload is just echoed here for convenience.
|
|
203
203
|
*
|
|
204
|
-
* **Throws** *{@link
|
|
204
|
+
* **Throws** *{@link SfError}{ name: '{@link StreamingClient.TimeoutErrorType.SUBSCRIBE}'}* When the subscribe timeout occurs.
|
|
205
205
|
*
|
|
206
206
|
* @param streamInit This function should call the platform apis that result in streaming updates on push topics.
|
|
207
207
|
* {@link StatusResult}
|
|
@@ -342,13 +342,13 @@ exports.StreamingClient = StreamingClient;
|
|
|
342
342
|
logger.warn('envDep is deprecated');
|
|
343
343
|
}
|
|
344
344
|
if (!streamProcessor) {
|
|
345
|
-
throw new
|
|
345
|
+
throw new sfError_1.SfError('Missing stream processor', 'MissingArg');
|
|
346
346
|
}
|
|
347
347
|
if (!org) {
|
|
348
|
-
throw new
|
|
348
|
+
throw new sfError_1.SfError('Missing org', 'MissingArg');
|
|
349
349
|
}
|
|
350
350
|
if (!channel) {
|
|
351
|
-
throw new
|
|
351
|
+
throw new sfError_1.SfError('Missing streaming channel', 'MissingArg');
|
|
352
352
|
}
|
|
353
353
|
this.org = org;
|
|
354
354
|
this.apiVersion = org.getConnection().getApiVersion();
|
package/lib/testSetup.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as sinonType from 'sinon';
|
|
|
4
4
|
import { AnyJson, JsonMap, Optional } from '@salesforce/ts-types';
|
|
5
5
|
import { ConfigContents } from './config/configStore';
|
|
6
6
|
import { Logger } from './logger';
|
|
7
|
-
import {
|
|
7
|
+
import { SfError } from './sfError';
|
|
8
8
|
import { CometClient, CometSubscription, Message, StreamingExtension } from './status/streamingClient';
|
|
9
9
|
import { SfOrg } from './globalInfo';
|
|
10
10
|
/**
|
|
@@ -85,7 +85,7 @@ export interface TestContext {
|
|
|
85
85
|
[configName: string]: Optional<ConfigStub>;
|
|
86
86
|
GlobalInfo?: ConfigStub;
|
|
87
87
|
Aliases?: ConfigStub;
|
|
88
|
-
|
|
88
|
+
SfProjectJson?: ConfigStub;
|
|
89
89
|
SfdxConfig?: ConfigStub;
|
|
90
90
|
};
|
|
91
91
|
/**
|
|
@@ -252,7 +252,7 @@ export declare const testSetup: (sinon?: any) => TestContext;
|
|
|
252
252
|
*
|
|
253
253
|
* **See** {@link shouldThrow}
|
|
254
254
|
*/
|
|
255
|
-
export declare const unexpectedResult:
|
|
255
|
+
export declare const unexpectedResult: SfError;
|
|
256
256
|
/**
|
|
257
257
|
* Use for this testing pattern:
|
|
258
258
|
* ```
|
|
@@ -302,7 +302,7 @@ export interface StreamingMockCometSubscriptionOptions {
|
|
|
302
302
|
/**
|
|
303
303
|
* If it's an error that states what that error should be.
|
|
304
304
|
*/
|
|
305
|
-
subscriptionErrbackError?:
|
|
305
|
+
subscriptionErrbackError?: SfError;
|
|
306
306
|
/**
|
|
307
307
|
* A list of messages to playback for the client. One message per process tick.
|
|
308
308
|
*/
|
package/lib/testSetup.js
CHANGED
|
@@ -21,8 +21,8 @@ const connection_1 = require("./org/connection");
|
|
|
21
21
|
const crypto_2 = require("./crypto/crypto");
|
|
22
22
|
const logger_1 = require("./logger");
|
|
23
23
|
const messages_1 = require("./messages");
|
|
24
|
-
const
|
|
25
|
-
const
|
|
24
|
+
const sfError_1 = require("./sfError");
|
|
25
|
+
const sfProject_1 = require("./sfProject");
|
|
26
26
|
const streamingClient_1 = require("./status/streamingClient");
|
|
27
27
|
const globalInfo_1 = require("./globalInfo");
|
|
28
28
|
const global_1 = require("./global");
|
|
@@ -126,12 +126,12 @@ const instantiateContext = (sinon) => {
|
|
|
126
126
|
inProject(inProject = true) {
|
|
127
127
|
testContext.SANDBOXES.PROJECT.restore();
|
|
128
128
|
if (inProject) {
|
|
129
|
-
testContext.SANDBOXES.PROJECT.stub(
|
|
130
|
-
testContext.SANDBOXES.PROJECT.stub(
|
|
129
|
+
testContext.SANDBOXES.PROJECT.stub(sfProject_1.SfProject, 'resolveProjectPath').callsFake(() => testContext.localPathRetriever(testContext.id));
|
|
130
|
+
testContext.SANDBOXES.PROJECT.stub(sfProject_1.SfProject, 'resolveProjectPathSync').callsFake(() => testContext.localPathRetrieverSync(testContext.id));
|
|
131
131
|
}
|
|
132
132
|
else {
|
|
133
|
-
testContext.SANDBOXES.PROJECT.stub(
|
|
134
|
-
testContext.SANDBOXES.PROJECT.stub(
|
|
133
|
+
testContext.SANDBOXES.PROJECT.stub(sfProject_1.SfProject, 'resolveProjectPath').rejects(new sfError_1.SfError('', 'InvalidProjectWorkspaceError'));
|
|
134
|
+
testContext.SANDBOXES.PROJECT.stub(sfProject_1.SfProject, 'resolveProjectPathSync').throws(new sfError_1.SfError('', 'InvalidProjectWorkspaceError'));
|
|
135
135
|
}
|
|
136
136
|
},
|
|
137
137
|
};
|
|
@@ -174,7 +174,7 @@ const stubContext = (testContext) => {
|
|
|
174
174
|
testContext.inProject(true);
|
|
175
175
|
testContext.SANDBOXES.CONFIG.stub(configFile_1.ConfigFile, 'resolveRootFolder').callsFake((isGlobal) => testContext.rootPathRetriever(isGlobal, testContext.id));
|
|
176
176
|
testContext.SANDBOXES.CONFIG.stub(configFile_1.ConfigFile, 'resolveRootFolderSync').callsFake((isGlobal) => testContext.rootPathRetrieverSync(isGlobal, testContext.id));
|
|
177
|
-
(0, ts_sinon_1.stubMethod)(testContext.SANDBOXES.PROJECT,
|
|
177
|
+
(0, ts_sinon_1.stubMethod)(testContext.SANDBOXES.PROJECT, sfProject_1.SfProjectJson.prototype, 'doesPackageExist').callsFake(() => true);
|
|
178
178
|
const initStubForRead = (configFile) => {
|
|
179
179
|
const stub = testContext.configStubs[configFile.constructor.name] || {};
|
|
180
180
|
// init calls read calls getPath which sets the path on the config file the first time.
|
|
@@ -324,7 +324,7 @@ exports.testSetup = (0, kit_1.once)(_testSetup);
|
|
|
324
324
|
*
|
|
325
325
|
* **See** {@link shouldThrow}
|
|
326
326
|
*/
|
|
327
|
-
exports.unexpectedResult = new
|
|
327
|
+
exports.unexpectedResult = new sfError_1.SfError('This code was expected to fail', 'UnexpectedResult');
|
|
328
328
|
/**
|
|
329
329
|
* Use for this testing pattern:
|
|
330
330
|
* ```
|
package/lib/util/internal.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Optional } from '@salesforce/ts-types';
|
|
1
2
|
/**
|
|
2
3
|
* The name of the project config file.
|
|
3
4
|
*
|
|
@@ -11,7 +12,7 @@ export declare const SFDX_PROJECT_JSON = "sfdx-project.json";
|
|
|
11
12
|
*
|
|
12
13
|
* **See** {@link traverseForFile}
|
|
13
14
|
*
|
|
14
|
-
* **Throws** *{@link
|
|
15
|
+
* **Throws** *{@link SfError}{ name: 'InvalidProjectWorkspaceError' }* If the current folder is not located in a workspace.
|
|
15
16
|
*
|
|
16
17
|
* @param dir The directory path to start traversing from.
|
|
17
18
|
* @ignore
|
|
@@ -24,9 +25,34 @@ export declare function resolveProjectPath(dir?: string): Promise<string>;
|
|
|
24
25
|
*
|
|
25
26
|
* **See** {@link traverseForFile}
|
|
26
27
|
*
|
|
27
|
-
* **Throws** *{@link
|
|
28
|
+
* **Throws** *{@link SfError}{ name: 'InvalidProjectWorkspaceError' }* If the current folder is not located in a workspace.
|
|
28
29
|
*
|
|
29
30
|
* @param dir The directory path to start traversing from.
|
|
30
31
|
* @ignore
|
|
31
32
|
*/
|
|
32
33
|
export declare function resolveProjectPathSync(dir?: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* These methods were moved from the deprecated 'fs' module in v2 and are only used in sfdx-core above
|
|
36
|
+
*
|
|
37
|
+
* They were migrated into the 'traverse' constant in order to stub them in unit tests
|
|
38
|
+
*/
|
|
39
|
+
export declare const traverse: {
|
|
40
|
+
/**
|
|
41
|
+
* Searches a file path in an ascending manner (until reaching the filesystem root) for the first occurrence a
|
|
42
|
+
* specific file name. Resolves with the directory path containing the located file, or `null` if the file was
|
|
43
|
+
* not found.
|
|
44
|
+
*
|
|
45
|
+
* @param dir The directory path in which to start the upward search.
|
|
46
|
+
* @param file The file name to look for.
|
|
47
|
+
*/
|
|
48
|
+
forFile: (dir: string, file: string) => Promise<Optional<string>>;
|
|
49
|
+
/**
|
|
50
|
+
* Searches a file path synchronously in an ascending manner (until reaching the filesystem root) for the first occurrence a
|
|
51
|
+
* specific file name. Resolves with the directory path containing the located file, or `null` if the file was
|
|
52
|
+
* not found.
|
|
53
|
+
*
|
|
54
|
+
* @param dir The directory path in which to start the upward search.
|
|
55
|
+
* @param file The file name to look for.
|
|
56
|
+
*/
|
|
57
|
+
forFileSync: (dir: string, file: string) => Optional<string>;
|
|
58
|
+
};
|
package/lib/util/internal.js
CHANGED
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.resolveProjectPathSync = exports.resolveProjectPath = exports.SFDX_PROJECT_JSON = void 0;
|
|
9
|
+
exports.traverse = exports.resolveProjectPathSync = exports.resolveProjectPath = exports.SFDX_PROJECT_JSON = void 0;
|
|
10
|
+
const fs = require("fs");
|
|
11
|
+
const path_1 = require("path");
|
|
10
12
|
const messages_1 = require("../messages");
|
|
11
|
-
const fs_1 = require("./fs");
|
|
12
13
|
messages_1.Messages.importMessagesDirectory(__dirname);
|
|
13
14
|
const messages = messages_1.Messages.load('@salesforce/core', 'config', ['invalidProjectWorkspace']);
|
|
14
15
|
/**
|
|
@@ -25,13 +26,13 @@ exports.SFDX_PROJECT_JSON = 'sfdx-project.json';
|
|
|
25
26
|
*
|
|
26
27
|
* **See** {@link traverseForFile}
|
|
27
28
|
*
|
|
28
|
-
* **Throws** *{@link
|
|
29
|
+
* **Throws** *{@link SfError}{ name: 'InvalidProjectWorkspaceError' }* If the current folder is not located in a workspace.
|
|
29
30
|
*
|
|
30
31
|
* @param dir The directory path to start traversing from.
|
|
31
32
|
* @ignore
|
|
32
33
|
*/
|
|
33
34
|
async function resolveProjectPath(dir = process.cwd()) {
|
|
34
|
-
const projectPath = await
|
|
35
|
+
const projectPath = await exports.traverse.forFile(dir, exports.SFDX_PROJECT_JSON);
|
|
35
36
|
if (!projectPath) {
|
|
36
37
|
throw messages.createError('invalidProjectWorkspace');
|
|
37
38
|
}
|
|
@@ -45,17 +46,74 @@ exports.resolveProjectPath = resolveProjectPath;
|
|
|
45
46
|
*
|
|
46
47
|
* **See** {@link traverseForFile}
|
|
47
48
|
*
|
|
48
|
-
* **Throws** *{@link
|
|
49
|
+
* **Throws** *{@link SfError}{ name: 'InvalidProjectWorkspaceError' }* If the current folder is not located in a workspace.
|
|
49
50
|
*
|
|
50
51
|
* @param dir The directory path to start traversing from.
|
|
51
52
|
* @ignore
|
|
52
53
|
*/
|
|
53
54
|
function resolveProjectPathSync(dir = process.cwd()) {
|
|
54
|
-
const projectPath =
|
|
55
|
+
const projectPath = exports.traverse.forFileSync(dir, exports.SFDX_PROJECT_JSON);
|
|
55
56
|
if (!projectPath) {
|
|
56
57
|
throw messages.createError('invalidProjectWorkspace');
|
|
57
58
|
}
|
|
58
59
|
return projectPath;
|
|
59
60
|
}
|
|
60
61
|
exports.resolveProjectPathSync = resolveProjectPathSync;
|
|
62
|
+
/**
|
|
63
|
+
* These methods were moved from the deprecated 'fs' module in v2 and are only used in sfdx-core above
|
|
64
|
+
*
|
|
65
|
+
* They were migrated into the 'traverse' constant in order to stub them in unit tests
|
|
66
|
+
*/
|
|
67
|
+
exports.traverse = {
|
|
68
|
+
/**
|
|
69
|
+
* Searches a file path in an ascending manner (until reaching the filesystem root) for the first occurrence a
|
|
70
|
+
* specific file name. Resolves with the directory path containing the located file, or `null` if the file was
|
|
71
|
+
* not found.
|
|
72
|
+
*
|
|
73
|
+
* @param dir The directory path in which to start the upward search.
|
|
74
|
+
* @param file The file name to look for.
|
|
75
|
+
*/
|
|
76
|
+
forFile: async (dir, file) => {
|
|
77
|
+
let foundProjectDir;
|
|
78
|
+
try {
|
|
79
|
+
fs.statSync((0, path_1.join)(dir, file));
|
|
80
|
+
foundProjectDir = dir;
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
if (err && err.code === 'ENOENT') {
|
|
84
|
+
const nextDir = (0, path_1.resolve)(dir, '..');
|
|
85
|
+
if (nextDir !== dir) {
|
|
86
|
+
// stop at root
|
|
87
|
+
foundProjectDir = await exports.traverse.forFile(nextDir, file);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return foundProjectDir;
|
|
92
|
+
},
|
|
93
|
+
/**
|
|
94
|
+
* Searches a file path synchronously in an ascending manner (until reaching the filesystem root) for the first occurrence a
|
|
95
|
+
* specific file name. Resolves with the directory path containing the located file, or `null` if the file was
|
|
96
|
+
* not found.
|
|
97
|
+
*
|
|
98
|
+
* @param dir The directory path in which to start the upward search.
|
|
99
|
+
* @param file The file name to look for.
|
|
100
|
+
*/
|
|
101
|
+
forFileSync: (dir, file) => {
|
|
102
|
+
let foundProjectDir;
|
|
103
|
+
try {
|
|
104
|
+
fs.statSync((0, path_1.join)(dir, file));
|
|
105
|
+
foundProjectDir = dir;
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
if (err && err.code === 'ENOENT') {
|
|
109
|
+
const nextDir = (0, path_1.resolve)(dir, '..');
|
|
110
|
+
if (nextDir !== dir) {
|
|
111
|
+
// stop at root
|
|
112
|
+
foundProjectDir = exports.traverse.forFileSync(nextDir, file);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return foundProjectDir;
|
|
117
|
+
},
|
|
118
|
+
};
|
|
61
119
|
//# sourceMappingURL=internal.js.map
|
package/lib/util/sfdcUrl.d.ts
CHANGED
|
@@ -43,7 +43,7 @@ export declare class SfdcUrl extends URL {
|
|
|
43
43
|
* If SFDX_DOMAIN_RETRY environment variable is set (number) it overrides the default timeout duration (240 seconds)
|
|
44
44
|
*
|
|
45
45
|
* @returns {Promise<true | never>} The resolved ip address or never
|
|
46
|
-
* @throws {@link
|
|
46
|
+
* @throws {@link SfError} If can't resolve DNS.
|
|
47
47
|
*/
|
|
48
48
|
checkLightningDomain(): Promise<true | never>;
|
|
49
49
|
/**
|
|
@@ -51,7 +51,7 @@ export declare class SfdcUrl extends URL {
|
|
|
51
51
|
* If SFDX_DOMAIN_RETRY environment variable is set (number) it overrides the default timeout duration (240 seconds)
|
|
52
52
|
*
|
|
53
53
|
* @returns the resolved ip address.
|
|
54
|
-
* @throws {@link
|
|
54
|
+
* @throws {@link SfError} If can't resolve DNS.
|
|
55
55
|
*/
|
|
56
56
|
lookup(): Promise<string>;
|
|
57
57
|
/**
|
package/lib/util/sfdcUrl.js
CHANGED
|
@@ -121,7 +121,7 @@ class SfdcUrl extends url_1.URL {
|
|
|
121
121
|
* If SFDX_DOMAIN_RETRY environment variable is set (number) it overrides the default timeout duration (240 seconds)
|
|
122
122
|
*
|
|
123
123
|
* @returns {Promise<true | never>} The resolved ip address or never
|
|
124
|
-
* @throws {@link
|
|
124
|
+
* @throws {@link SfError} If can't resolve DNS.
|
|
125
125
|
*/
|
|
126
126
|
async checkLightningDomain() {
|
|
127
127
|
const quantity = (0, ts_types_1.ensureNumber)(new kit_1.Env().getNumber('SFDX_DOMAIN_RETRY', 240));
|
|
@@ -142,7 +142,7 @@ class SfdcUrl extends url_1.URL {
|
|
|
142
142
|
* If SFDX_DOMAIN_RETRY environment variable is set (number) it overrides the default timeout duration (240 seconds)
|
|
143
143
|
*
|
|
144
144
|
* @returns the resolved ip address.
|
|
145
|
-
* @throws {@link
|
|
145
|
+
* @throws {@link SfError} If can't resolve DNS.
|
|
146
146
|
*/
|
|
147
147
|
async lookup() {
|
|
148
148
|
const quantity = (0, ts_types_1.ensureNumber)(new kit_1.Env().getNumber('SFDX_DOMAIN_RETRY', 240));
|
package/lib/webOAuthServer.js
CHANGED
|
@@ -16,9 +16,9 @@ const ts_types_1 = require("@salesforce/ts-types");
|
|
|
16
16
|
const jsforce_1 = require("jsforce");
|
|
17
17
|
const logger_1 = require("./logger");
|
|
18
18
|
const authInfo_1 = require("./org/authInfo");
|
|
19
|
-
const
|
|
19
|
+
const sfError_1 = require("./sfError");
|
|
20
20
|
const messages_1 = require("./messages");
|
|
21
|
-
const
|
|
21
|
+
const sfProject_1 = require("./sfProject");
|
|
22
22
|
messages_1.Messages.importMessagesDirectory(__dirname);
|
|
23
23
|
const messages = messages_1.Messages.load('@salesforce/core', 'auth', [
|
|
24
24
|
'invalidRequestUri',
|
|
@@ -56,8 +56,8 @@ class WebOAuthServer extends kit_1.AsyncCreatable {
|
|
|
56
56
|
*/
|
|
57
57
|
static async determineOauthPort() {
|
|
58
58
|
try {
|
|
59
|
-
const
|
|
60
|
-
return
|
|
59
|
+
const sfProject = await sfProject_1.SfProjectJson.create();
|
|
60
|
+
return sfProject.get('oauthLocalPort') || WebOAuthServer.DEFAULT_PORT;
|
|
61
61
|
}
|
|
62
62
|
catch {
|
|
63
63
|
return WebOAuthServer.DEFAULT_PORT;
|
|
@@ -152,7 +152,7 @@ class WebOAuthServer extends kit_1.AsyncCreatable {
|
|
|
152
152
|
if (url.pathname && url.pathname.startsWith('/OauthRedirect')) {
|
|
153
153
|
request.query = (0, querystring_1.parse)(url.query);
|
|
154
154
|
if (request.query.error) {
|
|
155
|
-
const err = new
|
|
155
|
+
const err = new sfError_1.SfError(request.query.error_description || request.query.error, request.query.error);
|
|
156
156
|
this.webServer.reportError(err, response);
|
|
157
157
|
return reject(err);
|
|
158
158
|
}
|
|
@@ -169,14 +169,14 @@ class WebOAuthServer extends kit_1.AsyncCreatable {
|
|
|
169
169
|
this.webServer.sendError(404, 'Resource not found', response);
|
|
170
170
|
const errName = 'invalidRequestUri';
|
|
171
171
|
const errMessage = messages.getMessage(errName, [url.pathname]);
|
|
172
|
-
reject(new
|
|
172
|
+
reject(new sfError_1.SfError(errMessage, errName));
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
else {
|
|
176
176
|
this.webServer.sendError(405, 'Unsupported http methods', response);
|
|
177
177
|
const errName = 'invalidRequestMethod';
|
|
178
178
|
const errMessage = messages.getMessage(errName, [request.method]);
|
|
179
|
-
reject(new
|
|
179
|
+
reject(new sfError_1.SfError(errMessage, errName));
|
|
180
180
|
}
|
|
181
181
|
});
|
|
182
182
|
});
|
|
@@ -190,7 +190,7 @@ class WebOAuthServer extends kit_1.AsyncCreatable {
|
|
|
190
190
|
*/
|
|
191
191
|
parseAuthCodeFromRequest(response, request) {
|
|
192
192
|
if (!this.validateState(request)) {
|
|
193
|
-
const error = new
|
|
193
|
+
const error = new sfError_1.SfError('urlStateMismatch');
|
|
194
194
|
this.webServer.sendError(400, `${error.message}\n`, response);
|
|
195
195
|
this.closeRequest(request);
|
|
196
196
|
this.logger.warn('urlStateMismatchAttempt detected.');
|
|
@@ -343,13 +343,13 @@ class WebServer extends kit_1.AsyncCreatable {
|
|
|
343
343
|
const socket = new net_1.Socket();
|
|
344
344
|
socket.setTimeout(this.getSocketTimeout(), () => {
|
|
345
345
|
socket.destroy();
|
|
346
|
-
const error = new
|
|
346
|
+
const error = new sfError_1.SfError('timeout', 'SOCKET_TIMEOUT');
|
|
347
347
|
reject(error);
|
|
348
348
|
});
|
|
349
349
|
// An existing connection, means that the port is occupied
|
|
350
350
|
socket.connect(clientConfig, () => {
|
|
351
351
|
socket.destroy();
|
|
352
|
-
const error = new
|
|
352
|
+
const error = new sfError_1.SfError('Address in use', 'EADDRINUSE');
|
|
353
353
|
error.data = {
|
|
354
354
|
port: clientConfig.port,
|
|
355
355
|
address: clientConfig.host,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/core",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.9",
|
|
4
4
|
"description": "Core libraries to interact with SFDX projects, orgs, and APIs.",
|
|
5
5
|
"main": "lib/exported",
|
|
6
6
|
"types": "lib/exported.d.ts",
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
"!lib/**/*.map"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@oclif/core": "^1.
|
|
37
|
+
"@oclif/core": "^1.5.1",
|
|
38
38
|
"@salesforce/bunyan": "^2.0.0",
|
|
39
|
-
"@salesforce/kit": "^1.5.
|
|
39
|
+
"@salesforce/kit": "^1.5.34",
|
|
40
40
|
"@salesforce/schemas": "^1.1.0",
|
|
41
41
|
"@salesforce/ts-types": "^1.5.20",
|
|
42
42
|
"@types/graceful-fs": "^4.1.5",
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
"ts-retry-promise": "^0.6.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@salesforce/dev-config": "^3.0.
|
|
60
|
-
"@salesforce/dev-scripts": "^2.0.
|
|
59
|
+
"@salesforce/dev-config": "^3.0.1",
|
|
60
|
+
"@salesforce/dev-scripts": "^2.0.1",
|
|
61
61
|
"@salesforce/prettier-config": "^0.0.2",
|
|
62
62
|
"@salesforce/ts-sinon": "^1.3.21",
|
|
63
63
|
"@types/archiver": "^5.3.1",
|