hazo_notify 1.1.4 → 3.0.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.
- package/README.md +163 -41
- package/dist/components/template_manager/category_dialog.d.ts +11 -0
- package/dist/components/template_manager/category_dialog.d.ts.map +1 -0
- package/dist/components/template_manager/category_dialog.js +41 -0
- package/dist/components/template_manager/category_dialog.js.map +1 -0
- package/dist/components/template_manager/category_tree.d.ts +13 -0
- package/dist/components/template_manager/category_tree.d.ts.map +1 -0
- package/dist/components/template_manager/category_tree.js +45 -0
- package/dist/components/template_manager/category_tree.js.map +1 -0
- package/dist/components/template_manager/index.d.ts +10 -0
- package/dist/components/template_manager/index.d.ts.map +1 -0
- package/dist/components/template_manager/index.js +8 -0
- package/dist/components/template_manager/index.js.map +1 -0
- package/dist/components/template_manager/preview_dialog.d.ts +11 -0
- package/dist/components/template_manager/preview_dialog.d.ts.map +1 -0
- package/dist/components/template_manager/preview_dialog.js +15 -0
- package/dist/components/template_manager/preview_dialog.js.map +1 -0
- package/dist/components/template_manager/template_dialog.d.ts +12 -0
- package/dist/components/template_manager/template_dialog.d.ts.map +1 -0
- package/dist/components/template_manager/template_dialog.js +46 -0
- package/dist/components/template_manager/template_dialog.js.map +1 -0
- package/dist/components/template_manager/template_editor.d.ts +12 -0
- package/dist/components/template_manager/template_editor.d.ts.map +1 -0
- package/dist/components/template_manager/template_editor.js +57 -0
- package/dist/components/template_manager/template_editor.js.map +1 -0
- package/dist/components/template_manager/template_globals_admin.d.ts +8 -0
- package/dist/components/template_manager/template_globals_admin.d.ts.map +1 -0
- package/dist/components/template_manager/template_globals_admin.js +27 -0
- package/dist/components/template_manager/template_globals_admin.js.map +1 -0
- package/dist/components/template_manager/template_manager_admin.d.ts +44 -0
- package/dist/components/template_manager/template_manager_admin.d.ts.map +1 -0
- package/dist/components/template_manager/template_manager_admin.js +272 -0
- package/dist/components/template_manager/template_manager_admin.js.map +1 -0
- package/dist/lib/emailer/emailer.d.ts.map +1 -0
- package/dist/lib/emailer/emailer.js.map +1 -0
- package/dist/lib/emailer/index.d.ts.map +1 -0
- package/dist/lib/emailer/index.js.map +1 -0
- package/dist/lib/emailer/providers/index.d.ts.map +1 -0
- package/dist/lib/emailer/providers/index.js.map +1 -0
- package/dist/lib/emailer/providers/pop3_provider.d.ts.map +1 -0
- package/dist/lib/emailer/providers/pop3_provider.js.map +1 -0
- package/dist/lib/emailer/providers/smtp_provider.d.ts.map +1 -0
- package/dist/lib/emailer/providers/smtp_provider.js.map +1 -0
- package/dist/lib/emailer/providers/zeptomail_provider.d.ts.map +1 -0
- package/dist/{emailer → lib/emailer}/providers/zeptomail_provider.js +9 -6
- package/dist/lib/emailer/providers/zeptomail_provider.js.map +1 -0
- package/dist/lib/emailer/types.d.ts.map +1 -0
- package/dist/lib/emailer/types.js.map +1 -0
- package/dist/lib/emailer/utils/constants.d.ts.map +1 -0
- package/dist/lib/emailer/utils/constants.js.map +1 -0
- package/dist/lib/emailer/utils/index.d.ts.map +1 -0
- package/dist/lib/emailer/utils/index.js.map +1 -0
- package/dist/lib/emailer/utils/logger.d.ts.map +1 -0
- package/dist/lib/emailer/utils/logger.js.map +1 -0
- package/dist/lib/emailer/utils/validation.d.ts.map +1 -0
- package/dist/lib/emailer/utils/validation.js.map +1 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/template_manager/cache/scope_chain_cache.d.ts +26 -0
- package/dist/lib/template_manager/cache/scope_chain_cache.d.ts.map +1 -0
- package/dist/lib/template_manager/cache/scope_chain_cache.js +60 -0
- package/dist/lib/template_manager/cache/scope_chain_cache.js.map +1 -0
- package/dist/{template_manager → lib/template_manager}/config/config_loader.d.ts +16 -15
- package/dist/lib/template_manager/config/config_loader.d.ts.map +1 -0
- package/dist/lib/template_manager/config/config_loader.js +98 -0
- package/dist/lib/template_manager/config/config_loader.js.map +1 -0
- package/dist/{template_manager → lib/template_manager}/config/constants.d.ts +4 -54
- package/dist/lib/template_manager/config/constants.d.ts.map +1 -0
- package/dist/{template_manager → lib/template_manager}/config/constants.js +4 -84
- package/dist/lib/template_manager/config/constants.js.map +1 -0
- package/dist/lib/template_manager/config/index.d.ts.map +1 -0
- package/dist/lib/template_manager/config/index.js.map +1 -0
- package/dist/{template_manager → lib/template_manager}/db/category_repository.d.ts +22 -14
- package/dist/lib/template_manager/db/category_repository.d.ts.map +1 -0
- package/dist/{template_manager → lib/template_manager}/db/category_repository.js +127 -83
- package/dist/lib/template_manager/db/category_repository.js.map +1 -0
- package/dist/lib/template_manager/db/index.d.ts +6 -0
- package/dist/lib/template_manager/db/index.d.ts.map +1 -0
- package/dist/lib/template_manager/db/index.js +6 -0
- package/dist/lib/template_manager/db/index.js.map +1 -0
- package/dist/{template_manager → lib/template_manager}/db/template_repository.d.ts +25 -28
- package/dist/lib/template_manager/db/template_repository.d.ts.map +1 -0
- package/dist/lib/template_manager/db/template_repository.js +507 -0
- package/dist/lib/template_manager/db/template_repository.js.map +1 -0
- package/dist/lib/template_manager/engine/handlebars_engine.d.ts.map +1 -0
- package/dist/lib/template_manager/engine/handlebars_engine.js.map +1 -0
- package/dist/lib/template_manager/engine/index.d.ts.map +1 -0
- package/dist/lib/template_manager/engine/index.js.map +1 -0
- package/dist/{template_manager → lib/template_manager}/engine/variable_resolver.d.ts +13 -14
- package/dist/lib/template_manager/engine/variable_resolver.d.ts.map +1 -0
- package/dist/{template_manager → lib/template_manager}/engine/variable_resolver.js +25 -33
- package/dist/lib/template_manager/engine/variable_resolver.js.map +1 -0
- package/dist/lib/template_manager/index.d.ts +56 -0
- package/dist/lib/template_manager/index.d.ts.map +1 -0
- package/dist/lib/template_manager/index.js +68 -0
- package/dist/lib/template_manager/index.js.map +1 -0
- package/dist/lib/template_manager/init.d.ts +54 -0
- package/dist/lib/template_manager/init.d.ts.map +1 -0
- package/dist/lib/template_manager/init.js +85 -0
- package/dist/lib/template_manager/init.js.map +1 -0
- package/dist/lib/template_manager/registry.d.ts +23 -0
- package/dist/lib/template_manager/registry.d.ts.map +1 -0
- package/dist/lib/template_manager/registry.js +33 -0
- package/dist/lib/template_manager/registry.js.map +1 -0
- package/dist/lib/template_manager/seed/sync.d.ts +8 -0
- package/dist/lib/template_manager/seed/sync.d.ts.map +1 -0
- package/dist/lib/template_manager/seed/sync.js +77 -0
- package/dist/lib/template_manager/seed/sync.js.map +1 -0
- package/dist/{template_manager → lib/template_manager}/template_manager.d.ts +25 -27
- package/dist/lib/template_manager/template_manager.d.ts.map +1 -0
- package/dist/{template_manager → lib/template_manager}/template_manager.js +41 -55
- package/dist/lib/template_manager/template_manager.js.map +1 -0
- package/dist/{template_manager → lib/template_manager}/types.d.ts +32 -125
- package/dist/lib/template_manager/types.d.ts.map +1 -0
- package/dist/lib/template_manager/types.js +12 -0
- package/dist/lib/template_manager/types.js.map +1 -0
- package/dist/lib/template_manager/utils/index.d.ts.map +1 -0
- package/dist/lib/template_manager/utils/index.js.map +1 -0
- package/dist/lib/template_manager/utils/system_variables.d.ts.map +1 -0
- package/dist/lib/template_manager/utils/system_variables.js.map +1 -0
- package/dist/lib/template_manager/utils/validation.d.ts.map +1 -0
- package/dist/lib/template_manager/utils/validation.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/migrations/002_scope_migration.sql +93 -0
- package/package.json +57 -37
- package/dist/emailer/emailer.d.ts.map +0 -1
- package/dist/emailer/emailer.js.map +0 -1
- package/dist/emailer/index.d.ts.map +0 -1
- package/dist/emailer/index.js.map +0 -1
- package/dist/emailer/providers/index.d.ts.map +0 -1
- package/dist/emailer/providers/index.js.map +0 -1
- package/dist/emailer/providers/pop3_provider.d.ts.map +0 -1
- package/dist/emailer/providers/pop3_provider.js.map +0 -1
- package/dist/emailer/providers/smtp_provider.d.ts.map +0 -1
- package/dist/emailer/providers/smtp_provider.js.map +0 -1
- package/dist/emailer/providers/zeptomail_provider.d.ts.map +0 -1
- package/dist/emailer/providers/zeptomail_provider.js.map +0 -1
- package/dist/emailer/types.d.ts.map +0 -1
- package/dist/emailer/types.js.map +0 -1
- package/dist/emailer/utils/constants.d.ts.map +0 -1
- package/dist/emailer/utils/constants.js.map +0 -1
- package/dist/emailer/utils/index.d.ts.map +0 -1
- package/dist/emailer/utils/index.js.map +0 -1
- package/dist/emailer/utils/logger.d.ts.map +0 -1
- package/dist/emailer/utils/logger.js.map +0 -1
- package/dist/emailer/utils/validation.d.ts.map +0 -1
- package/dist/emailer/utils/validation.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/template_manager/config/config_loader.d.ts.map +0 -1
- package/dist/template_manager/config/config_loader.js +0 -154
- package/dist/template_manager/config/config_loader.js.map +0 -1
- package/dist/template_manager/config/constants.d.ts.map +0 -1
- package/dist/template_manager/config/constants.js.map +0 -1
- package/dist/template_manager/config/index.d.ts.map +0 -1
- package/dist/template_manager/config/index.js.map +0 -1
- package/dist/template_manager/db/category_repository.d.ts.map +0 -1
- package/dist/template_manager/db/category_repository.js.map +0 -1
- package/dist/template_manager/db/index.d.ts +0 -6
- package/dist/template_manager/db/index.d.ts.map +0 -1
- package/dist/template_manager/db/index.js +0 -6
- package/dist/template_manager/db/index.js.map +0 -1
- package/dist/template_manager/db/template_repository.d.ts.map +0 -1
- package/dist/template_manager/db/template_repository.js +0 -674
- package/dist/template_manager/db/template_repository.js.map +0 -1
- package/dist/template_manager/engine/handlebars_engine.d.ts.map +0 -1
- package/dist/template_manager/engine/handlebars_engine.js.map +0 -1
- package/dist/template_manager/engine/index.d.ts.map +0 -1
- package/dist/template_manager/engine/index.js.map +0 -1
- package/dist/template_manager/engine/variable_resolver.d.ts.map +0 -1
- package/dist/template_manager/engine/variable_resolver.js.map +0 -1
- package/dist/template_manager/index.d.ts +0 -32
- package/dist/template_manager/index.d.ts.map +0 -1
- package/dist/template_manager/index.js +0 -41
- package/dist/template_manager/index.js.map +0 -1
- package/dist/template_manager/template_manager.d.ts.map +0 -1
- package/dist/template_manager/template_manager.js.map +0 -1
- package/dist/template_manager/types.d.ts.map +0 -1
- package/dist/template_manager/types.js +0 -11
- package/dist/template_manager/types.js.map +0 -1
- package/dist/template_manager/utils/index.d.ts.map +0 -1
- package/dist/template_manager/utils/index.js.map +0 -1
- package/dist/template_manager/utils/system_variables.d.ts.map +0 -1
- package/dist/template_manager/utils/system_variables.js.map +0 -1
- package/dist/template_manager/utils/validation.d.ts.map +0 -1
- package/dist/template_manager/utils/validation.js.map +0 -1
- /package/dist/{emailer → lib/emailer}/emailer.d.ts +0 -0
- /package/dist/{emailer → lib/emailer}/emailer.js +0 -0
- /package/dist/{emailer → lib/emailer}/index.d.ts +0 -0
- /package/dist/{emailer → lib/emailer}/index.js +0 -0
- /package/dist/{emailer → lib/emailer}/providers/index.d.ts +0 -0
- /package/dist/{emailer → lib/emailer}/providers/index.js +0 -0
- /package/dist/{emailer → lib/emailer}/providers/pop3_provider.d.ts +0 -0
- /package/dist/{emailer → lib/emailer}/providers/pop3_provider.js +0 -0
- /package/dist/{emailer → lib/emailer}/providers/smtp_provider.d.ts +0 -0
- /package/dist/{emailer → lib/emailer}/providers/smtp_provider.js +0 -0
- /package/dist/{emailer → lib/emailer}/providers/zeptomail_provider.d.ts +0 -0
- /package/dist/{emailer → lib/emailer}/types.d.ts +0 -0
- /package/dist/{emailer → lib/emailer}/types.js +0 -0
- /package/dist/{emailer → lib/emailer}/utils/constants.d.ts +0 -0
- /package/dist/{emailer → lib/emailer}/utils/constants.js +0 -0
- /package/dist/{emailer → lib/emailer}/utils/index.d.ts +0 -0
- /package/dist/{emailer → lib/emailer}/utils/index.js +0 -0
- /package/dist/{emailer → lib/emailer}/utils/logger.d.ts +0 -0
- /package/dist/{emailer → lib/emailer}/utils/logger.js +0 -0
- /package/dist/{emailer → lib/emailer}/utils/validation.d.ts +0 -0
- /package/dist/{emailer → lib/emailer}/utils/validation.js +0 -0
- /package/dist/{index.d.ts → lib/index.d.ts} +0 -0
- /package/dist/{index.js → lib/index.js} +0 -0
- /package/dist/{template_manager → lib/template_manager}/config/index.d.ts +0 -0
- /package/dist/{template_manager → lib/template_manager}/config/index.js +0 -0
- /package/dist/{template_manager → lib/template_manager}/engine/handlebars_engine.d.ts +0 -0
- /package/dist/{template_manager → lib/template_manager}/engine/handlebars_engine.js +0 -0
- /package/dist/{template_manager → lib/template_manager}/engine/index.d.ts +0 -0
- /package/dist/{template_manager → lib/template_manager}/engine/index.js +0 -0
- /package/dist/{template_manager → lib/template_manager}/utils/index.d.ts +0 -0
- /package/dist/{template_manager → lib/template_manager}/utils/index.js +0 -0
- /package/dist/{template_manager → lib/template_manager}/utils/system_variables.d.ts +0 -0
- /package/dist/{template_manager → lib/template_manager}/utils/system_variables.js +0 -0
- /package/dist/{template_manager → lib/template_manager}/utils/validation.d.ts +0 -0
- /package/dist/{template_manager → lib/template_manager}/utils/validation.js +0 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Variable resolver for template manager
|
|
2
|
+
* Variable resolver for template manager (v2.0.0)
|
|
3
3
|
*
|
|
4
|
-
* Resolves user variables, system variables, and @template references
|
|
4
|
+
* Resolves user variables, system variables, and @template references.
|
|
5
|
+
* Uses scope_chain (hierarchical scope resolution) instead of org_id.
|
|
5
6
|
*/
|
|
6
7
|
import { TEMPLATE_REFERENCE_PATTERN, MAX_TEMPLATE_REFERENCE_DEPTH, ERROR_MESSAGES, } from '../config/constants.js';
|
|
7
8
|
import { resolve_system_variables } from '../utils/system_variables.js';
|
|
8
9
|
import { get_template_by_name } from '../db/template_repository.js';
|
|
9
10
|
import { render_handlebars_string } from './handlebars_engine.js';
|
|
10
11
|
/**
|
|
11
|
-
* Merge user variables with system variables
|
|
12
|
-
*
|
|
13
|
-
* System variables take lower priority than user variables
|
|
12
|
+
* Merge user variables with system variables.
|
|
13
|
+
* System variables take lower priority than user variables.
|
|
14
14
|
*
|
|
15
15
|
* @param user_variables - Variables provided by user
|
|
16
16
|
* @returns Merged variables with system variables
|
|
@@ -23,7 +23,7 @@ export function resolve_variables(user_variables) {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
* Extract @template references from content
|
|
26
|
+
* Extract @template references from content.
|
|
27
27
|
*
|
|
28
28
|
* @param content - Template content to scan
|
|
29
29
|
* @returns Array of template names referenced
|
|
@@ -42,21 +42,19 @@ export function extract_template_references(content) {
|
|
|
42
42
|
return Array.from(references);
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
|
-
* Resolve @template references in content
|
|
46
|
-
*
|
|
47
|
-
* Recursively fetches and renders referenced templates
|
|
45
|
+
* Resolve @template references in HTML content.
|
|
46
|
+
* Recursively fetches and renders referenced templates using the scope_chain.
|
|
48
47
|
*
|
|
49
48
|
* @param content - Template content with @references
|
|
50
49
|
* @param variables - Variables to use for rendering
|
|
51
50
|
* @param hazo_connect - Database connection
|
|
52
|
-
* @param
|
|
51
|
+
* @param scope_chain - Ordered scope chain, deepest first (see get_template_by_name)
|
|
53
52
|
* @param visited - Set of already visited templates (for circular detection)
|
|
54
53
|
* @param depth - Current recursion depth
|
|
55
54
|
* @returns Resolved content with references replaced
|
|
56
55
|
*/
|
|
57
|
-
export async function resolve_template_references(content, variables, hazo_connect,
|
|
56
|
+
export async function resolve_template_references(content, variables, hazo_connect, scope_chain, visited = new Set(), depth = 0) {
|
|
58
57
|
try {
|
|
59
|
-
// Check max depth
|
|
60
58
|
if (depth > MAX_TEMPLATE_REFERENCE_DEPTH) {
|
|
61
59
|
return {
|
|
62
60
|
success: false,
|
|
@@ -74,7 +72,6 @@ export async function resolve_template_references(content, variables, hazo_conne
|
|
|
74
72
|
}
|
|
75
73
|
let resolved_content = content;
|
|
76
74
|
for (const ref_name of references) {
|
|
77
|
-
// Check for circular reference
|
|
78
75
|
if (visited.has(ref_name)) {
|
|
79
76
|
return {
|
|
80
77
|
success: false,
|
|
@@ -82,22 +79,18 @@ export async function resolve_template_references(content, variables, hazo_conne
|
|
|
82
79
|
message: `Circular reference detected: ${ref_name}`,
|
|
83
80
|
};
|
|
84
81
|
}
|
|
85
|
-
|
|
86
|
-
const template_result = await get_template_by_name(hazo_connect, org_id, ref_name);
|
|
82
|
+
const template_result = await get_template_by_name(hazo_connect, scope_chain, ref_name);
|
|
87
83
|
if (!template_result.success || !template_result.data) {
|
|
88
|
-
// Template not found
|
|
84
|
+
// Template not found — leave reference as-is
|
|
89
85
|
continue;
|
|
90
86
|
}
|
|
91
87
|
const template = template_result.data;
|
|
92
88
|
visited.add(ref_name);
|
|
93
|
-
|
|
94
|
-
const nested_result = await resolve_template_references(template.template_html, variables, hazo_connect, org_id, new Set(visited), depth + 1);
|
|
89
|
+
const nested_result = await resolve_template_references(template.template_html, variables, hazo_connect, scope_chain, new Set(visited), depth + 1);
|
|
95
90
|
if (!nested_result.success) {
|
|
96
91
|
return nested_result;
|
|
97
92
|
}
|
|
98
|
-
// Render the fetched template with variables
|
|
99
93
|
const rendered_ref = render_handlebars_string(nested_result.rendered_html || template.template_html, variables);
|
|
100
|
-
// Replace the @reference with rendered content
|
|
101
94
|
const ref_pattern = new RegExp(`@${ref_name}\\b`, 'g');
|
|
102
95
|
resolved_content = resolved_content.replace(ref_pattern, rendered_ref);
|
|
103
96
|
}
|
|
@@ -117,24 +110,24 @@ export async function resolve_template_references(content, variables, hazo_conne
|
|
|
117
110
|
}
|
|
118
111
|
}
|
|
119
112
|
/**
|
|
120
|
-
* Resolve @template references for both HTML and text content
|
|
113
|
+
* Resolve @template references for both HTML and text content.
|
|
121
114
|
*
|
|
122
115
|
* @param html_content - HTML template content
|
|
123
116
|
* @param text_content - Text template content
|
|
124
117
|
* @param variables - Variables for rendering
|
|
125
118
|
* @param hazo_connect - Database connection
|
|
126
|
-
* @param
|
|
119
|
+
* @param scope_chain - Ordered scope chain, deepest first
|
|
127
120
|
* @returns Resolved HTML and text content
|
|
128
121
|
*/
|
|
129
|
-
export async function resolve_all_template_references(html_content, text_content, variables, hazo_connect,
|
|
122
|
+
export async function resolve_all_template_references(html_content, text_content, variables, hazo_connect, scope_chain) {
|
|
130
123
|
try {
|
|
131
|
-
|
|
132
|
-
|
|
124
|
+
const [html_result, text_result] = await Promise.all([
|
|
125
|
+
resolve_template_references(html_content, variables, hazo_connect, scope_chain),
|
|
126
|
+
resolve_text_template_references(text_content, variables, hazo_connect, scope_chain),
|
|
127
|
+
]);
|
|
133
128
|
if (!html_result.success) {
|
|
134
129
|
return html_result;
|
|
135
130
|
}
|
|
136
|
-
// Resolve text references (fetch text version of templates)
|
|
137
|
-
const text_result = await resolve_text_template_references(text_content, variables, hazo_connect, org_id);
|
|
138
131
|
if (!text_result.success) {
|
|
139
132
|
return text_result;
|
|
140
133
|
}
|
|
@@ -155,10 +148,10 @@ export async function resolve_all_template_references(html_content, text_content
|
|
|
155
148
|
}
|
|
156
149
|
}
|
|
157
150
|
/**
|
|
158
|
-
* Resolve @template references in text content
|
|
159
|
-
* Uses template_text instead of template_html
|
|
151
|
+
* Resolve @template references in text content.
|
|
152
|
+
* Uses template_text instead of template_html.
|
|
160
153
|
*/
|
|
161
|
-
async function resolve_text_template_references(content, variables, hazo_connect,
|
|
154
|
+
async function resolve_text_template_references(content, variables, hazo_connect, scope_chain, visited = new Set(), depth = 0) {
|
|
162
155
|
try {
|
|
163
156
|
if (depth > MAX_TEMPLATE_REFERENCE_DEPTH) {
|
|
164
157
|
return {
|
|
@@ -184,14 +177,13 @@ async function resolve_text_template_references(content, variables, hazo_connect
|
|
|
184
177
|
message: `Circular reference detected: ${ref_name}`,
|
|
185
178
|
};
|
|
186
179
|
}
|
|
187
|
-
const template_result = await get_template_by_name(hazo_connect,
|
|
180
|
+
const template_result = await get_template_by_name(hazo_connect, scope_chain, ref_name);
|
|
188
181
|
if (!template_result.success || !template_result.data) {
|
|
189
182
|
continue;
|
|
190
183
|
}
|
|
191
184
|
const template = template_result.data;
|
|
192
185
|
visited.add(ref_name);
|
|
193
|
-
|
|
194
|
-
const nested_result = await resolve_text_template_references(template.template_text, variables, hazo_connect, org_id, new Set(visited), depth + 1);
|
|
186
|
+
const nested_result = await resolve_text_template_references(template.template_text, variables, hazo_connect, scope_chain, new Set(visited), depth + 1);
|
|
195
187
|
if (!nested_result.success) {
|
|
196
188
|
return nested_result;
|
|
197
189
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variable_resolver.js","sourceRoot":"","sources":["../../../../src/lib/template_manager/engine/variable_resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Manager Module (v2.0.0)
|
|
3
|
+
*
|
|
4
|
+
* Email template management with Handlebars rendering and database storage.
|
|
5
|
+
* Uses scope_id for hierarchical template resolution (org hierarchy, tenant hierarchy, etc.).
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import {
|
|
10
|
+
* send_template_email,
|
|
11
|
+
* register_template_type,
|
|
12
|
+
* set_scope_resolver,
|
|
13
|
+
* } from 'hazo_notify/template_manager';
|
|
14
|
+
* import { createHazoConnect } from 'hazo_connect/server';
|
|
15
|
+
*
|
|
16
|
+
* const hazo = createHazoConnect({ type: 'sqlite', sqlite: { database_path: './db.sqlite' } });
|
|
17
|
+
*
|
|
18
|
+
* // Register template types at boot (replaces seed_default_templates)
|
|
19
|
+
* register_template_type({
|
|
20
|
+
* template_name: 'welcome_email',
|
|
21
|
+
* template_label: 'Welcome Email',
|
|
22
|
+
* variables: [
|
|
23
|
+
* { variable_name: 'user_name', variable_description: "Recipient's full name" },
|
|
24
|
+
* { variable_name: 'login_url', variable_description: 'URL to login page' },
|
|
25
|
+
* ],
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // Wire a scope resolver (optional — flat lookup if omitted)
|
|
29
|
+
* set_scope_resolver(async (scope_id) => {
|
|
30
|
+
* // Return ancestor scope IDs, nearest-to-root order
|
|
31
|
+
* return db.getAncestors(scope_id);
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // Send a templated email
|
|
35
|
+
* const result = await send_template_email({
|
|
36
|
+
* template_name: 'welcome_email',
|
|
37
|
+
* variables: { user_name: 'John', login_url: 'https://example.com/login' },
|
|
38
|
+
* to: 'john@example.com',
|
|
39
|
+
* scope_id: 'tenant-uuid-here',
|
|
40
|
+
* subject: 'Welcome!',
|
|
41
|
+
* }, hazo);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export { send_template_email, render_template, preview_template, validate_template_variables, } from './template_manager.js';
|
|
45
|
+
export { load_template_config, get_template_variables, get_all_variable_names, clear_config_cache, } from './config/config_loader.js';
|
|
46
|
+
export { register_template_type, get_registered_template_types, get_registered_template_type, } from './registry.js';
|
|
47
|
+
export { get_scope_chain, invalidate_scope_chain, set_scope_resolver, } from './cache/scope_chain_cache.js';
|
|
48
|
+
export { list_categories, get_category, create_category, update_category, delete_category, find_category_by_name_in_chain, list_templates, list_templates_by_category, get_template, get_template_by_name, create_template, update_template, delete_template, } from './db/index.js';
|
|
49
|
+
export { render_handlebars, render_handlebars_string, clear_template_cache, invalidate_template_cache, resolve_variables, extract_template_references, resolve_template_references, resolve_all_template_references, } from './engine/index.js';
|
|
50
|
+
export { get_system_variables, resolve_system_variables, get_system_variable_definitions, validate_template_name, validate_category_name, validate_variable_name, extract_variables_from_content, validate_provided_variables, } from './utils/index.js';
|
|
51
|
+
export { TABLE_TEMPLATE_CATEGORY, TABLE_TEMPLATES, DEFAULT_CATEGORY_NAMES, MAX_TEMPLATE_NAME_LENGTH, MAX_CATEGORY_NAME_LENGTH, VARIABLE_PATTERN, TEMPLATE_REFERENCE_PATTERN, ERROR_MESSAGES, } from './config/constants.js';
|
|
52
|
+
export { sync_system_templates } from './seed/sync.js';
|
|
53
|
+
export { init_template_manager, verify_notify_setup, } from './init.js';
|
|
54
|
+
export type { InitTemplateManagerOptions } from './init.js';
|
|
55
|
+
export type { TemplateVariableDefinition, TemplateTypeDefinition, SystemVariable, TemplateManagerConfig, SystemTemplateManifest, TemplateCategory, TemplateCategoryInput, TemplateCategoryUpdate, EmailTemplate, EmailTemplateInput, EmailTemplateUpdate, HazoConnectInstance, HazoConnectQueryBuilder, TemplateRenderResult, TemplateOperationResponse, TemplateEmailAttachment, SendTemplateEmailOptions, SendTemplateEmailResponse, CategoryTreeItem, VariableItem, TemplateReferenceItem, Logger, } from './types.js';
|
|
56
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/template_manager/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAEL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,8BAA8B,EAE9B,cAAc,EACd,0BAA0B,EAC1B,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,+BAA+B,EAC/B,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,GACf,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAG5D,YAAY,EAEV,0BAA0B,EAC1B,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EAErB,sBAAsB,EAEtB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EAEnB,mBAAmB,EACnB,uBAAuB,EAEvB,oBAAoB,EACpB,yBAAyB,EAEzB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EAEzB,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EAErB,MAAM,GACP,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Manager Module (v2.0.0)
|
|
3
|
+
*
|
|
4
|
+
* Email template management with Handlebars rendering and database storage.
|
|
5
|
+
* Uses scope_id for hierarchical template resolution (org hierarchy, tenant hierarchy, etc.).
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import {
|
|
10
|
+
* send_template_email,
|
|
11
|
+
* register_template_type,
|
|
12
|
+
* set_scope_resolver,
|
|
13
|
+
* } from 'hazo_notify/template_manager';
|
|
14
|
+
* import { createHazoConnect } from 'hazo_connect/server';
|
|
15
|
+
*
|
|
16
|
+
* const hazo = createHazoConnect({ type: 'sqlite', sqlite: { database_path: './db.sqlite' } });
|
|
17
|
+
*
|
|
18
|
+
* // Register template types at boot (replaces seed_default_templates)
|
|
19
|
+
* register_template_type({
|
|
20
|
+
* template_name: 'welcome_email',
|
|
21
|
+
* template_label: 'Welcome Email',
|
|
22
|
+
* variables: [
|
|
23
|
+
* { variable_name: 'user_name', variable_description: "Recipient's full name" },
|
|
24
|
+
* { variable_name: 'login_url', variable_description: 'URL to login page' },
|
|
25
|
+
* ],
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // Wire a scope resolver (optional — flat lookup if omitted)
|
|
29
|
+
* set_scope_resolver(async (scope_id) => {
|
|
30
|
+
* // Return ancestor scope IDs, nearest-to-root order
|
|
31
|
+
* return db.getAncestors(scope_id);
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // Send a templated email
|
|
35
|
+
* const result = await send_template_email({
|
|
36
|
+
* template_name: 'welcome_email',
|
|
37
|
+
* variables: { user_name: 'John', login_url: 'https://example.com/login' },
|
|
38
|
+
* to: 'john@example.com',
|
|
39
|
+
* scope_id: 'tenant-uuid-here',
|
|
40
|
+
* subject: 'Welcome!',
|
|
41
|
+
* }, hazo);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
// Core functions
|
|
45
|
+
export { send_template_email, render_template, preview_template, validate_template_variables, } from './template_manager.js';
|
|
46
|
+
// Config
|
|
47
|
+
export { load_template_config, get_template_variables, get_all_variable_names, clear_config_cache, } from './config/config_loader.js';
|
|
48
|
+
// Registry
|
|
49
|
+
export { register_template_type, get_registered_template_types, get_registered_template_type, } from './registry.js';
|
|
50
|
+
// Scope chain cache
|
|
51
|
+
export { get_scope_chain, invalidate_scope_chain, set_scope_resolver, } from './cache/scope_chain_cache.js';
|
|
52
|
+
// Database operations
|
|
53
|
+
export {
|
|
54
|
+
// Categories
|
|
55
|
+
list_categories, get_category, create_category, update_category, delete_category, find_category_by_name_in_chain,
|
|
56
|
+
// Templates
|
|
57
|
+
list_templates, list_templates_by_category, get_template, get_template_by_name, create_template, update_template, delete_template, } from './db/index.js';
|
|
58
|
+
// Engine
|
|
59
|
+
export { render_handlebars, render_handlebars_string, clear_template_cache, invalidate_template_cache, resolve_variables, extract_template_references, resolve_template_references, resolve_all_template_references, } from './engine/index.js';
|
|
60
|
+
// Utils
|
|
61
|
+
export { get_system_variables, resolve_system_variables, get_system_variable_definitions, validate_template_name, validate_category_name, validate_variable_name, extract_variables_from_content, validate_provided_variables, } from './utils/index.js';
|
|
62
|
+
// Constants
|
|
63
|
+
export { TABLE_TEMPLATE_CATEGORY, TABLE_TEMPLATES, DEFAULT_CATEGORY_NAMES, MAX_TEMPLATE_NAME_LENGTH, MAX_CATEGORY_NAME_LENGTH, VARIABLE_PATTERN, TEMPLATE_REFERENCE_PATTERN, ERROR_MESSAGES, } from './config/constants.js';
|
|
64
|
+
// Seed
|
|
65
|
+
export { sync_system_templates } from './seed/sync.js';
|
|
66
|
+
// Init
|
|
67
|
+
export { init_template_manager, verify_notify_setup, } from './init.js';
|
|
68
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/template_manager/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,iBAAiB;AACjB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAE/B,SAAS;AACT,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,WAAW;AACX,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AAEvB,oBAAoB;AACpB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AAEtC,sBAAsB;AACtB,OAAO;AACL,aAAa;AACb,eAAe,EACf,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,8BAA8B;AAC9B,YAAY;AACZ,cAAc,EACd,0BAA0B,EAC1B,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,SAAS;AACT,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,mBAAmB,CAAC;AAE3B,QAAQ;AACR,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,+BAA+B,EAC/B,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAE1B,YAAY;AACZ,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO;AACP,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO;AACP,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boot helper for the template manager (v2.0.0)
|
|
3
|
+
*
|
|
4
|
+
* Consumers call init_template_manager() once at application startup to:
|
|
5
|
+
* - Obtain a hazo_connect instance via the provided factory
|
|
6
|
+
* - Wire an optional scope resolver into the scope chain cache
|
|
7
|
+
* - Seed/sync system templates from provided manifests
|
|
8
|
+
*
|
|
9
|
+
* verify_notify_setup() can be called after init to confirm the required
|
|
10
|
+
* database tables are present and queryable.
|
|
11
|
+
*/
|
|
12
|
+
import type { HazoConnectInstance, SystemTemplateManifest } from './types.js';
|
|
13
|
+
export interface InitTemplateManagerOptions {
|
|
14
|
+
/** Factory that returns (or resolves to) a hazo_connect instance. */
|
|
15
|
+
hazo_connect_factory: () => Promise<HazoConnectInstance> | HazoConnectInstance;
|
|
16
|
+
/**
|
|
17
|
+
* Optional scope resolver. Receives a scope_id and must return the ancestor
|
|
18
|
+
* chain (nearest-to-root order), NOT including scope_id itself.
|
|
19
|
+
* Omit for flat (single-scope) lookup mode.
|
|
20
|
+
*/
|
|
21
|
+
scope_resolver?: (scope_id: string) => Promise<string[]>;
|
|
22
|
+
/** System template manifests to seed/sync on startup. */
|
|
23
|
+
manifests?: SystemTemplateManifest[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Wire up the template manager at application startup.
|
|
27
|
+
*
|
|
28
|
+
* @param options - Factory, optional scope resolver, and optional manifests.
|
|
29
|
+
* @returns The resolved hazo_connect instance plus sync result counts.
|
|
30
|
+
*/
|
|
31
|
+
export declare function init_template_manager(options: InitTemplateManagerOptions): Promise<{
|
|
32
|
+
hazo_connect: HazoConnectInstance;
|
|
33
|
+
synced: number;
|
|
34
|
+
updated: number;
|
|
35
|
+
skipped: number;
|
|
36
|
+
errors: string[];
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Verify that the required hazo_notify tables exist and are queryable.
|
|
40
|
+
*
|
|
41
|
+
* Performs a lightweight list (limit 1) against both tables. Returns
|
|
42
|
+
* ok:true only when both succeed.
|
|
43
|
+
*
|
|
44
|
+
* @param hazo_connect - An already-initialised hazo_connect instance.
|
|
45
|
+
*/
|
|
46
|
+
export declare function verify_notify_setup(hazo_connect: HazoConnectInstance): Promise<{
|
|
47
|
+
ok: boolean;
|
|
48
|
+
tables: {
|
|
49
|
+
categories: boolean;
|
|
50
|
+
templates: boolean;
|
|
51
|
+
};
|
|
52
|
+
error?: string;
|
|
53
|
+
}>;
|
|
54
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/lib/template_manager/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAS9E,MAAM,WAAW,0BAA0B;IACzC,qEAAqE;IACrE,oBAAoB,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;IAC/E;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,yDAAyD;IACzD,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACtC;AAMD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC;IACT,YAAY,EAAE,mBAAmB,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CAuBD;AAMD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC;IACT,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAkCD"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boot helper for the template manager (v2.0.0)
|
|
3
|
+
*
|
|
4
|
+
* Consumers call init_template_manager() once at application startup to:
|
|
5
|
+
* - Obtain a hazo_connect instance via the provided factory
|
|
6
|
+
* - Wire an optional scope resolver into the scope chain cache
|
|
7
|
+
* - Seed/sync system templates from provided manifests
|
|
8
|
+
*
|
|
9
|
+
* verify_notify_setup() can be called after init to confirm the required
|
|
10
|
+
* database tables are present and queryable.
|
|
11
|
+
*/
|
|
12
|
+
import { set_scope_resolver } from './cache/scope_chain_cache.js';
|
|
13
|
+
import { sync_system_templates } from './seed/sync.js';
|
|
14
|
+
import { TABLE_TEMPLATE_CATEGORY, TABLE_TEMPLATES } from './config/constants.js';
|
|
15
|
+
// ============================================================
|
|
16
|
+
// init_template_manager
|
|
17
|
+
// ============================================================
|
|
18
|
+
/**
|
|
19
|
+
* Wire up the template manager at application startup.
|
|
20
|
+
*
|
|
21
|
+
* @param options - Factory, optional scope resolver, and optional manifests.
|
|
22
|
+
* @returns The resolved hazo_connect instance plus sync result counts.
|
|
23
|
+
*/
|
|
24
|
+
export async function init_template_manager(options) {
|
|
25
|
+
// 1. Resolve hazo_connect (factory may be sync or async)
|
|
26
|
+
const hazo_connect = await options.hazo_connect_factory();
|
|
27
|
+
// 2. Wire scope resolver if provided
|
|
28
|
+
if (options.scope_resolver) {
|
|
29
|
+
set_scope_resolver(options.scope_resolver);
|
|
30
|
+
}
|
|
31
|
+
// 3. Sync manifests if provided and non-empty
|
|
32
|
+
if (options.manifests && options.manifests.length > 0) {
|
|
33
|
+
const result = await sync_system_templates(hazo_connect, options.manifests);
|
|
34
|
+
return {
|
|
35
|
+
hazo_connect,
|
|
36
|
+
synced: result.synced,
|
|
37
|
+
updated: result.updated,
|
|
38
|
+
skipped: result.skipped,
|
|
39
|
+
errors: result.errors,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// No manifests — return zero counts
|
|
43
|
+
return { hazo_connect, synced: 0, updated: 0, skipped: 0, errors: [] };
|
|
44
|
+
}
|
|
45
|
+
// ============================================================
|
|
46
|
+
// verify_notify_setup
|
|
47
|
+
// ============================================================
|
|
48
|
+
/**
|
|
49
|
+
* Verify that the required hazo_notify tables exist and are queryable.
|
|
50
|
+
*
|
|
51
|
+
* Performs a lightweight list (limit 1) against both tables. Returns
|
|
52
|
+
* ok:true only when both succeed.
|
|
53
|
+
*
|
|
54
|
+
* @param hazo_connect - An already-initialised hazo_connect instance.
|
|
55
|
+
*/
|
|
56
|
+
export async function verify_notify_setup(hazo_connect) {
|
|
57
|
+
let categories = false;
|
|
58
|
+
let templates = false;
|
|
59
|
+
const error_messages = [];
|
|
60
|
+
// Check categories table
|
|
61
|
+
try {
|
|
62
|
+
await hazo_connect.list(hazo_connect.query().from(TABLE_TEMPLATE_CATEGORY).select('*').limit(1));
|
|
63
|
+
categories = true;
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
67
|
+
error_messages.push(`categories: ${msg}`);
|
|
68
|
+
}
|
|
69
|
+
// Check templates table
|
|
70
|
+
try {
|
|
71
|
+
await hazo_connect.list(hazo_connect.query().from(TABLE_TEMPLATES).select('*').limit(1));
|
|
72
|
+
templates = true;
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
76
|
+
error_messages.push(`templates: ${msg}`);
|
|
77
|
+
}
|
|
78
|
+
const ok = categories && templates;
|
|
79
|
+
return {
|
|
80
|
+
ok,
|
|
81
|
+
tables: { categories, templates },
|
|
82
|
+
...(error_messages.length > 0 ? { error: error_messages.join('; ') } : {}),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/lib/template_manager/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAmBjF,+DAA+D;AAC/D,wBAAwB;AACxB,+DAA+D;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAmC;IAQnC,yDAAyD;IACzD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAE1D,qCAAqC;IACrC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,kBAAkB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAED,8CAA8C;IAC9C,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5E,OAAO;YACL,YAAY;YACZ,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACzE,CAAC;AAED,+DAA+D;AAC/D,sBAAsB;AACtB,+DAA+D;AAE/D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,YAAiC;IAMjC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,yBAAyB;IACzB,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,IAAI,CACrB,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACxE,CAAC;QACF,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,cAAc,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,IAAI,CACrB,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAChE,CAAC;QACF,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,cAAc,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,EAAE,GAAG,UAAU,IAAI,SAAS,CAAC;IAEnC,OAAO;QACL,EAAE;QACF,MAAM,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;QACjC,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template type registry for template manager (v2.0.0)
|
|
3
|
+
*
|
|
4
|
+
* server-only: do not import in client bundles.
|
|
5
|
+
*
|
|
6
|
+
* Consuming packages register their TemplateTypeDefinition entries here at
|
|
7
|
+
* boot time. First-wins semantics prevent accidental double-registration.
|
|
8
|
+
*/
|
|
9
|
+
import type { TemplateTypeDefinition } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Register a template type. First-wins: if already registered, logs a warning
|
|
12
|
+
* and skips. Call this once per template type at application boot time.
|
|
13
|
+
*/
|
|
14
|
+
export declare function register_template_type(def: TemplateTypeDefinition): void;
|
|
15
|
+
/**
|
|
16
|
+
* Returns all registered template type definitions.
|
|
17
|
+
*/
|
|
18
|
+
export declare function get_registered_template_types(): TemplateTypeDefinition[];
|
|
19
|
+
/**
|
|
20
|
+
* Get a single registered type by template_name, or undefined if not found.
|
|
21
|
+
*/
|
|
22
|
+
export declare function get_registered_template_type(template_name: string): TemplateTypeDefinition | undefined;
|
|
23
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/lib/template_manager/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAIzD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,sBAAsB,GAAG,IAAI,CAQxE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,sBAAsB,EAAE,CAExE;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,MAAM,GACpB,sBAAsB,GAAG,SAAS,CAEpC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template type registry for template manager (v2.0.0)
|
|
3
|
+
*
|
|
4
|
+
* server-only: do not import in client bundles.
|
|
5
|
+
*
|
|
6
|
+
* Consuming packages register their TemplateTypeDefinition entries here at
|
|
7
|
+
* boot time. First-wins semantics prevent accidental double-registration.
|
|
8
|
+
*/
|
|
9
|
+
const registry = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* Register a template type. First-wins: if already registered, logs a warning
|
|
12
|
+
* and skips. Call this once per template type at application boot time.
|
|
13
|
+
*/
|
|
14
|
+
export function register_template_type(def) {
|
|
15
|
+
if (registry.has(def.template_name)) {
|
|
16
|
+
console.warn(`[hazo_notify] template type '${def.template_name}' already registered; first registration wins`);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
registry.set(def.template_name, def);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Returns all registered template type definitions.
|
|
23
|
+
*/
|
|
24
|
+
export function get_registered_template_types() {
|
|
25
|
+
return Array.from(registry.values());
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get a single registered type by template_name, or undefined if not found.
|
|
29
|
+
*/
|
|
30
|
+
export function get_registered_template_type(template_name) {
|
|
31
|
+
return registry.get(template_name);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/lib/template_manager/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkC,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAA2B;IAChE,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CACV,gCAAgC,GAAG,CAAC,aAAa,+CAA+C,CACjG,CAAC;QACF,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,aAAqB;IAErB,OAAO,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HazoConnectInstance, SystemTemplateManifest } from '../types.js';
|
|
2
|
+
export declare function sync_system_templates(hazo_connect: HazoConnectInstance, manifests: SystemTemplateManifest[]): Promise<{
|
|
3
|
+
synced: number;
|
|
4
|
+
updated: number;
|
|
5
|
+
skipped: number;
|
|
6
|
+
errors: string[];
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../src/lib/template_manager/seed/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EAGvB,MAAM,aAAa,CAAC;AAOrB,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,mBAAmB,EACjC,SAAS,EAAE,sBAAsB,EAAE,GAClC,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAuFjF"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { TABLE_TEMPLATES, TABLE_TEMPLATE_CATEGORY, ERROR_MESSAGES, } from '../config/constants.js';
|
|
2
|
+
export async function sync_system_templates(hazo_connect, manifests) {
|
|
3
|
+
if (!hazo_connect) {
|
|
4
|
+
throw new Error(ERROR_MESSAGES.DB_CONNECTION_REQUIRED);
|
|
5
|
+
}
|
|
6
|
+
let synced = 0;
|
|
7
|
+
let updated = 0;
|
|
8
|
+
let skipped = 0;
|
|
9
|
+
const errors = [];
|
|
10
|
+
for (const manifest of manifests) {
|
|
11
|
+
try {
|
|
12
|
+
// 1. Find or create the global category by name
|
|
13
|
+
const cat_q = hazo_connect
|
|
14
|
+
.query()
|
|
15
|
+
.from(TABLE_TEMPLATE_CATEGORY)
|
|
16
|
+
.select('*')
|
|
17
|
+
.where('template_category_name', 'eq', manifest.category)
|
|
18
|
+
.where('scope_id', 'is', null);
|
|
19
|
+
const cat_rows = await hazo_connect.list(cat_q);
|
|
20
|
+
let category;
|
|
21
|
+
if (cat_rows.length === 0) {
|
|
22
|
+
category = await hazo_connect.insert(TABLE_TEMPLATE_CATEGORY, {
|
|
23
|
+
scope_id: null,
|
|
24
|
+
template_category_name: manifest.category,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
category = cat_rows[0];
|
|
29
|
+
}
|
|
30
|
+
// 2. Look up the global template by name
|
|
31
|
+
const tpl_q = hazo_connect
|
|
32
|
+
.query()
|
|
33
|
+
.from(TABLE_TEMPLATES)
|
|
34
|
+
.select('*')
|
|
35
|
+
.where('template_name', 'eq', manifest.template_name)
|
|
36
|
+
.where('scope_id', 'is', null);
|
|
37
|
+
const tpl_rows = await hazo_connect.list(tpl_q);
|
|
38
|
+
if (tpl_rows.length === 0) {
|
|
39
|
+
// 3a. NOT found — insert new global template
|
|
40
|
+
await hazo_connect.insert(TABLE_TEMPLATES, {
|
|
41
|
+
scope_id: null,
|
|
42
|
+
template_category_id: category.id,
|
|
43
|
+
template_name: manifest.template_name,
|
|
44
|
+
template_html: manifest.html,
|
|
45
|
+
template_text: manifest.text,
|
|
46
|
+
template_variables: manifest.variables,
|
|
47
|
+
is_modified: false,
|
|
48
|
+
});
|
|
49
|
+
synced++;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const existing = tpl_rows[0];
|
|
53
|
+
if (existing.is_modified) {
|
|
54
|
+
// 3c. User has customized this template — leave it alone
|
|
55
|
+
skipped++;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// 3b. Found and unmodified — update content
|
|
59
|
+
await hazo_connect.updateById(TABLE_TEMPLATES, existing.id, {
|
|
60
|
+
template_html: manifest.html,
|
|
61
|
+
template_text: manifest.text,
|
|
62
|
+
template_variables: manifest.variables,
|
|
63
|
+
template_category_id: category.id,
|
|
64
|
+
changed_at: new Date().toISOString(),
|
|
65
|
+
});
|
|
66
|
+
updated++;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
72
|
+
errors.push(`${manifest.template_name}: ${msg}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { synced, updated, skipped, errors };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../../src/lib/template_manager/seed/sync.ts"],"names":[],"mappings":"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"}
|