oidc-spa 7.2.0-rc.1 → 7.2.0-rc.3
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 +2 -2
- package/backend.js.map +1 -1
- package/core/AuthResponse.js.map +1 -1
- package/core/Oidc.js.map +1 -1
- package/core/OidcInitializationError.d.ts +0 -13
- package/core/OidcInitializationError.js +0 -243
- package/core/OidcInitializationError.js.map +1 -1
- package/core/OidcMetadata.js.map +1 -1
- package/core/StateData.js.map +1 -1
- package/core/configId.js.map +1 -1
- package/core/createOidc.js +38 -5
- package/core/createOidc.js.map +1 -1
- package/core/diagnostic.d.ts +14 -0
- package/core/diagnostic.js +214 -0
- package/core/diagnostic.js.map +1 -0
- package/core/evtIsUserActive.js.map +1 -1
- package/core/handleOidcCallback.js.map +1 -1
- package/core/iframeMessageProtection.js.map +1 -1
- package/core/index.js.map +1 -1
- package/core/initialLocationHref.js.map +1 -1
- package/core/isNewBrowserSession.js.map +1 -1
- package/core/loginOrGoToAuthServer.js.map +1 -1
- package/core/loginPropagationToOtherTabs.js.map +1 -1
- package/core/loginSilent.js.map +1 -1
- package/core/logoutPropagationToOtherTabs.js.map +1 -1
- package/core/oidcClientTsUserToTokens.js.map +1 -1
- package/core/ongoingLoginOrRefreshProcesses.js.map +1 -1
- package/core/persistedAuthState.js.map +1 -1
- package/entrypoint.js.map +1 -1
- package/esm/core/AuthResponse.d.ts +5 -0
- package/{src/core/AuthResponse.ts → esm/core/AuthResponse.js} +2 -10
- package/esm/core/AuthResponse.js.map +1 -0
- package/esm/core/Oidc.d.ts +126 -0
- package/esm/core/Oidc.js +2 -0
- package/esm/core/Oidc.js.map +1 -0
- package/esm/core/OidcInitializationError.d.ts +7 -0
- package/esm/core/OidcInitializationError.js +17 -0
- package/esm/core/OidcInitializationError.js.map +1 -0
- package/{src/core/OidcMetadata.ts → esm/core/OidcMetadata.d.ts} +0 -5
- package/esm/core/OidcMetadata.js +3 -0
- package/esm/core/OidcMetadata.js.map +1 -0
- package/esm/core/StateData.d.ts +42 -0
- package/esm/core/StateData.js +55 -0
- package/esm/core/StateData.js.map +1 -0
- package/esm/core/configId.d.ts +4 -0
- package/esm/core/configId.js +4 -0
- package/esm/core/configId.js.map +1 -0
- package/esm/core/createOidc.d.ts +132 -0
- package/{src/core/createOidc.ts → esm/core/createOidc.js} +269 -806
- package/esm/core/createOidc.js.map +1 -0
- package/esm/core/diagnostic.d.ts +14 -0
- package/{src/core/OidcInitializationError.ts → esm/core/diagnostic.js} +32 -109
- package/esm/core/diagnostic.js.map +1 -0
- package/esm/core/evtIsUserActive.d.ts +5 -0
- package/{src/core/evtIsUserActive.ts → esm/core/evtIsUserActive.js} +14 -46
- package/esm/core/evtIsUserActive.js.map +1 -0
- package/esm/core/handleOidcCallback.d.ts +13 -0
- package/{src/core/handleOidcCallback.ts → esm/core/handleOidcCallback.js} +25 -121
- package/esm/core/handleOidcCallback.js.map +1 -0
- package/esm/core/iframeMessageProtection.d.ts +20 -0
- package/{src/core/iframeMessageProtection.ts → esm/core/iframeMessageProtection.js} +10 -45
- package/esm/core/iframeMessageProtection.js.map +1 -0
- package/esm/core/index.js +4 -0
- package/esm/core/index.js.map +1 -0
- package/esm/core/initialLocationHref.d.ts +1 -0
- package/{src/core/initialLocationHref.ts → esm/core/initialLocationHref.js} +1 -1
- package/esm/core/initialLocationHref.js.map +1 -0
- package/esm/core/isNewBrowserSession.d.ts +9 -0
- package/{src/core/isNewBrowserSession.ts → esm/core/isNewBrowserSession.js} +3 -15
- package/esm/core/isNewBrowserSession.js.map +1 -0
- package/esm/core/loginOrGoToAuthServer.d.ts +40 -0
- package/{src/core/loginOrGoToAuthServer.ts → esm/core/loginOrGoToAuthServer.js} +60 -168
- package/esm/core/loginOrGoToAuthServer.js.map +1 -0
- package/esm/core/loginPropagationToOtherTabs.d.ts +8 -0
- package/{src/core/loginPropagationToOtherTabs.ts → esm/core/loginPropagationToOtherTabs.js} +7 -25
- package/esm/core/loginPropagationToOtherTabs.js.map +1 -0
- package/esm/core/loginSilent.d.ts +28 -0
- package/esm/core/loginSilent.js +125 -0
- package/esm/core/loginSilent.js.map +1 -0
- package/esm/core/logoutPropagationToOtherTabs.d.ts +10 -0
- package/{src/core/logoutPropagationToOtherTabs.ts → esm/core/logoutPropagationToOtherTabs.js} +8 -28
- package/esm/core/logoutPropagationToOtherTabs.js.map +1 -0
- package/esm/core/oidcClientTsUserToTokens.d.ts +11 -0
- package/esm/core/oidcClientTsUserToTokens.js +155 -0
- package/esm/core/oidcClientTsUserToTokens.js.map +1 -0
- package/esm/core/ongoingLoginOrRefreshProcesses.d.ts +6 -0
- package/{src/core/ongoingLoginOrRefreshProcesses.ts → esm/core/ongoingLoginOrRefreshProcesses.js} +6 -24
- package/esm/core/ongoingLoginOrRefreshProcesses.js.map +1 -0
- package/esm/core/persistedAuthState.d.ts +28 -0
- package/esm/core/persistedAuthState.js +64 -0
- package/esm/core/persistedAuthState.js.map +1 -0
- package/esm/entrypoint.d.ts +7 -0
- package/{src/entrypoint.ts → esm/entrypoint.js} +3 -26
- package/esm/entrypoint.js.map +1 -0
- package/esm/index.js +2 -0
- package/esm/index.js.map +1 -0
- package/esm/keycloak/index.d.ts +3 -0
- package/esm/keycloak/index.js +3 -0
- package/esm/keycloak/index.js.map +1 -0
- package/esm/keycloak/isKeycloak.d.ts +3 -0
- package/{src/keycloak/isKeycloak.ts → esm/keycloak/isKeycloak.js} +2 -8
- package/esm/keycloak/isKeycloak.js.map +1 -0
- package/esm/keycloak/keycloak-js/Keycloak.d.ts +284 -0
- package/{src/keycloak/keycloak-js/Keycloak.ts → esm/keycloak/keycloak-js/Keycloak.js} +116 -439
- package/esm/keycloak/keycloak-js/Keycloak.js.map +1 -0
- package/esm/keycloak/keycloak-js/index.js +2 -0
- package/esm/keycloak/keycloak-js/index.js.map +1 -0
- package/{src/keycloak/keycloak-js/types.ts → esm/keycloak/keycloak-js/types.d.ts} +3 -84
- package/esm/keycloak/keycloak-js/types.js +2 -0
- package/esm/keycloak/keycloak-js/types.js.map +1 -0
- package/esm/keycloak/keycloakIssuerUriParsed.d.ts +9 -0
- package/{src/keycloak/keycloakIssuerUriParsed.ts → esm/keycloak/keycloakIssuerUriParsed.js} +2 -15
- package/esm/keycloak/keycloakIssuerUriParsed.js.map +1 -0
- package/esm/keycloak/keycloakUtils.d.ts +37 -0
- package/esm/keycloak/keycloakUtils.js +44 -0
- package/esm/keycloak/keycloakUtils.js.map +1 -0
- package/esm/keycloak-js.js +2 -0
- package/esm/keycloak-js.js.map +1 -0
- package/esm/mock/index.js +2 -0
- package/esm/mock/index.js.map +1 -0
- package/esm/mock/oidc.d.ts +19 -0
- package/{src/mock/oidc.ts → esm/mock/oidc.js} +28 -88
- package/esm/mock/oidc.js.map +1 -0
- package/esm/mock/react.d.ts +58 -0
- package/esm/mock/react.js +7 -0
- package/esm/mock/react.js.map +1 -0
- package/esm/react/index.js +2 -0
- package/esm/react/index.js.map +1 -0
- package/esm/react/react.d.ts +102 -0
- package/esm/react/react.js +221 -0
- package/esm/react/react.js.map +1 -0
- package/esm/tools/Deferred.d.ts +13 -0
- package/esm/tools/Deferred.js +19 -0
- package/esm/tools/Deferred.js.map +1 -0
- package/esm/tools/EphemeralSessionStorage.d.ts +12 -0
- package/{src/tools/EphemeralSessionStorage.ts → esm/tools/EphemeralSessionStorage.js} +30 -112
- package/esm/tools/EphemeralSessionStorage.js.map +1 -0
- package/esm/tools/Evt.d.ts +11 -0
- package/{src/tools/Evt.ts → esm/tools/Evt.js} +7 -25
- package/esm/tools/Evt.js.map +1 -0
- package/esm/tools/StatefulEvt.d.ts +12 -0
- package/esm/tools/StatefulEvt.js +21 -0
- package/esm/tools/StatefulEvt.js.map +1 -0
- package/esm/tools/ValueOrAsyncGetter.js +2 -0
- package/esm/tools/ValueOrAsyncGetter.js.map +1 -0
- package/esm/tools/asymmetricEncryption.d.ts +18 -0
- package/esm/tools/asymmetricEncryption.js +85 -0
- package/esm/tools/asymmetricEncryption.js.map +1 -0
- package/esm/tools/base64.d.ts +2 -0
- package/{src/tools/base64.ts → esm/tools/base64.js} +3 -3
- package/esm/tools/base64.js.map +1 -0
- package/esm/tools/createObjectThatThrowsIfAccessed.d.ts +8 -0
- package/{src/tools/createObjectThatThrowsIfAccessed.ts → esm/tools/createObjectThatThrowsIfAccessed.js} +7 -18
- package/esm/tools/createObjectThatThrowsIfAccessed.js.map +1 -0
- package/esm/tools/decodeJwt.d.ts +25 -0
- package/esm/tools/decodeJwt.js +60 -0
- package/esm/tools/decodeJwt.js.map +1 -0
- package/esm/tools/generateUrlSafeRandom.d.ts +3 -0
- package/{src/tools/generateUrlSafeRandom.ts → esm/tools/generateUrlSafeRandom.js} +5 -8
- package/esm/tools/generateUrlSafeRandom.js.map +1 -0
- package/esm/tools/getDownlinkAndRtt.d.ts +4 -0
- package/{src/tools/getDownlinkAndRtt.ts → esm/tools/getDownlinkAndRtt.js} +6 -10
- package/esm/tools/getDownlinkAndRtt.js.map +1 -0
- package/esm/tools/getIsOnline.d.ts +7 -0
- package/{src/tools/getIsOnline.ts → esm/tools/getIsOnline.js} +3 -9
- package/esm/tools/getIsOnline.js.map +1 -0
- package/esm/tools/getIsValidRemoteJson.d.ts +1 -0
- package/esm/tools/getIsValidRemoteJson.js +15 -0
- package/esm/tools/getIsValidRemoteJson.js.map +1 -0
- package/esm/tools/getPrUserInteraction.d.ts +4 -0
- package/{src/tools/getPrUserInteraction.ts → esm/tools/getPrUserInteraction.js} +2 -6
- package/esm/tools/getPrUserInteraction.js.map +1 -0
- package/esm/tools/getUserEnvironmentInfo.d.ts +1 -0
- package/esm/tools/getUserEnvironmentInfo.js +50 -0
- package/esm/tools/getUserEnvironmentInfo.js.map +1 -0
- package/esm/tools/haveSharedParentDomain.d.ts +4 -0
- package/{src/tools/haveSharedParentDomain.ts → esm/tools/haveSharedParentDomain.js} +3 -5
- package/esm/tools/haveSharedParentDomain.js.map +1 -0
- package/esm/tools/isDev.d.ts +1 -0
- package/{src/tools/isDev.ts → esm/tools/isDev.js} +5 -12
- package/esm/tools/isDev.js.map +1 -0
- package/esm/tools/parseKeycloakIssuerUri.d.ts +30 -0
- package/{src/tools/parseKeycloakIssuerUri.ts → esm/tools/parseKeycloakIssuerUri.js} +2 -18
- package/esm/tools/parseKeycloakIssuerUri.js.map +1 -0
- package/esm/tools/readExpirationTimeInJwt.d.ts +1 -0
- package/{src/tools/readExpirationTimeInJwt.ts → esm/tools/readExpirationTimeInJwt.js} +6 -7
- package/esm/tools/readExpirationTimeInJwt.js.map +1 -0
- package/esm/tools/startCountdown.d.ts +11 -0
- package/{src/tools/startCountdown.ts → esm/tools/startCountdown.js} +6 -17
- package/esm/tools/startCountdown.js.map +1 -0
- package/esm/tools/subscribeToUserInteraction.d.ts +6 -0
- package/{src/tools/subscribeToUserInteraction.ts → esm/tools/subscribeToUserInteraction.js} +4 -13
- package/esm/tools/subscribeToUserInteraction.js.map +1 -0
- package/esm/tools/toFullyQualifiedUrl.d.ts +10 -0
- package/{src/tools/toFullyQualifiedUrl.ts → esm/tools/toFullyQualifiedUrl.js} +7 -25
- package/esm/tools/toFullyQualifiedUrl.js.map +1 -0
- package/esm/tools/toHumanReadableDuration.d.ts +1 -0
- package/{src/tools/toHumanReadableDuration.ts → esm/tools/toHumanReadableDuration.js} +8 -5
- package/esm/tools/toHumanReadableDuration.js.map +1 -0
- package/esm/tools/urlSearchParams.d.ts +19 -0
- package/{src/tools/urlSearchParams.ts → esm/tools/urlSearchParams.js} +24 -70
- package/esm/tools/urlSearchParams.js.map +1 -0
- package/esm/tools/workerTimers.d.ts +5 -0
- package/{src/tools/workerTimers.ts → esm/tools/workerTimers.js} +7 -27
- package/esm/tools/workerTimers.js.map +1 -0
- package/esm/vendor/frontend/oidc-client-ts.js +3636 -0
- package/{src/vendor/frontend/tsafe.ts → esm/vendor/frontend/tsafe.d.ts} +0 -1
- package/esm/vendor/frontend/tsafe.js +1 -0
- package/esm/vendor/frontend/worker-timers.js +1 -0
- package/index.js.map +1 -1
- package/keycloak/index.js.map +1 -1
- package/keycloak/isKeycloak.js.map +1 -1
- package/keycloak/keycloak-js/Keycloak.js.map +1 -1
- package/keycloak/keycloak-js/index.js.map +1 -1
- package/keycloak/keycloak-js/types.js.map +1 -1
- package/keycloak/keycloakIssuerUriParsed.js.map +1 -1
- package/keycloak/keycloakUtils.js.map +1 -1
- package/keycloak-js.js.map +1 -1
- package/mock/index.js.map +1 -1
- package/mock/oidc.js.map +1 -1
- package/mock/react.js.map +1 -1
- package/package.json +75 -328
- package/react/index.js.map +1 -1
- package/react/react.js.map +1 -1
- package/tools/Deferred.d.ts +0 -1
- package/tools/Deferred.js +0 -4
- package/tools/Deferred.js.map +1 -1
- package/tools/EphemeralSessionStorage.js.map +1 -1
- package/tools/Evt.js.map +1 -1
- package/tools/StatefulEvt.js.map +1 -1
- package/tools/ValueOrAsyncGetter.js.map +1 -1
- package/tools/asymmetricEncryption.js.map +1 -1
- package/tools/base64.js.map +1 -1
- package/tools/createObjectThatThrowsIfAccessed.js.map +1 -1
- package/tools/decodeJwt.js.map +1 -1
- package/tools/generateUrlSafeRandom.js.map +1 -1
- package/tools/getDownlinkAndRtt.js.map +1 -1
- package/tools/getIsOnline.js.map +1 -1
- package/tools/getIsValidRemoteJson.js.map +1 -1
- package/tools/getPrUserInteraction.js.map +1 -1
- package/tools/getUserEnvironmentInfo.js.map +1 -1
- package/tools/haveSharedParentDomain.js.map +1 -1
- package/tools/isDev.js.map +1 -1
- package/tools/parseKeycloakIssuerUri.js.map +1 -1
- package/tools/readExpirationTimeInJwt.js.map +1 -1
- package/tools/startCountdown.js.map +1 -1
- package/tools/subscribeToUserInteraction.js.map +1 -1
- package/tools/toFullyQualifiedUrl.js.map +1 -1
- package/tools/toHumanReadableDuration.js.map +1 -1
- package/tools/urlSearchParams.js.map +1 -1
- package/tools/workerTimers.js.map +1 -1
- package/vendor/frontend/tsafe.d.ts +0 -1
- package/vendor/frontend/tsafe.js +1 -1
- package/src/backend.ts +0 -391
- package/src/core/Oidc.ts +0 -140
- package/src/core/StateData.ts +0 -118
- package/src/core/configId.ts +0 -3
- package/src/core/loginSilent.ts +0 -209
- package/src/core/oidcClientTsUserToTokens.ts +0 -229
- package/src/core/persistedAuthState.ts +0 -122
- package/src/keycloak/index.ts +0 -8
- package/src/keycloak/keycloakUtils.ts +0 -90
- package/src/mock/react.tsx +0 -11
- package/src/react/react.tsx +0 -476
- package/src/tools/Deferred.ts +0 -39
- package/src/tools/StatefulEvt.ts +0 -38
- package/src/tools/asymmetricEncryption.ts +0 -184
- package/src/tools/decodeJwt.ts +0 -95
- package/src/tools/getIsValidRemoteJson.ts +0 -18
- package/src/tools/getUserEnvironmentInfo.ts +0 -42
- package/src/vendor/backend/evt.ts +0 -2
- package/src/vendor/backend/jsonwebtoken.ts +0 -1
- package/src/vendor/backend/node-fetch.ts +0 -2
- package/src/vendor/backend/node-jose.ts +0 -1
- package/src/vendor/backend/tsafe.ts +0 -5
- package/src/vendor/backend/zod.ts +0 -1
- /package/{src/core/index.ts → esm/core/index.d.ts} +0 -0
- /package/{src/index.ts → esm/index.d.ts} +0 -0
- /package/{src/keycloak/keycloak-js/index.ts → esm/keycloak/keycloak-js/index.d.ts} +0 -0
- /package/{src/keycloak-js.ts → esm/keycloak-js.d.ts} +0 -0
- /package/{src/mock/index.ts → esm/mock/index.d.ts} +0 -0
- /package/{src/react/index.ts → esm/react/index.d.ts} +0 -0
- /package/{src/tools/ValueOrAsyncGetter.ts → esm/tools/ValueOrAsyncGetter.d.ts} +0 -0
- /package/{src/vendor/frontend/oidc-client-ts.ts → esm/vendor/frontend/oidc-client-ts.d.ts} +0 -0
- /package/{src/vendor/frontend/worker-timers.ts → esm/vendor/frontend/worker-timers.d.ts} +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export class Deferred {
|
|
2
|
+
constructor() {
|
|
3
|
+
let resolve;
|
|
4
|
+
let reject;
|
|
5
|
+
this.pr = new Promise((resolve_, reject_) => {
|
|
6
|
+
resolve = value => {
|
|
7
|
+
resolve_(value);
|
|
8
|
+
};
|
|
9
|
+
reject = error => {
|
|
10
|
+
reject_(error);
|
|
11
|
+
};
|
|
12
|
+
});
|
|
13
|
+
this.resolve = resolve;
|
|
14
|
+
this.reject = reject;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class VoidDeferred extends Deferred {
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=Deferred.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Deferred.js","sourceRoot":"","sources":["../../../src/tools/Deferred.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAQ;IAOjB;QACI,IAAI,OAA4B,CAAC;QACjC,IAAI,MAA6B,CAAC;QAElC,IAAI,CAAC,EAAE,GAAG,IAAI,OAAO,CAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;YAC3C,OAAO,GAAG,KAAK,CAAC,EAAE;gBACd,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC,CAAC;YAEF,MAAM,GAAG,KAAK,CAAC,EAAE;gBACb,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;CACJ;AAMD,MAAM,OAAO,YAAa,SAAQ,QAAmB;CAEpD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type EphemeralSessionStorage = {
|
|
2
|
+
readonly length: number;
|
|
3
|
+
clear(): void;
|
|
4
|
+
getItem(key: string): string | null;
|
|
5
|
+
key(index: number): string | null;
|
|
6
|
+
removeItem(key: string): void;
|
|
7
|
+
setItem(key: string, value: string): void;
|
|
8
|
+
persistCurrentStateAndSubsequentChanges: () => void;
|
|
9
|
+
};
|
|
10
|
+
export declare function createEphemeralSessionStorage(params: {
|
|
11
|
+
sessionStorageTtlMs: number;
|
|
12
|
+
}): EphemeralSessionStorage;
|
|
@@ -1,150 +1,77 @@
|
|
|
1
1
|
import { assert, typeGuard, id } from "../vendor/frontend/tsafe";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
__brand: "SessionStorageItem_Parsed-v1";
|
|
5
|
-
value: string;
|
|
6
|
-
expiresAtTime: number;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
function parseSessionStorageItem(
|
|
10
|
-
sessionStorageItemValue: string
|
|
11
|
-
): SessionStorageItem_Parsed | undefined {
|
|
12
|
-
let json: unknown;
|
|
13
|
-
|
|
2
|
+
function parseSessionStorageItem(sessionStorageItemValue) {
|
|
3
|
+
let json;
|
|
14
4
|
try {
|
|
15
5
|
json = JSON.parse(sessionStorageItemValue);
|
|
16
|
-
}
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
17
8
|
return undefined;
|
|
18
9
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
json,
|
|
23
|
-
json instanceof Object &&
|
|
24
|
-
"__brand" in json &&
|
|
25
|
-
json.__brand === id<SessionStorageItem_Parsed["__brand"]>("SessionStorageItem_Parsed-v1")
|
|
26
|
-
)
|
|
27
|
-
) {
|
|
10
|
+
if (!typeGuard(json, json instanceof Object &&
|
|
11
|
+
"__brand" in json &&
|
|
12
|
+
json.__brand === id("SessionStorageItem_Parsed-v1"))) {
|
|
28
13
|
return undefined;
|
|
29
14
|
}
|
|
30
|
-
|
|
31
15
|
return json;
|
|
32
16
|
}
|
|
33
|
-
|
|
34
|
-
type InMemoryItem = {
|
|
35
|
-
key: string;
|
|
36
|
-
value: string;
|
|
37
|
-
removeFromSessionStorage: (() => void) | undefined;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
17
|
const SESSION_STORAGE_PREFIX = "ephemeral:";
|
|
41
|
-
|
|
42
|
-
function createStoreInSessionStorageAndScheduleRemovalInMemoryItem(params: {
|
|
43
|
-
key: string;
|
|
44
|
-
value: string;
|
|
45
|
-
remainingTtlMs: number;
|
|
46
|
-
}): InMemoryItem {
|
|
18
|
+
function createStoreInSessionStorageAndScheduleRemovalInMemoryItem(params) {
|
|
47
19
|
const { key, value, remainingTtlMs } = params;
|
|
48
|
-
|
|
49
20
|
const sessionStorageKey = `${SESSION_STORAGE_PREFIX}${key}`;
|
|
50
|
-
|
|
51
21
|
const removeFromSessionStorage = () => {
|
|
52
22
|
inMemoryItem.removeFromSessionStorage = undefined;
|
|
53
23
|
clearTimeout(timer);
|
|
54
24
|
sessionStorage.removeItem(sessionStorageKey);
|
|
55
25
|
};
|
|
56
|
-
|
|
57
26
|
const timer = setTimeout(() => removeFromSessionStorage(), remainingTtlMs);
|
|
58
|
-
|
|
59
|
-
const inMemoryItem: InMemoryItem = {
|
|
27
|
+
const inMemoryItem = {
|
|
60
28
|
key,
|
|
61
29
|
value,
|
|
62
30
|
removeFromSessionStorage
|
|
63
31
|
};
|
|
64
|
-
|
|
65
32
|
sessionStorage.removeItem(sessionStorageKey);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
__brand: "SessionStorageItem_Parsed-v1",
|
|
72
|
-
value,
|
|
73
|
-
expiresAtTime: Date.now() + remainingTtlMs
|
|
74
|
-
})
|
|
75
|
-
)
|
|
76
|
-
);
|
|
77
|
-
|
|
33
|
+
sessionStorage.setItem(sessionStorageKey, JSON.stringify(id({
|
|
34
|
+
__brand: "SessionStorageItem_Parsed-v1",
|
|
35
|
+
value,
|
|
36
|
+
expiresAtTime: Date.now() + remainingTtlMs
|
|
37
|
+
})));
|
|
78
38
|
return inMemoryItem;
|
|
79
39
|
}
|
|
80
|
-
|
|
81
|
-
export type EphemeralSessionStorage = {
|
|
82
|
-
// `Storage` methods, we don't use the type directly because it has [name: string]: any;
|
|
83
|
-
readonly length: number;
|
|
84
|
-
clear(): void;
|
|
85
|
-
getItem(key: string): string | null;
|
|
86
|
-
key(index: number): string | null;
|
|
87
|
-
removeItem(key: string): void;
|
|
88
|
-
setItem(key: string, value: string): void;
|
|
89
|
-
|
|
90
|
-
// Custom method
|
|
91
|
-
persistCurrentStateAndSubsequentChanges: () => void;
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
export function createEphemeralSessionStorage(params: {
|
|
95
|
-
sessionStorageTtlMs: number;
|
|
96
|
-
}): EphemeralSessionStorage {
|
|
40
|
+
export function createEphemeralSessionStorage(params) {
|
|
97
41
|
const { sessionStorageTtlMs } = params;
|
|
98
|
-
|
|
99
|
-
const inMemoryItems: InMemoryItem[] = [];
|
|
100
|
-
|
|
42
|
+
const inMemoryItems = [];
|
|
101
43
|
for (let i = 0; i < sessionStorage.length; i++) {
|
|
102
44
|
const sessionStorageKey = sessionStorage.key(i);
|
|
103
45
|
assert(sessionStorageKey !== null, "470498");
|
|
104
|
-
|
|
105
46
|
if (!sessionStorageKey.startsWith(SESSION_STORAGE_PREFIX)) {
|
|
106
47
|
continue;
|
|
107
48
|
}
|
|
108
|
-
|
|
109
49
|
const sessionStorageItem = sessionStorage.getItem(sessionStorageKey);
|
|
110
|
-
|
|
111
50
|
assert(sessionStorageItem !== null, "846771");
|
|
112
|
-
|
|
113
51
|
const sessionStorageItem_parsed = parseSessionStorageItem(sessionStorageItem);
|
|
114
|
-
|
|
115
52
|
if (sessionStorageItem_parsed === undefined) {
|
|
116
53
|
continue;
|
|
117
54
|
}
|
|
118
|
-
|
|
119
55
|
const remainingTtlMs = sessionStorageItem_parsed.expiresAtTime - Date.now();
|
|
120
|
-
|
|
121
56
|
sessionStorage.removeItem(sessionStorageKey);
|
|
122
|
-
|
|
123
57
|
if (remainingTtlMs <= 0) {
|
|
124
58
|
continue;
|
|
125
59
|
}
|
|
126
|
-
|
|
127
60
|
inMemoryItems.push({
|
|
128
61
|
key: sessionStorageKey.slice(SESSION_STORAGE_PREFIX.length),
|
|
129
62
|
value: sessionStorageItem_parsed.value,
|
|
130
63
|
removeFromSessionStorage: undefined
|
|
131
64
|
});
|
|
132
65
|
}
|
|
133
|
-
|
|
134
66
|
let isPersistenceEnabled = false;
|
|
135
|
-
|
|
136
|
-
const storage: EphemeralSessionStorage = {
|
|
67
|
+
const storage = {
|
|
137
68
|
persistCurrentStateAndSubsequentChanges: () => {
|
|
138
69
|
isPersistenceEnabled = true;
|
|
139
|
-
|
|
140
70
|
for (let i = 0; i < storage.length; i++) {
|
|
141
71
|
const key = storage.key(i);
|
|
142
72
|
assert(key !== null, "803385");
|
|
143
|
-
|
|
144
73
|
const value = storage.getItem(key);
|
|
145
|
-
|
|
146
74
|
assert(value !== null, "777098");
|
|
147
|
-
|
|
148
75
|
storage.setItem(key, value);
|
|
149
76
|
}
|
|
150
77
|
},
|
|
@@ -153,24 +80,18 @@ export function createEphemeralSessionStorage(params: {
|
|
|
153
80
|
},
|
|
154
81
|
key: index => {
|
|
155
82
|
const inMemoryItem = inMemoryItems[index];
|
|
156
|
-
|
|
157
83
|
if (inMemoryItem === undefined) {
|
|
158
84
|
return null;
|
|
159
85
|
}
|
|
160
|
-
|
|
161
86
|
return inMemoryItem.key;
|
|
162
87
|
},
|
|
163
88
|
removeItem: key => {
|
|
164
89
|
const inMemoryItem = inMemoryItems.find(item => item.key === key);
|
|
165
|
-
|
|
166
90
|
if (inMemoryItem === undefined) {
|
|
167
91
|
return;
|
|
168
92
|
}
|
|
169
|
-
|
|
170
93
|
inMemoryItem.removeFromSessionStorage?.();
|
|
171
|
-
|
|
172
94
|
const index = inMemoryItems.indexOf(inMemoryItem);
|
|
173
|
-
|
|
174
95
|
inMemoryItems.splice(index, 1);
|
|
175
96
|
},
|
|
176
97
|
clear: () => {
|
|
@@ -188,36 +109,33 @@ export function createEphemeralSessionStorage(params: {
|
|
|
188
109
|
return inMemoryItem.value;
|
|
189
110
|
},
|
|
190
111
|
setItem: (key, value) => {
|
|
191
|
-
let existingInMemoryItemIndex
|
|
192
|
-
|
|
112
|
+
let existingInMemoryItemIndex = undefined;
|
|
193
113
|
{
|
|
194
114
|
const inMemoryItem = inMemoryItems.find(item => item.key === key);
|
|
195
|
-
|
|
196
115
|
if (inMemoryItem !== undefined) {
|
|
197
116
|
inMemoryItem.removeFromSessionStorage?.();
|
|
198
117
|
existingInMemoryItemIndex = inMemoryItems.indexOf(inMemoryItem);
|
|
199
118
|
}
|
|
200
119
|
}
|
|
201
|
-
|
|
202
120
|
const inMemoryItem_new = isPersistenceEnabled
|
|
203
121
|
? createStoreInSessionStorageAndScheduleRemovalInMemoryItem({
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
: id
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
122
|
+
key,
|
|
123
|
+
value,
|
|
124
|
+
remainingTtlMs: sessionStorageTtlMs
|
|
125
|
+
})
|
|
126
|
+
: id({
|
|
127
|
+
key,
|
|
128
|
+
value,
|
|
129
|
+
removeFromSessionStorage: undefined
|
|
130
|
+
});
|
|
214
131
|
if (existingInMemoryItemIndex !== undefined) {
|
|
215
132
|
inMemoryItems[existingInMemoryItemIndex] = inMemoryItem_new;
|
|
216
|
-
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
217
135
|
inMemoryItems.push(inMemoryItem_new);
|
|
218
136
|
}
|
|
219
137
|
}
|
|
220
138
|
};
|
|
221
|
-
|
|
222
139
|
return storage;
|
|
223
140
|
}
|
|
141
|
+
//# sourceMappingURL=EphemeralSessionStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EphemeralSessionStorage.js","sourceRoot":"","sources":["../../../src/tools/EphemeralSessionStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type NonPostableEvt<T> = {
|
|
2
|
+
waitFor: () => Promise<T>;
|
|
3
|
+
subscribe: (next: (data: T) => void) => {
|
|
4
|
+
unsubscribe: () => void;
|
|
5
|
+
};
|
|
6
|
+
postCount: number;
|
|
7
|
+
};
|
|
8
|
+
export type Evt<T> = NonPostableEvt<T> & {
|
|
9
|
+
post: (data: T) => void;
|
|
10
|
+
};
|
|
11
|
+
export declare function createEvt<T>(): Evt<T>;
|
|
@@ -1,32 +1,16 @@
|
|
|
1
1
|
import { Deferred } from "./Deferred";
|
|
2
2
|
import { assert, is } from "../vendor/frontend/tsafe";
|
|
3
|
-
|
|
4
|
-
export type NonPostableEvt<T> = {
|
|
5
|
-
waitFor: () => Promise<T>;
|
|
6
|
-
subscribe: (next: (data: T) => void) => { unsubscribe: () => void };
|
|
7
|
-
postCount: number;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export type Evt<T> = NonPostableEvt<T> & {
|
|
11
|
-
post: (data: T) => void;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export function createEvt<T>(): Evt<T> {
|
|
3
|
+
export function createEvt() {
|
|
15
4
|
const eventTarget = new EventTarget();
|
|
16
5
|
const KEY = "event";
|
|
17
|
-
|
|
18
6
|
let postCount = 0;
|
|
19
|
-
|
|
20
|
-
const evt: Evt<T> = {
|
|
7
|
+
const evt = {
|
|
21
8
|
subscribe: next => {
|
|
22
|
-
const listener = (e
|
|
23
|
-
assert(is
|
|
24
|
-
|
|
9
|
+
const listener = (e) => {
|
|
10
|
+
assert(is(e));
|
|
25
11
|
next(e.detail);
|
|
26
12
|
};
|
|
27
|
-
|
|
28
13
|
eventTarget.addEventListener(KEY, listener);
|
|
29
|
-
|
|
30
14
|
return {
|
|
31
15
|
unsubscribe: () => {
|
|
32
16
|
eventTarget.removeEventListener(KEY, listener);
|
|
@@ -34,16 +18,14 @@ export function createEvt<T>(): Evt<T> {
|
|
|
34
18
|
};
|
|
35
19
|
},
|
|
36
20
|
waitFor: () => {
|
|
37
|
-
const d = new Deferred
|
|
38
|
-
|
|
21
|
+
const d = new Deferred();
|
|
39
22
|
const { unsubscribe } = evt.subscribe(data => {
|
|
40
23
|
unsubscribe();
|
|
41
24
|
d.resolve(data);
|
|
42
25
|
});
|
|
43
|
-
|
|
44
26
|
return d.pr;
|
|
45
27
|
},
|
|
46
|
-
post: (data
|
|
28
|
+
post: (data) => {
|
|
47
29
|
postCount++;
|
|
48
30
|
eventTarget.dispatchEvent(new CustomEvent(KEY, { detail: data }));
|
|
49
31
|
},
|
|
@@ -51,6 +33,6 @@ export function createEvt<T>(): Evt<T> {
|
|
|
51
33
|
return postCount;
|
|
52
34
|
}
|
|
53
35
|
};
|
|
54
|
-
|
|
55
36
|
return evt;
|
|
56
37
|
}
|
|
38
|
+
//# sourceMappingURL=Evt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Evt.js","sourceRoot":"","sources":["../../../src/tools/Evt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAYtD,MAAM,UAAU,SAAS;IACrB,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC;IAEpB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,MAAM,GAAG,GAAW;QAChB,SAAS,EAAE,IAAI,CAAC,EAAE;YACd,MAAM,QAAQ,GAAG,CAAC,CAAQ,EAAE,EAAE;gBAC1B,MAAM,CAAC,EAAE,CAAiB,CAAC,CAAC,CAAC,CAAC;gBAE9B,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC,CAAC;YAEF,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAE5C,OAAO;gBACH,WAAW,EAAE,GAAG,EAAE;oBACd,WAAW,CAAC,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACnD,CAAC;aACJ,CAAC;QACN,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAK,CAAC;YAE5B,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACzC,WAAW,EAAE,CAAC;gBACd,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,CAAC,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,EAAE,CAAC,IAAO,EAAE,EAAE;YACd,SAAS,EAAE,CAAC;YACZ,WAAW,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,SAAS;YACT,OAAO,SAAS,CAAC;QACrB,CAAC;KACJ,CAAC;IAEF,OAAO,GAAG,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type StatefulEvt<T> = {
|
|
2
|
+
current: T;
|
|
3
|
+
subscribe: (next: (data: T) => void) => Subscription;
|
|
4
|
+
};
|
|
5
|
+
export type StatefulReadonlyEvt<T> = {
|
|
6
|
+
readonly current: T;
|
|
7
|
+
subscribe: (next: (data: T) => void) => Subscription;
|
|
8
|
+
};
|
|
9
|
+
export type Subscription = {
|
|
10
|
+
unsubscribe: () => void;
|
|
11
|
+
};
|
|
12
|
+
export declare function createStatefulEvt<T>(getInitialValue: () => T): StatefulEvt<T>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function createStatefulEvt(getInitialValue) {
|
|
2
|
+
let nextFunctions = [];
|
|
3
|
+
let wrappedState = undefined;
|
|
4
|
+
return {
|
|
5
|
+
get current() {
|
|
6
|
+
if (wrappedState === undefined) {
|
|
7
|
+
wrappedState = [getInitialValue()];
|
|
8
|
+
}
|
|
9
|
+
return wrappedState[0];
|
|
10
|
+
},
|
|
11
|
+
set current(data) {
|
|
12
|
+
wrappedState = [data];
|
|
13
|
+
nextFunctions.forEach(next => next(data));
|
|
14
|
+
},
|
|
15
|
+
subscribe: (next) => {
|
|
16
|
+
nextFunctions.push(next);
|
|
17
|
+
return { unsubscribe: () => nextFunctions.splice(nextFunctions.indexOf(next), 1) };
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=StatefulEvt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatefulEvt.js","sourceRoot":"","sources":["../../../src/tools/StatefulEvt.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,iBAAiB,CAAI,eAAwB;IACzD,IAAI,aAAa,GAA0B,EAAE,CAAC;IAE9C,IAAI,YAAY,GAAoB,SAAS,CAAC;IAE9C,OAAO;QACH,IAAI,OAAO;YACP,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC7B,YAAY,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,OAAO,CAAC,IAAO;YACf,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC;YAEtB,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,SAAS,EAAE,CAAC,IAAuB,EAAE,EAAE;YACnC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzB,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACvF,CAAC;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValueOrAsyncGetter.js","sourceRoot":"","sources":["../../../src/tools/ValueOrAsyncGetter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type AsymmetricKeys = {
|
|
2
|
+
publicKey: string;
|
|
3
|
+
privateKey: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function generateKeys(): Promise<AsymmetricKeys>;
|
|
6
|
+
export declare function asymmetricEncrypt(params: {
|
|
7
|
+
publicKey: string;
|
|
8
|
+
message: string;
|
|
9
|
+
}): Promise<{
|
|
10
|
+
encryptedMessage: string;
|
|
11
|
+
}>;
|
|
12
|
+
export declare function asymmetricDecrypt(params: {
|
|
13
|
+
privateKey: string;
|
|
14
|
+
encryptedMessage: string;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
message: string;
|
|
17
|
+
}>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const INFO_LABEL = "oidc-spa/tools/asymmetricEncryption";
|
|
2
|
+
export async function generateKeys() {
|
|
3
|
+
const keyPair = await crypto.subtle.generateKey({
|
|
4
|
+
name: "ECDH",
|
|
5
|
+
namedCurve: "P-256"
|
|
6
|
+
}, true, ["deriveKey", "deriveBits"]);
|
|
7
|
+
const publicKeyRaw = await crypto.subtle.exportKey("jwk", keyPair.publicKey);
|
|
8
|
+
const privateKeyRaw = await crypto.subtle.exportKey("jwk", keyPair.privateKey);
|
|
9
|
+
return {
|
|
10
|
+
publicKey: btoa(JSON.stringify(publicKeyRaw)),
|
|
11
|
+
privateKey: btoa(JSON.stringify(privateKeyRaw))
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export async function asymmetricEncrypt(params) {
|
|
15
|
+
const { publicKey, message } = params;
|
|
16
|
+
const importedPublicKey = await crypto.subtle.importKey("jwk", JSON.parse(atob(publicKey)), {
|
|
17
|
+
name: "ECDH",
|
|
18
|
+
namedCurve: "P-256"
|
|
19
|
+
}, false, []);
|
|
20
|
+
const ephemeralKeyPair = await crypto.subtle.generateKey({
|
|
21
|
+
name: "ECDH",
|
|
22
|
+
namedCurve: "P-256"
|
|
23
|
+
}, true, ["deriveKey", "deriveBits"]);
|
|
24
|
+
const sharedSecret = await crypto.subtle.deriveBits({
|
|
25
|
+
name: "ECDH",
|
|
26
|
+
public: importedPublicKey
|
|
27
|
+
}, ephemeralKeyPair.privateKey, 256);
|
|
28
|
+
const salt = crypto.getRandomValues(new Uint8Array(16));
|
|
29
|
+
const infoBytes = new TextEncoder().encode(INFO_LABEL);
|
|
30
|
+
const hkdfKey = await crypto.subtle.importKey("raw", sharedSecret, "HKDF", false, ["deriveKey"]);
|
|
31
|
+
const derivedKey = await crypto.subtle.deriveKey({
|
|
32
|
+
name: "HKDF",
|
|
33
|
+
hash: "SHA-256",
|
|
34
|
+
salt,
|
|
35
|
+
info: infoBytes
|
|
36
|
+
}, hkdfKey, { name: "AES-GCM", length: 256 }, false, ["encrypt"]);
|
|
37
|
+
const iv = crypto.getRandomValues(new Uint8Array(12));
|
|
38
|
+
const encodedMessage = new TextEncoder().encode(message);
|
|
39
|
+
const ciphertext = await crypto.subtle.encrypt({
|
|
40
|
+
name: "AES-GCM",
|
|
41
|
+
iv
|
|
42
|
+
}, derivedKey, encodedMessage);
|
|
43
|
+
const ephemeralPubKeyRaw = await crypto.subtle.exportKey("jwk", ephemeralKeyPair.publicKey);
|
|
44
|
+
const payload = {
|
|
45
|
+
ephemeralPubKey: ephemeralPubKeyRaw,
|
|
46
|
+
iv: Array.from(iv),
|
|
47
|
+
salt: Array.from(salt),
|
|
48
|
+
ciphertext: Array.from(new Uint8Array(ciphertext))
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
encryptedMessage: btoa(JSON.stringify(payload))
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export async function asymmetricDecrypt(params) {
|
|
55
|
+
const { privateKey, encryptedMessage } = params;
|
|
56
|
+
const { ephemeralPubKey, iv, salt, ciphertext } = JSON.parse(atob(encryptedMessage));
|
|
57
|
+
const importedPrivateKey = await crypto.subtle.importKey("jwk", JSON.parse(atob(privateKey)), {
|
|
58
|
+
name: "ECDH",
|
|
59
|
+
namedCurve: "P-256"
|
|
60
|
+
}, false, ["deriveKey", "deriveBits"]);
|
|
61
|
+
const importedEphemeralPubKey = await crypto.subtle.importKey("jwk", ephemeralPubKey, {
|
|
62
|
+
name: "ECDH",
|
|
63
|
+
namedCurve: "P-256"
|
|
64
|
+
}, false, []);
|
|
65
|
+
const sharedSecret = await crypto.subtle.deriveBits({
|
|
66
|
+
name: "ECDH",
|
|
67
|
+
public: importedEphemeralPubKey
|
|
68
|
+
}, importedPrivateKey, 256);
|
|
69
|
+
const infoBytes = new TextEncoder().encode(INFO_LABEL);
|
|
70
|
+
const hkdfKey = await crypto.subtle.importKey("raw", sharedSecret, "HKDF", false, ["deriveKey"]);
|
|
71
|
+
const derivedKey = await crypto.subtle.deriveKey({
|
|
72
|
+
name: "HKDF",
|
|
73
|
+
hash: "SHA-256",
|
|
74
|
+
salt: new Uint8Array(salt),
|
|
75
|
+
info: infoBytes
|
|
76
|
+
}, hkdfKey, { name: "AES-GCM", length: 256 }, false, ["decrypt"]);
|
|
77
|
+
const decryptedBuffer = await crypto.subtle.decrypt({
|
|
78
|
+
name: "AES-GCM",
|
|
79
|
+
iv: new Uint8Array(iv)
|
|
80
|
+
}, derivedKey, new Uint8Array(ciphertext));
|
|
81
|
+
return {
|
|
82
|
+
message: new TextDecoder().decode(decryptedBuffer)
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=asymmetricEncryption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asymmetricEncryption.js","sourceRoot":"","sources":["../../../src/tools/asymmetricEncryption.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export function decodeBase64(encoded
|
|
1
|
+
export function decodeBase64(encoded) {
|
|
2
2
|
return new TextDecoder().decode(Uint8Array.from(atob(encoded), c => c.charCodeAt(0)));
|
|
3
3
|
}
|
|
4
|
-
|
|
5
|
-
export function encodeBase64(decoded: string): string {
|
|
4
|
+
export function encodeBase64(decoded) {
|
|
6
5
|
return btoa(new TextEncoder().encode(decoded).reduce((acc, c) => acc + String.fromCharCode(c), ""));
|
|
7
6
|
}
|
|
7
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../../src/tools/base64.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,OAAe;IACxC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IACxC,OAAO,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACxG,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class AccessError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
export declare function createObjectThatThrowsIfAccessed<T extends object>(params?: {
|
|
5
|
+
debugMessage?: string;
|
|
6
|
+
isPropertyWhitelisted?: (prop: string | number | symbol) => boolean;
|
|
7
|
+
}): T;
|
|
8
|
+
export declare function isObjectThatThrowIfAccessed(obj: object): boolean;
|
|
@@ -1,40 +1,29 @@
|
|
|
1
1
|
const keyIsTrapped = "isTrapped_zSskDe9d";
|
|
2
|
-
|
|
3
2
|
export class AccessError extends Error {
|
|
4
|
-
constructor(message
|
|
3
|
+
constructor(message) {
|
|
5
4
|
super(message);
|
|
6
5
|
Object.setPrototypeOf(this, new.target.prototype);
|
|
7
6
|
}
|
|
8
7
|
}
|
|
9
|
-
|
|
10
|
-
export function createObjectThatThrowsIfAccessed<T extends object>(params?: {
|
|
11
|
-
debugMessage?: string;
|
|
12
|
-
isPropertyWhitelisted?: (prop: string | number | symbol) => boolean;
|
|
13
|
-
}): T {
|
|
8
|
+
export function createObjectThatThrowsIfAccessed(params) {
|
|
14
9
|
const { debugMessage = "", isPropertyWhitelisted = () => false } = params ?? {};
|
|
15
|
-
|
|
16
|
-
const get: NonNullable<ProxyHandler<T>["get"]> = (...args) => {
|
|
10
|
+
const get = (...args) => {
|
|
17
11
|
const [, prop] = args;
|
|
18
|
-
|
|
19
12
|
if (isPropertyWhitelisted(prop)) {
|
|
20
13
|
return Reflect.get(...args);
|
|
21
14
|
}
|
|
22
|
-
|
|
23
15
|
if (prop === keyIsTrapped) {
|
|
24
16
|
return true;
|
|
25
17
|
}
|
|
26
|
-
|
|
27
18
|
throw new AccessError(`Cannot access ${String(prop)} yet ${debugMessage}`);
|
|
28
19
|
};
|
|
29
|
-
|
|
30
|
-
const trappedObject = new Proxy<T>({} as any, {
|
|
20
|
+
const trappedObject = new Proxy({}, {
|
|
31
21
|
get,
|
|
32
22
|
set: get
|
|
33
23
|
});
|
|
34
|
-
|
|
35
24
|
return trappedObject;
|
|
36
25
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return (obj as any)[keyIsTrapped] === true;
|
|
26
|
+
export function isObjectThatThrowIfAccessed(obj) {
|
|
27
|
+
return obj[keyIsTrapped] === true;
|
|
40
28
|
}
|
|
29
|
+
//# sourceMappingURL=createObjectThatThrowsIfAccessed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createObjectThatThrowsIfAccessed.js","sourceRoot":"","sources":["../../../src/tools/createObjectThatThrowsIfAccessed.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAE1C,MAAM,OAAO,WAAY,SAAQ,KAAK;IAClC,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;CACJ;AAED,MAAM,UAAU,gCAAgC,CAAmB,MAGlE;IACG,MAAM,EAAE,YAAY,GAAG,EAAE,EAAE,qBAAqB,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;IAEhF,MAAM,GAAG,GAAwC,CAAC,GAAG,IAAI,EAAE,EAAE;QACzD,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;QAEtB,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,WAAW,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,QAAQ,YAAY,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,IAAI,KAAK,CAAI,EAAS,EAAE;QAC1C,GAAG;QACH,GAAG,EAAE,GAAG;KACX,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAAW;IACnD,OAAQ,GAAW,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface JwtDecodeOptions {
|
|
2
|
+
header?: boolean;
|
|
3
|
+
}
|
|
4
|
+
export interface JwtHeader {
|
|
5
|
+
typ?: string;
|
|
6
|
+
alg?: string;
|
|
7
|
+
kid?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface JwtPayload {
|
|
10
|
+
iss?: string;
|
|
11
|
+
sub?: string;
|
|
12
|
+
aud?: string[] | string;
|
|
13
|
+
exp?: number;
|
|
14
|
+
nbf?: number;
|
|
15
|
+
iat?: number;
|
|
16
|
+
jti?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class InvalidTokenError extends Error {
|
|
19
|
+
}
|
|
20
|
+
declare function jwtDecode<T = JwtHeader>(token: string, options: JwtDecodeOptions & {
|
|
21
|
+
header: true;
|
|
22
|
+
}): T;
|
|
23
|
+
declare function jwtDecode<T = JwtPayload>(token: string, options?: JwtDecodeOptions): T;
|
|
24
|
+
export declare const decodeJwt: typeof jwtDecode;
|
|
25
|
+
export {};
|