@hed-hog/core 0.0.400 → 0.0.402

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 (274) hide show
  1. package/dist/access-log/access-log.interceptor.d.ts +10 -0
  2. package/dist/access-log/access-log.interceptor.d.ts.map +1 -1
  3. package/dist/access-log/access-log.interceptor.js +15 -1
  4. package/dist/access-log/access-log.interceptor.js.map +1 -1
  5. package/dist/ai/ai.controller.d.ts +2 -0
  6. package/dist/ai/ai.controller.d.ts.map +1 -1
  7. package/dist/ai/ai.service.d.ts +86 -2
  8. package/dist/ai/ai.service.d.ts.map +1 -1
  9. package/dist/ai/ai.service.js +304 -23
  10. package/dist/ai/ai.service.js.map +1 -1
  11. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts +12 -0
  12. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts.map +1 -1
  13. package/dist/ai-instruction/ai-prompt-resolver.service.js +26 -0
  14. package/dist/ai-instruction/ai-prompt-resolver.service.js.map +1 -1
  15. package/dist/core.module.d.ts.map +1 -1
  16. package/dist/core.module.js +3 -0
  17. package/dist/core.module.js.map +1 -1
  18. package/dist/document-kit/document-kit.module.d.ts +3 -0
  19. package/dist/document-kit/document-kit.module.d.ts.map +1 -0
  20. package/dist/document-kit/document-kit.module.js +24 -0
  21. package/dist/document-kit/document-kit.module.js.map +1 -0
  22. package/dist/document-kit/document-kit.registry.d.ts +55 -0
  23. package/dist/document-kit/document-kit.registry.d.ts.map +1 -0
  24. package/dist/document-kit/document-kit.registry.js +91 -0
  25. package/dist/document-kit/document-kit.registry.js.map +1 -0
  26. package/dist/document-kit/document-kit.service.d.ts +49 -0
  27. package/dist/document-kit/document-kit.service.d.ts.map +1 -0
  28. package/dist/document-kit/document-kit.service.js +135 -0
  29. package/dist/document-kit/document-kit.service.js.map +1 -0
  30. package/dist/file/file-upload-ticket.service.d.ts +1 -1
  31. package/dist/file/file.controller.d.ts +3 -3
  32. package/dist/file/file.service.d.ts +136 -13
  33. package/dist/file/file.service.d.ts.map +1 -1
  34. package/dist/file/file.service.js +297 -27
  35. package/dist/file/file.service.js.map +1 -1
  36. package/dist/file/mcp-file-source.schema.d.ts.map +1 -1
  37. package/dist/file/mcp-file-source.schema.js +8 -5
  38. package/dist/file/mcp-file-source.schema.js.map +1 -1
  39. package/dist/file/provider/abstract.provider.d.ts +33 -0
  40. package/dist/file/provider/abstract.provider.d.ts.map +1 -1
  41. package/dist/file/provider/abstract.provider.js +9 -0
  42. package/dist/file/provider/abstract.provider.js.map +1 -1
  43. package/dist/file/provider/s3-multipart.util.d.ts +17 -0
  44. package/dist/file/provider/s3-multipart.util.d.ts.map +1 -0
  45. package/dist/file/provider/s3-multipart.util.js +88 -0
  46. package/dist/file/provider/s3-multipart.util.js.map +1 -0
  47. package/dist/file/provider/s3.provider.d.ts +9 -1
  48. package/dist/file/provider/s3.provider.d.ts.map +1 -1
  49. package/dist/file/provider/s3.provider.js +16 -0
  50. package/dist/file/provider/s3.provider.js.map +1 -1
  51. package/dist/file/provider/spaces.provider.d.ts +10 -1
  52. package/dist/file/provider/spaces.provider.d.ts.map +1 -1
  53. package/dist/file/provider/spaces.provider.js +17 -0
  54. package/dist/file/provider/spaces.provider.js.map +1 -1
  55. package/dist/index.d.ts +5 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +5 -0
  58. package/dist/index.js.map +1 -1
  59. package/dist/integration-profile/integration-profile.controller.d.ts +1 -0
  60. package/dist/integration-profile/integration-profile.controller.d.ts.map +1 -1
  61. package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
  62. package/dist/integration-profile/integration-profile.secrets.js +26 -0
  63. package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
  64. package/dist/integration-profile/integration-profile.service.d.ts +1 -0
  65. package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
  66. package/dist/integration-profile/integration-profile.service.js +3 -3
  67. package/dist/integration-profile/integration-profile.service.js.map +1 -1
  68. package/dist/integration-profile/testers/ai.testers.d.ts.map +1 -1
  69. package/dist/integration-profile/testers/ai.testers.js +46 -8
  70. package/dist/integration-profile/testers/ai.testers.js.map +1 -1
  71. package/dist/integration-profile/testers/http-probe.d.ts.map +1 -1
  72. package/dist/integration-profile/testers/http-probe.js +5 -3
  73. package/dist/integration-profile/testers/http-probe.js.map +1 -1
  74. package/dist/integration-profile/testers/integration-tester.types.d.ts +5 -0
  75. package/dist/integration-profile/testers/integration-tester.types.d.ts.map +1 -1
  76. package/dist/mail/mail.service.d.ts.map +1 -1
  77. package/dist/mail/mail.service.js +16 -1
  78. package/dist/mail/mail.service.js.map +1 -1
  79. package/dist/mcp/mcp-server.service.d.ts.map +1 -1
  80. package/dist/mcp/mcp-server.service.js +10 -1
  81. package/dist/mcp/mcp-server.service.js.map +1 -1
  82. package/dist/mcp/mcp.module.d.ts.map +1 -1
  83. package/dist/mcp/mcp.module.js +2 -0
  84. package/dist/mcp/mcp.module.js.map +1 -1
  85. package/dist/mcp/tools/core-access-log.mcp-tools.d.ts +17 -0
  86. package/dist/mcp/tools/core-access-log.mcp-tools.d.ts.map +1 -0
  87. package/dist/mcp/tools/core-access-log.mcp-tools.js +74 -0
  88. package/dist/mcp/tools/core-access-log.mcp-tools.js.map +1 -0
  89. package/dist/mcp/tools/core-files.mcp-tools.js +4 -4
  90. package/dist/mcp/tools/core-files.mcp-tools.js.map +1 -1
  91. package/dist/meeting/meeting-provider.registry.d.ts +72 -0
  92. package/dist/meeting/meeting-provider.registry.d.ts.map +1 -1
  93. package/dist/meeting/meeting-provider.registry.js.map +1 -1
  94. package/dist/oauth/oauth-token-broker.service.d.ts +50 -1
  95. package/dist/oauth/oauth-token-broker.service.d.ts.map +1 -1
  96. package/dist/oauth/oauth-token-broker.service.js +105 -3
  97. package/dist/oauth/oauth-token-broker.service.js.map +1 -1
  98. package/dist/oauth/providers/microsoft-entra-id.provider.d.ts +6 -0
  99. package/dist/oauth/providers/microsoft-entra-id.provider.d.ts.map +1 -1
  100. package/dist/oauth/providers/microsoft-entra-id.provider.js +30 -4
  101. package/dist/oauth/providers/microsoft-entra-id.provider.js.map +1 -1
  102. package/dist/pdf/document/charts/chart-bar.d.ts +24 -0
  103. package/dist/pdf/document/charts/chart-bar.d.ts.map +1 -0
  104. package/dist/pdf/document/charts/chart-bar.js +117 -0
  105. package/dist/pdf/document/charts/chart-bar.js.map +1 -0
  106. package/dist/pdf/document/charts/chart-donut.d.ts +16 -0
  107. package/dist/pdf/document/charts/chart-donut.d.ts.map +1 -0
  108. package/dist/pdf/document/charts/chart-donut.js +89 -0
  109. package/dist/pdf/document/charts/chart-donut.js.map +1 -0
  110. package/dist/pdf/document/charts/chart-gauge.d.ts +15 -0
  111. package/dist/pdf/document/charts/chart-gauge.d.ts.map +1 -0
  112. package/dist/pdf/document/charts/chart-gauge.js +60 -0
  113. package/dist/pdf/document/charts/chart-gauge.js.map +1 -0
  114. package/dist/pdf/document/charts/chart-line.d.ts +29 -0
  115. package/dist/pdf/document/charts/chart-line.d.ts.map +1 -0
  116. package/dist/pdf/document/charts/chart-line.js +89 -0
  117. package/dist/pdf/document/charts/chart-line.js.map +1 -0
  118. package/dist/pdf/document/charts/chart-primitives.d.ts +64 -0
  119. package/dist/pdf/document/charts/chart-primitives.d.ts.map +1 -0
  120. package/dist/pdf/document/charts/chart-primitives.js +110 -0
  121. package/dist/pdf/document/charts/chart-primitives.js.map +1 -0
  122. package/dist/pdf/document/charts/chart-radar.d.ts +13 -0
  123. package/dist/pdf/document/charts/chart-radar.d.ts.map +1 -0
  124. package/dist/pdf/document/charts/chart-radar.js +83 -0
  125. package/dist/pdf/document/charts/chart-radar.js.map +1 -0
  126. package/dist/pdf/document/charts/chart-scale.d.ts +39 -0
  127. package/dist/pdf/document/charts/chart-scale.d.ts.map +1 -0
  128. package/dist/pdf/document/charts/chart-scale.js +118 -0
  129. package/dist/pdf/document/charts/chart-scale.js.map +1 -0
  130. package/dist/pdf/document/charts/index.d.ts +8 -0
  131. package/dist/pdf/document/charts/index.d.ts.map +1 -0
  132. package/dist/pdf/document/charts/index.js +24 -0
  133. package/dist/pdf/document/charts/index.js.map +1 -0
  134. package/dist/pdf/document/index.d.ts +8 -0
  135. package/dist/pdf/document/index.d.ts.map +1 -0
  136. package/dist/pdf/document/index.js +24 -0
  137. package/dist/pdf/document/index.js.map +1 -0
  138. package/dist/pdf/document/pdf-document.chrome.d.ts +20 -0
  139. package/dist/pdf/document/pdf-document.chrome.d.ts.map +1 -0
  140. package/dist/pdf/document/pdf-document.chrome.js +36 -0
  141. package/dist/pdf/document/pdf-document.chrome.js.map +1 -0
  142. package/dist/pdf/document/pdf-document.css.d.ts +20 -0
  143. package/dist/pdf/document/pdf-document.css.d.ts.map +1 -0
  144. package/dist/pdf/document/pdf-document.css.js +327 -0
  145. package/dist/pdf/document/pdf-document.css.js.map +1 -0
  146. package/dist/pdf/document/pdf-document.renderer.d.ts +10 -0
  147. package/dist/pdf/document/pdf-document.renderer.d.ts.map +1 -0
  148. package/dist/pdf/document/pdf-document.renderer.js +226 -0
  149. package/dist/pdf/document/pdf-document.renderer.js.map +1 -0
  150. package/dist/pdf/document/pdf-document.service.d.ts +27 -0
  151. package/dist/pdf/document/pdf-document.service.d.ts.map +1 -0
  152. package/dist/pdf/document/pdf-document.service.js +81 -0
  153. package/dist/pdf/document/pdf-document.service.js.map +1 -0
  154. package/dist/pdf/document/pdf-document.theme.d.ts +41 -0
  155. package/dist/pdf/document/pdf-document.theme.d.ts.map +1 -0
  156. package/dist/pdf/document/pdf-document.theme.js +105 -0
  157. package/dist/pdf/document/pdf-document.theme.js.map +1 -0
  158. package/dist/pdf/document/pdf-document.types.d.ts +164 -0
  159. package/dist/pdf/document/pdf-document.types.d.ts.map +1 -0
  160. package/dist/pdf/document/pdf-document.types.js +18 -0
  161. package/dist/pdf/document/pdf-document.types.js.map +1 -0
  162. package/dist/pdf/pdf.module.d.ts.map +1 -1
  163. package/dist/pdf/pdf.module.js +3 -2
  164. package/dist/pdf/pdf.module.js.map +1 -1
  165. package/dist/pdf/pdf.service.d.ts +75 -1
  166. package/dist/pdf/pdf.service.d.ts.map +1 -1
  167. package/dist/pdf/pdf.service.js +167 -63
  168. package/dist/pdf/pdf.service.js.map +1 -1
  169. package/dist/pdf/templates/commercial-proposal.template.d.ts +96 -0
  170. package/dist/pdf/templates/commercial-proposal.template.d.ts.map +1 -0
  171. package/dist/pdf/templates/commercial-proposal.template.js +276 -0
  172. package/dist/pdf/templates/commercial-proposal.template.js.map +1 -0
  173. package/dist/setting/favicon.controller.d.ts +26 -0
  174. package/dist/setting/favicon.controller.d.ts.map +1 -0
  175. package/dist/setting/favicon.controller.js +130 -0
  176. package/dist/setting/favicon.controller.js.map +1 -0
  177. package/dist/setting/setting.module.d.ts.map +1 -1
  178. package/dist/setting/setting.module.js +2 -1
  179. package/dist/setting/setting.module.js.map +1 -1
  180. package/dist/setting/setting.service.d.ts.map +1 -1
  181. package/dist/setting/setting.service.js +3 -0
  182. package/dist/setting/setting.service.js.map +1 -1
  183. package/dist/task/task.service.d.ts +6 -0
  184. package/dist/task/task.service.d.ts.map +1 -1
  185. package/dist/task/task.service.js +44 -13
  186. package/dist/task/task.service.js.map +1 -1
  187. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +35 -2
  188. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -1
  189. package/dist/whatsapp-sender/whatsapp-sender.service.js +107 -22
  190. package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -1
  191. package/hedhog/data/integration_type.yaml +6 -0
  192. package/hedhog/data/route.yaml +8 -0
  193. package/hedhog/data/setting_group.yaml +52 -0
  194. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +85 -2
  195. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +576 -491
  196. package/hedhog/frontend/app/users/simulate-access-dialog.test.tsx.ejs +29 -50
  197. package/hedhog/frontend/app/users/simulate-access-dialog.tsx.ejs +146 -50
  198. package/hedhog/frontend/messages/en.json +81 -2
  199. package/hedhog/frontend/messages/pt.json +81 -2
  200. package/hedhog/table/file.yaml +3 -1
  201. package/package.json +5 -5
  202. package/src/access-log/access-log.interceptor.spec.ts +50 -0
  203. package/src/access-log/access-log.interceptor.ts +18 -0
  204. package/src/ai/ai-attachment.fragments.spec.ts +56 -3
  205. package/src/ai/ai.service.responses.spec.ts +429 -0
  206. package/src/ai/ai.service.ts +409 -27
  207. package/src/ai-instruction/ai-prompt-resolver.service.spec.ts +44 -0
  208. package/src/ai-instruction/ai-prompt-resolver.service.ts +29 -0
  209. package/src/core.module.ts +3 -0
  210. package/src/document-kit/document-kit.module.ts +12 -0
  211. package/src/document-kit/document-kit.registry.ts +125 -0
  212. package/src/document-kit/document-kit.service.spec.ts +156 -0
  213. package/src/document-kit/document-kit.service.ts +173 -0
  214. package/src/file/file-direct-upload.spec.ts +344 -0
  215. package/src/file/file.service.spec.ts +168 -1
  216. package/src/file/file.service.ts +435 -36
  217. package/src/file/mcp-file-source.schema.ts +8 -5
  218. package/src/file/provider/abstract.provider.ts +57 -0
  219. package/src/file/provider/s3-multipart.spec.ts +123 -0
  220. package/src/file/provider/s3-multipart.util.ts +126 -0
  221. package/src/file/provider/s3.provider.ts +65 -1
  222. package/src/file/provider/spaces.provider.ts +67 -1
  223. package/src/index.ts +5 -0
  224. package/src/integration-profile/integration-profile.secrets.ts +26 -0
  225. package/src/integration-profile/integration-profile.service.ts +1 -0
  226. package/src/integration-profile/testers/ai.testers.ts +70 -5
  227. package/src/integration-profile/testers/http-probe.ts +5 -3
  228. package/src/integration-profile/testers/integration-tester.types.ts +5 -0
  229. package/src/integration-profile/testers/oauth.testers.spec.ts +13 -0
  230. package/src/integration-profile/testers/remaining.testers.spec.ts +65 -1
  231. package/src/integration-profile/testers/tester-coverage.spec.ts +12 -0
  232. package/src/mail/mail.service.spec.ts +25 -0
  233. package/src/mail/mail.service.ts +18 -1
  234. package/src/mcp/mcp-server.service.spec.ts +16 -0
  235. package/src/mcp/mcp-server.service.ts +10 -1
  236. package/src/mcp/mcp.module.ts +2 -0
  237. package/src/mcp/tools/core-access-log.mcp-tools.ts +66 -0
  238. package/src/mcp/tools/core-files.mcp-tools.ts +4 -4
  239. package/src/meeting/meeting-provider.registry.ts +80 -0
  240. package/src/oauth/oauth-token-broker.service.spec.ts +108 -0
  241. package/src/oauth/oauth-token-broker.service.ts +129 -2
  242. package/src/oauth/providers/microsoft-entra-id.provider.spec.ts +133 -0
  243. package/src/oauth/providers/microsoft-entra-id.provider.ts +29 -2
  244. package/src/pdf/document/charts/chart-bar.ts +217 -0
  245. package/src/pdf/document/charts/chart-donut.ts +163 -0
  246. package/src/pdf/document/charts/chart-gauge.ts +94 -0
  247. package/src/pdf/document/charts/chart-line.ts +159 -0
  248. package/src/pdf/document/charts/chart-primitives.ts +188 -0
  249. package/src/pdf/document/charts/chart-radar.ts +136 -0
  250. package/src/pdf/document/charts/chart-scale.spec.ts +93 -0
  251. package/src/pdf/document/charts/chart-scale.ts +141 -0
  252. package/src/pdf/document/charts/charts.spec.ts +157 -0
  253. package/src/pdf/document/charts/index.ts +7 -0
  254. package/src/pdf/document/index.ts +7 -0
  255. package/src/pdf/document/pdf-document.chrome.ts +38 -0
  256. package/src/pdf/document/pdf-document.css.ts +326 -0
  257. package/src/pdf/document/pdf-document.renderer.spec.ts +172 -0
  258. package/src/pdf/document/pdf-document.renderer.ts +317 -0
  259. package/src/pdf/document/pdf-document.service.ts +77 -0
  260. package/src/pdf/document/pdf-document.theme.ts +146 -0
  261. package/src/pdf/document/pdf-document.types.ts +149 -0
  262. package/src/pdf/pdf.module.ts +3 -2
  263. package/src/pdf/pdf.service.spec.ts +131 -0
  264. package/src/pdf/pdf.service.ts +256 -82
  265. package/src/pdf/templates/commercial-proposal.template.spec.ts +177 -0
  266. package/src/pdf/templates/commercial-proposal.template.ts +400 -0
  267. package/src/setting/favicon.controller.spec.ts +92 -0
  268. package/src/setting/favicon.controller.ts +135 -0
  269. package/src/setting/setting.module.ts +2 -1
  270. package/src/setting/setting.service.ts +3 -0
  271. package/src/task/task.service.spec.ts +77 -1
  272. package/src/task/task.service.ts +58 -14
  273. package/src/whatsapp-sender/whatsapp-sender.service.spec.ts +263 -0
  274. package/src/whatsapp-sender/whatsapp-sender.service.ts +154 -16
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escapePdfHtml = escapePdfHtml;
4
+ exports.commercialProposalTemplate = commercialProposalTemplate;
5
+ const hcode_theme_1 = require("../themes/hcode.theme");
6
+ // ─────────────────────────────────────────────────────────────────────────────
7
+ // Helpers
8
+ // ─────────────────────────────────────────────────────────────────────────────
9
+ function escapePdfHtml(value) {
10
+ return String(value !== null && value !== void 0 ? value : '')
11
+ .replace(/&/g, '&')
12
+ .replace(/</g, '&lt;')
13
+ .replace(/>/g, '&gt;')
14
+ .replace(/"/g, '&quot;')
15
+ .replace(/'/g, '&#39;');
16
+ }
17
+ /** Only a plain hex color reaches the CSS; anything else falls back. */
18
+ function safeColor(value, fallback) {
19
+ return /^#[0-9a-f]{3,8}$/i.test(String(value !== null && value !== void 0 ? value : '').trim()) ? value.trim() : fallback;
20
+ }
21
+ /** Font stacks end up inside a `<style>`: drop what could close it. */
22
+ function safeFontStack(value, fallback) {
23
+ const cleaned = String(value !== null && value !== void 0 ? value : '').replace(/[<>{};]/g, '').trim();
24
+ return cleaned || fallback;
25
+ }
26
+ function sectionNumber(index) {
27
+ return String(index + 1).padStart(2, '0');
28
+ }
29
+ function renderParagraphs(text) {
30
+ return String(text !== null && text !== void 0 ? text : '')
31
+ .split(/\n{2,}/)
32
+ .map((paragraph) => paragraph.trim())
33
+ .filter(Boolean)
34
+ .map((paragraph) => `<p>${escapePdfHtml(paragraph).replace(/\n/g, '<br>')}</p>`)
35
+ .join('');
36
+ }
37
+ function renderBlock(block) {
38
+ switch (block.type) {
39
+ case 'html':
40
+ return `<div class="rich">${block.html}</div>`;
41
+ case 'paragraphs':
42
+ return `<div class="rich">${renderParagraphs(block.text)}</div>`;
43
+ case 'list':
44
+ return `<ul class="dash-list">${block.items
45
+ .map((item) => `<li>${escapePdfHtml(item)}</li>`)
46
+ .join('')}</ul>`;
47
+ case 'callout':
48
+ return `<div class="callout ${block.tone === 'neutral' ? 'callout-neutral' : 'callout-accent'} no-break">
49
+ ${block.title ? `<div class="label">${escapePdfHtml(block.title)}</div>` : ''}
50
+ ${renderParagraphs(block.text)}
51
+ </div>`;
52
+ case 'table': {
53
+ const align = (index) => { var _a; return (((_a = block.align) === null || _a === void 0 ? void 0 : _a[index]) === 'right' ? ' class="num"' : ''); };
54
+ return `<table class="grid-table">
55
+ <thead><tr>${block.headers
56
+ .map((header, index) => `<th${align(index)}>${escapePdfHtml(header)}</th>`)
57
+ .join('')}</tr></thead>
58
+ <tbody>${block.rows
59
+ .map((row) => `<tr>${row.map((cell, index) => `<td${align(index)}>${escapePdfHtml(cell)}</td>`).join('')}</tr>`)
60
+ .join('')}</tbody>
61
+ </table>`;
62
+ }
63
+ case 'totals':
64
+ return `<div class="totals no-break">${block.rows
65
+ .map((row) => `<div class="totals-row${row.emphasis ? ' totals-strong' : ''}"><span>${escapePdfHtml(row.label)}</span><span>${escapePdfHtml(row.value)}</span></div>`)
66
+ .join('')}</div>`;
67
+ default:
68
+ return '';
69
+ }
70
+ }
71
+ /** Uploaded logo when there is one, otherwise the company name as a wordmark. */
72
+ function renderBrand(theme) {
73
+ if (theme.logoOverride) {
74
+ return `<img class="brand-logo" src="${escapePdfHtml(theme.logoOverride)}" alt="${escapePdfHtml(theme.companyName)}">`;
75
+ }
76
+ const name = String(theme.companyName || '').trim();
77
+ return `<div class="wordmark"><span class="accent">${escapePdfHtml(name.slice(0, 1))}</span>${escapePdfHtml(name.slice(1))}<span class="wordmark-area"> | ${escapePdfHtml(theme.area.toUpperCase())}</span></div>`;
78
+ }
79
+ // ─────────────────────────────────────────────────────────────────────────────
80
+ // Template
81
+ // ─────────────────────────────────────────────────────────────────────────────
82
+ /**
83
+ * Commercial proposal — cover with the metadata table, numbered sections
84
+ * (`01 · ESCOPO`), borderless tables, rounded cards and a footer with the
85
+ * legal line and `n / N` on every page.
86
+ *
87
+ * Pure function: the caller resolves the theme (see
88
+ * `PdfService.loadCommercialDocumentTheme`) and the data, so the same input
89
+ * always renders the same document.
90
+ */
91
+ function commercialProposalTemplate(data, theme) {
92
+ var _a, _b;
93
+ const primary = safeColor(theme.primaryColor, '#FF760C');
94
+ const ink = hcode_theme_1.HCODE_NEUTRALS.ink1;
95
+ const muted = hcode_theme_1.HCODE_NEUTRALS.ink2;
96
+ const line = hcode_theme_1.HCODE_NEUTRALS.line;
97
+ const surface = hcode_theme_1.HCODE_NEUTRALS.surface2;
98
+ const fontFamily = safeFontStack(theme.fontFamily, "'Inter', sans-serif");
99
+ const fontMono = safeFontStack(theme.fontMono, "'JetBrains Mono', monospace");
100
+ const sections = data.sections
101
+ .filter((section) => section.blocks.length > 0)
102
+ .map((section, index) => `<section class="section">
103
+ <div class="section-eyebrow">${sectionNumber(index)} · ${escapePdfHtml(section.eyebrow.toUpperCase())}</div>
104
+ <h2>${escapePdfHtml(section.title)}</h2>
105
+ ${section.blocks.map(renderBlock).join('\n')}
106
+ </section>`)
107
+ .join('\n');
108
+ const signatories = ((_a = data.signatories) === null || _a === void 0 ? void 0 : _a.length)
109
+ ? `<section class="section signatures no-break">
110
+ ${data.signatureTitle ? `<h2>${escapePdfHtml(data.signatureTitle)}</h2>` : ''}
111
+ <div class="signature-grid">${data.signatories
112
+ .map((signatory) => `<div class="signature">
113
+ <div class="signature-line"></div>
114
+ <div class="label">${escapePdfHtml(signatory.party)}</div>
115
+ ${signatory.name ? `<div class="signature-name">${escapePdfHtml(signatory.name)}</div>` : ''}
116
+ ${signatory.role ? `<div class="signature-role">${escapePdfHtml(signatory.role)}</div>` : ''}
117
+ </div>`)
118
+ .join('')}</div>
119
+ </section>`
120
+ : '';
121
+ const cover = `<div class="cover">
122
+ <div class="cover-brand">${renderBrand(theme)}</div>
123
+ <div class="cover-eyebrow">${escapePdfHtml(data.eyebrow.toUpperCase())}</div>
124
+ <h1 class="cover-title">${escapePdfHtml(data.title)}${data.titleAccent ? `<br><span class="accent">${escapePdfHtml(data.titleAccent)}</span>` : ''}</h1>
125
+ ${data.subtitle ? `<div class="cover-subtitle">${escapePdfHtml(data.subtitle)}</div>` : ''}
126
+ <table class="meta-table">
127
+ <tbody>${data.meta
128
+ .filter((item) => { var _a; return String((_a = item.value) !== null && _a !== void 0 ? _a : '').trim(); })
129
+ .map((item) => `<tr><th>${escapePdfHtml(item.label.toUpperCase())}</th><td>${escapePdfHtml(item.value)}</td></tr>`)
130
+ .join('')}</tbody>
131
+ </table>
132
+ ${theme.partnerLine ? `<div class="partner-line">${escapePdfHtml(theme.partnerLine.toUpperCase())}</div>` : ''}
133
+ </div>`;
134
+ const html = `<!DOCTYPE html>
135
+ <html lang="${escapePdfHtml(data.locale || 'pt-BR')}">
136
+ <head>
137
+ <meta charset="UTF-8">
138
+ ${(0, hcode_theme_1.buildFontImport)()}
139
+ <style>
140
+ :root {
141
+ --primary: ${primary};
142
+ --primary-soft: color-mix(in srgb, ${primary} 12%, #ffffff);
143
+ --ink: ${ink};
144
+ --muted: ${muted};
145
+ --line: ${line};
146
+ --surface: ${surface};
147
+ --font: ${fontFamily};
148
+ --mono: ${fontMono};
149
+ }
150
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
151
+ html, body {
152
+ font-family: var(--font);
153
+ font-size: 10.5pt;
154
+ line-height: 1.55;
155
+ color: var(--ink);
156
+ background: #ffffff;
157
+ -webkit-print-color-adjust: exact;
158
+ print-color-adjust: exact;
159
+ }
160
+ .accent { color: var(--primary); }
161
+ .no-break { break-inside: avoid; page-break-inside: avoid; }
162
+ .label {
163
+ font-family: var(--mono);
164
+ font-size: 7.5pt;
165
+ letter-spacing: 0.14em;
166
+ text-transform: uppercase;
167
+ color: var(--muted);
168
+ margin-bottom: 6px;
169
+ }
170
+
171
+ /* Cover */
172
+ .cover { min-height: 245mm; display: flex; flex-direction: column; break-after: page; }
173
+ .cover-brand { margin-bottom: 48mm; }
174
+ .brand-logo { max-height: 40px; max-width: 180px; object-fit: contain; }
175
+ .wordmark { font-size: 26pt; font-weight: 300; letter-spacing: -0.01em; line-height: 1; }
176
+ .wordmark-area { font-family: var(--mono); font-size: 9pt; letter-spacing: 0.2em; color: #949494; }
177
+ .cover-eyebrow {
178
+ font-family: var(--mono);
179
+ font-size: 8pt;
180
+ letter-spacing: 0.16em;
181
+ color: var(--muted);
182
+ margin-bottom: 14px;
183
+ }
184
+ .cover-title { font-size: 30pt; font-weight: 700; line-height: 1.12; letter-spacing: -0.02em; margin-bottom: 14px; }
185
+ .cover-subtitle { font-size: 11.5pt; color: var(--muted); margin-bottom: 28px; }
186
+ .meta-table { width: 100%; border-collapse: collapse; margin-top: auto; }
187
+ .meta-table th, .meta-table td { padding: 7px 0; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; }
188
+ .meta-table th {
189
+ width: 34%;
190
+ font-family: var(--mono);
191
+ font-size: 7.5pt;
192
+ font-weight: 400;
193
+ letter-spacing: 0.14em;
194
+ color: var(--muted);
195
+ }
196
+ .meta-table td { font-size: 10pt; }
197
+ .partner-line { margin-top: 18px; font-family: var(--mono); font-size: 7.5pt; letter-spacing: 0.16em; color: #949494; }
198
+
199
+ /* Sections */
200
+ .section { margin-bottom: 26px; }
201
+ .section-eyebrow { font-family: var(--mono); font-size: 8pt; letter-spacing: 0.16em; color: var(--primary); margin-bottom: 6px; }
202
+ h2 { font-size: 16pt; font-weight: 700; line-height: 1.25; letter-spacing: -0.01em; margin-bottom: 12px; break-after: avoid; }
203
+ .rich p { margin-bottom: 8px; }
204
+ .rich ul, .rich ol { margin: 0 0 8px 18px; }
205
+ .rich h3 { font-size: 11.5pt; margin: 12px 0 6px; }
206
+ .dash-list, .rich ul { list-style: none; margin-left: 0; }
207
+ .dash-list li, .rich ul li { position: relative; padding-left: 18px; margin-bottom: 5px; }
208
+ .dash-list li::before, .rich ul li::before {
209
+ content: '';
210
+ position: absolute;
211
+ left: 0;
212
+ top: 0.75em;
213
+ width: 9px;
214
+ height: 2px;
215
+ background: var(--primary);
216
+ }
217
+
218
+ /* Cards */
219
+ .callout { border-radius: 10px; padding: 14px 16px; margin: 10px 0; }
220
+ .callout p { margin-bottom: 6px; }
221
+ .callout p:last-child { margin-bottom: 0; }
222
+ .callout-accent { background: var(--primary-soft); }
223
+ .callout-accent .label { color: var(--primary); }
224
+ .callout-neutral { background: var(--surface); }
225
+
226
+ /* Tables: horizontal rules only, no grid */
227
+ .grid-table { width: 100%; border-collapse: collapse; margin: 6px 0 10px; font-size: 9.5pt; }
228
+ .grid-table th {
229
+ font-family: var(--mono);
230
+ font-size: 7.5pt;
231
+ font-weight: 400;
232
+ letter-spacing: 0.12em;
233
+ text-transform: uppercase;
234
+ color: var(--muted);
235
+ text-align: left;
236
+ padding: 0 7px 7px;
237
+ border-bottom: 1px solid var(--ink);
238
+ }
239
+ .grid-table td { padding: 8px 7px; border-bottom: 1px solid var(--line); vertical-align: top; }
240
+ .grid-table th:first-child, .grid-table td:first-child { padding-left: 0; }
241
+ .grid-table th:last-child, .grid-table td:last-child { padding-right: 0; }
242
+ .grid-table tr { break-inside: avoid; }
243
+ .grid-table .num { text-align: right; white-space: nowrap; }
244
+
245
+ .totals { margin: 6px 0 10px auto; width: 60%; }
246
+ .totals-row { display: flex; justify-content: space-between; padding: 6px 0; border-bottom: 1px solid var(--line); font-size: 10pt; }
247
+ .totals-strong { border-bottom: none; border-top: 2px solid var(--ink); font-weight: 700; font-size: 12pt; color: var(--primary); }
248
+
249
+ /* Signatures */
250
+ .signature-grid { display: flex; gap: 32px; margin-top: 36px; }
251
+ .signature { flex: 1; }
252
+ .signature-line { border-top: 1px solid var(--ink); margin-bottom: 8px; }
253
+ .signature-name { font-weight: 600; }
254
+ .signature-role { color: var(--muted); font-size: 9.5pt; }
255
+ </style>
256
+ </head>
257
+ <body>
258
+ ${cover}
259
+ ${sections}
260
+ ${signatories}
261
+ </body>
262
+ </html>`;
263
+ const footerLeft = theme.legalFooter || data.documentLabel || theme.companyName;
264
+ const separator = (_b = data.pageSeparator) !== null && _b !== void 0 ? _b : '/';
265
+ const pdfOptions = {
266
+ format: 'A4',
267
+ printBackground: true,
268
+ displayHeaderFooter: true,
269
+ headerTemplate: `<div style="position:absolute;top:0;left:0;right:0;height:6px;background:${primary};-webkit-print-color-adjust:exact;print-color-adjust:exact;"></div>`,
270
+ footerTemplate: `<div style="width:100%;margin:0 25mm;display:flex;justify-content:space-between;gap:16px;font-family:${escapePdfHtml(fontMono)};font-size:6.5pt;letter-spacing:0.12em;color:#949494;-webkit-print-color-adjust:exact;"><span>${escapePdfHtml(footerLeft.toUpperCase())}</span><span style="white-space:nowrap;"><span class="pageNumber"></span> ${escapePdfHtml(separator)} <span class="totalPages"></span></span></div>`,
271
+ margin: { top: '22mm', right: '25mm', bottom: '22mm', left: '25mm' },
272
+ label: 'commercial-proposal',
273
+ };
274
+ return { html, pdfOptions };
275
+ }
276
+ //# sourceMappingURL=commercial-proposal.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commercial-proposal.template.js","sourceRoot":"","sources":["../../../src/pdf/templates/commercial-proposal.template.ts"],"names":[],"mappings":";;AAqFA,sCAOC;AAiGD,gEAkNC;AA7YD,uDAAwE;AA+ExE,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,SAAgB,aAAa,CAAC,KAAc;IAC1C,OAAO,MAAM,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,wEAAwE;AACxE,SAAS,SAAS,CAAC,KAAa,EAAE,QAAgB;IAChD,OAAO,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxF,CAAC;AAED,uEAAuE;AACvE,SAAS,aAAa,CAAC,KAAa,EAAE,QAAgB;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,OAAO,OAAO,IAAI,QAAQ,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,MAAM,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;SACtB,KAAK,CAAC,QAAQ,CAAC;SACf,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;SACpC,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;SAC/E,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,KAA8B;IACjD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,qBAAqB,KAAK,CAAC,IAAI,QAAQ,CAAC;QACjD,KAAK,YAAY;YACf,OAAO,qBAAqB,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnE,KAAK,MAAM;YACT,OAAO,yBAAyB,KAAK,CAAC,KAAK;iBACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;iBAChD,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,uBAAuB,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB;IAC/F,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;IAC3E,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;OACzB,CAAC;QACJ,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,WAAC,OAAA,CAAC,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAG,KAAK,CAAC,MAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA,EAAA,CAAC;YAC1F,OAAO;eACE,KAAK,CAAC,OAAO;iBACvB,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;iBAC1E,IAAI,CAAC,EAAE,CAAC;WACF,KAAK,CAAC,IAAI;iBAChB,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CACpG;iBACA,IAAI,CAAC,EAAE,CAAC;SACJ,CAAC;QACN,CAAC;QACD,KAAK,QAAQ;YACX,OAAO,gCAAgC,KAAK,CAAC,IAAI;iBAC9C,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN,yBAAyB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,WAAW,aAAa,CACnF,GAAG,CAAC,KAAK,CACV,gBAAgB,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAC3D;iBACA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;QACtB;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,SAAS,WAAW,CAAC,KAA8B;IACjD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,gCAAgC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,aAAa,CAC7F,KAAK,CAAC,WAAW,CAClB,IAAI,CAAC;IACR,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,OAAO,8CAA8C,aAAa,CAChE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACjB,UAAU,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kCAAkC,aAAa,CACpF,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CACzB,eAAe,CAAC;AACnB,CAAC;AAED,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,SAAgB,0BAA0B,CACxC,IAA4B,EAC5B,KAA8B;;IAE9B,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,4BAAc,CAAC,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,4BAAc,CAAC,IAAI,CAAC;IAClC,MAAM,IAAI,GAAG,4BAAc,CAAC,IAAI,CAAC;IACjC,MAAM,OAAO,GAAG,4BAAc,CAAC,QAAQ,CAAC;IACxC,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;IAE9E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;SAC3B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;SAC9C,GAAG,CACF,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;iCACO,aAAa,CAAC,KAAK,CAAC,MAAM,aAAa,CACpE,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAC9B;QACK,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;WACnC,CACN;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,WAAW,GAAG,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,MAAM;QAC1C,CAAC,CAAC;IACF,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gCAC/C,IAAI,CAAC,WAAW;aAC3C,GAAG,CACF,CAAC,SAAS,EAAE,EAAE,CAAC;;yBAEI,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;MACjD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,+BAA+B,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;MAC1F,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,+BAA+B,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;SACvF,CACJ;aACA,IAAI,CAAC,EAAE,CAAC;WACF;QACP,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,KAAK,GAAG;6BACa,WAAW,CAAC,KAAK,CAAC;+BAChB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;4BAC5C,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GACjD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,4BAA4B,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAC5F;IACE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,+BAA+B,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;aAE/E,IAAI,CAAC,IAAI;SACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,MAAM,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA,EAAA,CAAC;SACjD,GAAG,CACF,CAAC,IAAI,EAAE,EAAE,CACP,WAAW,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CACtG;SACA,IAAI,CAAC,EAAE,CAAC;;IAEX,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,6BAA6B,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;OACzG,CAAC;IAEN,MAAM,IAAI,GAAG;cACD,aAAa,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC;;;IAG/C,IAAA,6BAAe,GAAE;;;mBAGF,OAAO;2CACiB,OAAO;eACnC,GAAG;iBACD,KAAK;gBACN,IAAI;mBACD,OAAO;gBACV,UAAU;gBACV,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8GtB,KAAK;EACL,QAAQ;EACR,WAAW;;QAEL,CAAC;IAEP,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,WAAW,CAAC;IAChF,MAAM,SAAS,GAAG,MAAA,IAAI,CAAC,aAAa,mCAAI,GAAG,CAAC;IAE5C,MAAM,UAAU,GAAuB;QACrC,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,IAAI;QACrB,mBAAmB,EAAE,IAAI;QACzB,cAAc,EAAE,4EAA4E,OAAO,qEAAqE;QACxK,cAAc,EAAE,wGAAwG,aAAa,CACnI,QAAQ,CACT,iGAAiG,aAAa,CAC7G,UAAU,CAAC,WAAW,EAAE,CACzB,6EAA6E,aAAa,CACzF,SAAS,CACV,gDAAgD;QACjD,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;QACpE,KAAK,EAAE,qBAAqB;KAC7B,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { Response } from 'express';
2
+ import { BrandAssetService } from './brand-asset.service';
3
+ import { SettingService } from './setting.service';
4
+ /**
5
+ * `GET /favicon.ico` no host da API, com o icone do Branding (`icon-url`).
6
+ *
7
+ * Quem procura o favicon no dominio da API sao os clientes que so conhecem esse
8
+ * endereco - o conector MCP no claude.ai, por exemplo, mostra o icone do dominio
9
+ * do servidor ao lado do nome. Sem esta rota a resposta era o 404 JSON do Nest e
10
+ * o conector caia na letra inicial.
11
+ *
12
+ * O arquivo e servido daqui (e nao por redirect) porque nem todo coletor de
13
+ * favicon segue redirecionamento. O Content-Type e o da origem, entao um SVG
14
+ * configurado no Branding chega como SVG.
15
+ */
16
+ export declare class FaviconController {
17
+ private readonly setting;
18
+ private readonly brandAsset;
19
+ private readonly logger;
20
+ private cache;
21
+ constructor(setting: SettingService, brandAsset: BrandAssetService);
22
+ favicon(res: Response): Promise<void>;
23
+ private loadIcon;
24
+ private download;
25
+ }
26
+ //# sourceMappingURL=favicon.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"favicon.controller.d.ts","sourceRoot":"","sources":["../../src/setting/favicon.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAenD;;;;;;;;;;;GAWG;AACH,qBACa,iBAAiB;IAK1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,KAAK,CAA2B;gBAGrB,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,iBAAiB;IAK1C,OAAO,CAAQ,GAAG,EAAE,QAAQ;YAYpB,QAAQ;YAiCR,QAAQ;CA8CvB"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var FaviconController_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.FaviconController = void 0;
17
+ const api_1 = require("@hed-hog/api");
18
+ const common_1 = require("@nestjs/common");
19
+ const brand_asset_service_1 = require("./brand-asset.service");
20
+ const setting_service_1 = require("./setting.service");
21
+ /** Timeout do fetch da imagem configurada. */
22
+ const FETCH_TIMEOUT_MS = 5000;
23
+ /** Quanto tempo o binario baixado fica em memoria antes de buscar de novo. */
24
+ const CACHE_TTL_MS = 10 * 60000;
25
+ /**
26
+ * `GET /favicon.ico` no host da API, com o icone do Branding (`icon-url`).
27
+ *
28
+ * Quem procura o favicon no dominio da API sao os clientes que so conhecem esse
29
+ * endereco - o conector MCP no claude.ai, por exemplo, mostra o icone do dominio
30
+ * do servidor ao lado do nome. Sem esta rota a resposta era o 404 JSON do Nest e
31
+ * o conector caia na letra inicial.
32
+ *
33
+ * O arquivo e servido daqui (e nao por redirect) porque nem todo coletor de
34
+ * favicon segue redirecionamento. O Content-Type e o da origem, entao um SVG
35
+ * configurado no Branding chega como SVG.
36
+ */
37
+ let FaviconController = FaviconController_1 = class FaviconController {
38
+ constructor(setting, brandAsset) {
39
+ this.setting = setting;
40
+ this.brandAsset = brandAsset;
41
+ this.logger = new common_1.Logger(FaviconController_1.name);
42
+ this.cache = null;
43
+ }
44
+ async favicon(res) {
45
+ const icon = await this.loadIcon();
46
+ if (!icon) {
47
+ throw new common_1.NotFoundException();
48
+ }
49
+ res.setHeader('Content-Type', icon.contentType);
50
+ res.setHeader('Cache-Control', 'public, max-age=3600');
51
+ res.send(icon.body);
52
+ }
53
+ async loadIcon() {
54
+ var _a, _b, _c;
55
+ const settings = await this.setting.getSettingValues([
56
+ 'icon-url',
57
+ 'image-url',
58
+ ]);
59
+ const value = String((_a = settings['icon-url']) !== null && _a !== void 0 ? _a : '').trim() ||
60
+ String((_b = settings['image-url']) !== null && _b !== void 0 ? _b : '').trim();
61
+ const url = await this.brandAsset.resolveAssetUrl(value);
62
+ if (!url) {
63
+ return null;
64
+ }
65
+ if (this.cache &&
66
+ this.cache.url === url &&
67
+ this.cache.expiresAt > Date.now()) {
68
+ return this.cache;
69
+ }
70
+ const icon = await this.download(url);
71
+ if (icon) {
72
+ this.cache = icon;
73
+ return icon;
74
+ }
75
+ // Origem fora do ar: melhor o icone anterior do que nenhum.
76
+ return ((_c = this.cache) === null || _c === void 0 ? void 0 : _c.url) === url ? this.cache : null;
77
+ }
78
+ async download(url) {
79
+ var _a;
80
+ const dataUri = /^data:([^;,]+)(;base64)?,([\s\S]*)$/i.exec(url);
81
+ if (dataUri) {
82
+ const [, contentType, base64, payload] = dataUri;
83
+ return {
84
+ url,
85
+ contentType,
86
+ body: base64
87
+ ? Buffer.from(payload, 'base64')
88
+ : Buffer.from(decodeURIComponent(payload)),
89
+ expiresAt: Date.now() + CACHE_TTL_MS,
90
+ };
91
+ }
92
+ try {
93
+ const controller = new AbortController();
94
+ const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
95
+ const response = await globalThis
96
+ .fetch(url, { signal: controller.signal })
97
+ .finally(() => clearTimeout(timeout));
98
+ const contentType = (_a = response.headers.get('content-type')) !== null && _a !== void 0 ? _a : '';
99
+ if (!response.ok || !contentType.startsWith('image/')) {
100
+ this.logger.warn(`Favicon source ${url} answered ${response.status} ${contentType || '(no content-type)'}`);
101
+ return null;
102
+ }
103
+ return {
104
+ url,
105
+ contentType,
106
+ body: Buffer.from(await response.arrayBuffer()),
107
+ expiresAt: Date.now() + CACHE_TTL_MS,
108
+ };
109
+ }
110
+ catch (error) {
111
+ this.logger.warn(`Could not fetch favicon source ${url}: ${error instanceof Error ? error.message : String(error)}`);
112
+ return null;
113
+ }
114
+ }
115
+ };
116
+ exports.FaviconController = FaviconController;
117
+ __decorate([
118
+ (0, api_1.Public)(),
119
+ (0, common_1.Get)('favicon.ico'),
120
+ __param(0, (0, common_1.Res)()),
121
+ __metadata("design:type", Function),
122
+ __metadata("design:paramtypes", [Object]),
123
+ __metadata("design:returntype", Promise)
124
+ ], FaviconController.prototype, "favicon", null);
125
+ exports.FaviconController = FaviconController = FaviconController_1 = __decorate([
126
+ (0, common_1.Controller)(),
127
+ __metadata("design:paramtypes", [setting_service_1.SettingService,
128
+ brand_asset_service_1.BrandAssetService])
129
+ ], FaviconController);
130
+ //# sourceMappingURL=favicon.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"favicon.controller.js","sourceRoot":"","sources":["../../src/setting/favicon.controller.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setting.module.d.ts","sourceRoot":"","sources":["../../src/setting/setting.module.ts"],"names":[],"mappings":"AAUA,qBAaa,aAAa;CAAI"}
1
+ {"version":3,"file":"setting.module.d.ts","sourceRoot":"","sources":["../../src/setting/setting.module.ts"],"names":[],"mappings":"AAWA,qBAaa,aAAa;CAAI"}
@@ -14,6 +14,7 @@ const common_1 = require("@nestjs/common");
14
14
  const auth_module_1 = require("../auth/auth.module");
15
15
  const mail_module_1 = require("../mail/mail.module");
16
16
  const brand_asset_service_1 = require("./brand-asset.service");
17
+ const favicon_controller_1 = require("./favicon.controller");
17
18
  const setting_controller_1 = require("./setting.controller");
18
19
  const setting_service_1 = require("./setting.service");
19
20
  let SettingModule = class SettingModule {
@@ -29,7 +30,7 @@ exports.SettingModule = SettingModule = __decorate([
29
30
  (0, common_1.forwardRef)(() => api_locale_1.LocaleModule),
30
31
  (0, common_1.forwardRef)(() => mail_module_1.MailModule),
31
32
  ],
32
- controllers: [setting_controller_1.SettingsController],
33
+ controllers: [setting_controller_1.SettingsController, favicon_controller_1.FaviconController],
33
34
  providers: [setting_service_1.SettingService, brand_asset_service_1.BrandAssetService],
34
35
  exports: [setting_service_1.SettingService, brand_asset_service_1.BrandAssetService],
35
36
  })
@@ -1 +1 @@
1
- {"version":3,"file":"setting.module.js","sourceRoot":"","sources":["../../src/setting/setting.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAmD;AACnD,4DAA2D;AAC3D,oDAAmD;AACnD,2CAA4D;AAC5D,qDAAiD;AACjD,qDAAiD;AACjD,+DAA0D;AAC1D,6DAA0D;AAC1D,uDAAmD;AAe5C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAI,CAAA;AAAjB,sCAAa;wBAAb,aAAa;IAbzB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;YAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,iCAAgB,CAAC;YAClC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;SAC7B;QACD,WAAW,EAAE,CAAC,uCAAkB,CAAC;QACjC,SAAS,EAAE,CAAC,gCAAc,EAAE,uCAAiB,CAAC;QAC9C,OAAO,EAAE,CAAC,gCAAc,EAAE,uCAAiB,CAAC;KAC7C,CAAC;GACW,aAAa,CAAI"}
1
+ {"version":3,"file":"setting.module.js","sourceRoot":"","sources":["../../src/setting/setting.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAmD;AACnD,4DAA2D;AAC3D,oDAAmD;AACnD,2CAA4D;AAC5D,qDAAiD;AACjD,qDAAiD;AACjD,+DAA0D;AAC1D,6DAAyD;AACzD,6DAA0D;AAC1D,uDAAmD;AAe5C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAI,CAAA;AAAjB,sCAAa;wBAAb,aAAa;IAbzB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;YAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,iCAAgB,CAAC;YAClC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;SAC7B;QACD,WAAW,EAAE,CAAC,uCAAkB,EAAE,sCAAiB,CAAC;QACpD,SAAS,EAAE,CAAC,gCAAc,EAAE,uCAAiB,CAAC;QAC9C,OAAO,EAAE,CAAC,gCAAc,EAAE,uCAAiB,CAAC;KAC7C,CAAC;GACW,aAAa,CAAI"}
@@ -1 +1 @@
1
- {"version":3,"file":"setting.service.d.ts","sourceRoot":"","sources":["../../src/setting/setting.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setting.service.d.ts","sourceRoot":"","sources":["../../src/setting/setting.service.ts"],"names":[],"mappings":"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"}
@@ -486,6 +486,9 @@ let SettingService = SettingService_1 = class SettingService {
486
486
  'lms-video-frame-capture-interval-seconds',
487
487
  'lms-error-modal-enabled',
488
488
  'url',
489
+ // Base dos callbacks OAuth do backend (canais do social): o perfil de
490
+ // integração mostra a URL exata que o backend envia ao provider.
491
+ 'api-url',
489
492
  'app-urls',
490
493
  // Hcode Store: liga/desliga a venda no frontend (o backend também
491
494
  // recusa o checkout — isto é só para a UI mostrar "Em breve" cedo).