@schemavaults/auth-react-provider 0.6.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 +3 -0
- package/dist/auth-provider/auth-middleware-manager.d.ts +4 -0
- package/dist/auth-provider/auth-middleware-manager.js +39 -0
- package/dist/auth-provider/auth-middleware-manager.js.map +1 -0
- package/dist/auth-provider/auth-provider-props.d.ts +20 -0
- package/dist/auth-provider/auth-provider-props.js +2 -0
- package/dist/auth-provider/auth-provider-props.js.map +1 -0
- package/dist/auth-provider/auth-provider.d.ts +16 -0
- package/dist/auth-provider/auth-provider.js +159 -0
- package/dist/auth-provider/auth-provider.js.map +1 -0
- package/dist/auth-provider/index.d.ts +3 -0
- package/dist/auth-provider/index.js +3 -0
- package/dist/auth-provider/index.js.map +1 -0
- package/dist/constants/DefaultPkceAuthorizeRedirectPath.d.ts +2 -0
- package/dist/constants/DefaultPkceAuthorizeRedirectPath.js +3 -0
- package/dist/constants/DefaultPkceAuthorizeRedirectPath.js.map +1 -0
- package/dist/constants/DefaultSuccessfulAuthenticationRedirectPath.d.ts +2 -0
- package/dist/constants/DefaultSuccessfulAuthenticationRedirectPath.js +3 -0
- package/dist/constants/DefaultSuccessfulAuthenticationRedirectPath.js.map +1 -0
- package/dist/contexts/app-environment-context.d.ts +2 -0
- package/dist/contexts/app-environment-context.js +4 -0
- package/dist/contexts/app-environment-context.js.map +1 -0
- package/dist/contexts/auth-client-context.d.ts +15 -0
- package/dist/contexts/auth-client-context.js +11 -0
- package/dist/contexts/auth-client-context.js.map +1 -0
- package/dist/hooks/index.d.ts +20 -0
- package/dist/hooks/index.js +11 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/use-admin.d.ts +2 -0
- package/dist/hooks/use-admin.js +8 -0
- package/dist/hooks/use-admin.js.map +1 -0
- package/dist/hooks/use-app-environment.d.ts +4 -0
- package/dist/hooks/use-app-environment.js +73 -0
- package/dist/hooks/use-app-environment.js.map +1 -0
- package/dist/hooks/use-auth-client-initialization.d.ts +18 -0
- package/dist/hooks/use-auth-client-initialization.js +72 -0
- package/dist/hooks/use-auth-client-initialization.js.map +1 -0
- package/dist/hooks/use-auth-client-middleware.d.ts +13 -0
- package/dist/hooks/use-auth-client-middleware.js +90 -0
- package/dist/hooks/use-auth-client-middleware.js.map +1 -0
- package/dist/hooks/use-auth-client-state-watcher.d.ts +10 -0
- package/dist/hooks/use-auth-client-state-watcher.js +84 -0
- package/dist/hooks/use-auth-client-state-watcher.js.map +1 -0
- package/dist/hooks/use-auth.d.ts +3 -0
- package/dist/hooks/use-auth.js +9 -0
- package/dist/hooks/use-auth.js.map +1 -0
- package/dist/hooks/use-current-user.d.ts +3 -0
- package/dist/hooks/use-current-user.js +51 -0
- package/dist/hooks/use-current-user.js.map +1 -0
- package/dist/hooks/use-debug.d.ts +4 -0
- package/dist/hooks/use-debug.js +32 -0
- package/dist/hooks/use-debug.js.map +1 -0
- package/dist/hooks/use-effect-if-authenticated.d.ts +4 -0
- package/dist/hooks/use-effect-if-authenticated.js +18 -0
- package/dist/hooks/use-effect-if-authenticated.js.map +1 -0
- package/dist/hooks/use-is-client-execution-environment.d.ts +2 -0
- package/dist/hooks/use-is-client-execution-environment.js +21 -0
- package/dist/hooks/use-is-client-execution-environment.js.map +1 -0
- package/dist/hooks/use-logout-effect.d.ts +7 -0
- package/dist/hooks/use-logout-effect.js +88 -0
- package/dist/hooks/use-logout-effect.js.map +1 -0
- package/dist/hooks/use-start-login-oauth-pkce-flow.d.ts +4 -0
- package/dist/hooks/use-start-login-oauth-pkce-flow.js +110 -0
- package/dist/hooks/use-start-login-oauth-pkce-flow.js.map +1 -0
- package/dist/hooks/use-start-register-oauth-pkce-flow.d.ts +4 -0
- package/dist/hooks/use-start-register-oauth-pkce-flow.js +109 -0
- package/dist/hooks/use-start-register-oauth-pkce-flow.js.map +1 -0
- package/dist/hooks/use-trade-authorization-code-for-tokens.d.ts +15 -0
- package/dist/hooks/use-trade-authorization-code-for-tokens.js +232 -0
- package/dist/hooks/use-trade-authorization-code-for-tokens.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/UiToastFn.d.ts +8 -0
- package/dist/lib/UiToastFn.js +2 -0
- package/dist/lib/UiToastFn.js.map +1 -0
- package/dist/lib/UserData.d.ts +2 -0
- package/dist/lib/UserData.js +2 -0
- package/dist/lib/UserData.js.map +1 -0
- package/dist/lib/auth-client-factory.d.ts +43 -0
- package/dist/lib/auth-client-factory.js +98 -0
- package/dist/lib/auth-client-factory.js.map +1 -0
- package/dist/lib/get-app-environment-on-client-based-on-window-href.d.ts +3 -0
- package/dist/lib/get-app-environment-on-client-based-on-window-href.js +39 -0
- package/dist/lib/get-app-environment-on-client-based-on-window-href.js.map +1 -0
- package/dist/lib/get-app-environment-on-client.d.ts +2 -0
- package/dist/lib/get-app-environment-on-client.js +33 -0
- package/dist/lib/get-app-environment-on-client.js.map +1 -0
- package/dist/lib/getPkceAuthorizeUri.d.ts +9 -0
- package/dist/lib/getPkceAuthorizeUri.js +15 -0
- package/dist/lib/getPkceAuthorizeUri.js.map +1 -0
- package/dist/lib/getSuccessfulAuthenticationRedirectUri.d.ts +9 -0
- package/dist/lib/getSuccessfulAuthenticationRedirectUri.js +12 -0
- package/dist/lib/getSuccessfulAuthenticationRedirectUri.js.map +1 -0
- package/dist/lib/isClientRuntime.d.ts +1 -0
- package/dist/lib/isClientRuntime.js +13 -0
- package/dist/lib/isClientRuntime.js.map +1 -0
- package/dist/lib/react-auth-client-adapter.d.ts +40 -0
- package/dist/lib/react-auth-client-adapter.js +405 -0
- package/dist/lib/react-auth-client-adapter.js.map +1 -0
- package/dist/subproviders/app-environment-provider.d.ts +8 -0
- package/dist/subproviders/app-environment-provider.js +25 -0
- package/dist/subproviders/app-environment-provider.js.map +1 -0
- package/dist/subproviders/initialized-auth-client-provider.d.ts +6 -0
- package/dist/subproviders/initialized-auth-client-provider.js +12 -0
- package/dist/subproviders/initialized-auth-client-provider.js.map +1 -0
- package/dist/types/IReactAuthClientSdkAdapterInitOptions.d.ts +7 -0
- package/dist/types/IReactAuthClientSdkAdapterInitOptions.js +2 -0
- package/dist/types/IReactAuthClientSdkAdapterInitOptions.js.map +1 -0
- package/dist/types/UiToastFn.d.ts +8 -0
- package/dist/types/UiToastFn.js +2 -0
- package/dist/types/UiToastFn.js.map +1 -0
- package/dist/types/UserData.d.ts +2 -0
- package/dist/types/UserData.js +2 -0
- package/dist/types/UserData.js.map +1 -0
- package/dist/types/hook-status.d.ts +14 -0
- package/dist/types/hook-status.js +5 -0
- package/dist/types/hook-status.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import useEffectIfAuthenticated from "./use-effect-if-authenticated";
|
|
3
|
+
import useAuth from "./use-auth";
|
|
4
|
+
import { useEffect } from "react";
|
|
5
|
+
import useAppEnvironment from "./use-app-environment";
|
|
6
|
+
import useDebug from "./use-debug";
|
|
7
|
+
export function useStartRegisterOauthPKCEFlow(useAppRouter, checkIfAuthenticatedWithServer, useToast) {
|
|
8
|
+
const router = useAppRouter();
|
|
9
|
+
const authContext = useAuth();
|
|
10
|
+
const environment = useAppEnvironment();
|
|
11
|
+
const debug = useDebug(environment);
|
|
12
|
+
const { toast } = useToast();
|
|
13
|
+
useEffectIfAuthenticated((auth) => {
|
|
14
|
+
if (debug) {
|
|
15
|
+
console.log("[useEffectIfAuthenticated] Sending to account page...");
|
|
16
|
+
}
|
|
17
|
+
const redirect_uri = auth.successful_authentication_redirect_uri;
|
|
18
|
+
router.push(redirect_uri);
|
|
19
|
+
return () => { };
|
|
20
|
+
});
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
let cancelRegisterEffect = false;
|
|
23
|
+
async function checkIfAlreadyAuthenticated(auth) {
|
|
24
|
+
if (!auth.isAuthenticated) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const hasValidRefreshTokenSet = await checkIfAuthenticatedWithServer();
|
|
28
|
+
if (!hasValidRefreshTokenSet) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
async function startRegisterPkceFlow(auth) {
|
|
34
|
+
if (cancelRegisterEffect) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
await auth.register();
|
|
38
|
+
}
|
|
39
|
+
async function handleAuthClientReady(auth) {
|
|
40
|
+
if (cancelRegisterEffect) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
let isAuthenticated = false;
|
|
44
|
+
try {
|
|
45
|
+
isAuthenticated = await checkIfAlreadyAuthenticated(auth);
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
// no-op
|
|
49
|
+
console.error("[useStartRegisterOauthPKCEFlow] Error checking if user is already authenticated: ", e);
|
|
50
|
+
}
|
|
51
|
+
if (isAuthenticated) {
|
|
52
|
+
if (debug) {
|
|
53
|
+
console.log("[startRegisterPkceFlow] User appears to already be logged in! Not triggering Oauth2 PKCE flow-- a different effect should redirect the user to the account page...");
|
|
54
|
+
}
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
if (debug) {
|
|
59
|
+
console.log("[startRegisterPkceFlow] User does not appear to already be logged in... Starting Oauth2 PKCE flow!");
|
|
60
|
+
}
|
|
61
|
+
await startRegisterPkceFlow(auth);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (authContext.ready) {
|
|
66
|
+
if (debug) {
|
|
67
|
+
console.log("[useStartRegisterOauthPKCEFlow] Auth client ready.");
|
|
68
|
+
}
|
|
69
|
+
const clientRef = authContext.client;
|
|
70
|
+
if (!clientRef) {
|
|
71
|
+
if (debug) {
|
|
72
|
+
console.error("[useStartRegisterOauthPKCEFlow] Auth client not ready. -- null client ref.");
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
if (clientRef.current) {
|
|
78
|
+
const auth = clientRef.current;
|
|
79
|
+
handleAuthClientReady(auth).catch(function onFailureStartingRegisterFlow(e) {
|
|
80
|
+
console.error("Error starting register flow: ", e);
|
|
81
|
+
toast({
|
|
82
|
+
variant: "destructive",
|
|
83
|
+
title: "Error starting register flow!",
|
|
84
|
+
description: e instanceof Error
|
|
85
|
+
? e.message
|
|
86
|
+
: "An unknown error has occurred!",
|
|
87
|
+
});
|
|
88
|
+
return;
|
|
89
|
+
});
|
|
90
|
+
return function effectUnsubscribeHandler() {
|
|
91
|
+
cancelRegisterEffect = true;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
if (debug) {
|
|
97
|
+
console.error("[useStartRegisterOauthPKCEFlow] Error redirecting to register page: ", e);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
if (debug) {
|
|
103
|
+
console.log("[useStartRegisterOauthPKCEFlow] Auth client not ready.");
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}, [authContext, debug, router, toast, checkIfAuthenticatedWithServer]);
|
|
107
|
+
}
|
|
108
|
+
export default useStartRegisterOauthPKCEFlow;
|
|
109
|
+
//# sourceMappingURL=use-start-register-oauth-pkce-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-start-register-oauth-pkce-flow.js","sourceRoot":"","sources":["../../src/hooks/use-start-register-oauth-pkce-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { useRouter, useSearchParams } from "next/navigation";
|
|
2
|
+
import type { ISchemaVaultsAuthClient } from "@schemavaults/auth-client-sdk";
|
|
3
|
+
export interface IUseTradeAuthorizationCodeForTokensEffectOptions {
|
|
4
|
+
router: ReturnType<typeof useRouter>;
|
|
5
|
+
searchParams: ReturnType<typeof useSearchParams>;
|
|
6
|
+
auth: ISchemaVaultsAuthClient;
|
|
7
|
+
toast?: (toastOpts: {
|
|
8
|
+
title: string;
|
|
9
|
+
description: string;
|
|
10
|
+
variant?: "destructive" | "warning";
|
|
11
|
+
}) => void;
|
|
12
|
+
debug?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function useTradeAuthorizationCodeForTokensEffect({ router, searchParams, auth, toast, ...opts }: IUseTradeAuthorizationCodeForTokensEffectOptions): void;
|
|
15
|
+
export default useTradeAuthorizationCodeForTokensEffect;
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { useAppEnvironment } from "./use-app-environment";
|
|
4
|
+
import { useDebugWithSpecifiedBooleanOrLookupDefault } from "./use-debug";
|
|
5
|
+
export function useTradeAuthorizationCodeForTokensEffect({ router, searchParams, auth, toast, ...opts }) {
|
|
6
|
+
const environment = useAppEnvironment();
|
|
7
|
+
const debug = useDebugWithSpecifiedBooleanOrLookupDefault(environment, opts.debug);
|
|
8
|
+
useEffect(function tradeAuthorizationCodeForTokensEffect() {
|
|
9
|
+
let currentHref = undefined;
|
|
10
|
+
try {
|
|
11
|
+
if (window) {
|
|
12
|
+
currentHref = window.location.href;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
16
|
+
void e; // no-op
|
|
17
|
+
}
|
|
18
|
+
if (debug) {
|
|
19
|
+
console.log("[tradeAuthorizationCodeForTokensEffect] Attempting to trade authorization code for authentication tokens on path: ", currentHref);
|
|
20
|
+
if (typeof toast === "function") {
|
|
21
|
+
console.log("[tradeAuthorizationCodeForTokensEffect] Received 'toast' function to allow displaying info to end-user!");
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
let tradeCodeEffectCancelled = false;
|
|
25
|
+
function cancelEffectUnsubscribeFn() {
|
|
26
|
+
if (debug) {
|
|
27
|
+
console.log("[useTradeAuthorizationCodeForTokensEffect] cancelEffectUnsubscribeFn()");
|
|
28
|
+
}
|
|
29
|
+
tradeCodeEffectCancelled = true;
|
|
30
|
+
}
|
|
31
|
+
if (debug && typeof toast === "function") {
|
|
32
|
+
toast({
|
|
33
|
+
title: "[DEV] useTradeAuthorizationCodeForTokensEffect",
|
|
34
|
+
description: "Attempting to trade authorization code & code proof for tokens...",
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function onAuthHandlerSuccess() {
|
|
38
|
+
if (tradeCodeEffectCancelled) {
|
|
39
|
+
if (debug) {
|
|
40
|
+
console.log("[onAuthHandlerSuccess]", "Success handler called, but side effect cancelled!");
|
|
41
|
+
}
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (debug) {
|
|
45
|
+
console.log("[onAuthHandlerSuccess] Redirecting user after successful authentication!");
|
|
46
|
+
}
|
|
47
|
+
router.replace(auth.successful_authentication_redirect_uri);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
function onAuthHandlerFail(e) {
|
|
51
|
+
if (tradeCodeEffectCancelled)
|
|
52
|
+
return;
|
|
53
|
+
if (typeof toast === "function") {
|
|
54
|
+
toast({
|
|
55
|
+
variant: "destructive",
|
|
56
|
+
title: "Failed to trade authorization code for tokens",
|
|
57
|
+
description: !!e && e instanceof Error
|
|
58
|
+
? e.message
|
|
59
|
+
: "An unknown error occurred!",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
router.replace(auth.successful_logout_redirect_uri ?? "/");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (auth.isAuthenticated) {
|
|
66
|
+
if (typeof toast === "function") {
|
|
67
|
+
toast({
|
|
68
|
+
variant: "warning",
|
|
69
|
+
title: "Already logged in!",
|
|
70
|
+
description: "Please log out before attempting to log in to a different account!",
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
onAuthHandlerSuccess();
|
|
74
|
+
}
|
|
75
|
+
async function tradeAuthorizationCodeForTokensHandler() {
|
|
76
|
+
if (debug) {
|
|
77
|
+
console.log("[tradeAuthorizationCodeForTokensHandler] running...");
|
|
78
|
+
}
|
|
79
|
+
const authorization_code = searchParams.get("authorization_code" /* AuthorizePageSearchParam.AuthorizationCode */);
|
|
80
|
+
const challenge_time_str = searchParams.get("challenge_time" /* AuthorizePageSearchParam.ChallengeTime */);
|
|
81
|
+
if (debug) {
|
|
82
|
+
console.log("[useTradeAuthorizationCodeForTokensEffect] Authorization code:", authorization_code);
|
|
83
|
+
console.log("[useTradeAuthorizationCodeForTokensEffect] Challenge time:", challenge_time_str);
|
|
84
|
+
}
|
|
85
|
+
if (!authorization_code || !challenge_time_str) {
|
|
86
|
+
if (debug) {
|
|
87
|
+
console.error("[tradeAuthorizationCodeForTokensHandler] Missing authorization code or challenge time.");
|
|
88
|
+
}
|
|
89
|
+
if (typeof toast === "function") {
|
|
90
|
+
toast({
|
|
91
|
+
variant: "destructive",
|
|
92
|
+
title: "Missing authorization code or challenge time!",
|
|
93
|
+
description: "Expected data not found within query parameters!",
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
success: false,
|
|
98
|
+
loading: false,
|
|
99
|
+
error: new Error("Missing authorization code or challenge time within query parameters!"),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const challenge_time = parseInt(challenge_time_str);
|
|
103
|
+
if (isNaN(challenge_time)) {
|
|
104
|
+
if (debug) {
|
|
105
|
+
console.error("[tradeAuthorizationCodeForTokensHandler] Challenge time is not a number.");
|
|
106
|
+
}
|
|
107
|
+
if (typeof toast === "function") {
|
|
108
|
+
toast({
|
|
109
|
+
variant: "destructive",
|
|
110
|
+
title: "Failed to parse PKCE challenge time!",
|
|
111
|
+
description: "Please try again later...",
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
success: false,
|
|
116
|
+
loading: false,
|
|
117
|
+
error: new Error("Failed to parse PKCE challenge time!"),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
const savedVerifiers = await auth.loadSavedAuthorizationCodeVerifiers();
|
|
122
|
+
if (typeof savedVerifiers[challenge_time] === "string" &&
|
|
123
|
+
savedVerifiers[challenge_time].startsWith("deleted-at-")) {
|
|
124
|
+
const full_deletion_time = Number(savedVerifiers[challenge_time].substring("deleted-at-".length));
|
|
125
|
+
if (isNaN(full_deletion_time)) {
|
|
126
|
+
throw new Error("Failed to load deletion time from deleted-at- code verifier soft deletion mark!");
|
|
127
|
+
}
|
|
128
|
+
if (Math.abs(Date.now() - full_deletion_time) < 5000) {
|
|
129
|
+
return {
|
|
130
|
+
error: new Error("Code verifier has already been used in the last 5 seconds!"),
|
|
131
|
+
loading: false,
|
|
132
|
+
success: false,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
console.warn("Code verifier appears to have already been used, and there was an error handling this case: ", e);
|
|
139
|
+
}
|
|
140
|
+
// This uses PKCE behind the scenes to ensure that the authorization code is valid (and came from this client)
|
|
141
|
+
try {
|
|
142
|
+
if (debug) {
|
|
143
|
+
console.log("[tradeAuthorizationCodeForTokensHandler] calling AuthClient.handleSuccessfulAuthentication()...");
|
|
144
|
+
}
|
|
145
|
+
await auth.handleSuccessfulAuthentication(authorization_code, challenge_time);
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
if (e instanceof Error) {
|
|
149
|
+
if (e.message.includes("already been used")) {
|
|
150
|
+
console.warn("handleSuccessfulAuthentication() appears to have failed due to an 'already been used' error!", e.message);
|
|
151
|
+
/** no-op */
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
console.error("[tradeAuthorizationCodeForTokensHandler] Handle successful authentication handler failed: ", e);
|
|
155
|
+
if (typeof toast === "function") {
|
|
156
|
+
toast({
|
|
157
|
+
variant: "destructive",
|
|
158
|
+
title: "Failed to acquire authentication tokens",
|
|
159
|
+
description: "Successful authentication handler failed!",
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
throw new Error("Failed to exchange authorization code for refresh token using auth client!");
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (debug) {
|
|
167
|
+
console.log("[tradeAuthorizationCodeForTokensHandler] Exchanging authorization code for refresh tokens appears to have been a success...");
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
loading: false,
|
|
171
|
+
success: true,
|
|
172
|
+
data: {
|
|
173
|
+
auth_state_set: true,
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
} // end of tradeAuthorizationCodeForTokensHandler()
|
|
177
|
+
if (debug) {
|
|
178
|
+
console.log("[useTradeAuthorizationCodeForTokensEffect] Calling tradeAuthorizationCodeForTokensHandler()...");
|
|
179
|
+
}
|
|
180
|
+
tradeAuthorizationCodeForTokensHandler()
|
|
181
|
+
.then((init_result) => {
|
|
182
|
+
if (tradeCodeEffectCancelled) {
|
|
183
|
+
if (debug) {
|
|
184
|
+
console.log("[useTradeAuthorizationCodeForTokensEffect] cancelling early due to unmount...");
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (!!init_result && !init_result.loading) {
|
|
188
|
+
if (init_result.success) {
|
|
189
|
+
if (init_result.data.auth_state_set) {
|
|
190
|
+
if (debug) {
|
|
191
|
+
console.log("[useTradeAuthorizationCodeForTokensEffect]", "tradeAuthorizationCodeForTokensHandler ran successfully!");
|
|
192
|
+
}
|
|
193
|
+
onAuthHandlerSuccess();
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
throw new Error("Invalid shape returned, despite success result!");
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
console.error(`[useTradeAuthorizationCodeForTokensEffect] tradeAuthorizationCodeForTokensHandler returned error result: `, init_result.error);
|
|
202
|
+
onAuthHandlerFail(init_result.error);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
if (debug) {
|
|
208
|
+
console.log("[useTradeAuthorizationCodeForTokensEffect] " +
|
|
209
|
+
"tradeAuthorizationCodeForTokensHandler indicated that the client is still in a loading state!");
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
})
|
|
213
|
+
.catch((e) => {
|
|
214
|
+
if (tradeCodeEffectCancelled) {
|
|
215
|
+
if (debug) {
|
|
216
|
+
console.log("[useTradeAuthorizationCodeForTokensEffect] cancelling early due to unmount...");
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (e instanceof Error) {
|
|
220
|
+
if (e.message.includes("already been used")) {
|
|
221
|
+
// fix react strict mode running twice
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
console.error("[useTradeAuthorizationCodeForTokensEffect] tradeAuthorizationCodeForTokensHandler failed: ", e);
|
|
226
|
+
onAuthHandlerFail(e);
|
|
227
|
+
});
|
|
228
|
+
return cancelEffectUnsubscribeFn;
|
|
229
|
+
}, [toast, debug, router, searchParams, auth]);
|
|
230
|
+
}
|
|
231
|
+
export default useTradeAuthorizationCodeForTokensEffect;
|
|
232
|
+
//# sourceMappingURL=use-trade-authorization-code-for-tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-trade-authorization-code-for-tokens.js","sourceRoot":"","sources":["../../src/hooks/use-trade-authorization-code-for-tokens.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { SchemaVaultsAuthProvider, default as AuthProvider, default as default, } from "./auth-provider";
|
|
2
|
+
export type * from "./auth-provider";
|
|
3
|
+
export type { SchemaVaultsAppEnvironment } from "@schemavaults/app-definitions";
|
|
4
|
+
export type { ISchemaVaultsAuthClient } from "@schemavaults/auth-client-sdk";
|
|
5
|
+
export * from "./hooks";
|
|
6
|
+
export type * from "./hooks";
|
|
7
|
+
export type * from "./types/hook-status";
|
|
8
|
+
export type { UserData } from "./types/UserData";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,OAAO,IAAI,YAAY,EACvB,OAAO,IAAI,OAAO,GACnB,MAAM,iBAAiB,CAAC;AAMzB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UiToastFn.js","sourceRoot":"","sources":["../../src/lib/UiToastFn.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserData.js","sourceRoot":"","sources":["../../src/lib/UserData.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type ISchemaVaultsAuthClient } from "@schemavaults/auth-client-sdk";
|
|
2
|
+
import type { SchemaVaultsAppEnvironment } from "@schemavaults/app-definitions";
|
|
3
|
+
export interface IAuthClientFactoryInitOpts {
|
|
4
|
+
environment: SchemaVaultsAppEnvironment;
|
|
5
|
+
app_id: string;
|
|
6
|
+
debug?: boolean;
|
|
7
|
+
default_audiences?: string[];
|
|
8
|
+
auth_server_uri: string;
|
|
9
|
+
successful_authentication_redirect_uri: string;
|
|
10
|
+
successful_logout_redirect_uri: string;
|
|
11
|
+
authorize_uri?: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
export declare class AuthClientFactory {
|
|
14
|
+
private readonly environment;
|
|
15
|
+
private readonly secure;
|
|
16
|
+
private readonly app_id;
|
|
17
|
+
private readonly debug;
|
|
18
|
+
private default_audiences?;
|
|
19
|
+
private readonly auth_server_uri;
|
|
20
|
+
private readonly successful_authentication_redirect_uri;
|
|
21
|
+
private readonly successful_logout_redirect_uri;
|
|
22
|
+
private readonly authorize_uri;
|
|
23
|
+
constructor(opts: IAuthClientFactoryInitOpts);
|
|
24
|
+
private createAuthClientWithUuidGenerator;
|
|
25
|
+
/**
|
|
26
|
+
* @name createReactAuthClientAdapter
|
|
27
|
+
* @param uuid A function that generates a random UUIDv4 (e.g. crypto.randomUUID(); but that only works in secure contexts)
|
|
28
|
+
* @returns ISchemaVaultsAuthClientAdapter - An adapter that allows an ISchemaVaultsAuthClient implementation to store/retrieve stuff using the web client
|
|
29
|
+
*/
|
|
30
|
+
private createReactAuthClientAdapter;
|
|
31
|
+
/**
|
|
32
|
+
* @name createFinalAuthClient
|
|
33
|
+
* @param uuid A function that generates a random UUIDv4 (e.g. crypto.randomUUID(); but that only works in secure contexts)
|
|
34
|
+
* @returns An implementation of ISchemaVaultsAuthClient, initialized with a ReactAuthClientSdkAdapter
|
|
35
|
+
*/
|
|
36
|
+
private createFinalAuthClient;
|
|
37
|
+
/**
|
|
38
|
+
* @name createAuthClientInstance()
|
|
39
|
+
* @returns A promise resolving to an instance implementing ISchemaVaultsAuthClient, with a ReactAuthClientSdkAdapter
|
|
40
|
+
*/
|
|
41
|
+
createAuthClientInstance(): Promise<ISchemaVaultsAuthClient>;
|
|
42
|
+
}
|
|
43
|
+
export default AuthClientFactory;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import SchemaVaultsAuthClient from "@schemavaults/auth-client-sdk";
|
|
3
|
+
import { ReactAuthClientSdkAdapter } from "./react-auth-client-adapter";
|
|
4
|
+
export class AuthClientFactory {
|
|
5
|
+
environment;
|
|
6
|
+
secure;
|
|
7
|
+
app_id;
|
|
8
|
+
debug;
|
|
9
|
+
default_audiences;
|
|
10
|
+
auth_server_uri;
|
|
11
|
+
successful_authentication_redirect_uri;
|
|
12
|
+
successful_logout_redirect_uri;
|
|
13
|
+
authorize_uri;
|
|
14
|
+
constructor(opts) {
|
|
15
|
+
const environment = opts.environment;
|
|
16
|
+
this.environment = environment;
|
|
17
|
+
this.app_id = opts.app_id;
|
|
18
|
+
const isInsecureHTTPContext = (window.location.protocol.startsWith("http:") && !window.location.hostname.includes("localhost"));
|
|
19
|
+
this.secure = !isInsecureHTTPContext;
|
|
20
|
+
this.debug =
|
|
21
|
+
typeof opts.debug === "boolean"
|
|
22
|
+
? opts.debug
|
|
23
|
+
: environment === "development" ||
|
|
24
|
+
environment === "test" ||
|
|
25
|
+
environment === "staging";
|
|
26
|
+
this.default_audiences = opts.default_audiences;
|
|
27
|
+
this.auth_server_uri = opts.auth_server_uri;
|
|
28
|
+
this.successful_authentication_redirect_uri =
|
|
29
|
+
opts.successful_authentication_redirect_uri;
|
|
30
|
+
this.successful_logout_redirect_uri = opts.successful_logout_redirect_uri;
|
|
31
|
+
this.authorize_uri = opts.authorize_uri;
|
|
32
|
+
}
|
|
33
|
+
async createAuthClientWithUuidGenerator() {
|
|
34
|
+
let uuid_generator;
|
|
35
|
+
if (!this.secure) {
|
|
36
|
+
const uuid_es_module = await import("uuid");
|
|
37
|
+
uuid_generator = () => uuid_es_module.v4();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
uuid_generator = () => crypto.randomUUID();
|
|
41
|
+
}
|
|
42
|
+
const auth = this.createFinalAuthClient(uuid_generator);
|
|
43
|
+
return auth;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @name createReactAuthClientAdapter
|
|
47
|
+
* @param uuid A function that generates a random UUIDv4 (e.g. crypto.randomUUID(); but that only works in secure contexts)
|
|
48
|
+
* @returns ISchemaVaultsAuthClientAdapter - An adapter that allows an ISchemaVaultsAuthClient implementation to store/retrieve stuff using the web client
|
|
49
|
+
*/
|
|
50
|
+
createReactAuthClientAdapter(uuid) {
|
|
51
|
+
return new ReactAuthClientSdkAdapter({
|
|
52
|
+
uuid,
|
|
53
|
+
environment: this.environment,
|
|
54
|
+
auth_server_uri: this.auth_server_uri,
|
|
55
|
+
debug: this.debug,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* @name createFinalAuthClient
|
|
60
|
+
* @param uuid A function that generates a random UUIDv4 (e.g. crypto.randomUUID(); but that only works in secure contexts)
|
|
61
|
+
* @returns An implementation of ISchemaVaultsAuthClient, initialized with a ReactAuthClientSdkAdapter
|
|
62
|
+
*/
|
|
63
|
+
createFinalAuthClient(uuid) {
|
|
64
|
+
const environment = this.environment;
|
|
65
|
+
const adapter = this.createReactAuthClientAdapter(uuid);
|
|
66
|
+
const auth_client_options = {
|
|
67
|
+
adapter,
|
|
68
|
+
auth_server_uri: this.auth_server_uri,
|
|
69
|
+
successful_authentication_redirect_uri: this.successful_authentication_redirect_uri,
|
|
70
|
+
successful_logout_redirect_uri: this.successful_logout_redirect_uri ?? window.location.origin,
|
|
71
|
+
authorize_uri: this.authorize_uri,
|
|
72
|
+
app_id: this.app_id,
|
|
73
|
+
default_audiences: this.default_audiences,
|
|
74
|
+
debug: this.debug,
|
|
75
|
+
app_env: environment,
|
|
76
|
+
};
|
|
77
|
+
const auth = new SchemaVaultsAuthClient(auth_client_options);
|
|
78
|
+
if (this.debug) {
|
|
79
|
+
console.log("[useAuthClientInitialization] Initialized auth client at URL: ", window.location.href ?? undefined);
|
|
80
|
+
}
|
|
81
|
+
return auth;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* @name createAuthClientInstance()
|
|
85
|
+
* @returns A promise resolving to an instance implementing ISchemaVaultsAuthClient, with a ReactAuthClientSdkAdapter
|
|
86
|
+
*/
|
|
87
|
+
async createAuthClientInstance() {
|
|
88
|
+
try {
|
|
89
|
+
return await this.createAuthClientWithUuidGenerator();
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
console.error("Failed to initialize SchemaVaultsAuthClient with ReactAuthClientSdkAdapter: ", e);
|
|
93
|
+
throw new Error("Failed to initialize SchemaVaultsAuthClient with ReactAuthClientSdkAdapter!");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export default AuthClientFactory;
|
|
98
|
+
//# sourceMappingURL=auth-client-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-client-factory.js","sourceRoot":"","sources":["../../src/lib/auth-client-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
export function getAppEnvironmentOnClientBasedOnWindowHref(window) {
|
|
3
|
+
if (!window) {
|
|
4
|
+
throw new Error("'window' is not defined! Is this code running server-side?");
|
|
5
|
+
}
|
|
6
|
+
const href = window.location.href ?? undefined;
|
|
7
|
+
if (href) {
|
|
8
|
+
if (href === "https://schemavaults.com" ||
|
|
9
|
+
href.startsWith("https://schemavaults.com/")) {
|
|
10
|
+
return "production";
|
|
11
|
+
}
|
|
12
|
+
else if (href === "https://auth.schemavaults.com" ||
|
|
13
|
+
href.startsWith("https://auth.schemavaults.com/")) {
|
|
14
|
+
return "production";
|
|
15
|
+
}
|
|
16
|
+
else if (href === "https://staging.schemavaults.com" ||
|
|
17
|
+
href.startsWith("https://staging.schemavaults.com/")) {
|
|
18
|
+
return "staging";
|
|
19
|
+
}
|
|
20
|
+
else if (href === "https://auth-staging.schemavaults.com" ||
|
|
21
|
+
href.startsWith("https://auth-staging.schemavaults.com/")) {
|
|
22
|
+
return "staging";
|
|
23
|
+
}
|
|
24
|
+
// ensure e2e test environment is resolved as 'test
|
|
25
|
+
if (href === "http://schemavaults-auth" ||
|
|
26
|
+
href === "http://schemavaults-auth:80") {
|
|
27
|
+
return "test";
|
|
28
|
+
}
|
|
29
|
+
else if (href.startsWith("http://schemavaults-auth/")) {
|
|
30
|
+
return "test";
|
|
31
|
+
}
|
|
32
|
+
else if (href.startsWith("http://schemavaults-auth:80/")) {
|
|
33
|
+
return "test";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
export default getAppEnvironmentOnClientBasedOnWindowHref;
|
|
39
|
+
//# sourceMappingURL=get-app-environment-on-client-based-on-window-href.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-app-environment-on-client-based-on-window-href.js","sourceRoot":"","sources":["../../src/lib/get-app-environment-on-client-based-on-window-href.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAIb,MAAM,UAAU,0CAA0C,CACxD,MAAc;IAEd,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAuB,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC;IACnE,IAAI,IAAI,EAAE,CAAC;QACT,IACE,IAAI,KAAK,0BAA0B;YACnC,IAAI,CAAC,UAAU,CAAC,2BAA2B,CAAC,EAC5C,CAAC;YACD,OAAO,YAAY,CAAC;QACtB,CAAC;aAAM,IACL,IAAI,KAAK,+BAA+B;YACxC,IAAI,CAAC,UAAU,CAAC,gCAAgC,CAAC,EACjD,CAAC;YACD,OAAO,YAAY,CAAC;QACtB,CAAC;aAAM,IACL,IAAI,KAAK,kCAAkC;YAC3C,IAAI,CAAC,UAAU,CAAC,mCAAmC,CAAC,EACpD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;aAAM,IACL,IAAI,KAAK,uCAAuC;YAChD,IAAI,CAAC,UAAU,CAAC,wCAAwC,CAAC,EACzD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,mDAAmD;QACnD,IACE,IAAI,KAAK,0BAA0B;YACnC,IAAI,KAAK,6BAA6B,EACtC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,2BAA2B,CAAC,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,8BAA8B,CAAC,EAAE,CAAC;YAC3D,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,eAAe,0CAA0C,CAAC"}
|