@ethlete/query 0.1.0-next.16 → 0.1.0-next.17

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.
@@ -1,6 +1,5 @@
1
- import { RouteString } from '../query';
2
- import { QueryClient } from '../query-client';
3
- import { Method } from '../request';
1
+ import { QueryResponseType } from '../query';
2
+ import { AnyQueryCreator, QueryCreatorArgs, QueryCreatorReturnType } from '../query-client';
4
3
  export interface AuthProvider {
5
4
  /**
6
5
  * The up to date auth header.
@@ -12,10 +11,6 @@ export interface AuthProvider {
12
11
  * @internal
13
12
  */
14
13
  cleanUp(): void;
15
- /**
16
- * Reference to the query client
17
- */
18
- queryClient: QueryClient | null;
19
14
  }
20
15
  export interface AuthProviderBasicConfig {
21
16
  /**
@@ -39,7 +34,7 @@ export interface AuthProviderCustomHeaderConfig {
39
34
  */
40
35
  value: string;
41
36
  }
42
- export interface AuthProviderBearerConfig<T = unknown> {
37
+ export interface AuthProviderBearerConfig<T extends AnyQueryCreator> {
43
38
  /**
44
39
  * The initial jwt
45
40
  */
@@ -49,30 +44,15 @@ export interface AuthProviderBearerConfig<T = unknown> {
49
44
  */
50
45
  refreshConfig?: BearerRefreshConfig<T>;
51
46
  }
52
- export interface BearerRefreshConfig<T = unknown> {
53
- /**
54
- * The initial refresh token
55
- */
56
- token?: string;
47
+ export interface BearerRefreshConfig<T extends AnyQueryCreator> {
57
48
  /**
58
- * The api's refresh route
59
- * @example /api/auth/refresh-token
49
+ * The query used to trade the refresh token for a new token response.
60
50
  */
61
- route: RouteString;
51
+ queryCreator: T;
62
52
  /**
63
- * The api's refresh route method
64
- */
65
- method: Method;
66
- /**
67
- * The maximum number of refresh attempts
68
- * @default 3
69
- */
70
- maxRefreshAttempts?: number;
71
- /**
72
- * The way the refresh token is sent to the api
73
- * @default 'body'
53
+ * The initial refresh token
74
54
  */
75
- paramLocation?: 'body' | 'query';
55
+ token?: string;
76
56
  /**
77
57
  * The cookie name where the refresh token is stored
78
58
  */
@@ -94,14 +74,14 @@ export interface BearerRefreshConfig<T = unknown> {
94
74
  strategy?: AuthBearerRefreshStrategy;
95
75
  /**
96
76
  * Adapter function used to build the request body for the refresh request.
97
- * @default { refreshToken: "refreshToken" }
77
+ * @default { body: { refreshToken: "refreshToken" } }
98
78
  */
99
- requestAdapter?: (refreshToken: string) => Record<string, string>;
79
+ requestArgsAdapter?: (refreshToken: string, token: string | null) => QueryCreatorArgs<T>;
100
80
  /**
101
81
  * Adapter function used to extract the token and refreshToken from the response.
102
82
  * @default { token: "token", refreshToken: "refreshToken" }
103
83
  */
104
- responseAdapter?: (response: T) => TokenResponse;
84
+ responseAdapter?: (response: QueryResponseType<QueryCreatorReturnType<T>>) => TokenResponse;
105
85
  }
106
86
  export declare const enum AuthBearerRefreshStrategy {
107
87
  /**
@@ -1,8 +1,9 @@
1
+ import { AnyQueryCreator } from '../query-client';
1
2
  import { AuthProvider } from './auth-provider.types';
2
3
  import { BasicAuthProvider } from './basic-auth-provider';
3
4
  import { BearerAuthProvider } from './bearer-auth-provider';
4
5
  import { CustomHeaderAuthProvider } from './custom-header-auth-provider';
5
6
  export declare const isBasicAuthProvider: (authProvider: AuthProvider) => authProvider is BasicAuthProvider;
6
- export declare const isBearerAuthProvider: (authProvider: AuthProvider) => authProvider is BearerAuthProvider<unknown>;
7
+ export declare const isBearerAuthProvider: <T extends AnyQueryCreator = AnyQueryCreator>(authProvider: AuthProvider) => authProvider is BearerAuthProvider<T>;
7
8
  export declare const isCustomHeaderAuthProvider: (authProvider: AuthProvider) => authProvider is CustomHeaderAuthProvider;
8
9
  export declare const decryptBearer: <Result = Record<string, unknown>>(token: string) => Result | null;
@@ -1,4 +1,3 @@
1
- import { QueryClient } from '../query-client';
2
1
  import { AuthProvider, AuthProviderBasicConfig } from './auth-provider.types';
3
2
  export declare class BasicAuthProvider implements AuthProvider {
4
3
  private _config;
@@ -6,7 +5,6 @@ export declare class BasicAuthProvider implements AuthProvider {
6
5
  Authorization: string;
7
6
  };
8
7
  private get _basicAuthString();
9
- queryClient: QueryClient | null;
10
8
  constructor(_config: AuthProviderBasicConfig);
11
9
  cleanUp(): void;
12
10
  }
@@ -1,25 +1,18 @@
1
- import { Subject } from 'rxjs';
2
- import { QueryClient } from '../query-client';
3
- import { RequestError } from '../request';
4
- import { AuthProvider, AuthProviderBearerConfig, TokenResponse } from './auth-provider.types';
5
- export declare class BearerAuthProvider<T = unknown> implements AuthProvider {
1
+ import { AnyQueryCreator } from '../query-client';
2
+ import { AuthProvider, AuthProviderBearerConfig } from './auth-provider.types';
3
+ export declare class BearerAuthProvider<T extends AnyQueryCreator> implements AuthProvider {
6
4
  private _config;
5
+ private readonly _destroy$;
6
+ private readonly _currentRefreshQuery$;
7
7
  private _token;
8
8
  private _refreshToken;
9
- private _refreshTimerSubscription;
10
- private _failureCount;
11
9
  get header(): {
12
10
  Authorization: string;
13
11
  };
14
- queryClient: QueryClient | null;
15
- onRefreshInitiation$: Subject<void>;
16
- onRefreshSuccess$: Subject<TokenResponse>;
17
- onRefreshFailure$: Subject<RequestError<unknown>>;
12
+ get currentRefreshQuery$(): import("rxjs").Observable<ReturnType<T["prepare"]> | null>;
13
+ get currentRefreshQuery(): ReturnType<T["prepare"]> | null;
18
14
  constructor(_config: AuthProviderBearerConfig<T>);
19
- cleanUp(config?: {
20
- keepCookie: boolean;
21
- }): void;
22
- private _autoDestruct;
23
- private _setupRefresh;
24
- private _refresh;
15
+ cleanUp(): void;
16
+ private _prepareForRefresh;
17
+ private _refreshQuery;
25
18
  }
@@ -1,11 +1,9 @@
1
- import { QueryClient } from '../query-client';
2
1
  import { AuthProvider, AuthProviderCustomHeaderConfig } from './auth-provider.types';
3
2
  export declare class CustomHeaderAuthProvider implements AuthProvider {
4
3
  private _config;
5
4
  get header(): {
6
5
  [x: string]: string;
7
6
  };
8
- queryClient: QueryClient | null;
9
7
  constructor(_config: AuthProviderCustomHeaderConfig);
10
8
  cleanUp(): void;
11
9
  }
@@ -6,7 +6,9 @@ type OmitNull<T> = T extends null ? never : T;
6
6
  export declare function filterSuccess(): <T extends QueryState<unknown, unknown> | null, Response_1 extends QueryStateData<OmitNull<T>>, RawResponse extends QueryStateRawData<OmitNull<T>>>(source: Observable<T>) => Observable<Success<Response_1, RawResponse>>;
7
7
  export declare function filterFailure(): <T extends QueryState<unknown, unknown> | null>(source: Observable<T>) => Observable<Failure>;
8
8
  export declare function filterQueryStates(allowedStates: QueryStateType[]): <T extends QueryState<unknown, unknown> | null>(source: Observable<T>) => Observable<T>;
9
- export declare function takeUntilResponse(): <T extends QueryState<unknown, unknown>>(source: Observable<T>) => Observable<T>;
9
+ export declare function takeUntilResponse(config?: {
10
+ excludeNull?: boolean;
11
+ }): <T extends QueryState<unknown, unknown> | null>(source: Observable<T>) => Observable<T>;
10
12
  export declare function filterNull(): <T>(source: Observable<T>) => Observable<OmitNull<T>>;
11
13
  export declare function switchQueryState(): <T extends AnyQuery | null, Response_1 extends QueryResponseType<OmitNull<T>>, RawResponse extends QueryRawResponseType<OmitNull<T>>>(source: Observable<T>) => Observable<QueryState<OmitNull<Response_1>, OmitNull<RawResponse>> | null>;
12
14
  export declare const isQueryStateLoading: (state: QueryState | null | undefined) => state is Loading;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethlete/query",
3
- "version": "0.1.0-next.16",
3
+ "version": "0.1.0-next.17",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.0"
6
6
  },