hazo_auth 4.3.0 → 4.4.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 (105) hide show
  1. package/cli-src/lib/already_logged_in_config.server.ts +1 -1
  2. package/cli-src/lib/app_logger.ts +1 -1
  3. package/cli-src/lib/auth/auth_types.ts +7 -0
  4. package/cli-src/lib/auth/auth_utils.server.ts +2 -2
  5. package/cli-src/lib/auth/dev_lock_validator.edge.ts +171 -0
  6. package/cli-src/lib/auth/hazo_get_auth.server.ts +84 -13
  7. package/cli-src/lib/auth/index.ts +5 -5
  8. package/cli-src/lib/auth/nextauth_config.ts +4 -4
  9. package/cli-src/lib/auth/org_cache.ts +148 -0
  10. package/cli-src/lib/auth/server_auth.ts +2 -2
  11. package/cli-src/lib/auth/session_token_validator.edge.ts +1 -0
  12. package/cli-src/lib/auth_utility_config.server.ts +1 -1
  13. package/cli-src/lib/config/config_loader.server.ts +1 -1
  14. package/cli-src/lib/config/default_config.ts +44 -0
  15. package/cli-src/lib/dev_lock_config.server.ts +148 -0
  16. package/cli-src/lib/email_verification_config.server.ts +3 -3
  17. package/cli-src/lib/file_types_config.server.ts +1 -1
  18. package/cli-src/lib/forgot_password_config.server.ts +3 -3
  19. package/cli-src/lib/hazo_connect_instance.server.ts +2 -2
  20. package/cli-src/lib/hazo_connect_setup.server.ts +2 -2
  21. package/cli-src/lib/index.ts +24 -24
  22. package/cli-src/lib/login_config.server.ts +4 -4
  23. package/cli-src/lib/messages_config.server.ts +1 -1
  24. package/cli-src/lib/multi_tenancy_config.server.ts +94 -0
  25. package/cli-src/lib/my_settings_config.server.ts +7 -7
  26. package/cli-src/lib/oauth_config.server.ts +2 -2
  27. package/cli-src/lib/password_requirements_config.server.ts +2 -2
  28. package/cli-src/lib/profile_pic_menu_config.server.ts +1 -1
  29. package/cli-src/lib/profile_picture_config.server.ts +2 -2
  30. package/cli-src/lib/register_config.server.ts +5 -5
  31. package/cli-src/lib/reset_password_config.server.ts +4 -4
  32. package/cli-src/lib/scope_hierarchy_config.server.ts +2 -2
  33. package/cli-src/lib/services/email_service.ts +2 -2
  34. package/cli-src/lib/services/email_verification_service.ts +3 -3
  35. package/cli-src/lib/services/login_service.ts +3 -3
  36. package/cli-src/lib/services/oauth_service.ts +4 -4
  37. package/cli-src/lib/services/org_service.ts +965 -0
  38. package/cli-src/lib/services/password_change_service.ts +3 -3
  39. package/cli-src/lib/services/password_reset_service.ts +3 -3
  40. package/cli-src/lib/services/profile_picture_remove_service.ts +3 -3
  41. package/cli-src/lib/services/profile_picture_service.ts +5 -5
  42. package/cli-src/lib/services/registration_service.ts +8 -8
  43. package/cli-src/lib/services/scope_labels_service.ts +3 -3
  44. package/cli-src/lib/services/scope_service.ts +2 -2
  45. package/cli-src/lib/services/session_token_service.ts +3 -2
  46. package/cli-src/lib/services/token_service.ts +2 -2
  47. package/cli-src/lib/services/user_profiles_service.ts +4 -4
  48. package/cli-src/lib/services/user_scope_service.ts +3 -3
  49. package/cli-src/lib/services/user_update_service.ts +4 -4
  50. package/cli-src/lib/ui_shell_config.server.ts +1 -1
  51. package/cli-src/lib/ui_sizes_config.server.ts +1 -1
  52. package/cli-src/lib/user_fields_config.server.ts +1 -1
  53. package/cli-src/lib/user_management_config.server.ts +1 -1
  54. package/cli-src/lib/user_profiles_config.server.ts +1 -1
  55. package/cli-src/lib/utils/error_sanitizer.ts +1 -1
  56. package/cli-src/server/types/app_types.ts +74 -0
  57. package/cli-src/server/types/express.d.ts +16 -0
  58. package/dist/components/layouts/dev_lock/index.d.ts +29 -0
  59. package/dist/components/layouts/dev_lock/index.d.ts.map +1 -0
  60. package/dist/components/layouts/dev_lock/index.js +60 -0
  61. package/dist/components/layouts/index.d.ts +2 -0
  62. package/dist/components/layouts/index.d.ts.map +1 -1
  63. package/dist/components/layouts/index.js +1 -0
  64. package/dist/components/layouts/org_management/index.d.ts +26 -0
  65. package/dist/components/layouts/org_management/index.d.ts.map +1 -0
  66. package/dist/components/layouts/org_management/index.js +75 -0
  67. package/dist/components/layouts/user_management/components/org_hierarchy_tab.d.ts +13 -0
  68. package/dist/components/layouts/user_management/components/org_hierarchy_tab.d.ts.map +1 -0
  69. package/dist/components/layouts/user_management/components/org_hierarchy_tab.js +276 -0
  70. package/dist/components/layouts/user_management/index.d.ts +3 -1
  71. package/dist/components/layouts/user_management/index.d.ts.map +1 -1
  72. package/dist/components/layouts/user_management/index.js +10 -4
  73. package/dist/lib/auth/auth_types.d.ts +6 -0
  74. package/dist/lib/auth/auth_types.d.ts.map +1 -1
  75. package/dist/lib/auth/dev_lock_validator.edge.d.ts +38 -0
  76. package/dist/lib/auth/dev_lock_validator.edge.d.ts.map +1 -0
  77. package/dist/lib/auth/dev_lock_validator.edge.js +122 -0
  78. package/dist/lib/auth/hazo_get_auth.server.d.ts.map +1 -1
  79. package/dist/lib/auth/hazo_get_auth.server.js +61 -1
  80. package/dist/lib/auth/org_cache.d.ts +65 -0
  81. package/dist/lib/auth/org_cache.d.ts.map +1 -0
  82. package/dist/lib/auth/org_cache.js +103 -0
  83. package/dist/lib/config/default_config.d.ts +76 -0
  84. package/dist/lib/config/default_config.d.ts.map +1 -1
  85. package/dist/lib/config/default_config.js +42 -0
  86. package/dist/lib/dev_lock_config.server.d.ts +41 -0
  87. package/dist/lib/dev_lock_config.server.d.ts.map +1 -0
  88. package/dist/lib/dev_lock_config.server.js +50 -0
  89. package/dist/lib/multi_tenancy_config.server.d.ts +30 -0
  90. package/dist/lib/multi_tenancy_config.server.d.ts.map +1 -0
  91. package/dist/lib/multi_tenancy_config.server.js +41 -0
  92. package/dist/lib/services/org_service.d.ts +191 -0
  93. package/dist/lib/services/org_service.d.ts.map +1 -0
  94. package/dist/lib/services/org_service.js +746 -0
  95. package/dist/page_components/dev_lock.d.ts +11 -0
  96. package/dist/page_components/dev_lock.d.ts.map +1 -0
  97. package/dist/page_components/dev_lock.js +17 -0
  98. package/dist/page_components/index.d.ts +1 -0
  99. package/dist/page_components/index.d.ts.map +1 -1
  100. package/dist/page_components/index.js +1 -0
  101. package/dist/page_components/org_management.d.ts +27 -0
  102. package/dist/page_components/org_management.d.ts.map +1 -0
  103. package/dist/page_components/org_management.js +18 -0
  104. package/hazo_auth_config.example.ini +30 -0
  105. package/package.json +23 -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";
@@ -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;
@@ -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.0",
3
+ "version": "4.4.0",
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,7 +194,7 @@
174
194
  "gravatar-url": "^4.0.1",
175
195
  "handlebars": "^4.7.8",
176
196
  "hazo_config": "^1.3.0",
177
- "hazo_connect": "^2.0.0",
197
+ "hazo_connect": "^2.3.5",
178
198
  "hazo_notify": "^1.0.0",
179
199
  "helmet": "^8.1.0",
180
200
  "ini": "^6.0.0",
@@ -202,6 +222,7 @@
202
222
  "@storybook/addon-onboarding": "^10.0.6",
203
223
  "@storybook/addon-vitest": "^10.0.6",
204
224
  "@storybook/nextjs": "^10.0.6",
225
+ "@testing-library/dom": "^10.4.1",
205
226
  "@testing-library/jest-dom": "^6.6.3",
206
227
  "@testing-library/react": "^16.0.1",
207
228
  "@types/better-sqlite3": "^7.6.13",