zavadil-ts-common 1.1.47 → 1.1.48
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 +8 -2
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/oauth/OAuthRestClient.d.ts +3 -2
- package/dist/oauth/OAuthTokenManager.d.ts +4 -1
- package/dist/oauth/RestClientWithOAuth.d.ts +2 -0
- package/package.json +1 -1
- package/src/oauth/OAuthRestClient.ts +6 -2
- package/src/oauth/OAuthTokenManager.ts +17 -6
- package/src/oauth/RestClientWithOAuth.ts +9 -0
package/package.json
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import {RestClient} from "../client
|
1
|
+
import {RestClient} from "../client";
|
2
2
|
import {StringUtil} from "../util";
|
3
3
|
|
4
4
|
export type TokenRequestPayloadBase = {
|
@@ -45,7 +45,7 @@ export type JwksPayload = {
|
|
45
45
|
|
46
46
|
/**
|
47
47
|
* This implements rest client for OAuth server - https://github.com/lotcz/oauth-server
|
48
|
-
* Provide basic url, /api/oauth prefix will be added automatically
|
48
|
+
* Provide basic url, /api/oauth path prefix will be added automatically
|
49
49
|
*/
|
50
50
|
export class OAuthRestClient extends RestClient {
|
51
51
|
|
@@ -57,6 +57,10 @@ export class OAuthRestClient extends RestClient {
|
|
57
57
|
return this.getJson('jwks.json');
|
58
58
|
}
|
59
59
|
|
60
|
+
verifyIdToken(idToken: string): Promise<IdTokenPayload> {
|
61
|
+
return this.getJson(`id-tokens/verify/${idToken}`);
|
62
|
+
}
|
63
|
+
|
60
64
|
requestIdTokenFromLogin(request: RequestIdTokenFromLoginPayload): Promise<IdTokenPayload> {
|
61
65
|
return this.postJson('id-tokens/from-login', request);
|
62
66
|
}
|
@@ -1,10 +1,13 @@
|
|
1
1
|
import {AccessTokenPayload, IdTokenPayload, OAuthRestClient, RequestIdTokenFromLoginPayload} from "./OAuthRestClient";
|
2
|
+
import {EventManager} from "../component";
|
2
3
|
|
3
4
|
/**
|
4
5
|
* Manages refresh of id and access tokens.
|
5
6
|
*/
|
6
7
|
export class OAuthTokenManager {
|
7
8
|
|
9
|
+
private eventManager: EventManager = new EventManager();
|
10
|
+
|
8
11
|
oAuthServer: OAuthRestClient;
|
9
12
|
|
10
13
|
audience: string;
|
@@ -18,6 +21,10 @@ export class OAuthTokenManager {
|
|
18
21
|
this.oAuthServer = new OAuthRestClient(oAuthServerBaseUrl);
|
19
22
|
}
|
20
23
|
|
24
|
+
addIdTokenChangedHandler(handler: () => any) {
|
25
|
+
this.eventManager.addEventListener('id-token-changed', handler);
|
26
|
+
}
|
27
|
+
|
21
28
|
isTokenExpired(expires?: Date | null): boolean {
|
22
29
|
if (expires === undefined || expires === null) return false;
|
23
30
|
const now = Date.now();
|
@@ -49,7 +56,7 @@ export class OAuthTokenManager {
|
|
49
56
|
}
|
50
57
|
|
51
58
|
reset() {
|
52
|
-
this.
|
59
|
+
this.setIdToken(undefined);
|
53
60
|
this.accessToken = undefined;
|
54
61
|
}
|
55
62
|
|
@@ -62,10 +69,7 @@ export class OAuthTokenManager {
|
|
62
69
|
.refreshIdToken({idToken: this.idToken.idToken})
|
63
70
|
.then(
|
64
71
|
(t) => {
|
65
|
-
|
66
|
-
return Promise.reject("Received ID token is not valid!");
|
67
|
-
}
|
68
|
-
this.idToken = t;
|
72
|
+
this.setIdToken(t);
|
69
73
|
return t.idToken;
|
70
74
|
}
|
71
75
|
)
|
@@ -73,11 +77,18 @@ export class OAuthTokenManager {
|
|
73
77
|
return Promise.resolve(this.idToken.idToken);
|
74
78
|
}
|
75
79
|
|
76
|
-
setIdToken(token
|
80
|
+
setIdToken(token?: IdTokenPayload) {
|
77
81
|
if (!this.isValidIdToken(token)) {
|
78
82
|
throw new Error("Received ID token is not valid!");
|
79
83
|
}
|
80
84
|
this.idToken = token;
|
85
|
+
this.eventManager.triggerEvent('id-token-changed');
|
86
|
+
}
|
87
|
+
|
88
|
+
verifyIdToken(token: string): Promise<boolean> {
|
89
|
+
return this.oAuthServer.verifyIdToken(token)
|
90
|
+
.then((t) => this.setIdToken(t))
|
91
|
+
.then(() => true)
|
81
92
|
}
|
82
93
|
|
83
94
|
login(login: string, password: string): Promise<boolean> {
|
@@ -23,6 +23,10 @@ export class RestClientWithOAuth extends RestClient {
|
|
23
23
|
this.insecureClient = new RestClient(url);
|
24
24
|
}
|
25
25
|
|
26
|
+
addIdTokenChangedHandler(handler: () => any) {
|
27
|
+
this.getTokenManager().then((m) => m.addIdTokenChangedHandler(handler));
|
28
|
+
}
|
29
|
+
|
26
30
|
getServerInfo(): Promise<ServerOAuthInfoPayload> {
|
27
31
|
if (this.serverInfo !== undefined) {
|
28
32
|
return Promise.resolve(this.serverInfo);
|
@@ -52,6 +56,11 @@ export class RestClientWithOAuth extends RestClient {
|
|
52
56
|
.then(() => true)
|
53
57
|
}
|
54
58
|
|
59
|
+
setIdTokenRaw(token: string): Promise<boolean> {
|
60
|
+
return this.getTokenManager()
|
61
|
+
.then(m => m.verifyIdToken(token))
|
62
|
+
}
|
63
|
+
|
55
64
|
getHeaders(): Promise<RestClientHeaders> {
|
56
65
|
return this.getTokenManager()
|
57
66
|
.then(sm => sm.getAccessToken())
|