oidc-spa 0.1.1 → 1.0.1
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 +47 -22
- package/index.d.ts +1 -2
- package/index.js +2 -5
- package/index.js.map +1 -1
- 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/index.ts +1 -2
- package/src/oidc.ts +11 -11
- package/src/react.tsx +3 -3
- package/src/tools/decodeJwt.ts +2 -0
- package/src/tools/{urlSearchParams.ts → urlQueryParams.ts} +7 -9
- package/tools/decodeJwt.d.ts +2 -0
- package/tools/decodeJwt.js +9 -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
|
@@ -27,18 +27,18 @@
|
|
|
27
27
|
An OIDC client designed for Single Page Applications, typically [Vite](https://vitejs.dev/) projects.
|
|
28
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
|
-
|
|
32
|
+
### [oidc-client-ts](https://github.com/authts/oidc-client-ts)
|
|
33
33
|
|
|
34
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.
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
### [react-oidc-context](https://github.com/authts/react-oidc-context)
|
|
37
37
|
|
|
38
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
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
40
|
|
|
41
|
-
|
|
41
|
+
## Usage
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
44
|
$ yarn add oidc-spa
|
|
@@ -56,7 +56,7 @@ Create a `silent-sso.html` file and put it in your public directory.
|
|
|
56
56
|
</html>
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
### Option 1: Usage without involving the UI framework
|
|
60
60
|
|
|
61
61
|
```ts
|
|
62
62
|
import { createOidc, decodeJwt } from "oidc-spa";
|
|
@@ -100,7 +100,7 @@ import { createOidc, decodeJwt } from "oidc-spa";
|
|
|
100
100
|
})();
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
-
##
|
|
103
|
+
## Option 2: Usage directly within React
|
|
104
104
|
|
|
105
105
|
```tsx
|
|
106
106
|
import { createOidcProvider, useOidc } from "oidc-spa/react";
|
|
@@ -136,6 +136,11 @@ function App() {
|
|
|
136
136
|
);
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
+
return <AppLoggedIn />;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function AppLoggedIn() {
|
|
143
|
+
const { oidc } = useOidc();
|
|
139
144
|
const { user } = useUser();
|
|
140
145
|
|
|
141
146
|
return (
|
|
@@ -152,7 +157,7 @@ function useUser() {
|
|
|
152
157
|
const { oidc } = useOidc();
|
|
153
158
|
|
|
154
159
|
if (!oidc.isUserLoggedIn) {
|
|
155
|
-
throw new Error("This hook should be used only on authenticated
|
|
160
|
+
throw new Error("This hook should be used only on authenticated routes");
|
|
156
161
|
}
|
|
157
162
|
|
|
158
163
|
const { idToken } = oidc.getTokens();
|
|
@@ -160,6 +165,7 @@ function useUser() {
|
|
|
160
165
|
const user = useMemo(
|
|
161
166
|
() =>
|
|
162
167
|
decodeJwt<{
|
|
168
|
+
// Use https://jwt.io/ to tell what's in your idToken
|
|
163
169
|
sub: string;
|
|
164
170
|
preferred_username: string;
|
|
165
171
|
}>(idToken),
|
|
@@ -170,14 +176,43 @@ function useUser() {
|
|
|
170
176
|
}
|
|
171
177
|
```
|
|
172
178
|
|
|
173
|
-
|
|
179
|
+
## Demo setup
|
|
180
|
+
|
|
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:
|
|
174
194
|
|
|
175
|
-
|
|
176
|
-
- Fully fledged app: https://github.com/InseeFrLab/onyxia
|
|
195
|
+
### Onyxia
|
|
177
196
|
|
|
178
|
-
|
|
197
|
+
- [Source code](https://github.com/InseeFrLab/onyxia)
|
|
198
|
+
- [Public instance](https://datalab.sspcloud.fr)
|
|
179
199
|
|
|
180
|
-
|
|
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>
|
|
203
|
+
|
|
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
|
|
181
216
|
|
|
182
217
|
You have made some changes to the code and you want to test them
|
|
183
218
|
in your app before submitting a pull request?
|
|
@@ -211,13 +246,3 @@ are in the same directory.
|
|
|
211
246
|
> Note for the maintainer: You might run into issues if you do not list all your singleton dependencies in
|
|
212
247
|
> `src/link-in-app.js -> singletonDependencies`. A singleton dependency is a dependency that can
|
|
213
248
|
> only be present once in an App. Singleton dependencies are usually listed as peerDependencies example `react`, `@emotion/*`.
|
|
214
|
-
|
|
215
|
-
## Releasing
|
|
216
|
-
|
|
217
|
-
For releasing a new version on GitHub and NPM you don't need to create a tag.
|
|
218
|
-
Just update the `package.json` version number and push.
|
|
219
|
-
|
|
220
|
-
For publishing a release candidate update your `package.json` with `1.3.4-rc.0` (`.1`, `.2`, ...).
|
|
221
|
-
It also work if you do it from a branch that have an open PR on main.
|
|
222
|
-
|
|
223
|
-
> Make sure your have defined the `NPM_TOKEN` repository secret or NPM publishing will fail.
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.decodeJwt = exports.createOidc = void 0;
|
|
7
4
|
var oidc_1 = require("./oidc");
|
|
8
5
|
Object.defineProperty(exports, "createOidc", { enumerable: true, get: function () { return oidc_1.createOidc; } });
|
|
9
|
-
var
|
|
10
|
-
exports
|
|
6
|
+
var decodeJwt_1 = require("./tools/decodeJwt");
|
|
7
|
+
Object.defineProperty(exports, "decodeJwt", { enumerable: true, get: function () { return decodeJwt_1.decodeJwt; } });
|
|
11
8
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":";;;AAAA,+BAAoC;AAA3B,kGAAA,UAAU,OAAA;AAEnB,+CAA8C;AAArC,sGAAA,SAAS,OAAA"}
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAwD;AACxD,+BAA8B;AAC9B,2EAA0E;AAC1E,uCAAsC;AACtC,yDAAuF;AACvF,yDAAwD;AACxD,6CAA4C;AAiC5C,IAAM,mCAAmC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAU,CAAC;AAExF,SAAsB,UAAU,CAAC,MAMhC;;;;;;;oBAEO,SAAS,GAIT,MAAM,UAJG,EACT,QAAQ,GAGR,MAAM,SAHE,EACR,KAEA,MAAM,aAFoD,EAA1D,YAAY,mBAAG,UAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,qBAAkB,KAAA,EAC1D,KACA,MAAM,2BADiC,EAAvC,0BAA0B,mBAAG,UAAA,GAAG,IAAI,OAAA,GAAG,EAAH,CAAG,KAAA,CAChC;oBAEL,UAAU,GAAG,IAAA,+BAAc,EAAC,UAAG,SAAS,cAAI,QAAQ,CAAE,CAAC,CAAC;oBACxD,aAAa,GAAG,YAAY,CAAC;oBAE7B,WAAW,GAAG,IAAI,4BAAW,CAAC;wBAChC,WAAW,EAAE,SAAS;wBACtB,WAAW,EAAE,QAAQ;wBACrB,cAAc,EAAE,EAAE,CAAC,iCAAiC;wBACpD,eAAe,EAAE,MAAM;wBACvB,OAAO,EAAE,gBAAgB;wBACzB,sBAAsB,EAAE,KAAK;wBAC7B,qBAAqB,EAAE,UAAG,YAAY,cAAI,aAAa,cAAI,UAAU,CAAE;qBAC1E,CAAC,CAAC;oBAEG,KAAK,GAA8B,UAAO,EAA+B;4BAA7B,2BAA2B,iCAAA;;4BAOzE,SAAS,GAAG;gCAAC,cAA+C;qCAA/C,UAA+C,EAA/C,qBAA+C,EAA/C,IAA+C;oCAA/C,yBAA+C;;gCACxD,IAAM,WAAW,QAAO,QAAQ,YAAR,QAAQ,iCAAI,IAAI,aAAC,CAAC;gCAE1C,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE;oCAC1B,KAAK,EAAE,UAAC,MAAM,EAAE,IAAI;wCAChB,IAAI,IAAI,KAAK,MAAM,EAAE;4CACjB,OAAO,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;yCACvD;wCAED,kBAAkB;wCAClB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;oCACxB,CAAC;iCACJ,CAAC,CAAC;4BACP,CAAC;;;;;wCAfK,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC;wCAiB5B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;wCAEvC,YAAY,GAAK,IAAA,mCAAkB,EAAC;4CAChD,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;4CAC3B,MAAM,EAAE,aAAa;4CACrB,OAAO,EAAE,UAAU;yCACtB,CAAC,OAJ0B,CAIzB;wCAEH,qBAAM,WAAW,CAAC,cAAc,CAAC;gDAC7B,YAAY,cAAA;gDACZ,gBAAgB,EAAE,2BAA2B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;6CACvE,CAAC,EAAA;;wCAHF,SAGE,CAAC;wCACH,sBAAO,IAAI,OAAO,CAAQ,cAAO,CAAC,CAAC,EAAC;;;;qBACvC,CAAC;oBAEoB,qBAAM,CAAC,SAAe,OAAO;;;;;;;4CAEvC,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;4CAE/B;gDACU,MAAM,GAAG,IAAA,0CAAyB,EAAC,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,KAAA,EAAE,CAAC,CAAC;gDAEzE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE;oDACnD,wBAAyC;iDAC5C;gDAED,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;6CACvB;4CAED;gDACU,MAAM,GAAG,IAAA,0CAAyB,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAA,EAAE,CAAC,CAAC;gDAEnE,IAAI,MAAM,CAAC,UAAU,EAAE;oDACnB,MAAM,IAAI,KAAK,CAAC,sBAAe,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC;iDAClD;6CACJ;4CAEG,eAAe,GAAG,mBAAmB,CAAC;;gDAE1C,KAAmB,wCAAA,SAAA,mCAAmC,CAAA,iOAAE;oDAAnD;oDACK,MAAM,GAAG,IAAA,0CAAyB,EAAC,EAAE,IAAI,QAAA,EAAE,GAAG,KAAA,EAAE,CAAC,CAAC;oDAExD,IAAA,eAAM,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oDAE1B,eAAe,GAAG,IAAA,mCAAkB,EAAC;wDACjC,KAAK,EAAE,eAAe;wDACtB,MAAM,EAAE,MAAI;wDACZ,OAAO,EAAE,MAAM,CAAC,KAAK;qDACxB,CAAC,CAAC,MAAM,CAAC;oDAEV,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;iDACvB;;;;;;;;;4CAED,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;4CAEpC,IAAI,GAAqB,SAAS,CAAC;;;;4CAG5B,qBAAM,WAAW,CAAC,sBAAsB,CAAC,eAAe,CAAC,EAAA;;4CAAhE,IAAI,GAAG,SAAyD,CAAC;;;;4CAEjE,0EAA0E;4CAC1E,sBAAO,SAAS,EAAC;gDAGrB,sBAAO,IAAI,EAAC;gDAIC,qBAAM,WAAW,CAAC,OAAO,EAAE,EAAA;;4CAAlC,IAAI,GAAG,SAA2B;4CAExC,IAAI,IAAI,KAAK,IAAI,EAAE;gDACf,yBAA2B;6CAC9B;;;;4CAIG,qBAAM,WAAW,CAAC,YAAY,EAAE,EAAA;;4CAAhC,SAAgC,CAAC;;;;4CAEjC,sBAAO,SAAS,EAAC;iDAGrB,sBAAO,IAAI,EAAC;;4CAIN,qBAAmB,IAAI,mBAAQ,EAAsB,CAAC;4CAEtD,YAAU,UAAU,CACtB;gDACI,OAAA,kBAAgB,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,kDAA2C,QAAQ,CAAE,CAAC,CACnE;4CAFD,CAEC,EACL,IAAI,CACP,CAAC;4CAEI,aAAW,UAAC,KAAmB;;gDACjC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;oDAC3E,OAAO;iDACV;gDAED,IAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;gDAEvB;oDACI,IAAI,MAAM,SAA8C,CAAC;oDAEzD,IAAI;wDACA,MAAM,GAAG,IAAA,0CAAyB,EAAC,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,KAAA,EAAE,CAAC,CAAC;qDACtE;oDAAC,WAAM;wDACJ,wDAAwD;wDACxD,OAAO;qDACV;oDAED,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE;wDACnD,OAAO;qDACV;iDACJ;gDAED,YAAY,CAAC,SAAO,CAAC,CAAC;gDAEtB,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAQ,CAAC,CAAC;gDAEhD;oDACI,IAAM,MAAM,GAAG,IAAA,0CAAyB,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAA,EAAE,CAAC,CAAC;oDAEnE,IAAI,MAAM,CAAC,UAAU,EAAE;wDACnB,kBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wDACpC,OAAO;qDACV;iDACJ;gDAED,IAAI,eAAe,GAAG,mBAAmB,CAAC;;oDAE1C,KAAmB,IAAA,wCAAA,SAAA,mCAAmC,CAAA,wFAAA,yIAAE;wDAAnD,IAAM,MAAI,gDAAA;wDACX,IAAM,MAAM,GAAG,IAAA,0CAAyB,EAAC,EAAE,IAAI,QAAA,EAAE,GAAG,KAAA,EAAE,CAAC,CAAC;wDAExD,IAAA,eAAM,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC;wDAE1B,eAAe,GAAG,IAAA,mCAAkB,EAAC;4DACjC,KAAK,EAAE,eAAe;4DACtB,MAAM,EAAE,MAAI;4DACZ,OAAO,EAAE,MAAM,CAAC,KAAK;yDACxB,CAAC,CAAC,MAAM,CAAC;qDACb;;;;;;;;;gDAED,kBAAgB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;4CAC9C,CAAC,CAAC;4CAEF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAQ,EAAE,KAAK,CAAC,CAAC;4CAEpD,WAAW,CAAC,YAAY,CAAC,EAAE,+BAA+B,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;gDACnE,oBAAoB;4CACxB,CAAC,CAAC,CAAC;4CAEqB,qBAAM,kBAAgB,CAAC,EAAE,EAAA;;4CAA3C,eAAe,GAAG,SAAyB;4CAEjD,IAAI,eAAe,KAAK,SAAS,EAAE;gDAC/B,yBAAoC;6CACvC;4CAEY,qBAAM,WAAW,CAAC,sBAAsB,CAAC,eAAe,CAAC,EAAA;;4CAAhE,IAAI,GAAG,SAAyD;4CAEtE,sBAAO,IAAI,EAAC;iDAGhB,sBAAO,SAAS,EAAC;;;;yBACpB,CAAC,EAAE,CAAC,IAAI,CAAC,UAAA,IAAI;4BACV,IAAI,IAAI,KAAK,SAAS,EAAE;gCACpB,OAAO,SAAS,CAAC;6BACpB;4BAED,IAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;4BAElC,IAAI,MAAM,CAAC,0BAA0B,GAAG,MAAM,CAAC,yBAAyB,EAAE;gCACtE,OAAO,CAAC,IAAI,CACR;oCACI,kEAAkE;oCAClE,uDAAuD;oCACvD,mDAA4C,QAAQ,cAAI,SAAS,CAAE;iCACtE,CAAC,IAAI,CAAC,GAAG,CAAC,CACd,CAAC;6BACL;4BAED,OAAO,MAAM,CAAC;wBAClB,CAAC,CAAC,EAAA;;oBAxKI,aAAa,GAAG,SAwKpB;oBAEI,MAAM,GAAgB;wBACxB,QAAQ,EAAE;4BACN,SAAS,WAAA;4BACT,QAAQ,UAAA;yBACX;qBACJ,CAAC;oBAEF,IAAI,aAAa,KAAK,SAAS,EAAE;wBAC7B,sBAAO,IAAA,OAAE,wBACF,MAAM,KACT,gBAAgB,EAAE,KAAK,EACvB,KAAK,OAAA,IACP,EAAC;qBACN;oBAEK,IAAI,GAAG,IAAA,OAAE,wBACR,MAAM,KACT,gBAAgB,EAAE,IAAI,EACtB,WAAW,EAAE,cAAM,OAAA,CAAC;4BAChB,aAAa,EAAE,aAAa,CAAC,WAAW;4BACxC,SAAS,EAAE,aAAa,CAAC,OAAO;4BAChC,cAAc,EAAE,aAAa,CAAC,YAAY;4BAC1C,4BAA4B,EAAE,aAAa,CAAC,0BAA0B;4BACtE,2BAA2B,EAAE,aAAa,CAAC,yBAAyB;yBACvE,CAAC,EANiB,CAMjB,EACF,QAAQ,EAAE,UAAO,EAAc;gCAAZ,UAAU,gBAAA;;;;gDACzB,qBAAM,WAAW,CAAC,eAAe,CAAC;gDAC9B,0BAA0B,EAAE,CAAC;oDACzB,QAAQ,UAAU,EAAE;wDAChB,KAAK,cAAc;4DACf,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;wDAChC,KAAK,MAAM;4DACP,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;qDACrC;gDACL,CAAC,CAAC,EAAE;6CACP,CAAC,EAAA;;4CATF,SASE,CAAC;4CACH,sBAAO,IAAI,OAAO,CAAQ,cAAO,CAAC,CAAC,EAAC;;;;yBACvC,EACD,aAAa,EAAE;;;;4CACE,qBAAM,WAAW,CAAC,YAAY,EAAE,EAAA;;wCAAvC,IAAI,GAAG,SAAgC;wCAE7C,IAAA,eAAM,EAAC,IAAI,KAAK,IAAI,CAAC,CAAC;wCAEtB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;;;;6BACpD,IACH,CAAC;oBAEH,CAAC,SAAS,sBAAsB;wBAA/B,iBAcA;wBAbG,IAAM,kBAAkB,GACpB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,yBAAyB,EAAE,aAAa,CAAC,0BAA0B,CAAC;4BAC3F,IAAI,CAAC,GAAG,EAAE,CAAC;wBAEf,UAAU,CAAC;;;;;;wCAEH,qBAAM,IAAI,CAAC,WAAW,EAAE,EAAA;;wCAAxB,SAAwB,CAAC;;;;wCAEzB,qBAAM,KAAK,CAAC,EAAE,6BAA6B,EAAE,IAAI,EAAE,CAAC,EAAA;;wCAApD,SAAoD,CAAC;;;wCAGzD,sBAAsB,EAAE,CAAC;;;;6BAC5B,EAAE,kBAAkB,GAAG,6BAA6B,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;oBACrE,CAAC,CAAC,EAAE,CAAC;oBAEL,sBAAO,IAAI,EAAC;;;;CACf;AA1SD,gCA0SC;AAED,SAAS,YAAY,CAAC,IAAU;IAC5B,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;IAEtC,IAAM,yBAAyB,GAAG,CAAC;QAC/B,kBAAkB,EAAE;YACR,IAAA,UAAU,GAAK,IAAI,WAAT,CAAU;YAE5B,IAAI,UAAU,KAAK,SAAS,EAAE;gBAC1B,MAAM,kBAAkB,CAAC;aAC5B;YAED,OAAO,UAAU,GAAG,IAAI,CAAC;SAC5B;QAED,aAAa,EAAE;YACX,IAAM,cAAc,GAAG,IAAA,iDAAuB,EAAC,WAAW,CAAC,CAAC;YAE5D,IAAI,cAAc,KAAK,SAAS,EAAE;gBAC9B,MAAM,aAAa,CAAC;aACvB;YAED,OAAO,cAAc,CAAC;SACzB;QAED,IAAA,eAAM,EAAC,KAAK,EAAE,4CAA4C,CAAC,CAAC;IAChE,CAAC,CAAC,EAAE,CAAC;IAEL,IAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;IAExC,IAAA,eAAM,EAAC,YAAY,KAAK,SAAS,EAAE,8CAA8C,CAAC,CAAC;IAEnF,IAAM,0BAA0B,GAAG,CAAC;QAChC,aAAa,EAAE;YACX,IAAM,cAAc,GAAG,IAAA,iDAAuB,EAAC,YAAY,CAAC,CAAC;YAE7D,IAAI,cAAc,KAAK,SAAS,EAAE;gBAC9B,MAAM,aAAa,CAAC;aACvB;YAED,OAAO,cAAc,CAAC;SACzB;QAED,IAAA,eAAM,EAAC,KAAK,EAAE,6CAA6C,CAAC,CAAC;IACjE,CAAC,CAAC,EAAE,CAAC;IAEL,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;IAE9B,IAAA,eAAM,EAAC,OAAO,KAAK,SAAS,EAAE,yCAAyC,CAAC,CAAC;IAEzE,OAAO;QACH,WAAW,aAAA;QACX,yBAAyB,2BAAA;QACzB,YAAY,cAAA;QACZ,0BAA0B,4BAAA;QAC1B,OAAO,SAAA;KACV,CAAC;AACN,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oidc-spa",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "1.0.1",
|
|
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/index.ts
CHANGED
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() {
|
|
@@ -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
|
-
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.decodeJwt = void 0;
|
|
7
|
+
var jwt_decode_1 = __importDefault(require("jwt-decode"));
|
|
8
|
+
exports.decodeJwt = jwt_decode_1.default;
|
|
9
|
+
//# sourceMappingURL=decodeJwt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decodeJwt.js","sourceRoot":"","sources":["../src/tools/decodeJwt.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAmC;AAC1B,oBADF,oBAAS,CACE"}
|
|
@@ -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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"}
|