@bmc-soft/keycloak-auth 2.0.13 → 2.0.15
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/README.md +39 -0
- package/dist/axios/adapters/KeycloakTokenProvider.d.ts.map +1 -1
- package/dist/axios/adapters/KeycloakTokenProvider.js +1 -1
- package/dist/axios/adapters/KeycloakTokenProvider.js.map +1 -1
- package/dist/axios/types.d.ts +2 -1
- package/dist/axios/types.d.ts.map +1 -1
- package/dist/context/TokenContext.d.ts +1 -1
- package/dist/context/TokenContext.d.ts.map +1 -1
- package/dist/context/TokenContext.js +7 -4
- package/dist/context/TokenContext.js.map +1 -1
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/core/adapter.js +53 -13
- package/dist/core/adapter.js.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/tokenRefreshSingleFlight.d.ts.map +1 -1
- package/dist/core/tokenRefreshSingleFlight.js +2 -6
- package/dist/core/tokenRefreshSingleFlight.js.map +1 -1
- package/dist/core/types.d.ts +25 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +14 -1
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -575,6 +575,45 @@ PIN/биометрия → refresh при необходимости → tokenSt
|
|
|
575
575
|
|
|
576
576
|
Интеграционному приложению не нужно запускать дополнительные параллельные `keycloak.updateToken()` поверх библиотеки. Если нужен ручной refresh, используйте `useToken().updateToken()` или `KeycloakTokenProvider.refreshToken()`.
|
|
577
577
|
|
|
578
|
+
### Ошибки обновления токена
|
|
579
|
+
|
|
580
|
+
Если token endpoint Keycloak возвращает ошибку при exchange или refresh, библиотека выбрасывает `KeycloakTokenError`. Это обычный `Error`, поэтому существующий код может продолжать читать `error.message`, но дополнительно доступны структурированные поля:
|
|
581
|
+
|
|
582
|
+
```ts
|
|
583
|
+
type KeycloakTokenOperation = 'exchange' | 'refresh' | 'revoke';
|
|
584
|
+
|
|
585
|
+
type KeycloakTokenError = Error & {
|
|
586
|
+
name: 'KeycloakTokenError';
|
|
587
|
+
operation: KeycloakTokenOperation;
|
|
588
|
+
status?: number;
|
|
589
|
+
error?: string;
|
|
590
|
+
errorDescription?: string;
|
|
591
|
+
errorUri?: string;
|
|
592
|
+
details: {
|
|
593
|
+
operation: KeycloakTokenOperation;
|
|
594
|
+
status?: number;
|
|
595
|
+
error?: string;
|
|
596
|
+
errorDescription?: string;
|
|
597
|
+
errorUri?: string;
|
|
598
|
+
};
|
|
599
|
+
};
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
Для refresh-token ошибок публичный контракт можно сузить до `KeycloakRefreshError`:
|
|
603
|
+
|
|
604
|
+
```ts
|
|
605
|
+
type KeycloakRefreshError = Error & {
|
|
606
|
+
status?: number;
|
|
607
|
+
error?: string;
|
|
608
|
+
errorDescription?: string;
|
|
609
|
+
operation: 'refresh';
|
|
610
|
+
};
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
Поля `error`, `errorDescription` и `errorUri` соответствуют OAuth token endpoint response (`error`, `error_description`, `error_uri`), а `status` содержит HTTP status ответа. Например, `invalid_grant`, `Offline user session not found`, revoked/expired offline token и HTTP 400/401 различимы по структурированным полям без парсинга `message`. Network errors тоже нормализуются с `operation: 'refresh'`, но без `status` и без OAuth `error`, поэтому приложение не должно считать их истёкшей сессией. Токены, request body, cookies, authorization headers и client secret в объект ошибки не добавляются.
|
|
614
|
+
|
|
615
|
+
`useToken().updateToken()`, `useKeycloakAuth().updateToken()`, `ConfirmAuthPage.onError`, `ReauthBottomSheet.onError` и axios `onRefreshError` получают тот же объект ошибки. `KeycloakTokenProvider.refreshToken()` не преобразует refresh failure в `null`: ошибка пробрасывается дальше, чтобы `onRefreshError` мог получить исходные детали.
|
|
616
|
+
|
|
578
617
|
При logout библиотека сначала выполняет браузерный WebView logout flow, затем отправляет текущий offline token (`refresh_token`) в Keycloak token revocation endpoint (`/protocol/openid-connect/revoke`) с `token_type_hint=refresh_token` и только после этого очищает локальные токены. Это важно для `offline_access`: обычный browser logout не обязан удалять offline-сессию в Keycloak.
|
|
579
618
|
|
|
580
619
|
### Иерархия контекстов
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeycloakTokenProvider.d.ts","sourceRoot":"","sources":["../../../src/axios/adapters/KeycloakTokenProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,yBAAyB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"KeycloakTokenProvider.d.ts","sourceRoot":"","sources":["../../../src/axios/adapters/KeycloakTokenProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,yBAAyB,MAAM,mBAAmB,CAAC;AAI/D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAsBpD,qBAAa,qBAAsB,YAAW,aAAa;IACzD,OAAO,CAAC,cAAc,CAA4B;gBAEtC,cAAc,EAAE,yBAAyB;IAQ/C,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAwBlC,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAetC,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;CAqB1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeycloakTokenProvider.js","sourceRoot":"","sources":["../../../src/axios/adapters/KeycloakTokenProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KeycloakTokenProvider.js","sourceRoot":"","sources":["../../../src/axios/adapters/KeycloakTokenProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,uBAAuB,EAAC,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AAuBxD,MAAM,OAAO,qBAAqB;IAGhC,YAAY,cAAyC;QACnD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAMD,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YAEH,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YACxC,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;YAGD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;YAC9C,OAAO,MAAM,EAAE,WAAW,IAAI,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IASD,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE;gBACpE,aAAa,EAAE,YAAY,CAAC,UAAU;aACvC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAqC,CAAC,CAAC;YACrG,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YAEH,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC;YACd,CAAC;YAGD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;YAC9C,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,IAAI,MAAM,EAAE,YAAY,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;YACzE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CAOF"}
|
package/dist/axios/types.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { TokenProvider } from './tokenProvider';
|
|
2
|
+
import type { KeycloakRefreshError } from '../core/types';
|
|
2
3
|
export interface AxiosInterceptorsConfig {
|
|
3
4
|
onReauthRequired?: () => void;
|
|
4
5
|
onTokenRefreshed?: (newToken: string) => void;
|
|
5
|
-
onRefreshError?: (error: Error) => void;
|
|
6
|
+
onRefreshError?: (error: KeycloakRefreshError | Error) => void;
|
|
6
7
|
maxRetries?: number;
|
|
7
8
|
autoAddToken?: boolean;
|
|
8
9
|
autoRetryOn401?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/axios/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/axios/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAKxD,MAAM,WAAW,uBAAuB;IAKtC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAK9B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAK9C,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,KAAK,KAAK,IAAI,CAAC;IAM/D,UAAU,CAAC,EAAE,MAAM,CAAC;IAMpB,YAAY,CAAC,EAAE,OAAO,CAAC;IAMvB,cAAc,CAAC,EAAE,OAAO,CAAC;IAMzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAM5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAO9B,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAOxC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACtC;AAKD,MAAM,WAAW,mBAAmB;IAIlC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenContext.d.ts","sourceRoot":"","sources":["../../src/context/TokenContext.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAEZ,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"TokenContext.d.ts","sourceRoot":"","sources":["../../src/context/TokenContext.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAEZ,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAyB,KAAK,cAAc,EAAC,MAAM,eAAe,CAAC;AAS1E,UAAU,iBAAiB;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IAEpB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,aAAa,gDAoJxB,CAAC;AASH,eAAO,MAAM,QAAQ,QAAO,iBAQ3B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { createContext, useCallback, useContext, useEffect, useMemo, useState, } from 'react';
|
|
2
|
+
import { isKeycloakRefreshError } from '../core/types';
|
|
2
3
|
import { updateKeycloakTokenOnce } from '../core/tokenRefreshSingleFlight';
|
|
3
4
|
import { tokenStorage } from '../storage';
|
|
4
5
|
import { useKeycloakInstance } from './KeycloakInstanceContext';
|
|
@@ -73,10 +74,12 @@ export const TokenProvider = React.memo(({ children, onTokens }) => {
|
|
|
73
74
|
return result.token || token || '';
|
|
74
75
|
}
|
|
75
76
|
catch (error) {
|
|
76
|
-
const refreshError = error
|
|
77
|
-
?
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
const refreshError = isKeycloakRefreshError(error)
|
|
78
|
+
? error
|
|
79
|
+
: error === true
|
|
80
|
+
? keycloak.__lastTokenRefreshError ??
|
|
81
|
+
new Error('Keycloak token refresh failed')
|
|
82
|
+
: error;
|
|
80
83
|
console.error('[TokenContext] Update token error:', refreshError);
|
|
81
84
|
throw refreshError;
|
|
82
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenContext.js","sourceRoot":"","sources":["../../src/context/TokenContext.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EACZ,aAAa,EAEb,WAAW,EACX,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,GACT,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TokenContext.js","sourceRoot":"","sources":["../../src/context/TokenContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/core/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/core/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAIV,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAwJjB,cAAM,SAAU,YAAW,eAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;gBAG5D,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,EACzC,WAAW,EAAE,QAAQ,CAAC,qBAAqB,CAAC;IAM9C,qBAAqB,IAAI,eAAe;IAIxC,cAAc,CAAC,OAAO,EAAE,oBAAoB;IAItC,KAAK,CAAC,GAAG,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAShD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IASlC,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIjE,2BAA2B,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIvF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAa1E,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA6B5E,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAI7E,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzE,WAAW,CAAC,OAAO,CAAC,EAAE;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM;CAW7E;AAED,eAAe,SAAS,CAAC"}
|
package/dist/core/adapter.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import LocalStorage from './storage';
|
|
2
|
+
import { isKeycloakRefreshError } from './types';
|
|
2
3
|
import { fetchJSON } from './utils';
|
|
3
4
|
import { tokenStorage } from '../storage';
|
|
4
5
|
function getRealmUrl(client) {
|
|
@@ -56,16 +57,55 @@ async function revokeRefreshToken(client) {
|
|
|
56
57
|
async function readTokenResponse(response, operation) {
|
|
57
58
|
const json = (await response.json());
|
|
58
59
|
if (!response.ok || json.error || !json.access_token) {
|
|
59
|
-
const message = json.error_description || json.error || `HTTP ${response.status}`;
|
|
60
60
|
console.error(`[Keycloak] token ${operation} failed:`, {
|
|
61
61
|
status: response.status,
|
|
62
62
|
error: json.error,
|
|
63
63
|
error_description: json.error_description,
|
|
64
|
+
error_uri: json.error_uri,
|
|
64
65
|
});
|
|
65
|
-
throw
|
|
66
|
+
throw createKeycloakTokenError(response, operation, json);
|
|
66
67
|
}
|
|
67
68
|
return json;
|
|
68
69
|
}
|
|
70
|
+
function createKeycloakTokenError(response, operation, json) {
|
|
71
|
+
const message = json.error_description || json.error || `HTTP ${response.status}`;
|
|
72
|
+
const tokenError = new Error(`Keycloak token ${operation} failed: ${message}`);
|
|
73
|
+
tokenError.name = 'KeycloakTokenError';
|
|
74
|
+
tokenError.status = response.status;
|
|
75
|
+
tokenError.error = json.error;
|
|
76
|
+
tokenError.errorDescription = json.error_description;
|
|
77
|
+
tokenError.errorUri = json.error_uri;
|
|
78
|
+
tokenError.operation = operation;
|
|
79
|
+
tokenError.details = {
|
|
80
|
+
operation,
|
|
81
|
+
status: response.status,
|
|
82
|
+
error: json.error,
|
|
83
|
+
errorDescription: json.error_description,
|
|
84
|
+
errorUri: json.error_uri,
|
|
85
|
+
};
|
|
86
|
+
return tokenError;
|
|
87
|
+
}
|
|
88
|
+
function normalizeKeycloakRefreshError(error) {
|
|
89
|
+
if (isKeycloakRefreshError(error)) {
|
|
90
|
+
return error;
|
|
91
|
+
}
|
|
92
|
+
if (error && typeof error === 'object') {
|
|
93
|
+
const candidate = error;
|
|
94
|
+
if (candidate.operation === 'refresh') {
|
|
95
|
+
candidate.operation = 'refresh';
|
|
96
|
+
return candidate;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const message = error instanceof TypeError
|
|
100
|
+
? `Network error during Keycloak token refresh: ${error.message}`
|
|
101
|
+
: error instanceof Error
|
|
102
|
+
? error.message
|
|
103
|
+
: String(error);
|
|
104
|
+
const refreshError = new Error(message);
|
|
105
|
+
refreshError.name = error instanceof Error ? error.name : 'KeycloakRefreshError';
|
|
106
|
+
refreshError.operation = 'refresh';
|
|
107
|
+
return refreshError;
|
|
108
|
+
}
|
|
69
109
|
class RNAdapter {
|
|
70
110
|
constructor(client, _keycloakConfig, initOptions) {
|
|
71
111
|
this.client = client;
|
|
@@ -120,21 +160,21 @@ class RNAdapter {
|
|
|
120
160
|
return this.client.__refreshTokensPromise;
|
|
121
161
|
}
|
|
122
162
|
this.client.__refreshTokensPromise = (async () => {
|
|
123
|
-
const body = await createTokenRequestBody(params, this.initOptions);
|
|
124
|
-
const tokenRes = await fetch(tokenUrl, {
|
|
125
|
-
method: 'POST',
|
|
126
|
-
headers: {
|
|
127
|
-
'Content-type': 'application/x-www-form-urlencoded',
|
|
128
|
-
},
|
|
129
|
-
body,
|
|
130
|
-
});
|
|
131
163
|
try {
|
|
164
|
+
const body = await createTokenRequestBody(params, this.initOptions);
|
|
165
|
+
const tokenRes = await fetch(tokenUrl, {
|
|
166
|
+
method: 'POST',
|
|
167
|
+
headers: {
|
|
168
|
+
'Content-type': 'application/x-www-form-urlencoded',
|
|
169
|
+
},
|
|
170
|
+
body,
|
|
171
|
+
});
|
|
132
172
|
return await readTokenResponse(tokenRes, 'refresh');
|
|
133
173
|
}
|
|
134
174
|
catch (error) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
throw
|
|
175
|
+
const refreshError = normalizeKeycloakRefreshError(error);
|
|
176
|
+
this.client.__lastTokenRefreshError = refreshError;
|
|
177
|
+
throw refreshError;
|
|
138
178
|
}
|
|
139
179
|
finally {
|
|
140
180
|
this.client.__refreshTokensPromise = undefined;
|
package/dist/core/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/core/adapter.ts"],"names":[],"mappings":"AAaA,OAAO,YAAY,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/core/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ export { KeycloakReactNativeClient };
|
|
|
3
3
|
export { LocalStorage } from './storage';
|
|
4
4
|
export { OFFLINE_ACCESS_SCOPE, getUrlHost, isInternalNetworkUrl, isIpAddressHost, resolveBackgroundReauthConfig, shouldShowBackgroundReauth, withOfflineAccessScope, } from './sessionPolicy';
|
|
5
5
|
export type { BackgroundReauthConfig, BackgroundReauthCheck } from './sessionPolicy';
|
|
6
|
-
export type { KeycloakConfig, KeycloakConfigWith2FA, RNKeycloakInitOptions, KeycloakLoginOptions, KeycloakTokens, TokenUpdateResult, KeycloakProfile, AuthState, InitRecoveryStrategy, StoredTokenInitPolicy, } from './types';
|
|
6
|
+
export type { KeycloakConfig, KeycloakConfigWith2FA, RNKeycloakInitOptions, KeycloakLoginOptions, KeycloakTokens, TokenUpdateResult, KeycloakProfile, AuthState, InitRecoveryStrategy, StoredTokenInitPolicy, KeycloakRefreshError, KeycloakTokenError, KeycloakTokenErrorDetails, KeycloakTokenOperation, } from './types';
|
|
7
|
+
export { isKeycloakRefreshError, isKeycloakTokenError } from './types';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,MAAM,UAAU,CAAC;AAMjD,OAAO,EAAC,yBAAyB,EAAC,CAAC;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAC,sBAAsB,EAAE,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AACnF,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,MAAM,UAAU,CAAC;AAMjD,OAAO,EAAC,yBAAyB,EAAC,CAAC;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAC,sBAAsB,EAAE,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AACnF,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAC"}
|
package/dist/core/index.js
CHANGED
|
@@ -2,4 +2,5 @@ import KeycloakReactNativeClient from './client';
|
|
|
2
2
|
export { KeycloakReactNativeClient };
|
|
3
3
|
export { LocalStorage } from './storage';
|
|
4
4
|
export { OFFLINE_ACCESS_SCOPE, getUrlHost, isInternalNetworkUrl, isIpAddressHost, resolveBackgroundReauthConfig, shouldShowBackgroundReauth, withOfflineAccessScope, } from './sessionPolicy';
|
|
5
|
+
export { isKeycloakRefreshError, isKeycloakTokenError } from './types';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,MAAM,UAAU,CAAC;AAMjD,OAAO,EAAC,yBAAyB,EAAC,CAAC;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,MAAM,UAAU,CAAC;AAMjD,OAAO,EAAC,yBAAyB,EAAC,CAAC;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAkBzB,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenRefreshSingleFlight.d.ts","sourceRoot":"","sources":["../../src/core/tokenRefreshSingleFlight.ts"],"names":[],"mappings":"AAAA,KAAK,qBAAqB,GAAG;IAC3B,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"tokenRefreshSingleFlight.d.ts","sourceRoot":"","sources":["../../src/core/tokenRefreshSingleFlight.ts"],"names":[],"mappings":"AAAA,KAAK,qBAAqB,GAAG;IAC3B,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAMF,KAAK,8BAA8B,GAAG;IACpC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,6BAA6B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAIF,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,qBAAqB,EAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,qBAAqB,CAAC,CAuChC"}
|
|
@@ -2,11 +2,7 @@ const refreshFlights = new WeakMap();
|
|
|
2
2
|
export async function updateKeycloakTokenOnce(keycloak, minValidity, options = {}) {
|
|
3
3
|
const active = refreshFlights.get(keycloak);
|
|
4
4
|
if (active) {
|
|
5
|
-
|
|
6
|
-
return active.promise;
|
|
7
|
-
}
|
|
8
|
-
await active.promise;
|
|
9
|
-
return updateKeycloakTokenOnce(keycloak, minValidity, options);
|
|
5
|
+
return active.promise;
|
|
10
6
|
}
|
|
11
7
|
const promise = (async () => {
|
|
12
8
|
const refreshed = await keycloak.updateToken(minValidity);
|
|
@@ -29,7 +25,7 @@ export async function updateKeycloakTokenOnce(keycloak, minValidity, options = {
|
|
|
29
25
|
idToken,
|
|
30
26
|
};
|
|
31
27
|
})();
|
|
32
|
-
refreshFlights.set(keycloak, {
|
|
28
|
+
refreshFlights.set(keycloak, { promise });
|
|
33
29
|
try {
|
|
34
30
|
return await promise;
|
|
35
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenRefreshSingleFlight.js","sourceRoot":"","sources":["../../src/core/tokenRefreshSingleFlight.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tokenRefreshSingleFlight.js","sourceRoot":"","sources":["../../src/core/tokenRefreshSingleFlight.ts"],"names":[],"mappings":"AA8BA,MAAM,cAAc,GAAG,IAAI,OAAO,EAAwC,CAAC;AAE3E,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAA+B,EAC/B,WAAmB,EACnB,UAA0C,EAAE;IAE5C,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,KAAK,IAAoC,EAAE;QAC1D,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC;QACrC,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC;QACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC;QAEzC,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC5B,WAAW,EAAE,KAAK;gBAClB,YAAY,EAAE,YAAY,IAAI,SAAS;gBACvC,YAAY,EAAE,YAAY,IAAI,SAAS;gBACvC,OAAO,EAAE,OAAO,IAAI,SAAS;aAC9B,CAAC,CAAC;YACH,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;QAC9B,CAAC;QAED,OAAO;YACL,SAAS;YACT,KAAK;YACL,YAAY;YACZ,OAAO;SACR,CAAC;IACJ,CAAC,CAAC,EAAE,CAAC;IAEL,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC;IAExC,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;YACtD,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -9,6 +9,31 @@ export interface KeycloakConfigWith2FA extends KeycloakConfig {
|
|
|
9
9
|
getClientSecret?: () => string | undefined | Promise<string | undefined>;
|
|
10
10
|
}
|
|
11
11
|
export type InitRecoveryStrategy = 'none' | 'clear-tokens-and-retry';
|
|
12
|
+
export type KeycloakTokenOperation = 'exchange' | 'refresh' | 'revoke';
|
|
13
|
+
export interface KeycloakTokenErrorDetails {
|
|
14
|
+
operation: KeycloakTokenOperation;
|
|
15
|
+
status?: number;
|
|
16
|
+
error?: string;
|
|
17
|
+
errorDescription?: string;
|
|
18
|
+
errorUri?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface KeycloakTokenError extends Error {
|
|
21
|
+
name: 'KeycloakTokenError';
|
|
22
|
+
details: KeycloakTokenErrorDetails;
|
|
23
|
+
status?: number;
|
|
24
|
+
error?: string;
|
|
25
|
+
errorDescription?: string;
|
|
26
|
+
errorUri?: string;
|
|
27
|
+
operation: KeycloakTokenOperation;
|
|
28
|
+
}
|
|
29
|
+
export type KeycloakRefreshError = Error & {
|
|
30
|
+
status?: number;
|
|
31
|
+
error?: string;
|
|
32
|
+
errorDescription?: string;
|
|
33
|
+
operation: 'refresh';
|
|
34
|
+
};
|
|
35
|
+
export declare const isKeycloakTokenError: (error: unknown) => error is KeycloakTokenError;
|
|
36
|
+
export declare const isKeycloakRefreshError: (error: unknown) => error is KeycloakRefreshError;
|
|
12
37
|
export interface RNKeycloakInitOptions extends KeycloakInitOptions {
|
|
13
38
|
redirectUri?: string;
|
|
14
39
|
onAuthError?: (errorData: {
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,iBAAiB,CAAC;AAE5D,YAAY,EAAC,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAC,CAAC;AAQpE,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAK3D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAK1C,YAAY,CAAC,EAAE,MAAM,CAAC;IAItB,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1E;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.js
CHANGED
|
@@ -1,2 +1,15 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export const isKeycloakTokenError = (error) => {
|
|
2
|
+
if (!error || typeof error !== 'object') {
|
|
3
|
+
return false;
|
|
4
|
+
}
|
|
5
|
+
const candidate = error;
|
|
6
|
+
return candidate.name === 'KeycloakTokenError' && typeof candidate.operation === 'string';
|
|
7
|
+
};
|
|
8
|
+
export const isKeycloakRefreshError = (error) => {
|
|
9
|
+
if (!error || typeof error !== 'object') {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
const candidate = error;
|
|
13
|
+
return candidate.operation === 'refresh' && error instanceof Error;
|
|
14
|
+
};
|
|
2
15
|
//# sourceMappingURL=types.js.map
|
package/dist/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAsEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAA+B,EAAE;IAClF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,KAAoC,CAAC;IACvD,OAAO,SAAS,CAAC,IAAI,KAAK,oBAAoB,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC;AAC5F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAc,EAAiC,EAAE;IACtF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,KAAsC,CAAC;IACzD,OAAO,SAAS,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,YAAY,KAAK,CAAC;AACrE,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import 'react-native-get-random-values';
|
|
2
2
|
import KeycloakReactNativeClient from './core/client';
|
|
3
|
-
export type { KeycloakConfig, KeycloakConfigWith2FA, KeycloakTokens, RNKeycloakInitOptions, KeycloakLoginOptions, TokenUpdateResult, KeycloakProfile, AuthState, InitRecoveryStrategy, StoredTokenInitPolicy, } from './core/types';
|
|
3
|
+
export type { KeycloakConfig, KeycloakConfigWith2FA, KeycloakTokens, RNKeycloakInitOptions, KeycloakLoginOptions, TokenUpdateResult, KeycloakProfile, AuthState, InitRecoveryStrategy, StoredTokenInitPolicy, KeycloakRefreshError, KeycloakTokenError, KeycloakTokenErrorDetails, KeycloakTokenOperation, } from './core/types';
|
|
4
|
+
export { isKeycloakRefreshError, isKeycloakTokenError } from './core';
|
|
4
5
|
export type { SuccessFeedbackConfig } from './_lib';
|
|
5
6
|
export { KeycloakReactNativeClient };
|
|
6
7
|
export { KeycloakProvider, useKeycloakTheme } from './context';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,gCAAgC,CAAC;AAExC,OAAO,yBAAyB,MAAM,eAAe,CAAC;AAGtD,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,gCAAgC,CAAC;AAExC,OAAO,yBAAyB,MAAM,eAAe,CAAC;AAGtD,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,QAAQ,CAAC;AACpE,YAAY,EAAC,qBAAqB,EAAC,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAC,yBAAyB,EAAC,CAAC;AAGnC,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,WAAW,CAAC;AAC7D,YAAY,EACV,qBAAqB,EACrB,aAAa,EACb,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAC,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAC,MAAM,SAAS,CAAC;AACpF,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAC1D,YAAY,EAAC,SAAS,EAAE,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAG5D,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,MAAM,CAAC;AAGd,OAAO,EAAC,QAAQ,EAAE,eAAe,EAAC,MAAM,WAAW,CAAC;AAGpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAG5C,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAC;AACrE,YAAY,EAAC,uBAAuB,EAAE,mBAAmB,EAAC,MAAM,SAAS,CAAC;AAC1E,YAAY,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAC,qBAAqB,EAAC,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import 'react-native-get-random-values';
|
|
2
2
|
import KeycloakReactNativeClient from './core/client';
|
|
3
|
+
export { isKeycloakRefreshError, isKeycloakTokenError } from './core';
|
|
3
4
|
export { KeycloakReactNativeClient };
|
|
4
5
|
export { KeycloakProvider, useKeycloakTheme } from './context';
|
|
5
6
|
export { useKeycloakAuth, useToken, useReauth, useKeycloakAuthScreen } from './hooks';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,gCAAgC,CAAC;AAExC,OAAO,yBAAyB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,gCAAgC,CAAC;AAExC,OAAO,yBAAyB,MAAM,eAAe,CAAC;AAmBtD,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,QAAQ,CAAC;AAGpE,OAAO,EAAC,yBAAyB,EAAC,CAAC;AAGnC,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,WAAW,CAAC;AAS7D,OAAO,EAAC,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAC,MAAM,SAAS,CAAC;AASpF,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAI1D,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,MAAM,CAAC;AAGd,OAAO,EAAC,QAAQ,EAAE,eAAe,EAAC,MAAM,WAAW,CAAC;AAGpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAG5C,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAC;AAGrE,OAAO,EAAC,qBAAqB,EAAC,MAAM,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bmc-soft/keycloak-auth",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.15",
|
|
4
4
|
"description": "Production-ready Keycloak authentication package for React Native with optimized performance and security",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"clean": "rm -rf dist && rm -f tsconfig.tsbuildinfo",
|
|
68
68
|
"prepack": "npm run build",
|
|
69
69
|
"prepublishOnly": "npm run clean && npm run build",
|
|
70
|
-
"test": "node tests/sessionPolicy.test.cjs && node tests/publicApiExports.test.cjs && node tests/tokenRefreshSingleFlight.test.cjs && node tests/authPatchRegression.test.cjs && node tests/successAuthAnimation.test.cjs",
|
|
70
|
+
"test": "node tests/sessionPolicy.test.cjs && node tests/publicApiExports.test.cjs && node tests/tokenErrorContract.test.cjs && node tests/tokenRefreshSingleFlight.test.cjs && node tests/authPatchRegression.test.cjs && node tests/successAuthAnimation.test.cjs",
|
|
71
71
|
"typecheck": "tsc --noEmit"
|
|
72
72
|
},
|
|
73
73
|
"keywords": [
|