squarefi-bff-api-module 1.36.19 → 1.36.20
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/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { squarefi_bff_api_client } from './api';
|
|
2
2
|
export * from './utils/apiClientFactory';
|
|
3
|
-
export { setAccessTokenProvider,
|
|
3
|
+
export { setAccessTokenProvider, setOnUnauthorized, type AccessTokenProvider, type ResolveTokenOptions, type UnauthorizedHandler, } from './utils/accessTokenProvider';
|
|
4
4
|
export * from './utils/tokensFactory';
|
|
5
5
|
export * from './utils/fileStorage';
|
|
6
6
|
export * from './constants';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { squarefi_bff_api_client } from './api';
|
|
2
2
|
export * from './utils/apiClientFactory';
|
|
3
|
-
export { setAccessTokenProvider,
|
|
3
|
+
export { setAccessTokenProvider, setOnUnauthorized, } from './utils/accessTokenProvider';
|
|
4
4
|
export * from './utils/tokensFactory';
|
|
5
5
|
export * from './utils/fileStorage';
|
|
6
6
|
export * from './constants';
|
|
@@ -4,7 +4,6 @@ export type ResolveTokenOptions = {
|
|
|
4
4
|
};
|
|
5
5
|
export type AccessTokenProvider = (options?: ResolveTokenOptions) => Promise<string | null | undefined>;
|
|
6
6
|
export type UnauthorizedHandler = () => void;
|
|
7
|
-
export type TwoFactorRequiredHandler = () => void;
|
|
8
7
|
/**
|
|
9
8
|
* Register an external source of the access token (e.g. Clerk `getToken`).
|
|
10
9
|
* When set, the API clients stop reading tokens from localStorage and delegate
|
|
@@ -17,15 +16,7 @@ export declare const setAccessTokenProvider: (provider: AccessTokenProvider | nu
|
|
|
17
16
|
* recovered by refreshing the token (e.g. to trigger a Clerk sign-out).
|
|
18
17
|
*/
|
|
19
18
|
export declare const setOnUnauthorized: (handler: UnauthorizedHandler | null) => void;
|
|
20
|
-
/**
|
|
21
|
-
* Register a callback invoked when the backend rejects a request because
|
|
22
|
-
* two-factor authentication is required but not yet satisfied (HTTP 403 with a
|
|
23
|
-
* `two_factor_required` error code). The consumer typically redirects the user
|
|
24
|
-
* to the 2FA setup flow. Pass `null` to unregister.
|
|
25
|
-
*/
|
|
26
|
-
export declare const setOnTwoFactorRequired: (handler: TwoFactorRequiredHandler | null) => void;
|
|
27
19
|
/** Whether an external token provider is active (Clerk mode). */
|
|
28
20
|
export declare const isExternalAuthMode: () => boolean;
|
|
29
21
|
export declare const resolveAccessToken: (options?: ResolveTokenOptions) => Promise<string | null>;
|
|
30
22
|
export declare const triggerUnauthorized: () => void;
|
|
31
|
-
export declare const triggerTwoFactorRequired: () => void;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { getFromLocalStorage } from './storage';
|
|
2
2
|
let accessTokenProvider = null;
|
|
3
3
|
let unauthorizedHandler = null;
|
|
4
|
-
let twoFactorRequiredHandler = null;
|
|
5
4
|
let inFlightRefresh = null;
|
|
6
5
|
/**
|
|
7
6
|
* Register an external source of the access token (e.g. Clerk `getToken`).
|
|
@@ -19,15 +18,6 @@ export const setAccessTokenProvider = (provider) => {
|
|
|
19
18
|
export const setOnUnauthorized = (handler) => {
|
|
20
19
|
unauthorizedHandler = handler;
|
|
21
20
|
};
|
|
22
|
-
/**
|
|
23
|
-
* Register a callback invoked when the backend rejects a request because
|
|
24
|
-
* two-factor authentication is required but not yet satisfied (HTTP 403 with a
|
|
25
|
-
* `two_factor_required` error code). The consumer typically redirects the user
|
|
26
|
-
* to the 2FA setup flow. Pass `null` to unregister.
|
|
27
|
-
*/
|
|
28
|
-
export const setOnTwoFactorRequired = (handler) => {
|
|
29
|
-
twoFactorRequiredHandler = handler;
|
|
30
|
-
};
|
|
31
21
|
/** Whether an external token provider is active (Clerk mode). */
|
|
32
22
|
export const isExternalAuthMode = () => accessTokenProvider !== null;
|
|
33
23
|
export const resolveAccessToken = async (options) => {
|
|
@@ -58,6 +48,3 @@ export const resolveAccessToken = async (options) => {
|
|
|
58
48
|
export const triggerUnauthorized = () => {
|
|
59
49
|
unauthorizedHandler?.();
|
|
60
50
|
};
|
|
61
|
-
export const triggerTwoFactorRequired = () => {
|
|
62
|
-
twoFactorRequiredHandler?.();
|
|
63
|
-
};
|
|
@@ -3,11 +3,9 @@ import { isTMA } from '@telegram-apps/sdk-react';
|
|
|
3
3
|
import axios from 'axios';
|
|
4
4
|
import { telegramSignUpPath, telegramSignInPath, refreshTokenPath } from '../api/auth';
|
|
5
5
|
import { AppEnviroment, ResponseStatus } from '../constants';
|
|
6
|
-
import { isExternalAuthMode, resolveAccessToken,
|
|
6
|
+
import { isExternalAuthMode, resolveAccessToken, triggerUnauthorized } from './accessTokenProvider';
|
|
7
7
|
import { deleteTokens, getTokens, refreshTokens } from './tokensFactory';
|
|
8
8
|
// eslint-disable-next-line no-constant-condition
|
|
9
|
-
// Backend signals that a still-unsatisfied 2FA requirement blocks the request with this error code.
|
|
10
|
-
const TWO_FACTOR_REQUIRED_ERROR_CODE = 'two_factor_required';
|
|
11
9
|
const apiV1BaseURL = process.env.API_URL ?? 'ENV variable API_URL is not defined';
|
|
12
10
|
const apiV2BaseURL = process.env.API_V2_URL ?? 'ENV variable API_V2_URL is not defined';
|
|
13
11
|
const apiTOTPBaseURL = process.env.API_TOTP_URL ?? 'ENV variable API_TOTP_URL is not defined';
|
|
@@ -43,11 +41,6 @@ export const createApiClient = ({ baseURL, isBearerToken, tenantId }) => {
|
|
|
43
41
|
if (typeof window === 'undefined') {
|
|
44
42
|
return Promise.reject(error);
|
|
45
43
|
}
|
|
46
|
-
if (error?.response?.status === ResponseStatus.FORBIDDEN &&
|
|
47
|
-
error?.response?.data?.code === TWO_FACTOR_REQUIRED_ERROR_CODE) {
|
|
48
|
-
triggerTwoFactorRequired();
|
|
49
|
-
return Promise.reject(error);
|
|
50
|
-
}
|
|
51
44
|
if (error?.response?.status === ResponseStatus.UNAUTHORIZED &&
|
|
52
45
|
!error?.response?.config.context?.bypassUnauthorizedHandler) {
|
|
53
46
|
const { response, config: failedRequestConfig } = error;
|
|
@@ -189,9 +182,6 @@ export const createFetchApiClient = ({ baseURL, isBearerToken, tenantId }) => {
|
|
|
189
182
|
let errorMessage = `HTTP error! status: ${response.status}`;
|
|
190
183
|
try {
|
|
191
184
|
const errorData = await response.json();
|
|
192
|
-
if (response.status === ResponseStatus.FORBIDDEN && errorData?.code === TWO_FACTOR_REQUIRED_ERROR_CODE) {
|
|
193
|
-
triggerTwoFactorRequired();
|
|
194
|
-
}
|
|
195
185
|
errorMessage = errorData.message || errorData.error || errorMessage;
|
|
196
186
|
}
|
|
197
187
|
catch {
|