hazo_auth 4.4.0 → 4.5.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 (110) hide show
  1. package/README.md +207 -5
  2. package/SETUP_CHECKLIST.md +1 -1
  3. package/cli-src/lib/app_logger.ts +8 -18
  4. package/cli-src/lib/auth/auth_types.ts +22 -0
  5. package/cli-src/lib/auth/hazo_get_auth.server.ts +25 -1
  6. package/cli-src/lib/auth/session_token_validator.edge.ts +4 -0
  7. package/cli-src/lib/config/default_config.ts +36 -0
  8. package/cli-src/lib/navbar_config.server.ts +129 -0
  9. package/cli-src/lib/scope_hierarchy_config.server.ts +3 -14
  10. package/cli-src/lib/services/registration_service.ts +12 -0
  11. package/cli-src/lib/services/scope_labels_service.ts +21 -21
  12. package/cli-src/lib/services/scope_service.ts +15 -11
  13. package/cli-src/lib/services/session_token_service.ts +4 -0
  14. package/cli-src/lib/ui_shell_config.server.ts +15 -0
  15. package/cli-src/lib/user_types_config.server.ts +178 -0
  16. package/cli-src/server/types/app_types.ts +5 -7
  17. package/dist/app/api/hazo_auth/me/route.d.ts.map +1 -1
  18. package/dist/app/api/hazo_auth/me/route.js +17 -0
  19. package/dist/app/api/hazo_auth/org_management/orgs/route.d.ts +26 -0
  20. package/dist/app/api/hazo_auth/org_management/orgs/route.d.ts.map +1 -0
  21. package/dist/app/api/hazo_auth/org_management/orgs/route.js +315 -0
  22. package/dist/app/api/hazo_auth/user_management/users/route.d.ts +7 -0
  23. package/dist/app/api/hazo_auth/user_management/users/route.d.ts.map +1 -1
  24. package/dist/app/api/hazo_auth/user_management/users/route.js +48 -10
  25. package/dist/components/layouts/login/hooks/use_login_form.js +2 -2
  26. package/dist/components/layouts/my_settings/components/profile_picture_library_tab.d.ts.map +1 -1
  27. package/dist/components/layouts/my_settings/components/profile_picture_library_tab.js +8 -14
  28. package/dist/components/layouts/rbac_test/index.d.ts +1 -3
  29. package/dist/components/layouts/rbac_test/index.d.ts.map +1 -1
  30. package/dist/components/layouts/rbac_test/index.js +2 -2
  31. package/dist/components/layouts/shared/components/auth_navbar.d.ts +26 -0
  32. package/dist/components/layouts/shared/components/auth_navbar.d.ts.map +1 -0
  33. package/dist/components/layouts/shared/components/auth_navbar.js +14 -0
  34. package/dist/components/layouts/shared/components/auth_page_shell.d.ts +3 -1
  35. package/dist/components/layouts/shared/components/auth_page_shell.d.ts.map +1 -1
  36. package/dist/components/layouts/shared/components/auth_page_shell.js +17 -2
  37. package/dist/components/layouts/shared/components/standalone_layout_wrapper.d.ts +6 -1
  38. package/dist/components/layouts/shared/components/standalone_layout_wrapper.d.ts.map +1 -1
  39. package/dist/components/layouts/shared/components/standalone_layout_wrapper.js +7 -2
  40. package/dist/components/layouts/shared/index.d.ts +2 -0
  41. package/dist/components/layouts/shared/index.d.ts.map +1 -1
  42. package/dist/components/layouts/shared/index.js +1 -0
  43. package/dist/components/layouts/user_management/components/scope_hierarchy_tab.d.ts +3 -2
  44. package/dist/components/layouts/user_management/components/scope_hierarchy_tab.d.ts.map +1 -1
  45. package/dist/components/layouts/user_management/components/scope_hierarchy_tab.js +45 -18
  46. package/dist/components/layouts/user_management/components/scope_labels_tab.d.ts +3 -2
  47. package/dist/components/layouts/user_management/components/scope_labels_tab.d.ts.map +1 -1
  48. package/dist/components/layouts/user_management/components/scope_labels_tab.js +48 -20
  49. package/dist/components/layouts/user_management/components/user_scopes_tab.d.ts.map +1 -1
  50. package/dist/components/layouts/user_management/components/user_scopes_tab.js +1 -1
  51. package/dist/components/layouts/user_management/index.d.ts +11 -3
  52. package/dist/components/layouts/user_management/index.d.ts.map +1 -1
  53. package/dist/components/layouts/user_management/index.js +52 -5
  54. package/dist/components/ui/button.d.ts +1 -1
  55. package/dist/components/ui/user-type-badge.d.ts +23 -0
  56. package/dist/components/ui/user-type-badge.d.ts.map +1 -0
  57. package/dist/components/ui/user-type-badge.js +42 -0
  58. package/dist/lib/app_logger.d.ts +3 -9
  59. package/dist/lib/app_logger.d.ts.map +1 -1
  60. package/dist/lib/app_logger.js +7 -10
  61. package/dist/lib/auth/auth_types.d.ts +17 -0
  62. package/dist/lib/auth/auth_types.d.ts.map +1 -1
  63. package/dist/lib/auth/auth_types.js +11 -0
  64. package/dist/lib/auth/hazo_get_auth.server.d.ts.map +1 -1
  65. package/dist/lib/auth/hazo_get_auth.server.js +21 -1
  66. package/dist/lib/config/default_config.d.ts +60 -0
  67. package/dist/lib/config/default_config.d.ts.map +1 -1
  68. package/dist/lib/config/default_config.js +34 -0
  69. package/dist/lib/navbar_config.server.d.ts +36 -0
  70. package/dist/lib/navbar_config.server.d.ts.map +1 -0
  71. package/dist/lib/navbar_config.server.js +45 -0
  72. package/dist/lib/scope_hierarchy_config.server.d.ts +3 -7
  73. package/dist/lib/scope_hierarchy_config.server.d.ts.map +1 -1
  74. package/dist/lib/scope_hierarchy_config.server.js +1 -10
  75. package/dist/lib/services/registration_service.d.ts.map +1 -1
  76. package/dist/lib/services/registration_service.js +8 -0
  77. package/dist/lib/services/scope_labels_service.d.ts +7 -7
  78. package/dist/lib/services/scope_labels_service.d.ts.map +1 -1
  79. package/dist/lib/services/scope_labels_service.js +20 -20
  80. package/dist/lib/services/scope_service.d.ts +8 -5
  81. package/dist/lib/services/scope_service.d.ts.map +1 -1
  82. package/dist/lib/services/scope_service.js +9 -8
  83. package/dist/lib/ui_shell_config.server.d.ts +5 -0
  84. package/dist/lib/ui_shell_config.server.d.ts.map +1 -1
  85. package/dist/lib/ui_shell_config.server.js +5 -0
  86. package/dist/lib/user_types_config.server.d.ts +56 -0
  87. package/dist/lib/user_types_config.server.d.ts.map +1 -0
  88. package/dist/lib/user_types_config.server.js +100 -0
  89. package/dist/page_components/login.d.ts.map +1 -1
  90. package/dist/page_components/login.js +3 -7
  91. package/dist/server/config/config_loader.js +2 -2
  92. package/dist/server/index.d.ts.map +1 -1
  93. package/dist/server/index.js +2 -3
  94. package/dist/server/routes/index.d.ts +1 -0
  95. package/dist/server/routes/index.d.ts.map +1 -1
  96. package/dist/server/routes/index.js +2 -0
  97. package/dist/server/routes/org_management_orgs.d.ts +2 -0
  98. package/dist/server/routes/org_management_orgs.d.ts.map +1 -0
  99. package/dist/server/routes/org_management_orgs.js +2 -0
  100. package/dist/server/types/app_types.d.ts +3 -7
  101. package/dist/server/types/app_types.d.ts.map +1 -1
  102. package/dist/server_pages/login_client_wrapper.d.ts.map +1 -1
  103. package/dist/server_pages/login_client_wrapper.js +1 -3
  104. package/hazo_auth_config.example.ini +9 -0
  105. package/package.json +7 -1
  106. package/cli-src/server/logging/logger_service.ts +0 -56
  107. /package/public/profile_pictures/library/Cars/{050 - citroe/314/210n_c3.jpeg" → 050 - citro/303/253n_c3.jpeg"} +0 -0
  108. /package/public/profile_pictures/library/Cars/{064 - lamborghini_huraca/314/201n.jpeg" → 064 - lamborghini_hurac/303/241n.jpeg"} +0 -0
  109. /package/public/profile_pictures/library/Cars/{099 - citroe/314/210n_2cv_(classic).jpeg" → 099 - citro/303/253n_2cv_(classic).jpeg"} +0 -0
  110. /package/public/profile_pictures/library/Cars/{131 - lamborghini_huraca/314/201n_sto.jpeg" → 131 - lamborghini_hurac/303/241n_sto.jpeg"} +0 -0
@@ -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 and logger on client side
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 || !logger) {
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, 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, urlOnLogon: urlOnLogon }));
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;
@@ -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 { create_logger_service } from "../logging/logger_service";
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 = create_logger_service("hazo_auth_config");
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":"AAWA,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,IAAI,CAgBjD,CAAC"}
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"}
@@ -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 { create_logger_service } from "./logging/logger_service";
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 = create_logger_service(server_namespace);
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) => {
@@ -20,4 +20,5 @@ export { GET as userManagementUsersGET, PATCH as userManagementUsersPATCH, POST
20
20
  export { GET as userManagementPermissionsGET, POST as userManagementPermissionsPOST, PUT as userManagementPermissionsPUT, DELETE as userManagementPermissionsDELETE } from "./user_management_permissions.js";
21
21
  export { GET as userManagementRolesGET, POST as userManagementRolesPOST, PUT as userManagementRolesPUT } from "./user_management_roles.js";
22
22
  export { GET as userManagementUsersRolesGET, POST as userManagementUsersRolesPOST, PUT as userManagementUsersRolesPUT } from "./user_management_users_roles.js";
23
+ export { GET as orgManagementOrgsGET, POST as orgManagementOrgsPOST, PATCH as orgManagementOrgsPATCH, DELETE as orgManagementOrgsDELETE } from "./org_management_orgs.js";
23
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/routes/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,GAAG,IAAI,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGzE,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,MAAM,IAAI,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,GAAG,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,GAAG,IAAI,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAGjF,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,IAAI,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EAAE,GAAG,IAAI,sBAAsB,EAAE,KAAK,IAAI,wBAAwB,EAAE,IAAI,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC/I,OAAO,EAAE,GAAG,IAAI,4BAA4B,EAAE,IAAI,IAAI,6BAA6B,EAAE,GAAG,IAAI,4BAA4B,EAAE,MAAM,IAAI,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAC9M,OAAO,EAAE,GAAG,IAAI,sBAAsB,EAAE,IAAI,IAAI,uBAAuB,EAAE,GAAG,IAAI,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAC3I,OAAO,EAAE,GAAG,IAAI,2BAA2B,EAAE,IAAI,IAAI,4BAA4B,EAAE,GAAG,IAAI,2BAA2B,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/routes/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,GAAG,IAAI,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGzE,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,MAAM,IAAI,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,GAAG,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,GAAG,IAAI,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAGjF,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,IAAI,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EAAE,GAAG,IAAI,sBAAsB,EAAE,KAAK,IAAI,wBAAwB,EAAE,IAAI,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC/I,OAAO,EAAE,GAAG,IAAI,4BAA4B,EAAE,IAAI,IAAI,6BAA6B,EAAE,GAAG,IAAI,4BAA4B,EAAE,MAAM,IAAI,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAC9M,OAAO,EAAE,GAAG,IAAI,sBAAsB,EAAE,IAAI,IAAI,uBAAuB,EAAE,GAAG,IAAI,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAC3I,OAAO,EAAE,GAAG,IAAI,2BAA2B,EAAE,IAAI,IAAI,4BAA4B,EAAE,GAAG,IAAI,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAGhK,OAAO,EAAE,GAAG,IAAI,oBAAoB,EAAE,IAAI,IAAI,qBAAqB,EAAE,KAAK,IAAI,sBAAsB,EAAE,MAAM,IAAI,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -28,3 +28,5 @@ export { GET as userManagementUsersGET, PATCH as userManagementUsersPATCH, POST
28
28
  export { GET as userManagementPermissionsGET, POST as userManagementPermissionsPOST, PUT as userManagementPermissionsPUT, DELETE as userManagementPermissionsDELETE } from "./user_management_permissions.js";
29
29
  export { GET as userManagementRolesGET, POST as userManagementRolesPOST, PUT as userManagementRolesPUT } from "./user_management_roles.js";
30
30
  export { GET as userManagementUsersRolesGET, POST as userManagementUsersRolesPOST, PUT as userManagementUsersRolesPUT } from "./user_management_users_roles.js";
31
+ // Organization management routes
32
+ export { GET as orgManagementOrgsGET, POST as orgManagementOrgsPOST, PATCH as orgManagementOrgsPATCH, DELETE as orgManagementOrgsDELETE } from "./org_management_orgs.js";
@@ -0,0 +1,2 @@
1
+ export { GET, POST, PATCH, DELETE } from "../../app/api/hazo_auth/org_management/orgs/route";
2
+ //# sourceMappingURL=org_management_orgs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org_management_orgs.d.ts","sourceRoot":"","sources":["../../../src/server/routes/org_management_orgs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mDAAmD,CAAC"}
@@ -0,0 +1,2 @@
1
+ // file_description: re-export org management orgs route handlers for use by consuming projects
2
+ export { GET, POST, PATCH, DELETE } from "../../app/api/hazo_auth/org_management/orgs/route";
@@ -1,11 +1,7 @@
1
1
  import type { Request } from "express";
2
- export type logger_method = (message: string, data?: Record<string, unknown>) => void;
3
- export type logger_service = {
4
- debug: logger_method;
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;AAGvC,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,IAAI,CAAC;AAEV,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAGF,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
+ {"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":"AAUA,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,2CA2CzB"}
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
- const logger = create_app_logger();
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
  }
@@ -561,6 +561,15 @@ application_permission_list_defaults = admin_user_management,admin_role_manageme
561
561
  # When enabled, users can be assigned to organizations and hazo_get_auth returns org info
562
562
  # enable_multi_tenancy = false
563
563
 
564
+ # NOTE: When multi-tenancy is enabled, org_id is OPTIONAL by default.
565
+ # Users without org_id will have null org fields in hazo_get_auth result.
566
+ #
567
+ # To REQUIRE org assignment for specific API routes, use:
568
+ # hazo_get_auth(request, { require_org: true })
569
+ #
570
+ # This will throw OrgRequiredError if the user has no org_id assigned.
571
+ # Consuming apps should catch this error and return an appropriate response.
572
+
564
573
  # Organization cache TTL in minutes (default: 15)
565
574
  # Cached org data will be refreshed after this time
566
575
  # org_cache_ttl_minutes = 15
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hazo_auth",
3
- "version": "4.4.0",
3
+ "version": "4.5.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -196,6 +196,7 @@
196
196
  "hazo_config": "^1.3.0",
197
197
  "hazo_connect": "^2.3.5",
198
198
  "hazo_notify": "^1.0.0",
199
+ "hazo_ui": "^2.0.0",
199
200
  "helmet": "^8.1.0",
200
201
  "ini": "^6.0.0",
201
202
  "jose": "^5.9.6",
@@ -215,7 +216,11 @@
215
216
  "tsx": "^4.20.6",
216
217
  "zod": "^4.1.12"
217
218
  },
219
+ "peerDependencies": {
220
+ "hazo_logs": "^1.0.0"
221
+ },
218
222
  "devDependencies": {
223
+ "hazo_logs": "file:./hazo_logs-1.0.3.tgz",
219
224
  "@chromatic-com/storybook": "^4.1.2",
220
225
  "@storybook/addon-a11y": "^10.0.6",
221
226
  "@storybook/addon-docs": "^10.0.6",
@@ -245,6 +250,7 @@
245
250
  "jest": "^30.2.0",
246
251
  "jest-environment-jsdom": "^29.7.0",
247
252
  "patch-package": "^8.0.1",
253
+ "playwright": "^1.57.0",
248
254
  "postcss": "^8",
249
255
  "storybook": "^10.0.6",
250
256
  "supertest": "^7.1.4",
@@ -1,56 +0,0 @@
1
- // file_description: expose the logging facade used across the hazo_auth backend
2
- // section: imports
3
- import type { logger_method, logger_service } from "../types/app_types";
4
-
5
- // section: helper_functions
6
- const create_console_logger = (namespace: string): logger_service => {
7
- const write = (level: string, message: string, data?: Record<string, unknown>) => {
8
- const timestamp = new Date().toISOString();
9
- // eslint-disable-next-line no-console
10
- console.log(
11
- JSON.stringify({
12
- namespace,
13
- level,
14
- message,
15
- data,
16
- timestamp,
17
- })
18
- );
19
- };
20
-
21
- return {
22
- debug: (message, data) => write("debug", message, data),
23
- info: (message, data) => write("info", message, data),
24
- warn: (message, data) => write("warn", message, data),
25
- error: (message, data) => write("error", message, data),
26
- };
27
- };
28
-
29
- // section: factory
30
- export const create_logger_service = (
31
- namespace: string,
32
- external_logger?: Partial<logger_service>
33
- ): logger_service => {
34
- const console_logger = create_console_logger(namespace);
35
-
36
- const safe_bind = (
37
- level: keyof logger_service,
38
- fallback: logger_method
39
- ): logger_method => {
40
- const candidate = external_logger?.[level];
41
- if (typeof candidate === "function") {
42
- return (message, data) => candidate(message, data);
43
- }
44
- return fallback;
45
- };
46
-
47
- type logger_method = (message: string, data?: Record<string, unknown>) => void;
48
-
49
- return {
50
- debug: safe_bind("debug", console_logger.debug),
51
- info: safe_bind("info", console_logger.info),
52
- warn: safe_bind("warn", console_logger.warn),
53
- error: safe_bind("error", console_logger.error),
54
- };
55
- };
56
-