hazo_auth 4.4.1 → 4.5.1
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.
- package/README.md +207 -5
- package/SETUP_CHECKLIST.md +1 -1
- package/cli-src/lib/auth/auth_types.ts +22 -0
- package/cli-src/lib/auth/hazo_get_auth.server.ts +25 -1
- package/cli-src/lib/auth/session_token_validator.edge.ts +1 -0
- package/cli-src/lib/config/default_config.ts +36 -0
- package/cli-src/lib/navbar_config.server.ts +129 -0
- package/cli-src/lib/scope_hierarchy_config.server.ts +3 -14
- package/cli-src/lib/services/registration_service.ts +12 -0
- package/cli-src/lib/services/scope_labels_service.ts +21 -21
- package/cli-src/lib/services/scope_service.ts +15 -11
- package/cli-src/lib/services/session_token_service.ts +1 -0
- package/cli-src/lib/ui_shell_config.server.ts +15 -0
- package/cli-src/lib/user_types_config.server.ts +178 -0
- package/dist/app/api/hazo_auth/me/route.d.ts.map +1 -1
- package/dist/app/api/hazo_auth/me/route.js +17 -0
- package/dist/app/api/hazo_auth/org_management/orgs/route.d.ts +26 -0
- package/dist/app/api/hazo_auth/org_management/orgs/route.d.ts.map +1 -0
- package/dist/app/api/hazo_auth/org_management/orgs/route.js +315 -0
- package/dist/app/api/hazo_auth/user_management/users/route.d.ts +11 -1
- package/dist/app/api/hazo_auth/user_management/users/route.d.ts.map +1 -1
- package/dist/app/api/hazo_auth/user_management/users/route.js +121 -16
- package/dist/components/layouts/my_settings/components/profile_picture_library_tab.d.ts.map +1 -1
- package/dist/components/layouts/my_settings/components/profile_picture_library_tab.js +8 -14
- package/dist/components/layouts/rbac_test/index.d.ts +1 -3
- package/dist/components/layouts/rbac_test/index.d.ts.map +1 -1
- package/dist/components/layouts/rbac_test/index.js +2 -2
- package/dist/components/layouts/shared/components/auth_navbar.d.ts +26 -0
- package/dist/components/layouts/shared/components/auth_navbar.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/auth_navbar.js +14 -0
- package/dist/components/layouts/shared/components/auth_page_shell.d.ts +3 -1
- package/dist/components/layouts/shared/components/auth_page_shell.d.ts.map +1 -1
- package/dist/components/layouts/shared/components/auth_page_shell.js +17 -2
- package/dist/components/layouts/shared/components/standalone_layout_wrapper.d.ts +6 -1
- package/dist/components/layouts/shared/components/standalone_layout_wrapper.d.ts.map +1 -1
- package/dist/components/layouts/shared/components/standalone_layout_wrapper.js +7 -2
- package/dist/components/layouts/shared/index.d.ts +2 -0
- package/dist/components/layouts/shared/index.d.ts.map +1 -1
- package/dist/components/layouts/shared/index.js +1 -0
- package/dist/components/layouts/user_management/components/scope_hierarchy_tab.d.ts +3 -2
- package/dist/components/layouts/user_management/components/scope_hierarchy_tab.d.ts.map +1 -1
- package/dist/components/layouts/user_management/components/scope_hierarchy_tab.js +45 -18
- package/dist/components/layouts/user_management/components/scope_labels_tab.d.ts +3 -2
- package/dist/components/layouts/user_management/components/scope_labels_tab.d.ts.map +1 -1
- package/dist/components/layouts/user_management/components/scope_labels_tab.js +48 -20
- package/dist/components/layouts/user_management/components/user_scopes_tab.d.ts.map +1 -1
- package/dist/components/layouts/user_management/components/user_scopes_tab.js +1 -1
- package/dist/components/layouts/user_management/index.d.ts +11 -3
- package/dist/components/layouts/user_management/index.d.ts.map +1 -1
- package/dist/components/layouts/user_management/index.js +52 -5
- package/dist/components/ui/user-type-badge.d.ts +23 -0
- package/dist/components/ui/user-type-badge.d.ts.map +1 -0
- package/dist/components/ui/user-type-badge.js +42 -0
- package/dist/lib/auth/auth_types.d.ts +17 -0
- package/dist/lib/auth/auth_types.d.ts.map +1 -1
- package/dist/lib/auth/auth_types.js +11 -0
- package/dist/lib/auth/hazo_get_auth.server.d.ts.map +1 -1
- package/dist/lib/auth/hazo_get_auth.server.js +21 -1
- package/dist/lib/config/default_config.d.ts +60 -0
- package/dist/lib/config/default_config.d.ts.map +1 -1
- package/dist/lib/config/default_config.js +34 -0
- package/dist/lib/navbar_config.server.d.ts +36 -0
- package/dist/lib/navbar_config.server.d.ts.map +1 -0
- package/dist/lib/navbar_config.server.js +45 -0
- package/dist/lib/scope_hierarchy_config.server.d.ts +3 -7
- package/dist/lib/scope_hierarchy_config.server.d.ts.map +1 -1
- package/dist/lib/scope_hierarchy_config.server.js +1 -10
- package/dist/lib/services/registration_service.d.ts.map +1 -1
- package/dist/lib/services/registration_service.js +8 -0
- package/dist/lib/services/scope_labels_service.d.ts +7 -7
- package/dist/lib/services/scope_labels_service.d.ts.map +1 -1
- package/dist/lib/services/scope_labels_service.js +20 -20
- package/dist/lib/services/scope_service.d.ts +8 -5
- package/dist/lib/services/scope_service.d.ts.map +1 -1
- package/dist/lib/services/scope_service.js +9 -8
- package/dist/lib/ui_shell_config.server.d.ts +5 -0
- package/dist/lib/ui_shell_config.server.d.ts.map +1 -1
- package/dist/lib/ui_shell_config.server.js +5 -0
- package/dist/lib/user_types_config.server.d.ts +56 -0
- package/dist/lib/user_types_config.server.d.ts.map +1 -0
- package/dist/lib/user_types_config.server.js +100 -0
- package/dist/server/routes/index.d.ts +1 -0
- package/dist/server/routes/index.d.ts.map +1 -1
- package/dist/server/routes/index.js +2 -0
- package/dist/server/routes/org_management_orgs.d.ts +2 -0
- package/dist/server/routes/org_management_orgs.d.ts.map +1 -0
- package/dist/server/routes/org_management_orgs.js +2 -0
- package/hazo_auth_config.example.ini +9 -0
- package/package.json +1 -1
- package/cli-src/server/logging/logger_service.ts +0 -56
- /package/public/profile_pictures/library/Cars/{050 - citroe/314/210n_c3.jpeg" → 050 - citro/303/253n_c3.jpeg"} +0 -0
- /package/public/profile_pictures/library/Cars/{064 - lamborghini_huraca/314/201n.jpeg" → 064 - lamborghini_hurac/303/241n.jpeg"} +0 -0
- /package/public/profile_pictures/library/Cars/{099 - citroe/314/210n_2cv_(classic).jpeg" → 099 - citro/303/253n_2cv_(classic).jpeg"} +0 -0
- /package/public/profile_pictures/library/Cars/{131 - lamborghini_huraca/314/201n_sto.jpeg" → 131 - lamborghini_hurac/303/241n_sto.jpeg"} +0 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// file_description: server-only helper to read user types configuration from hazo_auth_config.ini
|
|
2
|
+
// section: imports
|
|
3
|
+
import { get_config_value, get_config_boolean, read_config_section, } from "./config/config_loader.server";
|
|
4
|
+
import { DEFAULT_USER_TYPES } from "./config/default_config";
|
|
5
|
+
// section: constants
|
|
6
|
+
const SECTION_NAME = "hazo_auth__user_types";
|
|
7
|
+
const PRESET_COLORS = new Set([
|
|
8
|
+
"blue",
|
|
9
|
+
"green",
|
|
10
|
+
"red",
|
|
11
|
+
"yellow",
|
|
12
|
+
"purple",
|
|
13
|
+
"gray",
|
|
14
|
+
"orange",
|
|
15
|
+
"pink",
|
|
16
|
+
]);
|
|
17
|
+
// section: helpers
|
|
18
|
+
/**
|
|
19
|
+
* Parses a user type definition string
|
|
20
|
+
* Format: key:label:color (e.g., "admin:Administrator:red" or "custom:Custom Type:#4CAF50")
|
|
21
|
+
* @param value - The config value string
|
|
22
|
+
* @returns UserTypeDefinition or null if invalid
|
|
23
|
+
*/
|
|
24
|
+
function parse_user_type_definition(value) {
|
|
25
|
+
const parts = value.split(":").map((s) => s.trim());
|
|
26
|
+
if (parts.length < 2)
|
|
27
|
+
return null;
|
|
28
|
+
const key = parts[0];
|
|
29
|
+
const label = parts[1];
|
|
30
|
+
const badge_color = parts[2] || "gray";
|
|
31
|
+
if (!key || !label)
|
|
32
|
+
return null;
|
|
33
|
+
return {
|
|
34
|
+
key,
|
|
35
|
+
label,
|
|
36
|
+
badge_color,
|
|
37
|
+
is_preset_color: PRESET_COLORS.has(badge_color),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Reads user types configuration from hazo_auth_config.ini file
|
|
42
|
+
* Falls back to defaults if config file is not found or section is missing
|
|
43
|
+
* @returns User types configuration options
|
|
44
|
+
*/
|
|
45
|
+
export function get_user_types_config() {
|
|
46
|
+
const enable_user_types = get_config_boolean(SECTION_NAME, "enable_user_types", DEFAULT_USER_TYPES.enable_user_types);
|
|
47
|
+
const default_user_type = get_config_value(SECTION_NAME, "default_user_type", DEFAULT_USER_TYPES.default_user_type);
|
|
48
|
+
// Parse user type definitions from config
|
|
49
|
+
const user_types = new Map();
|
|
50
|
+
const section = read_config_section(SECTION_NAME);
|
|
51
|
+
if (section) {
|
|
52
|
+
// Look for user_type_1, user_type_2, etc. (up to 50 types supported)
|
|
53
|
+
for (let i = 1; i <= 50; i++) {
|
|
54
|
+
const key = `user_type_${i}`;
|
|
55
|
+
const value = section[key];
|
|
56
|
+
if (!value)
|
|
57
|
+
continue;
|
|
58
|
+
const type_def = parse_user_type_definition(value);
|
|
59
|
+
if (type_def) {
|
|
60
|
+
user_types.set(type_def.key, type_def);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
enable_user_types,
|
|
66
|
+
default_user_type,
|
|
67
|
+
user_types,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Checks if user types feature is enabled in the configuration
|
|
72
|
+
* Convenience function for quick checks
|
|
73
|
+
*/
|
|
74
|
+
export function is_user_types_enabled() {
|
|
75
|
+
return get_config_boolean(SECTION_NAME, "enable_user_types", DEFAULT_USER_TYPES.enable_user_types);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Gets the default user type from config
|
|
79
|
+
* Returns empty string if not configured
|
|
80
|
+
*/
|
|
81
|
+
export function get_default_user_type() {
|
|
82
|
+
return get_config_value(SECTION_NAME, "default_user_type", DEFAULT_USER_TYPES.default_user_type);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Gets user type definition by key
|
|
86
|
+
* @param type_key - The user type key
|
|
87
|
+
* @returns UserTypeDefinition or undefined if not found
|
|
88
|
+
*/
|
|
89
|
+
export function get_user_type_by_key(type_key) {
|
|
90
|
+
const config = get_user_types_config();
|
|
91
|
+
return config.user_types.get(type_key);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Gets all user type definitions as array (for UI dropdowns)
|
|
95
|
+
* @returns Array of UserTypeDefinition objects
|
|
96
|
+
*/
|
|
97
|
+
export function get_all_user_types() {
|
|
98
|
+
const config = get_user_types_config();
|
|
99
|
+
return Array.from(config.user_types.values());
|
|
100
|
+
}
|
|
@@ -20,4 +20,5 @@ export { GET as userManagementUsersGET, PATCH as userManagementUsersPATCH, POST
|
|
|
20
20
|
export { GET as userManagementPermissionsGET, POST as userManagementPermissionsPOST, PUT as userManagementPermissionsPUT, DELETE as userManagementPermissionsDELETE } from "./user_management_permissions.js";
|
|
21
21
|
export { GET as userManagementRolesGET, POST as userManagementRolesPOST, PUT as userManagementRolesPUT } from "./user_management_roles.js";
|
|
22
22
|
export { GET as userManagementUsersRolesGET, POST as userManagementUsersRolesPOST, PUT as userManagementUsersRolesPUT } from "./user_management_users_roles.js";
|
|
23
|
+
export { GET as orgManagementOrgsGET, POST as orgManagementOrgsPOST, PATCH as orgManagementOrgsPATCH, DELETE as orgManagementOrgsDELETE } from "./org_management_orgs.js";
|
|
23
24
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/routes/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,GAAG,IAAI,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGzE,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,MAAM,IAAI,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,GAAG,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,GAAG,IAAI,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAGjF,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,IAAI,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EAAE,GAAG,IAAI,sBAAsB,EAAE,KAAK,IAAI,wBAAwB,EAAE,IAAI,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC/I,OAAO,EAAE,GAAG,IAAI,4BAA4B,EAAE,IAAI,IAAI,6BAA6B,EAAE,GAAG,IAAI,4BAA4B,EAAE,MAAM,IAAI,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAC9M,OAAO,EAAE,GAAG,IAAI,sBAAsB,EAAE,IAAI,IAAI,uBAAuB,EAAE,GAAG,IAAI,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAC3I,OAAO,EAAE,GAAG,IAAI,2BAA2B,EAAE,IAAI,IAAI,4BAA4B,EAAE,GAAG,IAAI,2BAA2B,EAAE,MAAM,kCAAkC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/routes/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,GAAG,IAAI,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGzE,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,MAAM,IAAI,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,GAAG,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,GAAG,IAAI,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAGjF,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,IAAI,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EAAE,GAAG,IAAI,sBAAsB,EAAE,KAAK,IAAI,wBAAwB,EAAE,IAAI,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC/I,OAAO,EAAE,GAAG,IAAI,4BAA4B,EAAE,IAAI,IAAI,6BAA6B,EAAE,GAAG,IAAI,4BAA4B,EAAE,MAAM,IAAI,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAC9M,OAAO,EAAE,GAAG,IAAI,sBAAsB,EAAE,IAAI,IAAI,uBAAuB,EAAE,GAAG,IAAI,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAC3I,OAAO,EAAE,GAAG,IAAI,2BAA2B,EAAE,IAAI,IAAI,4BAA4B,EAAE,GAAG,IAAI,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAGhK,OAAO,EAAE,GAAG,IAAI,oBAAoB,EAAE,IAAI,IAAI,qBAAqB,EAAE,KAAK,IAAI,sBAAsB,EAAE,MAAM,IAAI,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -28,3 +28,5 @@ export { GET as userManagementUsersGET, PATCH as userManagementUsersPATCH, POST
|
|
|
28
28
|
export { GET as userManagementPermissionsGET, POST as userManagementPermissionsPOST, PUT as userManagementPermissionsPUT, DELETE as userManagementPermissionsDELETE } from "./user_management_permissions.js";
|
|
29
29
|
export { GET as userManagementRolesGET, POST as userManagementRolesPOST, PUT as userManagementRolesPUT } from "./user_management_roles.js";
|
|
30
30
|
export { GET as userManagementUsersRolesGET, POST as userManagementUsersRolesPOST, PUT as userManagementUsersRolesPUT } from "./user_management_users_roles.js";
|
|
31
|
+
// Organization management routes
|
|
32
|
+
export { GET as orgManagementOrgsGET, POST as orgManagementOrgsPOST, PATCH as orgManagementOrgsPATCH, DELETE as orgManagementOrgsDELETE } from "./org_management_orgs.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org_management_orgs.d.ts","sourceRoot":"","sources":["../../../src/server/routes/org_management_orgs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mDAAmD,CAAC"}
|
|
@@ -561,6 +561,15 @@ application_permission_list_defaults = admin_user_management,admin_role_manageme
|
|
|
561
561
|
# When enabled, users can be assigned to organizations and hazo_get_auth returns org info
|
|
562
562
|
# enable_multi_tenancy = false
|
|
563
563
|
|
|
564
|
+
# NOTE: When multi-tenancy is enabled, org_id is OPTIONAL by default.
|
|
565
|
+
# Users without org_id will have null org fields in hazo_get_auth result.
|
|
566
|
+
#
|
|
567
|
+
# To REQUIRE org assignment for specific API routes, use:
|
|
568
|
+
# hazo_get_auth(request, { require_org: true })
|
|
569
|
+
#
|
|
570
|
+
# This will throw OrgRequiredError if the user has no org_id assigned.
|
|
571
|
+
# Consuming apps should catch this error and return an appropriate response.
|
|
572
|
+
|
|
564
573
|
# Organization cache TTL in minutes (default: 15)
|
|
565
574
|
# Cached org data will be refreshed after this time
|
|
566
575
|
# org_cache_ttl_minutes = 15
|
package/package.json
CHANGED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// file_description: expose the logging facade used across the hazo_auth backend
|
|
2
|
-
// section: imports
|
|
3
|
-
import type { logger_method, logger_service } from "../types/app_types";
|
|
4
|
-
|
|
5
|
-
// section: helper_functions
|
|
6
|
-
const create_console_logger = (namespace: string): logger_service => {
|
|
7
|
-
const write = (level: string, message: string, data?: Record<string, unknown>) => {
|
|
8
|
-
const timestamp = new Date().toISOString();
|
|
9
|
-
// eslint-disable-next-line no-console
|
|
10
|
-
console.log(
|
|
11
|
-
JSON.stringify({
|
|
12
|
-
namespace,
|
|
13
|
-
level,
|
|
14
|
-
message,
|
|
15
|
-
data,
|
|
16
|
-
timestamp,
|
|
17
|
-
})
|
|
18
|
-
);
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
return {
|
|
22
|
-
debug: (message, data) => write("debug", message, data),
|
|
23
|
-
info: (message, data) => write("info", message, data),
|
|
24
|
-
warn: (message, data) => write("warn", message, data),
|
|
25
|
-
error: (message, data) => write("error", message, data),
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
// section: factory
|
|
30
|
-
export const create_logger_service = (
|
|
31
|
-
namespace: string,
|
|
32
|
-
external_logger?: Partial<logger_service>
|
|
33
|
-
): logger_service => {
|
|
34
|
-
const console_logger = create_console_logger(namespace);
|
|
35
|
-
|
|
36
|
-
const safe_bind = (
|
|
37
|
-
level: keyof logger_service,
|
|
38
|
-
fallback: logger_method
|
|
39
|
-
): logger_method => {
|
|
40
|
-
const candidate = external_logger?.[level];
|
|
41
|
-
if (typeof candidate === "function") {
|
|
42
|
-
return (message, data) => candidate(message, data);
|
|
43
|
-
}
|
|
44
|
-
return fallback;
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
type logger_method = (message: string, data?: Record<string, unknown>) => void;
|
|
48
|
-
|
|
49
|
-
return {
|
|
50
|
-
debug: safe_bind("debug", console_logger.debug),
|
|
51
|
-
info: safe_bind("info", console_logger.info),
|
|
52
|
-
warn: safe_bind("warn", console_logger.warn),
|
|
53
|
-
error: safe_bind("error", console_logger.error),
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|