@salesforce/core 3.31.4 → 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 -222
- 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 -553
- package/lib/testSetup.js +871 -871
- 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,125 +1,125 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (c) 2020, 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.MyDomainResolver = void 0;
|
|
10
|
-
const dns_1 = require("dns");
|
|
11
|
-
const url_1 = require("url");
|
|
12
|
-
const util_1 = require("util");
|
|
13
|
-
const ts_types_1 = require("@salesforce/ts-types");
|
|
14
|
-
const kit_1 = require("@salesforce/kit");
|
|
15
|
-
const logger_1 = require("../logger");
|
|
16
|
-
const sfdcUrl_1 = require("../util/sfdcUrl");
|
|
17
|
-
const pollingClient_1 = require("./pollingClient");
|
|
18
|
-
// Timeout for DNS lookup polling defaults to 3 seconds and should always be at least 3 seconds
|
|
19
|
-
const DNS_TIMEOUT = Math.max(3, new kit_1.Env().getNumber('SFDX_DNS_TIMEOUT', 3));
|
|
20
|
-
// Retry frequency for DNS lookup polling defaults to 1 second and should be at least 1 second
|
|
21
|
-
const DNS_RETRY_FREQ = Math.max(1, new kit_1.Env().getNumber('SFDX_DNS_RETRY_FREQUENCY', 1));
|
|
22
|
-
/**
|
|
23
|
-
* A class used to resolve MyDomains. After a ScratchOrg is created its host name my not be propagated to the
|
|
24
|
-
* Salesforce DNS service. This service is not exclusive to Salesforce My Domain URL and could be used for any hostname.
|
|
25
|
-
*
|
|
26
|
-
* ```
|
|
27
|
-
* (async () => {
|
|
28
|
-
* const options: MyDomainResolver.Options = {
|
|
29
|
-
* url: new URL('http://mydomain.salesforce.com'),
|
|
30
|
-
* timeout: Duration.minutes(5),
|
|
31
|
-
* frequency: Duration.seconds(10)
|
|
32
|
-
* };
|
|
33
|
-
* const resolver: MyDomainResolver = await MyDomainResolver.create(options);
|
|
34
|
-
* const ipAddress: AnyJson = await resolver.resolve();
|
|
35
|
-
* console.log(`Successfully resolved host: ${options.url} to address: ${ipAddress}`);
|
|
36
|
-
* })();
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
class MyDomainResolver extends kit_1.AsyncOptionalCreatable {
|
|
40
|
-
/**
|
|
41
|
-
* Constructor
|
|
42
|
-
* **Do not directly construct instances of this class -- use {@link MyDomainResolver.create} instead.**
|
|
43
|
-
*
|
|
44
|
-
* @param options The options for the class instance
|
|
45
|
-
*/
|
|
46
|
-
constructor(options) {
|
|
47
|
-
super(options);
|
|
48
|
-
this.options = options ?? { url: MyDomainResolver.DEFAULT_DOMAIN };
|
|
49
|
-
}
|
|
50
|
-
getTimeout() {
|
|
51
|
-
return this.options.timeout ?? kit_1.Duration.seconds(DNS_TIMEOUT);
|
|
52
|
-
}
|
|
53
|
-
getFrequency() {
|
|
54
|
-
return this.options.frequency ?? kit_1.Duration.seconds(DNS_RETRY_FREQ);
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Method that performs the dns lookup of the host. If the lookup fails the internal polling client will try again
|
|
58
|
-
* given the optional interval. Returns the resolved ip address.
|
|
59
|
-
*
|
|
60
|
-
* If SFDX_DISABLE_DNS_CHECK environment variable is set to true, it will immediately return the host without
|
|
61
|
-
* executing the dns loookup.
|
|
62
|
-
*/
|
|
63
|
-
async resolve() {
|
|
64
|
-
if (new kit_1.Env().getBoolean('SFDX_DISABLE_DNS_CHECK', false)) {
|
|
65
|
-
this.logger.debug('SFDX_DISABLE_DNS_CHECK set to true. Skipping DNS check...');
|
|
66
|
-
return this.options.url.host;
|
|
67
|
-
}
|
|
68
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
69
|
-
const self = this;
|
|
70
|
-
const pollingOptions = {
|
|
71
|
-
async poll() {
|
|
72
|
-
const { host } = self.options.url;
|
|
73
|
-
let dnsResult;
|
|
74
|
-
try {
|
|
75
|
-
self.logger.debug(`Attempting to resolve url: ${host}`);
|
|
76
|
-
if (new sfdcUrl_1.SfdcUrl(self.options.url).isLocalUrl()) {
|
|
77
|
-
return {
|
|
78
|
-
completed: true,
|
|
79
|
-
payload: '127.0.0.1',
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
dnsResult = await (0, util_1.promisify)(dns_1.lookup)(host);
|
|
83
|
-
self.logger.debug(`Successfully resolved host: ${host} result: ${JSON.stringify(dnsResult)}`);
|
|
84
|
-
return {
|
|
85
|
-
completed: true,
|
|
86
|
-
payload: dnsResult.address,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
catch (e) {
|
|
90
|
-
self.logger.debug(`An error occurred trying to resolve: ${host}`);
|
|
91
|
-
self.logger.debug(`Error: ${e.message}`);
|
|
92
|
-
self.logger.debug('Re-trying dns lookup again....');
|
|
93
|
-
return {
|
|
94
|
-
completed: false,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
timeout: this.getTimeout(),
|
|
99
|
-
frequency: this.getFrequency(),
|
|
100
|
-
timeoutErrorName: 'MyDomainResolverTimeoutError',
|
|
101
|
-
};
|
|
102
|
-
const client = await pollingClient_1.PollingClient.create(pollingOptions);
|
|
103
|
-
return (0, ts_types_1.ensureString)(await client.subscribe());
|
|
104
|
-
}
|
|
105
|
-
async getCnames() {
|
|
106
|
-
try {
|
|
107
|
-
await this.resolve();
|
|
108
|
-
return await (0, util_1.promisify)(dns_1.resolveCname)(this.options.url.host);
|
|
109
|
-
}
|
|
110
|
-
catch (e) {
|
|
111
|
-
this.logger.debug(`An error occurred trying to resolve: ${this.options.url.host}`);
|
|
112
|
-
this.logger.debug(`Error: ${e.message}`);
|
|
113
|
-
return [];
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Used to initialize asynchronous components.
|
|
118
|
-
*/
|
|
119
|
-
async init() {
|
|
120
|
-
this.logger = await logger_1.Logger.child('MyDomainResolver');
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
exports.MyDomainResolver = MyDomainResolver;
|
|
124
|
-
MyDomainResolver.DEFAULT_DOMAIN = new url_1.URL('https://login.salesforce.com');
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2020, 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.MyDomainResolver = void 0;
|
|
10
|
+
const dns_1 = require("dns");
|
|
11
|
+
const url_1 = require("url");
|
|
12
|
+
const util_1 = require("util");
|
|
13
|
+
const ts_types_1 = require("@salesforce/ts-types");
|
|
14
|
+
const kit_1 = require("@salesforce/kit");
|
|
15
|
+
const logger_1 = require("../logger");
|
|
16
|
+
const sfdcUrl_1 = require("../util/sfdcUrl");
|
|
17
|
+
const pollingClient_1 = require("./pollingClient");
|
|
18
|
+
// Timeout for DNS lookup polling defaults to 3 seconds and should always be at least 3 seconds
|
|
19
|
+
const DNS_TIMEOUT = Math.max(3, new kit_1.Env().getNumber('SFDX_DNS_TIMEOUT', 3));
|
|
20
|
+
// Retry frequency for DNS lookup polling defaults to 1 second and should be at least 1 second
|
|
21
|
+
const DNS_RETRY_FREQ = Math.max(1, new kit_1.Env().getNumber('SFDX_DNS_RETRY_FREQUENCY', 1));
|
|
22
|
+
/**
|
|
23
|
+
* A class used to resolve MyDomains. After a ScratchOrg is created its host name my not be propagated to the
|
|
24
|
+
* Salesforce DNS service. This service is not exclusive to Salesforce My Domain URL and could be used for any hostname.
|
|
25
|
+
*
|
|
26
|
+
* ```
|
|
27
|
+
* (async () => {
|
|
28
|
+
* const options: MyDomainResolver.Options = {
|
|
29
|
+
* url: new URL('http://mydomain.salesforce.com'),
|
|
30
|
+
* timeout: Duration.minutes(5),
|
|
31
|
+
* frequency: Duration.seconds(10)
|
|
32
|
+
* };
|
|
33
|
+
* const resolver: MyDomainResolver = await MyDomainResolver.create(options);
|
|
34
|
+
* const ipAddress: AnyJson = await resolver.resolve();
|
|
35
|
+
* console.log(`Successfully resolved host: ${options.url} to address: ${ipAddress}`);
|
|
36
|
+
* })();
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
class MyDomainResolver extends kit_1.AsyncOptionalCreatable {
|
|
40
|
+
/**
|
|
41
|
+
* Constructor
|
|
42
|
+
* **Do not directly construct instances of this class -- use {@link MyDomainResolver.create} instead.**
|
|
43
|
+
*
|
|
44
|
+
* @param options The options for the class instance
|
|
45
|
+
*/
|
|
46
|
+
constructor(options) {
|
|
47
|
+
super(options);
|
|
48
|
+
this.options = options ?? { url: MyDomainResolver.DEFAULT_DOMAIN };
|
|
49
|
+
}
|
|
50
|
+
getTimeout() {
|
|
51
|
+
return this.options.timeout ?? kit_1.Duration.seconds(DNS_TIMEOUT);
|
|
52
|
+
}
|
|
53
|
+
getFrequency() {
|
|
54
|
+
return this.options.frequency ?? kit_1.Duration.seconds(DNS_RETRY_FREQ);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Method that performs the dns lookup of the host. If the lookup fails the internal polling client will try again
|
|
58
|
+
* given the optional interval. Returns the resolved ip address.
|
|
59
|
+
*
|
|
60
|
+
* If SFDX_DISABLE_DNS_CHECK environment variable is set to true, it will immediately return the host without
|
|
61
|
+
* executing the dns loookup.
|
|
62
|
+
*/
|
|
63
|
+
async resolve() {
|
|
64
|
+
if (new kit_1.Env().getBoolean('SFDX_DISABLE_DNS_CHECK', false)) {
|
|
65
|
+
this.logger.debug('SFDX_DISABLE_DNS_CHECK set to true. Skipping DNS check...');
|
|
66
|
+
return this.options.url.host;
|
|
67
|
+
}
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
69
|
+
const self = this;
|
|
70
|
+
const pollingOptions = {
|
|
71
|
+
async poll() {
|
|
72
|
+
const { host } = self.options.url;
|
|
73
|
+
let dnsResult;
|
|
74
|
+
try {
|
|
75
|
+
self.logger.debug(`Attempting to resolve url: ${host}`);
|
|
76
|
+
if (new sfdcUrl_1.SfdcUrl(self.options.url).isLocalUrl()) {
|
|
77
|
+
return {
|
|
78
|
+
completed: true,
|
|
79
|
+
payload: '127.0.0.1',
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
dnsResult = await (0, util_1.promisify)(dns_1.lookup)(host);
|
|
83
|
+
self.logger.debug(`Successfully resolved host: ${host} result: ${JSON.stringify(dnsResult)}`);
|
|
84
|
+
return {
|
|
85
|
+
completed: true,
|
|
86
|
+
payload: dnsResult.address,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
self.logger.debug(`An error occurred trying to resolve: ${host}`);
|
|
91
|
+
self.logger.debug(`Error: ${e.message}`);
|
|
92
|
+
self.logger.debug('Re-trying dns lookup again....');
|
|
93
|
+
return {
|
|
94
|
+
completed: false,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
timeout: this.getTimeout(),
|
|
99
|
+
frequency: this.getFrequency(),
|
|
100
|
+
timeoutErrorName: 'MyDomainResolverTimeoutError',
|
|
101
|
+
};
|
|
102
|
+
const client = await pollingClient_1.PollingClient.create(pollingOptions);
|
|
103
|
+
return (0, ts_types_1.ensureString)(await client.subscribe());
|
|
104
|
+
}
|
|
105
|
+
async getCnames() {
|
|
106
|
+
try {
|
|
107
|
+
await this.resolve();
|
|
108
|
+
return await (0, util_1.promisify)(dns_1.resolveCname)(this.options.url.host);
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
this.logger.debug(`An error occurred trying to resolve: ${this.options.url.host}`);
|
|
112
|
+
this.logger.debug(`Error: ${e.message}`);
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Used to initialize asynchronous components.
|
|
118
|
+
*/
|
|
119
|
+
async init() {
|
|
120
|
+
this.logger = await logger_1.Logger.child('MyDomainResolver');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.MyDomainResolver = MyDomainResolver;
|
|
124
|
+
MyDomainResolver.DEFAULT_DOMAIN = new url_1.URL('https://login.salesforce.com');
|
|
125
125
|
//# sourceMappingURL=myDomainResolver.js.map
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
import { AsyncOptionalCreatable, Duration } from '@salesforce/kit';
|
|
2
|
-
import { AnyJson } from '@salesforce/ts-types';
|
|
3
|
-
import { Logger } from '../logger';
|
|
4
|
-
import { StatusResult } from './types';
|
|
5
|
-
/**
|
|
6
|
-
* This is a polling client that can be used to poll the status of long running tasks. It can be used as a replacement
|
|
7
|
-
* for Streaming when streaming topics are not available or when streaming handshakes are failing. Why wouldn't you
|
|
8
|
-
* want to use this? It can impact Salesforce API usage.
|
|
9
|
-
*
|
|
10
|
-
* ```
|
|
11
|
-
* const options: PollingClient.Options = {
|
|
12
|
-
* async poll(): Promise<StatusResult> {
|
|
13
|
-
* return Promise.resolve({ completed: true, payload: 'Hello World' });
|
|
14
|
-
* },
|
|
15
|
-
* frequency: Duration.milliseconds(10),
|
|
16
|
-
* timeout: Duration.minutes(1)
|
|
17
|
-
* };
|
|
18
|
-
* const client = await PollingClient.create(options);
|
|
19
|
-
* const pollResult = await client.subscribe();
|
|
20
|
-
* console.log(`pollResult: ${pollResult}`);
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export declare class PollingClient extends AsyncOptionalCreatable<PollingClient.Options> {
|
|
24
|
-
protected logger: Logger;
|
|
25
|
-
private options;
|
|
26
|
-
/**
|
|
27
|
-
* Constructor
|
|
28
|
-
*
|
|
29
|
-
* @param options Polling client options
|
|
30
|
-
* @ignore
|
|
31
|
-
*/
|
|
32
|
-
constructor(options?: PollingClient.Options);
|
|
33
|
-
/**
|
|
34
|
-
* Asynchronous initializer.
|
|
35
|
-
*/
|
|
36
|
-
init(): Promise<void>;
|
|
37
|
-
/**
|
|
38
|
-
* Returns a promise to call the specified polling function using the interval and timeout specified
|
|
39
|
-
* in the polling options.
|
|
40
|
-
*/
|
|
41
|
-
subscribe<T = AnyJson>(): Promise<T>;
|
|
42
|
-
}
|
|
43
|
-
export declare namespace PollingClient {
|
|
44
|
-
/**
|
|
45
|
-
* Options for the polling client.
|
|
46
|
-
*/
|
|
47
|
-
interface Options {
|
|
48
|
-
/**
|
|
49
|
-
* Polling function.
|
|
50
|
-
*/
|
|
51
|
-
poll: () => Promise<StatusResult>;
|
|
52
|
-
/**
|
|
53
|
-
* How frequent should the polling function be called.
|
|
54
|
-
*/
|
|
55
|
-
frequency: Duration;
|
|
56
|
-
/**
|
|
57
|
-
* Hard timeout for polling.
|
|
58
|
-
*/
|
|
59
|
-
timeout: Duration;
|
|
60
|
-
/**
|
|
61
|
-
* Change the name of the timeout error.
|
|
62
|
-
*
|
|
63
|
-
* ```
|
|
64
|
-
* if (err.name === 'MyChangedName) ...
|
|
65
|
-
* ```
|
|
66
|
-
*/
|
|
67
|
-
timeoutErrorName?: string;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Default options set for polling. The default options specify a timeout of 3 minutes and polling frequency of 15
|
|
71
|
-
* seconds;
|
|
72
|
-
*/
|
|
73
|
-
class DefaultPollingOptions implements PollingClient.Options {
|
|
74
|
-
frequency: Duration;
|
|
75
|
-
poll: () => Promise<StatusResult>;
|
|
76
|
-
timeout: Duration;
|
|
77
|
-
/**
|
|
78
|
-
* constructor
|
|
79
|
-
*
|
|
80
|
-
* @param poll The function used for polling status.
|
|
81
|
-
* {@link StatusResult}
|
|
82
|
-
*/
|
|
83
|
-
constructor(poll: () => Promise<StatusResult>);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
1
|
+
import { AsyncOptionalCreatable, Duration } from '@salesforce/kit';
|
|
2
|
+
import { AnyJson } from '@salesforce/ts-types';
|
|
3
|
+
import { Logger } from '../logger';
|
|
4
|
+
import { StatusResult } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* This is a polling client that can be used to poll the status of long running tasks. It can be used as a replacement
|
|
7
|
+
* for Streaming when streaming topics are not available or when streaming handshakes are failing. Why wouldn't you
|
|
8
|
+
* want to use this? It can impact Salesforce API usage.
|
|
9
|
+
*
|
|
10
|
+
* ```
|
|
11
|
+
* const options: PollingClient.Options = {
|
|
12
|
+
* async poll(): Promise<StatusResult> {
|
|
13
|
+
* return Promise.resolve({ completed: true, payload: 'Hello World' });
|
|
14
|
+
* },
|
|
15
|
+
* frequency: Duration.milliseconds(10),
|
|
16
|
+
* timeout: Duration.minutes(1)
|
|
17
|
+
* };
|
|
18
|
+
* const client = await PollingClient.create(options);
|
|
19
|
+
* const pollResult = await client.subscribe();
|
|
20
|
+
* console.log(`pollResult: ${pollResult}`);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare class PollingClient extends AsyncOptionalCreatable<PollingClient.Options> {
|
|
24
|
+
protected logger: Logger;
|
|
25
|
+
private options;
|
|
26
|
+
/**
|
|
27
|
+
* Constructor
|
|
28
|
+
*
|
|
29
|
+
* @param options Polling client options
|
|
30
|
+
* @ignore
|
|
31
|
+
*/
|
|
32
|
+
constructor(options?: PollingClient.Options);
|
|
33
|
+
/**
|
|
34
|
+
* Asynchronous initializer.
|
|
35
|
+
*/
|
|
36
|
+
init(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Returns a promise to call the specified polling function using the interval and timeout specified
|
|
39
|
+
* in the polling options.
|
|
40
|
+
*/
|
|
41
|
+
subscribe<T = AnyJson>(): Promise<T>;
|
|
42
|
+
}
|
|
43
|
+
export declare namespace PollingClient {
|
|
44
|
+
/**
|
|
45
|
+
* Options for the polling client.
|
|
46
|
+
*/
|
|
47
|
+
interface Options {
|
|
48
|
+
/**
|
|
49
|
+
* Polling function.
|
|
50
|
+
*/
|
|
51
|
+
poll: () => Promise<StatusResult>;
|
|
52
|
+
/**
|
|
53
|
+
* How frequent should the polling function be called.
|
|
54
|
+
*/
|
|
55
|
+
frequency: Duration;
|
|
56
|
+
/**
|
|
57
|
+
* Hard timeout for polling.
|
|
58
|
+
*/
|
|
59
|
+
timeout: Duration;
|
|
60
|
+
/**
|
|
61
|
+
* Change the name of the timeout error.
|
|
62
|
+
*
|
|
63
|
+
* ```
|
|
64
|
+
* if (err.name === 'MyChangedName) ...
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
timeoutErrorName?: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Default options set for polling. The default options specify a timeout of 3 minutes and polling frequency of 15
|
|
71
|
+
* seconds;
|
|
72
|
+
*/
|
|
73
|
+
class DefaultPollingOptions implements PollingClient.Options {
|
|
74
|
+
frequency: Duration;
|
|
75
|
+
poll: () => Promise<StatusResult>;
|
|
76
|
+
timeout: Duration;
|
|
77
|
+
/**
|
|
78
|
+
* constructor
|
|
79
|
+
*
|
|
80
|
+
* @param poll The function used for polling status.
|
|
81
|
+
* {@link StatusResult}
|
|
82
|
+
*/
|
|
83
|
+
constructor(poll: () => Promise<StatusResult>);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -1,116 +1,116 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PollingClient = void 0;
|
|
4
|
-
/*
|
|
5
|
-
* Copyright (c) 2020, salesforce.com, inc.
|
|
6
|
-
* All rights reserved.
|
|
7
|
-
* Licensed under the BSD 3-Clause license.
|
|
8
|
-
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
9
|
-
*/
|
|
10
|
-
const kit_1 = require("@salesforce/kit");
|
|
11
|
-
const ts_types_1 = require("@salesforce/ts-types");
|
|
12
|
-
const ts_retry_promise_1 = require("ts-retry-promise");
|
|
13
|
-
const logger_1 = require("../logger");
|
|
14
|
-
const sfError_1 = require("../sfError");
|
|
15
|
-
const lifecycleEvents_1 = require("../lifecycleEvents");
|
|
16
|
-
/**
|
|
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
|
|
18
|
-
* for Streaming when streaming topics are not available or when streaming handshakes are failing. Why wouldn't you
|
|
19
|
-
* want to use this? It can impact Salesforce API usage.
|
|
20
|
-
*
|
|
21
|
-
* ```
|
|
22
|
-
* const options: PollingClient.Options = {
|
|
23
|
-
* async poll(): Promise<StatusResult> {
|
|
24
|
-
* return Promise.resolve({ completed: true, payload: 'Hello World' });
|
|
25
|
-
* },
|
|
26
|
-
* frequency: Duration.milliseconds(10),
|
|
27
|
-
* timeout: Duration.minutes(1)
|
|
28
|
-
* };
|
|
29
|
-
* const client = await PollingClient.create(options);
|
|
30
|
-
* const pollResult = await client.subscribe();
|
|
31
|
-
* console.log(`pollResult: ${pollResult}`);
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
class PollingClient extends kit_1.AsyncOptionalCreatable {
|
|
35
|
-
/**
|
|
36
|
-
* Constructor
|
|
37
|
-
*
|
|
38
|
-
* @param options Polling client options
|
|
39
|
-
* @ignore
|
|
40
|
-
*/
|
|
41
|
-
constructor(options) {
|
|
42
|
-
super(options);
|
|
43
|
-
this.options = (0, ts_types_1.ensure)(options);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Asynchronous initializer.
|
|
47
|
-
*/
|
|
48
|
-
async init() {
|
|
49
|
-
this.logger = await logger_1.Logger.child(this.constructor.name);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Returns a promise to call the specified polling function using the interval and timeout specified
|
|
53
|
-
* in the polling options.
|
|
54
|
-
*/
|
|
55
|
-
async subscribe() {
|
|
56
|
-
let errorInPollingFunction; // keep this around for returning in the catch block
|
|
57
|
-
const doPoll = async () => {
|
|
58
|
-
let result;
|
|
59
|
-
try {
|
|
60
|
-
result = await this.options.poll();
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
const err = (errorInPollingFunction = error);
|
|
64
|
-
if (['ETIMEDOUT', 'ENOTFOUND', 'ECONNRESET', 'socket hang up'].some((retryableNetworkError) => err.message.includes(retryableNetworkError))) {
|
|
65
|
-
this.logger.debug('Network error on the request', err);
|
|
66
|
-
await lifecycleEvents_1.Lifecycle.getInstance().emitWarning('Network error occurred. Continuing to poll.');
|
|
67
|
-
throw sfError_1.SfError.wrap(err);
|
|
68
|
-
}
|
|
69
|
-
// there was an actual error thrown, so we don't want to keep retrying
|
|
70
|
-
throw new ts_retry_promise_1.NotRetryableError(err.name);
|
|
71
|
-
}
|
|
72
|
-
if (result.completed) {
|
|
73
|
-
return result.payload;
|
|
74
|
-
}
|
|
75
|
-
throw new Error('Operation did not complete. Retrying...'); // triggers a retry
|
|
76
|
-
};
|
|
77
|
-
const finalResult = (0, ts_retry_promise_1.retryDecorator)(doPoll, {
|
|
78
|
-
timeout: this.options.timeout.milliseconds,
|
|
79
|
-
delay: this.options.frequency.milliseconds,
|
|
80
|
-
retries: 'INFINITELY',
|
|
81
|
-
});
|
|
82
|
-
try {
|
|
83
|
-
return await finalResult();
|
|
84
|
-
}
|
|
85
|
-
catch (error) {
|
|
86
|
-
if (errorInPollingFunction) {
|
|
87
|
-
throw errorInPollingFunction;
|
|
88
|
-
}
|
|
89
|
-
await lifecycleEvents_1.Lifecycle.getInstance().emit('POLLING_TIME_OUT', error);
|
|
90
|
-
this.logger.debug('Polling timed out');
|
|
91
|
-
throw new sfError_1.SfError('The client has timed out.', this.options.timeoutErrorName ?? 'PollingClientTimeout');
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
exports.PollingClient = PollingClient;
|
|
96
|
-
(function (PollingClient) {
|
|
97
|
-
/**
|
|
98
|
-
* Default options set for polling. The default options specify a timeout of 3 minutes and polling frequency of 15
|
|
99
|
-
* seconds;
|
|
100
|
-
*/
|
|
101
|
-
class DefaultPollingOptions {
|
|
102
|
-
/**
|
|
103
|
-
* constructor
|
|
104
|
-
*
|
|
105
|
-
* @param poll The function used for polling status.
|
|
106
|
-
* {@link StatusResult}
|
|
107
|
-
*/
|
|
108
|
-
constructor(poll) {
|
|
109
|
-
this.poll = poll;
|
|
110
|
-
this.timeout = kit_1.Duration.minutes(3);
|
|
111
|
-
this.frequency = kit_1.Duration.seconds(15);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
PollingClient.DefaultPollingOptions = DefaultPollingOptions;
|
|
115
|
-
})(PollingClient = exports.PollingClient || (exports.PollingClient = {}));
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PollingClient = void 0;
|
|
4
|
+
/*
|
|
5
|
+
* Copyright (c) 2020, salesforce.com, inc.
|
|
6
|
+
* All rights reserved.
|
|
7
|
+
* Licensed under the BSD 3-Clause license.
|
|
8
|
+
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
9
|
+
*/
|
|
10
|
+
const kit_1 = require("@salesforce/kit");
|
|
11
|
+
const ts_types_1 = require("@salesforce/ts-types");
|
|
12
|
+
const ts_retry_promise_1 = require("ts-retry-promise");
|
|
13
|
+
const logger_1 = require("../logger");
|
|
14
|
+
const sfError_1 = require("../sfError");
|
|
15
|
+
const lifecycleEvents_1 = require("../lifecycleEvents");
|
|
16
|
+
/**
|
|
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
|
|
18
|
+
* for Streaming when streaming topics are not available or when streaming handshakes are failing. Why wouldn't you
|
|
19
|
+
* want to use this? It can impact Salesforce API usage.
|
|
20
|
+
*
|
|
21
|
+
* ```
|
|
22
|
+
* const options: PollingClient.Options = {
|
|
23
|
+
* async poll(): Promise<StatusResult> {
|
|
24
|
+
* return Promise.resolve({ completed: true, payload: 'Hello World' });
|
|
25
|
+
* },
|
|
26
|
+
* frequency: Duration.milliseconds(10),
|
|
27
|
+
* timeout: Duration.minutes(1)
|
|
28
|
+
* };
|
|
29
|
+
* const client = await PollingClient.create(options);
|
|
30
|
+
* const pollResult = await client.subscribe();
|
|
31
|
+
* console.log(`pollResult: ${pollResult}`);
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
class PollingClient extends kit_1.AsyncOptionalCreatable {
|
|
35
|
+
/**
|
|
36
|
+
* Constructor
|
|
37
|
+
*
|
|
38
|
+
* @param options Polling client options
|
|
39
|
+
* @ignore
|
|
40
|
+
*/
|
|
41
|
+
constructor(options) {
|
|
42
|
+
super(options);
|
|
43
|
+
this.options = (0, ts_types_1.ensure)(options);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Asynchronous initializer.
|
|
47
|
+
*/
|
|
48
|
+
async init() {
|
|
49
|
+
this.logger = await logger_1.Logger.child(this.constructor.name);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns a promise to call the specified polling function using the interval and timeout specified
|
|
53
|
+
* in the polling options.
|
|
54
|
+
*/
|
|
55
|
+
async subscribe() {
|
|
56
|
+
let errorInPollingFunction; // keep this around for returning in the catch block
|
|
57
|
+
const doPoll = async () => {
|
|
58
|
+
let result;
|
|
59
|
+
try {
|
|
60
|
+
result = await this.options.poll();
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
const err = (errorInPollingFunction = error);
|
|
64
|
+
if (['ETIMEDOUT', 'ENOTFOUND', 'ECONNRESET', 'socket hang up'].some((retryableNetworkError) => err.message.includes(retryableNetworkError))) {
|
|
65
|
+
this.logger.debug('Network error on the request', err);
|
|
66
|
+
await lifecycleEvents_1.Lifecycle.getInstance().emitWarning('Network error occurred. Continuing to poll.');
|
|
67
|
+
throw sfError_1.SfError.wrap(err);
|
|
68
|
+
}
|
|
69
|
+
// there was an actual error thrown, so we don't want to keep retrying
|
|
70
|
+
throw new ts_retry_promise_1.NotRetryableError(err.name);
|
|
71
|
+
}
|
|
72
|
+
if (result.completed) {
|
|
73
|
+
return result.payload;
|
|
74
|
+
}
|
|
75
|
+
throw new Error('Operation did not complete. Retrying...'); // triggers a retry
|
|
76
|
+
};
|
|
77
|
+
const finalResult = (0, ts_retry_promise_1.retryDecorator)(doPoll, {
|
|
78
|
+
timeout: this.options.timeout.milliseconds,
|
|
79
|
+
delay: this.options.frequency.milliseconds,
|
|
80
|
+
retries: 'INFINITELY',
|
|
81
|
+
});
|
|
82
|
+
try {
|
|
83
|
+
return await finalResult();
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (errorInPollingFunction) {
|
|
87
|
+
throw errorInPollingFunction;
|
|
88
|
+
}
|
|
89
|
+
await lifecycleEvents_1.Lifecycle.getInstance().emit('POLLING_TIME_OUT', error);
|
|
90
|
+
this.logger.debug('Polling timed out');
|
|
91
|
+
throw new sfError_1.SfError('The client has timed out.', this.options.timeoutErrorName ?? 'PollingClientTimeout');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.PollingClient = PollingClient;
|
|
96
|
+
(function (PollingClient) {
|
|
97
|
+
/**
|
|
98
|
+
* Default options set for polling. The default options specify a timeout of 3 minutes and polling frequency of 15
|
|
99
|
+
* seconds;
|
|
100
|
+
*/
|
|
101
|
+
class DefaultPollingOptions {
|
|
102
|
+
/**
|
|
103
|
+
* constructor
|
|
104
|
+
*
|
|
105
|
+
* @param poll The function used for polling status.
|
|
106
|
+
* {@link StatusResult}
|
|
107
|
+
*/
|
|
108
|
+
constructor(poll) {
|
|
109
|
+
this.poll = poll;
|
|
110
|
+
this.timeout = kit_1.Duration.minutes(3);
|
|
111
|
+
this.frequency = kit_1.Duration.seconds(15);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
PollingClient.DefaultPollingOptions = DefaultPollingOptions;
|
|
115
|
+
})(PollingClient = exports.PollingClient || (exports.PollingClient = {}));
|
|
116
116
|
//# sourceMappingURL=pollingClient.js.map
|