@ethlete/query 6.0.0-next.3 → 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,17 @@
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
+
9
+ ## 6.0.0-next.4
10
+
11
+ ### Patch Changes
12
+
13
+ - [#2958](https://github.com/ethlete-io/ethdk/pull/2958) [`8ecdfc0`](https://github.com/ethlete-io/ethdk/commit/8ecdfc00d785b0b535601b5d95ca7e2cd55455b6) Thanks [@github-actions](https://github.com/apps/github-actions)! - Update v3 migration to reflect latest api changes
14
+
3
15
  ## 6.0.0-next.3
4
16
 
5
17
  ### 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,16 +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();
5695
+ latestExecutedQuery.set(null);
5696
+ latestNonInternalQuery.set(null);
5697
+ executionState.set({ type: 'logout', state: 'success' });
5668
5698
  };
5669
5699
  const isLeader = createLeaderElection(config);
5670
5700
  const querySetupContext = {
@@ -5692,6 +5722,7 @@ const createBearerAuthProviderImpl = (config) => {
5692
5722
  leaderElection: isLeader.leaderElectionContext,
5693
5723
  afterTokenRefresh$,
5694
5724
  queries: queries,
5725
+ executionState,
5695
5726
  };
5696
5727
  const features = setupFeatures(config.features, featureSetupContext);
5697
5728
  setupMultiTabSyncIfEnabled(config, accessToken, refreshToken, queryClient);
@@ -5704,6 +5735,7 @@ const createBearerAuthProviderImpl = (config) => {
5704
5735
  isAuthenticated,
5705
5736
  latestExecutedQuery: latestExecutedQuery.asReadonly(),
5706
5737
  latestNonInternalQuery: latestNonInternalQuery.asReadonly(),
5738
+ executionState: executionState.asReadonly(),
5707
5739
  logout,
5708
5740
  afterTokenRefresh$,
5709
5741
  };
@@ -6041,6 +6073,7 @@ const withTokenRevocation = (config) => {
6041
6073
  return null;
6042
6074
  }
6043
6075
  const args = config.buildArgs({ accessToken, refreshToken });
6076
+ context.executionState.set({ type: 'revocation', state: 'loading' });
6044
6077
  currentRevocationSnapshot = context.queries[config.queryKey].execute(args, {
6045
6078
  triggeredBy: 'token-revocation',
6046
6079
  });