hazo_auth 1.6.4 → 1.6.6

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 (36) hide show
  1. package/README.md +46 -1
  2. package/SETUP_CHECKLIST.md +70 -4
  3. package/dist/app/api/hazo_auth/user_management/permissions/route.d.ts +50 -0
  4. package/dist/app/api/hazo_auth/user_management/permissions/route.d.ts.map +1 -0
  5. package/dist/app/api/hazo_auth/user_management/permissions/route.js +257 -0
  6. package/dist/app/api/hazo_auth/user_management/roles/route.d.ts +40 -0
  7. package/dist/app/api/hazo_auth/user_management/roles/route.d.ts.map +1 -0
  8. package/dist/app/api/hazo_auth/user_management/roles/route.js +352 -0
  9. package/dist/app/api/hazo_auth/user_management/users/roles/route.d.ts +37 -0
  10. package/dist/app/api/hazo_auth/user_management/users/roles/route.d.ts.map +1 -0
  11. package/dist/app/api/hazo_auth/user_management/users/roles/route.js +276 -0
  12. package/dist/app/api/hazo_auth/user_management/users/route.d.ts +39 -0
  13. package/dist/app/api/hazo_auth/user_management/users/route.d.ts.map +1 -0
  14. package/dist/app/api/hazo_auth/user_management/users/route.js +170 -0
  15. package/dist/cli/generate.d.ts.map +1 -1
  16. package/dist/cli/generate.js +38 -5
  17. package/dist/cli/validate.d.ts.map +1 -1
  18. package/dist/cli/validate.js +14 -0
  19. package/dist/components/layouts/user_management/index.js +9 -9
  20. package/dist/server/routes/index.d.ts +4 -0
  21. package/dist/server/routes/index.d.ts.map +1 -1
  22. package/dist/server/routes/index.js +5 -0
  23. package/dist/server/routes/user_management_permissions.d.ts +2 -0
  24. package/dist/server/routes/user_management_permissions.d.ts.map +1 -0
  25. package/dist/server/routes/user_management_permissions.js +2 -0
  26. package/dist/server/routes/user_management_roles.d.ts +2 -0
  27. package/dist/server/routes/user_management_roles.d.ts.map +1 -0
  28. package/dist/server/routes/user_management_roles.js +2 -0
  29. package/dist/server/routes/user_management_users.d.ts +2 -0
  30. package/dist/server/routes/user_management_users.d.ts.map +1 -0
  31. package/dist/server/routes/user_management_users.js +2 -0
  32. package/dist/server/routes/user_management_users_roles.d.ts +2 -0
  33. package/dist/server/routes/user_management_users_roles.d.ts.map +1 -0
  34. package/dist/server/routes/user_management_users_roles.js +2 -0
  35. package/hazo_auth_config.example.ini +1 -1
  36. package/package.json +1 -1
@@ -0,0 +1,39 @@
1
+ import { NextRequest, NextResponse } from "next/server";
2
+ export declare const dynamic = "force-dynamic";
3
+ /**
4
+ * GET - Fetch all users with details or a specific user by id
5
+ * Query params: id (optional) - if provided, returns only that user
6
+ */
7
+ export declare function GET(request: NextRequest): Promise<NextResponse<{
8
+ error: string;
9
+ }> | NextResponse<{
10
+ success: boolean;
11
+ users: {
12
+ id: unknown;
13
+ name: {} | null;
14
+ email_address: unknown;
15
+ email_verified: {};
16
+ is_active: boolean;
17
+ last_logon: {} | null;
18
+ created_at: {} | null;
19
+ profile_picture_url: {} | null;
20
+ profile_source: {} | null;
21
+ }[];
22
+ }>>;
23
+ /**
24
+ * PATCH - Update user (deactivate: set is_active to false)
25
+ */
26
+ export declare function PATCH(request: NextRequest): Promise<NextResponse<{
27
+ error: string;
28
+ }> | NextResponse<{
29
+ success: boolean;
30
+ }>>;
31
+ /**
32
+ * POST - Send password reset email to user
33
+ */
34
+ export declare function POST(request: NextRequest): Promise<NextResponse<{
35
+ error: string;
36
+ }> | NextResponse<{
37
+ success: boolean;
38
+ }>>;
39
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/app/api/hazo_auth/user_management/users/route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAUxD,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAGvC;;;GAGG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,WAAW;;;;;;;;;;;;;;;IA2D7C;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,WAAW;;;;IA0E/C;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW;;;;IA2E9C"}
@@ -0,0 +1,170 @@
1
+ // file_description: API route for user management operations (list users, deactivate, reset password)
2
+ // section: imports
3
+ import { NextResponse } from "next/server";
4
+ import { get_hazo_connect_instance } from "../../../../../lib/hazo_connect_instance.server";
5
+ import { createCrudService } from "hazo_connect/server";
6
+ import { create_app_logger } from "../../../../../lib/app_logger";
7
+ import { get_filename, get_line_number } from "../../../../../lib/utils/api_route_helpers";
8
+ import { request_password_reset } from "../../../../../lib/services/password_reset_service";
9
+ import { get_auth_cache } from "../../../../../lib/auth/auth_cache";
10
+ import { get_auth_utility_config } from "../../../../../lib/auth_utility_config.server";
11
+ // section: route_config
12
+ export const dynamic = 'force-dynamic';
13
+ // section: api_handler
14
+ /**
15
+ * GET - Fetch all users with details or a specific user by id
16
+ * Query params: id (optional) - if provided, returns only that user
17
+ */
18
+ export async function GET(request) {
19
+ const logger = create_app_logger();
20
+ try {
21
+ const { searchParams } = new URL(request.url);
22
+ const user_id = searchParams.get("id");
23
+ const hazoConnect = get_hazo_connect_instance();
24
+ const users_service = createCrudService(hazoConnect, "hazo_users");
25
+ // Fetch users - filter by id if provided, otherwise get all
26
+ const users = await users_service.findBy(user_id ? { id: user_id } : {});
27
+ if (!Array.isArray(users)) {
28
+ return NextResponse.json({ error: "Failed to fetch users" }, { status: 500 });
29
+ }
30
+ logger.info("user_management_users_fetched", {
31
+ filename: get_filename(),
32
+ line_number: get_line_number(),
33
+ user_count: users.length,
34
+ });
35
+ return NextResponse.json({
36
+ success: true,
37
+ users: users.map((user) => ({
38
+ id: user.id,
39
+ name: user.name || null,
40
+ email_address: user.email_address,
41
+ email_verified: user.email_verified || false,
42
+ is_active: user.is_active !== false,
43
+ last_logon: user.last_logon || null,
44
+ created_at: user.created_at || null,
45
+ profile_picture_url: user.profile_picture_url || null,
46
+ profile_source: user.profile_source || null,
47
+ })),
48
+ }, { status: 200 });
49
+ }
50
+ catch (error) {
51
+ const error_message = error instanceof Error ? error.message : "Unknown error";
52
+ const error_stack = error instanceof Error ? error.stack : undefined;
53
+ logger.error("user_management_users_fetch_error", {
54
+ filename: get_filename(),
55
+ line_number: get_line_number(),
56
+ error_message,
57
+ error_stack,
58
+ });
59
+ return NextResponse.json({ error: "Failed to fetch users" }, { status: 500 });
60
+ }
61
+ }
62
+ /**
63
+ * PATCH - Update user (deactivate: set is_active to false)
64
+ */
65
+ export async function PATCH(request) {
66
+ const logger = create_app_logger();
67
+ try {
68
+ const body = await request.json();
69
+ const { user_id, is_active } = body;
70
+ if (!user_id || typeof is_active !== "boolean") {
71
+ return NextResponse.json({ error: "user_id and is_active (boolean) are required" }, { status: 400 });
72
+ }
73
+ const hazoConnect = get_hazo_connect_instance();
74
+ const users_service = createCrudService(hazoConnect, "hazo_users");
75
+ // Update user with changed_at timestamp
76
+ const now = new Date().toISOString();
77
+ await users_service.updateById(user_id, {
78
+ is_active,
79
+ changed_at: now,
80
+ });
81
+ // Invalidate user cache after deactivation
82
+ if (is_active === false) {
83
+ try {
84
+ const config = get_auth_utility_config();
85
+ const cache = get_auth_cache(config.cache_max_users, config.cache_ttl_minutes, config.cache_max_age_minutes);
86
+ cache.invalidate_user(user_id);
87
+ }
88
+ catch (cache_error) {
89
+ // Log but don't fail user update if cache invalidation fails
90
+ const cache_error_message = cache_error instanceof Error ? cache_error.message : "Unknown error";
91
+ logger.warn("user_management_user_cache_invalidation_failed", {
92
+ filename: get_filename(),
93
+ line_number: get_line_number(),
94
+ user_id,
95
+ error: cache_error_message,
96
+ });
97
+ }
98
+ }
99
+ logger.info("user_management_user_updated", {
100
+ filename: get_filename(),
101
+ line_number: get_line_number(),
102
+ user_id,
103
+ is_active,
104
+ });
105
+ return NextResponse.json({ success: true }, { status: 200 });
106
+ }
107
+ catch (error) {
108
+ const error_message = error instanceof Error ? error.message : "Unknown error";
109
+ const error_stack = error instanceof Error ? error.stack : undefined;
110
+ logger.error("user_management_user_update_error", {
111
+ filename: get_filename(),
112
+ line_number: get_line_number(),
113
+ error_message,
114
+ error_stack,
115
+ });
116
+ return NextResponse.json({ error: "Failed to update user" }, { status: 500 });
117
+ }
118
+ }
119
+ /**
120
+ * POST - Send password reset email to user
121
+ */
122
+ export async function POST(request) {
123
+ const logger = create_app_logger();
124
+ try {
125
+ const body = await request.json();
126
+ const { user_id } = body;
127
+ if (!user_id) {
128
+ return NextResponse.json({ error: "user_id is required" }, { status: 400 });
129
+ }
130
+ const hazoConnect = get_hazo_connect_instance();
131
+ const users_service = createCrudService(hazoConnect, "hazo_users");
132
+ // Get user by ID
133
+ const users = await users_service.findBy({ id: user_id });
134
+ if (!Array.isArray(users) || users.length === 0) {
135
+ return NextResponse.json({ error: "User not found" }, { status: 404 });
136
+ }
137
+ const user = users[0];
138
+ const email = user.email_address;
139
+ // Request password reset using existing service
140
+ const result = await request_password_reset(hazoConnect, { email });
141
+ if (!result.success) {
142
+ logger.warn("user_management_password_reset_failed", {
143
+ filename: get_filename(),
144
+ line_number: get_line_number(),
145
+ user_id,
146
+ email,
147
+ error: result.error,
148
+ });
149
+ return NextResponse.json({ error: result.error || "Failed to send password reset email" }, { status: 500 });
150
+ }
151
+ logger.info("user_management_password_reset_sent", {
152
+ filename: get_filename(),
153
+ line_number: get_line_number(),
154
+ user_id,
155
+ email,
156
+ });
157
+ return NextResponse.json({ success: true }, { status: 200 });
158
+ }
159
+ catch (error) {
160
+ const error_message = error instanceof Error ? error.message : "Unknown error";
161
+ const error_stack = error instanceof Error ? error.stack : undefined;
162
+ logger.error("user_management_password_reset_error", {
163
+ filename: get_filename(),
164
+ line_number: get_line_number(),
165
+ error_message,
166
+ error_stack,
167
+ });
168
+ return NextResponse.json({ error: "Failed to send password reset email" }, { status: 500 });
169
+ }
170
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAwJF,wBAAgB,eAAe,CAAC,OAAO,GAAE,eAAoB,GAAG,IAAI,CA8DnE"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AA4LF,wBAAgB,eAAe,CAAC,OAAO,GAAE,eAAoB,GAAG,IAAI,CA8DnE"}
@@ -22,6 +22,20 @@ const ROUTES = [
22
22
  { name: "validate_reset_token", path: "api/hazo_auth/validate_reset_token", method: "GET", export_name: "validateResetTokenGET" },
23
23
  { name: "profile_picture_filename", path: "api/hazo_auth/profile_picture/[filename]", method: "GET", export_name: "profilePictureFilenameGET" },
24
24
  { name: "invalidate_cache", path: "api/hazo_auth/invalidate_cache", method: "POST", export_name: "invalidateCachePOST" },
25
+ // User management routes
26
+ { name: "user_management_users", path: "api/hazo_auth/user_management/users", method: "GET", export_name: "userManagementUsersGET" },
27
+ { name: "user_management_users_patch", path: "api/hazo_auth/user_management/users", method: "PATCH", export_name: "userManagementUsersPATCH" },
28
+ { name: "user_management_users_post", path: "api/hazo_auth/user_management/users", method: "POST", export_name: "userManagementUsersPOST" },
29
+ { name: "user_management_permissions", path: "api/hazo_auth/user_management/permissions", method: "GET", export_name: "userManagementPermissionsGET" },
30
+ { name: "user_management_permissions_post", path: "api/hazo_auth/user_management/permissions", method: "POST", export_name: "userManagementPermissionsPOST" },
31
+ { name: "user_management_permissions_put", path: "api/hazo_auth/user_management/permissions", method: "PUT", export_name: "userManagementPermissionsPUT" },
32
+ { name: "user_management_permissions_delete", path: "api/hazo_auth/user_management/permissions", method: "DELETE", export_name: "userManagementPermissionsDELETE" },
33
+ { name: "user_management_roles", path: "api/hazo_auth/user_management/roles", method: "GET", export_name: "userManagementRolesGET" },
34
+ { name: "user_management_roles_post", path: "api/hazo_auth/user_management/roles", method: "POST", export_name: "userManagementRolesPOST" },
35
+ { name: "user_management_roles_put", path: "api/hazo_auth/user_management/roles", method: "PUT", export_name: "userManagementRolesPUT" },
36
+ { name: "user_management_users_roles", path: "api/hazo_auth/user_management/users/roles", method: "GET", export_name: "userManagementUsersRolesGET" },
37
+ { name: "user_management_users_roles_post", path: "api/hazo_auth/user_management/users/roles", method: "POST", export_name: "userManagementUsersRolesPOST" },
38
+ { name: "user_management_users_roles_put", path: "api/hazo_auth/user_management/users/roles", method: "PUT", export_name: "userManagementUsersRolesPUT" },
25
39
  ];
26
40
  const PAGES = [
27
41
  { name: "login", path: "hazo_auth/login", component_name: "LoginPage", import_path: "hazo_auth/pages/login" },
@@ -63,6 +77,16 @@ function generate_route_content(route) {
63
77
  export { ${route.export_name} as ${route.method} } from "hazo_auth/server/routes";
64
78
  `;
65
79
  }
80
+ function generate_route_content_multi(routes) {
81
+ const path = routes[0].path;
82
+ const exports = routes.map(r => `export { ${r.export_name} as ${r.method} } from "hazo_auth/server/routes";`).join("\n");
83
+ const methods = routes.map(r => r.method).join(", ");
84
+ return `// Generated by hazo_auth - do not edit manually
85
+ // Route: /${path}
86
+ // Methods: ${methods}
87
+ ${exports}
88
+ `;
89
+ }
66
90
  function generate_page_content(page) {
67
91
  return `// Generated by hazo_auth - do not edit manually
68
92
  // Page: /${page.path}
@@ -77,23 +101,32 @@ function generate_api_routes(app_dir, project_root) {
77
101
  let skipped = 0;
78
102
  let errors = 0;
79
103
  console.log("\x1b[1m📡 Generating API routes...\x1b[0m\n");
104
+ // Group routes by path to handle multiple methods per path
105
+ const routes_by_path = new Map();
80
106
  for (const route of ROUTES) {
81
- const route_dir = path.join(app_dir, route.path);
107
+ const existing = routes_by_path.get(route.path) || [];
108
+ existing.push(route);
109
+ routes_by_path.set(route.path, existing);
110
+ }
111
+ for (const [route_path, routes_for_path] of routes_by_path) {
112
+ const route_dir = path.join(app_dir, route_path);
82
113
  const route_file = path.join(route_dir, "route.ts");
83
114
  if (file_exists(route_file)) {
84
- console.log(`\x1b[33m[SKIP]\x1b[0m ${route.path}/route.ts (already exists)`);
115
+ console.log(`\x1b[33m[SKIP]\x1b[0m ${route_path}/route.ts (already exists)`);
85
116
  skipped++;
86
117
  continue;
87
118
  }
88
119
  try {
89
120
  ensure_dir(route_dir);
90
- const content = generate_route_content(route);
121
+ // Generate content with all methods for this path
122
+ const content = generate_route_content_multi(routes_for_path);
91
123
  fs.writeFileSync(route_file, content, "utf-8");
92
- console.log(`\x1b[32m[CREATE]\x1b[0m ${route.path}/route.ts`);
124
+ const methods = routes_for_path.map(r => r.method).join(", ");
125
+ console.log(`\x1b[32m[CREATE]\x1b[0m ${route_path}/route.ts (${methods})`);
93
126
  created++;
94
127
  }
95
128
  catch (err) {
96
- console.log(`\x1b[31m[ERROR]\x1b[0m ${route.path}/route.ts - ${err instanceof Error ? err.message : "Unknown error"}`);
129
+ console.log(`\x1b[31m[ERROR]\x1b[0m ${route_path}/route.ts - ${err instanceof Error ? err.message : "Unknown error"}`);
97
130
  errors++;
98
131
  }
99
132
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAOA,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC;AA4dF,wBAAgB,cAAc,IAAI,iBAAiB,CAqElD"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAOA,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC;AA0eF,wBAAgB,cAAc,IAAI,iBAAiB,CAqElD"}
@@ -29,6 +29,20 @@ const REQUIRED_API_ROUTES = [
29
29
  { path: "api/hazo_auth/get_auth", method: "POST" },
30
30
  { path: "api/hazo_auth/validate_reset_token", method: "POST" },
31
31
  { path: "api/hazo_auth/profile_picture/[filename]", method: "GET" },
32
+ // User management routes
33
+ { path: "api/hazo_auth/user_management/users", method: "GET" },
34
+ { path: "api/hazo_auth/user_management/users", method: "PATCH" },
35
+ { path: "api/hazo_auth/user_management/users", method: "POST" },
36
+ { path: "api/hazo_auth/user_management/permissions", method: "GET" },
37
+ { path: "api/hazo_auth/user_management/permissions", method: "POST" },
38
+ { path: "api/hazo_auth/user_management/permissions", method: "PUT" },
39
+ { path: "api/hazo_auth/user_management/permissions", method: "DELETE" },
40
+ { path: "api/hazo_auth/user_management/roles", method: "GET" },
41
+ { path: "api/hazo_auth/user_management/roles", method: "POST" },
42
+ { path: "api/hazo_auth/user_management/roles", method: "PUT" },
43
+ { path: "api/hazo_auth/user_management/users/roles", method: "GET" },
44
+ { path: "api/hazo_auth/user_management/users/roles", method: "POST" },
45
+ { path: "api/hazo_auth/user_management/users/roles", method: "PUT" },
32
46
  ];
33
47
  // section: helpers
34
48
  function get_project_root() {
@@ -133,7 +133,7 @@ export function UserManagementLayout({ className }) {
133
133
  return;
134
134
  setUsersActionLoading(true);
135
135
  try {
136
- const response = await fetch("/api/user_management/users", {
136
+ const response = await fetch("/api/hazo_auth/user_management/users", {
137
137
  method: "PATCH",
138
138
  headers: {
139
139
  "Content-Type": "application/json",
@@ -149,7 +149,7 @@ export function UserManagementLayout({ className }) {
149
149
  setDeactivateDialogOpen(false);
150
150
  setSelectedUser(null);
151
151
  // Reload users
152
- const reload_response = await fetch("/api/user_management/users");
152
+ const reload_response = await fetch("/api/hazo_auth/user_management/users");
153
153
  const reload_data = await reload_response.json();
154
154
  if (reload_data.success) {
155
155
  setUsers(reload_data.users);
@@ -172,7 +172,7 @@ export function UserManagementLayout({ className }) {
172
172
  return;
173
173
  setUsersActionLoading(true);
174
174
  try {
175
- const response = await fetch("/api/user_management/users", {
175
+ const response = await fetch("/api/hazo_auth/user_management/users", {
176
176
  method: "POST",
177
177
  headers: {
178
178
  "Content-Type": "application/json",
@@ -224,7 +224,7 @@ export function UserManagementLayout({ className }) {
224
224
  toast.info(`Skipped: ${data.skipped.join(", ")}`);
225
225
  }
226
226
  // Reload permissions
227
- const reload_response = await fetch("/api/user_management/permissions");
227
+ const reload_response = await fetch("/api/hazo_auth/user_management/permissions");
228
228
  const reload_data = await reload_response.json();
229
229
  if (reload_data.success) {
230
230
  const db_perms = reload_data.db_permissions.map((p) => ({
@@ -259,7 +259,7 @@ export function UserManagementLayout({ className }) {
259
259
  return;
260
260
  setPermissionsActionLoading(true);
261
261
  try {
262
- const response = await fetch("/api/user_management/permissions", {
262
+ const response = await fetch("/api/hazo_auth/user_management/permissions", {
263
263
  method: "PUT",
264
264
  headers: {
265
265
  "Content-Type": "application/json",
@@ -276,7 +276,7 @@ export function UserManagementLayout({ className }) {
276
276
  setEditingPermission(null);
277
277
  setEditDescription("");
278
278
  // Reload permissions
279
- const reload_response = await fetch("/api/user_management/permissions");
279
+ const reload_response = await fetch("/api/hazo_auth/user_management/permissions");
280
280
  const reload_data = await reload_response.json();
281
281
  if (reload_data.success) {
282
282
  const db_perms = reload_data.db_permissions.map((p) => ({
@@ -313,7 +313,7 @@ export function UserManagementLayout({ className }) {
313
313
  }
314
314
  setPermissionsActionLoading(true);
315
315
  try {
316
- const response = await fetch("/api/user_management/permissions", {
316
+ const response = await fetch("/api/hazo_auth/user_management/permissions", {
317
317
  method: "POST",
318
318
  headers: {
319
319
  "Content-Type": "application/json",
@@ -330,7 +330,7 @@ export function UserManagementLayout({ className }) {
330
330
  setNewPermissionName("");
331
331
  setNewPermissionDescription("");
332
332
  // Reload permissions
333
- const reload_response = await fetch("/api/user_management/permissions");
333
+ const reload_response = await fetch("/api/hazo_auth/user_management/permissions");
334
334
  const reload_data = await reload_response.json();
335
335
  if (reload_data.success) {
336
336
  const db_perms = reload_data.db_permissions.map((p) => ({
@@ -372,7 +372,7 @@ export function UserManagementLayout({ className }) {
372
372
  if (data.success) {
373
373
  toast.success("Permission deleted successfully");
374
374
  // Reload permissions
375
- const reload_response = await fetch("/api/user_management/permissions");
375
+ const reload_response = await fetch("/api/hazo_auth/user_management/permissions");
376
376
  const reload_data = await reload_response.json();
377
377
  if (reload_data.success) {
378
378
  const db_perms = reload_data.db_permissions.map((p) => ({
@@ -16,4 +16,8 @@ export { GET as libraryPhotoGET } from "./library_photo.js";
16
16
  export { GET as profilePictureFilenameGET } from "./profile_picture_filename.js";
17
17
  export { POST as getAuthPOST } from "./get_auth.js";
18
18
  export { POST as invalidateCachePOST } from "./invalidate_cache.js";
19
+ export { GET as userManagementUsersGET, PATCH as userManagementUsersPATCH, POST as userManagementUsersPOST } from "./user_management_users.js";
20
+ export { GET as userManagementPermissionsGET, POST as userManagementPermissionsPOST, PUT as userManagementPermissionsPUT, DELETE as userManagementPermissionsDELETE } from "./user_management_permissions.js";
21
+ export { GET as userManagementRolesGET, POST as userManagementRolesPOST, PUT as userManagementRolesPUT } from "./user_management_roles.js";
22
+ export { GET as userManagementUsersRolesGET, POST as userManagementUsersRolesPOST, PUT as userManagementUsersRolesPUT } from "./user_management_users_roles.js";
19
23
  //# 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"}
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"}
@@ -23,3 +23,8 @@ export { GET as profilePictureFilenameGET } from "./profile_picture_filename.js"
23
23
  // Auth utility routes
24
24
  export { POST as getAuthPOST } from "./get_auth.js";
25
25
  export { POST as invalidateCachePOST } from "./invalidate_cache.js";
26
+ // User management routes
27
+ export { GET as userManagementUsersGET, PATCH as userManagementUsersPATCH, POST as userManagementUsersPOST } from "./user_management_users.js";
28
+ export { GET as userManagementPermissionsGET, POST as userManagementPermissionsPOST, PUT as userManagementPermissionsPUT, DELETE as userManagementPermissionsDELETE } from "./user_management_permissions.js";
29
+ export { GET as userManagementRolesGET, POST as userManagementRolesPOST, PUT as userManagementRolesPUT } from "./user_management_roles.js";
30
+ export { GET as userManagementUsersRolesGET, POST as userManagementUsersRolesPOST, PUT as userManagementUsersRolesPUT } from "./user_management_users_roles.js";
@@ -0,0 +1,2 @@
1
+ export { GET, POST, PUT, DELETE } from "../../app/api/hazo_auth/user_management/permissions/route";
2
+ //# sourceMappingURL=user_management_permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_management_permissions.d.ts","sourceRoot":"","sources":["../../../src/server/routes/user_management_permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,2DAA2D,CAAC"}
@@ -0,0 +1,2 @@
1
+ // file_description: re-export user management permissions route handlers for use by consuming projects
2
+ export { GET, POST, PUT, DELETE } from "../../app/api/hazo_auth/user_management/permissions/route";
@@ -0,0 +1,2 @@
1
+ export { GET, POST, PUT } from "../../app/api/hazo_auth/user_management/roles/route";
2
+ //# sourceMappingURL=user_management_roles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_management_roles.d.ts","sourceRoot":"","sources":["../../../src/server/routes/user_management_roles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,qDAAqD,CAAC"}
@@ -0,0 +1,2 @@
1
+ // file_description: re-export user management roles route handlers for use by consuming projects
2
+ export { GET, POST, PUT } from "../../app/api/hazo_auth/user_management/roles/route";
@@ -0,0 +1,2 @@
1
+ export { GET, PATCH, POST } from "../../app/api/hazo_auth/user_management/users/route";
2
+ //# sourceMappingURL=user_management_users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_management_users.d.ts","sourceRoot":"","sources":["../../../src/server/routes/user_management_users.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qDAAqD,CAAC"}
@@ -0,0 +1,2 @@
1
+ // file_description: re-export user management users route handlers for use by consuming projects
2
+ export { GET, PATCH, POST } from "../../app/api/hazo_auth/user_management/users/route";
@@ -0,0 +1,2 @@
1
+ export { GET, POST, PUT } from "../../app/api/hazo_auth/user_management/users/roles/route";
2
+ //# sourceMappingURL=user_management_users_roles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_management_users_roles.d.ts","sourceRoot":"","sources":["../../../src/server/routes/user_management_users_roles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,2DAA2D,CAAC"}
@@ -0,0 +1,2 @@
1
+ // file_description: re-export user management users/roles route handlers for use by consuming projects
2
+ export { GET, POST, PUT } from "../../app/api/hazo_auth/user_management/users/roles/route";
@@ -296,7 +296,7 @@ enable_admin_ui = true
296
296
  # Application permission list defaults (comma-separated)
297
297
  # These permissions will be shown in the Permissions tab and can be migrated to the database
298
298
  # Example: application_permission_list_defaults = PERM_ONE,PERM_TWO,PERM_THREE
299
- # application_permission_list_defaults =
299
+ application_permission_list_defaults = admin_user_management,admin_role_management,admin_permission_management
300
300
 
301
301
  [hazo_auth__initial_setup]
302
302
  # Initial setup configuration for initializing users, roles, and permissions
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hazo_auth",
3
- "version": "1.6.4",
3
+ "version": "1.6.6",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",