@salesforce/lds-runtime-aura 1.447.1 → 1.449.0
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/dist/ldsEngineCreator.js
CHANGED
|
@@ -40,6 +40,7 @@ import lightningConnectEnabled from '@salesforce/gate/ui.services.LightningConne
|
|
|
40
40
|
import bypassAppRestrictionEnabled from '@salesforce/gate/ui.services.LightningConnect.BypassAppRestriction.enabled';
|
|
41
41
|
import csrfValidationEnabled from '@salesforce/gate/ui.services.LightningConnect.CsrfValidation.enabled';
|
|
42
42
|
import sessionApiEnabled from '@salesforce/gate/ui.uisdk.session.api.enabled';
|
|
43
|
+
import auraBasedRequestsEnabled from '@salesforce/gate/ui.services.auraBasedRequests.enabled';
|
|
43
44
|
import useHttpUiapiOneAppPublic from '@salesforce/gate/lds.useHttpUiapiOneAppPublic';
|
|
44
45
|
import useHttpUiapiOneAppPrivate from '@salesforce/gate/lds.useHttpUiapiOneAppPrivate';
|
|
45
46
|
import useHttpUiapiOneRuntimePublic from '@salesforce/gate/lds.useHttpUiapiOneRuntimePublic';
|
|
@@ -401,6 +402,7 @@ class AuraNetworkCommand extends NetworkCommand$1 {
|
|
|
401
402
|
storable: false
|
|
402
403
|
};
|
|
403
404
|
this.networkPreference = "aura";
|
|
405
|
+
this.additionalNullResponses = [];
|
|
404
406
|
}
|
|
405
407
|
get fetchParams() {
|
|
406
408
|
throw new Error(
|
|
@@ -438,14 +440,37 @@ class AuraNetworkCommand extends NetworkCommand$1 {
|
|
|
438
440
|
return err$1(toError("Error fetching component"));
|
|
439
441
|
});
|
|
440
442
|
}
|
|
443
|
+
isSemanticNullResponse(response) {
|
|
444
|
+
return this.additionalNullResponses.includes(response.status);
|
|
445
|
+
}
|
|
446
|
+
isProtocolNoBodyStatus(status) {
|
|
447
|
+
return status === 204 || status === 205;
|
|
448
|
+
}
|
|
449
|
+
isUndeclaredNoBodyResponse(response) {
|
|
450
|
+
return this.isProtocolNoBodyStatus(response.status) && !this.isSemanticNullResponse(response);
|
|
451
|
+
}
|
|
441
452
|
convertFetchResponseToData(response) {
|
|
442
453
|
return response.then(
|
|
443
454
|
(response2) => {
|
|
444
455
|
if (response2.ok) {
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
456
|
+
let resultPromise;
|
|
457
|
+
if (this.isSemanticNullResponse(response2)) {
|
|
458
|
+
resultPromise = Promise.resolve(ok$2(null));
|
|
459
|
+
} else if (this.isUndeclaredNoBodyResponse(response2)) {
|
|
460
|
+
resultPromise = Promise.resolve(
|
|
461
|
+
err$1(
|
|
462
|
+
toError(
|
|
463
|
+
`Unexpected ${response2.status} response: no-content status was not declared in the API specification. Declare this response in your OAS without a content property.`
|
|
464
|
+
)
|
|
465
|
+
)
|
|
466
|
+
);
|
|
467
|
+
} else {
|
|
468
|
+
resultPromise = response2.json().then(
|
|
469
|
+
(json) => ok$2(json),
|
|
470
|
+
(reason) => err$1(toError(reason))
|
|
471
|
+
);
|
|
472
|
+
}
|
|
473
|
+
return resultPromise.finally(() => {
|
|
449
474
|
try {
|
|
450
475
|
this.afterRequestHooks({ statusCode: response2.status });
|
|
451
476
|
} catch {
|
|
@@ -474,7 +499,14 @@ class AuraNetworkCommand extends NetworkCommand$1 {
|
|
|
474
499
|
fetch() {
|
|
475
500
|
if (this.shouldUseAuraNetwork()) {
|
|
476
501
|
return this.convertAuraResponseToData(
|
|
477
|
-
|
|
502
|
+
// The Aura transport is untyped at the network boundary (getReturnValue: () =>
|
|
503
|
+
// Record<string, unknown>); assert it to this command's concrete Data here so the
|
|
504
|
+
// untyped boundary is isolated to this single site rather than leaking `any`.
|
|
505
|
+
this.services.auraNetwork(
|
|
506
|
+
this.endpoint,
|
|
507
|
+
this.auraParams,
|
|
508
|
+
this.actionConfig
|
|
509
|
+
),
|
|
478
510
|
this.coerceAuraErrors
|
|
479
511
|
);
|
|
480
512
|
} else if (this.shouldUseFetch()) {
|
|
@@ -1070,8 +1102,13 @@ class AuraCacheControlCommand extends CacheControlCommand {
|
|
|
1070
1102
|
}
|
|
1071
1103
|
requestFromNetwork() {
|
|
1072
1104
|
if (this.shouldUseAuraNetwork()) {
|
|
1105
|
+
const responsePromise = this.services.auraNetwork(
|
|
1106
|
+
this.endpoint,
|
|
1107
|
+
this.auraParams,
|
|
1108
|
+
this.actionConfig
|
|
1109
|
+
);
|
|
1073
1110
|
return this.convertAuraResponseToData(
|
|
1074
|
-
|
|
1111
|
+
responsePromise,
|
|
1075
1112
|
(errs) => this.coerceAuraErrors(errs)
|
|
1076
1113
|
);
|
|
1077
1114
|
} else if (this.shouldUseFetch()) {
|
|
@@ -1724,6 +1761,14 @@ class O11ySpan {
|
|
|
1724
1761
|
this.attributes = { ...this.attributes, ...attributes };
|
|
1725
1762
|
return this;
|
|
1726
1763
|
}
|
|
1764
|
+
addLink(_link) {
|
|
1765
|
+
this.logger.warn("O11ySpan does not support addLink.");
|
|
1766
|
+
return this;
|
|
1767
|
+
}
|
|
1768
|
+
addLinks(_links) {
|
|
1769
|
+
this.logger.warn("O11ySpan does not support addLinks.");
|
|
1770
|
+
return this;
|
|
1771
|
+
}
|
|
1727
1772
|
addEvent(_name, _attributesOrStartTime, _startTime) {
|
|
1728
1773
|
this.logger.warn("O11ySpan does not support addEvents.");
|
|
1729
1774
|
return this;
|
|
@@ -1783,6 +1828,9 @@ class O11yMeter {
|
|
|
1783
1828
|
}
|
|
1784
1829
|
return new O11yCounter(name, this.o11yInstrumentation, this.logger);
|
|
1785
1830
|
}
|
|
1831
|
+
createGauge(_name, _options) {
|
|
1832
|
+
return new O11yGauge(this.logger);
|
|
1833
|
+
}
|
|
1786
1834
|
createUpDownCounter(_name, _options) {
|
|
1787
1835
|
return new O11yUpDownCounter(this.logger);
|
|
1788
1836
|
}
|
|
@@ -1840,6 +1888,14 @@ class O11yHistogram {
|
|
|
1840
1888
|
);
|
|
1841
1889
|
}
|
|
1842
1890
|
}
|
|
1891
|
+
class O11yGauge {
|
|
1892
|
+
constructor(logger) {
|
|
1893
|
+
this.logger = logger;
|
|
1894
|
+
}
|
|
1895
|
+
record(_value, _attributes, _context) {
|
|
1896
|
+
this.logger.warn("O11yGauge not supported yet.");
|
|
1897
|
+
}
|
|
1898
|
+
}
|
|
1843
1899
|
class O11yUpDownCounter {
|
|
1844
1900
|
constructor(logger) {
|
|
1845
1901
|
this.logger = logger;
|
|
@@ -2535,7 +2591,7 @@ function buildServiceDescriptor$d(luvio) {
|
|
|
2535
2591
|
},
|
|
2536
2592
|
};
|
|
2537
2593
|
}
|
|
2538
|
-
// version: 1.
|
|
2594
|
+
// version: 1.449.0-83e1fb14eb
|
|
2539
2595
|
|
|
2540
2596
|
class AuraGraphQLNormalizedCacheControlCommand extends AuraNormalizedCacheControlCommand {
|
|
2541
2597
|
constructor(config, documentRootType, services) {
|
|
@@ -2682,6 +2738,7 @@ class AuraGraphQLNormalizedCacheControlCommand extends AuraNormalizedCacheContro
|
|
|
2682
2738
|
}
|
|
2683
2739
|
return addTypenameToDocument(augmentedQueryResult.value);
|
|
2684
2740
|
}
|
|
2741
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- load-bearing: GraphQLResponse.data is `Record<string,any> | null | undefined`, but WriteInput<Data>.data requires `Data`. Narrowing the Data arg to GraphQLData yields TS2322 at the return (`data.data` includes null|undefined; tests write `data: undefined` for error responses — see error-handling spec). The `any` faithfully models that the cache write accepts the nullable response payload. Same #870 GraphQLData/GraphQLResponse contravariance family.
|
|
2685
2742
|
buildWriteInput(data) {
|
|
2686
2743
|
const extensionResult = buildGraphQLInputExtension({
|
|
2687
2744
|
...this.config,
|
|
@@ -2873,7 +2930,7 @@ function buildServiceDescriptor$9(notifyRecordUpdateAvailable, getNormalizedLuvi
|
|
|
2873
2930
|
},
|
|
2874
2931
|
};
|
|
2875
2932
|
}
|
|
2876
|
-
// version: 1.
|
|
2933
|
+
// version: 1.449.0-83e1fb14eb
|
|
2877
2934
|
|
|
2878
2935
|
class RetryService {
|
|
2879
2936
|
constructor(defaultRetryPolicy) {
|
|
@@ -5765,7 +5822,7 @@ function getEnvironmentSetting(name) {
|
|
|
5765
5822
|
}
|
|
5766
5823
|
return undefined;
|
|
5767
5824
|
}
|
|
5768
|
-
// version: 1.
|
|
5825
|
+
// version: 1.449.0-7b415dc950
|
|
5769
5826
|
|
|
5770
5827
|
/**
|
|
5771
5828
|
* Helpers for reaching the Aura framework from the LDS Aura runtime.
|
|
@@ -6374,16 +6431,21 @@ async function getCsrfToken() {
|
|
|
6374
6431
|
}
|
|
6375
6432
|
}
|
|
6376
6433
|
/**
|
|
6377
|
-
* Checks if all
|
|
6434
|
+
* Checks if all server-side UiSdk gates required for the HTTP UIAPI path are
|
|
6435
|
+
* open. These mirror the gates core evaluates when accepting a SID-based
|
|
6436
|
+
* (first-party) Connect request; the CSRF token is only attached when all are
|
|
6437
|
+
* open. All are required OPEN — `auraBasedRequests` expands the set of
|
|
6438
|
+
* Connect resources reachable over HTTP, it is not an aura-vs-http toggle.
|
|
6378
6439
|
*
|
|
6379
6440
|
* @returns true if all gates are enabled, false otherwise
|
|
6380
6441
|
*/
|
|
6381
|
-
function
|
|
6442
|
+
function areHttpGatesEnabled() {
|
|
6382
6443
|
try {
|
|
6383
6444
|
return (lightningConnectEnabled.isOpen({ fallback: false }) &&
|
|
6384
6445
|
bypassAppRestrictionEnabled.isOpen({ fallback: false }) &&
|
|
6385
6446
|
csrfValidationEnabled.isOpen({ fallback: false }) &&
|
|
6386
|
-
sessionApiEnabled.isOpen({ fallback: false })
|
|
6447
|
+
sessionApiEnabled.isOpen({ fallback: false }) &&
|
|
6448
|
+
auraBasedRequestsEnabled.isOpen({ fallback: false }));
|
|
6387
6449
|
}
|
|
6388
6450
|
catch (error) {
|
|
6389
6451
|
// If any gate check fails, disable CSRF interceptor
|
|
@@ -6417,7 +6479,7 @@ function isCsrfMethod(method) {
|
|
|
6417
6479
|
function buildCsrfTokenInterceptor() {
|
|
6418
6480
|
return async (fetchArgs) => {
|
|
6419
6481
|
// Check if all required gates are enabled before running
|
|
6420
|
-
if (!
|
|
6482
|
+
if (!areHttpGatesEnabled()) {
|
|
6421
6483
|
return resolvedPromiseLike$2(fetchArgs);
|
|
6422
6484
|
}
|
|
6423
6485
|
const [urlOrRequest, options] = fetchArgs;
|
|
@@ -6450,7 +6512,7 @@ function buildCsrfTokenInterceptor() {
|
|
|
6450
6512
|
function buildLuvioCsrfTokenInterceptor() {
|
|
6451
6513
|
return async (resourceRequest) => {
|
|
6452
6514
|
// Check if all required gates are enabled before running
|
|
6453
|
-
if (!
|
|
6515
|
+
if (!areHttpGatesEnabled()) {
|
|
6454
6516
|
return resolvedPromiseLike$2(resourceRequest);
|
|
6455
6517
|
}
|
|
6456
6518
|
// Ensure headers object exists
|
|
@@ -7561,6 +7623,26 @@ function buildJwtParameterizationInterceptor(jwtManager, jwtRequestModifier = (_
|
|
|
7561
7623
|
}
|
|
7562
7624
|
|
|
7563
7625
|
const SFAP_BASE_URL = 'api.salesforce.com';
|
|
7626
|
+
// The fetch-service tag the Data360 (direct-to-Data Cloud) custom command binds
|
|
7627
|
+
// to. Distinct from SFAP's `sfap_api` so the Data360 host-rewrite interceptor only
|
|
7628
|
+
// ever runs for that command — zero blast radius on the SFAP fleet.
|
|
7629
|
+
//
|
|
7630
|
+
// The tag is deliberately named after the *mechanism* (the `cdp_url` host rewrite),
|
|
7631
|
+
// not a capability, because this whole descriptor is interim: it exists only while
|
|
7632
|
+
// the mint service returns the fixed SFAP `baseUri` regardless of platform. When the
|
|
7633
|
+
// service returns the correct per-platform `baseUri`, the data 360 route can be re-evaluated.
|
|
7634
|
+
// This mechanism is NOT intended to be re-used outside of this initial context.
|
|
7635
|
+
// This is a client-side routing key only.
|
|
7636
|
+
const DATA_360_CDP_URL_REWRITE_AUTH_SCOPE = 'data_360_cdp_url_rewrite';
|
|
7637
|
+
// The minted-JWT claim carrying the Data Cloud tenant-specific endpoint (TSE).
|
|
7638
|
+
// The server's `SFAPJwtClaimHandlerImpl` emits it for CDP-provisioned orgs as a
|
|
7639
|
+
// verbatim passthrough of `DataCloudTenant.getApiEndpoint()` — no normalization.
|
|
7640
|
+
// The exact FORM therefore varies and must not be assumed: it may be a bare host
|
|
7641
|
+
// (`<host>`) or a full URL with scheme (`<scheme>://<host>`), and the host suffix
|
|
7642
|
+
// (`<domain-suffix>`) is environment-dependent — it differs per deployment
|
|
7643
|
+
// environment. This is why the interceptor strips any scheme before parsing
|
|
7644
|
+
// and applies no host-suffix policy — see the interceptor docblock's trust boundary.
|
|
7645
|
+
const CDP_URL_CLAIM = 'cdp_url';
|
|
7564
7646
|
function buildDispatchingSfapJwtResolver(legacyResolver, parameterizedResolver) {
|
|
7565
7647
|
return {
|
|
7566
7648
|
getJwt(params) {
|
|
@@ -7604,6 +7686,40 @@ function buildJwtAuthorizedSfapFetchServiceDescriptor(logger) {
|
|
|
7604
7686
|
tags: { authenticationScopes: 'sfap_api' },
|
|
7605
7687
|
};
|
|
7606
7688
|
}
|
|
7689
|
+
/**
|
|
7690
|
+
* Returns a service descriptor for the **direct-to-Data360** custom command
|
|
7691
|
+
* (CDP Query v3, host `*.c360a.salesforce.com`).
|
|
7692
|
+
*
|
|
7693
|
+
* Unlike SFAP, the per-tenant base host is NOT returned in the mint response's
|
|
7694
|
+
* `baseUri` (which is the fixed SFAP host); it rides on the minted JWT as the
|
|
7695
|
+
* `cdp_url` claim. The standard `JwtRequestModifier` only receives `extraInfo`,
|
|
7696
|
+
* never the decoded claims, so the host rewrite cannot be expressed as a modifier
|
|
7697
|
+
* — it must read the token directly. This descriptor therefore uses a bespoke
|
|
7698
|
+
* interceptor ({@link buildData360HostRewriteInterceptor}) that mints the
|
|
7699
|
+
* parameterized SFAP JWT, attaches the Bearer token, decodes `cdp_url`, and
|
|
7700
|
+
* rewrites the request host to that TSE.
|
|
7701
|
+
*
|
|
7702
|
+
* It reuses the module's `sfapJwtManager`: `cdp_url` is emitted on the same
|
|
7703
|
+
* `SFAP_API`-scope JWT, so the Data360 command mints the same kind of token — it
|
|
7704
|
+
* just forwards the data-cloud scopes via the context-seed `jwtMintParams`.
|
|
7705
|
+
*
|
|
7706
|
+
* Gated behind its own `data_360_cdp_url_rewrite` auth-scope tag so it binds ONLY to
|
|
7707
|
+
* the Data360 command — the SFAP fleet never flows past this interceptor.
|
|
7708
|
+
*/
|
|
7709
|
+
function buildJwtAuthorizedData360FetchServiceDescriptor(logger) {
|
|
7710
|
+
const data360FetchService = buildServiceDescriptor$2({
|
|
7711
|
+
createContext: createInstrumentationIdContext(),
|
|
7712
|
+
request: [
|
|
7713
|
+
buildThirdPartyTrackerRegisterInterceptor(),
|
|
7714
|
+
buildData360HostRewriteInterceptor(logger),
|
|
7715
|
+
],
|
|
7716
|
+
finally: [buildThirdPartyTrackerFinishInterceptor()],
|
|
7717
|
+
});
|
|
7718
|
+
return {
|
|
7719
|
+
...data360FetchService,
|
|
7720
|
+
tags: { authenticationScopes: DATA_360_CDP_URL_REWRITE_AUTH_SCOPE },
|
|
7721
|
+
};
|
|
7722
|
+
}
|
|
7607
7723
|
/**
|
|
7608
7724
|
* Returns a service descriptor for a fetch service that includes one-off copilot
|
|
7609
7725
|
* hacks. This fetch service is not intended for use by anything other than
|
|
@@ -7704,6 +7820,74 @@ function buildSfapJwtRequestModifier(logger) {
|
|
|
7704
7820
|
function buildJwtRequestInterceptor(logger) {
|
|
7705
7821
|
return buildJwtRequestHeaderInterceptor(sfapJwtManager, buildSfapJwtRequestModifier(logger));
|
|
7706
7822
|
}
|
|
7823
|
+
/**
|
|
7824
|
+
* Request interceptor for the direct-to-Data360 command. It cannot use the
|
|
7825
|
+
* standard `JwtRequestModifier` seam because the tenant host is a JWT *claim*
|
|
7826
|
+
* (`cdp_url`), and modifiers only receive `extraInfo`. So — like the copilot
|
|
7827
|
+
* interceptor that reads `decodedInfo.iss` — it holds the token directly:
|
|
7828
|
+
*
|
|
7829
|
+
* 1. Read the command's `jwtMintParams` off the per-request context seed and
|
|
7830
|
+
* mint (via the parameterized SFAP resolver, routed by the dispatching
|
|
7831
|
+
* resolver inside `sfapJwtManager`). Without mint params there is no token
|
|
7832
|
+
* to authorize with, so leave the request untouched.
|
|
7833
|
+
* 2. Decode `cdp_url` from the JWT and resolve the tenant-specific endpoint
|
|
7834
|
+
* (TSE). `cdp_url` is a bare host, so a scheme is prepended before parsing
|
|
7835
|
+
* and the protocol is forced to `https:`.
|
|
7836
|
+
* 3. Only after a usable `cdp_url` is confirmed, attach `Authorization: Bearer
|
|
7837
|
+
* <jwt>` and rewrite the request URL's host/protocol to the TSE.
|
|
7838
|
+
*
|
|
7839
|
+
* **Trust boundary.** `cdp_url` is a claim on a first-party, server-minted JWT
|
|
7840
|
+
* delivered over the same-origin Aura transport, so the interceptor does NOT police
|
|
7841
|
+
* its contents (no host-suffix or format allowlist) — the routing host is the
|
|
7842
|
+
* minting service's responsibility, and this mirrors the SFAP sibling, which
|
|
7843
|
+
* likewise trusts the server-provided `baseUri` rewrite target. The one guard that
|
|
7844
|
+
* remains is shape hygiene: if `cdp_url` is absent/empty/non-string (org not
|
|
7845
|
+
* CDP-provisioned, so the server's claim gate did not fire) the interceptor throws
|
|
7846
|
+
* a developer-facing error instead of an opaque parse failure. A minted token is
|
|
7847
|
+
* never attached until a usable host is in hand.
|
|
7848
|
+
*/
|
|
7849
|
+
function buildData360HostRewriteInterceptor(logger) {
|
|
7850
|
+
return (fetchArgs, context) => {
|
|
7851
|
+
const mintParams = context?.[JWT_MINT_PARAMS_SEED_KEY];
|
|
7852
|
+
// No mint params → not a parameterized Data360 request. Nothing to do.
|
|
7853
|
+
if (mintParams === undefined) {
|
|
7854
|
+
return resolvedPromiseLike$2(fetchArgs);
|
|
7855
|
+
}
|
|
7856
|
+
return resolvedPromiseLike$2(sfapJwtManager.getJwt(mintParams)).then((token) => {
|
|
7857
|
+
const [resource, request] = fetchArgs;
|
|
7858
|
+
if (typeof resource !== 'string' && !(resource instanceof URL)) {
|
|
7859
|
+
// istanbul ignore else: not exercised under NODE_ENV=production
|
|
7860
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
7861
|
+
throw new Error('Data360 fetch service expects a string or URL resource');
|
|
7862
|
+
}
|
|
7863
|
+
return fetchArgs;
|
|
7864
|
+
}
|
|
7865
|
+
const cdpUrl = token.decodedInfo?.[CDP_URL_CLAIM];
|
|
7866
|
+
// Require a non-empty string. This is shape hygiene, NOT a content
|
|
7867
|
+
// policy: the routing host is the minting service's responsibility, and
|
|
7868
|
+
// we deliberately do not couple to its contents (no host-suffix/format
|
|
7869
|
+
// check — the SFAP sibling likewise trusts its server-provided rewrite
|
|
7870
|
+
// target). We only confirm we were handed a usable host string; a
|
|
7871
|
+
// missing/empty/non-string claim (org not Data Cloud provisioned, so the
|
|
7872
|
+
// server's claim gate did not fire) fails with a clear error rather than
|
|
7873
|
+
// an opaque `new URL` TypeError. The `typeof` check also narrows `cdpUrl`
|
|
7874
|
+
// to `string` for the `.replace` below.
|
|
7875
|
+
if (typeof cdpUrl !== 'string' || cdpUrl.length === 0) {
|
|
7876
|
+
logger.warn(`Data360 fetch service: minted JWT has no usable "${CDP_URL_CLAIM}" claim. The org may not be Data Cloud provisioned.`);
|
|
7877
|
+
throw new Error(`Data360 fetch service: minted JWT has no usable "${CDP_URL_CLAIM}" claim; cannot route the request to a Data Cloud tenant endpoint.`);
|
|
7878
|
+
}
|
|
7879
|
+
// `cdp_url` is a bare host (no scheme); prepend https so `new URL`
|
|
7880
|
+
// parses it as an origin. Force https regardless of any scheme in the
|
|
7881
|
+
// claim — the TSE is always TLS.
|
|
7882
|
+
const tse = new URL(`https://${cdpUrl.replace(/^[a-z]+:\/\//i, '')}`);
|
|
7883
|
+
const authorizedArgs = setHeaderAuthorization(token, [resource, request]);
|
|
7884
|
+
const url = typeof resource === 'string' ? new URL(resource) : new URL(resource.toString());
|
|
7885
|
+
url.host = tse.host;
|
|
7886
|
+
url.protocol = 'https:';
|
|
7887
|
+
return [url, authorizedArgs[1]];
|
|
7888
|
+
});
|
|
7889
|
+
};
|
|
7890
|
+
}
|
|
7707
7891
|
/**
|
|
7708
7892
|
* Wraps the legacy `buildJwtRequestHeaderInterceptor` with a pass-through guard:
|
|
7709
7893
|
* when the parameterized interceptor has already authorized the request (an
|
|
@@ -11234,16 +11418,18 @@ function initializeOneStore(luvio) {
|
|
|
11234
11418
|
};
|
|
11235
11419
|
// set flags based on gates
|
|
11236
11420
|
featureFlagsService.set('useOneStoreGraphQL', useOneStoreGraphql.isOpen({ fallback: false }));
|
|
11237
|
-
//
|
|
11238
|
-
//
|
|
11239
|
-
//
|
|
11240
|
-
//
|
|
11241
|
-
|
|
11421
|
+
// Use the Aura transport for the OneStore GraphQL command by default. The
|
|
11422
|
+
// HTTP transport's CSRF handling is broken on Aura/Experience sites
|
|
11423
|
+
// (W-23092947), and defaulting to Aura keeps a single, known-good transport
|
|
11424
|
+
// across LEX and sites. Paired with the HTTP UIAPI fetch path being
|
|
11425
|
+
// disabled on sites (see network-fetch.ts).
|
|
11426
|
+
featureFlagsService.set('graphQLUseAura', true);
|
|
11242
11427
|
const services = [
|
|
11243
11428
|
instrumentationServiceDescriptor,
|
|
11244
11429
|
buildLexRuntimeDefaultFetchServiceDescriptor(loggerService, retryService),
|
|
11245
11430
|
buildUnauthorizedFetchServiceDescriptor(),
|
|
11246
11431
|
buildJwtAuthorizedSfapFetchServiceDescriptor(loggerService),
|
|
11432
|
+
buildJwtAuthorizedData360FetchServiceDescriptor(loggerService),
|
|
11247
11433
|
buildCopilotFetchServiceDescriptor(loggerService),
|
|
11248
11434
|
buildAuraNetworkService(),
|
|
11249
11435
|
buildServiceDescriptor$j(instrumentationServiceDescriptor.service),
|
|
@@ -11298,4 +11484,4 @@ function ldsEngineCreator() {
|
|
|
11298
11484
|
}
|
|
11299
11485
|
|
|
11300
11486
|
export { LexRequestStrategy, PdlPrefetcherEventType, PdlRequestPriority, buildPredictorForContext, configService, ldsEngineCreator as default, initializeLDS, initializeOneStore, notifyUpdateAvailableFactory, registerRequestStrategy, saveRequestAsPrediction, subscribeToPrefetcherEvents, unregisterRequestStrategy, whenPredictionsReady };
|
|
11301
|
-
// version: 1.
|
|
11487
|
+
// version: 1.449.0-83e1fb14eb
|
|
@@ -5,6 +5,27 @@ import { type LoggerService } from '@conduit-client/utils';
|
|
|
5
5
|
export declare function buildDispatchingSfapJwtResolver(legacyResolver: JwtResolver<ExtraInfo>, parameterizedResolver: JwtResolver<ExtraInfo>): JwtResolver<ExtraInfo>;
|
|
6
6
|
export declare function prefetchSfapJwt(): Promise<undefined>;
|
|
7
7
|
export declare function buildJwtAuthorizedSfapFetchServiceDescriptor(logger: LoggerService): FetchServiceDescriptor;
|
|
8
|
+
/**
|
|
9
|
+
* Returns a service descriptor for the **direct-to-Data360** custom command
|
|
10
|
+
* (CDP Query v3, host `*.c360a.salesforce.com`).
|
|
11
|
+
*
|
|
12
|
+
* Unlike SFAP, the per-tenant base host is NOT returned in the mint response's
|
|
13
|
+
* `baseUri` (which is the fixed SFAP host); it rides on the minted JWT as the
|
|
14
|
+
* `cdp_url` claim. The standard `JwtRequestModifier` only receives `extraInfo`,
|
|
15
|
+
* never the decoded claims, so the host rewrite cannot be expressed as a modifier
|
|
16
|
+
* — it must read the token directly. This descriptor therefore uses a bespoke
|
|
17
|
+
* interceptor ({@link buildData360HostRewriteInterceptor}) that mints the
|
|
18
|
+
* parameterized SFAP JWT, attaches the Bearer token, decodes `cdp_url`, and
|
|
19
|
+
* rewrites the request host to that TSE.
|
|
20
|
+
*
|
|
21
|
+
* It reuses the module's `sfapJwtManager`: `cdp_url` is emitted on the same
|
|
22
|
+
* `SFAP_API`-scope JWT, so the Data360 command mints the same kind of token — it
|
|
23
|
+
* just forwards the data-cloud scopes via the context-seed `jwtMintParams`.
|
|
24
|
+
*
|
|
25
|
+
* Gated behind its own `data_360_cdp_url_rewrite` auth-scope tag so it binds ONLY to
|
|
26
|
+
* the Data360 command — the SFAP fleet never flows past this interceptor.
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildJwtAuthorizedData360FetchServiceDescriptor(logger: LoggerService): FetchServiceDescriptor;
|
|
8
29
|
/**
|
|
9
30
|
* Returns a service descriptor for a fetch service that includes one-off copilot
|
|
10
31
|
* hacks. This fetch service is not intended for use by anything other than
|
|
@@ -47,4 +47,4 @@ export declare function hasAuthorizationHeader([resource, options]: FetchParamet
|
|
|
47
47
|
* @param jwtManager - the dispatching SFAP JwtManager
|
|
48
48
|
* @param jwtRequestModifier - applies the minted `extraInfo.baseUri` to the request URL
|
|
49
49
|
*/
|
|
50
|
-
export declare function buildJwtParameterizationInterceptor(jwtManager: JwtManager<unknown, ExtraInfo>, jwtRequestModifier?: JwtRequestModifier): RequestInterceptor;
|
|
50
|
+
export declare function buildJwtParameterizationInterceptor(jwtManager: JwtManager<unknown, ExtraInfo>, jwtRequestModifier?: JwtRequestModifier<ExtraInfo>): RequestInterceptor;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/lds-runtime-aura",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.449.0",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
5
5
|
"description": "LDS engine for Aura runtime.",
|
|
6
6
|
"main": "dist/ldsEngineCreator.js",
|
|
@@ -34,61 +34,61 @@
|
|
|
34
34
|
"release:corejar": "yarn build && ../core-build/scripts/core.js --name=lds-runtime-aura"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@conduit-client/service-provisioner": "3.
|
|
38
|
-
"@conduit-client/tools-core": "3.
|
|
39
|
-
"@salesforce/lds-adapters-apex": "^1.
|
|
40
|
-
"@salesforce/lds-adapters-uiapi": "^1.
|
|
41
|
-
"@salesforce/lds-ads-bridge": "^1.
|
|
42
|
-
"@salesforce/lds-aura-storage": "^1.
|
|
43
|
-
"@salesforce/lds-bindings": "^1.
|
|
44
|
-
"@salesforce/lds-instrumentation": "^1.
|
|
45
|
-
"@salesforce/lds-network-adapter": "^1.
|
|
46
|
-
"@salesforce/lds-network-aura": "^1.
|
|
47
|
-
"@salesforce/lds-network-fetch": "^1.
|
|
37
|
+
"@conduit-client/service-provisioner": "3.25.1",
|
|
38
|
+
"@conduit-client/tools-core": "3.25.1",
|
|
39
|
+
"@salesforce/lds-adapters-apex": "^1.449.0",
|
|
40
|
+
"@salesforce/lds-adapters-uiapi": "^1.449.0",
|
|
41
|
+
"@salesforce/lds-ads-bridge": "^1.449.0",
|
|
42
|
+
"@salesforce/lds-aura-storage": "^1.449.0",
|
|
43
|
+
"@salesforce/lds-bindings": "^1.449.0",
|
|
44
|
+
"@salesforce/lds-instrumentation": "^1.449.0",
|
|
45
|
+
"@salesforce/lds-network-adapter": "^1.449.0",
|
|
46
|
+
"@salesforce/lds-network-aura": "^1.449.0",
|
|
47
|
+
"@salesforce/lds-network-fetch": "^1.449.0",
|
|
48
48
|
"jwt-encode": "1.0.1"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@conduit-client/command-aura-graphql-normalized-cache-control": "3.
|
|
52
|
-
"@conduit-client/command-aura-network": "3.
|
|
53
|
-
"@conduit-client/command-aura-normalized-cache-control": "3.
|
|
54
|
-
"@conduit-client/command-fetch-network": "3.
|
|
55
|
-
"@conduit-client/command-http-graphql-normalized-cache-control": "3.
|
|
56
|
-
"@conduit-client/command-http-normalized-cache-control": "3.
|
|
57
|
-
"@conduit-client/command-ndjson": "3.
|
|
58
|
-
"@conduit-client/command-network": "3.
|
|
59
|
-
"@conduit-client/command-sse": "3.
|
|
60
|
-
"@conduit-client/command-streaming": "3.
|
|
61
|
-
"@conduit-client/jwt-manager": "3.
|
|
62
|
-
"@conduit-client/service-aura-network": "3.
|
|
63
|
-
"@conduit-client/service-bindings-imperative": "3.
|
|
64
|
-
"@conduit-client/service-bindings-lwc": "3.
|
|
65
|
-
"@conduit-client/service-cache": "3.
|
|
66
|
-
"@conduit-client/service-cache-control": "3.
|
|
67
|
-
"@conduit-client/service-cache-inclusion-policy": "3.
|
|
68
|
-
"@conduit-client/service-config": "3.
|
|
69
|
-
"@conduit-client/service-feature-flags": "3.
|
|
70
|
-
"@conduit-client/service-fetch-network": "3.
|
|
71
|
-
"@conduit-client/service-instrument-command": "3.
|
|
72
|
-
"@conduit-client/service-pubsub": "3.
|
|
73
|
-
"@conduit-client/service-renewable-resource-manager": "3.
|
|
74
|
-
"@conduit-client/service-store": "3.
|
|
75
|
-
"@conduit-client/utils": "3.
|
|
51
|
+
"@conduit-client/command-aura-graphql-normalized-cache-control": "3.25.1",
|
|
52
|
+
"@conduit-client/command-aura-network": "3.25.1",
|
|
53
|
+
"@conduit-client/command-aura-normalized-cache-control": "3.25.1",
|
|
54
|
+
"@conduit-client/command-fetch-network": "3.25.1",
|
|
55
|
+
"@conduit-client/command-http-graphql-normalized-cache-control": "3.25.1",
|
|
56
|
+
"@conduit-client/command-http-normalized-cache-control": "3.25.1",
|
|
57
|
+
"@conduit-client/command-ndjson": "3.25.1",
|
|
58
|
+
"@conduit-client/command-network": "3.25.1",
|
|
59
|
+
"@conduit-client/command-sse": "3.25.1",
|
|
60
|
+
"@conduit-client/command-streaming": "3.25.1",
|
|
61
|
+
"@conduit-client/jwt-manager": "3.25.1",
|
|
62
|
+
"@conduit-client/service-aura-network": "3.25.1",
|
|
63
|
+
"@conduit-client/service-bindings-imperative": "3.25.1",
|
|
64
|
+
"@conduit-client/service-bindings-lwc": "3.25.1",
|
|
65
|
+
"@conduit-client/service-cache": "3.25.1",
|
|
66
|
+
"@conduit-client/service-cache-control": "3.25.1",
|
|
67
|
+
"@conduit-client/service-cache-inclusion-policy": "3.25.1",
|
|
68
|
+
"@conduit-client/service-config": "3.25.1",
|
|
69
|
+
"@conduit-client/service-feature-flags": "3.25.1",
|
|
70
|
+
"@conduit-client/service-fetch-network": "3.25.1",
|
|
71
|
+
"@conduit-client/service-instrument-command": "3.25.1",
|
|
72
|
+
"@conduit-client/service-pubsub": "3.25.1",
|
|
73
|
+
"@conduit-client/service-renewable-resource-manager": "3.25.1",
|
|
74
|
+
"@conduit-client/service-store": "3.25.1",
|
|
75
|
+
"@conduit-client/utils": "3.25.1",
|
|
76
76
|
"@luvio/network-adapter-composable": "0.161.0",
|
|
77
77
|
"@luvio/network-adapter-fetch": "0.161.0",
|
|
78
78
|
"@lwc/state": "^0.29.0",
|
|
79
|
-
"@salesforce/lds-adapters-onestore-graphql": "^1.
|
|
79
|
+
"@salesforce/lds-adapters-onestore-graphql": "^1.449.0",
|
|
80
80
|
"@salesforce/lds-adapters-uiapi-lex": "^1.415.0",
|
|
81
|
-
"@salesforce/lds-durable-storage": "^1.
|
|
82
|
-
"@salesforce/lds-luvio-service": "^1.
|
|
83
|
-
"@salesforce/lds-luvio-uiapi-records-service": "^1.
|
|
81
|
+
"@salesforce/lds-durable-storage": "^1.449.0",
|
|
82
|
+
"@salesforce/lds-luvio-service": "^1.449.0",
|
|
83
|
+
"@salesforce/lds-luvio-uiapi-records-service": "^1.449.0"
|
|
84
84
|
},
|
|
85
85
|
"luvioBundlesize": [
|
|
86
86
|
{
|
|
87
87
|
"path": "./dist/ldsEngineCreator.js",
|
|
88
88
|
"maxSize": {
|
|
89
|
-
"none": "
|
|
89
|
+
"none": "412 kB",
|
|
90
90
|
"min": "190 kB",
|
|
91
|
-
"compressed": "
|
|
91
|
+
"compressed": "72 kB"
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
],
|