hazo_auth 6.0.0 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +233 -8
- package/SETUP_CHECKLIST.md +240 -0
- package/cli-src/cli/validate.ts +4 -0
- package/cli-src/lib/auth/nextauth_config.ts +101 -1
- package/cli-src/lib/cookies_config.server.ts +1 -0
- package/cli-src/lib/email_verification_config.server.ts +0 -34
- package/cli-src/lib/forgot_password_config.server.ts +0 -34
- package/cli-src/lib/login_config.server.ts +14 -31
- package/cli-src/lib/my_settings_config.server.ts +0 -3
- package/cli-src/lib/oauth_config.server.ts +58 -0
- package/cli-src/lib/otp_config.server.ts +91 -0
- package/cli-src/lib/register_config.server.ts +11 -31
- package/cli-src/lib/reset_password_config.server.ts +0 -31
- package/cli-src/lib/services/email_service.ts +3 -1
- package/cli-src/lib/services/email_template_manifest.ts +17 -0
- package/cli-src/lib/services/email_templates/otp_signin_code.html +13 -0
- package/cli-src/lib/services/email_templates/otp_signin_code.txt +5 -0
- package/cli-src/lib/services/index.ts +8 -2
- package/cli-src/lib/services/oauth_service.ts +197 -0
- package/cli-src/lib/services/otp_service.ts +295 -0
- package/cli-src/lib/services/session_token_service.ts +4 -1
- package/config/hazo_auth_config.example.ini +76 -41
- package/dist/cli/validate.d.ts.map +1 -1
- package/dist/cli/validate.js +4 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -0
- package/dist/components/layouts/create_firm/index.d.ts +4 -8
- package/dist/components/layouts/create_firm/index.d.ts.map +1 -1
- package/dist/components/layouts/create_firm/index.js +3 -3
- package/dist/components/layouts/email_verification/index.d.ts +4 -5
- package/dist/components/layouts/email_verification/index.d.ts.map +1 -1
- package/dist/components/layouts/email_verification/index.js +4 -4
- package/dist/components/layouts/forgot_password/index.d.ts +4 -5
- package/dist/components/layouts/forgot_password/index.d.ts.map +1 -1
- package/dist/components/layouts/forgot_password/index.js +2 -2
- package/dist/components/layouts/login/index.d.ts +19 -9
- package/dist/components/layouts/login/index.d.ts.map +1 -1
- package/dist/components/layouts/login/index.js +12 -6
- package/dist/components/layouts/otp/index.d.ts +17 -0
- package/dist/components/layouts/otp/index.d.ts.map +1 -0
- package/dist/components/layouts/otp/index.js +16 -0
- package/dist/components/layouts/register/index.d.ts +11 -7
- package/dist/components/layouts/register/index.d.ts.map +1 -1
- package/dist/components/layouts/register/index.js +8 -4
- package/dist/components/layouts/reset_password/index.d.ts +4 -5
- package/dist/components/layouts/reset_password/index.d.ts.map +1 -1
- package/dist/components/layouts/reset_password/index.js +5 -5
- package/dist/components/layouts/shared/components/already_logged_in_guard.d.ts +3 -5
- package/dist/components/layouts/shared/components/already_logged_in_guard.d.ts.map +1 -1
- package/dist/components/layouts/shared/components/already_logged_in_guard.js +2 -2
- package/dist/components/layouts/shared/components/facebook_sign_in_button.d.ts +25 -0
- package/dist/components/layouts/shared/components/facebook_sign_in_button.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/facebook_sign_in_button.js +49 -0
- package/dist/components/layouts/shared/components/sidebar_layout_wrapper.d.ts.map +1 -1
- package/dist/components/layouts/shared/components/sidebar_layout_wrapper.js +8 -3
- package/dist/components/layouts/shared/components/two_column_auth_layout.d.ts +3 -6
- package/dist/components/layouts/shared/components/two_column_auth_layout.d.ts.map +1 -1
- package/dist/components/layouts/shared/components/two_column_auth_layout.js +8 -5
- package/dist/components/otp/OTPRequestForm.d.ts +11 -0
- package/dist/components/otp/OTPRequestForm.d.ts.map +1 -0
- package/dist/components/otp/OTPRequestForm.js +42 -0
- package/dist/components/otp/OTPVerifyForm.d.ts +16 -0
- package/dist/components/otp/OTPVerifyForm.d.ts.map +1 -0
- package/dist/components/otp/OTPVerifyForm.js +75 -0
- package/dist/components/otp/index.d.ts +5 -0
- package/dist/components/otp/index.d.ts.map +1 -0
- package/dist/components/otp/index.js +2 -0
- package/dist/components/ui/input-otp.d.ts +35 -0
- package/dist/components/ui/input-otp.d.ts.map +1 -0
- package/dist/components/ui/input-otp.js +44 -0
- package/dist/consent/consent_state.d.ts +18 -0
- package/dist/consent/consent_state.d.ts.map +1 -0
- package/dist/consent/consent_state.js +29 -0
- package/dist/consent/cookie_consent_banner.d.ts +11 -0
- package/dist/consent/cookie_consent_banner.d.ts.map +1 -0
- package/dist/consent/cookie_consent_banner.js +40 -0
- package/dist/consent/gtm_mapping.d.ts +13 -0
- package/dist/consent/gtm_mapping.d.ts.map +1 -0
- package/dist/consent/gtm_mapping.js +30 -0
- package/dist/consent/index.d.ts +7 -0
- package/dist/consent/index.d.ts.map +1 -0
- package/dist/consent/index.js +7 -0
- package/dist/consent/manage_modal.d.ts +2 -0
- package/dist/consent/manage_modal.d.ts.map +1 -0
- package/dist/consent/manage_modal.js +33 -0
- package/dist/consent/read_consent.d.ts +15 -0
- package/dist/consent/read_consent.d.ts.map +1 -0
- package/dist/consent/read_consent.js +23 -0
- package/dist/consent/use_consent.d.ts +7 -0
- package/dist/consent/use_consent.d.ts.map +1 -0
- package/dist/consent/use_consent.js +55 -0
- package/dist/lib/auth/nextauth_config.d.ts +10 -0
- package/dist/lib/auth/nextauth_config.d.ts.map +1 -1
- package/dist/lib/auth/nextauth_config.js +80 -2
- package/dist/lib/cookies_config.server.d.ts +1 -0
- package/dist/lib/cookies_config.server.d.ts.map +1 -1
- package/dist/lib/cookies_config.server.js +1 -0
- package/dist/lib/email_verification_config.server.d.ts +0 -3
- package/dist/lib/email_verification_config.server.d.ts.map +1 -1
- package/dist/lib/email_verification_config.server.js +0 -15
- package/dist/lib/forgot_password_config.server.d.ts +0 -3
- package/dist/lib/forgot_password_config.server.d.ts.map +1 -1
- package/dist/lib/forgot_password_config.server.js +0 -15
- package/dist/lib/login_config.server.d.ts +6 -3
- package/dist/lib/login_config.server.d.ts.map +1 -1
- package/dist/lib/login_config.server.js +7 -13
- package/dist/lib/my_settings_config.server.d.ts +0 -1
- package/dist/lib/my_settings_config.server.d.ts.map +1 -1
- package/dist/lib/my_settings_config.server.js +0 -2
- package/dist/lib/oauth_config.server.d.ts +17 -0
- package/dist/lib/oauth_config.server.d.ts.map +1 -1
- package/dist/lib/oauth_config.server.js +25 -0
- package/dist/lib/otp_config.server.d.ts +49 -0
- package/dist/lib/otp_config.server.d.ts.map +1 -0
- package/dist/lib/otp_config.server.js +48 -0
- package/dist/lib/register_config.server.d.ts +2 -3
- package/dist/lib/register_config.server.d.ts.map +1 -1
- package/dist/lib/register_config.server.js +4 -13
- package/dist/lib/reset_password_config.server.d.ts +0 -3
- package/dist/lib/reset_password_config.server.d.ts.map +1 -1
- package/dist/lib/reset_password_config.server.js +0 -13
- package/dist/lib/services/email_service.d.ts +1 -1
- package/dist/lib/services/email_service.d.ts.map +1 -1
- package/dist/lib/services/email_service.js +2 -0
- package/dist/lib/services/email_template_manifest.d.ts.map +1 -1
- package/dist/lib/services/email_template_manifest.js +17 -0
- package/dist/lib/services/email_templates/otp_signin_code.html +13 -0
- package/dist/lib/services/email_templates/otp_signin_code.txt +5 -0
- package/dist/lib/services/index.d.ts +2 -0
- package/dist/lib/services/index.d.ts.map +1 -1
- package/dist/lib/services/index.js +1 -0
- package/dist/lib/services/oauth_service.d.ts +24 -0
- package/dist/lib/services/oauth_service.d.ts.map +1 -1
- package/dist/lib/services/oauth_service.js +155 -0
- package/dist/lib/services/otp_service.d.ts +46 -0
- package/dist/lib/services/otp_service.d.ts.map +1 -0
- package/dist/lib/services/otp_service.js +238 -0
- package/dist/lib/services/session_token_service.d.ts +3 -1
- package/dist/lib/services/session_token_service.d.ts.map +1 -1
- package/dist/lib/services/session_token_service.js +4 -2
- package/dist/page_components/create_firm.d.ts +13 -1
- package/dist/page_components/create_firm.d.ts.map +1 -1
- package/dist/page_components/create_firm.js +10 -6
- package/dist/page_components/forgot_password.d.ts +1 -4
- package/dist/page_components/forgot_password.d.ts.map +1 -1
- package/dist/page_components/forgot_password.js +2 -6
- package/dist/page_components/login.d.ts +1 -4
- package/dist/page_components/login.d.ts.map +1 -1
- package/dist/page_components/login.js +2 -6
- package/dist/page_components/otp.d.ts +4 -0
- package/dist/page_components/otp.d.ts.map +1 -0
- package/dist/page_components/otp.js +5 -0
- package/dist/page_components/register.d.ts +1 -4
- package/dist/page_components/register.d.ts.map +1 -1
- package/dist/page_components/register.js +2 -6
- package/dist/page_components/reset_password.d.ts +1 -4
- package/dist/page_components/reset_password.d.ts.map +1 -1
- package/dist/page_components/reset_password.js +2 -6
- package/dist/page_components/verify_email.d.ts +1 -4
- package/dist/page_components/verify_email.d.ts.map +1 -1
- package/dist/page_components/verify_email.js +2 -6
- package/dist/server/routes/index.d.ts +3 -0
- package/dist/server/routes/index.d.ts.map +1 -1
- package/dist/server/routes/index.js +4 -0
- package/dist/server/routes/me.d.ts.map +1 -1
- package/dist/server/routes/me.js +43 -1
- package/dist/server/routes/oauth_facebook_callback.d.ts +8 -0
- package/dist/server/routes/oauth_facebook_callback.d.ts.map +1 -0
- package/dist/server/routes/oauth_facebook_callback.js +157 -0
- package/dist/server/routes/oauth_google_callback.js +1 -1
- package/dist/server/routes/otp/request.d.ts +3 -0
- package/dist/server/routes/otp/request.d.ts.map +1 -0
- package/dist/server/routes/otp/request.js +33 -0
- package/dist/server/routes/otp/verify.d.ts +3 -0
- package/dist/server/routes/otp/verify.d.ts.map +1 -0
- package/dist/server/routes/otp/verify.js +58 -0
- package/dist/server-lib.d.ts +3 -0
- package/dist/server-lib.d.ts.map +1 -1
- package/dist/server-lib.js +2 -0
- package/dist/server_pages/forgot_password.d.ts +13 -17
- package/dist/server_pages/forgot_password.d.ts.map +1 -1
- package/dist/server_pages/forgot_password.js +12 -8
- package/dist/server_pages/forgot_password_client_wrapper.d.ts +7 -6
- package/dist/server_pages/forgot_password_client_wrapper.d.ts.map +1 -1
- package/dist/server_pages/forgot_password_client_wrapper.js +2 -2
- package/dist/server_pages/login.d.ts +22 -21
- package/dist/server_pages/login.d.ts.map +1 -1
- package/dist/server_pages/login.js +15 -19
- package/dist/server_pages/login_client_wrapper.d.ts +10 -6
- package/dist/server_pages/login_client_wrapper.d.ts.map +1 -1
- package/dist/server_pages/login_client_wrapper.js +2 -2
- package/dist/server_pages/my_settings.d.ts +2 -0
- package/dist/server_pages/my_settings.d.ts.map +1 -1
- package/dist/server_pages/my_settings.js +8 -2
- package/dist/server_pages/otp.d.ts +56 -0
- package/dist/server_pages/otp.d.ts.map +1 -0
- package/dist/server_pages/otp.js +45 -0
- package/dist/server_pages/register.d.ts +19 -16
- package/dist/server_pages/register.d.ts.map +1 -1
- package/dist/server_pages/register.js +15 -12
- package/dist/server_pages/register_client_wrapper.d.ts +10 -6
- package/dist/server_pages/register_client_wrapper.d.ts.map +1 -1
- package/dist/server_pages/register_client_wrapper.js +2 -2
- package/dist/server_pages/reset_password.d.ts +11 -16
- package/dist/server_pages/reset_password.d.ts.map +1 -1
- package/dist/server_pages/reset_password.js +11 -9
- package/dist/server_pages/reset_password_client_wrapper.d.ts +7 -6
- package/dist/server_pages/reset_password_client_wrapper.d.ts.map +1 -1
- package/dist/server_pages/reset_password_client_wrapper.js +2 -2
- package/dist/server_pages/verify_email.d.ts +11 -17
- package/dist/server_pages/verify_email.d.ts.map +1 -1
- package/dist/server_pages/verify_email.js +11 -8
- package/dist/server_pages/verify_email_client_wrapper.d.ts +7 -6
- package/dist/server_pages/verify_email_client_wrapper.d.ts.map +1 -1
- package/dist/server_pages/verify_email_client_wrapper.js +2 -2
- package/dist/strings/default_strings.d.ts +47 -0
- package/dist/strings/default_strings.d.ts.map +1 -0
- package/dist/strings/default_strings.js +18 -0
- package/dist/strings/index.d.ts +4 -0
- package/dist/strings/index.d.ts.map +1 -0
- package/dist/strings/index.js +3 -0
- package/dist/strings/strings_context.d.ts +12 -0
- package/dist/strings/strings_context.d.ts.map +1 -0
- package/dist/strings/strings_context.js +23 -0
- package/dist/strings/strings_provider.d.ts +26 -0
- package/dist/strings/strings_provider.d.ts.map +1 -0
- package/dist/strings/strings_provider.js +45 -0
- package/dist/theme/create_theme.d.ts +7 -0
- package/dist/theme/create_theme.d.ts.map +1 -0
- package/dist/theme/create_theme.js +97 -0
- package/dist/theme/hex_to_hsl.d.ts +16 -0
- package/dist/theme/hex_to_hsl.d.ts.map +1 -0
- package/dist/theme/hex_to_hsl.js +110 -0
- package/dist/theme/index.d.ts +4 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +3 -0
- package/dist/theme/luminance.d.ts +11 -0
- package/dist/theme/luminance.d.ts.map +1 -0
- package/dist/theme/luminance.js +45 -0
- package/dist/theme/theme_provider.d.ts +14 -0
- package/dist/theme/theme_provider.d.ts.map +1 -0
- package/dist/theme/theme_provider.js +23 -0
- package/dist/theme/theme_types.d.ts +36 -0
- package/dist/theme/theme_types.d.ts.map +1 -0
- package/dist/theme/theme_types.js +1 -0
- package/dist/themes/index.d.ts +3 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +2 -0
- package/dist/themes/preset_indigo_sunset.d.ts +3 -0
- package/dist/themes/preset_indigo_sunset.d.ts.map +1 -0
- package/dist/themes/preset_indigo_sunset.js +20 -0
- package/dist/themes/preset_neutral.d.ts +3 -0
- package/dist/themes/preset_neutral.d.ts.map +1 -0
- package/dist/themes/preset_neutral.js +14 -0
- package/package.json +36 -2
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
import "server-only";
|
|
2
|
-
import type
|
|
2
|
+
import type React from "react";
|
|
3
3
|
export type RegisterPageProps = {
|
|
4
|
-
/**
|
|
5
|
-
* Optional image source for the visual panel
|
|
6
|
-
* Defaults from hazo_auth_config.ini or package default image
|
|
7
|
-
*/
|
|
8
|
-
image_src?: string | StaticImageData;
|
|
9
|
-
/**
|
|
10
|
-
* Optional image alt text
|
|
11
|
-
* Defaults from hazo_auth_config.ini or "Modern building representing user registration"
|
|
12
|
-
*/
|
|
13
|
-
image_alt?: string;
|
|
14
|
-
/**
|
|
15
|
-
* Optional image background color
|
|
16
|
-
* Defaults from hazo_auth_config.ini or "#e2e8f0"
|
|
17
|
-
*/
|
|
18
|
-
image_background_color?: string;
|
|
19
4
|
/**
|
|
20
5
|
* Layout mode (default: `"two_column"`). See `LoginPageProps.layout` for the
|
|
21
6
|
* full description. `"form_only"` skips both AuthPageShell and
|
|
22
7
|
* TwoColumnAuthLayout so the consumer's brand chrome can wrap the form.
|
|
23
8
|
*/
|
|
24
9
|
layout?: "two_column" | "form_only";
|
|
10
|
+
/**
|
|
11
|
+
* Optional theme that controls visual appearance and layout mode.
|
|
12
|
+
* When `theme.layout` is `"split"`, activates the two-column split layout
|
|
13
|
+
* with the brand panel on the left.
|
|
14
|
+
*/
|
|
15
|
+
theme?: import("../theme/theme_types").HazoAuthTheme;
|
|
16
|
+
/** Override the page heading. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
|
|
17
|
+
title?: string;
|
|
18
|
+
/** Override the page subtitle. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
|
|
19
|
+
subtitle?: string;
|
|
20
|
+
/** Override the submit button label. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
|
|
21
|
+
ctaText?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Optional legal text rendered below the form.
|
|
24
|
+
* Accepts a string or JSX (e.g. `<a href="/tos">Terms of Service</a>`).
|
|
25
|
+
* Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS.
|
|
26
|
+
*/
|
|
27
|
+
legalText?: React.ReactNode;
|
|
25
28
|
};
|
|
26
29
|
/**
|
|
27
30
|
* Zero-config RegisterPage server component
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/server_pages/register.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/server_pages/register.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;AAIrB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IACpC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,sBAAsB,EAAE,aAAa,CAAC;IACrD,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,CAAC;AAIF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CA4D5D;AAGD,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -2,12 +2,12 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
2
2
|
// file_description: Zero-config RegisterPage server component - drop in and use with no configuration required
|
|
3
3
|
// section: server-only-guard
|
|
4
4
|
import "server-only";
|
|
5
|
-
// section: imports
|
|
6
5
|
import { get_register_config } from "../lib/register_config.server.js";
|
|
7
6
|
import { get_navbar_config } from "../lib/navbar_config.server.js";
|
|
8
7
|
import { RegisterClientWrapper } from "./register_client_wrapper.js";
|
|
9
8
|
import { AuthPageShell } from "../components/layouts/shared/components/auth_page_shell.js";
|
|
10
9
|
import { FloatingHomeLink } from "../components/layouts/shared/components/floating_home_link.js";
|
|
10
|
+
import { DEFAULT_STRINGS, readStrings } from "../strings.js";
|
|
11
11
|
// section: component
|
|
12
12
|
/**
|
|
13
13
|
* Zero-config RegisterPage server component
|
|
@@ -35,22 +35,25 @@ import { FloatingHomeLink } from "../components/layouts/shared/components/floati
|
|
|
35
35
|
* @returns Server-rendered register page
|
|
36
36
|
*/
|
|
37
37
|
export default function RegisterPage(props) {
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
var _a, _b, _c;
|
|
39
|
+
const { layout = "two_column", theme, title, subtitle, ctaText, legalText, } = props !== null && props !== void 0 ? props : {};
|
|
40
|
+
// Resolve strings: prop > HazoAuthStringsProvider > DEFAULT_STRINGS
|
|
41
|
+
const strings = readStrings();
|
|
42
|
+
const register_strings = strings.register;
|
|
43
|
+
const resolved_title = (_a = title !== null && title !== void 0 ? title : register_strings.title) !== null && _a !== void 0 ? _a : DEFAULT_STRINGS.register.title;
|
|
44
|
+
const resolved_subtitle = (_b = subtitle !== null && subtitle !== void 0 ? subtitle : register_strings.subtitle) !== null && _b !== void 0 ? _b : DEFAULT_STRINGS.register.subtitle;
|
|
45
|
+
const resolved_cta = (_c = ctaText !== null && ctaText !== void 0 ? ctaText : register_strings.ctaText) !== null && _c !== void 0 ? _c : DEFAULT_STRINGS.register.ctaText;
|
|
46
|
+
const resolved_legal = legalText !== undefined ? legalText : (register_strings.legalText || undefined);
|
|
47
|
+
// Load configuration from INI file (with defaults)
|
|
40
48
|
const config = get_register_config();
|
|
41
|
-
|
|
42
|
-
const finalImageSrc = image_src || config.imageSrc;
|
|
43
|
-
const finalImageAlt = image_alt || config.imageAlt;
|
|
44
|
-
const finalImageBackgroundColor = image_background_color || config.imageBackgroundColor;
|
|
45
|
-
const wrapper = (_jsx(RegisterClientWrapper, { image_src: finalImageSrc, image_alt: finalImageAlt, image_background_color: finalImageBackgroundColor, showNameField: config.showNameField, passwordRequirements: config.passwordRequirements, alreadyLoggedInMessage: config.alreadyLoggedInMessage, showLogoutButton: config.showLogoutButton, showReturnHomeButton: config.showReturnHomeButton, returnHomeButtonLabel: config.returnHomeButtonLabel, returnHomePath: config.returnHomePath, signInPath: config.signInPath, signInLabel: config.signInLabel, oauth: {
|
|
49
|
+
const wrapper = (_jsx(RegisterClientWrapper, { showNameField: config.showNameField, passwordRequirements: config.passwordRequirements, alreadyLoggedInMessage: config.alreadyLoggedInMessage, showLogoutButton: config.showLogoutButton, showReturnHomeButton: config.showReturnHomeButton, returnHomeButtonLabel: config.returnHomeButtonLabel, returnHomePath: config.returnHomePath, signInPath: config.signInPath, signInLabel: config.signInLabel, oauth: {
|
|
46
50
|
enable_google: config.oauth.enable_google,
|
|
47
51
|
enable_email_password: config.oauth.enable_email_password,
|
|
48
52
|
google_button_text: config.oauth.google_button_text,
|
|
49
53
|
oauth_divider_text: config.oauth.oauth_divider_text,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// FloatingHomeLink rendering rule below.
|
|
54
|
+
enable_facebook: config.oauth.enable_facebook,
|
|
55
|
+
facebook_button_text: config.oauth.facebook_button_text,
|
|
56
|
+
}, layout: layout, theme: theme, labels: { heading: resolved_title, subHeading: resolved_subtitle, submitButton: resolved_cta }, legalText: resolved_legal }));
|
|
54
57
|
if (layout === "form_only") {
|
|
55
58
|
const navbar = get_navbar_config();
|
|
56
59
|
return (_jsxs(_Fragment, { children: [navbar.show_home_link && (_jsx(FloatingHomeLink, { path: navbar.home_path, label: navbar.home_label })), wrapper] }));
|
|
@@ -1,18 +1,22 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import type { RegisterConfig } from "../lib/register_config.server";
|
|
2
3
|
import type { OAuthLayoutConfig } from "../components/layouts/register/index";
|
|
3
|
-
import type {
|
|
4
|
-
export type RegisterClientWrapperProps = Omit<RegisterConfig, '
|
|
5
|
-
image_src?: string | StaticImageData;
|
|
6
|
-
image_alt?: string;
|
|
7
|
-
image_background_color?: string;
|
|
4
|
+
import type { HazoAuthTheme } from "../theme/theme_types";
|
|
5
|
+
export type RegisterClientWrapperProps = Omit<RegisterConfig, 'oauth'> & {
|
|
8
6
|
/** OAuth configuration */
|
|
9
7
|
oauth?: OAuthLayoutConfig;
|
|
10
8
|
/** Layout mode — see RegisterLayoutProps.layout. Default `"two_column"`. */
|
|
11
9
|
layout?: "two_column" | "form_only";
|
|
10
|
+
/** Optional theme passed through to RegisterLayout → TwoColumnAuthLayout. */
|
|
11
|
+
theme?: HazoAuthTheme;
|
|
12
|
+
/** Optional label overrides (heading, subHeading, submitButton) */
|
|
13
|
+
labels?: import("../components/layouts/shared/config/layout_customization").LayoutLabelOverrides;
|
|
14
|
+
/** Optional legal text rendered below the form (accepts ReactNode for links/JSX) */
|
|
15
|
+
legalText?: React.ReactNode;
|
|
12
16
|
};
|
|
13
17
|
/**
|
|
14
18
|
* Client wrapper for RegisterLayout
|
|
15
19
|
* Initializes hazo_connect data client on client side and passes config from server
|
|
16
20
|
*/
|
|
17
|
-
export declare function RegisterClientWrapper({
|
|
21
|
+
export declare function RegisterClientWrapper({ showNameField, passwordRequirements, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, signInPath, signInLabel, oauth, layout, theme, labels, legalText, }: RegisterClientWrapperProps): import("react/jsx-runtime").JSX.Element;
|
|
18
22
|
//# sourceMappingURL=register_client_wrapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/register_client_wrapper.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"register_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/register_client_wrapper.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG;IACvE,0BAA0B;IAC1B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IACpC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,0DAA0D,EAAE,oBAAoB,CAAC;IACjG,oFAAoF;IACpF,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,CAAC;AAGF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,WAAW,EACX,KAAK,EACL,MAAqB,EACrB,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,0BAA0B,2CAuC5B"}
|
|
@@ -11,7 +11,7 @@ import { create_sqlite_hazo_connect } from "../lib/hazo_connect_setup.js";
|
|
|
11
11
|
* Client wrapper for RegisterLayout
|
|
12
12
|
* Initializes hazo_connect data client on client side and passes config from server
|
|
13
13
|
*/
|
|
14
|
-
export function RegisterClientWrapper({
|
|
14
|
+
export function RegisterClientWrapper({ showNameField, passwordRequirements, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, signInPath, signInLabel, oauth, layout = "two_column", theme, labels, legalText, }) {
|
|
15
15
|
const [dataClient, setDataClient] = useState(null);
|
|
16
16
|
useEffect(() => {
|
|
17
17
|
// Initialize hazo_connect on client side
|
|
@@ -23,5 +23,5 @@ export function RegisterClientWrapper({ image_src, image_alt, image_background_c
|
|
|
23
23
|
if (!dataClient) {
|
|
24
24
|
return (_jsx("div", { className: "cls_register_page_loading flex items-center justify-center min-h-screen", children: _jsx("div", { className: "text-slate-600 animate-pulse", children: "Loading..." }) }));
|
|
25
25
|
}
|
|
26
|
-
return (_jsx(RegisterLayout, {
|
|
26
|
+
return (_jsx(RegisterLayout, { data_client: dataClient, show_name_field: showNameField, password_requirements: passwordRequirements, alreadyLoggedInMessage: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, signInPath: signInPath, signInLabel: signInLabel, oauth: oauth, layout: layout, theme: theme, labels: labels, legalText: legalText }));
|
|
27
27
|
}
|
|
@@ -1,21 +1,17 @@
|
|
|
1
1
|
import "server-only";
|
|
2
|
-
import type { StaticImageData } from "next/image";
|
|
3
2
|
export type ResetPasswordPageProps = {
|
|
4
3
|
/**
|
|
5
|
-
* Optional
|
|
6
|
-
*
|
|
4
|
+
* Optional theme that controls visual appearance and layout mode.
|
|
5
|
+
* When `theme.layout` is `"split"`, activates the two-column split layout
|
|
6
|
+
* with the brand panel on the left.
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
* Optional image background color
|
|
16
|
-
* Defaults to "#f1f5f9"
|
|
17
|
-
*/
|
|
18
|
-
image_background_color?: string;
|
|
8
|
+
theme?: import("../theme/theme_types").HazoAuthTheme;
|
|
9
|
+
/** Override the page heading. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
|
|
10
|
+
title?: string;
|
|
11
|
+
/** Override the page subtitle. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
|
|
12
|
+
subtitle?: string;
|
|
13
|
+
/** Override the submit button label. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
|
|
14
|
+
ctaText?: string;
|
|
19
15
|
};
|
|
20
16
|
/**
|
|
21
17
|
* Zero-config ResetPasswordPage server component
|
|
@@ -38,9 +34,8 @@ export type ResetPasswordPageProps = {
|
|
|
38
34
|
*
|
|
39
35
|
* Zero configuration required - works out of the box!
|
|
40
36
|
*
|
|
41
|
-
* @param props - Optional visual customization props
|
|
42
37
|
* @returns Server-rendered reset password page
|
|
43
38
|
*/
|
|
44
|
-
export default function ResetPasswordPage(
|
|
39
|
+
export default function ResetPasswordPage({ theme, title, subtitle, ctaText }?: ResetPasswordPageProps): import("react/jsx-runtime").JSX.Element;
|
|
45
40
|
export { ResetPasswordPage };
|
|
46
41
|
//# sourceMappingURL=reset_password.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset_password.d.ts","sourceRoot":"","sources":["../../src/server_pages/reset_password.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"reset_password.d.ts","sourceRoot":"","sources":["../../src/server_pages/reset_password.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;AASrB,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,sBAAsB,EAAE,aAAa,CAAC;IACrD,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAGF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAE,sBAA2B,2CA8BzG;AAGD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -6,6 +6,7 @@ import "server-only";
|
|
|
6
6
|
import { get_reset_password_config } from "../lib/reset_password_config.server.js";
|
|
7
7
|
import { ResetPasswordClientWrapper } from "./reset_password_client_wrapper.js";
|
|
8
8
|
import { AuthPageShell } from "../components/layouts/shared/components/auth_page_shell.js";
|
|
9
|
+
import { DEFAULT_STRINGS, readStrings } from "../strings.js";
|
|
9
10
|
// section: component
|
|
10
11
|
/**
|
|
11
12
|
* Zero-config ResetPasswordPage server component
|
|
@@ -28,19 +29,20 @@ import { AuthPageShell } from "../components/layouts/shared/components/auth_page
|
|
|
28
29
|
*
|
|
29
30
|
* Zero configuration required - works out of the box!
|
|
30
31
|
*
|
|
31
|
-
* @param props - Optional visual customization props
|
|
32
32
|
* @returns Server-rendered reset password page
|
|
33
33
|
*/
|
|
34
|
-
export default function ResetPasswordPage(
|
|
35
|
-
|
|
36
|
-
//
|
|
34
|
+
export default function ResetPasswordPage({ theme, title, subtitle, ctaText } = {}) {
|
|
35
|
+
var _a, _b, _c;
|
|
36
|
+
// Resolve strings: prop > HazoAuthStringsProvider > DEFAULT_STRINGS
|
|
37
|
+
const strings = readStrings();
|
|
38
|
+
const rp_strings = strings.reset_password;
|
|
39
|
+
const resolved_title = (_a = title !== null && title !== void 0 ? title : rp_strings.title) !== null && _a !== void 0 ? _a : DEFAULT_STRINGS.reset_password.title;
|
|
40
|
+
const resolved_subtitle = (_b = subtitle !== null && subtitle !== void 0 ? subtitle : rp_strings.subtitle) !== null && _b !== void 0 ? _b : DEFAULT_STRINGS.reset_password.subtitle;
|
|
41
|
+
const resolved_cta = (_c = ctaText !== null && ctaText !== void 0 ? ctaText : rp_strings.ctaText) !== null && _c !== void 0 ? _c : DEFAULT_STRINGS.reset_password.ctaText;
|
|
42
|
+
// Load configuration from INI file (with defaults)
|
|
37
43
|
const config = get_reset_password_config();
|
|
38
|
-
// Use props if provided, otherwise fall back to config (which includes default asset image)
|
|
39
|
-
const finalImageSrc = image_src || config.imageSrc;
|
|
40
|
-
const finalImageAlt = image_alt || config.imageAlt;
|
|
41
|
-
const finalImageBackgroundColor = image_background_color || config.imageBackgroundColor;
|
|
42
44
|
// Pass serializable config to client wrapper, wrapped in AuthPageShell for navbar support
|
|
43
|
-
return (_jsx(AuthPageShell, { children: _jsx(ResetPasswordClientWrapper, {
|
|
45
|
+
return (_jsx(AuthPageShell, { children: _jsx(ResetPasswordClientWrapper, { passwordRequirements: config.passwordRequirements, errorMessage: config.errorMessage, successMessage: config.successMessage, loginPath: config.loginPath, forgotPasswordPath: config.forgotPasswordPath, alreadyLoggedInMessage: config.alreadyLoggedInMessage, showLogoutButton: config.showLogoutButton, showReturnHomeButton: config.showReturnHomeButton, returnHomeButtonLabel: config.returnHomeButtonLabel, returnHomePath: config.returnHomePath, theme: theme, labels: { heading: resolved_title, subHeading: resolved_subtitle, submitButton: resolved_cta } }) }));
|
|
44
46
|
}
|
|
45
47
|
// Named export for direct imports
|
|
46
48
|
export { ResetPasswordPage };
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { ResetPasswordConfig } from "../lib/reset_password_config.server";
|
|
2
|
-
import type {
|
|
3
|
-
export type ResetPasswordClientWrapperProps =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import type { HazoAuthTheme } from "../theme/theme_types";
|
|
3
|
+
export type ResetPasswordClientWrapperProps = ResetPasswordConfig & {
|
|
4
|
+
/** Optional theme passed through to ResetPasswordLayout → TwoColumnAuthLayout. */
|
|
5
|
+
theme?: HazoAuthTheme;
|
|
6
|
+
/** Optional label overrides (heading, subHeading, submitButton) */
|
|
7
|
+
labels?: import("../components/layouts/shared/config/layout_customization").LayoutLabelOverrides;
|
|
7
8
|
};
|
|
8
9
|
/**
|
|
9
10
|
* Client wrapper for ResetPasswordLayout
|
|
10
11
|
* Initializes hazo_connect data client on client side and passes config from server
|
|
11
12
|
*/
|
|
12
|
-
export declare function ResetPasswordClientWrapper({
|
|
13
|
+
export declare function ResetPasswordClientWrapper({ passwordRequirements, errorMessage, successMessage, loginPath, forgotPasswordPath, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, theme, labels, }: ResetPasswordClientWrapperProps): import("react/jsx-runtime").JSX.Element;
|
|
13
14
|
//# sourceMappingURL=reset_password_client_wrapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset_password_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/reset_password_client_wrapper.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"reset_password_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/reset_password_client_wrapper.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,MAAM,+BAA+B,GAAG,mBAAmB,GAAG;IAClE,kFAAkF;IAClF,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,0DAA0D,EAAE,oBAAoB,CAAC;CAClG,CAAC;AAGF;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,KAAK,EACL,MAAM,GACP,EAAE,+BAA+B,2CAqCjC"}
|
|
@@ -11,7 +11,7 @@ import { create_sqlite_hazo_connect } from "../lib/hazo_connect_setup.js";
|
|
|
11
11
|
* Client wrapper for ResetPasswordLayout
|
|
12
12
|
* Initializes hazo_connect data client on client side and passes config from server
|
|
13
13
|
*/
|
|
14
|
-
export function ResetPasswordClientWrapper({
|
|
14
|
+
export function ResetPasswordClientWrapper({ passwordRequirements, errorMessage, successMessage, loginPath, forgotPasswordPath, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, theme, labels, }) {
|
|
15
15
|
const [dataClient, setDataClient] = useState(null);
|
|
16
16
|
useEffect(() => {
|
|
17
17
|
// Initialize hazo_connect on client side
|
|
@@ -23,5 +23,5 @@ export function ResetPasswordClientWrapper({ image_src, image_alt, image_backgro
|
|
|
23
23
|
if (!dataClient) {
|
|
24
24
|
return (_jsx("div", { className: "cls_reset_password_page_loading flex items-center justify-center min-h-screen", children: _jsx("div", { className: "text-slate-600 animate-pulse", children: "Loading..." }) }));
|
|
25
25
|
}
|
|
26
|
-
return (_jsx(ResetPasswordLayout, {
|
|
26
|
+
return (_jsx(ResetPasswordLayout, { data_client: dataClient, password_requirements: passwordRequirements, errorMessage: errorMessage, successMessage: successMessage, loginPath: loginPath, forgotPasswordPath: forgotPasswordPath, alreadyLoggedInMessage: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, theme: theme, labels: labels }));
|
|
27
27
|
}
|
|
@@ -1,21 +1,5 @@
|
|
|
1
1
|
import "server-only";
|
|
2
|
-
import type { StaticImageData } from "next/image";
|
|
3
2
|
export type VerifyEmailPageProps = {
|
|
4
|
-
/**
|
|
5
|
-
* Optional image source for the visual panel
|
|
6
|
-
* Defaults from hazo_auth_config.ini or package default image
|
|
7
|
-
*/
|
|
8
|
-
image_src?: string | StaticImageData;
|
|
9
|
-
/**
|
|
10
|
-
* Optional image alt text
|
|
11
|
-
* Defaults to "Email verification illustration"
|
|
12
|
-
*/
|
|
13
|
-
image_alt?: string;
|
|
14
|
-
/**
|
|
15
|
-
* Optional image background color
|
|
16
|
-
* Defaults to "#f1f5f9"
|
|
17
|
-
*/
|
|
18
|
-
image_background_color?: string;
|
|
19
3
|
/**
|
|
20
4
|
* Optional redirect delay in seconds after successful verification
|
|
21
5
|
* Defaults from DEFAULT_EMAIL_VERIFICATION.redirectDelay
|
|
@@ -26,6 +10,16 @@ export type VerifyEmailPageProps = {
|
|
|
26
10
|
* Defaults from DEFAULT_EMAIL_VERIFICATION.loginPath
|
|
27
11
|
*/
|
|
28
12
|
login_path?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Optional theme that controls visual appearance and layout mode.
|
|
15
|
+
* When `theme.layout` is `"split"`, activates the two-column split layout
|
|
16
|
+
* with the brand panel on the left.
|
|
17
|
+
*/
|
|
18
|
+
theme?: import("../theme/theme_types").HazoAuthTheme;
|
|
19
|
+
/** Override the page heading. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
|
|
20
|
+
title?: string;
|
|
21
|
+
/** Override the page subtitle. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
|
|
22
|
+
subtitle?: string;
|
|
29
23
|
};
|
|
30
24
|
/**
|
|
31
25
|
* Zero-config VerifyEmailPage server component
|
|
@@ -47,7 +41,7 @@ export type VerifyEmailPageProps = {
|
|
|
47
41
|
*
|
|
48
42
|
* Zero configuration required - works out of the box!
|
|
49
43
|
*
|
|
50
|
-
* @param props - Optional
|
|
44
|
+
* @param props - Optional behavior customization props
|
|
51
45
|
* @returns Server-rendered email verification page
|
|
52
46
|
*/
|
|
53
47
|
export default function VerifyEmailPage(props: VerifyEmailPageProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify_email.d.ts","sourceRoot":"","sources":["../../src/server_pages/verify_email.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"verify_email.d.ts","sourceRoot":"","sources":["../../src/server_pages/verify_email.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;AAUrB,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,sBAAsB,EAAE,aAAa,CAAC;IACrD,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAGF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAkClE;AAGD,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { get_email_verification_config } from "../lib/email_verification_config.
|
|
|
7
7
|
import { VerifyEmailClientWrapper } from "./verify_email_client_wrapper.js";
|
|
8
8
|
import { AuthPageShell } from "../components/layouts/shared/components/auth_page_shell.js";
|
|
9
9
|
import { DEFAULT_EMAIL_VERIFICATION } from "../lib/config/default_config.js";
|
|
10
|
+
import { DEFAULT_STRINGS, readStrings } from "../strings.js";
|
|
10
11
|
// section: component
|
|
11
12
|
/**
|
|
12
13
|
* Zero-config VerifyEmailPage server component
|
|
@@ -28,19 +29,21 @@ import { DEFAULT_EMAIL_VERIFICATION } from "../lib/config/default_config.js";
|
|
|
28
29
|
*
|
|
29
30
|
* Zero configuration required - works out of the box!
|
|
30
31
|
*
|
|
31
|
-
* @param props - Optional
|
|
32
|
+
* @param props - Optional behavior customization props
|
|
32
33
|
* @returns Server-rendered email verification page
|
|
33
34
|
*/
|
|
34
35
|
export default function VerifyEmailPage(props) {
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
var _a, _b;
|
|
37
|
+
const { redirect_delay = DEFAULT_EMAIL_VERIFICATION.redirectDelay, login_path = DEFAULT_EMAIL_VERIFICATION.loginPath, theme, title, subtitle, } = props !== null && props !== void 0 ? props : {};
|
|
38
|
+
// Resolve strings: prop > HazoAuthStringsProvider > DEFAULT_STRINGS
|
|
39
|
+
const strings = readStrings();
|
|
40
|
+
const ve_strings = strings.verify_email;
|
|
41
|
+
const resolved_title = (_a = title !== null && title !== void 0 ? title : ve_strings.title) !== null && _a !== void 0 ? _a : DEFAULT_STRINGS.verify_email.title;
|
|
42
|
+
const resolved_subtitle = (_b = subtitle !== null && subtitle !== void 0 ? subtitle : ve_strings.subtitle) !== null && _b !== void 0 ? _b : DEFAULT_STRINGS.verify_email.subtitle;
|
|
43
|
+
// Load configuration from INI file (with defaults)
|
|
37
44
|
const config = get_email_verification_config();
|
|
38
|
-
// Use props if provided, otherwise fall back to config (which includes default asset image)
|
|
39
|
-
const finalImageSrc = image_src || config.imageSrc;
|
|
40
|
-
const finalImageAlt = image_alt || config.imageAlt;
|
|
41
|
-
const finalImageBackgroundColor = image_background_color || config.imageBackgroundColor;
|
|
42
45
|
// Pass serializable config to client wrapper, wrapped in AuthPageShell for navbar support
|
|
43
|
-
return (_jsx(AuthPageShell, { children: _jsx(VerifyEmailClientWrapper, {
|
|
46
|
+
return (_jsx(AuthPageShell, { children: _jsx(VerifyEmailClientWrapper, { redirect_delay: redirect_delay, login_path: login_path, alreadyLoggedInMessage: config.alreadyLoggedInMessage, showLogoutButton: config.showLogoutButton, showReturnHomeButton: config.showReturnHomeButton, returnHomeButtonLabel: config.returnHomeButtonLabel, returnHomePath: config.returnHomePath, theme: theme, labels: { heading: resolved_title, subHeading: resolved_subtitle } }) }));
|
|
44
47
|
}
|
|
45
48
|
// Named export for direct imports
|
|
46
49
|
export { VerifyEmailPage };
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import type { EmailVerificationConfig } from "../lib/email_verification_config.server";
|
|
2
|
-
import type {
|
|
3
|
-
export type VerifyEmailClientWrapperProps =
|
|
4
|
-
image_src: string | StaticImageData;
|
|
5
|
-
image_alt: string;
|
|
6
|
-
image_background_color: string;
|
|
2
|
+
import type { HazoAuthTheme } from "../theme/theme_types";
|
|
3
|
+
export type VerifyEmailClientWrapperProps = EmailVerificationConfig & {
|
|
7
4
|
redirect_delay: number;
|
|
8
5
|
login_path: string;
|
|
6
|
+
/** Optional theme passed through to EmailVerificationLayout → TwoColumnAuthLayout. */
|
|
7
|
+
theme?: HazoAuthTheme;
|
|
8
|
+
/** Optional label overrides (heading, subHeading) */
|
|
9
|
+
labels?: import("../components/layouts/shared/config/layout_customization").LayoutLabelOverrides;
|
|
9
10
|
};
|
|
10
11
|
/**
|
|
11
12
|
* Client wrapper for EmailVerificationLayout
|
|
12
13
|
* Initializes hazo_connect data client on client side and passes config from server
|
|
13
14
|
*/
|
|
14
|
-
export declare function VerifyEmailClientWrapper({
|
|
15
|
+
export declare function VerifyEmailClientWrapper({ redirect_delay, login_path, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, theme, labels, }: VerifyEmailClientWrapperProps): import("react/jsx-runtime").JSX.Element;
|
|
15
16
|
//# sourceMappingURL=verify_email_client_wrapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify_email_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/verify_email_client_wrapper.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"verify_email_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/verify_email_client_wrapper.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,MAAM,6BAA6B,GAAG,uBAAuB,GAAG;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,0DAA0D,EAAE,oBAAoB,CAAC;CAClG,CAAC;AAGF;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,cAAc,EACd,UAAU,EACV,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,KAAK,EACL,MAAM,GACP,EAAE,6BAA6B,2CAmC/B"}
|
|
@@ -11,7 +11,7 @@ import { create_sqlite_hazo_connect } from "../lib/hazo_connect_setup.js";
|
|
|
11
11
|
* Client wrapper for EmailVerificationLayout
|
|
12
12
|
* Initializes hazo_connect data client on client side and passes config from server
|
|
13
13
|
*/
|
|
14
|
-
export function VerifyEmailClientWrapper({
|
|
14
|
+
export function VerifyEmailClientWrapper({ redirect_delay, login_path, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, theme, labels, }) {
|
|
15
15
|
const [dataClient, setDataClient] = useState(null);
|
|
16
16
|
useEffect(() => {
|
|
17
17
|
// Initialize hazo_connect on client side
|
|
@@ -23,5 +23,5 @@ export function VerifyEmailClientWrapper({ image_src, image_alt, image_backgroun
|
|
|
23
23
|
if (!dataClient) {
|
|
24
24
|
return (_jsx("div", { className: "cls_verify_email_page_loading flex items-center justify-center min-h-screen", children: _jsx("div", { className: "text-slate-600 animate-pulse", children: "Loading..." }) }));
|
|
25
25
|
}
|
|
26
|
-
return (_jsx(EmailVerificationLayout, {
|
|
26
|
+
return (_jsx(EmailVerificationLayout, { data_client: dataClient, redirect_delay: redirect_delay, login_path: login_path, sign_in_label: "Back to login", already_logged_in_message: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, theme: theme, labels: labels }));
|
|
27
27
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface HazoAuthStrings {
|
|
3
|
+
login: {
|
|
4
|
+
title: string;
|
|
5
|
+
subtitle: string;
|
|
6
|
+
ctaText: string;
|
|
7
|
+
legalText: ReactNode;
|
|
8
|
+
errors?: {
|
|
9
|
+
link_blocked_unverified?: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
register: {
|
|
13
|
+
title: string;
|
|
14
|
+
subtitle: string;
|
|
15
|
+
ctaText: string;
|
|
16
|
+
legalText: ReactNode;
|
|
17
|
+
};
|
|
18
|
+
forgot_password: {
|
|
19
|
+
title: string;
|
|
20
|
+
subtitle: string;
|
|
21
|
+
ctaText: string;
|
|
22
|
+
};
|
|
23
|
+
reset_password: {
|
|
24
|
+
title: string;
|
|
25
|
+
subtitle: string;
|
|
26
|
+
ctaText: string;
|
|
27
|
+
};
|
|
28
|
+
verify_email: {
|
|
29
|
+
title: string;
|
|
30
|
+
subtitle: string;
|
|
31
|
+
};
|
|
32
|
+
otp: {
|
|
33
|
+
title: string;
|
|
34
|
+
subtitle: string;
|
|
35
|
+
ctaText: string;
|
|
36
|
+
};
|
|
37
|
+
my_settings: {
|
|
38
|
+
title: string;
|
|
39
|
+
};
|
|
40
|
+
create_firm: {
|
|
41
|
+
title: string;
|
|
42
|
+
subtitle: string;
|
|
43
|
+
ctaText: string;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export declare const DEFAULT_STRINGS: HazoAuthStrings;
|
|
47
|
+
//# sourceMappingURL=default_strings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default_strings.d.ts","sourceRoot":"","sources":["../../src/strings/default_strings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,SAAS,CAAC;QACrB,MAAM,CAAC,EAAE;YACP,uBAAuB,CAAC,EAAE,MAAM,CAAC;SAClC,CAAC;KACH,CAAC;IACF,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,CAAC;IACrF,eAAe,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,cAAc,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE;AAED,eAAO,MAAM,eAAe,EAAE,eAiB7B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const DEFAULT_STRINGS = {
|
|
2
|
+
login: {
|
|
3
|
+
title: "Sign in to your account",
|
|
4
|
+
subtitle: "Enter your credentials to access your secure workspace.",
|
|
5
|
+
ctaText: "Login",
|
|
6
|
+
legalText: "",
|
|
7
|
+
errors: {
|
|
8
|
+
link_blocked_unverified: "This email is already registered but not verified. Please verify your email before linking a social account.",
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
register: { title: "Create your hazo account", subtitle: "Secure your access with editable fields powered by shadcn components.", ctaText: "Register", legalText: "" },
|
|
12
|
+
forgot_password: { title: "Forgot your password?", subtitle: "Enter your email address and we'll send you a link to reset your password.", ctaText: "Send reset link" },
|
|
13
|
+
reset_password: { title: "Reset your password", subtitle: "Enter your new password below.", ctaText: "Reset password" },
|
|
14
|
+
verify_email: { title: "Email verification", subtitle: "Verifying your email address..." },
|
|
15
|
+
otp: { title: "Sign in with email code", subtitle: "Enter the code we sent to your email", ctaText: "Verify" },
|
|
16
|
+
my_settings: { title: "Account Settings" },
|
|
17
|
+
create_firm: { title: "Create Your Firm", subtitle: "Set up your organisation to get started", ctaText: "Create Firm" },
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/strings/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type HazoAuthStrings } from "./default_strings.js";
|
|
2
|
+
/**
|
|
3
|
+
* Write the resolved strings into the per-request store.
|
|
4
|
+
* Called by HazoAuthStringsProvider during the render of its parent Server Component.
|
|
5
|
+
*/
|
|
6
|
+
export declare function setStrings(strings: HazoAuthStrings): void;
|
|
7
|
+
/**
|
|
8
|
+
* Read the current resolved strings from the per-request store.
|
|
9
|
+
* Falls back to DEFAULT_STRINGS if HazoAuthStringsProvider was not mounted.
|
|
10
|
+
*/
|
|
11
|
+
export declare function readStrings(): HazoAuthStrings;
|
|
12
|
+
//# sourceMappingURL=strings_context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings_context.d.ts","sourceRoot":"","sources":["../../src/strings/strings_context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAS1E;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAEzD;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,eAAe,CAE7C"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// file_description: per-request strings cache using React cache() for Server Component support
|
|
2
|
+
import { cache } from "react";
|
|
3
|
+
import { DEFAULT_STRINGS } from "./default_strings.js";
|
|
4
|
+
/**
|
|
5
|
+
* Per-request store for resolved strings.
|
|
6
|
+
* React.cache() creates one instance per request in the React tree.
|
|
7
|
+
* Server Components can read this without prop-drilling.
|
|
8
|
+
*/
|
|
9
|
+
const getStringsStore = cache(() => ({ strings: DEFAULT_STRINGS }));
|
|
10
|
+
/**
|
|
11
|
+
* Write the resolved strings into the per-request store.
|
|
12
|
+
* Called by HazoAuthStringsProvider during the render of its parent Server Component.
|
|
13
|
+
*/
|
|
14
|
+
export function setStrings(strings) {
|
|
15
|
+
getStringsStore().strings = strings;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Read the current resolved strings from the per-request store.
|
|
19
|
+
* Falls back to DEFAULT_STRINGS if HazoAuthStringsProvider was not mounted.
|
|
20
|
+
*/
|
|
21
|
+
export function readStrings() {
|
|
22
|
+
return getStringsStore().strings;
|
|
23
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { HazoAuthStrings } from "./default_strings";
|
|
3
|
+
type DeepPartial<T> = T extends object ? {
|
|
4
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
5
|
+
} : T;
|
|
6
|
+
/**
|
|
7
|
+
* Server Component that registers custom string overrides for all descendant
|
|
8
|
+
* hazo_auth page components rendered in the same React request.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <HazoAuthStringsProvider
|
|
13
|
+
* strings={{ login: { title: "Welcome back", ctaText: "Log in" } }}
|
|
14
|
+
* >
|
|
15
|
+
* <LoginPage />
|
|
16
|
+
* </HazoAuthStringsProvider>
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* Any field not supplied falls back to DEFAULT_STRINGS.
|
|
20
|
+
*/
|
|
21
|
+
export declare function HazoAuthStringsProvider({ strings, children, }: {
|
|
22
|
+
strings?: DeepPartial<HazoAuthStrings>;
|
|
23
|
+
children: React.ReactNode;
|
|
24
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=strings_provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings_provider.d.ts","sourceRoot":"","sources":["../../src/strings/strings_provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMzD,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAClC;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACtC,CAAC,CAAC;AA2BN;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,OAAO,EACP,QAAQ,GACT,EAAE;IACD,OAAO,CAAC,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IACvC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CAMA"}
|