@salesforce/lds-network-fetch 1.390.0 → 1.392.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.
@@ -215,6 +215,49 @@ function generateHeaders(headers) {
215
215
  return fetchHeaders;
216
216
  }
217
217
 
218
+ /*!
219
+ * Copyright (c) 2022, Salesforce, Inc.,
220
+ * All rights reserved.
221
+ * For full license text, see the LICENSE.txt file
222
+ */
223
+ function resolvedPromiseLike(result) {
224
+ if (isPromiseLike(result)) {
225
+ return result.then((nextResult) => nextResult);
226
+ }
227
+ return {
228
+ then: (onFulfilled, _onRejected) => {
229
+ try {
230
+ return resolvedPromiseLike(onFulfilled(result));
231
+ } catch (e) {
232
+ if (onFulfilled === void 0) {
233
+ return resolvedPromiseLike(result);
234
+ }
235
+ return rejectedPromiseLike(e);
236
+ }
237
+ }
238
+ };
239
+ }
240
+ function rejectedPromiseLike(reason) {
241
+ if (isPromiseLike(reason)) {
242
+ return reason.then((nextResult) => nextResult);
243
+ }
244
+ return {
245
+ then: (_onFulfilled, onRejected) => {
246
+ if (typeof onRejected === "function") {
247
+ try {
248
+ return resolvedPromiseLike(onRejected(reason));
249
+ } catch (e) {
250
+ return rejectedPromiseLike(e);
251
+ }
252
+ }
253
+ return rejectedPromiseLike(reason);
254
+ }
255
+ };
256
+ }
257
+ function isPromiseLike(x) {
258
+ return typeof (x == null ? void 0 : x.then) === "function";
259
+ }
260
+
218
261
  /**
219
262
  * Copyright (c) 2022, Salesforce, Inc.,
220
263
  * All rights reserved.
@@ -696,6 +739,10 @@ function getStorageAndLogger(path) {
696
739
  return null;
697
740
  }
698
741
  const platformFetchAdapter = platformNetworkAdapter(fetchNetworkAdapter);
742
+ const platformFetchAdapterWithInterceptors = async (resourceRequest, resourceRequestContext, requestInterceptors) => {
743
+ const pending = requestInterceptors.reduce((previousPromise, interceptor) => previousPromise.then(interceptor), resolvedPromiseLike(resourceRequest));
744
+ return pending.then((interceptedRequest) => platformFetchAdapter(interceptedRequest, resourceRequestContext));
745
+ };
699
746
  /**
700
747
  * Helper function to fetch data, if available in aura storage cache returns that instead of going to network.
701
748
  * @param resourceRequest - {@link ResourceRequest}
@@ -704,7 +751,7 @@ const platformFetchAdapter = platformNetworkAdapter(fetchNetworkAdapter);
704
751
  * @param transactionKey - The transaction key, derived from the resource request params.
705
752
  * @returns Promise<FetchResponse<any> - Promise that resolves to a fetch response.
706
753
  */
707
- function checkLdsStorageCacheOrFetch(resourceRequest, resourceRequestContext, storageAndLogger, transactionKey) {
754
+ function checkLdsStorageCacheOrFetch(resourceRequest, resourceRequestContext, storageAndLogger, transactionKey, requestInterceptors = []) {
708
755
  if (!shouldForceRefresh(resourceRequest)) {
709
756
  if (storageAndLogger?.storage) {
710
757
  return storageAndLogger.storage.get(transactionKey).then((cacheResult) => {
@@ -714,13 +761,13 @@ function checkLdsStorageCacheOrFetch(resourceRequest, resourceRequestContext, st
714
761
  return createOkResponse$1(cacheResult);
715
762
  }
716
763
  storageAndLogger.statsLogger.logMisses();
717
- return platformFetchAdapter(resourceRequest, resourceRequestContext);
764
+ return platformFetchAdapterWithInterceptors(resourceRequest, resourceRequestContext, requestInterceptors);
718
765
  }, () => {
719
- return platformFetchAdapter(resourceRequest, resourceRequestContext);
766
+ return platformFetchAdapterWithInterceptors(resourceRequest, resourceRequestContext, requestInterceptors);
720
767
  });
721
768
  }
722
769
  }
723
- return platformFetchAdapter(resourceRequest, resourceRequestContext);
770
+ return platformFetchAdapterWithInterceptors(resourceRequest, resourceRequestContext, requestInterceptors);
724
771
  }
725
772
 
726
773
  // noop implementation for when one is not provided
@@ -749,17 +796,18 @@ function setupFetchNetworkAdapter() {
749
796
  * @param resourceRequestContext {@link ResourceRequestContext}
750
797
  * @returns Promise<FetchResponse<any>>
751
798
  */
752
- function handleSendFetchRequest(resourceRequest, resourceRequestContext) {
799
+ function handleSendFetchRequest(resourceRequest, resourceRequestContext, interceptors) {
753
800
  const { baseUri, basePath } = resourceRequest;
754
801
  const path = `${baseUri}${basePath}`;
755
802
  const storageAndLogger = getStorageAndLogger(path);
756
803
  const transactionKey = getTransactionKey$1(resourceRequest);
757
- const response = checkLdsStorageCacheOrFetch(resourceRequest, resourceRequestContext, storageAndLogger, transactionKey);
804
+ const response = checkLdsStorageCacheOrFetch(resourceRequest, resourceRequestContext, storageAndLogger, transactionKey, interceptors.request);
758
805
  internalRequestTracker.registerHandler(response, 'lds-inflight-network-request', () => {
759
806
  // return false until we signal we are finished
760
807
  return false;
761
808
  });
762
- response
809
+ const interceptedResponse = Promise.resolve(interceptors.response.reduce((previousPromise, interceptor) => previousPromise.then(interceptor), resolvedPromiseLike(response)));
810
+ interceptedResponse
763
811
  .then((value) => {
764
812
  if (storageAndLogger !== null && storageAndLogger.storage !== null) {
765
813
  storageAndLogger.storage.set(transactionKey, value.body).catch((_error) => { });
@@ -769,8 +817,8 @@ function handleSendFetchRequest(resourceRequest, resourceRequestContext) {
769
817
  .catch((error) => {
770
818
  internalRequestLogger.reject(resourceRequest, error);
771
819
  });
772
- return response.finally(() => {
773
- internalRequestTracker.markFinished(response);
820
+ return interceptedResponse.finally(() => {
821
+ internalRequestTracker.markFinished(interceptedResponse);
774
822
  });
775
823
  }
776
824
  /**
@@ -780,11 +828,11 @@ function handleSendFetchRequest(resourceRequest, resourceRequestContext) {
780
828
  * @param requestLogger
781
829
  * @returns lexNetworkAdapter {@link NetworkAdapter}
782
830
  */
783
- function setupLexNetworkAdapter(requestTracker, requestLogger) {
831
+ function setupLexNetworkAdapter(requestTracker, requestLogger, interceptors) {
784
832
  internalRequestTracker = requestTracker || internalRequestTracker;
785
833
  internalRequestLogger = requestLogger || internalRequestLogger;
786
834
  return async (resourceRequest, resourceRequestContext) => {
787
- return handleSendFetchRequest(resourceRequest, resourceRequestContext);
835
+ return handleSendFetchRequest(resourceRequest, resourceRequestContext, interceptors ?? { request: [], response: [] });
788
836
  };
789
837
  }
790
838
 
@@ -807,4 +855,4 @@ function instrument(newInstrumentation) {
807
855
  }
808
856
 
809
857
  export { instrument, setupFetchNetworkAdapter, setupLexNetworkAdapter };
810
- // version: 1.390.0-40592e6d97
858
+ // version: 1.392.0-620a222fbc
@@ -1,3 +1,4 @@
1
1
  export { setupFetchNetworkAdapter, setupLexNetworkAdapter } from './networkAdapter';
2
2
  export type { RequestLogger, RequestTracker } from './networkAdapter';
3
+ export type { RequestInterceptor, ResponseInterceptor, Interceptors } from './utils';
3
4
  export { instrument, FetchNetworkInstrumentation } from './instrumentation';
@@ -1,4 +1,5 @@
1
1
  import type { NetworkAdapter, ResourceRequest } from '@luvio/engine';
2
+ import { Interceptors } from './utils';
2
3
  export type RequestTracker = {
3
4
  registerHandler: (request: any, name: string, loadedCheck: () => boolean) => void;
4
5
  markFinished: (request: any) => void;
@@ -24,4 +25,4 @@ export declare function setupFetchNetworkAdapter(): NetworkAdapter;
24
25
  * @param requestLogger
25
26
  * @returns lexNetworkAdapter {@link NetworkAdapter}
26
27
  */
27
- export declare function setupLexNetworkAdapter(requestTracker?: RequestTracker, requestLogger?: RequestLogger): NetworkAdapter;
28
+ export declare function setupLexNetworkAdapter(requestTracker?: RequestTracker, requestLogger?: RequestLogger, interceptors?: Interceptors): NetworkAdapter;
@@ -11,6 +11,12 @@ type LdsStorageConfig = {
11
11
  * @returns LdsStorageConfig if we cache that resource, otherwise null.
12
12
  */
13
13
  export declare function getStorageAndLogger(path: string): LdsStorageConfig | null;
14
+ export type RequestInterceptor = (fetchArgs: ResourceRequest) => PromiseLike<ResourceRequest>;
15
+ export type ResponseInterceptor = (response: FetchResponse<any>) => PromiseLike<FetchResponse<any>>;
16
+ export type Interceptors = {
17
+ request: RequestInterceptor[];
18
+ response: ResponseInterceptor[];
19
+ };
14
20
  /**
15
21
  * Helper function to fetch data, if available in aura storage cache returns that instead of going to network.
16
22
  * @param resourceRequest - {@link ResourceRequest}
@@ -19,5 +25,5 @@ export declare function getStorageAndLogger(path: string): LdsStorageConfig | nu
19
25
  * @param transactionKey - The transaction key, derived from the resource request params.
20
26
  * @returns Promise<FetchResponse<any> - Promise that resolves to a fetch response.
21
27
  */
22
- export declare function checkLdsStorageCacheOrFetch(resourceRequest: ResourceRequest, resourceRequestContext: ResourceRequestContext, storageAndLogger: LdsStorageConfig | null, transactionKey: string): Promise<FetchResponse<any>>;
28
+ export declare function checkLdsStorageCacheOrFetch(resourceRequest: ResourceRequest, resourceRequestContext: ResourceRequestContext, storageAndLogger: LdsStorageConfig | null, transactionKey: string, requestInterceptors?: RequestInterceptor[]): Promise<FetchResponse<any>>;
23
29
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/lds-network-fetch",
3
- "version": "1.390.0",
3
+ "version": "1.392.0",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "description": "LDS Network Adapter using fetch",
6
6
  "main": "dist/ldsNetworkFetch.js",
@@ -38,6 +38,6 @@
38
38
  "@luvio/network-adapter-fetch": "0.158.7"
39
39
  },
40
40
  "devDependencies": {
41
- "@salesforce/lds-network-aura": "^1.390.0"
41
+ "@salesforce/lds-network-aura": "^1.392.0"
42
42
  }
43
43
  }