@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.
Files changed (119) hide show
  1. package/README.md +3 -0
  2. package/dist/auth-provider/auth-middleware-manager.d.ts +4 -0
  3. package/dist/auth-provider/auth-middleware-manager.js +39 -0
  4. package/dist/auth-provider/auth-middleware-manager.js.map +1 -0
  5. package/dist/auth-provider/auth-provider-props.d.ts +20 -0
  6. package/dist/auth-provider/auth-provider-props.js +2 -0
  7. package/dist/auth-provider/auth-provider-props.js.map +1 -0
  8. package/dist/auth-provider/auth-provider.d.ts +16 -0
  9. package/dist/auth-provider/auth-provider.js +159 -0
  10. package/dist/auth-provider/auth-provider.js.map +1 -0
  11. package/dist/auth-provider/index.d.ts +3 -0
  12. package/dist/auth-provider/index.js +3 -0
  13. package/dist/auth-provider/index.js.map +1 -0
  14. package/dist/constants/DefaultPkceAuthorizeRedirectPath.d.ts +2 -0
  15. package/dist/constants/DefaultPkceAuthorizeRedirectPath.js +3 -0
  16. package/dist/constants/DefaultPkceAuthorizeRedirectPath.js.map +1 -0
  17. package/dist/constants/DefaultSuccessfulAuthenticationRedirectPath.d.ts +2 -0
  18. package/dist/constants/DefaultSuccessfulAuthenticationRedirectPath.js +3 -0
  19. package/dist/constants/DefaultSuccessfulAuthenticationRedirectPath.js.map +1 -0
  20. package/dist/contexts/app-environment-context.d.ts +2 -0
  21. package/dist/contexts/app-environment-context.js +4 -0
  22. package/dist/contexts/app-environment-context.js.map +1 -0
  23. package/dist/contexts/auth-client-context.d.ts +15 -0
  24. package/dist/contexts/auth-client-context.js +11 -0
  25. package/dist/contexts/auth-client-context.js.map +1 -0
  26. package/dist/hooks/index.d.ts +20 -0
  27. package/dist/hooks/index.js +11 -0
  28. package/dist/hooks/index.js.map +1 -0
  29. package/dist/hooks/use-admin.d.ts +2 -0
  30. package/dist/hooks/use-admin.js +8 -0
  31. package/dist/hooks/use-admin.js.map +1 -0
  32. package/dist/hooks/use-app-environment.d.ts +4 -0
  33. package/dist/hooks/use-app-environment.js +73 -0
  34. package/dist/hooks/use-app-environment.js.map +1 -0
  35. package/dist/hooks/use-auth-client-initialization.d.ts +18 -0
  36. package/dist/hooks/use-auth-client-initialization.js +72 -0
  37. package/dist/hooks/use-auth-client-initialization.js.map +1 -0
  38. package/dist/hooks/use-auth-client-middleware.d.ts +13 -0
  39. package/dist/hooks/use-auth-client-middleware.js +90 -0
  40. package/dist/hooks/use-auth-client-middleware.js.map +1 -0
  41. package/dist/hooks/use-auth-client-state-watcher.d.ts +10 -0
  42. package/dist/hooks/use-auth-client-state-watcher.js +84 -0
  43. package/dist/hooks/use-auth-client-state-watcher.js.map +1 -0
  44. package/dist/hooks/use-auth.d.ts +3 -0
  45. package/dist/hooks/use-auth.js +9 -0
  46. package/dist/hooks/use-auth.js.map +1 -0
  47. package/dist/hooks/use-current-user.d.ts +3 -0
  48. package/dist/hooks/use-current-user.js +51 -0
  49. package/dist/hooks/use-current-user.js.map +1 -0
  50. package/dist/hooks/use-debug.d.ts +4 -0
  51. package/dist/hooks/use-debug.js +32 -0
  52. package/dist/hooks/use-debug.js.map +1 -0
  53. package/dist/hooks/use-effect-if-authenticated.d.ts +4 -0
  54. package/dist/hooks/use-effect-if-authenticated.js +18 -0
  55. package/dist/hooks/use-effect-if-authenticated.js.map +1 -0
  56. package/dist/hooks/use-is-client-execution-environment.d.ts +2 -0
  57. package/dist/hooks/use-is-client-execution-environment.js +21 -0
  58. package/dist/hooks/use-is-client-execution-environment.js.map +1 -0
  59. package/dist/hooks/use-logout-effect.d.ts +7 -0
  60. package/dist/hooks/use-logout-effect.js +88 -0
  61. package/dist/hooks/use-logout-effect.js.map +1 -0
  62. package/dist/hooks/use-start-login-oauth-pkce-flow.d.ts +4 -0
  63. package/dist/hooks/use-start-login-oauth-pkce-flow.js +110 -0
  64. package/dist/hooks/use-start-login-oauth-pkce-flow.js.map +1 -0
  65. package/dist/hooks/use-start-register-oauth-pkce-flow.d.ts +4 -0
  66. package/dist/hooks/use-start-register-oauth-pkce-flow.js +109 -0
  67. package/dist/hooks/use-start-register-oauth-pkce-flow.js.map +1 -0
  68. package/dist/hooks/use-trade-authorization-code-for-tokens.d.ts +15 -0
  69. package/dist/hooks/use-trade-authorization-code-for-tokens.js +232 -0
  70. package/dist/hooks/use-trade-authorization-code-for-tokens.js.map +1 -0
  71. package/dist/index.d.ts +8 -0
  72. package/dist/index.js +3 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/lib/UiToastFn.d.ts +8 -0
  75. package/dist/lib/UiToastFn.js +2 -0
  76. package/dist/lib/UiToastFn.js.map +1 -0
  77. package/dist/lib/UserData.d.ts +2 -0
  78. package/dist/lib/UserData.js +2 -0
  79. package/dist/lib/UserData.js.map +1 -0
  80. package/dist/lib/auth-client-factory.d.ts +43 -0
  81. package/dist/lib/auth-client-factory.js +98 -0
  82. package/dist/lib/auth-client-factory.js.map +1 -0
  83. package/dist/lib/get-app-environment-on-client-based-on-window-href.d.ts +3 -0
  84. package/dist/lib/get-app-environment-on-client-based-on-window-href.js +39 -0
  85. package/dist/lib/get-app-environment-on-client-based-on-window-href.js.map +1 -0
  86. package/dist/lib/get-app-environment-on-client.d.ts +2 -0
  87. package/dist/lib/get-app-environment-on-client.js +33 -0
  88. package/dist/lib/get-app-environment-on-client.js.map +1 -0
  89. package/dist/lib/getPkceAuthorizeUri.d.ts +9 -0
  90. package/dist/lib/getPkceAuthorizeUri.js +15 -0
  91. package/dist/lib/getPkceAuthorizeUri.js.map +1 -0
  92. package/dist/lib/getSuccessfulAuthenticationRedirectUri.d.ts +9 -0
  93. package/dist/lib/getSuccessfulAuthenticationRedirectUri.js +12 -0
  94. package/dist/lib/getSuccessfulAuthenticationRedirectUri.js.map +1 -0
  95. package/dist/lib/isClientRuntime.d.ts +1 -0
  96. package/dist/lib/isClientRuntime.js +13 -0
  97. package/dist/lib/isClientRuntime.js.map +1 -0
  98. package/dist/lib/react-auth-client-adapter.d.ts +40 -0
  99. package/dist/lib/react-auth-client-adapter.js +405 -0
  100. package/dist/lib/react-auth-client-adapter.js.map +1 -0
  101. package/dist/subproviders/app-environment-provider.d.ts +8 -0
  102. package/dist/subproviders/app-environment-provider.js +25 -0
  103. package/dist/subproviders/app-environment-provider.js.map +1 -0
  104. package/dist/subproviders/initialized-auth-client-provider.d.ts +6 -0
  105. package/dist/subproviders/initialized-auth-client-provider.js +12 -0
  106. package/dist/subproviders/initialized-auth-client-provider.js.map +1 -0
  107. package/dist/types/IReactAuthClientSdkAdapterInitOptions.d.ts +7 -0
  108. package/dist/types/IReactAuthClientSdkAdapterInitOptions.js +2 -0
  109. package/dist/types/IReactAuthClientSdkAdapterInitOptions.js.map +1 -0
  110. package/dist/types/UiToastFn.d.ts +8 -0
  111. package/dist/types/UiToastFn.js +2 -0
  112. package/dist/types/UiToastFn.js.map +1 -0
  113. package/dist/types/UserData.d.ts +2 -0
  114. package/dist/types/UserData.js +2 -0
  115. package/dist/types/UserData.js.map +1 -0
  116. package/dist/types/hook-status.d.ts +14 -0
  117. package/dist/types/hook-status.js +5 -0
  118. package/dist/types/hook-status.js.map +1 -0
  119. package/package.json +52 -0
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # @schemavaults/auth-react-provider
2
+
3
+ This package uses the upstream package [@schemavaults/auth-client-sdk](../auth-client-sdk/README.md)'s TypeScript client to handle authentication in Next.js/React.js applications
@@ -0,0 +1,4 @@
1
+ import type { ReactElement } from "react";
2
+ import type { SchemaVaultsAuthProviderProps } from "./auth-provider-props";
3
+ export declare function AuthMiddlewareManager(props: SchemaVaultsAuthProviderProps): ReactElement;
4
+ export default AuthMiddlewareManager;
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
3
+ import { useAuthClientMiddleware } from "../hooks/use-auth-client-middleware";
4
+ import { defaultAuthMiddlewareRules } from "@schemavaults/auth-common";
5
+ import { useRouter } from "next/navigation";
6
+ import { useAppEnvironment, } from "../hooks/use-app-environment";
7
+ import { useDebugWithSpecifiedBooleanOrLookupDefault } from "../hooks/use-debug";
8
+ export function AuthMiddlewareManager(props) {
9
+ const router = useRouter();
10
+ const {
11
+ // auth_server_uri,
12
+ // successful_authentication_redirect_uri,
13
+ successful_logout_redirect_uri, children,
14
+ // app_id,
15
+ path, authMiddlewareRules, authed_on_unauthed_redirect_uri, unauthed_on_authed_redirect_uri, } = props;
16
+ const environment = useAppEnvironment();
17
+ const debug = useDebugWithSpecifiedBooleanOrLookupDefault(environment, props.debug);
18
+ if (!authed_on_unauthed_redirect_uri) {
19
+ throw new Error("[SchemaVaultsAuthProvider] authed_on_unauthed_redirect_uri is required.");
20
+ }
21
+ else if (!unauthed_on_authed_redirect_uri) {
22
+ throw new Error("[SchemaVaultsAuthProvider] unauthed_on_authed_redirect_uri is required.");
23
+ }
24
+ const authorize_uri = props.authorize_uri ?? "/auth/authorize";
25
+ // Watch for changes in auth state via authClientRef, redirect if necessary
26
+ useAuthClientMiddleware({
27
+ authMiddlewareRules: authMiddlewareRules ?? defaultAuthMiddlewareRules,
28
+ path,
29
+ router,
30
+ unauthed_on_authed_redirect_uri,
31
+ authed_on_unauthed_redirect_uri,
32
+ authorize_uri,
33
+ successful_logout_redirect_uri,
34
+ debug,
35
+ });
36
+ return _jsx(_Fragment, { children: children });
37
+ }
38
+ export default AuthMiddlewareManager;
39
+ //# sourceMappingURL=auth-middleware-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-middleware-manager.js","sourceRoot":"","sources":["../../src/auth-provider/auth-middleware-manager.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,iBAAiB,GAElB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,2CAA2C,EAAE,MAAM,mBAAmB,CAAC;AAEhF,MAAM,UAAU,qBAAqB,CACnC,KAAoC;IAEpC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM;IACJ,mBAAmB;IACnB,0CAA0C;IAC1C,8BAA8B,EAC9B,QAAQ;IACR,UAAU;IACV,IAAI,EACJ,mBAAmB,EACnB,+BAA+B,EAC/B,+BAA+B,GAChC,GAAG,KAAK,CAAC;IAEV,MAAM,WAAW,GAA+B,iBAAiB,EAAE,CAAC;IAEpE,MAAM,KAAK,GAAY,2CAA2C,CAChE,WAAW,EACX,KAAK,CAAC,KAAK,CACZ,CAAC;IAEF,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;SAAM,IAAI,CAAC,+BAA+B,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAW,KAAK,CAAC,aAAa,IAAI,iBAAiB,CAAC;IAEvE,2EAA2E;IAC3E,uBAAuB,CAAC;QACtB,mBAAmB,EAAE,mBAAmB,IAAI,0BAA0B;QACtE,IAAI;QACJ,MAAM;QACN,+BAA+B;QAC/B,+BAA+B;QAC/B,aAAa;QACb,8BAA8B;QAC9B,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC;AAED,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { AppId, SchemaVaultsAppEnvironment } from "@schemavaults/app-definitions";
2
+ import type { AuthMiddlewareRules } from "@schemavaults/auth-common";
3
+ import type { InitializeAuthClientOptions } from "@schemavaults/auth-client-sdk";
4
+ import type { useRouter } from "next/navigation";
5
+ import type { PropsWithChildren } from "react";
6
+ export interface SchemaVaultsAuthProviderProps extends PropsWithChildren {
7
+ auth_server_uri?: string;
8
+ app_id: AppId;
9
+ router: ReturnType<typeof useRouter>;
10
+ path: string;
11
+ authMiddlewareRules?: AuthMiddlewareRules;
12
+ authed_on_unauthed_redirect_uri: string;
13
+ unauthed_on_authed_redirect_uri: string;
14
+ successful_authentication_redirect_uri?: string;
15
+ successful_logout_redirect_uri?: string;
16
+ authorize_uri?: string;
17
+ debug?: boolean;
18
+ default_audiences?: InitializeAuthClientOptions["default_audiences"];
19
+ environment: SchemaVaultsAppEnvironment;
20
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auth-provider-props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-provider-props.js","sourceRoot":"","sources":["../../src/auth-provider/auth-provider-props.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { type ReactElement, type ReactNode } from "react";
2
+ import type { SchemaVaultsAuthProviderProps } from "./auth-provider-props";
3
+ import { type AuthMiddlewareRules } from "@schemavaults/auth-common";
4
+ export type { AuthMiddlewareRules };
5
+ export interface AuthSideEffectsProps extends SchemaVaultsAuthProviderProps {
6
+ children: ReactNode;
7
+ ready: boolean;
8
+ debug: boolean;
9
+ }
10
+ /**
11
+ * @name SchemaVaultsAuthProvider
12
+ * @see AppEnvironmentAwareAuthProvider
13
+ * @returns App wrapped in AuthProvider
14
+ */
15
+ export declare function SchemaVaultsAuthProvider(props: SchemaVaultsAuthProviderProps): ReactElement;
16
+ export default SchemaVaultsAuthProvider;
@@ -0,0 +1,159 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useRef, useState, useMemo, } from "react";
4
+ import { SchemaVaultsAuthContext, } from "../contexts/auth-client-context";
5
+ import useAuthClientInitialization from "../hooks/use-auth-client-initialization";
6
+ import { AuthMiddlewareManager } from "./auth-middleware-manager";
7
+ import { getHardcodedClientWebAppDomain, SCHEMAVAULTS_AUTH_APP_DEFINITION, } from "@schemavaults/app-definitions";
8
+ import { SchemaVaultsAppEnvironmentContextProvider } from "../subproviders/app-environment-provider";
9
+ import { useDebugWithSpecifiedBooleanOrLookupDefault } from "../hooks/use-debug";
10
+ import DefaultSuccessfulAuthenticationRedirectPath from "../constants/DefaultSuccessfulAuthenticationRedirectPath";
11
+ import DefaultPkceAuthorizeRedirectPath from "../constants/DefaultPkceAuthorizeRedirectPath";
12
+ function AuthProviderSideEffects({ children, ready, ...props }) {
13
+ return ready ? (_jsx(AuthMiddlewareManager, { ...props, children: children })) : (children);
14
+ }
15
+ function assertHttpsInProduction(appEnvironment) {
16
+ if (appEnvironment === "production" || appEnvironment === "staging") {
17
+ if (typeof window !== "undefined" &&
18
+ window.location.protocol !== "https:") {
19
+ throw new Error(`Insecure context: HTTPS is required in production or staging environments.` +
20
+ ` Current environment: ${appEnvironment}`);
21
+ }
22
+ }
23
+ }
24
+ /**
25
+ * @name AppEnvironmentAwareAuthProvider
26
+ * @returns App wrapped in AuthProvider
27
+ */
28
+ function AppEnvironmentAwareAuthProvider(props) {
29
+ const appEnvironment = props.environment;
30
+ // throw if production/staging and not https
31
+ assertHttpsInProduction(appEnvironment);
32
+ const app_id = props.app_id;
33
+ const authServerUri = useMemo(() => {
34
+ if (typeof props.auth_server_uri === "string") {
35
+ return props.auth_server_uri;
36
+ }
37
+ const hardcoded = getHardcodedClientWebAppDomain(SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id, appEnvironment);
38
+ return hardcoded;
39
+ }, [props.auth_server_uri, appEnvironment]);
40
+ const debug = useDebugWithSpecifiedBooleanOrLookupDefault(appEnvironment, props.debug);
41
+ const successful_logout_redirect_uri = useMemo(() => {
42
+ if (typeof props.successful_logout_redirect_uri === "string")
43
+ return props.successful_logout_redirect_uri;
44
+ try {
45
+ const appDomain = getHardcodedClientWebAppDomain(app_id, appEnvironment);
46
+ return appDomain;
47
+ }
48
+ catch (e) {
49
+ console.error(e);
50
+ throw new Error("Failed to query domain for app!");
51
+ }
52
+ }, [props.successful_logout_redirect_uri, appEnvironment, app_id]);
53
+ const successful_authentication_redirect_uri = useMemo(() => {
54
+ if (typeof props.successful_authentication_redirect_uri === "string") {
55
+ if (debug) {
56
+ console.log(`[AppEnvironmentAwareAuthProvider] successful_authentication_redirect_uri="${props.successful_authentication_redirect_uri}" (source: props)`);
57
+ }
58
+ return props.successful_authentication_redirect_uri;
59
+ }
60
+ console.assert(typeof props.successful_authentication_redirect_uri === "undefined", "Expected props.successful_authentication_redirect_uri to be undefined if this point was reached!");
61
+ try {
62
+ const appDomain = getHardcodedClientWebAppDomain(app_id, appEnvironment);
63
+ const withSuccessfulAuthenticationRedirectPath = `${appDomain}${DefaultSuccessfulAuthenticationRedirectPath}`;
64
+ if (debug) {
65
+ console.log(`[AppEnvironmentAwareAuthProvider] successful_authentication_redirect_uri="${withSuccessfulAuthenticationRedirectPath}" (source: default for app)`);
66
+ }
67
+ return withSuccessfulAuthenticationRedirectPath;
68
+ }
69
+ catch (e) {
70
+ console.error("Failed to load default path for successful_authentication_redirect_uri: ", e);
71
+ throw new Error("Failed to load default path for successful_authentication_redirect_uri!");
72
+ }
73
+ }, [
74
+ app_id,
75
+ appEnvironment,
76
+ props.successful_authentication_redirect_uri,
77
+ debug,
78
+ ]);
79
+ const authorize_uri = useMemo(() => {
80
+ if (typeof props.authorize_uri === "string") {
81
+ if (debug) {
82
+ console.log(`[AppEnvironmentAwareAuthProvider] authorize_uri="${props.authorize_uri}" (source: props)`);
83
+ }
84
+ if (props.authorize_uri.startsWith("http://") ||
85
+ props.authorize_uri.startsWith("https://")) {
86
+ return props.authorize_uri;
87
+ }
88
+ else if (props.authorize_uri.startsWith("/")) {
89
+ let appDomain;
90
+ try {
91
+ appDomain = getHardcodedClientWebAppDomain(app_id, appEnvironment);
92
+ }
93
+ catch (e) {
94
+ console.error("Failed to load web app domain: ", e);
95
+ throw new Error("Failed to load web app domain in order to build full HTTP/HTTPS authorize redirect url from supplied relative path!");
96
+ }
97
+ return `${appDomain}${props.authorize_uri}`;
98
+ }
99
+ else {
100
+ throw new SyntaxError("Failed to parse the 'authorize_uri' passed to AuthProvider via props into a valid URL!");
101
+ }
102
+ }
103
+ console.assert(typeof props.authorize_uri === "undefined", "Expected props.authorize_uri to be undefined if this point was reached!");
104
+ if (app_id === SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id) {
105
+ if (debug) {
106
+ console.log("[AppEnvironmentAwareAuthProvider] authorize_uri=undefined (PKCE flow not used for auth app!)");
107
+ }
108
+ return undefined;
109
+ }
110
+ try {
111
+ const appDomain = getHardcodedClientWebAppDomain(app_id, appEnvironment);
112
+ const withAuthorizePath = `${appDomain}${DefaultPkceAuthorizeRedirectPath}`;
113
+ if (debug) {
114
+ console.log(`[AppEnvironmentAwareAuthProvider] authorize_uri="${props.authorize_uri}" (source: default for app)`);
115
+ }
116
+ return withAuthorizePath;
117
+ }
118
+ catch (e) {
119
+ console.error("Failed to load default path for authorize_uri: ", e);
120
+ throw new Error("Failed to load default path for authorize_uri!");
121
+ }
122
+ }, [app_id, appEnvironment, props.authorize_uri, debug]);
123
+ const authClientRef = useRef(null);
124
+ const [ready, setReady] = useState(false);
125
+ const useAuthClientInitializationOptions = {
126
+ auth_server_uri: authServerUri,
127
+ authClientRef,
128
+ ready,
129
+ setReady,
130
+ successful_authentication_redirect_uri,
131
+ successful_logout_redirect_uri,
132
+ app_id,
133
+ default_audiences: props.default_audiences,
134
+ debug,
135
+ authorize_uri,
136
+ environment: appEnvironment,
137
+ };
138
+ // Initialize auth client, store in the authClientRef
139
+ useAuthClientInitialization(useAuthClientInitializationOptions);
140
+ return (_jsx(SchemaVaultsAuthContext.Provider, { value: ready
141
+ ? {
142
+ ready,
143
+ client: authClientRef,
144
+ }
145
+ : {
146
+ ready,
147
+ message: "Auth client not ready.",
148
+ }, children: _jsx(AuthProviderSideEffects, { ...props, ready: ready, debug: debug, children: props.children }) }));
149
+ }
150
+ /**
151
+ * @name SchemaVaultsAuthProvider
152
+ * @see AppEnvironmentAwareAuthProvider
153
+ * @returns App wrapped in AuthProvider
154
+ */
155
+ export function SchemaVaultsAuthProvider(props) {
156
+ return (_jsx(SchemaVaultsAppEnvironmentContextProvider, { environment: props.environment, children: _jsx(AppEnvironmentAwareAuthProvider, { ...props }) }));
157
+ }
158
+ export default SchemaVaultsAuthProvider;
159
+ //# sourceMappingURL=auth-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../src/auth-provider/auth-provider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './auth-provider';
2
+ export type * from './auth-provider';
3
+ export { default as default } from './auth-provider';
@@ -0,0 +1,3 @@
1
+ export * from './auth-provider';
2
+ export { default as default } from './auth-provider';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth-provider/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const DefaultPkceAuthorizeRedirectPath: "/auth/authorize";
2
+ export default DefaultPkceAuthorizeRedirectPath;
@@ -0,0 +1,3 @@
1
+ export const DefaultPkceAuthorizeRedirectPath = "/auth/authorize";
2
+ export default DefaultPkceAuthorizeRedirectPath;
3
+ //# sourceMappingURL=DefaultPkceAuthorizeRedirectPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultPkceAuthorizeRedirectPath.js","sourceRoot":"","sources":["../../src/constants/DefaultPkceAuthorizeRedirectPath.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gCAAgC,GAC3C,iBAA2C,CAAC;AAE9C,eAAe,gCAAgC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const DefaultSuccessfulAuthenticationRedirectPath: "/account";
2
+ export default DefaultSuccessfulAuthenticationRedirectPath;
@@ -0,0 +1,3 @@
1
+ export const DefaultSuccessfulAuthenticationRedirectPath = "/account";
2
+ export default DefaultSuccessfulAuthenticationRedirectPath;
3
+ //# sourceMappingURL=DefaultSuccessfulAuthenticationRedirectPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultSuccessfulAuthenticationRedirectPath.js","sourceRoot":"","sources":["../../src/constants/DefaultSuccessfulAuthenticationRedirectPath.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2CAA2C,GACtD,UAAoC,CAAC;AAEvC,eAAe,2CAA2C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const SchemaVaultsAppEnvironmentContext: import("react").Context<"development" | "staging" | "test" | "production" | null>;
2
+ export default SchemaVaultsAppEnvironmentContext;
@@ -0,0 +1,4 @@
1
+ import { createContext } from "react";
2
+ export const SchemaVaultsAppEnvironmentContext = createContext(null);
3
+ export default SchemaVaultsAppEnvironmentContext;
4
+ //# sourceMappingURL=app-environment-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-environment-context.js","sourceRoot":"","sources":["../../src/contexts/app-environment-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,MAAM,CAAC,MAAM,iCAAiC,GAC5C,aAAa,CAAoC,IAAI,CAAC,CAAC;AAEzD,eAAe,iCAAiC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ISchemaVaultsAuthClient } from "@schemavaults/auth-client-sdk";
2
+ import { type RefObject } from "react";
3
+ export type SchemaVaultsAuthContextType = {
4
+ ready: true;
5
+ client: RefObject<ISchemaVaultsAuthClient | null>;
6
+ } | {
7
+ ready: false;
8
+ message: string;
9
+ };
10
+ /**
11
+ *
12
+ * @name SchemaVaultsAuthContext
13
+ * @see use-auth.ts useAuth
14
+ * */
15
+ export declare const SchemaVaultsAuthContext: import("react").Context<SchemaVaultsAuthContextType>;
@@ -0,0 +1,11 @@
1
+ import { createContext } from "react";
2
+ /**
3
+ *
4
+ * @name SchemaVaultsAuthContext
5
+ * @see use-auth.ts useAuth
6
+ * */
7
+ export const SchemaVaultsAuthContext = createContext({
8
+ ready: false,
9
+ message: "Ensure useAuth() is only called within a <SchemaVaultsAuthProvider> context."
10
+ });
11
+ //# sourceMappingURL=auth-client-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-client-context.js","sourceRoot":"","sources":["../../src/contexts/auth-client-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAkB,MAAM,OAAO,CAAC;AAUtD;;;;KAIK;AACL,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAA8B;IAChF,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,8EAA8E;CACxF,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export { useAuth } from "./use-auth";
2
+ export type * from "./use-auth";
3
+ export { useCurrentUser } from "./use-current-user";
4
+ export type * from "./use-current-user";
5
+ export { useAdmin } from "./use-admin";
6
+ export type * from "./use-admin";
7
+ export { useAppEnvironment } from "./use-app-environment";
8
+ export type * from "./use-app-environment";
9
+ export { useTradeAuthorizationCodeForTokensEffect } from "./use-trade-authorization-code-for-tokens";
10
+ export type * from "./use-trade-authorization-code-for-tokens";
11
+ export { useLogoutEffect } from "./use-logout-effect";
12
+ export type * from "./use-logout-effect";
13
+ export { useAuthClientStateWatcher } from "./use-auth-client-state-watcher";
14
+ export type * from "./use-auth-client-state-watcher";
15
+ export { useEffectIfAuthenticated } from "./use-effect-if-authenticated";
16
+ export type * from "./use-effect-if-authenticated";
17
+ export { useStartLoginOauthPKCEFlow } from "./use-start-login-oauth-pkce-flow";
18
+ export type * from "./use-start-login-oauth-pkce-flow";
19
+ export { useStartRegisterOauthPKCEFlow } from "./use-start-register-oauth-pkce-flow";
20
+ export type * from "./use-start-register-oauth-pkce-flow";
@@ -0,0 +1,11 @@
1
+ export { useAuth } from "./use-auth";
2
+ export { useCurrentUser } from "./use-current-user";
3
+ export { useAdmin } from "./use-admin";
4
+ export { useAppEnvironment } from "./use-app-environment";
5
+ export { useTradeAuthorizationCodeForTokensEffect } from "./use-trade-authorization-code-for-tokens";
6
+ export { useLogoutEffect } from "./use-logout-effect";
7
+ export { useAuthClientStateWatcher } from "./use-auth-client-state-watcher";
8
+ export { useEffectIfAuthenticated } from "./use-effect-if-authenticated";
9
+ export { useStartLoginOauthPKCEFlow } from "./use-start-login-oauth-pkce-flow";
10
+ export { useStartRegisterOauthPKCEFlow } from "./use-start-register-oauth-pkce-flow";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,wCAAwC,EAAE,MAAM,2CAA2C,CAAC;AAGrG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAG5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function useAdmin(): boolean;
2
+ export default useAdmin;
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import useCurrentUser from "./use-current-user";
3
+ export function useAdmin() {
4
+ const currentUser = useCurrentUser();
5
+ return currentUser?.admin ?? false;
6
+ }
7
+ export default useAdmin;
8
+ //# sourceMappingURL=use-admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-admin.js","sourceRoot":"","sources":["../../src/hooks/use-admin.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAEhD,MAAM,UAAU,QAAQ;IACtB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,WAAW,EAAE,KAAK,IAAI,KAAK,CAAC;AACrC,CAAC;AAED,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type SchemaVaultsAppEnvironment } from "@schemavaults/app-definitions";
2
+ export declare function useAppEnvironment(): SchemaVaultsAppEnvironment;
3
+ export default useAppEnvironment;
4
+ export type { SchemaVaultsAppEnvironment };
@@ -0,0 +1,73 @@
1
+ "use client";
2
+ import { schemaVaultsAppEnvironmentSchema, } from "@schemavaults/app-definitions";
3
+ import { useContext } from "react";
4
+ import SchemaVaultsAppEnvironmentContext from "../contexts/app-environment-context";
5
+ import isClientRuntime from "../lib/isClientRuntime";
6
+ import getAppEnvironment from "@schemavaults/app-definitions/get-app-environment";
7
+ const DEBUG = false;
8
+ function resolveAppEnvironmentOnServer() {
9
+ if (!process) {
10
+ throw new Error("Failed to resolve 'process' to access environment variables from!");
11
+ }
12
+ try {
13
+ const parsed = schemaVaultsAppEnvironmentSchema.safeParse(getAppEnvironment());
14
+ if (!parsed.success) {
15
+ console.error("Loaded invalid app environment from 'getAppEnvironment' on server-side: ", parsed.error);
16
+ throw new TypeError("Received invalid app environment from 'getAppEnvironment' on server-side!");
17
+ }
18
+ return parsed.data;
19
+ }
20
+ catch (e) {
21
+ if (e instanceof TypeError) {
22
+ throw e;
23
+ }
24
+ console.error("Failed to resolve app environment from environment variables on server-side: ", e);
25
+ throw new Error("Failed to resolve app environment from environment variables!");
26
+ }
27
+ }
28
+ export function useAppEnvironment() {
29
+ const contextValue = useContext(SchemaVaultsAppEnvironmentContext);
30
+ const runtime = isClientRuntime() ? "client" : "server";
31
+ if (!runtime) {
32
+ throw new Error("Failed to determine if this runtime environment is 'client' or 'server'!");
33
+ }
34
+ // Attempt to resolve app environment from env. vars. on server-side
35
+ if (runtime === "server") {
36
+ class WindowVarExistsOnServerRuntimeError extends Error {
37
+ }
38
+ try {
39
+ if (window)
40
+ throw new WindowVarExistsOnServerRuntimeError("Server-side code running on the client!");
41
+ }
42
+ catch (e) {
43
+ if (e instanceof WindowVarExistsOnServerRuntimeError) {
44
+ throw e;
45
+ }
46
+ }
47
+ return resolveAppEnvironmentOnServer();
48
+ }
49
+ // On the client, we should have access to the app environment context
50
+ else if (runtime === "client") {
51
+ if (!window) {
52
+ throw new Error("Client-side code running on the server!");
53
+ }
54
+ return (function resolveAndParseAppEnvironmentContextOnReactClient() {
55
+ if (!contextValue || typeof contextValue !== "string") {
56
+ throw new Error("useAppEnvironment must be used within a SchemaVaultsAppEnvironmentContextProvider!");
57
+ }
58
+ const parsed = schemaVaultsAppEnvironmentSchema.safeParse(contextValue);
59
+ if (!parsed.success) {
60
+ throw new TypeError("Received invalid app environment from SchemaVaultsAppEnvironmentContext!");
61
+ }
62
+ if (DEBUG) {
63
+ console.log(`[useAppEnvironment] Loaded app environment context: "${parsed.data}"`);
64
+ }
65
+ return parsed.data;
66
+ })();
67
+ }
68
+ else {
69
+ throw new TypeError("Invalid value for variable 'runtime'. Failed to determine if this is client or server?");
70
+ }
71
+ }
72
+ export default useAppEnvironment;
73
+ //# sourceMappingURL=use-app-environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-app-environment.js","sourceRoot":"","sources":["../../src/hooks/use-app-environment.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type ISchemaVaultsAuthClient, type InitializeAuthClientOptions } from "@schemavaults/auth-client-sdk";
2
+ import { type RefObject } from "react";
3
+ import type { SchemaVaultsAppEnvironment } from "@schemavaults/app-definitions";
4
+ export interface UseAuthClientInitializationOptions {
5
+ ready: boolean;
6
+ setReady: (ready: boolean) => void;
7
+ authClientRef: RefObject<ISchemaVaultsAuthClient | null>;
8
+ successful_authentication_redirect_uri: string;
9
+ successful_logout_redirect_uri: string;
10
+ authorize_uri?: string | undefined;
11
+ auth_server_uri: string;
12
+ app_id: string;
13
+ debug?: boolean;
14
+ default_audiences?: InitializeAuthClientOptions["default_audiences"];
15
+ environment: SchemaVaultsAppEnvironment;
16
+ }
17
+ export declare function useAuthClientInitialization(opts: UseAuthClientInitializationOptions): void;
18
+ export default useAuthClientInitialization;
@@ -0,0 +1,72 @@
1
+ "use client";
2
+ import { useEffect } from "react";
3
+ import AuthClientFactory from "../lib/auth-client-factory";
4
+ import { useDebugWithSpecifiedBooleanOrLookupDefault } from "./use-debug";
5
+ export function useAuthClientInitialization(opts) {
6
+ const { ready, setReady } = opts;
7
+ const { successful_authentication_redirect_uri, successful_logout_redirect_uri, authorize_uri, } = opts;
8
+ const { authClientRef, auth_server_uri, app_id, default_audiences, environment, } = opts;
9
+ const debug = useDebugWithSpecifiedBooleanOrLookupDefault(environment, opts.debug);
10
+ // Auth client initialization side-effect
11
+ useEffect(function initializeAuthClientEffect() {
12
+ if (debug) {
13
+ console.log("[useAuthClientInitialization] Running [useEffect->initializeAuthClientEffect] at URL: ", window.location.href);
14
+ }
15
+ if (!ready) {
16
+ if (debug) {
17
+ console.log("[useAuthClientInitialization] Auth client is not initialized, attempting to initialize at URL: ", window.location.href);
18
+ }
19
+ try {
20
+ const factory = new AuthClientFactory({
21
+ debug,
22
+ default_audiences,
23
+ auth_server_uri,
24
+ successful_authentication_redirect_uri,
25
+ successful_logout_redirect_uri,
26
+ authorize_uri,
27
+ environment,
28
+ app_id,
29
+ });
30
+ factory
31
+ .createAuthClientInstance()
32
+ .then((authClient) => {
33
+ if (!authClientRef.current) {
34
+ authClientRef.current = authClient;
35
+ }
36
+ setReady(true);
37
+ })
38
+ .catch((e) => {
39
+ console.error("[useAuthClientInitialization] Failed to init auth client: ", e);
40
+ throw new Error("Failed to initialize SchemaVaults auth client!");
41
+ });
42
+ return;
43
+ }
44
+ catch (e) {
45
+ if (debug) {
46
+ console.error("[useAuthClientInitialization] Failed to initialize auth client: ", e);
47
+ }
48
+ throw new Error("Failed to initialize auth client.");
49
+ }
50
+ }
51
+ else {
52
+ if (debug) {
53
+ console.log("[useAuthClientInitialization] Auth client already initialized.", ready);
54
+ }
55
+ return;
56
+ }
57
+ }, [
58
+ ready,
59
+ setReady,
60
+ debug,
61
+ app_id,
62
+ auth_server_uri,
63
+ authorize_uri,
64
+ successful_authentication_redirect_uri,
65
+ successful_logout_redirect_uri,
66
+ environment,
67
+ authClientRef,
68
+ default_audiences,
69
+ ]); // end of auth client initialization side-effect
70
+ }
71
+ export default useAuthClientInitialization;
72
+ //# sourceMappingURL=use-auth-client-initialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-auth-client-initialization.js","sourceRoot":"","sources":["../../src/hooks/use-auth-client-initialization.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAMb,OAAO,EAAkB,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,iBAAiB,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,2CAA2C,EAAE,MAAM,aAAa,CAAC;AAgB1E,MAAM,UAAU,2BAA2B,CACzC,IAAwC;IAExC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACjC,MAAM,EACJ,sCAAsC,EACtC,8BAA8B,EAC9B,aAAa,GACd,GAAG,IAAI,CAAC;IACT,MAAM,EACJ,aAAa,EACb,eAAe,EACf,MAAM,EACN,iBAAiB,EACjB,WAAW,GACZ,GAAG,IAAI,CAAC;IAET,MAAM,KAAK,GAAY,2CAA2C,CAChE,WAAW,EACX,IAAI,CAAC,KAAK,CACX,CAAC;IAEF,yCAAyC;IACzC,SAAS,CACP,SAAS,0BAA0B;QACjC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CACT,wFAAwF,EACxF,MAAM,CAAC,QAAQ,CAAC,IAAI,CACrB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CACT,iGAAiG,EACjG,MAAM,CAAC,QAAQ,CAAC,IAAI,CACrB,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC;oBACpC,KAAK;oBACL,iBAAiB;oBACjB,eAAe;oBACf,sCAAsC;oBACtC,8BAA8B;oBAC9B,aAAa;oBACb,WAAW;oBACX,MAAM;iBACP,CAAC,CAAC;gBAEH,OAAO;qBACJ,wBAAwB,EAAE;qBAC1B,IAAI,CAAC,CAAC,UAAU,EAAQ,EAAE;oBACzB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;wBAC3B,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC;oBACrC,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjB,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,CAAC,EAAQ,EAAE;oBACjB,OAAO,CAAC,KAAK,CACX,4DAA4D,EAC5D,CAAC,CACF,CAAC;oBACF,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBACpE,CAAC,CAAC,CAAC;gBACL,OAAO;YACT,CAAC;YAAC,OAAO,CAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,KAAK,CACX,kEAAkE,EAClE,CAAC,CACF,CAAC;gBACJ,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CACT,gEAAgE,EAChE,KAAK,CACN,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;IACH,CAAC,EACD;QACE,KAAK;QACL,QAAQ;QACR,KAAK;QACL,MAAM;QACN,eAAe;QACf,aAAa;QACb,sCAAsC;QACtC,8BAA8B;QAC9B,WAAW;QACX,aAAa;QACb,iBAAiB;KAClB,CACF,CAAC,CAAC,gDAAgD;AACrD,CAAC;AAED,eAAe,2BAA2B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type AuthMiddlewareRules } from "@schemavaults/auth-common";
2
+ import type { useRouter } from "next/navigation";
3
+ export type UseAuthClientMiddlewareOptions = {
4
+ router: ReturnType<typeof useRouter>;
5
+ authMiddlewareRules: AuthMiddlewareRules;
6
+ path: string;
7
+ authed_on_unauthed_redirect_uri: string;
8
+ unauthed_on_authed_redirect_uri: string;
9
+ authorize_uri: string;
10
+ successful_logout_redirect_uri?: string;
11
+ debug?: boolean;
12
+ };
13
+ export declare function useAuthClientMiddleware(opts: UseAuthClientMiddlewareOptions): void;