oidc-spa 0.1.0 → 1.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/README.md +81 -38
- package/oidc.js +10 -10
- package/oidc.js.map +1 -1
- package/package.json +11 -6
- package/react.d.ts +2 -2
- package/react.js +5 -5
- package/react.js.map +1 -1
- package/src/oidc.ts +11 -11
- package/src/react.tsx +3 -3
- package/src/tools/decodeJwt.ts +0 -0
- package/src/tools/{urlSearchParams.ts → urlQueryParams.ts} +7 -9
- package/tools/decodeJwt.d.ts +0 -0
- package/tools/decodeJwt.js +2 -0
- package/tools/decodeJwt.js.map +1 -0
- package/tools/{urlSearchParams.d.ts → urlQueryParams.d.ts} +3 -4
- package/tools/{urlSearchParams.js → urlQueryParams.js} +10 -14
- package/tools/{urlSearchParams.js.map → urlQueryParams.js.map} +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="https://
|
|
2
|
+
<img src="https://github.com/garronej/oidc-spa/assets/6702424/6adde1f7-b7b6-4b1a-b48f-bd02095b99ea">
|
|
3
3
|
</p>
|
|
4
4
|
<p align="center">
|
|
5
5
|
<i>Openidconnect client for Single Page Applications</i>
|
|
@@ -24,24 +24,21 @@
|
|
|
24
24
|
<a href="https://github.com/garronej/oidc-spa">Documentation</a>
|
|
25
25
|
</p>
|
|
26
26
|
|
|
27
|
-
An OIDC client for Single Page Applications
|
|
28
|
-
|
|
27
|
+
An OIDC client designed for Single Page Applications, typically [Vite](https://vitejs.dev/) projects.
|
|
28
|
+
With a streamlined API, you can easily integrate OIDC without needing to understand every detail of the protocol.
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
## Comparison with Existing Libraries
|
|
31
31
|
|
|
32
|
-
-
|
|
33
|
-
- It's used under the hood by this lib but it's hard to setup directly in a SPA setup especially the silent SSO.
|
|
34
|
-
- It's more resilient do misconfigured server.
|
|
35
|
-
- It restrict what params can be passed on the url when redirecting to the login page.
|
|
32
|
+
### [oidc-client-ts](https://github.com/authts/oidc-client-ts)
|
|
36
33
|
|
|
37
|
-
|
|
34
|
+
While `oidc-client-ts` serves as a comprehensive toolkit, our library aims to provide a simplified, ready-to-use adapter. We utilize `oidc-client-ts` internally but abstract away most of its intricacies.
|
|
38
35
|
|
|
39
|
-
-
|
|
40
|
-
completely different problem space they have no business being intertwined.
|
|
41
|
-
This library provide an optional React adapter for convenience in the spirit of being truly ready to use but don't
|
|
42
|
-
get mistaken, it's trivial you could as well do without it.
|
|
36
|
+
### [react-oidc-context](https://github.com/authts/react-oidc-context)
|
|
43
37
|
|
|
44
|
-
|
|
38
|
+
Our library takes a modular approach to OIDC and React, treating them as separate concerns that don't necessarily have to be intertwined.
|
|
39
|
+
We offer an optional React adapter for added convenience, but it's not a requirement to use it and [it's really trivial anyway](https://github.com/garronej/oidc-spa/blob/main/src/react.tsx).
|
|
40
|
+
|
|
41
|
+
## Usage
|
|
45
42
|
|
|
46
43
|
```bash
|
|
47
44
|
$ yarn add oidc-spa
|
|
@@ -59,9 +56,7 @@ Create a `silent-sso.html` file and put it in your public directory.
|
|
|
59
56
|
</html>
|
|
60
57
|
```
|
|
61
58
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
## Isolated from the UI library
|
|
59
|
+
### Option 1: Usage without involving the UI framework
|
|
65
60
|
|
|
66
61
|
```ts
|
|
67
62
|
import { createOidc, decodeJwt } from "oidc-spa";
|
|
@@ -91,19 +86,21 @@ import { createOidc, decodeJwt } from "oidc-spa";
|
|
|
91
86
|
idToken
|
|
92
87
|
} = oidc.getTokens();
|
|
93
88
|
|
|
94
|
-
const
|
|
89
|
+
const user = decodeJwt<{
|
|
95
90
|
// Use https://jwt.io/ to tell what's in your idToken
|
|
96
91
|
sub: string;
|
|
97
92
|
preferred_username: string;
|
|
98
93
|
}>(idToken);
|
|
99
94
|
|
|
95
|
+
console.log(`Hello ${user.preferred_username}`);
|
|
96
|
+
|
|
100
97
|
// To call when the user click on logout.
|
|
101
98
|
oidc.logout();
|
|
102
99
|
}
|
|
103
100
|
})();
|
|
104
101
|
```
|
|
105
102
|
|
|
106
|
-
##
|
|
103
|
+
## Option 2: Usage directly within React
|
|
107
104
|
|
|
108
105
|
```tsx
|
|
109
106
|
import { createOidcProvider, useOidc } from "oidc-spa/react";
|
|
@@ -139,27 +136,83 @@ function App() {
|
|
|
139
136
|
);
|
|
140
137
|
}
|
|
141
138
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
139
|
+
return <AppLoggedIn />;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function AppLoggedIn() {
|
|
143
|
+
const { oidc } = useOidc();
|
|
144
|
+
const { user } = useUser();
|
|
145
145
|
|
|
146
146
|
return (
|
|
147
147
|
<>
|
|
148
|
-
<h1>Hello {preferred_username}</h1>
|
|
148
|
+
<h1>Hello {user.preferred_username}</h1>
|
|
149
149
|
<button onClick={() => oidc.logout()}>Log out</button>
|
|
150
150
|
</>
|
|
151
151
|
);
|
|
152
152
|
}
|
|
153
|
+
|
|
154
|
+
// Convenience hook to get the parsed idToken
|
|
155
|
+
// To call only when the user is logged in
|
|
156
|
+
function useUser() {
|
|
157
|
+
const { oidc } = useOidc();
|
|
158
|
+
|
|
159
|
+
if (!oidc.isUserLoggedIn) {
|
|
160
|
+
throw new Error("This hook should be used only on authenticated routes");
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const { idToken } = oidc.getTokens();
|
|
164
|
+
|
|
165
|
+
const user = useMemo(
|
|
166
|
+
() =>
|
|
167
|
+
decodeJwt<{
|
|
168
|
+
// Use https://jwt.io/ to tell what's in your idToken
|
|
169
|
+
sub: string;
|
|
170
|
+
preferred_username: string;
|
|
171
|
+
}>(idToken),
|
|
172
|
+
idToken
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
return { user };
|
|
176
|
+
}
|
|
153
177
|
```
|
|
154
178
|
|
|
155
|
-
|
|
179
|
+
## Demo setup
|
|
156
180
|
|
|
157
|
-
|
|
158
|
-
|
|
181
|
+
<p align="center">
|
|
182
|
+
<img width="764" alt="image" src="https://github.com/garronej/oidc-spa/assets/6702424/1c8922de-d724-4e9d-b630-e82562449612">
|
|
183
|
+
</p>
|
|
184
|
+
|
|
185
|
+
A very basic setup with Keycloak and Create React App.
|
|
186
|
+
|
|
187
|
+
- It's live here: https://starter.keycloakify.dev/
|
|
188
|
+
- The source code is [here](https://github.com/keycloakify/keycloakify-starter).
|
|
189
|
+
The setup is collocated with a custom Keycloak theme. The part where we use `oidc-spa` is [here](https://github.com/keycloakify/keycloakify-starter/blob/main/src/App/App.tsx).
|
|
190
|
+
|
|
191
|
+
## Showcases
|
|
192
|
+
|
|
193
|
+
This library is powers the authentication of the following platforms:
|
|
194
|
+
|
|
195
|
+
### Onyxia
|
|
196
|
+
|
|
197
|
+
- [Source code](https://github.com/InseeFrLab/onyxia)
|
|
198
|
+
- [Public instance](https://datalab.sspcloud.fr)
|
|
159
199
|
|
|
160
|
-
|
|
200
|
+
<a href="https://youtu.be/FvpNfVrxBFM">
|
|
201
|
+
<img width="1712" alt="image" src="https://user-images.githubusercontent.com/6702424/231314534-2eeb1ab5-5460-4caa-b78d-55afd400c9fc.png">
|
|
202
|
+
</a>
|
|
161
203
|
|
|
162
|
-
|
|
204
|
+
### The French Interministerial Base of Free Software
|
|
205
|
+
|
|
206
|
+
- [Source code](https://github.com/codegouvfr/sill-web/)
|
|
207
|
+
- [Deployment of the website](https://code.gouv.fr/sill)
|
|
208
|
+
|
|
209
|
+
<a href="https://youtu.be/AT3CvmY_Y7M?si=Edkf0vRNjosGLA3R">
|
|
210
|
+
<img width="1712" alt="image" src="https://github.com/garronej/i18nifty/assets/6702424/aa06cc30-b2bd-4c8b-b435-2f875f53175b">
|
|
211
|
+
</a>
|
|
212
|
+
|
|
213
|
+
## Contributing
|
|
214
|
+
|
|
215
|
+
### Testing your changes in an external app
|
|
163
216
|
|
|
164
217
|
You have made some changes to the code and you want to test them
|
|
165
218
|
in your app before submitting a pull request?
|
|
@@ -193,13 +246,3 @@ are in the same directory.
|
|
|
193
246
|
> Note for the maintainer: You might run into issues if you do not list all your singleton dependencies in
|
|
194
247
|
> `src/link-in-app.js -> singletonDependencies`. A singleton dependency is a dependency that can
|
|
195
248
|
> only be present once in an App. Singleton dependencies are usually listed as peerDependencies example `react`, `@emotion/*`.
|
|
196
|
-
|
|
197
|
-
## Releasing
|
|
198
|
-
|
|
199
|
-
For releasing a new version on GitHub and NPM you don't need to create a tag.
|
|
200
|
-
Just update the `package.json` version number and push.
|
|
201
|
-
|
|
202
|
-
For publishing a release candidate update your `package.json` with `1.3.4-rc.0` (`.1`, `.2`, ...).
|
|
203
|
-
It also work if you do it from a branch that have an open PR on main.
|
|
204
|
-
|
|
205
|
-
> Make sure your have defined the `NPM_TOKEN` repository secret or NPM publishing will fail.
|
package/oidc.js
CHANGED
|
@@ -88,7 +88,7 @@ var oidc_client_ts_1 = require("oidc-client-ts");
|
|
|
88
88
|
var id_1 = require("tsafe/id");
|
|
89
89
|
var readExpirationTimeInJwt_1 = require("./tools/readExpirationTimeInJwt");
|
|
90
90
|
var assert_1 = require("tsafe/assert");
|
|
91
|
-
var
|
|
91
|
+
var urlQueryParams_1 = require("./tools/urlQueryParams");
|
|
92
92
|
var fnv1aHashToHex_1 = require("./tools/fnv1aHashToHex");
|
|
93
93
|
var Deferred_1 = require("./tools/Deferred");
|
|
94
94
|
var paramsToRetrieveFromSuccessfulLogin = ["code", "state", "session_state"];
|
|
@@ -136,7 +136,7 @@ function createOidc(params) {
|
|
|
136
136
|
case 0:
|
|
137
137
|
URL_real = window.URL;
|
|
138
138
|
Object.defineProperty(window, "URL", { "value": URL });
|
|
139
|
-
redirect_uri = (0,
|
|
139
|
+
redirect_uri = (0, urlQueryParams_1.addQueryParamToUrl)({
|
|
140
140
|
"url": window.location.href,
|
|
141
141
|
"name": configHashKey,
|
|
142
142
|
"value": configHash
|
|
@@ -161,14 +161,14 @@ function createOidc(params) {
|
|
|
161
161
|
case 0:
|
|
162
162
|
url = window.location.href;
|
|
163
163
|
{
|
|
164
|
-
result = (0,
|
|
164
|
+
result = (0, urlQueryParams_1.retrieveQueryParamFromUrl)({ "name": configHashKey, url: url });
|
|
165
165
|
if (!result.wasPresent || result.value !== configHash) {
|
|
166
166
|
return [3 /*break*/, 5];
|
|
167
167
|
}
|
|
168
168
|
url = result.newUrl;
|
|
169
169
|
}
|
|
170
170
|
{
|
|
171
|
-
result = (0,
|
|
171
|
+
result = (0, urlQueryParams_1.retrieveQueryParamFromUrl)({ "name": "error", url: url });
|
|
172
172
|
if (result.wasPresent) {
|
|
173
173
|
throw new Error("OIDC error: ".concat(result.value));
|
|
174
174
|
}
|
|
@@ -177,9 +177,9 @@ function createOidc(params) {
|
|
|
177
177
|
try {
|
|
178
178
|
for (paramsToRetrieveFromSuccessfulLogin_1 = __values(paramsToRetrieveFromSuccessfulLogin), paramsToRetrieveFromSuccessfulLogin_1_1 = paramsToRetrieveFromSuccessfulLogin_1.next(); !paramsToRetrieveFromSuccessfulLogin_1_1.done; paramsToRetrieveFromSuccessfulLogin_1_1 = paramsToRetrieveFromSuccessfulLogin_1.next()) {
|
|
179
179
|
name_1 = paramsToRetrieveFromSuccessfulLogin_1_1.value;
|
|
180
|
-
result = (0,
|
|
180
|
+
result = (0, urlQueryParams_1.retrieveQueryParamFromUrl)({ name: name_1, url: url });
|
|
181
181
|
(0, assert_1.assert)(result.wasPresent);
|
|
182
|
-
loginSuccessUrl = (0,
|
|
182
|
+
loginSuccessUrl = (0, urlQueryParams_1.addQueryParamToUrl)({
|
|
183
183
|
"url": loginSuccessUrl,
|
|
184
184
|
"name": name_1,
|
|
185
185
|
"value": result.value
|
|
@@ -239,7 +239,7 @@ function createOidc(params) {
|
|
|
239
239
|
{
|
|
240
240
|
var result = void 0;
|
|
241
241
|
try {
|
|
242
|
-
result = (0,
|
|
242
|
+
result = (0, urlQueryParams_1.retrieveQueryParamFromUrl)({ "name": configHashKey, url: url });
|
|
243
243
|
}
|
|
244
244
|
catch (_b) {
|
|
245
245
|
// This could possibly happen if url is not a valid url.
|
|
@@ -252,7 +252,7 @@ function createOidc(params) {
|
|
|
252
252
|
clearTimeout(timeout_1);
|
|
253
253
|
window.removeEventListener("message", listener_1);
|
|
254
254
|
{
|
|
255
|
-
var result = (0,
|
|
255
|
+
var result = (0, urlQueryParams_1.retrieveQueryParamFromUrl)({ "name": "error", url: url });
|
|
256
256
|
if (result.wasPresent) {
|
|
257
257
|
dLoginSuccessUrl_1.resolve(undefined);
|
|
258
258
|
return;
|
|
@@ -262,9 +262,9 @@ function createOidc(params) {
|
|
|
262
262
|
try {
|
|
263
263
|
for (var paramsToRetrieveFromSuccessfulLogin_2 = __values(paramsToRetrieveFromSuccessfulLogin), paramsToRetrieveFromSuccessfulLogin_2_1 = paramsToRetrieveFromSuccessfulLogin_2.next(); !paramsToRetrieveFromSuccessfulLogin_2_1.done; paramsToRetrieveFromSuccessfulLogin_2_1 = paramsToRetrieveFromSuccessfulLogin_2.next()) {
|
|
264
264
|
var name_2 = paramsToRetrieveFromSuccessfulLogin_2_1.value;
|
|
265
|
-
var result = (0,
|
|
265
|
+
var result = (0, urlQueryParams_1.retrieveQueryParamFromUrl)({ name: name_2, url: url });
|
|
266
266
|
(0, assert_1.assert)(result.wasPresent);
|
|
267
|
-
loginSuccessUrl = (0,
|
|
267
|
+
loginSuccessUrl = (0, urlQueryParams_1.addQueryParamToUrl)({
|
|
268
268
|
"url": loginSuccessUrl,
|
|
269
269
|
"name": name_2,
|
|
270
270
|
"value": result.value
|
package/oidc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oidc.js","sourceRoot":"","sources":["src/oidc.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAwD;AACxD,+BAA8B;AAC9B,2EAA0E;AAC1E,uCAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"oidc.js","sourceRoot":"","sources":["src/oidc.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oidc-spa",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Openidconnect client for Single Page Applications",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
"./index": "./index.js",
|
|
14
14
|
"./oidc": "./oidc.js",
|
|
15
15
|
"./react": "./react.js",
|
|
16
|
+
"./tools/decodeJwt": "./tools/decodeJwt.js",
|
|
16
17
|
"./tools/Deferred": "./tools/Deferred.js",
|
|
17
18
|
"./tools/fnv1aHashToHex": "./tools/fnv1aHashToHex.js",
|
|
18
19
|
"./tools/readExpirationTimeInJwt": "./tools/readExpirationTimeInJwt.js",
|
|
19
|
-
"./tools/
|
|
20
|
+
"./tools/urlQueryParams": "./tools/urlQueryParams.js"
|
|
20
21
|
},
|
|
21
22
|
"lint-staged": {
|
|
22
23
|
"*.{ts,tsx,json,md}": [
|
|
@@ -35,9 +36,10 @@
|
|
|
35
36
|
"./src/oidc.ts",
|
|
36
37
|
"./src/react.tsx",
|
|
37
38
|
"./src/tools/Deferred.ts",
|
|
39
|
+
"./src/tools/decodeJwt.ts",
|
|
38
40
|
"./src/tools/fnv1aHashToHex.ts",
|
|
39
41
|
"./src/tools/readExpirationTimeInJwt.ts",
|
|
40
|
-
"./src/tools/
|
|
42
|
+
"./src/tools/urlQueryParams.ts",
|
|
41
43
|
"./index.d.ts",
|
|
42
44
|
"./index.js",
|
|
43
45
|
"./index.js.map",
|
|
@@ -50,15 +52,18 @@
|
|
|
50
52
|
"./tools/Deferred.d.ts",
|
|
51
53
|
"./tools/Deferred.js",
|
|
52
54
|
"./tools/Deferred.js.map",
|
|
55
|
+
"./tools/decodeJwt.d.ts",
|
|
56
|
+
"./tools/decodeJwt.js",
|
|
57
|
+
"./tools/decodeJwt.js.map",
|
|
53
58
|
"./tools/fnv1aHashToHex.d.ts",
|
|
54
59
|
"./tools/fnv1aHashToHex.js",
|
|
55
60
|
"./tools/fnv1aHashToHex.js.map",
|
|
56
61
|
"./tools/readExpirationTimeInJwt.d.ts",
|
|
57
62
|
"./tools/readExpirationTimeInJwt.js",
|
|
58
63
|
"./tools/readExpirationTimeInJwt.js.map",
|
|
59
|
-
"./tools/
|
|
60
|
-
"./tools/
|
|
61
|
-
"./tools/
|
|
64
|
+
"./tools/urlQueryParams.d.ts",
|
|
65
|
+
"./tools/urlQueryParams.js",
|
|
66
|
+
"./tools/urlQueryParams.js.map"
|
|
62
67
|
],
|
|
63
68
|
"keywords": [],
|
|
64
69
|
"homepage": "https://github.com/garronej/oidc-spa",
|
package/react.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
import { createOidc, type Oidc } from "./oidc";
|
|
3
|
-
export declare function
|
|
4
|
-
|
|
3
|
+
export declare function createOidcProvider(params: Parameters<typeof createOidc>[0]): {
|
|
4
|
+
OidcProvider: (props: {
|
|
5
5
|
fallback?: ReactNode;
|
|
6
6
|
children: ReactNode;
|
|
7
7
|
}) => import("react/jsx-runtime").JSX.Element;
|
package/react.js
CHANGED
|
@@ -27,15 +27,15 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
27
27
|
return ar;
|
|
28
28
|
};
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.useOidc = exports.
|
|
30
|
+
exports.useOidc = exports.createOidcProvider = void 0;
|
|
31
31
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
32
32
|
var react_1 = require("react");
|
|
33
33
|
var oidc_1 = require("./oidc");
|
|
34
34
|
var assert_1 = require("tsafe/assert");
|
|
35
35
|
var oidcClientContext = (0, react_1.createContext)(undefined);
|
|
36
|
-
function
|
|
36
|
+
function createOidcProvider(params) {
|
|
37
37
|
var prOidc = (0, oidc_1.createOidc)(params);
|
|
38
|
-
function
|
|
38
|
+
function OidcProvider(props) {
|
|
39
39
|
var children = props.children, fallback = props.fallback;
|
|
40
40
|
var _a = __read((0, react_1.useState)(undefined), 2), oidcClient = _a[0], setOidcClient = _a[1];
|
|
41
41
|
(0, react_1.useEffect)(function () {
|
|
@@ -46,9 +46,9 @@ function createOidcClientProvider(params) {
|
|
|
46
46
|
}
|
|
47
47
|
return (0, jsx_runtime_1.jsx)(oidcClientContext.Provider, __assign({ value: oidcClient }, { children: children }));
|
|
48
48
|
}
|
|
49
|
-
return {
|
|
49
|
+
return { OidcProvider: OidcProvider };
|
|
50
50
|
}
|
|
51
|
-
exports.
|
|
51
|
+
exports.createOidcProvider = createOidcProvider;
|
|
52
52
|
function useOidc() {
|
|
53
53
|
var oidc = (0, react_1.useContext)(oidcClientContext);
|
|
54
54
|
(0, assert_1.assert)(oidc !== undefined, "You must use useOidc inside a OidcClientProvider");
|
package/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["src/react.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAuF;AACvF,+BAA+C;AAC/C,uCAAsC;AAEtC,IAAM,iBAAiB,GAAG,IAAA,qBAAa,EAAmB,SAAS,CAAC,CAAC;AAErE,SAAgB,
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["src/react.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAuF;AACvF,+BAA+C;AAC/C,uCAAsC;AAEtC,IAAM,iBAAiB,GAAG,IAAA,qBAAa,EAAmB,SAAS,CAAC,CAAC;AAErE,SAAgB,kBAAkB,CAAC,MAAwC;IACvE,IAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,MAAM,CAAC,CAAC;IAElC,SAAS,YAAY,CAAC,KAAoD;QAC9D,IAAA,QAAQ,GAAe,KAAK,SAApB,EAAE,QAAQ,GAAK,KAAK,SAAV,CAAW;QAE/B,IAAA,KAAA,OAA8B,IAAA,gBAAQ,EAAmB,SAAS,CAAC,IAAA,EAAlE,UAAU,QAAA,EAAE,aAAa,QAAyC,CAAC;QAE1E,IAAA,iBAAS,EAAC;YACN,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,UAAU,KAAK,SAAS,EAAE;YAC1B,OAAO,2DAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAI,CAAC;SAC1D;QAED,OAAO,uBAAC,iBAAiB,CAAC,QAAQ,aAAC,KAAK,EAAE,UAAU,gBAAG,QAAQ,IAA8B,CAAC;IAClG,CAAC;IAED,OAAO,EAAE,YAAY,cAAA,EAAE,CAAC;AAC5B,CAAC;AApBD,gDAoBC;AAED,SAAgB,OAAO;IACnB,IAAM,IAAI,GAAG,IAAA,kBAAU,EAAC,iBAAiB,CAAC,CAAC;IAC3C,IAAA,eAAM,EAAC,IAAI,KAAK,SAAS,EAAE,kDAAkD,CAAC,CAAC;IAC/E,OAAO,EAAE,IAAI,MAAA,EAAE,CAAC;AACpB,CAAC;AAJD,0BAIC"}
|
package/src/oidc.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { UserManager, type User } from "oidc-client-ts";
|
|
|
2
2
|
import { id } from "tsafe/id";
|
|
3
3
|
import { readExpirationTimeInJwt } from "./tools/readExpirationTimeInJwt";
|
|
4
4
|
import { assert } from "tsafe/assert";
|
|
5
|
-
import {
|
|
5
|
+
import { addQueryParamToUrl, retrieveQueryParamFromUrl } from "./tools/urlQueryParams";
|
|
6
6
|
import { fnv1aHashToHex } from "./tools/fnv1aHashToHex";
|
|
7
7
|
import { Deferred } from "./tools/Deferred";
|
|
8
8
|
|
|
@@ -90,7 +90,7 @@ export async function createOidc(params: {
|
|
|
90
90
|
|
|
91
91
|
Object.defineProperty(window, "URL", { "value": URL });
|
|
92
92
|
|
|
93
|
-
const { newUrl: redirect_uri } =
|
|
93
|
+
const { newUrl: redirect_uri } = addQueryParamToUrl({
|
|
94
94
|
"url": window.location.href,
|
|
95
95
|
"name": configHashKey,
|
|
96
96
|
"value": configHash
|
|
@@ -108,7 +108,7 @@ export async function createOidc(params: {
|
|
|
108
108
|
let url = window.location.href;
|
|
109
109
|
|
|
110
110
|
{
|
|
111
|
-
const result =
|
|
111
|
+
const result = retrieveQueryParamFromUrl({ "name": configHashKey, url });
|
|
112
112
|
|
|
113
113
|
if (!result.wasPresent || result.value !== configHash) {
|
|
114
114
|
break read_successful_login_query_params;
|
|
@@ -118,7 +118,7 @@ export async function createOidc(params: {
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
{
|
|
121
|
-
const result =
|
|
121
|
+
const result = retrieveQueryParamFromUrl({ "name": "error", url });
|
|
122
122
|
|
|
123
123
|
if (result.wasPresent) {
|
|
124
124
|
throw new Error(`OIDC error: ${result.value}`);
|
|
@@ -128,11 +128,11 @@ export async function createOidc(params: {
|
|
|
128
128
|
let loginSuccessUrl = "https://dummy.com";
|
|
129
129
|
|
|
130
130
|
for (const name of paramsToRetrieveFromSuccessfulLogin) {
|
|
131
|
-
const result =
|
|
131
|
+
const result = retrieveQueryParamFromUrl({ name, url });
|
|
132
132
|
|
|
133
133
|
assert(result.wasPresent);
|
|
134
134
|
|
|
135
|
-
loginSuccessUrl =
|
|
135
|
+
loginSuccessUrl = addQueryParamToUrl({
|
|
136
136
|
"url": loginSuccessUrl,
|
|
137
137
|
"name": name,
|
|
138
138
|
"value": result.value
|
|
@@ -191,10 +191,10 @@ export async function createOidc(params: {
|
|
|
191
191
|
const url = event.data;
|
|
192
192
|
|
|
193
193
|
{
|
|
194
|
-
let result: ReturnType<typeof
|
|
194
|
+
let result: ReturnType<typeof retrieveQueryParamFromUrl>;
|
|
195
195
|
|
|
196
196
|
try {
|
|
197
|
-
result =
|
|
197
|
+
result = retrieveQueryParamFromUrl({ "name": configHashKey, url });
|
|
198
198
|
} catch {
|
|
199
199
|
// This could possibly happen if url is not a valid url.
|
|
200
200
|
return;
|
|
@@ -210,7 +210,7 @@ export async function createOidc(params: {
|
|
|
210
210
|
window.removeEventListener("message", listener);
|
|
211
211
|
|
|
212
212
|
{
|
|
213
|
-
const result =
|
|
213
|
+
const result = retrieveQueryParamFromUrl({ "name": "error", url });
|
|
214
214
|
|
|
215
215
|
if (result.wasPresent) {
|
|
216
216
|
dLoginSuccessUrl.resolve(undefined);
|
|
@@ -221,11 +221,11 @@ export async function createOidc(params: {
|
|
|
221
221
|
let loginSuccessUrl = "https://dummy.com";
|
|
222
222
|
|
|
223
223
|
for (const name of paramsToRetrieveFromSuccessfulLogin) {
|
|
224
|
-
const result =
|
|
224
|
+
const result = retrieveQueryParamFromUrl({ name, url });
|
|
225
225
|
|
|
226
226
|
assert(result.wasPresent);
|
|
227
227
|
|
|
228
|
-
loginSuccessUrl =
|
|
228
|
+
loginSuccessUrl = addQueryParamToUrl({
|
|
229
229
|
"url": loginSuccessUrl,
|
|
230
230
|
"name": name,
|
|
231
231
|
"value": result.value
|
package/src/react.tsx
CHANGED
|
@@ -4,10 +4,10 @@ import { assert } from "tsafe/assert";
|
|
|
4
4
|
|
|
5
5
|
const oidcClientContext = createContext<Oidc | undefined>(undefined);
|
|
6
6
|
|
|
7
|
-
export function
|
|
7
|
+
export function createOidcProvider(params: Parameters<typeof createOidc>[0]) {
|
|
8
8
|
const prOidc = createOidc(params);
|
|
9
9
|
|
|
10
|
-
function
|
|
10
|
+
function OidcProvider(props: { fallback?: ReactNode; children: ReactNode }) {
|
|
11
11
|
const { children, fallback } = props;
|
|
12
12
|
|
|
13
13
|
const [oidcClient, setOidcClient] = useState<Oidc | undefined>(undefined);
|
|
@@ -23,7 +23,7 @@ export function createOidcClientProvider(params: Parameters<typeof createOidc>[0
|
|
|
23
23
|
return <oidcClientContext.Provider value={oidcClient}>{children}</oidcClientContext.Provider>;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
return {
|
|
26
|
+
return { OidcProvider };
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export function useOidc() {
|
|
File without changes
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
export function
|
|
1
|
+
export function addQueryParamToUrl(params: { url: string; name: string; value: string }): {
|
|
2
|
+
newUrl: string;
|
|
3
|
+
} {
|
|
2
4
|
const { url, name, value } = params;
|
|
3
5
|
|
|
4
6
|
let newUrl = url;
|
|
5
7
|
|
|
6
|
-
const result =
|
|
8
|
+
const result = retrieveQueryParamFromUrl({
|
|
7
9
|
url,
|
|
8
10
|
name
|
|
9
11
|
});
|
|
@@ -19,7 +21,7 @@ export function addParamToUrl(params: { url: string; name: string; value: string
|
|
|
19
21
|
return { newUrl };
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
export function
|
|
24
|
+
export function retrieveAllQueryParamStartingWithPrefixFromUrl<
|
|
23
25
|
Prefix extends string,
|
|
24
26
|
DoLeave extends boolean
|
|
25
27
|
>(params: {
|
|
@@ -58,13 +60,13 @@ export function retrieveAllParamStartingWithPrefixFromUrl<
|
|
|
58
60
|
};
|
|
59
61
|
}
|
|
60
62
|
|
|
61
|
-
export function
|
|
63
|
+
export function retrieveQueryParamFromUrl(params: {
|
|
62
64
|
url: string;
|
|
63
65
|
name: string;
|
|
64
66
|
}): { wasPresent: false } | { wasPresent: true; newUrl: string; value: string } {
|
|
65
67
|
const { url, name } = params;
|
|
66
68
|
|
|
67
|
-
const { newUrl, values } =
|
|
69
|
+
const { newUrl, values } = retrieveAllQueryParamStartingWithPrefixFromUrl({
|
|
68
70
|
url,
|
|
69
71
|
"prefix": name,
|
|
70
72
|
"doLeavePrefixInResults": true
|
|
@@ -80,7 +82,3 @@ export function retrieveParamFromUrl(params: {
|
|
|
80
82
|
"wasPresent": false
|
|
81
83
|
};
|
|
82
84
|
}
|
|
83
|
-
|
|
84
|
-
export function updateSearchBarUrl(url: string) {
|
|
85
|
-
window.history.replaceState("", "", url);
|
|
86
|
-
}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decodeJwt.js","sourceRoot":"","sources":["../src/tools/decodeJwt.ts"],"names":[],"mappings":""}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export declare function
|
|
1
|
+
export declare function addQueryParamToUrl(params: {
|
|
2
2
|
url: string;
|
|
3
3
|
name: string;
|
|
4
4
|
value: string;
|
|
5
5
|
}): {
|
|
6
6
|
newUrl: string;
|
|
7
7
|
};
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function retrieveAllQueryParamStartingWithPrefixFromUrl<Prefix extends string, DoLeave extends boolean>(params: {
|
|
9
9
|
url: string;
|
|
10
10
|
prefix: Prefix;
|
|
11
11
|
doLeavePrefixInResults: DoLeave;
|
|
@@ -13,7 +13,7 @@ export declare function retrieveAllParamStartingWithPrefixFromUrl<Prefix extends
|
|
|
13
13
|
newUrl: string;
|
|
14
14
|
values: Record<DoLeave extends true ? `${Prefix}${string}` : string, string>;
|
|
15
15
|
};
|
|
16
|
-
export declare function
|
|
16
|
+
export declare function retrieveQueryParamFromUrl(params: {
|
|
17
17
|
url: string;
|
|
18
18
|
name: string;
|
|
19
19
|
}): {
|
|
@@ -23,4 +23,3 @@ export declare function retrieveParamFromUrl(params: {
|
|
|
23
23
|
newUrl: string;
|
|
24
24
|
value: string;
|
|
25
25
|
};
|
|
26
|
-
export declare function updateSearchBarUrl(url: string): void;
|
|
@@ -16,11 +16,11 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
16
16
|
return ar;
|
|
17
17
|
};
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.
|
|
20
|
-
function
|
|
19
|
+
exports.retrieveQueryParamFromUrl = exports.retrieveAllQueryParamStartingWithPrefixFromUrl = exports.addQueryParamToUrl = void 0;
|
|
20
|
+
function addQueryParamToUrl(params) {
|
|
21
21
|
var url = params.url, name = params.name, value = params.value;
|
|
22
22
|
var newUrl = url;
|
|
23
|
-
var result =
|
|
23
|
+
var result = retrieveQueryParamFromUrl({
|
|
24
24
|
url: url,
|
|
25
25
|
name: name
|
|
26
26
|
});
|
|
@@ -30,8 +30,8 @@ function addParamToUrl(params) {
|
|
|
30
30
|
newUrl += "".concat(newUrl.includes("?") ? "&" : newUrl.endsWith("?") ? "" : "?").concat(name, "=").concat(encodeURIComponent(value));
|
|
31
31
|
return { newUrl: newUrl };
|
|
32
32
|
}
|
|
33
|
-
exports.
|
|
34
|
-
function
|
|
33
|
+
exports.addQueryParamToUrl = addQueryParamToUrl;
|
|
34
|
+
function retrieveAllQueryParamStartingWithPrefixFromUrl(params) {
|
|
35
35
|
var url = params.url, prefix = params.prefix, doLeavePrefixInResults = params.doLeavePrefixInResults;
|
|
36
36
|
var _a = __read(url.split("?"), 2), baseUrl = _a[0], _b = _a[1], locationSearch = _b === void 0 ? "" : _b;
|
|
37
37
|
var values = {};
|
|
@@ -58,10 +58,10 @@ function retrieveAllParamStartingWithPrefixFromUrl(params) {
|
|
|
58
58
|
values: values
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
exports.
|
|
62
|
-
function
|
|
61
|
+
exports.retrieveAllQueryParamStartingWithPrefixFromUrl = retrieveAllQueryParamStartingWithPrefixFromUrl;
|
|
62
|
+
function retrieveQueryParamFromUrl(params) {
|
|
63
63
|
var url = params.url, name = params.name;
|
|
64
|
-
var _a =
|
|
64
|
+
var _a = retrieveAllQueryParamStartingWithPrefixFromUrl({
|
|
65
65
|
url: url,
|
|
66
66
|
"prefix": name,
|
|
67
67
|
"doLeavePrefixInResults": true
|
|
@@ -76,9 +76,5 @@ function retrieveParamFromUrl(params) {
|
|
|
76
76
|
"wasPresent": false
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
|
-
exports.
|
|
80
|
-
|
|
81
|
-
window.history.replaceState("", "", url);
|
|
82
|
-
}
|
|
83
|
-
exports.updateSearchBarUrl = updateSearchBarUrl;
|
|
84
|
-
//# sourceMappingURL=urlSearchParams.js.map
|
|
79
|
+
exports.retrieveQueryParamFromUrl = retrieveQueryParamFromUrl;
|
|
80
|
+
//# sourceMappingURL=urlQueryParams.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"urlQueryParams.js","sourceRoot":"","sources":["../src/tools/urlQueryParams.ts"],"names":[],"mappings":"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"}
|