hazo_notify 1.1.4 → 3.1.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 (236) hide show
  1. package/README.md +163 -41
  2. package/dist/components/template_manager/category_dialog.d.ts +11 -0
  3. package/dist/components/template_manager/category_dialog.d.ts.map +1 -0
  4. package/dist/components/template_manager/category_dialog.js +41 -0
  5. package/dist/components/template_manager/category_dialog.js.map +1 -0
  6. package/dist/components/template_manager/category_tree.d.ts +13 -0
  7. package/dist/components/template_manager/category_tree.d.ts.map +1 -0
  8. package/dist/components/template_manager/category_tree.js +45 -0
  9. package/dist/components/template_manager/category_tree.js.map +1 -0
  10. package/dist/components/template_manager/index.d.ts +10 -0
  11. package/dist/components/template_manager/index.d.ts.map +1 -0
  12. package/dist/components/template_manager/index.js +8 -0
  13. package/dist/components/template_manager/index.js.map +1 -0
  14. package/dist/components/template_manager/preview_dialog.d.ts +11 -0
  15. package/dist/components/template_manager/preview_dialog.d.ts.map +1 -0
  16. package/dist/components/template_manager/preview_dialog.js +15 -0
  17. package/dist/components/template_manager/preview_dialog.js.map +1 -0
  18. package/dist/components/template_manager/template_dialog.d.ts +12 -0
  19. package/dist/components/template_manager/template_dialog.d.ts.map +1 -0
  20. package/dist/components/template_manager/template_dialog.js +46 -0
  21. package/dist/components/template_manager/template_dialog.js.map +1 -0
  22. package/dist/components/template_manager/template_editor.d.ts +12 -0
  23. package/dist/components/template_manager/template_editor.d.ts.map +1 -0
  24. package/dist/components/template_manager/template_editor.js +57 -0
  25. package/dist/components/template_manager/template_editor.js.map +1 -0
  26. package/dist/components/template_manager/template_globals_admin.d.ts +8 -0
  27. package/dist/components/template_manager/template_globals_admin.d.ts.map +1 -0
  28. package/dist/components/template_manager/template_globals_admin.js +27 -0
  29. package/dist/components/template_manager/template_globals_admin.js.map +1 -0
  30. package/dist/components/template_manager/template_manager_admin.d.ts +44 -0
  31. package/dist/components/template_manager/template_manager_admin.d.ts.map +1 -0
  32. package/dist/components/template_manager/template_manager_admin.js +272 -0
  33. package/dist/components/template_manager/template_manager_admin.js.map +1 -0
  34. package/dist/lib/emailer/emailer.d.ts.map +1 -0
  35. package/dist/lib/emailer/emailer.js.map +1 -0
  36. package/dist/lib/emailer/index.d.ts.map +1 -0
  37. package/dist/lib/emailer/index.js.map +1 -0
  38. package/dist/lib/emailer/providers/index.d.ts.map +1 -0
  39. package/dist/lib/emailer/providers/index.js.map +1 -0
  40. package/dist/lib/emailer/providers/pop3_provider.d.ts.map +1 -0
  41. package/dist/lib/emailer/providers/pop3_provider.js.map +1 -0
  42. package/dist/lib/emailer/providers/smtp_provider.d.ts.map +1 -0
  43. package/dist/lib/emailer/providers/smtp_provider.js.map +1 -0
  44. package/dist/lib/emailer/providers/zeptomail_provider.d.ts.map +1 -0
  45. package/dist/{emailer → lib/emailer}/providers/zeptomail_provider.js +9 -6
  46. package/dist/lib/emailer/providers/zeptomail_provider.js.map +1 -0
  47. package/dist/lib/emailer/types.d.ts.map +1 -0
  48. package/dist/lib/emailer/types.js.map +1 -0
  49. package/dist/lib/emailer/utils/constants.d.ts.map +1 -0
  50. package/dist/lib/emailer/utils/constants.js.map +1 -0
  51. package/dist/lib/emailer/utils/index.d.ts.map +1 -0
  52. package/dist/lib/emailer/utils/index.js.map +1 -0
  53. package/dist/lib/emailer/utils/logger.d.ts.map +1 -0
  54. package/dist/lib/emailer/utils/logger.js.map +1 -0
  55. package/dist/lib/emailer/utils/validation.d.ts.map +1 -0
  56. package/dist/lib/emailer/utils/validation.js.map +1 -0
  57. package/dist/lib/index.d.ts.map +1 -0
  58. package/dist/lib/index.js.map +1 -0
  59. package/dist/lib/template_manager/cache/scope_chain_cache.d.ts +26 -0
  60. package/dist/lib/template_manager/cache/scope_chain_cache.d.ts.map +1 -0
  61. package/dist/lib/template_manager/cache/scope_chain_cache.js +60 -0
  62. package/dist/lib/template_manager/cache/scope_chain_cache.js.map +1 -0
  63. package/dist/{template_manager → lib/template_manager}/config/config_loader.d.ts +16 -15
  64. package/dist/lib/template_manager/config/config_loader.d.ts.map +1 -0
  65. package/dist/lib/template_manager/config/config_loader.js +98 -0
  66. package/dist/lib/template_manager/config/config_loader.js.map +1 -0
  67. package/dist/{template_manager → lib/template_manager}/config/constants.d.ts +4 -54
  68. package/dist/lib/template_manager/config/constants.d.ts.map +1 -0
  69. package/dist/{template_manager → lib/template_manager}/config/constants.js +4 -84
  70. package/dist/lib/template_manager/config/constants.js.map +1 -0
  71. package/dist/lib/template_manager/config/index.d.ts.map +1 -0
  72. package/dist/lib/template_manager/config/index.js.map +1 -0
  73. package/dist/{template_manager → lib/template_manager}/db/category_repository.d.ts +22 -14
  74. package/dist/lib/template_manager/db/category_repository.d.ts.map +1 -0
  75. package/dist/{template_manager → lib/template_manager}/db/category_repository.js +127 -83
  76. package/dist/lib/template_manager/db/category_repository.js.map +1 -0
  77. package/dist/lib/template_manager/db/index.d.ts +6 -0
  78. package/dist/lib/template_manager/db/index.d.ts.map +1 -0
  79. package/dist/lib/template_manager/db/index.js +6 -0
  80. package/dist/lib/template_manager/db/index.js.map +1 -0
  81. package/dist/{template_manager → lib/template_manager}/db/template_repository.d.ts +25 -28
  82. package/dist/lib/template_manager/db/template_repository.d.ts.map +1 -0
  83. package/dist/lib/template_manager/db/template_repository.js +507 -0
  84. package/dist/lib/template_manager/db/template_repository.js.map +1 -0
  85. package/dist/lib/template_manager/engine/handlebars_engine.d.ts.map +1 -0
  86. package/dist/lib/template_manager/engine/handlebars_engine.js.map +1 -0
  87. package/dist/lib/template_manager/engine/index.d.ts.map +1 -0
  88. package/dist/lib/template_manager/engine/index.js.map +1 -0
  89. package/dist/{template_manager → lib/template_manager}/engine/variable_resolver.d.ts +13 -14
  90. package/dist/lib/template_manager/engine/variable_resolver.d.ts.map +1 -0
  91. package/dist/{template_manager → lib/template_manager}/engine/variable_resolver.js +25 -33
  92. package/dist/lib/template_manager/engine/variable_resolver.js.map +1 -0
  93. package/dist/lib/template_manager/handlers/adapters/hazo_auth.d.ts +20 -0
  94. package/dist/lib/template_manager/handlers/adapters/hazo_auth.d.ts.map +1 -0
  95. package/dist/lib/template_manager/handlers/adapters/hazo_auth.js +46 -0
  96. package/dist/lib/template_manager/handlers/adapters/hazo_auth.js.map +1 -0
  97. package/dist/lib/template_manager/handlers/auth.d.ts +47 -0
  98. package/dist/lib/template_manager/handlers/auth.d.ts.map +1 -0
  99. package/dist/lib/template_manager/handlers/auth.js +67 -0
  100. package/dist/lib/template_manager/handlers/auth.js.map +1 -0
  101. package/dist/lib/template_manager/handlers/index.d.ts +67 -0
  102. package/dist/lib/template_manager/handlers/index.d.ts.map +1 -0
  103. package/dist/lib/template_manager/handlers/index.js +284 -0
  104. package/dist/lib/template_manager/handlers/index.js.map +1 -0
  105. package/dist/lib/template_manager/index.d.ts +56 -0
  106. package/dist/lib/template_manager/index.d.ts.map +1 -0
  107. package/dist/lib/template_manager/index.js +68 -0
  108. package/dist/lib/template_manager/index.js.map +1 -0
  109. package/dist/lib/template_manager/init.d.ts +54 -0
  110. package/dist/lib/template_manager/init.d.ts.map +1 -0
  111. package/dist/lib/template_manager/init.js +85 -0
  112. package/dist/lib/template_manager/init.js.map +1 -0
  113. package/dist/lib/template_manager/registry.d.ts +23 -0
  114. package/dist/lib/template_manager/registry.d.ts.map +1 -0
  115. package/dist/lib/template_manager/registry.js +33 -0
  116. package/dist/lib/template_manager/registry.js.map +1 -0
  117. package/dist/lib/template_manager/seed/sync.d.ts +8 -0
  118. package/dist/lib/template_manager/seed/sync.d.ts.map +1 -0
  119. package/dist/lib/template_manager/seed/sync.js +77 -0
  120. package/dist/lib/template_manager/seed/sync.js.map +1 -0
  121. package/dist/{template_manager → lib/template_manager}/template_manager.d.ts +25 -27
  122. package/dist/lib/template_manager/template_manager.d.ts.map +1 -0
  123. package/dist/{template_manager → lib/template_manager}/template_manager.js +41 -55
  124. package/dist/lib/template_manager/template_manager.js.map +1 -0
  125. package/dist/{template_manager → lib/template_manager}/types.d.ts +32 -125
  126. package/dist/lib/template_manager/types.d.ts.map +1 -0
  127. package/dist/lib/template_manager/types.js +12 -0
  128. package/dist/lib/template_manager/types.js.map +1 -0
  129. package/dist/lib/template_manager/utils/index.d.ts.map +1 -0
  130. package/dist/lib/template_manager/utils/index.js.map +1 -0
  131. package/dist/lib/template_manager/utils/system_variables.d.ts.map +1 -0
  132. package/dist/lib/template_manager/utils/system_variables.js.map +1 -0
  133. package/dist/lib/template_manager/utils/validation.d.ts.map +1 -0
  134. package/dist/lib/template_manager/utils/validation.js.map +1 -0
  135. package/dist/lib/utils.d.ts +3 -0
  136. package/dist/lib/utils.d.ts.map +1 -0
  137. package/dist/lib/utils.js +6 -0
  138. package/dist/lib/utils.js.map +1 -0
  139. package/migrations/002_scope_migration.sql +93 -0
  140. package/package.json +65 -37
  141. package/dist/emailer/emailer.d.ts.map +0 -1
  142. package/dist/emailer/emailer.js.map +0 -1
  143. package/dist/emailer/index.d.ts.map +0 -1
  144. package/dist/emailer/index.js.map +0 -1
  145. package/dist/emailer/providers/index.d.ts.map +0 -1
  146. package/dist/emailer/providers/index.js.map +0 -1
  147. package/dist/emailer/providers/pop3_provider.d.ts.map +0 -1
  148. package/dist/emailer/providers/pop3_provider.js.map +0 -1
  149. package/dist/emailer/providers/smtp_provider.d.ts.map +0 -1
  150. package/dist/emailer/providers/smtp_provider.js.map +0 -1
  151. package/dist/emailer/providers/zeptomail_provider.d.ts.map +0 -1
  152. package/dist/emailer/providers/zeptomail_provider.js.map +0 -1
  153. package/dist/emailer/types.d.ts.map +0 -1
  154. package/dist/emailer/types.js.map +0 -1
  155. package/dist/emailer/utils/constants.d.ts.map +0 -1
  156. package/dist/emailer/utils/constants.js.map +0 -1
  157. package/dist/emailer/utils/index.d.ts.map +0 -1
  158. package/dist/emailer/utils/index.js.map +0 -1
  159. package/dist/emailer/utils/logger.d.ts.map +0 -1
  160. package/dist/emailer/utils/logger.js.map +0 -1
  161. package/dist/emailer/utils/validation.d.ts.map +0 -1
  162. package/dist/emailer/utils/validation.js.map +0 -1
  163. package/dist/index.d.ts.map +0 -1
  164. package/dist/index.js.map +0 -1
  165. package/dist/template_manager/config/config_loader.d.ts.map +0 -1
  166. package/dist/template_manager/config/config_loader.js +0 -154
  167. package/dist/template_manager/config/config_loader.js.map +0 -1
  168. package/dist/template_manager/config/constants.d.ts.map +0 -1
  169. package/dist/template_manager/config/constants.js.map +0 -1
  170. package/dist/template_manager/config/index.d.ts.map +0 -1
  171. package/dist/template_manager/config/index.js.map +0 -1
  172. package/dist/template_manager/db/category_repository.d.ts.map +0 -1
  173. package/dist/template_manager/db/category_repository.js.map +0 -1
  174. package/dist/template_manager/db/index.d.ts +0 -6
  175. package/dist/template_manager/db/index.d.ts.map +0 -1
  176. package/dist/template_manager/db/index.js +0 -6
  177. package/dist/template_manager/db/index.js.map +0 -1
  178. package/dist/template_manager/db/template_repository.d.ts.map +0 -1
  179. package/dist/template_manager/db/template_repository.js +0 -674
  180. package/dist/template_manager/db/template_repository.js.map +0 -1
  181. package/dist/template_manager/engine/handlebars_engine.d.ts.map +0 -1
  182. package/dist/template_manager/engine/handlebars_engine.js.map +0 -1
  183. package/dist/template_manager/engine/index.d.ts.map +0 -1
  184. package/dist/template_manager/engine/index.js.map +0 -1
  185. package/dist/template_manager/engine/variable_resolver.d.ts.map +0 -1
  186. package/dist/template_manager/engine/variable_resolver.js.map +0 -1
  187. package/dist/template_manager/index.d.ts +0 -32
  188. package/dist/template_manager/index.d.ts.map +0 -1
  189. package/dist/template_manager/index.js +0 -41
  190. package/dist/template_manager/index.js.map +0 -1
  191. package/dist/template_manager/template_manager.d.ts.map +0 -1
  192. package/dist/template_manager/template_manager.js.map +0 -1
  193. package/dist/template_manager/types.d.ts.map +0 -1
  194. package/dist/template_manager/types.js +0 -11
  195. package/dist/template_manager/types.js.map +0 -1
  196. package/dist/template_manager/utils/index.d.ts.map +0 -1
  197. package/dist/template_manager/utils/index.js.map +0 -1
  198. package/dist/template_manager/utils/system_variables.d.ts.map +0 -1
  199. package/dist/template_manager/utils/system_variables.js.map +0 -1
  200. package/dist/template_manager/utils/validation.d.ts.map +0 -1
  201. package/dist/template_manager/utils/validation.js.map +0 -1
  202. /package/dist/{emailer → lib/emailer}/emailer.d.ts +0 -0
  203. /package/dist/{emailer → lib/emailer}/emailer.js +0 -0
  204. /package/dist/{emailer → lib/emailer}/index.d.ts +0 -0
  205. /package/dist/{emailer → lib/emailer}/index.js +0 -0
  206. /package/dist/{emailer → lib/emailer}/providers/index.d.ts +0 -0
  207. /package/dist/{emailer → lib/emailer}/providers/index.js +0 -0
  208. /package/dist/{emailer → lib/emailer}/providers/pop3_provider.d.ts +0 -0
  209. /package/dist/{emailer → lib/emailer}/providers/pop3_provider.js +0 -0
  210. /package/dist/{emailer → lib/emailer}/providers/smtp_provider.d.ts +0 -0
  211. /package/dist/{emailer → lib/emailer}/providers/smtp_provider.js +0 -0
  212. /package/dist/{emailer → lib/emailer}/providers/zeptomail_provider.d.ts +0 -0
  213. /package/dist/{emailer → lib/emailer}/types.d.ts +0 -0
  214. /package/dist/{emailer → lib/emailer}/types.js +0 -0
  215. /package/dist/{emailer → lib/emailer}/utils/constants.d.ts +0 -0
  216. /package/dist/{emailer → lib/emailer}/utils/constants.js +0 -0
  217. /package/dist/{emailer → lib/emailer}/utils/index.d.ts +0 -0
  218. /package/dist/{emailer → lib/emailer}/utils/index.js +0 -0
  219. /package/dist/{emailer → lib/emailer}/utils/logger.d.ts +0 -0
  220. /package/dist/{emailer → lib/emailer}/utils/logger.js +0 -0
  221. /package/dist/{emailer → lib/emailer}/utils/validation.d.ts +0 -0
  222. /package/dist/{emailer → lib/emailer}/utils/validation.js +0 -0
  223. /package/dist/{index.d.ts → lib/index.d.ts} +0 -0
  224. /package/dist/{index.js → lib/index.js} +0 -0
  225. /package/dist/{template_manager → lib/template_manager}/config/index.d.ts +0 -0
  226. /package/dist/{template_manager → lib/template_manager}/config/index.js +0 -0
  227. /package/dist/{template_manager → lib/template_manager}/engine/handlebars_engine.d.ts +0 -0
  228. /package/dist/{template_manager → lib/template_manager}/engine/handlebars_engine.js +0 -0
  229. /package/dist/{template_manager → lib/template_manager}/engine/index.d.ts +0 -0
  230. /package/dist/{template_manager → lib/template_manager}/engine/index.js +0 -0
  231. /package/dist/{template_manager → lib/template_manager}/utils/index.d.ts +0 -0
  232. /package/dist/{template_manager → lib/template_manager}/utils/index.js +0 -0
  233. /package/dist/{template_manager → lib/template_manager}/utils/system_variables.d.ts +0 -0
  234. /package/dist/{template_manager → lib/template_manager}/utils/system_variables.js +0 -0
  235. /package/dist/{template_manager → lib/template_manager}/utils/validation.d.ts +0 -0
  236. /package/dist/{template_manager → lib/template_manager}/utils/validation.js +0 -0
@@ -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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"}
@@ -1,67 +1,65 @@
1
1
  /**
2
- * Template Manager Core Service
2
+ * Template Manager Core Service (v2.0.0)
3
3
  *
4
- * Core functions for rendering and sending templated emails
4
+ * Core functions for rendering and sending templated emails.
5
+ * Uses scope_chain for hierarchical template resolution.
5
6
  */
6
7
  import type { HazoConnectInstance, TemplateManagerConfig, SendTemplateEmailOptions, SendTemplateEmailResponse, TemplateRenderResult, Logger } from './types.js';
7
8
  /**
8
- * Render a template with variables (without sending)
9
+ * Render a template with variables (without sending).
9
10
  *
10
- * This function fetches a template from the database, resolves all variables
11
- * (including system variables), processes @template references, and renders
12
- * the final content using Handlebars.
11
+ * Fetches a template from the database using hierarchical scope resolution,
12
+ * resolves all variables (including system variables), processes @template
13
+ * references, and renders the final content using Handlebars.
13
14
  *
14
15
  * @param template_name - Name of the template to render
15
16
  * @param variables - User-provided variables to substitute
16
17
  * @param hazo_connect - Database connection instance
17
- * @param org_id - Organization ID
18
+ * @param scope_id - Scope ID for hierarchical lookup (null = global only)
18
19
  * @param config - Optional config override (loads from file if not provided)
19
20
  * @param logger - Optional logger instance
20
21
  * @returns Render result with HTML and text content
21
22
  */
22
- export declare function render_template(template_name: string, variables: Record<string, string>, hazo_connect: HazoConnectInstance, org_id: string, config?: TemplateManagerConfig, logger?: Logger): Promise<TemplateRenderResult>;
23
+ export declare function render_template(template_name: string, variables: Record<string, string>, hazo_connect: HazoConnectInstance, scope_id: string | null, config?: TemplateManagerConfig, logger?: Logger): Promise<TemplateRenderResult>;
23
24
  /**
24
- * Send an email using a named template
25
+ * Send an email using a named template.
25
26
  *
26
- * This function:
27
- * 1. Fetches the template from the database
28
- * 2. Resolves all variables (user + system)
29
- * 3. Processes @template references
30
- * 4. Renders with Handlebars
31
- * 5. Sends via the emailer module
27
+ * 1. Resolves scope chain from options.scope_id
28
+ * 2. Fetches the template from the database
29
+ * 3. Resolves all variables (user + system)
30
+ * 4. Processes @template references
31
+ * 5. Renders with Handlebars
32
+ * 6. Sends via the emailer module
32
33
  *
33
34
  * @param options - Template email options
34
35
  * @param hazo_connect - Database connection instance
35
- * @param org_id - Organization ID
36
36
  * @param config - Optional config override
37
37
  * @returns Email send response
38
38
  */
39
- export declare function send_template_email(options: SendTemplateEmailOptions, hazo_connect: HazoConnectInstance, org_id: string, config?: TemplateManagerConfig): Promise<SendTemplateEmailResponse>;
39
+ export declare function send_template_email(options: SendTemplateEmailOptions, hazo_connect: HazoConnectInstance, config?: TemplateManagerConfig): Promise<SendTemplateEmailResponse>;
40
40
  /**
41
- * Preview a template render without saving or sending
42
- *
43
- * Useful for the UI to show a preview of what the email will look like
41
+ * Preview a template render without saving or sending.
42
+ * Useful for the UI to show a preview of what the email will look like.
44
43
  *
45
44
  * @param html_content - Raw HTML template content
46
45
  * @param text_content - Raw text template content
47
46
  * @param variables - Variables to substitute
48
47
  * @param hazo_connect - Database connection (for @template resolution)
49
- * @param org_id - Organization ID
48
+ * @param scope_id - Scope ID for hierarchical @template resolution
50
49
  * @returns Render result
51
50
  */
52
- export declare function preview_template(html_content: string, text_content: string, variables: Record<string, string>, hazo_connect?: HazoConnectInstance, org_id?: string): Promise<TemplateRenderResult>;
51
+ export declare function preview_template(html_content: string, text_content: string, variables: Record<string, string>, hazo_connect?: HazoConnectInstance, scope_id?: string | null): Promise<TemplateRenderResult>;
53
52
  /**
54
- * Validate template variables before rendering
55
- *
56
- * Checks that all required variables are provided
53
+ * Validate template variables before rendering.
54
+ * Checks that all required variables are provided.
57
55
  *
58
56
  * @param template_name - Name of the template
59
57
  * @param variables - Variables to validate
60
58
  * @param hazo_connect - Database connection
61
- * @param org_id - Organization ID
59
+ * @param scope_id - Scope ID for hierarchical lookup
62
60
  * @returns Validation result
63
61
  */
64
- export declare function validate_template_variables(template_name: string, variables: Record<string, string>, hazo_connect: HazoConnectInstance, org_id: string): Promise<{
62
+ export declare function validate_template_variables(template_name: string, variables: Record<string, string>, hazo_connect: HazoConnectInstance, scope_id: string | null): Promise<{
65
63
  valid: boolean;
66
64
  missing: string[];
67
65
  message: string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template_manager.d.ts","sourceRoot":"","sources":["../../../src/lib/template_manager/template_manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,MAAM,EACP,MAAM,YAAY,CAAC;AAiBpB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,MAAM,CAAC,EAAE,qBAAqB,EAC9B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC,CAkH/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,wBAAwB,EACjC,YAAY,EAAE,mBAAmB,EACjC,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,yBAAyB,CAAC,CAyHpC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,YAAY,CAAC,EAAE,mBAAmB,EAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAmC/B;AAED;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAsDjE"}
@@ -1,31 +1,33 @@
1
1
  /**
2
- * Template Manager Core Service
2
+ * Template Manager Core Service (v2.0.0)
3
3
  *
4
- * Core functions for rendering and sending templated emails
4
+ * Core functions for rendering and sending templated emails.
5
+ * Uses scope_chain for hierarchical template resolution.
5
6
  */
6
7
  import { send_email } from '../emailer/emailer.js';
7
8
  import { get_logger, create_fallback_logger } from '../emailer/utils/logger.js';
8
- import { load_template_config } from './config/config_loader.js';
9
9
  import { ERROR_MESSAGES } from './config/constants.js';
10
10
  import { get_template_by_name } from './db/template_repository.js';
11
+ import { get_scope_chain } from './cache/scope_chain_cache.js';
11
12
  import { render_handlebars, resolve_variables, resolve_all_template_references, } from './engine/index.js';
12
13
  import { validate_provided_variables, } from './utils/validation.js';
14
+ import { get_system_variables } from './utils/system_variables.js';
13
15
  /**
14
- * Render a template with variables (without sending)
16
+ * Render a template with variables (without sending).
15
17
  *
16
- * This function fetches a template from the database, resolves all variables
17
- * (including system variables), processes @template references, and renders
18
- * the final content using Handlebars.
18
+ * Fetches a template from the database using hierarchical scope resolution,
19
+ * resolves all variables (including system variables), processes @template
20
+ * references, and renders the final content using Handlebars.
19
21
  *
20
22
  * @param template_name - Name of the template to render
21
23
  * @param variables - User-provided variables to substitute
22
24
  * @param hazo_connect - Database connection instance
23
- * @param org_id - Organization ID
25
+ * @param scope_id - Scope ID for hierarchical lookup (null = global only)
24
26
  * @param config - Optional config override (loads from file if not provided)
25
27
  * @param logger - Optional logger instance
26
28
  * @returns Render result with HTML and text content
27
29
  */
28
- export async function render_template(template_name, variables, hazo_connect, org_id, config, logger) {
30
+ export async function render_template(template_name, variables, hazo_connect, scope_id, config, logger) {
29
31
  const log = logger || create_fallback_logger('template_manager');
30
32
  const filename = 'template_manager.ts';
31
33
  const function_name = 'render_template';
@@ -34,9 +36,8 @@ export async function render_template(template_name, variables, hazo_connect, or
34
36
  filename,
35
37
  function_name,
36
38
  template_name,
37
- org_id,
39
+ scope_id,
38
40
  });
39
- // Validate inputs
40
41
  if (!hazo_connect) {
41
42
  return {
42
43
  success: false,
@@ -44,10 +45,10 @@ export async function render_template(template_name, variables, hazo_connect, or
44
45
  message: ERROR_MESSAGES.DB_CONNECTION_REQUIRED,
45
46
  };
46
47
  }
47
- // Load config
48
- const cfg = config || load_template_config();
48
+ // Resolve scope chain for hierarchical lookup
49
+ const scope_chain = scope_id ? await get_scope_chain(scope_id) : [];
49
50
  // Fetch template from database
50
- const template_result = await get_template_by_name(hazo_connect, org_id, template_name);
51
+ const template_result = await get_template_by_name(hazo_connect, scope_chain, template_name);
51
52
  if (!template_result.success || !template_result.data) {
52
53
  log.warn('Template not found', {
53
54
  filename,
@@ -65,7 +66,7 @@ export async function render_template(template_name, variables, hazo_connect, or
65
66
  // Merge user variables with system variables
66
67
  const all_variables = resolve_variables(variables);
67
68
  // Resolve @template references in both HTML and text
68
- const resolved_result = await resolve_all_template_references(template.template_html, template.template_text, all_variables, hazo_connect, org_id);
69
+ const resolved_result = await resolve_all_template_references(template.template_html, template.template_text, all_variables, hazo_connect, scope_chain);
69
70
  if (!resolved_result.success) {
70
71
  log.warn('Failed to resolve template references', {
71
72
  filename,
@@ -114,22 +115,21 @@ export async function render_template(template_name, variables, hazo_connect, or
114
115
  }
115
116
  }
116
117
  /**
117
- * Send an email using a named template
118
+ * Send an email using a named template.
118
119
  *
119
- * This function:
120
- * 1. Fetches the template from the database
121
- * 2. Resolves all variables (user + system)
122
- * 3. Processes @template references
123
- * 4. Renders with Handlebars
124
- * 5. Sends via the emailer module
120
+ * 1. Resolves scope chain from options.scope_id
121
+ * 2. Fetches the template from the database
122
+ * 3. Resolves all variables (user + system)
123
+ * 4. Processes @template references
124
+ * 5. Renders with Handlebars
125
+ * 6. Sends via the emailer module
125
126
  *
126
127
  * @param options - Template email options
127
128
  * @param hazo_connect - Database connection instance
128
- * @param org_id - Organization ID
129
129
  * @param config - Optional config override
130
130
  * @returns Email send response
131
131
  */
132
- export async function send_template_email(options, hazo_connect, org_id, config) {
132
+ export async function send_template_email(options, hazo_connect, config) {
133
133
  const log = options.logger
134
134
  ? get_logger(options.logger)
135
135
  : create_fallback_logger('template_manager');
@@ -141,9 +141,8 @@ export async function send_template_email(options, hazo_connect, org_id, config)
141
141
  function_name,
142
142
  template_name: options.template_name,
143
143
  to: options.to,
144
- org_id,
144
+ scope_id: options.scope_id,
145
145
  });
146
- // Validate inputs
147
146
  if (!hazo_connect) {
148
147
  return {
149
148
  success: false,
@@ -151,8 +150,7 @@ export async function send_template_email(options, hazo_connect, org_id, config)
151
150
  message: ERROR_MESSAGES.DB_CONNECTION_REQUIRED,
152
151
  };
153
152
  }
154
- // Render the template
155
- const render_result = await render_template(options.template_name, options.variables, hazo_connect, org_id, config, log);
153
+ const render_result = await render_template(options.template_name, options.variables, hazo_connect, options.scope_id, config, log);
156
154
  if (!render_result.success) {
157
155
  return {
158
156
  success: false,
@@ -160,12 +158,10 @@ export async function send_template_email(options, hazo_connect, org_id, config)
160
158
  message: render_result.message,
161
159
  };
162
160
  }
163
- // Build subject - use provided subject or template name as fallback
164
161
  const subject = options.subject ||
165
162
  options.template_name
166
163
  .replace(/_/g, ' ')
167
164
  .replace(/\b\w/g, (l) => l.toUpperCase());
168
- // Send the email using the emailer module
169
165
  const email_response = await send_email({
170
166
  to: options.to,
171
167
  subject,
@@ -237,34 +233,30 @@ export async function send_template_email(options, hazo_connect, org_id, config)
237
233
  }
238
234
  }
239
235
  /**
240
- * Preview a template render without saving or sending
241
- *
242
- * Useful for the UI to show a preview of what the email will look like
236
+ * Preview a template render without saving or sending.
237
+ * Useful for the UI to show a preview of what the email will look like.
243
238
  *
244
239
  * @param html_content - Raw HTML template content
245
240
  * @param text_content - Raw text template content
246
241
  * @param variables - Variables to substitute
247
242
  * @param hazo_connect - Database connection (for @template resolution)
248
- * @param org_id - Organization ID
243
+ * @param scope_id - Scope ID for hierarchical @template resolution
249
244
  * @returns Render result
250
245
  */
251
- export async function preview_template(html_content, text_content, variables, hazo_connect, org_id) {
246
+ export async function preview_template(html_content, text_content, variables, hazo_connect, scope_id) {
252
247
  try {
253
- // Merge with system variables
254
248
  const all_variables = resolve_variables(variables);
255
- // If hazo_connect is provided, resolve @template references
256
249
  let resolved_html = html_content;
257
250
  let resolved_text = text_content;
258
- if (hazo_connect && org_id) {
259
- const resolved_result = await resolve_all_template_references(html_content, text_content, all_variables, hazo_connect, org_id);
251
+ if (hazo_connect) {
252
+ const scope_chain = scope_id ? await get_scope_chain(scope_id) : [];
253
+ const resolved_result = await resolve_all_template_references(html_content, text_content, all_variables, hazo_connect, scope_chain);
260
254
  if (resolved_result.success) {
261
255
  resolved_html = resolved_result.rendered_html || html_content;
262
256
  resolved_text = resolved_result.rendered_text || text_content;
263
257
  }
264
258
  }
265
- // Render with Handlebars
266
- const render_result = render_handlebars(resolved_html, resolved_text, all_variables);
267
- return render_result;
259
+ return render_handlebars(resolved_html, resolved_text, all_variables);
268
260
  }
269
261
  catch (error) {
270
262
  const error_message = error instanceof Error ? error.message : 'Unknown error occurred';
@@ -276,20 +268,19 @@ export async function preview_template(html_content, text_content, variables, ha
276
268
  }
277
269
  }
278
270
  /**
279
- * Validate template variables before rendering
280
- *
281
- * Checks that all required variables are provided
271
+ * Validate template variables before rendering.
272
+ * Checks that all required variables are provided.
282
273
  *
283
274
  * @param template_name - Name of the template
284
275
  * @param variables - Variables to validate
285
276
  * @param hazo_connect - Database connection
286
- * @param org_id - Organization ID
277
+ * @param scope_id - Scope ID for hierarchical lookup
287
278
  * @returns Validation result
288
279
  */
289
- export async function validate_template_variables(template_name, variables, hazo_connect, org_id) {
280
+ export async function validate_template_variables(template_name, variables, hazo_connect, scope_id) {
290
281
  try {
291
- // Fetch template
292
- const template_result = await get_template_by_name(hazo_connect, org_id, template_name);
282
+ const scope_chain = scope_id ? await get_scope_chain(scope_id) : [];
283
+ const template_result = await get_template_by_name(hazo_connect, scope_chain, template_name);
293
284
  if (!template_result.success || !template_result.data) {
294
285
  return {
295
286
  valid: false,
@@ -298,14 +289,9 @@ export async function validate_template_variables(template_name, variables, hazo
298
289
  };
299
290
  }
300
291
  const template = template_result.data;
301
- const config = load_template_config();
302
- // Get system variable names
303
- const system_var_names = config.system_email_template_variables.map((v) => v.variable_name);
304
- // Validate HTML content
292
+ const system_var_names = get_system_variables().map((v) => v.variable_name);
305
293
  const html_validation = validate_provided_variables(template.template_html, variables, system_var_names);
306
- // Validate text content
307
294
  const text_validation = validate_provided_variables(template.template_text, variables, system_var_names);
308
- // Combine missing variables
309
295
  const all_missing = [
310
296
  ...new Set([...html_validation.missing, ...text_validation.missing]),
311
297
  ];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template_manager.js","sourceRoot":"","sources":["../../../src/lib/template_manager/template_manager.ts"],"names":[],"mappings":"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"}