hazo_auth 4.2.0 → 4.3.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 (82) hide show
  1. package/bin/hazo_auth.mjs +35 -0
  2. package/cli-src/assets/images/forgot_password_default.jpg +0 -0
  3. package/cli-src/assets/images/login_default.jpg +0 -0
  4. package/cli-src/assets/images/register_default.jpg +0 -0
  5. package/cli-src/assets/images/reset_password_default.jpg +0 -0
  6. package/cli-src/assets/images/verify_email_default.jpg +0 -0
  7. package/cli-src/cli/generate.ts +276 -0
  8. package/cli-src/cli/index.ts +207 -0
  9. package/cli-src/cli/init.ts +254 -0
  10. package/cli-src/cli/init_users.ts +376 -0
  11. package/cli-src/cli/validate.ts +581 -0
  12. package/cli-src/lib/already_logged_in_config.server.ts +46 -0
  13. package/cli-src/lib/app_logger.ts +24 -0
  14. package/cli-src/lib/auth/auth_cache.ts +220 -0
  15. package/cli-src/lib/auth/auth_rate_limiter.ts +121 -0
  16. package/cli-src/lib/auth/auth_types.ts +110 -0
  17. package/cli-src/lib/auth/auth_utils.server.ts +196 -0
  18. package/cli-src/lib/auth/hazo_get_auth.server.ts +512 -0
  19. package/cli-src/lib/auth/index.ts +23 -0
  20. package/cli-src/lib/auth/nextauth_config.ts +227 -0
  21. package/cli-src/lib/auth/scope_cache.ts +233 -0
  22. package/cli-src/lib/auth/server_auth.ts +88 -0
  23. package/cli-src/lib/auth/session_token_validator.edge.ts +91 -0
  24. package/cli-src/lib/auth_utility_config.server.ts +136 -0
  25. package/cli-src/lib/config/config_loader.server.ts +164 -0
  26. package/cli-src/lib/config/default_config.ts +199 -0
  27. package/cli-src/lib/email_verification_config.server.ts +63 -0
  28. package/cli-src/lib/file_types_config.server.ts +25 -0
  29. package/cli-src/lib/forgot_password_config.server.ts +63 -0
  30. package/cli-src/lib/hazo_connect_instance.server.ts +101 -0
  31. package/cli-src/lib/hazo_connect_setup.server.ts +194 -0
  32. package/cli-src/lib/hazo_connect_setup.ts +54 -0
  33. package/cli-src/lib/index.ts +46 -0
  34. package/cli-src/lib/login_config.server.ts +106 -0
  35. package/cli-src/lib/messages_config.server.ts +45 -0
  36. package/cli-src/lib/migrations/apply_migration.ts +105 -0
  37. package/cli-src/lib/my_settings_config.server.ts +135 -0
  38. package/cli-src/lib/oauth_config.server.ts +87 -0
  39. package/cli-src/lib/password_requirements_config.server.ts +40 -0
  40. package/cli-src/lib/profile_pic_menu_config.server.ts +138 -0
  41. package/cli-src/lib/profile_picture_config.server.ts +56 -0
  42. package/cli-src/lib/register_config.server.ts +101 -0
  43. package/cli-src/lib/reset_password_config.server.ts +103 -0
  44. package/cli-src/lib/scope_hierarchy_config.server.ts +151 -0
  45. package/cli-src/lib/services/email_service.ts +587 -0
  46. package/cli-src/lib/services/email_verification_service.ts +270 -0
  47. package/cli-src/lib/services/index.ts +16 -0
  48. package/cli-src/lib/services/login_service.ts +150 -0
  49. package/cli-src/lib/services/oauth_service.ts +494 -0
  50. package/cli-src/lib/services/password_change_service.ts +154 -0
  51. package/cli-src/lib/services/password_reset_service.ts +418 -0
  52. package/cli-src/lib/services/profile_picture_remove_service.ts +120 -0
  53. package/cli-src/lib/services/profile_picture_service.ts +451 -0
  54. package/cli-src/lib/services/profile_picture_source_mapper.ts +62 -0
  55. package/cli-src/lib/services/registration_service.ts +185 -0
  56. package/cli-src/lib/services/scope_labels_service.ts +348 -0
  57. package/cli-src/lib/services/scope_service.ts +778 -0
  58. package/cli-src/lib/services/session_token_service.ts +177 -0
  59. package/cli-src/lib/services/token_service.ts +240 -0
  60. package/cli-src/lib/services/user_profiles_cache.ts +189 -0
  61. package/cli-src/lib/services/user_profiles_service.ts +264 -0
  62. package/cli-src/lib/services/user_scope_service.ts +554 -0
  63. package/cli-src/lib/services/user_update_service.ts +141 -0
  64. package/cli-src/lib/ui_shell_config.server.ts +73 -0
  65. package/cli-src/lib/ui_sizes_config.server.ts +37 -0
  66. package/cli-src/lib/user_fields_config.server.ts +31 -0
  67. package/cli-src/lib/user_management_config.server.ts +39 -0
  68. package/cli-src/lib/user_profiles_config.server.ts +55 -0
  69. package/cli-src/lib/utils/api_route_helpers.ts +60 -0
  70. package/cli-src/lib/utils/error_sanitizer.ts +75 -0
  71. package/cli-src/lib/utils/password_validator.ts +65 -0
  72. package/cli-src/lib/utils.ts +11 -0
  73. package/cli-src/server/logging/logger_service.ts +56 -0
  74. package/dist/cli/index.js +18 -0
  75. package/dist/cli/init_users.d.ts +17 -0
  76. package/dist/cli/init_users.d.ts.map +1 -0
  77. package/dist/cli/init_users.js +307 -0
  78. package/dist/components/layouts/shared/config/layout_customization.d.ts +2 -7
  79. package/dist/components/layouts/shared/config/layout_customization.d.ts.map +1 -1
  80. package/dist/lib/utils/password_validator.d.ts +7 -1
  81. package/dist/lib/utils/password_validator.d.ts.map +1 -1
  82. package/package.json +5 -2
@@ -0,0 +1,307 @@
1
+ // file_description: CLI command to initialize users, roles, and permissions from configuration
2
+ // section: imports
3
+ import { get_hazo_connect_instance } from "../lib/hazo_connect_instance.server.js";
4
+ import { createCrudService } from "hazo_connect/server";
5
+ import { get_user_management_config } from "../lib/user_management_config.server.js";
6
+ import { get_config_value } from "../lib/config/config_loader.server.js";
7
+ import { create_app_logger } from "../lib/app_logger.js";
8
+ // section: helpers
9
+ /**
10
+ * Prints a summary of what was inserted vs what already existed
11
+ */
12
+ function print_summary(summary) {
13
+ console.log("=".repeat(60));
14
+ console.log("INITIALIZATION SUMMARY");
15
+ console.log("=".repeat(60));
16
+ console.log();
17
+ // Permissions summary
18
+ console.log("Permissions:");
19
+ if (summary.permissions.inserted.length > 0) {
20
+ console.log(` ✓ Inserted (${summary.permissions.inserted.length}):`);
21
+ summary.permissions.inserted.forEach((name) => console.log(` - ${name}`));
22
+ }
23
+ if (summary.permissions.existing.length > 0) {
24
+ console.log(` ⊙ Already existed (${summary.permissions.existing.length}):`);
25
+ summary.permissions.existing.forEach((name) => console.log(` - ${name}`));
26
+ }
27
+ console.log();
28
+ // Role summary
29
+ console.log("Role:");
30
+ if (summary.role.inserted) {
31
+ console.log(` ✓ Inserted: default_super_user_role (ID: ${summary.role.role_id})`);
32
+ }
33
+ if (summary.role.existing) {
34
+ console.log(` ⊙ Already existed: default_super_user_role (ID: ${summary.role.role_id})`);
35
+ }
36
+ console.log();
37
+ // Role permissions summary
38
+ console.log("Role-Permission Assignments:");
39
+ if (summary.role_permissions.inserted > 0) {
40
+ console.log(` ✓ Inserted: ${summary.role_permissions.inserted} assignment(s)`);
41
+ }
42
+ if (summary.role_permissions.existing > 0) {
43
+ console.log(` ⊙ Already existed: ${summary.role_permissions.existing} assignment(s)`);
44
+ }
45
+ console.log();
46
+ // User role summary
47
+ console.log("User-Role Assignment:");
48
+ if (summary.user_role.inserted) {
49
+ console.log(` ✓ Inserted: Super user role assigned to user`);
50
+ }
51
+ if (summary.user_role.existing) {
52
+ console.log(` ⊙ Already existed: User already has super user role`);
53
+ }
54
+ console.log();
55
+ console.log("=".repeat(60));
56
+ }
57
+ // section: main_function
58
+ /**
59
+ * Initializes users, roles, and permissions from configuration
60
+ * This function reads from hazo_auth_config.ini and sets up:
61
+ * 1. Permissions from [hazo_auth__user_management] application_permission_list_defaults
62
+ * 2. A default_super_user_role with all permissions
63
+ * 3. Assigns the role to user from --email parameter or [hazo_auth__initial_setup] default_super_user_email
64
+ */
65
+ export async function handle_init_users(options = {}) {
66
+ var _a;
67
+ const logger = create_app_logger();
68
+ const summary = {
69
+ permissions: {
70
+ inserted: [],
71
+ existing: [],
72
+ },
73
+ role: {
74
+ inserted: false,
75
+ existing: false,
76
+ role_id: null,
77
+ },
78
+ role_permissions: {
79
+ inserted: 0,
80
+ existing: 0,
81
+ },
82
+ user_role: {
83
+ inserted: false,
84
+ existing: false,
85
+ },
86
+ };
87
+ try {
88
+ console.log("\n🐸 hazo_auth init-users\n");
89
+ console.log("Initializing users, roles, and permissions from configuration...\n");
90
+ // Get hazo_connect instance
91
+ const hazoConnect = get_hazo_connect_instance();
92
+ const permissions_service = createCrudService(hazoConnect, "hazo_permissions");
93
+ const roles_service = createCrudService(hazoConnect, "hazo_roles");
94
+ const role_permissions_service = createCrudService(hazoConnect, "hazo_role_permissions");
95
+ const users_service = createCrudService(hazoConnect, "hazo_users");
96
+ const user_roles_service = createCrudService(hazoConnect, "hazo_user_roles");
97
+ // 1. Get permissions from config
98
+ const config = get_user_management_config();
99
+ const permission_names = config.application_permission_list_defaults || [];
100
+ if (permission_names.length === 0) {
101
+ console.log("⚠ No permissions found in configuration.");
102
+ console.log(" Add permissions to [hazo_auth__user_management] application_permission_list_defaults\n");
103
+ return;
104
+ }
105
+ console.log(`Found ${permission_names.length} permission(s) in configuration:`);
106
+ permission_names.forEach((name) => console.log(` - ${name}`));
107
+ console.log();
108
+ // 2. Add permissions to hazo_permissions table
109
+ const permission_id_map = {};
110
+ const now = new Date().toISOString();
111
+ for (const permission_name of permission_names) {
112
+ const trimmed_name = permission_name.trim();
113
+ if (!trimmed_name)
114
+ continue;
115
+ // Check if permission already exists
116
+ const existing_permissions = await permissions_service.findBy({
117
+ permission_name: trimmed_name,
118
+ });
119
+ if (Array.isArray(existing_permissions) && existing_permissions.length > 0) {
120
+ const existing_permission = existing_permissions[0];
121
+ const perm_id = existing_permission.id;
122
+ permission_id_map[trimmed_name] = perm_id;
123
+ summary.permissions.existing.push(trimmed_name);
124
+ console.log(`✓ Permission already exists: ${trimmed_name} (ID: ${perm_id})`);
125
+ }
126
+ else {
127
+ // Insert new permission
128
+ const new_permission = await permissions_service.insert({
129
+ permission_name: trimmed_name,
130
+ description: `Permission for ${trimmed_name}`,
131
+ created_at: now,
132
+ changed_at: now,
133
+ });
134
+ const perm_id = Array.isArray(new_permission)
135
+ ? new_permission[0].id
136
+ : new_permission.id;
137
+ permission_id_map[trimmed_name] = perm_id;
138
+ summary.permissions.inserted.push(trimmed_name);
139
+ console.log(`✓ Inserted permission: ${trimmed_name} (ID: ${perm_id})`);
140
+ }
141
+ }
142
+ console.log();
143
+ // 3. Create or get default_super_user_role
144
+ const role_name = "default_super_user_role";
145
+ const existing_roles = await roles_service.findBy({
146
+ role_name,
147
+ });
148
+ let role_id;
149
+ if (Array.isArray(existing_roles) && existing_roles.length > 0) {
150
+ role_id = existing_roles[0].id;
151
+ summary.role.existing = true;
152
+ summary.role.role_id = role_id;
153
+ console.log(`✓ Role already exists: ${role_name} (ID: ${role_id})`);
154
+ }
155
+ else {
156
+ const new_role = await roles_service.insert({
157
+ role_name,
158
+ created_at: now,
159
+ changed_at: now,
160
+ });
161
+ role_id = Array.isArray(new_role)
162
+ ? new_role[0].id
163
+ : new_role.id;
164
+ summary.role.inserted = true;
165
+ summary.role.role_id = role_id;
166
+ console.log(`✓ Created role: ${role_name} (ID: ${role_id})`);
167
+ }
168
+ console.log();
169
+ // 4. Assign all permissions to the role
170
+ const permission_ids = Object.values(permission_id_map);
171
+ for (const permission_id of permission_ids) {
172
+ // Check if role-permission assignment already exists
173
+ const existing_assignments = await role_permissions_service.findBy({
174
+ role_id,
175
+ permission_id,
176
+ });
177
+ if (Array.isArray(existing_assignments) && existing_assignments.length > 0) {
178
+ summary.role_permissions.existing++;
179
+ const perm_name = Object.keys(permission_id_map).find((key) => permission_id_map[key] === permission_id);
180
+ console.log(`✓ Role-permission already exists: ${role_name} -> ${perm_name}`);
181
+ }
182
+ else {
183
+ await role_permissions_service.insert({
184
+ role_id,
185
+ permission_id,
186
+ created_at: now,
187
+ changed_at: now,
188
+ });
189
+ summary.role_permissions.inserted++;
190
+ const perm_name = Object.keys(permission_id_map).find((key) => permission_id_map[key] === permission_id);
191
+ console.log(`✓ Assigned permission to role: ${role_name} -> ${perm_name}`);
192
+ }
193
+ }
194
+ console.log();
195
+ // 5. Get super user email from options or config
196
+ const super_user_email = ((_a = options.email) === null || _a === void 0 ? void 0 : _a.trim()) || get_config_value("hazo_auth__initial_setup", "default_super_user_email", "").trim();
197
+ if (!super_user_email) {
198
+ console.log("⚠ No super user email provided.");
199
+ console.log(" Either use --email=user@example.com parameter");
200
+ console.log(" Or add [hazo_auth__initial_setup] default_super_user_email to config\n");
201
+ print_summary(summary);
202
+ return;
203
+ }
204
+ if (options.email) {
205
+ console.log(`Using email from --email parameter: ${super_user_email}`);
206
+ }
207
+ else {
208
+ console.log(`Using email from config: ${super_user_email}`);
209
+ }
210
+ console.log(`Looking up user with email: ${super_user_email}`);
211
+ // 6. Find user by email
212
+ const users = await users_service.findBy({
213
+ email_address: super_user_email,
214
+ });
215
+ if (!Array.isArray(users) || users.length === 0) {
216
+ console.log(`✗ User not found with email: ${super_user_email}`);
217
+ console.log(" Please ensure the user exists in the database before running this script.\n");
218
+ print_summary(summary);
219
+ return;
220
+ }
221
+ const user = users[0];
222
+ const user_id = user.id;
223
+ console.log(`✓ Found user: ${super_user_email} (ID: ${user_id})`);
224
+ console.log();
225
+ // 7. Assign role to user
226
+ const existing_user_roles = await user_roles_service.findBy({
227
+ user_id,
228
+ role_id,
229
+ });
230
+ if (Array.isArray(existing_user_roles) && existing_user_roles.length > 0) {
231
+ summary.user_role.existing = true;
232
+ console.log(`✓ User already has role assigned: ${user_id} -> ${role_name}`);
233
+ }
234
+ else {
235
+ await user_roles_service.insert({
236
+ user_id,
237
+ role_id,
238
+ created_at: now,
239
+ changed_at: now,
240
+ });
241
+ summary.user_role.inserted = true;
242
+ console.log(`✓ Assigned role to user: ${user_id} -> ${role_name}`);
243
+ }
244
+ console.log();
245
+ // 8. Print summary
246
+ print_summary(summary);
247
+ logger.info("init_users_completed", {
248
+ filename: "init_users.ts",
249
+ line_number: 0,
250
+ summary,
251
+ });
252
+ }
253
+ catch (error) {
254
+ const error_message = error instanceof Error ? error.message : "Unknown error";
255
+ const error_stack = error instanceof Error ? error.stack : undefined;
256
+ console.error("\n✗ Error initializing users:");
257
+ console.error(` ${error_message}`);
258
+ if (error_stack) {
259
+ console.error("\nStack trace:");
260
+ console.error(error_stack);
261
+ }
262
+ logger.error("init_users_failed", {
263
+ filename: "init_users.ts",
264
+ line_number: 0,
265
+ error_message,
266
+ error_stack,
267
+ });
268
+ process.exit(1);
269
+ }
270
+ }
271
+ // section: help
272
+ /**
273
+ * Shows help for the init-users command
274
+ */
275
+ export function show_init_users_help() {
276
+ console.log(`
277
+ hazo_auth init-users
278
+
279
+ Initialize users, roles, and permissions from configuration.
280
+
281
+ This command reads from hazo_auth_config.ini and:
282
+ 1. Creates permissions from [hazo_auth__user_management] application_permission_list_defaults
283
+ 2. Creates a 'default_super_user_role' role
284
+ 3. Assigns all permissions to the super user role
285
+ 4. Finds user by email (from --email parameter or config)
286
+ 5. Assigns the super user role to that user
287
+
288
+ Options:
289
+ --email=<email> Email address of the user to assign super user role
290
+ (overrides [hazo_auth__initial_setup] default_super_user_email)
291
+ --help, -h Show this help message
292
+
293
+ Configuration required in hazo_auth_config.ini:
294
+
295
+ [hazo_auth__user_management]
296
+ application_permission_list_defaults = admin_user_management,admin_role_management,admin_permission_management
297
+
298
+ [hazo_auth__initial_setup]
299
+ default_super_user_email = admin@example.com (optional if using --email)
300
+
301
+ Note: The user must already exist in the database (registered) before running this command.
302
+
303
+ Usage:
304
+ npx hazo_auth init-users
305
+ npx hazo_auth init-users --email=admin@example.com
306
+ `);
307
+ }
@@ -1,3 +1,5 @@
1
+ import type { PasswordRequirementOptions } from "../../../../lib/utils/password_validator";
2
+ export type { PasswordRequirementOptions };
1
3
  export type LayoutFieldId = string;
2
4
  export type LayoutFieldDefinition = {
3
5
  id: LayoutFieldId;
@@ -23,13 +25,6 @@ export type ButtonPaletteDefaults = {
23
25
  cancelText: string;
24
26
  };
25
27
  export type ButtonPaletteOverrides = Partial<ButtonPaletteDefaults>;
26
- export type PasswordRequirementOptions = {
27
- minimum_length: number;
28
- require_uppercase: boolean;
29
- require_lowercase: boolean;
30
- require_number: boolean;
31
- require_special: boolean;
32
- };
33
28
  export type PasswordRequirementOverrides = Partial<PasswordRequirementOptions>;
34
29
  export declare const resolveFieldDefinitions: (baseDefinitions: LayoutFieldMap, overrides?: LayoutFieldMapOverrides) => LayoutFieldMap;
35
30
  export declare const resolveLabels: (defaults: LayoutLabelDefaults, overrides?: LayoutLabelOverrides) => LayoutLabelDefaults;
@@ -1 +1 @@
1
- {"version":3,"file":"layout_customization.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/config/layout_customization.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,aAAa,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;AAC1E,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAErG,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAEhE,MAAM,MAAM,qBAAqB,GAAG;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAEpE,MAAM,MAAM,0BAA0B,GAAG;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAG/E,eAAO,MAAM,uBAAuB,GAClC,iBAAiB,cAAc,EAC/B,YAAY,uBAAuB,KAClC,cAqBF,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,UAAU,mBAAmB,EAC7B,YAAY,oBAAoB,KAC/B,mBAGD,CAAC;AAEH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,qBAAqB,EAC/B,YAAY,sBAAsB,KACjC,qBAGD,CAAC;AAEH,eAAO,MAAM,2BAA2B,GACtC,UAAU,0BAA0B,EACpC,YAAY,4BAA4B,KACvC,0BAGD,CAAC"}
1
+ {"version":3,"file":"layout_customization.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/config/layout_customization.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AAC3F,YAAY,EAAE,0BAA0B,EAAE,CAAC;AAG3C,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,aAAa,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;AAC1E,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAErG,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAEhE,MAAM,MAAM,qBAAqB,GAAG;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAEpE,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAG/E,eAAO,MAAM,uBAAuB,GAClC,iBAAiB,cAAc,EAC/B,YAAY,uBAAuB,KAClC,cAqBF,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,UAAU,mBAAmB,EAC7B,YAAY,oBAAoB,KAC/B,mBAGD,CAAC;AAEH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,qBAAqB,EAC/B,YAAY,sBAAsB,KACjC,qBAGD,CAAC;AAEH,eAAO,MAAM,2BAA2B,GACtC,UAAU,0BAA0B,EACpC,YAAY,4BAA4B,KACvC,0BAGD,CAAC"}
@@ -1,4 +1,10 @@
1
- import type { PasswordRequirementOptions } from "../../components/layouts/shared/config/layout_customization";
1
+ export type PasswordRequirementOptions = {
2
+ minimum_length: number;
3
+ require_uppercase: boolean;
4
+ require_lowercase: boolean;
5
+ require_number: boolean;
6
+ require_special: boolean;
7
+ };
2
8
  export type PasswordValidationResult = {
3
9
  valid: boolean;
4
10
  errors: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"password_validator.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/password_validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AAG9G,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAGF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,0BAA0B,GACvC,wBAAwB,CAuC1B"}
1
+ {"version":3,"file":"password_validator.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/password_validator.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,0BAA0B,GAAG;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAGF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,0BAA0B,GACvC,wBAAwB,CAuC1B"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "hazo_auth",
3
- "version": "4.2.0",
3
+ "version": "4.3.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
7
7
  "bin": {
8
- "hazo_auth": "./dist/cli/index.js"
8
+ "hazo_auth": "./bin/hazo_auth.mjs"
9
9
  },
10
10
  "exports": {
11
11
  ".": {
@@ -119,6 +119,8 @@
119
119
  },
120
120
  "files": [
121
121
  "dist/**/*",
122
+ "bin/**/*",
123
+ "cli-src/**/*",
122
124
  "public/profile_pictures/library/**/*",
123
125
  "hazo_auth_config.example.ini",
124
126
  "hazo_notify_config.example.ini",
@@ -190,6 +192,7 @@
190
192
  "sonner": "^2.0.7",
191
193
  "tailwind-merge": "^3.4.0",
192
194
  "tailwindcss-animate": "^1.0.7",
195
+ "tsx": "^4.20.6",
193
196
  "zod": "^4.1.12"
194
197
  },
195
198
  "devDependencies": {