@ethlete/query 6.0.0-next.4 → 6.0.0-next.5

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ethlete/query
2
2
 
3
+ ## 6.0.0-next.5
4
+
5
+ ### Minor Changes
6
+
7
+ - [#2959](https://github.com/ethlete-io/ethdk/pull/2959) [`5423369`](https://github.com/ethlete-io/ethdk/commit/542336985297868592cdb6a9732c5d161160730f) Thanks [@github-actions](https://github.com/apps/github-actions)! - Add executionState signal to auth provider
8
+
3
9
  ## 6.0.0-next.4
4
10
 
5
11
  ### Patch Changes
@@ -5539,7 +5539,16 @@ const defaultExtractTokens = (response) => {
5539
5539
  }
5540
5540
  return { accessToken: response['accessToken'], refreshToken: response['refreshToken'] };
5541
5541
  };
5542
- const setupBearerQueryRegistry = (builders, injector, latestExecutedQuery, latestNonInternalQuery, setTokens) => {
5542
+ const deriveExecutionStateType = (builder, triggeredBy) => {
5543
+ if (triggeredBy === 'persistent-auth')
5544
+ return 'autoLogin';
5545
+ if (builder._type === 'tokenRefreshQuery')
5546
+ return 'tokenRefresh';
5547
+ if (triggeredBy === 'token-revocation')
5548
+ return 'revocation';
5549
+ return builder.key;
5550
+ };
5551
+ const setupBearerQueryRegistry = (builders, injector, latestExecutedQuery, latestNonInternalQuery, setTokens, executionState) => {
5543
5552
  const queries = {};
5544
5553
  const querySnapshots = new Map();
5545
5554
  for (const builder of builders) {
@@ -5572,10 +5581,27 @@ const setupBearerQueryRegistry = (builders, injector, latestExecutedQuery, lates
5572
5581
  });
5573
5582
  query.execute({ args, options });
5574
5583
  const snapshot = query.createSnapshot();
5575
- latestExecutedQuery.set({ key: builder.key, snapshot });
5576
- if (!snapshot.triggeredBy()) {
5577
- latestNonInternalQuery.set({ key: builder.key, snapshot });
5584
+ const stateType = deriveExecutionStateType(builder, options?.triggeredBy);
5585
+ if (stateType !== 'revocation') {
5586
+ latestExecutedQuery.set({ key: builder.key, snapshot });
5587
+ if (!snapshot.triggeredBy()) {
5588
+ latestNonInternalQuery.set({ key: builder.key, snapshot });
5589
+ }
5578
5590
  }
5591
+ executionState.set({ type: stateType, state: 'loading' });
5592
+ effect(() => {
5593
+ const response = snapshot.response();
5594
+ const loading = snapshot.loading();
5595
+ const error = snapshot.error();
5596
+ if (loading)
5597
+ return;
5598
+ if (error) {
5599
+ executionState.set({ type: stateType, state: 'error', error });
5600
+ }
5601
+ else if (response) {
5602
+ executionState.set({ type: stateType, state: 'success', response });
5603
+ }
5604
+ }, { injector });
5579
5605
  querySnapshot.set(snapshot);
5580
5606
  return snapshot;
5581
5607
  };
@@ -5655,18 +5681,20 @@ const createBearerAuthProviderImpl = (config) => {
5655
5681
  const isAuthenticated = computed(() => !!accessToken(), ...(ngDevMode ? [{ debugName: "isAuthenticated" }] : []));
5656
5682
  const latestExecutedQuery = signal(null, ...(ngDevMode ? [{ debugName: "latestExecutedQuery" }] : []));
5657
5683
  const latestNonInternalQuery = signal(null, ...(ngDevMode ? [{ debugName: "latestNonInternalQuery" }] : []));
5684
+ const executionState = signal(null, ...(ngDevMode ? [{ debugName: "executionState" }] : []));
5658
5685
  const setTokens = (access, refresh) => {
5659
5686
  accessToken.set(access);
5660
5687
  refreshToken.set(refresh);
5661
5688
  afterTokenRefresh$.next();
5662
5689
  };
5663
- const { queries } = setupBearerQueryRegistry(config.queries, injector, latestExecutedQuery, latestNonInternalQuery, setTokens);
5690
+ const { queries } = setupBearerQueryRegistry(config.queries, injector, latestExecutedQuery, latestNonInternalQuery, setTokens, executionState);
5664
5691
  const logout = () => {
5665
5692
  accessToken.set(null);
5666
5693
  refreshToken.set(null);
5667
5694
  queryClient.repository.unbindAllSecure();
5668
5695
  latestExecutedQuery.set(null);
5669
5696
  latestNonInternalQuery.set(null);
5697
+ executionState.set({ type: 'logout', state: 'success' });
5670
5698
  };
5671
5699
  const isLeader = createLeaderElection(config);
5672
5700
  const querySetupContext = {
@@ -5694,6 +5722,7 @@ const createBearerAuthProviderImpl = (config) => {
5694
5722
  leaderElection: isLeader.leaderElectionContext,
5695
5723
  afterTokenRefresh$,
5696
5724
  queries: queries,
5725
+ executionState,
5697
5726
  };
5698
5727
  const features = setupFeatures(config.features, featureSetupContext);
5699
5728
  setupMultiTabSyncIfEnabled(config, accessToken, refreshToken, queryClient);
@@ -5706,6 +5735,7 @@ const createBearerAuthProviderImpl = (config) => {
5706
5735
  isAuthenticated,
5707
5736
  latestExecutedQuery: latestExecutedQuery.asReadonly(),
5708
5737
  latestNonInternalQuery: latestNonInternalQuery.asReadonly(),
5738
+ executionState: executionState.asReadonly(),
5709
5739
  logout,
5710
5740
  afterTokenRefresh$,
5711
5741
  };
@@ -6043,6 +6073,7 @@ const withTokenRevocation = (config) => {
6043
6073
  return null;
6044
6074
  }
6045
6075
  const args = config.buildArgs({ accessToken, refreshToken });
6076
+ context.executionState.set({ type: 'revocation', state: 'loading' });
6046
6077
  currentRevocationSnapshot = context.queries[config.queryKey].execute(args, {
6047
6078
  triggeredBy: 'token-revocation',
6048
6079
  });