@elogroup-sereduc/ser-front-core-client 1.1.0 → 2.0.0
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/OAUTH_MIGRATION.md +86 -0
- package/README.md +145 -321
- package/dist/{axios.d.ts → api-client.d.ts} +3 -3
- package/dist/api-client.d.ts.map +1 -0
- package/dist/{axios.js → api-client.js} +11 -11
- package/dist/api-client.js.map +1 -0
- package/dist/auth/bootstrap.d.ts +5 -0
- package/dist/auth/bootstrap.d.ts.map +1 -0
- package/dist/auth/bootstrap.js +28 -0
- package/dist/auth/bootstrap.js.map +1 -0
- package/dist/auth/http-client.d.ts +3 -0
- package/dist/auth/http-client.d.ts.map +1 -0
- package/dist/auth/http-client.js +31 -0
- package/dist/auth/http-client.js.map +1 -0
- package/dist/auth/index.d.ts +18 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +22 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/route-guards.d.ts +14 -0
- package/dist/auth/route-guards.d.ts.map +1 -0
- package/dist/auth/route-guards.js +23 -0
- package/dist/auth/route-guards.js.map +1 -0
- package/dist/auth/ser-oauth-js.d.ts +54 -0
- package/dist/auth/ser-oauth-js.d.ts.map +1 -0
- package/dist/auth/ser-oauth-js.js +405 -0
- package/dist/auth/ser-oauth-js.js.map +1 -0
- package/dist/auth/store.d.ts +14 -0
- package/dist/auth/store.d.ts.map +1 -0
- package/dist/auth/store.js +20 -0
- package/dist/auth/store.js.map +1 -0
- package/dist/index.d.ts +3 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -4
- package/dist/index.js.map +1 -1
- package/dist/keycloak.d.ts +12 -0
- package/dist/keycloak.d.ts.map +1 -1
- package/dist/keycloak.js +226 -9
- package/dist/keycloak.js.map +1 -1
- package/dist/utils/auth.d.ts +8 -0
- package/dist/utils/auth.d.ts.map +1 -1
- package/dist/utils/auth.js +13 -2
- package/dist/utils/auth.js.map +1 -1
- package/package.json +8 -6
- package/public/silent-callback.html +19 -0
- package/public/silent-check-sso.html +30 -0
- package/dist/axios.d.ts.map +0 -1
- package/dist/axios.js.map +0 -1
|
@@ -2,8 +2,14 @@ import axios from "axios";
|
|
|
2
2
|
import { KeycloakService } from "./keycloak.js";
|
|
3
3
|
import { AuthenticationError, TokenRefreshError } from "./types/index.js";
|
|
4
4
|
export function createApiClient(config) {
|
|
5
|
-
const keycloakService =
|
|
6
|
-
|
|
5
|
+
const keycloakService = KeycloakService.getInstance(config.keycloak);
|
|
6
|
+
let initPromise;
|
|
7
|
+
if (!keycloakService.isInitialized) {
|
|
8
|
+
initPromise = keycloakService.initialize();
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
initPromise = Promise.resolve(true);
|
|
12
|
+
}
|
|
7
13
|
const apiClient = axios.create({
|
|
8
14
|
baseURL: config.api.baseURL,
|
|
9
15
|
withCredentials: config.api.withCredentials ?? true,
|
|
@@ -57,16 +63,10 @@ async function handleAuthenticationFailure(error, config) {
|
|
|
57
63
|
window.location.href = redirectUrl;
|
|
58
64
|
}
|
|
59
65
|
}
|
|
60
|
-
export function createSimpleApiClient(
|
|
61
|
-
return createApiClient(
|
|
62
|
-
keycloak: keycloakConfig,
|
|
63
|
-
api: {
|
|
64
|
-
baseURL,
|
|
65
|
-
...options,
|
|
66
|
-
},
|
|
67
|
-
});
|
|
66
|
+
export function createSimpleApiClient(config) {
|
|
67
|
+
return createApiClient(config);
|
|
68
68
|
}
|
|
69
69
|
export function getKeycloakService(apiClient) {
|
|
70
70
|
return apiClient.keycloak;
|
|
71
71
|
}
|
|
72
|
-
//# sourceMappingURL=
|
|
72
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SerOAuth, SerOAuthConfig } from "./ser-oauth-js";
|
|
2
|
+
export declare function createSerOAuth(config: SerOAuthConfig): SerOAuth;
|
|
3
|
+
export declare function createKeycloakAuthFromUrl(authorizationEndpoint: string, clientId: string, idp?: string): SerOAuth;
|
|
4
|
+
export declare function initAuth(kc: SerOAuth, basePath?: string): Promise<boolean>;
|
|
5
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/auth/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAS/D;AAED,wBAAgB,yBAAyB,CACvC,qBAAqB,EAAE,MAAM,EAC7B,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,MAAM,GACX,QAAQ,CAcV;AAED,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,QAAQ,EACZ,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,OAAO,CAAC,CAMlB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SerOAuth } from "./ser-oauth-js";
|
|
2
|
+
export function createSerOAuth(config) {
|
|
3
|
+
const kc = new SerOAuth(config);
|
|
4
|
+
kc.onTokenExpired = () => {
|
|
5
|
+
kc.updateToken(30).catch(() => { });
|
|
6
|
+
};
|
|
7
|
+
return kc;
|
|
8
|
+
}
|
|
9
|
+
export function createKeycloakAuthFromUrl(authorizationEndpoint, clientId, idp) {
|
|
10
|
+
const url = authorizationEndpoint
|
|
11
|
+
.replace(/\/protocol\/openid-connect\/auth$/, "")
|
|
12
|
+
.replace(/\/realms\/[^\/]+$/, "");
|
|
13
|
+
const realm = authorizationEndpoint.match(/\/realms\/([^\/]+)/)?.[1] || "master";
|
|
14
|
+
return createSerOAuth({
|
|
15
|
+
url,
|
|
16
|
+
realm,
|
|
17
|
+
clientId,
|
|
18
|
+
idp,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export async function initAuth(kc, basePath = "") {
|
|
22
|
+
return await kc.init({
|
|
23
|
+
onLoad: "check-sso",
|
|
24
|
+
silentCheckSsoRedirectUri: `${window.location.origin}${basePath}/silent-check-sso.html`,
|
|
25
|
+
pkceMethod: "S256",
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/auth/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,gBAAgB,CAAC;AAE1D,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAGhC,EAAE,CAAC,cAAc,GAAG,GAAG,EAAE;QACvB,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,qBAA6B,EAC7B,QAAgB,EAChB,GAAY;IAEZ,MAAM,GAAG,GAAG,qBAAqB;SAC9B,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC;SAChD,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAEpC,MAAM,KAAK,GACT,qBAAqB,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAErE,OAAO,cAAc,CAAC;QACpB,GAAG;QACH,KAAK;QACL,QAAQ;QACR,GAAG;KACJ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,EAAY,EACZ,WAAmB,EAAE;IAErB,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC;QACnB,MAAM,EAAE,WAAW;QACnB,yBAAyB,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,wBAAwB;QACvF,UAAU,EAAE,MAAM;KACnB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/auth/http-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,iCAiC7D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { useAuthStore } from "./store";
|
|
3
|
+
export function createApiClient(kc, baseURL) {
|
|
4
|
+
const api = axios.create({
|
|
5
|
+
baseURL: baseURL,
|
|
6
|
+
});
|
|
7
|
+
api.interceptors.request.use((config) => {
|
|
8
|
+
const token = useAuthStore.getState().accessToken;
|
|
9
|
+
if (token) {
|
|
10
|
+
config.headers.Authorization = `Bearer ${token}`;
|
|
11
|
+
}
|
|
12
|
+
return config;
|
|
13
|
+
});
|
|
14
|
+
api.interceptors.response.use((r) => r, async (err) => {
|
|
15
|
+
const original = err.config;
|
|
16
|
+
if (err.response?.status === 401 && !original?._retry) {
|
|
17
|
+
original._retry = true;
|
|
18
|
+
const ok = await kc.updateToken(0);
|
|
19
|
+
if (!ok)
|
|
20
|
+
return Promise.reject(err);
|
|
21
|
+
const token = useAuthStore.getState().accessToken;
|
|
22
|
+
original.headers = original.headers ?? {};
|
|
23
|
+
if (token)
|
|
24
|
+
original.headers.Authorization = `Bearer ${token}`;
|
|
25
|
+
return api(original);
|
|
26
|
+
}
|
|
27
|
+
return Promise.reject(err);
|
|
28
|
+
});
|
|
29
|
+
return api;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/auth/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,UAAU,eAAe,CAAC,EAAY,EAAE,OAAgB;IAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC;QAClD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EACR,KAAK,EAAE,GAAe,EAAE,EAAE;QACxB,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAa,CAAC;QACnC,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YACtD,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;YACvB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,EAAE;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEpC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC;YAClD,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAC1C,IAAI,KAAK;gBAAE,QAAQ,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;YAE9D,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CACF,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { SerOAuth } from "./ser-oauth-js";
|
|
2
|
+
export type { SerOAuthConfig, InitOptions, LoginOptions, LogoutOptions, } from "./ser-oauth-js";
|
|
3
|
+
export { useAuthStore } from "./store";
|
|
4
|
+
export type { TokenSet } from "./store";
|
|
5
|
+
export { createApiClient } from "./http-client";
|
|
6
|
+
export { createSerOAuth, createKeycloakAuthFromUrl, initAuth, } from "./bootstrap";
|
|
7
|
+
export { requireAuth, createAuthGuard, requireAdmin, clearAuthSession, } from "./route-guards";
|
|
8
|
+
export type { RequireAuthOptions } from "./route-guards";
|
|
9
|
+
export declare function getAuthState(): {
|
|
10
|
+
authenticated: boolean;
|
|
11
|
+
ready: boolean;
|
|
12
|
+
loading: boolean;
|
|
13
|
+
handleOidcCallback(): Promise<void>;
|
|
14
|
+
};
|
|
15
|
+
export declare function getAuthStore(): {
|
|
16
|
+
getState: typeof getAuthState;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,aAAa,GACd,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,QAAQ,GACT,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzD,wBAAgB,YAAY;;;;;EAa3B;AAED,wBAAgB,YAAY;;EAI3B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export { SerOAuth } from "./ser-oauth-js";
|
|
2
|
+
export { useAuthStore } from "./store";
|
|
3
|
+
import { useAuthStore } from "./store";
|
|
4
|
+
export { createApiClient } from "./http-client";
|
|
5
|
+
export { createSerOAuth, createKeycloakAuthFromUrl, initAuth, } from "./bootstrap";
|
|
6
|
+
export { requireAuth, createAuthGuard, requireAdmin, clearAuthSession, } from "./route-guards";
|
|
7
|
+
export function getAuthState() {
|
|
8
|
+
const store = useAuthStore.getState();
|
|
9
|
+
return {
|
|
10
|
+
authenticated: store.authenticated,
|
|
11
|
+
ready: true,
|
|
12
|
+
loading: false,
|
|
13
|
+
async handleOidcCallback() {
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function getAuthStore() {
|
|
18
|
+
return {
|
|
19
|
+
getState: getAuthState,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAS1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIvC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,QAAQ,GACT,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAIxB,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;IACtC,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK;QAGd,KAAK,CAAC,kBAAkB;QAGxB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,QAAQ,EAAE,YAAY;KACvB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SerOAuth } from "./ser-oauth-js";
|
|
2
|
+
export type RequireAuthOptions = {
|
|
3
|
+
locationPath: string;
|
|
4
|
+
kc: SerOAuth;
|
|
5
|
+
};
|
|
6
|
+
export declare function requireAuth({ locationPath, kc }: RequireAuthOptions): Promise<void>;
|
|
7
|
+
export declare function createAuthGuard(kc: SerOAuth): ({ location }: {
|
|
8
|
+
location: {
|
|
9
|
+
pathname: string;
|
|
10
|
+
};
|
|
11
|
+
}) => Promise<void>;
|
|
12
|
+
export declare function requireAdmin({ locationPath, kc }: RequireAuthOptions): Promise<void>;
|
|
13
|
+
export declare function clearAuthSession(): void;
|
|
14
|
+
//# sourceMappingURL=route-guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-guards.d.ts","sourceRoot":"","sources":["../../src/auth/route-guards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,QAAQ,CAAC;CACd,CAAC;AAkBF,wBAAsB,WAAW,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,kBAAkB,iBAUzE;AAeD,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,IAC5B,cAAc;IAAE,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,mBAM/D;AAKD,wBAAsB,YAAY,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,kBAAkB,iBAM1E;AAKD,wBAAgB,gBAAgB,SAE/B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useAuthStore } from "./store";
|
|
2
|
+
export async function requireAuth({ locationPath, kc }) {
|
|
3
|
+
const state = useAuthStore.getState();
|
|
4
|
+
if (state.authenticated)
|
|
5
|
+
return;
|
|
6
|
+
sessionStorage.setItem("postLoginRedirect", locationPath);
|
|
7
|
+
await kc.login({ redirectUri: window.location.origin + locationPath });
|
|
8
|
+
}
|
|
9
|
+
export function createAuthGuard(kc) {
|
|
10
|
+
return async ({ location }) => {
|
|
11
|
+
await requireAuth({
|
|
12
|
+
locationPath: location.pathname,
|
|
13
|
+
kc,
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export async function requireAdmin({ locationPath, kc }) {
|
|
18
|
+
await requireAuth({ locationPath, kc });
|
|
19
|
+
}
|
|
20
|
+
export function clearAuthSession() {
|
|
21
|
+
sessionStorage.removeItem("postLoginRedirect");
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=route-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-guards.js","sourceRoot":"","sources":["../../src/auth/route-guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAwBvC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAE,YAAY,EAAE,EAAE,EAAsB;IACxE,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;IAEtC,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO;IAGhC,cAAc,CAAC,OAAO,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;IAG1D,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC,CAAC;AACzE,CAAC;AAeD,MAAM,UAAU,eAAe,CAAC,EAAY;IAC1C,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAsC,EAAE,EAAE;QAChE,MAAM,WAAW,CAAC;YAChB,YAAY,EAAE,QAAQ,CAAC,QAAQ;YAC/B,EAAE;SACH,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAKD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAE,YAAY,EAAE,EAAE,EAAsB;IAEzE,MAAM,WAAW,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;AAI1C,CAAC;AAKD,MAAM,UAAU,gBAAgB;IAC9B,cAAc,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export type SerOAuthConfig = {
|
|
2
|
+
url: string;
|
|
3
|
+
realm: string;
|
|
4
|
+
clientId: string;
|
|
5
|
+
idp?: string;
|
|
6
|
+
};
|
|
7
|
+
export type InitOptions = {
|
|
8
|
+
onLoad?: "check-sso" | "login-required";
|
|
9
|
+
silentCheckSsoRedirectUri?: string;
|
|
10
|
+
pkceMethod?: "S256";
|
|
11
|
+
};
|
|
12
|
+
export type LoginOptions = {
|
|
13
|
+
redirectUri?: string;
|
|
14
|
+
scope?: string;
|
|
15
|
+
};
|
|
16
|
+
export type LogoutOptions = {
|
|
17
|
+
redirectUri?: string;
|
|
18
|
+
};
|
|
19
|
+
export declare class SerOAuth {
|
|
20
|
+
onAuthSuccess?: () => void;
|
|
21
|
+
onAuthError?: (err: unknown) => void;
|
|
22
|
+
onAuthLogout?: () => void;
|
|
23
|
+
onTokenExpired?: () => void;
|
|
24
|
+
onTokenRefreshed?: () => void;
|
|
25
|
+
private config;
|
|
26
|
+
private refreshPromise;
|
|
27
|
+
private expiryTimer;
|
|
28
|
+
private pendingState;
|
|
29
|
+
private pendingVerifier;
|
|
30
|
+
private pendingRedirectUri;
|
|
31
|
+
private pkceMethod;
|
|
32
|
+
constructor(config: SerOAuthConfig);
|
|
33
|
+
get authenticated(): boolean;
|
|
34
|
+
get token(): string | null;
|
|
35
|
+
get refreshToken(): string | null;
|
|
36
|
+
get idToken(): string | null;
|
|
37
|
+
init(options?: InitOptions): Promise<boolean>;
|
|
38
|
+
login(options?: LoginOptions): Promise<void>;
|
|
39
|
+
logout(options?: LogoutOptions): Promise<void>;
|
|
40
|
+
updateToken(minValidity?: number): Promise<boolean>;
|
|
41
|
+
private realmBase;
|
|
42
|
+
private authorizeEndpoint;
|
|
43
|
+
private tokenEndpoint;
|
|
44
|
+
private endSessionEndpoint;
|
|
45
|
+
private buildAuthorizeUrl;
|
|
46
|
+
private tryHandleCallbackFromUrl;
|
|
47
|
+
private exchangeCodeForTokens;
|
|
48
|
+
private setTokensFromResponse;
|
|
49
|
+
private clearTokens;
|
|
50
|
+
private armExpiryTimer;
|
|
51
|
+
private refreshTokenFlow;
|
|
52
|
+
private silentCheckSso;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=ser-oauth-js.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ser-oauth-js.d.ts","sourceRoot":"","sources":["../../src/auth/ser-oauth-js.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,CAAC,EAAE,WAAW,GAAG,gBAAgB,CAAC;IACxC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA8BF,qBAAa,QAAQ;IACZ,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAErC,OAAO,CAAC,MAAM,CAAiB;IAE/B,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,WAAW,CAAuB;IAG1C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,UAAU,CAAuB;gBAE7B,MAAM,EAAE,cAAc;IAIlC,IAAI,aAAa,YAEhB;IAED,IAAI,KAAK,kBAER;IAED,IAAI,YAAY,kBAEf;IAED,IAAI,OAAO,kBAEV;IAIK,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAsCjD,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBhD,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlD,WAAW,CAAC,WAAW,SAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAYrD,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,kBAAkB;YAIZ,iBAAiB;YAiCjB,wBAAwB;YA6ExB,qBAAqB;IAsCnC,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,cAAc;YAaR,gBAAgB;IAqC9B,OAAO,CAAC,cAAc;CAqDvB"}
|