hazo_auth 1.6.4 → 1.6.5

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 (35) 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/server/routes/index.d.ts +4 -0
  20. package/dist/server/routes/index.d.ts.map +1 -1
  21. package/dist/server/routes/index.js +5 -0
  22. package/dist/server/routes/user_management_permissions.d.ts +2 -0
  23. package/dist/server/routes/user_management_permissions.d.ts.map +1 -0
  24. package/dist/server/routes/user_management_permissions.js +2 -0
  25. package/dist/server/routes/user_management_roles.d.ts +2 -0
  26. package/dist/server/routes/user_management_roles.d.ts.map +1 -0
  27. package/dist/server/routes/user_management_roles.js +2 -0
  28. package/dist/server/routes/user_management_users.d.ts +2 -0
  29. package/dist/server/routes/user_management_users.d.ts.map +1 -0
  30. package/dist/server/routes/user_management_users.js +2 -0
  31. package/dist/server/routes/user_management_users_roles.d.ts +2 -0
  32. package/dist/server/routes/user_management_users_roles.d.ts.map +1 -0
  33. package/dist/server/routes/user_management_users_roles.js +2 -0
  34. package/hazo_auth_config.example.ini +1 -1
  35. 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() {
@@ -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.5",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",