hazo_auth 4.3.0 → 4.4.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/cli-src/lib/already_logged_in_config.server.ts +1 -1
- package/cli-src/lib/app_logger.ts +8 -18
- package/cli-src/lib/auth/auth_types.ts +7 -0
- package/cli-src/lib/auth/auth_utils.server.ts +2 -2
- package/cli-src/lib/auth/dev_lock_validator.edge.ts +171 -0
- package/cli-src/lib/auth/hazo_get_auth.server.ts +84 -13
- package/cli-src/lib/auth/index.ts +5 -5
- package/cli-src/lib/auth/nextauth_config.ts +4 -4
- package/cli-src/lib/auth/org_cache.ts +148 -0
- package/cli-src/lib/auth/server_auth.ts +2 -2
- package/cli-src/lib/auth/session_token_validator.edge.ts +4 -0
- package/cli-src/lib/auth_utility_config.server.ts +1 -1
- package/cli-src/lib/config/config_loader.server.ts +1 -1
- package/cli-src/lib/config/default_config.ts +44 -0
- package/cli-src/lib/dev_lock_config.server.ts +148 -0
- package/cli-src/lib/email_verification_config.server.ts +3 -3
- package/cli-src/lib/file_types_config.server.ts +1 -1
- package/cli-src/lib/forgot_password_config.server.ts +3 -3
- package/cli-src/lib/hazo_connect_instance.server.ts +2 -2
- package/cli-src/lib/hazo_connect_setup.server.ts +2 -2
- package/cli-src/lib/index.ts +24 -24
- package/cli-src/lib/login_config.server.ts +4 -4
- package/cli-src/lib/messages_config.server.ts +1 -1
- package/cli-src/lib/multi_tenancy_config.server.ts +94 -0
- package/cli-src/lib/my_settings_config.server.ts +7 -7
- package/cli-src/lib/oauth_config.server.ts +2 -2
- package/cli-src/lib/password_requirements_config.server.ts +2 -2
- package/cli-src/lib/profile_pic_menu_config.server.ts +1 -1
- package/cli-src/lib/profile_picture_config.server.ts +2 -2
- package/cli-src/lib/register_config.server.ts +5 -5
- package/cli-src/lib/reset_password_config.server.ts +4 -4
- package/cli-src/lib/scope_hierarchy_config.server.ts +2 -2
- package/cli-src/lib/services/email_service.ts +2 -2
- package/cli-src/lib/services/email_verification_service.ts +3 -3
- package/cli-src/lib/services/login_service.ts +3 -3
- package/cli-src/lib/services/oauth_service.ts +4 -4
- package/cli-src/lib/services/org_service.ts +965 -0
- package/cli-src/lib/services/password_change_service.ts +3 -3
- package/cli-src/lib/services/password_reset_service.ts +3 -3
- package/cli-src/lib/services/profile_picture_remove_service.ts +3 -3
- package/cli-src/lib/services/profile_picture_service.ts +5 -5
- package/cli-src/lib/services/registration_service.ts +8 -8
- package/cli-src/lib/services/scope_labels_service.ts +3 -3
- package/cli-src/lib/services/scope_service.ts +2 -2
- package/cli-src/lib/services/session_token_service.ts +6 -2
- package/cli-src/lib/services/token_service.ts +2 -2
- package/cli-src/lib/services/user_profiles_service.ts +4 -4
- package/cli-src/lib/services/user_scope_service.ts +3 -3
- package/cli-src/lib/services/user_update_service.ts +4 -4
- package/cli-src/lib/ui_shell_config.server.ts +1 -1
- package/cli-src/lib/ui_sizes_config.server.ts +1 -1
- package/cli-src/lib/user_fields_config.server.ts +1 -1
- package/cli-src/lib/user_management_config.server.ts +1 -1
- package/cli-src/lib/user_profiles_config.server.ts +1 -1
- package/cli-src/lib/utils/error_sanitizer.ts +1 -1
- package/cli-src/server/types/app_types.ts +72 -0
- package/cli-src/server/types/express.d.ts +16 -0
- package/dist/components/layouts/dev_lock/index.d.ts +29 -0
- package/dist/components/layouts/dev_lock/index.d.ts.map +1 -0
- package/dist/components/layouts/dev_lock/index.js +60 -0
- package/dist/components/layouts/index.d.ts +2 -0
- package/dist/components/layouts/index.d.ts.map +1 -1
- package/dist/components/layouts/index.js +1 -0
- package/dist/components/layouts/login/hooks/use_login_form.js +2 -2
- package/dist/components/layouts/org_management/index.d.ts +26 -0
- package/dist/components/layouts/org_management/index.d.ts.map +1 -0
- package/dist/components/layouts/org_management/index.js +75 -0
- package/dist/components/layouts/user_management/components/org_hierarchy_tab.d.ts +13 -0
- package/dist/components/layouts/user_management/components/org_hierarchy_tab.d.ts.map +1 -0
- package/dist/components/layouts/user_management/components/org_hierarchy_tab.js +276 -0
- package/dist/components/layouts/user_management/index.d.ts +3 -1
- package/dist/components/layouts/user_management/index.d.ts.map +1 -1
- package/dist/components/layouts/user_management/index.js +10 -4
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/lib/app_logger.d.ts +3 -9
- package/dist/lib/app_logger.d.ts.map +1 -1
- package/dist/lib/app_logger.js +7 -10
- package/dist/lib/auth/auth_types.d.ts +6 -0
- package/dist/lib/auth/auth_types.d.ts.map +1 -1
- package/dist/lib/auth/dev_lock_validator.edge.d.ts +38 -0
- package/dist/lib/auth/dev_lock_validator.edge.d.ts.map +1 -0
- package/dist/lib/auth/dev_lock_validator.edge.js +122 -0
- package/dist/lib/auth/hazo_get_auth.server.d.ts.map +1 -1
- package/dist/lib/auth/hazo_get_auth.server.js +61 -1
- package/dist/lib/auth/org_cache.d.ts +65 -0
- package/dist/lib/auth/org_cache.d.ts.map +1 -0
- package/dist/lib/auth/org_cache.js +103 -0
- package/dist/lib/config/default_config.d.ts +76 -0
- package/dist/lib/config/default_config.d.ts.map +1 -1
- package/dist/lib/config/default_config.js +42 -0
- package/dist/lib/dev_lock_config.server.d.ts +41 -0
- package/dist/lib/dev_lock_config.server.d.ts.map +1 -0
- package/dist/lib/dev_lock_config.server.js +50 -0
- package/dist/lib/multi_tenancy_config.server.d.ts +30 -0
- package/dist/lib/multi_tenancy_config.server.d.ts.map +1 -0
- package/dist/lib/multi_tenancy_config.server.js +41 -0
- package/dist/lib/services/org_service.d.ts +191 -0
- package/dist/lib/services/org_service.d.ts.map +1 -0
- package/dist/lib/services/org_service.js +746 -0
- package/dist/page_components/dev_lock.d.ts +11 -0
- package/dist/page_components/dev_lock.d.ts.map +1 -0
- package/dist/page_components/dev_lock.js +17 -0
- package/dist/page_components/index.d.ts +1 -0
- package/dist/page_components/index.d.ts.map +1 -1
- package/dist/page_components/index.js +1 -0
- package/dist/page_components/login.d.ts.map +1 -1
- package/dist/page_components/login.js +3 -7
- package/dist/page_components/org_management.d.ts +27 -0
- package/dist/page_components/org_management.d.ts.map +1 -0
- package/dist/page_components/org_management.js +18 -0
- package/dist/server/config/config_loader.js +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -3
- package/dist/server/types/app_types.d.ts +3 -7
- package/dist/server/types/app_types.d.ts.map +1 -1
- package/dist/server_pages/login_client_wrapper.d.ts.map +1 -1
- package/dist/server_pages/login_client_wrapper.js +1 -3
- package/hazo_auth_config.example.ini +30 -0
- package/package.json +29 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DevLockLayoutProps } from "../components/layouts/dev_lock";
|
|
2
|
+
export type DevLockPageProps = DevLockLayoutProps;
|
|
3
|
+
/**
|
|
4
|
+
* Zero-config dev lock page component
|
|
5
|
+
* Uses sensible defaults and can be customized via props
|
|
6
|
+
* @param props - Optional configuration overrides
|
|
7
|
+
* @returns Dev lock page component
|
|
8
|
+
*/
|
|
9
|
+
export declare function DevLockPage(props?: DevLockPageProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export default DevLockPage;
|
|
11
|
+
//# sourceMappingURL=dev_lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev_lock.d.ts","sourceRoot":"","sources":["../../src/page_components/dev_lock.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAGlD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,GAAE,gBAAqB,2CAEvD;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// file_description: zero-config dev lock page component for hazo_auth
|
|
2
|
+
// Consumers can use this directly without needing to configure props
|
|
3
|
+
"use client";
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
// section: imports
|
|
6
|
+
import DevLockLayout from "../components/layouts/dev_lock";
|
|
7
|
+
// section: component
|
|
8
|
+
/**
|
|
9
|
+
* Zero-config dev lock page component
|
|
10
|
+
* Uses sensible defaults and can be customized via props
|
|
11
|
+
* @param props - Optional configuration overrides
|
|
12
|
+
* @returns Dev lock page component
|
|
13
|
+
*/
|
|
14
|
+
export function DevLockPage(props = {}) {
|
|
15
|
+
return _jsx(DevLockLayout, Object.assign({}, props));
|
|
16
|
+
}
|
|
17
|
+
export default DevLockPage;
|
|
@@ -4,4 +4,5 @@ export { ForgotPasswordPage, type ForgotPasswordPageProps } from "./forgot_passw
|
|
|
4
4
|
export { ResetPasswordPage, type ResetPasswordPageProps } from "./reset_password.js";
|
|
5
5
|
export { VerifyEmailPage, type VerifyEmailPageProps } from "./verify_email.js";
|
|
6
6
|
export { MySettingsPage, type MySettingsPageProps } from "./my_settings.js";
|
|
7
|
+
export { OrgManagementPage, type OrgManagementPageProps } from "./org_management.js";
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/page_components/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/page_components/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -7,3 +7,4 @@ export { ForgotPasswordPage } from "./forgot_password.js";
|
|
|
7
7
|
export { ResetPasswordPage } from "./reset_password.js";
|
|
8
8
|
export { VerifyEmailPage } from "./verify_email.js";
|
|
9
9
|
export { MySettingsPage } from "./my_settings.js";
|
|
10
|
+
export { OrgManagementPage } from "./org_management.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/page_components/login.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/page_components/login.tsx"],"names":[],"mappings":"AA+BA;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAGF;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EACxB,aAAa,EACb,cAAyC,EACzC,sBAAoD,EACpD,gBAAuB,EACvB,oBAA4B,EAC5B,qBAAqC,EACrC,cAAoB,EACpB,kBAAiD,EACjD,mBAAwC,EACxC,iBAAyC,EACzC,kBAAqC,EACrC,UAAU,EACV,QAA4B,EAC5B,QAA4B,EAC5B,oBAAuC,GACxC,GAAE,cAAmB,2CA0CrB;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -21,7 +21,6 @@ import { useEffect, useState } from "react";
|
|
|
21
21
|
import login_layout from "../components/layouts/login";
|
|
22
22
|
import { createLayoutDataClient } from "../components/layouts/shared/data/layout_data_client";
|
|
23
23
|
import { create_sqlite_hazo_connect } from "../lib/hazo_connect_setup";
|
|
24
|
-
import { create_app_logger } from "../lib/app_logger";
|
|
25
24
|
// section: constants
|
|
26
25
|
const DEFAULT_IMAGE_SRC = "/globe.svg";
|
|
27
26
|
const DEFAULT_IMAGE_ALT = "Illustration of a globe representing secure authentication workflows";
|
|
@@ -35,20 +34,17 @@ const DEFAULT_IMAGE_BG = "#e2e8f0";
|
|
|
35
34
|
*/
|
|
36
35
|
export function LoginPage({ redirectRoute, successMessage = "Successfully logged in", alreadyLoggedInMessage = "You are already logged in", showLogoutButton = true, showReturnHomeButton = false, returnHomeButtonLabel = "Return home", returnHomePath = "/", forgotPasswordPath = "/hazo_auth/forgot_password", forgotPasswordLabel = "Forgot password?", createAccountPath = "/hazo_auth/register", createAccountLabel = "Create account", urlOnLogon, imageSrc = DEFAULT_IMAGE_SRC, imageAlt = DEFAULT_IMAGE_ALT, imageBackgroundColor = DEFAULT_IMAGE_BG, } = {}) {
|
|
37
36
|
const [dataClient, setDataClient] = useState(null);
|
|
38
|
-
const [logger, setLogger] = useState(null);
|
|
39
37
|
useEffect(() => {
|
|
40
|
-
// Initialize hazo_connect
|
|
38
|
+
// Initialize hazo_connect on client side
|
|
41
39
|
const hazoConnect = create_sqlite_hazo_connect();
|
|
42
40
|
const client = createLayoutDataClient(hazoConnect);
|
|
43
|
-
const appLogger = create_app_logger();
|
|
44
41
|
setDataClient(client);
|
|
45
|
-
setLogger(appLogger);
|
|
46
42
|
}, []);
|
|
47
43
|
// Show loading state while initializing
|
|
48
|
-
if (!dataClient
|
|
44
|
+
if (!dataClient) {
|
|
49
45
|
return (_jsx("div", { className: "cls_login_page_loading flex items-center justify-center min-h-screen", children: _jsx("div", { className: "text-slate-600 animate-pulse", children: "Loading..." }) }));
|
|
50
46
|
}
|
|
51
47
|
const LoginLayout = login_layout;
|
|
52
|
-
return (_jsx(LoginLayout, { image_src: imageSrc, image_alt: imageAlt, image_background_color: imageBackgroundColor, data_client: dataClient,
|
|
48
|
+
return (_jsx(LoginLayout, { image_src: imageSrc, image_alt: imageAlt, image_background_color: imageBackgroundColor, data_client: dataClient, redirectRoute: redirectRoute, successMessage: successMessage, alreadyLoggedInMessage: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, forgot_password_path: forgotPasswordPath, forgot_password_label: forgotPasswordLabel, create_account_path: createAccountPath, create_account_label: createAccountLabel, urlOnLogon: urlOnLogon }));
|
|
53
49
|
}
|
|
54
50
|
export default LoginPage;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type OrgManagementPageProps = {
|
|
2
|
+
/** Title displayed at the top */
|
|
3
|
+
title?: string;
|
|
4
|
+
/** Description displayed below the title */
|
|
5
|
+
description?: string;
|
|
6
|
+
/** Required permission for org management (default: hazo_perm_org_management) */
|
|
7
|
+
requiredPermission?: string;
|
|
8
|
+
/** Permission for global admin access (default: hazo_org_global_admin) */
|
|
9
|
+
globalAdminPermission?: string;
|
|
10
|
+
/** Message shown when authentication is required */
|
|
11
|
+
authRequiredMessage?: string;
|
|
12
|
+
/** Message shown when permission is denied */
|
|
13
|
+
permissionDeniedMessage?: string;
|
|
14
|
+
/** Message shown when multi-tenancy is disabled */
|
|
15
|
+
multiTenancyDisabledMessage?: string;
|
|
16
|
+
/** Additional CSS classes */
|
|
17
|
+
className?: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Zero-config organization management page component
|
|
21
|
+
* Uses sensible defaults and can be customized via props
|
|
22
|
+
* @param props - Optional configuration overrides
|
|
23
|
+
* @returns Organization management page component
|
|
24
|
+
*/
|
|
25
|
+
export declare function OrgManagementPage({ title, description, requiredPermission, globalAdminPermission, authRequiredMessage, permissionDeniedMessage, multiTenancyDisabledMessage, className, }?: OrgManagementPageProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export default OrgManagementPage;
|
|
27
|
+
//# sourceMappingURL=org_management.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org_management.d.ts","sourceRoot":"","sources":["../../src/page_components/org_management.tsx"],"names":[],"mappings":"AAQA,MAAM,MAAM,sBAAsB,GAAG;IACnC,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,8CAA8C;IAC9C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,mDAAmD;IACnD,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAGF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAiC,EACjC,WAAiE,EACjE,kBAA+C,EAC/C,qBAA+C,EAC/C,mBAAwE,EACxE,uBAA4F,EAC5F,2BAAkF,EAClF,SAAS,GACV,GAAE,sBAA2B,2CAe7B;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// file_description: zero-config organization management page component for hazo_auth
|
|
2
|
+
// Consumers can use this directly without needing to configure props
|
|
3
|
+
"use client";
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
// section: imports
|
|
6
|
+
import org_management_layout from "../components/layouts/org_management";
|
|
7
|
+
// section: component
|
|
8
|
+
/**
|
|
9
|
+
* Zero-config organization management page component
|
|
10
|
+
* Uses sensible defaults and can be customized via props
|
|
11
|
+
* @param props - Optional configuration overrides
|
|
12
|
+
* @returns Organization management page component
|
|
13
|
+
*/
|
|
14
|
+
export function OrgManagementPage({ title = "Organization Management", description = "Manage your organization hierarchy and structure.", requiredPermission = "hazo_perm_org_management", globalAdminPermission = "hazo_org_global_admin", authRequiredMessage = "Please log in to access organization management.", permissionDeniedMessage = "You need organization management permission to access this page.", multiTenancyDisabledMessage = "Multi-tenancy is not enabled in the configuration.", className, } = {}) {
|
|
15
|
+
const OrgManagementLayout = org_management_layout;
|
|
16
|
+
return (_jsx(OrgManagementLayout, { title: title, description: description, requiredPermission: requiredPermission, globalAdminPermission: globalAdminPermission, authRequiredMessage: authRequiredMessage, permissionDeniedMessage: permissionDeniedMessage, multiTenancyDisabledMessage: multiTenancyDisabledMessage, className: className }));
|
|
17
|
+
}
|
|
18
|
+
export default OrgManagementPage;
|
|
@@ -4,7 +4,7 @@ import fs from "fs";
|
|
|
4
4
|
import path from "path";
|
|
5
5
|
import axios from "axios";
|
|
6
6
|
import { HazoConfig } from "hazo_config/dist/lib";
|
|
7
|
-
import {
|
|
7
|
+
import { createLogger } from "hazo_logs";
|
|
8
8
|
const is_string_record = (value) => !!value &&
|
|
9
9
|
typeof value === "object" &&
|
|
10
10
|
!Array.isArray(value) &&
|
|
@@ -265,7 +265,7 @@ const create_emailer_client = (emailer_options, logger) => {
|
|
|
265
265
|
// section: loader
|
|
266
266
|
export const load_runtime_configuration = (options) => {
|
|
267
267
|
var _a, _b, _c;
|
|
268
|
-
const fallback_logger =
|
|
268
|
+
const fallback_logger = createLogger("hazo_auth_config");
|
|
269
269
|
const parsed_options = sanitize_configuration_options(options, fallback_logger);
|
|
270
270
|
const direct_configuration = parsed_options.direct_configuration;
|
|
271
271
|
const logger = (_a = direct_configuration === null || direct_configuration === void 0 ? void 0 : direct_configuration.logger) !== null && _a !== void 0 ? _a : fallback_logger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,IAAI,CAgBjD,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -3,13 +3,12 @@ var _a;
|
|
|
3
3
|
// section: imports
|
|
4
4
|
import http from "http";
|
|
5
5
|
import { create_server_app } from "./server";
|
|
6
|
-
import {
|
|
6
|
+
import { createLogger } from "hazo_logs";
|
|
7
7
|
// section: constants
|
|
8
8
|
const default_port = Number((_a = process.env.PORT) !== null && _a !== void 0 ? _a : 4100);
|
|
9
|
-
const server_namespace = "hazo_auth_server";
|
|
10
9
|
// section: bootstrap_runner
|
|
11
10
|
export const start_server = async () => {
|
|
12
|
-
const logger =
|
|
11
|
+
const logger = createLogger("hazo_auth_server");
|
|
13
12
|
const app = create_server_app();
|
|
14
13
|
const http_server = http.createServer(app);
|
|
15
14
|
return new Promise((resolve, reject) => {
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import type { Request } from "express";
|
|
2
|
-
|
|
3
|
-
export type
|
|
4
|
-
|
|
5
|
-
info: logger_method;
|
|
6
|
-
warn: logger_method;
|
|
7
|
-
error: logger_method;
|
|
8
|
-
};
|
|
2
|
+
import type { Logger, LogData } from "hazo_logs";
|
|
3
|
+
export type logger_method = (message: string, data?: LogData) => void;
|
|
4
|
+
export type logger_service = Logger;
|
|
9
5
|
export type emailer_client = {
|
|
10
6
|
send_message: (payload: Record<string, unknown>) => Promise<{
|
|
11
7
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app_types.d.ts","sourceRoot":"","sources":["../../../src/server/types/app_types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"app_types.d.ts","sourceRoot":"","sources":["../../../src/server/types/app_types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIjD,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,KACX,IAAI,CAAC;AAGV,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAGpC,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,CACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB;IACE,QAAQ,EAAE,cAAc,GAAG,cAAc,GAAG,UAAU,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;CACpB,GACD,SAAS,CAAC;AAEd,MAAM,MAAM,qBAAqB,GAAG;IAClC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,oBAAoB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,mBAAmB,CAAC;IAChC,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,qBAAqB,CAAC;CAC/B,CAAC;AAGF,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,GAAG;IACnD,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,WAAW,CAAC;CACtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/login_client_wrapper.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/login_client_wrapper.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,UAAU,GAAG,sBAAsB,GAAG,OAAO,CAAC,GAAG;IACpH,SAAS,EAAE,MAAM,GAAG,eAAe,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAGF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,GACN,EAAE,uBAAuB,2CAwCzB"}
|
|
@@ -6,7 +6,6 @@ import { useEffect, useState } from "react";
|
|
|
6
6
|
import LoginLayout from "../components/layouts/login";
|
|
7
7
|
import { createLayoutDataClient } from "../components/layouts/shared/data/layout_data_client";
|
|
8
8
|
import { create_sqlite_hazo_connect } from "../lib/hazo_connect_setup";
|
|
9
|
-
import { create_app_logger } from "../lib/app_logger";
|
|
10
9
|
// section: component
|
|
11
10
|
/**
|
|
12
11
|
* Client wrapper for LoginLayout
|
|
@@ -24,6 +23,5 @@ export function LoginClientWrapper({ image_src, image_alt, image_background_colo
|
|
|
24
23
|
if (!dataClient) {
|
|
25
24
|
return (_jsx("div", { className: "cls_login_page_loading flex items-center justify-center min-h-screen", children: _jsx("div", { className: "text-slate-600 animate-pulse", children: "Loading..." }) }));
|
|
26
25
|
}
|
|
27
|
-
|
|
28
|
-
return (_jsx(LoginLayout, { image_src: image_src, image_alt: image_alt, image_background_color: image_background_color, data_client: dataClient, logger: logger, redirectRoute: redirectRoute, successMessage: successMessage, alreadyLoggedInMessage: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, forgot_password_path: forgotPasswordPath, forgot_password_label: forgotPasswordLabel, create_account_path: createAccountPath, create_account_label: createAccountLabel, oauth: oauth }));
|
|
26
|
+
return (_jsx(LoginLayout, { image_src: image_src, image_alt: image_alt, image_background_color: image_background_color, data_client: dataClient, redirectRoute: redirectRoute, successMessage: successMessage, alreadyLoggedInMessage: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, forgot_password_path: forgotPasswordPath, forgot_password_label: forgotPasswordLabel, create_account_path: createAccountPath, create_account_label: createAccountLabel, oauth: oauth }));
|
|
29
27
|
}
|
|
@@ -553,3 +553,33 @@ application_permission_list_defaults = admin_user_management,admin_role_manageme
|
|
|
553
553
|
# - {{user_email}} - User's email address
|
|
554
554
|
# - {{user_name}} - User's name (if available)
|
|
555
555
|
|
|
556
|
+
[hazo_auth__multi_tenancy]
|
|
557
|
+
# Multi-tenancy configuration for organization hierarchy
|
|
558
|
+
# Enables hierarchical organization structures for company-wide access control
|
|
559
|
+
|
|
560
|
+
# Enable multi-tenancy (true/false, default: false)
|
|
561
|
+
# When enabled, users can be assigned to organizations and hazo_get_auth returns org info
|
|
562
|
+
# enable_multi_tenancy = false
|
|
563
|
+
|
|
564
|
+
# Organization cache TTL in minutes (default: 15)
|
|
565
|
+
# Cached org data will be refreshed after this time
|
|
566
|
+
# org_cache_ttl_minutes = 15
|
|
567
|
+
|
|
568
|
+
# Maximum number of org entries to cache (LRU eviction, default: 1000)
|
|
569
|
+
# org_cache_max_entries = 1000
|
|
570
|
+
|
|
571
|
+
# Default user limit for new organizations (0 = unlimited, default: 0)
|
|
572
|
+
# This can be overridden when creating each organization
|
|
573
|
+
# default_user_limit = 0
|
|
574
|
+
|
|
575
|
+
# Permissions required:
|
|
576
|
+
# - hazo_perm_org_management: CRUD operations on organizations
|
|
577
|
+
# - hazo_org_global_admin: View/manage ALL organizations across the system
|
|
578
|
+
|
|
579
|
+
# API endpoints (when multi-tenancy is enabled):
|
|
580
|
+
# - GET /api/hazo_auth/org_management/orgs?action=list - List organizations
|
|
581
|
+
# - GET /api/hazo_auth/org_management/orgs?action=tree - Get organization hierarchy tree
|
|
582
|
+
# - POST /api/hazo_auth/org_management/orgs - Create organization
|
|
583
|
+
# - PATCH /api/hazo_auth/org_management/orgs - Update organization
|
|
584
|
+
# - DELETE /api/hazo_auth/org_management/orgs?org_id=... - Soft delete (deactivate)
|
|
585
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hazo_auth",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.4.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -44,6 +44,14 @@
|
|
|
44
44
|
"types": "./dist/components/layouts/user_management/index.d.ts",
|
|
45
45
|
"import": "./dist/components/layouts/user_management/index.js"
|
|
46
46
|
},
|
|
47
|
+
"./components/layouts/dev_lock": {
|
|
48
|
+
"types": "./dist/components/layouts/dev_lock/index.d.ts",
|
|
49
|
+
"import": "./dist/components/layouts/dev_lock/index.js"
|
|
50
|
+
},
|
|
51
|
+
"./components/layouts/org_management": {
|
|
52
|
+
"types": "./dist/components/layouts/org_management/index.d.ts",
|
|
53
|
+
"import": "./dist/components/layouts/org_management/index.js"
|
|
54
|
+
},
|
|
47
55
|
"./components/layouts/shared": {
|
|
48
56
|
"types": "./dist/components/layouts/shared/index.d.ts",
|
|
49
57
|
"import": "./dist/components/layouts/shared/index.js"
|
|
@@ -115,6 +123,18 @@
|
|
|
115
123
|
"./page_components/verify_email": {
|
|
116
124
|
"types": "./dist/page_components/verify_email.d.ts",
|
|
117
125
|
"import": "./dist/page_components/verify_email.js"
|
|
126
|
+
},
|
|
127
|
+
"./page_components/dev_lock": {
|
|
128
|
+
"types": "./dist/page_components/dev_lock.d.ts",
|
|
129
|
+
"import": "./dist/page_components/dev_lock.js"
|
|
130
|
+
},
|
|
131
|
+
"./page_components/org_management": {
|
|
132
|
+
"types": "./dist/page_components/org_management.d.ts",
|
|
133
|
+
"import": "./dist/page_components/org_management.js"
|
|
134
|
+
},
|
|
135
|
+
"./page_components/my_settings": {
|
|
136
|
+
"types": "./dist/page_components/my_settings.d.ts",
|
|
137
|
+
"import": "./dist/page_components/my_settings.js"
|
|
118
138
|
}
|
|
119
139
|
},
|
|
120
140
|
"files": [
|
|
@@ -174,8 +194,9 @@
|
|
|
174
194
|
"gravatar-url": "^4.0.1",
|
|
175
195
|
"handlebars": "^4.7.8",
|
|
176
196
|
"hazo_config": "^1.3.0",
|
|
177
|
-
"hazo_connect": "^2.
|
|
197
|
+
"hazo_connect": "^2.3.5",
|
|
178
198
|
"hazo_notify": "^1.0.0",
|
|
199
|
+
"hazo_ui": "^2.0.0",
|
|
179
200
|
"helmet": "^8.1.0",
|
|
180
201
|
"ini": "^6.0.0",
|
|
181
202
|
"jose": "^5.9.6",
|
|
@@ -195,13 +216,18 @@
|
|
|
195
216
|
"tsx": "^4.20.6",
|
|
196
217
|
"zod": "^4.1.12"
|
|
197
218
|
},
|
|
219
|
+
"peerDependencies": {
|
|
220
|
+
"hazo_logs": "^1.0.0"
|
|
221
|
+
},
|
|
198
222
|
"devDependencies": {
|
|
223
|
+
"hazo_logs": "file:./hazo_logs-1.0.3.tgz",
|
|
199
224
|
"@chromatic-com/storybook": "^4.1.2",
|
|
200
225
|
"@storybook/addon-a11y": "^10.0.6",
|
|
201
226
|
"@storybook/addon-docs": "^10.0.6",
|
|
202
227
|
"@storybook/addon-onboarding": "^10.0.6",
|
|
203
228
|
"@storybook/addon-vitest": "^10.0.6",
|
|
204
229
|
"@storybook/nextjs": "^10.0.6",
|
|
230
|
+
"@testing-library/dom": "^10.4.1",
|
|
205
231
|
"@testing-library/jest-dom": "^6.6.3",
|
|
206
232
|
"@testing-library/react": "^16.0.1",
|
|
207
233
|
"@types/better-sqlite3": "^7.6.13",
|
|
@@ -224,6 +250,7 @@
|
|
|
224
250
|
"jest": "^30.2.0",
|
|
225
251
|
"jest-environment-jsdom": "^29.7.0",
|
|
226
252
|
"patch-package": "^8.0.1",
|
|
253
|
+
"playwright": "^1.57.0",
|
|
227
254
|
"postcss": "^8",
|
|
228
255
|
"storybook": "^10.0.6",
|
|
229
256
|
"supertest": "^7.1.4",
|