oidc-spa 8.6.19 → 8.7.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/backend.d.ts +3 -20
- package/backend.js +50 -242
- package/backend.js.map +1 -1
- package/core/OidcMetadata.d.ts +2 -2
- package/core/OidcMetadata.js.map +1 -1
- package/core/createOidc.d.ts +2 -4
- package/core/createOidc.js +41 -3
- package/core/createOidc.js.map +1 -1
- package/core/dpop.d.ts +20 -0
- package/core/dpop.js +389 -0
- package/core/dpop.js.map +1 -0
- package/core/earlyInit.js +2 -0
- package/core/earlyInit.js.map +1 -1
- package/core/oidcClientTsUserToTokens.d.ts +1 -0
- package/core/oidcClientTsUserToTokens.js +15 -5
- package/core/oidcClientTsUserToTokens.js.map +1 -1
- package/core/tokenExfiltrationDefense.js +49 -6
- package/core/tokenExfiltrationDefense.js.map +1 -1
- package/esm/angular.d.ts +2 -0
- package/esm/angular.mjs.map +1 -1
- package/esm/backend.d.ts +3 -20
- package/esm/backend.mjs +50 -242
- package/esm/backend.mjs.map +1 -1
- package/esm/core/OidcMetadata.d.ts +2 -2
- package/esm/core/OidcMetadata.mjs.map +1 -1
- package/esm/core/createOidc.d.ts +2 -4
- package/esm/core/createOidc.mjs +41 -3
- package/esm/core/createOidc.mjs.map +1 -1
- package/esm/core/dpop.d.ts +20 -0
- package/esm/core/dpop.mjs +384 -0
- package/esm/core/dpop.mjs.map +1 -0
- package/esm/core/earlyInit.mjs +2 -0
- package/esm/core/earlyInit.mjs.map +1 -1
- package/esm/core/oidcClientTsUserToTokens.d.ts +1 -0
- package/esm/core/oidcClientTsUserToTokens.mjs +15 -5
- package/esm/core/oidcClientTsUserToTokens.mjs.map +1 -1
- package/esm/core/tokenExfiltrationDefense.mjs +49 -6
- package/esm/core/tokenExfiltrationDefense.mjs.map +1 -1
- package/esm/react-spa/createOidcSpaApi.mjs +2 -1
- package/esm/react-spa/createOidcSpaApi.mjs.map +1 -1
- package/esm/react-spa/types.d.ts +2 -0
- package/esm/server/createOidcSpaUtils.d.ts +5 -0
- package/esm/server/createOidcSpaUtils.mjs +639 -0
- package/esm/server/createOidcSpaUtils.mjs.map +1 -0
- package/esm/server/index.d.ts +2 -0
- package/esm/server/index.mjs +3 -0
- package/esm/server/index.mjs.map +1 -0
- package/esm/server/types.d.ts +79 -0
- package/esm/server/types.mjs +2 -0
- package/esm/server/types.mjs.map +1 -0
- package/esm/server/utilsBuilder.d.ts +10 -0
- package/esm/server/utilsBuilder.mjs +13 -0
- package/esm/server/utilsBuilder.mjs.map +1 -0
- package/esm/tanstack-start/react/accessTokenValidation_rfc9068.d.ts +1 -1
- package/esm/tanstack-start/react/accessTokenValidation_rfc9068.mjs +102 -94
- package/esm/tanstack-start/react/accessTokenValidation_rfc9068.mjs.map +1 -1
- package/esm/tanstack-start/react/createOidcSpaApi.d.ts +2 -2
- package/esm/tanstack-start/react/createOidcSpaApi.mjs +60 -51
- package/esm/tanstack-start/react/createOidcSpaApi.mjs.map +1 -1
- package/esm/tanstack-start/react/index.d.ts +1 -1
- package/esm/tanstack-start/react/index.mjs +2 -2
- package/esm/tanstack-start/react/index.mjs.map +1 -1
- package/esm/tanstack-start/react/types.d.ts +36 -11
- package/esm/tanstack-start/react/{apiBuilder.d.ts → utilsBuilder.d.ts} +9 -9
- package/esm/tanstack-start/react/{apiBuilder.mjs → utilsBuilder.mjs} +6 -6
- package/esm/tanstack-start/react/utilsBuilder.mjs.map +1 -0
- package/esm/tools/generateES256DPoPProof.d.ts +8 -0
- package/esm/tools/generateES256DPoPProof.mjs +48 -0
- package/esm/tools/generateES256DPoPProof.mjs.map +1 -0
- package/esm/tools/getServerDateNow.d.ts +5 -0
- package/esm/tools/getServerDateNow.mjs +7 -0
- package/esm/tools/getServerDateNow.mjs.map +1 -0
- package/esm/vendor/{backend → server}/evt.mjs +84 -140
- package/esm/vendor/{backend → server}/jose.mjs +5 -27
- package/esm/vendor/{backend → server}/tsafe.d.ts +1 -0
- package/esm/vendor/{backend → server}/tsafe.mjs +6 -0
- package/esm/vendor/{backend → server}/zod.mjs +196 -50
- package/package.json +6 -1
- package/react-spa/createOidcSpaApi.js +2 -1
- package/react-spa/createOidcSpaApi.js.map +1 -1
- package/react-spa/types.d.ts +2 -0
- package/server/createOidcSpaUtils.d.ts +5 -0
- package/server/createOidcSpaUtils.js +642 -0
- package/server/createOidcSpaUtils.js.map +1 -0
- package/server/index.d.ts +2 -0
- package/server/index.js +6 -0
- package/server/index.js.map +1 -0
- package/server/types.d.ts +79 -0
- package/server/types.js +3 -0
- package/server/types.js.map +1 -0
- package/server/utilsBuilder.d.ts +10 -0
- package/server/utilsBuilder.js +16 -0
- package/server/utilsBuilder.js.map +1 -0
- package/src/angular.ts +3 -0
- package/src/backend.ts +63 -364
- package/src/core/OidcMetadata.ts +4 -2
- package/src/core/createOidc.ts +54 -6
- package/src/core/dpop.ts +583 -0
- package/src/core/earlyInit.ts +3 -0
- package/src/core/oidcClientTsUserToTokens.ts +18 -4
- package/src/core/tokenExfiltrationDefense.ts +60 -5
- package/src/react-spa/createOidcSpaApi.ts +2 -1
- package/src/react-spa/types.tsx +3 -0
- package/src/server/createOidcSpaUtils.ts +848 -0
- package/src/server/index.ts +4 -0
- package/src/server/types.tsx +99 -0
- package/src/server/utilsBuilder.ts +41 -0
- package/src/tanstack-start/react/accessTokenValidation_rfc9068.ts +134 -124
- package/src/tanstack-start/react/createOidcSpaApi.ts +73 -69
- package/src/tanstack-start/react/index.ts +2 -2
- package/src/tanstack-start/react/types.tsx +44 -12
- package/src/tanstack-start/react/{apiBuilder.ts → utilsBuilder.ts} +14 -14
- package/src/tools/generateES256DPoPProof.ts +74 -0
- package/src/tools/getServerDateNow.ts +11 -0
- package/src/vendor/{backend → server}/tsafe.ts +1 -0
- package/tools/generateES256DPoPProof.d.ts +8 -0
- package/tools/generateES256DPoPProof.js +51 -0
- package/tools/generateES256DPoPProof.js.map +1 -0
- package/tools/getServerDateNow.d.ts +5 -0
- package/tools/getServerDateNow.js +10 -0
- package/tools/getServerDateNow.js.map +1 -0
- package/vendor/server/evt.js +3 -0
- package/vendor/server/jose.js +3 -0
- package/vendor/{backend → server}/tsafe.d.ts +1 -0
- package/vendor/server/tsafe.js +2 -0
- package/vendor/server/zod.js +3 -0
- package/esm/tanstack-start/react/apiBuilder.mjs.map +0 -1
- package/vendor/backend/evt.js +0 -3
- package/vendor/backend/jose.js +0 -3
- package/vendor/backend/tsafe.js +0 -2
- package/vendor/backend/zod.js +0 -3
- /package/esm/vendor/{backend → server}/evt.d.ts +0 -0
- /package/esm/vendor/{backend → server}/jose.d.ts +0 -0
- /package/esm/vendor/{backend → server}/zod.d.ts +0 -0
- /package/src/vendor/{backend → server}/evt.ts +0 -0
- /package/src/vendor/{backend → server}/jose.ts +0 -0
- /package/src/vendor/{backend → server}/zod.ts +0 -0
- /package/vendor/{backend → server}/evt.d.ts +0 -0
- /package/vendor/{backend → server}/jose.d.ts +0 -0
- /package/vendor/{backend → server}/zod.d.ts +0 -0
|
@@ -6,6 +6,8 @@ import { decodeJwt } from "../tools/decodeJwt";
|
|
|
6
6
|
import type { Oidc } from "./Oidc";
|
|
7
7
|
import { INFINITY_TIME } from "../tools/INFINITY_TIME";
|
|
8
8
|
import { getIsTokenSubstitutionEnabled, getTokensPlaceholders } from "./tokenPlaceholderSubstitution";
|
|
9
|
+
import { registerAccessTokenForDPoP } from "./dpop";
|
|
10
|
+
import { createGetServerDateNow, type ParamsOfCreateGetServerDateNow } from "../tools/getServerDateNow";
|
|
9
11
|
|
|
10
12
|
export function oidcClientTsUserToTokens<DecodedIdToken extends Record<string, unknown>>(params: {
|
|
11
13
|
configId: string;
|
|
@@ -15,6 +17,7 @@ export function oidcClientTsUserToTokens<DecodedIdToken extends Record<string, u
|
|
|
15
17
|
};
|
|
16
18
|
__unsafe_useIdTokenAsAccessToken: boolean;
|
|
17
19
|
decodedIdToken_previous: DecodedIdToken | undefined;
|
|
20
|
+
isDPoPEnabled: boolean;
|
|
18
21
|
log: typeof console.log | undefined;
|
|
19
22
|
}): Oidc.Tokens<DecodedIdToken> {
|
|
20
23
|
const {
|
|
@@ -23,6 +26,7 @@ export function oidcClientTsUserToTokens<DecodedIdToken extends Record<string, u
|
|
|
23
26
|
decodedIdTokenSchema,
|
|
24
27
|
__unsafe_useIdTokenAsAccessToken,
|
|
25
28
|
decodedIdToken_previous,
|
|
29
|
+
isDPoPEnabled,
|
|
26
30
|
log
|
|
27
31
|
} = params;
|
|
28
32
|
|
|
@@ -107,6 +111,11 @@ export function oidcClientTsUserToTokens<DecodedIdToken extends Record<string, u
|
|
|
107
111
|
return id_token_iat * 1000;
|
|
108
112
|
})();
|
|
109
113
|
|
|
114
|
+
const paramsOfCreateGetServerDateNow: ParamsOfCreateGetServerDateNow = {
|
|
115
|
+
issuedAtTime_local: oidcClientTsUser.__oidc_spa_localTimeWhenTokenIssued,
|
|
116
|
+
issuedAtTime
|
|
117
|
+
};
|
|
118
|
+
|
|
110
119
|
const tokens_common: Oidc.Tokens.Common<DecodedIdToken> = {
|
|
111
120
|
...(__unsafe_useIdTokenAsAccessToken
|
|
112
121
|
? {
|
|
@@ -166,10 +175,7 @@ export function oidcClientTsUserToTokens<DecodedIdToken extends Record<string, u
|
|
|
166
175
|
decodedIdToken,
|
|
167
176
|
decodedIdToken_original,
|
|
168
177
|
issuedAtTime,
|
|
169
|
-
getServerDateNow: (
|
|
170
|
-
const issuedAtTime_local = oidcClientTsUser.__oidc_spa_localTimeWhenTokenIssued;
|
|
171
|
-
return () => Date.now() + (issuedAtTime - issuedAtTime_local);
|
|
172
|
-
})()
|
|
178
|
+
getServerDateNow: createGetServerDateNow(paramsOfCreateGetServerDateNow)
|
|
173
179
|
};
|
|
174
180
|
|
|
175
181
|
const tokens: Oidc.Tokens<DecodedIdToken> =
|
|
@@ -229,6 +235,14 @@ export function oidcClientTsUserToTokens<DecodedIdToken extends Record<string, u
|
|
|
229
235
|
})()
|
|
230
236
|
});
|
|
231
237
|
|
|
238
|
+
if (isDPoPEnabled) {
|
|
239
|
+
registerAccessTokenForDPoP({
|
|
240
|
+
configId,
|
|
241
|
+
accessToken: tokens.accessToken,
|
|
242
|
+
paramsOfCreateGetServerDateNow
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
|
|
232
246
|
if (getIsTokenSubstitutionEnabled()) {
|
|
233
247
|
const placeholders = getTokensPlaceholders({
|
|
234
248
|
configId,
|
|
@@ -341,11 +341,7 @@ function patchXMLHttpRequestApiToSubstituteTokenPlaceholder(params: {
|
|
|
341
341
|
throw new Error("oidc-spa: Blocked request to hashed static asset.");
|
|
342
342
|
}
|
|
343
343
|
|
|
344
|
-
|
|
345
|
-
return open_actual.bind(this)(method, state.url);
|
|
346
|
-
} else {
|
|
347
|
-
return open_actual.call(this, method, state.url, async, username, password);
|
|
348
|
-
}
|
|
344
|
+
return open_actual.call(this, method, state.url, async as true, username, password);
|
|
349
345
|
};
|
|
350
346
|
|
|
351
347
|
XMLHttpRequest.prototype.setRequestHeader = function setRequestHeader(name, value) {
|
|
@@ -911,6 +907,65 @@ function runMonkeyPatchingPrevention() {
|
|
|
911
907
|
});
|
|
912
908
|
}
|
|
913
909
|
|
|
910
|
+
crypto_subtle: {
|
|
911
|
+
const { crypto } = window;
|
|
912
|
+
|
|
913
|
+
if (!crypto?.subtle) {
|
|
914
|
+
break crypto_subtle;
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
const subtle = crypto.subtle;
|
|
918
|
+
const prototype = Object.getPrototypeOf(subtle);
|
|
919
|
+
|
|
920
|
+
for (const propertyName of Object.getOwnPropertyNames(prototype)) {
|
|
921
|
+
const pd = Object.getOwnPropertyDescriptor(prototype, propertyName);
|
|
922
|
+
|
|
923
|
+
assert(pd !== undefined);
|
|
924
|
+
|
|
925
|
+
if (!pd.configurable) {
|
|
926
|
+
continue;
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
const target = `window.crypto.subtle.${propertyName}`;
|
|
930
|
+
|
|
931
|
+
Object.defineProperty(prototype, propertyName, {
|
|
932
|
+
enumerable: pd.enumerable,
|
|
933
|
+
configurable: false,
|
|
934
|
+
...("value" in pd
|
|
935
|
+
? {
|
|
936
|
+
get: () => pd.value,
|
|
937
|
+
set: () => {
|
|
938
|
+
throw createWriteError(target);
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
: {
|
|
942
|
+
get: pd.get,
|
|
943
|
+
set:
|
|
944
|
+
pd.set ??
|
|
945
|
+
(() => {
|
|
946
|
+
throw createWriteError(target);
|
|
947
|
+
})
|
|
948
|
+
})
|
|
949
|
+
});
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
{
|
|
953
|
+
const subtlePd = Object.getOwnPropertyDescriptor(crypto, "subtle");
|
|
954
|
+
if (subtlePd !== undefined && !subtlePd.configurable) {
|
|
955
|
+
break crypto_subtle;
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
Object.defineProperty(crypto, "subtle", {
|
|
960
|
+
configurable: false,
|
|
961
|
+
enumerable: true,
|
|
962
|
+
get: () => subtle,
|
|
963
|
+
set: () => {
|
|
964
|
+
throw createWriteError("window.crypto.subtle");
|
|
965
|
+
}
|
|
966
|
+
});
|
|
967
|
+
}
|
|
968
|
+
|
|
914
969
|
{
|
|
915
970
|
const name = "serviceWorker";
|
|
916
971
|
|
|
@@ -414,7 +414,8 @@ export function createOidcSpaApi<
|
|
|
414
414
|
__metadata: paramsOfBootstrap.__metadata,
|
|
415
415
|
__unsafe_useIdTokenAsAccessToken:
|
|
416
416
|
paramsOfBootstrap.__unsafe_useIdTokenAsAccessToken,
|
|
417
|
-
autoLogoutParams: paramsOfBootstrap.autoLogoutParams
|
|
417
|
+
autoLogoutParams: paramsOfBootstrap.autoLogoutParams,
|
|
418
|
+
dpop: paramsOfBootstrap.dpop
|
|
418
419
|
});
|
|
419
420
|
} catch (error) {
|
|
420
421
|
if (!(error instanceof OidcInitializationError)) {
|
package/src/react-spa/types.tsx
CHANGED
|
@@ -289,6 +289,9 @@ export namespace ParamsOfBootstrap {
|
|
|
289
289
|
* (if you weren't able to provide it)
|
|
290
290
|
*/
|
|
291
291
|
BASE_URL?: string;
|
|
292
|
+
|
|
293
|
+
/** Default: false */
|
|
294
|
+
dpop?: boolean;
|
|
292
295
|
} & (AutoLogin extends true ? {} : {});
|
|
293
296
|
|
|
294
297
|
export type Mock<AutoLogin, DecodedIdToken> = {
|