@happyvertical/smrt-content 0.38.2 → 0.38.4

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 (43) hide show
  1. package/dist/body-format.d.ts.map +1 -1
  2. package/dist/body-format.js.map +1 -1
  3. package/dist/chunks/{content-transparency-OvUNs-bU.js → content-transparency-Bh6axaZj.js} +30 -11
  4. package/dist/chunks/content-transparency-Bh6axaZj.js.map +1 -0
  5. package/dist/content-contribution-config.d.ts +8 -12
  6. package/dist/content-contribution-config.d.ts.map +1 -1
  7. package/dist/content-contribution.d.ts.map +1 -1
  8. package/dist/content-contributions.d.ts +5 -1
  9. package/dist/content-contributions.d.ts.map +1 -1
  10. package/dist/content-governance.d.ts +3 -0
  11. package/dist/content-governance.d.ts.map +1 -1
  12. package/dist/content-versions.d.ts.map +1 -1
  13. package/dist/content.d.ts.map +1 -1
  14. package/dist/contents.d.ts +5 -1
  15. package/dist/contents.d.ts.map +1 -1
  16. package/dist/index.js +307 -264
  17. package/dist/index.js.map +1 -1
  18. package/dist/manifest.json +44 -8
  19. package/dist/smrt-knowledge.json +6 -6
  20. package/dist/svelte/components/ContentAgentChat.svelte +1 -1
  21. package/dist/svelte/components/ContentClaimAuditTool.svelte +8 -3
  22. package/dist/svelte/components/ContentClaimAuditTool.svelte.d.ts.map +1 -1
  23. package/dist/svelte/components/ContentCorrectionsTool.svelte +4 -2
  24. package/dist/svelte/components/ContentCorrectionsTool.svelte.d.ts.map +1 -1
  25. package/dist/svelte/components/ContentEditor.svelte +2 -1
  26. package/dist/svelte/components/ContentEditor.svelte.d.ts +1 -2
  27. package/dist/svelte/components/ContentEditor.svelte.d.ts.map +1 -1
  28. package/dist/svelte/components/ContentGovernancePanel.svelte +26 -10
  29. package/dist/svelte/components/ContentGovernancePanel.svelte.d.ts.map +1 -1
  30. package/dist/svelte/components/ContentVersionsTool.svelte +7 -3
  31. package/dist/svelte/components/ContentVersionsTool.svelte.d.ts.map +1 -1
  32. package/dist/svelte/index.d.ts +1 -1
  33. package/dist/svelte/index.d.ts.map +1 -1
  34. package/dist/svelte/index.js +1 -1
  35. package/dist/svelte/routes/ContentContributionsRoute.svelte +6 -2
  36. package/dist/svelte/routes/ContentContributionsRoute.svelte.d.ts.map +1 -1
  37. package/dist/svelte/routes/ContentFactsRoute.svelte +2 -1
  38. package/dist/svelte/routes/ContentFactsRoute.svelte.d.ts.map +1 -1
  39. package/dist/svelte/routes/ContentWorkspaceRoute.svelte +6 -3
  40. package/dist/svelte/routes/ContentWorkspaceRoute.svelte.d.ts.map +1 -1
  41. package/dist/thumbnail-generator.d.ts.map +1 -1
  42. package/package.json +24 -24
  43. package/dist/chunks/content-transparency-OvUNs-bU.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"body-format.d.ts","sourceRoot":"","sources":["../src/body-format.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAC;AACpD,MAAM,MAAM,yBAAyB,GACjC,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,2BAA2B,EAAE,iBAA0B,CAAC;AAqErE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,iBAAiB,CAE5B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAErD;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,EACf,IAAI,GAAE,OAAY,GACjB,iBAAiB,CAcnB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBhD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAsGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAyFlD;AAgCD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqE7D;AAuGD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AA6ED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8BnD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAIR;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAIR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,iBAAsD,GAC7D,gBAAgB,EAAE,CAyFpB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAE/E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAE5E;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GACvC,MAAM,CAeR"}
1
+ {"version":3,"file":"body-format.d.ts","sourceRoot":"","sources":["../src/body-format.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAC;AACpD,MAAM,MAAM,yBAAyB,GACjC,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,2BAA2B,EAAE,iBAA0B,CAAC;AAqErE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,iBAAiB,CAE5B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAErD;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,EACf,IAAI,GAAE,OAAY,GACjB,iBAAiB,CAcnB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBhD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAsGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAyFlD;AAgCD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqE7D;AAuGD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AA6ED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgCnD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAIR;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAIR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,iBAAsD,GAC7D,gBAAgB,EAAE,CAyFpB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GACvC,MAAM,CAER;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAE5E;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GACvC,MAAM,CAeR"}
@@ -1 +1 @@
1
- {"version":3,"file":"body-format.js","names":["images"],"sources":["../src/body-format.ts"],"sourcesContent":["export type ContentBodyFormat = 'markdown' | 'html';\nexport type ContentBodyImagePlacement =\n | 'block'\n | 'left'\n | 'right'\n | 'center'\n | 'full';\n\nexport interface ContentBodyImage {\n src: string;\n alt: string;\n title?: string;\n assetId?: string;\n placement?: ContentBodyImagePlacement;\n width?: number;\n index: number;\n}\n\nexport const DEFAULT_CONTENT_BODY_FORMAT: ContentBodyFormat = 'html';\n\nconst HTML_TAG_PATTERN =\n /<\\/?(?:article|aside|blockquote|br|div|figure|figcaption|h[1-6]|hr|img|li|ol|p|pre|section|span|strong|em|b|i|u|a|ul|table|tbody|td|th|thead|tr)(?:\\s[^>]*)?>/i;\n// HTML attribute boundary: the HTML5 tree builder starts a new attribute after\n// whitespace, `/`, OR the closing quote/backtick of the previous value. A naive\n// `\\s+`-only boundary lets `src=\"x\"onerror=\"...\"` survive sanitization because\n// `onerror` is glued to the preceding `\"` — the browser still parses it as a\n// separate (executing) attribute. Match either runs of whitespace/`/`\n// (captured in group 1 and consumed) OR a non-consuming lookbehind for a\n// quote/backtick (group 1 undefined; the char is the previous value's own\n// closing delimiter and must stay). `reemitSeparator()` turns the captured\n// group back into a single separating space when one was consumed (S5 #1388).\nconst ATTR_BOUNDARY = '(?:([\\\\s/]+)|(?<=[\"\\'`]))';\n\n// Re-emit an attribute separator after a removed/rewritten attribute. When the\n// boundary consumed whitespace/`/` (group 1 present), emit one space so the\n// rebuilt attribute doesn't glue onto the tag name or previous attribute. When\n// the boundary was a non-consumed quote/backtick (group 1 undefined), that\n// delimiter already separates the attributes, so emit nothing.\nfunction reemitSeparator(consumed: string | undefined): string {\n return consumed ? ' ' : '';\n}\n\nconst URL_ATTRIBUTE_PATTERN = new RegExp(\n `${ATTR_BOUNDARY}(href|src|xlink:href|formaction|action|poster)\\\\s*=\\\\s*(\"([^\"]*)\"|'([^']*)'|([^\\\\s>]+))`,\n 'gi',\n);\nconst SRCSET_ATTRIBUTE_PATTERN = new RegExp(\n `${ATTR_BOUNDARY}srcset\\\\s*=\\\\s*(\"([^\"]*)\"|'([^']*)'|([^\\\\s>]+))`,\n 'gi',\n);\n\nconst BLOCK_TAGS = [\n 'address',\n 'article',\n 'aside',\n 'blockquote',\n 'div',\n 'dl',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hr',\n 'li',\n 'main',\n 'nav',\n 'ol',\n 'p',\n 'pre',\n 'section',\n 'table',\n 'tbody',\n 'td',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n];\n\nexport function isContentBodyFormat(\n value: unknown,\n): value is ContentBodyFormat {\n return value === 'markdown' || value === 'html';\n}\n\nexport function looksLikeHtml(value: unknown): boolean {\n return typeof value === 'string' && HTML_TAG_PATTERN.test(value);\n}\n\nexport function resolveBodyFormat(\n format: unknown,\n body: unknown = '',\n): ContentBodyFormat {\n if (isContentBodyFormat(format)) {\n return format;\n }\n\n if (typeof format === 'string' && isContentBodyFormat(format.toLowerCase())) {\n return format.toLowerCase() as ContentBodyFormat;\n }\n\n if (looksLikeHtml(body)) {\n return 'html';\n }\n\n return body ? 'markdown' : DEFAULT_CONTENT_BODY_FORMAT;\n}\n\nexport function escapeHtml(value: string): string {\n return value.replace(/[&<>\"']/g, (char) => {\n switch (char) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case \"'\":\n return '&#39;';\n default:\n return char;\n }\n });\n}\n\nexport function escapeAttribute(value: string): string {\n return escapeHtml(value).replace(/`/g, '&#96;');\n}\n\nfunction decodeBasicEntities(value: string): string {\n const decodeCodePoint = (codePoint: number) =>\n Number.isFinite(codePoint) && codePoint >= 0 && codePoint <= 0x10ffff\n ? String.fromCodePoint(codePoint)\n : '';\n\n return value\n .replace(/&#x([0-9a-f]+);?/gi, (_match, hex: string) => {\n const codePoint = Number.parseInt(hex, 16);\n return decodeCodePoint(codePoint);\n })\n .replace(/&#(\\d+);?/g, (_match, decimal: string) => {\n const codePoint = Number.parseInt(decimal, 10);\n return decodeCodePoint(codePoint);\n })\n .replace(/&nbsp;/gi, ' ')\n .replace(/&quot;/gi, '\"')\n .replace(/&#39;/gi, \"'\")\n .replace(/&apos;/gi, \"'\")\n .replace(/&lt;/gi, '<')\n .replace(/&gt;/gi, '>')\n .replace(/&amp;/gi, '&');\n}\n\nfunction sanitizeUrl(value: string): string {\n const trimmed = decodeBasicEntities(value).trim();\n if (!trimmed) {\n return '';\n }\n\n let compactScheme = '';\n for (const char of trimmed) {\n const code = char.charCodeAt(0);\n if (code <= 31 || code === 127 || char.trim() === '') {\n continue;\n }\n compactScheme += char.toLowerCase();\n }\n\n if (/^(?:javascript|vbscript):/.test(compactScheme)) {\n return '#';\n }\n\n if (\n compactScheme.startsWith('data:') &&\n !/^data:image\\/(?:png|gif|jpe?g|webp);/.test(compactScheme)\n ) {\n return '#';\n }\n\n return trimmed;\n}\n\nfunction sanitizeSrcset(value: string): string {\n return decodeBasicEntities(value)\n .split(',')\n .map((candidate) => {\n const parts = candidate.trim().split(/\\s+/);\n const url = sanitizeUrl(parts.shift() || '');\n if (!url || url === '#') {\n return '';\n }\n\n const descriptors = parts.filter((part) =>\n /^(?:\\d+(?:\\.\\d+)?x|\\d+w)$/.test(part),\n );\n return [url, ...descriptors].join(' ');\n })\n .filter(Boolean)\n .join(', ');\n}\n\nfunction sanitizeStyle(value: string): string {\n const safeRules: string[] = [];\n\n for (const rawRule of decodeBasicEntities(value).split(';')) {\n const [rawName, ...rawValueParts] = rawRule.split(':');\n const name = rawName?.trim().toLowerCase();\n const ruleValue = rawValueParts.join(':').trim().toLowerCase();\n\n if (!name || !ruleValue) {\n continue;\n }\n\n if (\n (name === 'width' || name === 'max-width') &&\n /^(?:\\d{1,4}(?:\\.\\d+)?px|100%)$/.test(ruleValue)\n ) {\n safeRules.push(`${name}: ${ruleValue}`);\n continue;\n }\n\n if (name === 'height' && ruleValue === 'auto') {\n safeRules.push('height: auto');\n }\n }\n\n return safeRules.join('; ');\n}\n\nexport function sanitizeHtml(value: string): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n let html = value;\n html = html.replace(/<!--[\\s\\S]*?-->/g, '');\n // This lightweight sanitizer intentionally removes SVG/MathML instead of\n // attempting namespace-aware SVG/MathML sanitization. Consumers needing rich\n // inline diagrams should run a dedicated sanitizer before storing content.\n html = html.replace(\n /<\\s*(script|style|iframe|object|embed|link|meta|base|svg|math)\\b[^>]*>[\\s\\S]*?<\\s*\\/\\s*\\1\\s*>/gi,\n '',\n );\n html = html.replace(\n /<\\s*(script|style|iframe|object|embed|link|meta|base|svg|math)\\b[^>]*\\/?>/gi,\n '',\n );\n // Drop event handlers (`onclick`, etc.) and internal editor markers entirely.\n // A consumed whitespace/`/` separator and a non-consumed quote boundary both\n // collapse to nothing: the attribute that follows (if any) keeps its own\n // leading boundary, so removal never needs to leave a separator behind.\n html = html.replace(\n new RegExp(\n `${ATTR_BOUNDARY}on[a-z]+\\\\s*=\\\\s*(?:\"[^\"]*\"|'[^']*'|[^\\\\s>]*)`,\n 'gi',\n ),\n '',\n );\n html = html.replace(\n new RegExp(\n `${ATTR_BOUNDARY}data-smrt-(?:selected|moving|resizing)\\\\s*=\\\\s*(?:\"[^\"]*\"|'[^']*'|[^\\\\s>]*)`,\n 'gi',\n ),\n '',\n );\n html = html.replace(\n new RegExp(\n `${ATTR_BOUNDARY}style\\\\s*=\\\\s*(\"([^\"]*)\"|'([^']*)'|([^\\\\s>]+))`,\n 'gi',\n ),\n (\n _match,\n separator: string | undefined,\n _raw: string,\n doubleValue = '',\n singleValue = '',\n bareValue = '',\n ) => {\n const safeStyle = sanitizeStyle(doubleValue || singleValue || bareValue);\n const sep = reemitSeparator(separator);\n return safeStyle ? `${sep}style=\"${escapeAttribute(safeStyle)}\"` : sep;\n },\n );\n html = html.replace(\n SRCSET_ATTRIBUTE_PATTERN,\n (\n _match,\n separator: string | undefined,\n _raw: string,\n doubleValue = '',\n singleValue = '',\n bareValue = '',\n ) => {\n const safeSrcset = sanitizeSrcset(\n doubleValue || singleValue || bareValue,\n );\n const sep = reemitSeparator(separator);\n return safeSrcset ? `${sep}srcset=\"${escapeAttribute(safeSrcset)}\"` : sep;\n },\n );\n html = html.replace(\n URL_ATTRIBUTE_PATTERN,\n (\n _match,\n separator: string | undefined,\n name: string,\n _raw: string,\n doubleValue = '',\n singleValue = '',\n bareValue = '',\n ) => {\n const quote = doubleValue ? '\"' : singleValue ? \"'\" : '\"';\n const rawValue = doubleValue || singleValue || bareValue;\n return `${reemitSeparator(separator)}${name}=${quote}${escapeAttribute(sanitizeUrl(rawValue))}${quote}`;\n },\n );\n\n return html.trim();\n}\n\nfunction renderInlineMarkdown(value: string): string {\n let html = value;\n\n html = html.replace(\n /!\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+\"([^\"]*)\")?\\)/g,\n (_match, alt: string, src: string, title = '') => {\n const safeSrc = sanitizeUrl(src);\n const safeAlt = escapeAttribute(decodeBasicEntities(alt));\n const titleAttr = title\n ? ` title=\"${escapeAttribute(decodeBasicEntities(title))}\"`\n : '';\n return `<img src=\"${escapeAttribute(safeSrc)}\" alt=\"${safeAlt}\"${titleAttr}>`;\n },\n );\n html = html.replace(\n /\\[([^\\]]+)\\]\\(([^)\\s]+)(?:\\s+\"([^\"]*)\")?\\)/g,\n (_match, label: string, href: string, title = '') => {\n const titleAttr = title\n ? ` title=\"${escapeAttribute(decodeBasicEntities(title))}\"`\n : '';\n return `<a href=\"${escapeAttribute(sanitizeUrl(href))}\"${titleAttr}>${label}</a>`;\n },\n );\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\n html = html.replace(/\\*\\*([^*]+)\\*\\*/g, '<strong>$1</strong>');\n html = html.replace(/\\*([^*]+)\\*/g, '<em>$1</em>');\n\n return html;\n}\n\nexport function renderMarkdownToHtml(markdown: string): string {\n if (!markdown || typeof markdown !== 'string') {\n return '';\n }\n\n const lines = escapeHtml(markdown).split('\\n');\n const result: string[] = [];\n let inList = false;\n let inParagraph = false;\n\n function closeParagraph() {\n if (inParagraph) {\n result.push('</p>');\n inParagraph = false;\n }\n }\n\n function closeList() {\n if (inList) {\n result.push('</ul>');\n inList = false;\n }\n }\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n if (!trimmed) {\n closeList();\n closeParagraph();\n continue;\n }\n\n const headingMatch = /^(#{1,3})\\s+(.+)$/.exec(trimmed);\n if (headingMatch) {\n closeList();\n closeParagraph();\n const level = headingMatch[1].length;\n result.push(\n `<h${level}>${renderInlineMarkdown(headingMatch[2])}</h${level}>`,\n );\n continue;\n }\n\n const listMatch = /^[-*]\\s+(.+)$/.exec(trimmed);\n if (listMatch) {\n closeParagraph();\n if (!inList) {\n result.push('<ul>');\n inList = true;\n }\n result.push(`<li>${renderInlineMarkdown(listMatch[1])}</li>`);\n continue;\n }\n\n closeList();\n if (!inParagraph) {\n result.push('<p>');\n inParagraph = true;\n } else {\n result.push('<br>');\n }\n result.push(renderInlineMarkdown(line));\n }\n\n closeList();\n closeParagraph();\n\n return sanitizeHtml(result.join('\\n'));\n}\n\nfunction parseHtmlAttributes(value: string): Record<string, string> {\n const attributes: Record<string, string> = {};\n value.replace(\n /([:\\w-]+)\\s*=\\s*(\"([^\"]*)\"|'([^']*)'|([^\\s\"'>]+))/g,\n (\n _match,\n name: string,\n _raw: string,\n doubleValue = '',\n singleValue = '',\n bareValue = '',\n ) => {\n attributes[name.toLowerCase()] = decodeBasicEntities(\n doubleValue || singleValue || bareValue || '',\n );\n return '';\n },\n );\n return attributes;\n}\n\nfunction normalizeImagePlacement(\n value: unknown,\n): ContentBodyImagePlacement | undefined {\n return value === 'block' ||\n value === 'left' ||\n value === 'right' ||\n value === 'center' ||\n value === 'full'\n ? value\n : undefined;\n}\n\nfunction parseImageWidth(value: unknown): number | undefined {\n if (typeof value !== 'string' && typeof value !== 'number') {\n return undefined;\n }\n\n const match = String(value).match(/(\\d+(?:\\.\\d+)?)/);\n if (!match) {\n return undefined;\n }\n\n const width = Math.round(Number(match[1]));\n return Number.isFinite(width) && width > 0 ? width : undefined;\n}\n\nfunction parseStyleWidth(value: unknown): number | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const match = value.match(\n /(?:^|;)\\s*(?:max-)?width\\s*:\\s*(\\d+(?:\\.\\d+)?)px/i,\n );\n if (!match) {\n return undefined;\n }\n\n return parseImageWidth(match[1]);\n}\n\nfunction fallbackHtmlToMarkdown(html: string): string {\n let markdown = sanitizeHtml(html);\n\n markdown = markdown.replace(/<img\\b([^>]*)>/gi, (_match, attrs: string) => {\n const parsed = parseHtmlAttributes(attrs);\n const src = sanitizeUrl(parsed.src || '');\n if (!src) {\n return '';\n }\n return `\\n\\n![${parsed.alt || ''}](${src})\\n\\n`;\n });\n markdown = markdown.replace(\n /<a\\b([^>]*)>([\\s\\S]*?)<\\/a>/gi,\n (_match, attrs: string, label: string) => {\n const parsed = parseHtmlAttributes(attrs);\n const href = sanitizeUrl(parsed.href || '');\n const text = stripHtml(label).trim() || href;\n return href ? `[${text}](${href})` : text;\n },\n );\n markdown = markdown.replace(/<h1\\b[^>]*>([\\s\\S]*?)<\\/h1>/gi, '\\n\\n# $1\\n\\n');\n markdown = markdown.replace(/<h2\\b[^>]*>([\\s\\S]*?)<\\/h2>/gi, '\\n\\n## $1\\n\\n');\n markdown = markdown.replace(\n /<h3\\b[^>]*>([\\s\\S]*?)<\\/h3>/gi,\n '\\n\\n### $1\\n\\n',\n );\n markdown = markdown.replace(/<li\\b[^>]*>([\\s\\S]*?)<\\/li>/gi, '\\n- $1');\n markdown = markdown.replace(/<\\/(?:p|div|section|article|ul|ol)>/gi, '\\n\\n');\n markdown = markdown.replace(/<br\\s*\\/?>/gi, '\\n');\n markdown = markdown.replace(\n /<(strong|b)\\b[^>]*>([\\s\\S]*?)<\\/\\1>/gi,\n '**$2**',\n );\n markdown = markdown.replace(/<(em|i)\\b[^>]*>([\\s\\S]*?)<\\/\\1>/gi, '*$2*');\n markdown = stripHtml(markdown);\n\n return normalizeMarkdownWhitespace(markdown);\n}\n\nexport function stripHtml(value: string): string {\n return decodeBasicEntities(value.replace(/<[^>]*>/g, ''));\n}\n\nfunction normalizeMarkdownWhitespace(value: string): string {\n return decodeBasicEntities(value)\n .replace(/\\r\\n?/g, '\\n')\n .replace(/[ \\t]+\\n/g, '\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n}\n\nconst MARKDOWN_TEXT_NODE = 3;\nconst MARKDOWN_ELEMENT_NODE = 1;\n\ninterface MarkdownDomNode {\n nodeType: number;\n textContent?: string | null;\n childNodes?: ArrayLike<MarkdownDomNode>;\n tagName?: string;\n getAttribute?: (name: string) => string | null;\n}\n\nfunction nodeToMarkdown(node: MarkdownDomNode): string {\n if (node.nodeType === MARKDOWN_TEXT_NODE) {\n return node.textContent || '';\n }\n\n if (node.nodeType !== MARKDOWN_ELEMENT_NODE) {\n return '';\n }\n\n const tag = node.tagName?.toLowerCase() || '';\n const children = Array.from(node.childNodes || [])\n .map(nodeToMarkdown)\n .join('');\n const trimmedChildren = children.trim();\n\n switch (tag) {\n case 'br':\n return '\\n';\n case 'h1':\n return `\\n\\n# ${trimmedChildren}\\n\\n`;\n case 'h2':\n return `\\n\\n## ${trimmedChildren}\\n\\n`;\n case 'h3':\n return `\\n\\n### ${trimmedChildren}\\n\\n`;\n case 'p':\n return `\\n\\n${trimmedChildren}\\n\\n`;\n case 'strong':\n case 'b':\n return `**${trimmedChildren}**`;\n case 'em':\n case 'i':\n return `*${trimmedChildren}*`;\n case 'code':\n return `\\`${trimmedChildren}\\``;\n case 'a': {\n const href = sanitizeUrl(node.getAttribute?.('href') || '');\n return href ? `[${trimmedChildren || href}](${href})` : trimmedChildren;\n }\n case 'img': {\n const src = sanitizeUrl(node.getAttribute?.('src') || '');\n if (!src) {\n return '';\n }\n const alt = node.getAttribute?.('alt') || '';\n return `\\n\\n![${alt}](${src})\\n\\n`;\n }\n case 'li':\n return `- ${trimmedChildren}\\n`;\n case 'ul':\n case 'ol':\n return `\\n${children}\\n`;\n default:\n return BLOCK_TAGS.includes(tag) ? `\\n\\n${trimmedChildren}\\n\\n` : children;\n }\n}\n\nexport function htmlToMarkdown(html: string): string {\n const sanitized = sanitizeHtml(html);\n if (!sanitized) {\n return '';\n }\n\n const Parser = (globalThis as Record<string, unknown>).DOMParser;\n if (typeof Parser !== 'function') {\n return fallbackHtmlToMarkdown(sanitized);\n }\n\n // Structural view of the DOMParser API we rely on; avoids depending on the\n // DOM lib in this environment-agnostic module.\n const parser = new (Parser as new () => {\n parseFromString: (\n source: string,\n mimeType: string,\n ) => { body?: { childNodes?: ArrayLike<MarkdownDomNode> } | null };\n })();\n const document = parser.parseFromString(\n `<body>${sanitized}</body>`,\n 'text/html',\n );\n const markdown = Array.from(\n (document.body?.childNodes || []) as ArrayLike<MarkdownDomNode>,\n )\n .map(nodeToMarkdown)\n .join('');\n\n return normalizeMarkdownWhitespace(markdown);\n}\n\nexport function normalizeEditorHtml(html: string): string {\n const sanitized = sanitizeHtml(html);\n if (!sanitized) {\n return '';\n }\n\n return sanitized.replace(\n /<p>\\s*((?:<br\\s*\\/?>\\s*)?<img\\b[^>]*>(?:\\s*<br\\s*\\/?>)?)\\s*<\\/p>/gi,\n (_match, imageHtml: string) =>\n imageHtml.replace(/^\\s*<br\\s*\\/?>\\s*|\\s*<br\\s*\\/?>\\s*$/gi, ''),\n );\n}\n\nexport function bodyToEditorHtml(\n body: string,\n format: ContentBodyFormat,\n): string {\n return format === 'markdown'\n ? normalizeEditorHtml(renderMarkdownToHtml(body || ''))\n : normalizeEditorHtml(body || '');\n}\n\nexport function editorHtmlToBody(\n html: string,\n format: ContentBodyFormat,\n): string {\n return format === 'markdown'\n ? htmlToMarkdown(html || '')\n : normalizeEditorHtml(html || '');\n}\n\nexport function extractBodyImages(\n body: string,\n format: ContentBodyFormat = resolveBodyFormat(undefined, body),\n): ContentBodyImage[] {\n if (!body || typeof body !== 'string') {\n return [];\n }\n\n if (format === 'markdown') {\n const images: ContentBodyImage[] = [];\n body.replace(\n /!\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+\"([^\"]*)\")?\\)/g,\n (_match, alt: string, src: string, title = '') => {\n const safeSrc = sanitizeUrl(src);\n if (safeSrc) {\n images.push({\n src: safeSrc,\n alt: decodeBasicEntities(alt),\n ...(title ? { title: decodeBasicEntities(title) } : {}),\n index: images.length,\n });\n }\n return '';\n },\n );\n return images;\n }\n\n const images: ContentBodyImage[] = [];\n const bodyWithoutFigures = body.replace(\n /<figure\\b([^>]*)>([\\s\\S]*?)<\\/figure>/gi,\n (_match, figureAttrs: string, figureContent: string) => {\n const imageMatch = /<img\\b([^>]*)>/i.exec(figureContent);\n if (!imageMatch) {\n return '';\n }\n\n const parsedFigure = parseHtmlAttributes(figureAttrs);\n const parsedImage = parseHtmlAttributes(imageMatch[1] || '');\n const src = sanitizeUrl(parsedImage.src || '');\n if (src) {\n const placement = normalizeImagePlacement(\n parsedFigure['data-smrt-placement'] ||\n parsedImage['data-smrt-placement'],\n );\n const width =\n parseImageWidth(\n parsedFigure['data-smrt-width'] || parsedImage['data-smrt-width'],\n ) ||\n parseStyleWidth(parsedFigure.style) ||\n parseStyleWidth(parsedImage.style);\n images.push({\n src,\n alt: parsedImage.alt || '',\n ...(parsedImage.title ? { title: parsedImage.title } : {}),\n ...(parsedImage['data-smrt-asset-id']\n ? { assetId: parsedImage['data-smrt-asset-id'] }\n : {}),\n ...(placement ? { placement } : {}),\n ...(width ? { width } : {}),\n index: images.length,\n });\n }\n\n return '';\n },\n );\n\n bodyWithoutFigures.replace(/<img\\b([^>]*)>/gi, (_match, attrs: string) => {\n const parsed = parseHtmlAttributes(attrs);\n const src = sanitizeUrl(parsed.src || '');\n if (src) {\n const placement = normalizeImagePlacement(parsed['data-smrt-placement']);\n const width =\n parseImageWidth(parsed['data-smrt-width']) ||\n parseStyleWidth(parsed.style);\n images.push({\n src,\n alt: parsed.alt || '',\n ...(parsed.title ? { title: parsed.title } : {}),\n ...(parsed['data-smrt-asset-id']\n ? { assetId: parsed['data-smrt-asset-id'] }\n : {}),\n ...(placement ? { placement } : {}),\n ...(width ? { width } : {}),\n index: images.length,\n });\n }\n return '';\n });\n\n return images;\n}\n\n/**\n * Structural view of the asset-like inputs accepted by the image helpers.\n * Callers pass assorted asset shapes (Asset models, plain DTOs, etc.); only\n * these optional fields are read.\n */\nexport interface ImageAssetLike {\n id?: unknown;\n sourceUri?: unknown;\n url?: unknown;\n src?: unknown;\n alt?: unknown;\n name?: unknown;\n title?: unknown;\n width?: unknown;\n}\n\nexport function getImageSource(asset: ImageAssetLike | null | undefined): string {\n return String(asset?.sourceUri || asset?.url || asset?.src || '');\n}\n\nexport function getImageAlt(asset: ImageAssetLike | null | undefined): string {\n return String(asset?.alt || asset?.name || asset?.title || 'Image');\n}\n\nexport function imageAssetToHtml(\n asset: ImageAssetLike | null | undefined,\n): string {\n const src = sanitizeUrl(getImageSource(asset));\n if (!src) {\n return '';\n }\n\n const assetId = asset?.id\n ? ` data-smrt-asset-id=\"${escapeAttribute(String(asset.id))}\"`\n : '';\n const width = Math.max(\n 160,\n Math.min(520, Math.round(Number(asset?.width) || 520)),\n );\n\n return `<img src=\"${escapeAttribute(src)}\" alt=\"${escapeAttribute(getImageAlt(asset))}\"${assetId} data-smrt-inline-image=\"true\" data-smrt-placement=\"block\" data-smrt-width=\"${width}\" style=\"width: ${width}px; max-width: 100%; height: auto\">`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"body-format.js","names":["images"],"sources":["../src/body-format.ts"],"sourcesContent":["export type ContentBodyFormat = 'markdown' | 'html';\nexport type ContentBodyImagePlacement =\n | 'block'\n | 'left'\n | 'right'\n | 'center'\n | 'full';\n\nexport interface ContentBodyImage {\n src: string;\n alt: string;\n title?: string;\n assetId?: string;\n placement?: ContentBodyImagePlacement;\n width?: number;\n index: number;\n}\n\nexport const DEFAULT_CONTENT_BODY_FORMAT: ContentBodyFormat = 'html';\n\nconst HTML_TAG_PATTERN =\n /<\\/?(?:article|aside|blockquote|br|div|figure|figcaption|h[1-6]|hr|img|li|ol|p|pre|section|span|strong|em|b|i|u|a|ul|table|tbody|td|th|thead|tr)(?:\\s[^>]*)?>/i;\n// HTML attribute boundary: the HTML5 tree builder starts a new attribute after\n// whitespace, `/`, OR the closing quote/backtick of the previous value. A naive\n// `\\s+`-only boundary lets `src=\"x\"onerror=\"...\"` survive sanitization because\n// `onerror` is glued to the preceding `\"` — the browser still parses it as a\n// separate (executing) attribute. Match either runs of whitespace/`/`\n// (captured in group 1 and consumed) OR a non-consuming lookbehind for a\n// quote/backtick (group 1 undefined; the char is the previous value's own\n// closing delimiter and must stay). `reemitSeparator()` turns the captured\n// group back into a single separating space when one was consumed (S5 #1388).\nconst ATTR_BOUNDARY = '(?:([\\\\s/]+)|(?<=[\"\\'`]))';\n\n// Re-emit an attribute separator after a removed/rewritten attribute. When the\n// boundary consumed whitespace/`/` (group 1 present), emit one space so the\n// rebuilt attribute doesn't glue onto the tag name or previous attribute. When\n// the boundary was a non-consumed quote/backtick (group 1 undefined), that\n// delimiter already separates the attributes, so emit nothing.\nfunction reemitSeparator(consumed: string | undefined): string {\n return consumed ? ' ' : '';\n}\n\nconst URL_ATTRIBUTE_PATTERN = new RegExp(\n `${ATTR_BOUNDARY}(href|src|xlink:href|formaction|action|poster)\\\\s*=\\\\s*(\"([^\"]*)\"|'([^']*)'|([^\\\\s>]+))`,\n 'gi',\n);\nconst SRCSET_ATTRIBUTE_PATTERN = new RegExp(\n `${ATTR_BOUNDARY}srcset\\\\s*=\\\\s*(\"([^\"]*)\"|'([^']*)'|([^\\\\s>]+))`,\n 'gi',\n);\n\nconst BLOCK_TAGS = [\n 'address',\n 'article',\n 'aside',\n 'blockquote',\n 'div',\n 'dl',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hr',\n 'li',\n 'main',\n 'nav',\n 'ol',\n 'p',\n 'pre',\n 'section',\n 'table',\n 'tbody',\n 'td',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n];\n\nexport function isContentBodyFormat(\n value: unknown,\n): value is ContentBodyFormat {\n return value === 'markdown' || value === 'html';\n}\n\nexport function looksLikeHtml(value: unknown): boolean {\n return typeof value === 'string' && HTML_TAG_PATTERN.test(value);\n}\n\nexport function resolveBodyFormat(\n format: unknown,\n body: unknown = '',\n): ContentBodyFormat {\n if (isContentBodyFormat(format)) {\n return format;\n }\n\n if (typeof format === 'string' && isContentBodyFormat(format.toLowerCase())) {\n return format.toLowerCase() as ContentBodyFormat;\n }\n\n if (looksLikeHtml(body)) {\n return 'html';\n }\n\n return body ? 'markdown' : DEFAULT_CONTENT_BODY_FORMAT;\n}\n\nexport function escapeHtml(value: string): string {\n return value.replace(/[&<>\"']/g, (char) => {\n switch (char) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case \"'\":\n return '&#39;';\n default:\n return char;\n }\n });\n}\n\nexport function escapeAttribute(value: string): string {\n return escapeHtml(value).replace(/`/g, '&#96;');\n}\n\nfunction decodeBasicEntities(value: string): string {\n const decodeCodePoint = (codePoint: number) =>\n Number.isFinite(codePoint) && codePoint >= 0 && codePoint <= 0x10ffff\n ? String.fromCodePoint(codePoint)\n : '';\n\n return value\n .replace(/&#x([0-9a-f]+);?/gi, (_match, hex: string) => {\n const codePoint = Number.parseInt(hex, 16);\n return decodeCodePoint(codePoint);\n })\n .replace(/&#(\\d+);?/g, (_match, decimal: string) => {\n const codePoint = Number.parseInt(decimal, 10);\n return decodeCodePoint(codePoint);\n })\n .replace(/&nbsp;/gi, ' ')\n .replace(/&quot;/gi, '\"')\n .replace(/&#39;/gi, \"'\")\n .replace(/&apos;/gi, \"'\")\n .replace(/&lt;/gi, '<')\n .replace(/&gt;/gi, '>')\n .replace(/&amp;/gi, '&');\n}\n\nfunction sanitizeUrl(value: string): string {\n const trimmed = decodeBasicEntities(value).trim();\n if (!trimmed) {\n return '';\n }\n\n let compactScheme = '';\n for (const char of trimmed) {\n const code = char.charCodeAt(0);\n if (code <= 31 || code === 127 || char.trim() === '') {\n continue;\n }\n compactScheme += char.toLowerCase();\n }\n\n if (/^(?:javascript|vbscript):/.test(compactScheme)) {\n return '#';\n }\n\n if (\n compactScheme.startsWith('data:') &&\n !/^data:image\\/(?:png|gif|jpe?g|webp);/.test(compactScheme)\n ) {\n return '#';\n }\n\n return trimmed;\n}\n\nfunction sanitizeSrcset(value: string): string {\n return decodeBasicEntities(value)\n .split(',')\n .map((candidate) => {\n const parts = candidate.trim().split(/\\s+/);\n const url = sanitizeUrl(parts.shift() || '');\n if (!url || url === '#') {\n return '';\n }\n\n const descriptors = parts.filter((part) =>\n /^(?:\\d+(?:\\.\\d+)?x|\\d+w)$/.test(part),\n );\n return [url, ...descriptors].join(' ');\n })\n .filter(Boolean)\n .join(', ');\n}\n\nfunction sanitizeStyle(value: string): string {\n const safeRules: string[] = [];\n\n for (const rawRule of decodeBasicEntities(value).split(';')) {\n const [rawName, ...rawValueParts] = rawRule.split(':');\n const name = rawName?.trim().toLowerCase();\n const ruleValue = rawValueParts.join(':').trim().toLowerCase();\n\n if (!name || !ruleValue) {\n continue;\n }\n\n if (\n (name === 'width' || name === 'max-width') &&\n /^(?:\\d{1,4}(?:\\.\\d+)?px|100%)$/.test(ruleValue)\n ) {\n safeRules.push(`${name}: ${ruleValue}`);\n continue;\n }\n\n if (name === 'height' && ruleValue === 'auto') {\n safeRules.push('height: auto');\n }\n }\n\n return safeRules.join('; ');\n}\n\nexport function sanitizeHtml(value: string): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n let html = value;\n html = html.replace(/<!--[\\s\\S]*?-->/g, '');\n // This lightweight sanitizer intentionally removes SVG/MathML instead of\n // attempting namespace-aware SVG/MathML sanitization. Consumers needing rich\n // inline diagrams should run a dedicated sanitizer before storing content.\n html = html.replace(\n /<\\s*(script|style|iframe|object|embed|link|meta|base|svg|math)\\b[^>]*>[\\s\\S]*?<\\s*\\/\\s*\\1\\s*>/gi,\n '',\n );\n html = html.replace(\n /<\\s*(script|style|iframe|object|embed|link|meta|base|svg|math)\\b[^>]*\\/?>/gi,\n '',\n );\n // Drop event handlers (`onclick`, etc.) and internal editor markers entirely.\n // A consumed whitespace/`/` separator and a non-consumed quote boundary both\n // collapse to nothing: the attribute that follows (if any) keeps its own\n // leading boundary, so removal never needs to leave a separator behind.\n html = html.replace(\n new RegExp(\n `${ATTR_BOUNDARY}on[a-z]+\\\\s*=\\\\s*(?:\"[^\"]*\"|'[^']*'|[^\\\\s>]*)`,\n 'gi',\n ),\n '',\n );\n html = html.replace(\n new RegExp(\n `${ATTR_BOUNDARY}data-smrt-(?:selected|moving|resizing)\\\\s*=\\\\s*(?:\"[^\"]*\"|'[^']*'|[^\\\\s>]*)`,\n 'gi',\n ),\n '',\n );\n html = html.replace(\n new RegExp(\n `${ATTR_BOUNDARY}style\\\\s*=\\\\s*(\"([^\"]*)\"|'([^']*)'|([^\\\\s>]+))`,\n 'gi',\n ),\n (\n _match,\n separator: string | undefined,\n _raw: string,\n doubleValue = '',\n singleValue = '',\n bareValue = '',\n ) => {\n const safeStyle = sanitizeStyle(doubleValue || singleValue || bareValue);\n const sep = reemitSeparator(separator);\n return safeStyle ? `${sep}style=\"${escapeAttribute(safeStyle)}\"` : sep;\n },\n );\n html = html.replace(\n SRCSET_ATTRIBUTE_PATTERN,\n (\n _match,\n separator: string | undefined,\n _raw: string,\n doubleValue = '',\n singleValue = '',\n bareValue = '',\n ) => {\n const safeSrcset = sanitizeSrcset(\n doubleValue || singleValue || bareValue,\n );\n const sep = reemitSeparator(separator);\n return safeSrcset ? `${sep}srcset=\"${escapeAttribute(safeSrcset)}\"` : sep;\n },\n );\n html = html.replace(\n URL_ATTRIBUTE_PATTERN,\n (\n _match,\n separator: string | undefined,\n name: string,\n _raw: string,\n doubleValue = '',\n singleValue = '',\n bareValue = '',\n ) => {\n const quote = doubleValue ? '\"' : singleValue ? \"'\" : '\"';\n const rawValue = doubleValue || singleValue || bareValue;\n return `${reemitSeparator(separator)}${name}=${quote}${escapeAttribute(sanitizeUrl(rawValue))}${quote}`;\n },\n );\n\n return html.trim();\n}\n\nfunction renderInlineMarkdown(value: string): string {\n let html = value;\n\n html = html.replace(\n /!\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+\"([^\"]*)\")?\\)/g,\n (_match, alt: string, src: string, title = '') => {\n const safeSrc = sanitizeUrl(src);\n const safeAlt = escapeAttribute(decodeBasicEntities(alt));\n const titleAttr = title\n ? ` title=\"${escapeAttribute(decodeBasicEntities(title))}\"`\n : '';\n return `<img src=\"${escapeAttribute(safeSrc)}\" alt=\"${safeAlt}\"${titleAttr}>`;\n },\n );\n html = html.replace(\n /\\[([^\\]]+)\\]\\(([^)\\s]+)(?:\\s+\"([^\"]*)\")?\\)/g,\n (_match, label: string, href: string, title = '') => {\n const titleAttr = title\n ? ` title=\"${escapeAttribute(decodeBasicEntities(title))}\"`\n : '';\n return `<a href=\"${escapeAttribute(sanitizeUrl(href))}\"${titleAttr}>${label}</a>`;\n },\n );\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\n html = html.replace(/\\*\\*([^*]+)\\*\\*/g, '<strong>$1</strong>');\n html = html.replace(/\\*([^*]+)\\*/g, '<em>$1</em>');\n\n return html;\n}\n\nexport function renderMarkdownToHtml(markdown: string): string {\n if (!markdown || typeof markdown !== 'string') {\n return '';\n }\n\n const lines = escapeHtml(markdown).split('\\n');\n const result: string[] = [];\n let inList = false;\n let inParagraph = false;\n\n function closeParagraph() {\n if (inParagraph) {\n result.push('</p>');\n inParagraph = false;\n }\n }\n\n function closeList() {\n if (inList) {\n result.push('</ul>');\n inList = false;\n }\n }\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n if (!trimmed) {\n closeList();\n closeParagraph();\n continue;\n }\n\n const headingMatch = /^(#{1,3})\\s+(.+)$/.exec(trimmed);\n if (headingMatch) {\n closeList();\n closeParagraph();\n const level = headingMatch[1].length;\n result.push(\n `<h${level}>${renderInlineMarkdown(headingMatch[2])}</h${level}>`,\n );\n continue;\n }\n\n const listMatch = /^[-*]\\s+(.+)$/.exec(trimmed);\n if (listMatch) {\n closeParagraph();\n if (!inList) {\n result.push('<ul>');\n inList = true;\n }\n result.push(`<li>${renderInlineMarkdown(listMatch[1])}</li>`);\n continue;\n }\n\n closeList();\n if (!inParagraph) {\n result.push('<p>');\n inParagraph = true;\n } else {\n result.push('<br>');\n }\n result.push(renderInlineMarkdown(line));\n }\n\n closeList();\n closeParagraph();\n\n return sanitizeHtml(result.join('\\n'));\n}\n\nfunction parseHtmlAttributes(value: string): Record<string, string> {\n const attributes: Record<string, string> = {};\n value.replace(\n /([:\\w-]+)\\s*=\\s*(\"([^\"]*)\"|'([^']*)'|([^\\s\"'>]+))/g,\n (\n _match,\n name: string,\n _raw: string,\n doubleValue = '',\n singleValue = '',\n bareValue = '',\n ) => {\n attributes[name.toLowerCase()] = decodeBasicEntities(\n doubleValue || singleValue || bareValue || '',\n );\n return '';\n },\n );\n return attributes;\n}\n\nfunction normalizeImagePlacement(\n value: unknown,\n): ContentBodyImagePlacement | undefined {\n return value === 'block' ||\n value === 'left' ||\n value === 'right' ||\n value === 'center' ||\n value === 'full'\n ? value\n : undefined;\n}\n\nfunction parseImageWidth(value: unknown): number | undefined {\n if (typeof value !== 'string' && typeof value !== 'number') {\n return undefined;\n }\n\n const match = String(value).match(/(\\d+(?:\\.\\d+)?)/);\n if (!match) {\n return undefined;\n }\n\n const width = Math.round(Number(match[1]));\n return Number.isFinite(width) && width > 0 ? width : undefined;\n}\n\nfunction parseStyleWidth(value: unknown): number | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const match = value.match(\n /(?:^|;)\\s*(?:max-)?width\\s*:\\s*(\\d+(?:\\.\\d+)?)px/i,\n );\n if (!match) {\n return undefined;\n }\n\n return parseImageWidth(match[1]);\n}\n\nfunction fallbackHtmlToMarkdown(html: string): string {\n let markdown = sanitizeHtml(html);\n\n markdown = markdown.replace(/<img\\b([^>]*)>/gi, (_match, attrs: string) => {\n const parsed = parseHtmlAttributes(attrs);\n const src = sanitizeUrl(parsed.src || '');\n if (!src) {\n return '';\n }\n return `\\n\\n![${parsed.alt || ''}](${src})\\n\\n`;\n });\n markdown = markdown.replace(\n /<a\\b([^>]*)>([\\s\\S]*?)<\\/a>/gi,\n (_match, attrs: string, label: string) => {\n const parsed = parseHtmlAttributes(attrs);\n const href = sanitizeUrl(parsed.href || '');\n const text = stripHtml(label).trim() || href;\n return href ? `[${text}](${href})` : text;\n },\n );\n markdown = markdown.replace(/<h1\\b[^>]*>([\\s\\S]*?)<\\/h1>/gi, '\\n\\n# $1\\n\\n');\n markdown = markdown.replace(/<h2\\b[^>]*>([\\s\\S]*?)<\\/h2>/gi, '\\n\\n## $1\\n\\n');\n markdown = markdown.replace(\n /<h3\\b[^>]*>([\\s\\S]*?)<\\/h3>/gi,\n '\\n\\n### $1\\n\\n',\n );\n markdown = markdown.replace(/<li\\b[^>]*>([\\s\\S]*?)<\\/li>/gi, '\\n- $1');\n markdown = markdown.replace(/<\\/(?:p|div|section|article|ul|ol)>/gi, '\\n\\n');\n markdown = markdown.replace(/<br\\s*\\/?>/gi, '\\n');\n markdown = markdown.replace(\n /<(strong|b)\\b[^>]*>([\\s\\S]*?)<\\/\\1>/gi,\n '**$2**',\n );\n markdown = markdown.replace(/<(em|i)\\b[^>]*>([\\s\\S]*?)<\\/\\1>/gi, '*$2*');\n markdown = stripHtml(markdown);\n\n return normalizeMarkdownWhitespace(markdown);\n}\n\nexport function stripHtml(value: string): string {\n return decodeBasicEntities(value.replace(/<[^>]*>/g, ''));\n}\n\nfunction normalizeMarkdownWhitespace(value: string): string {\n return decodeBasicEntities(value)\n .replace(/\\r\\n?/g, '\\n')\n .replace(/[ \\t]+\\n/g, '\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n}\n\nconst MARKDOWN_TEXT_NODE = 3;\nconst MARKDOWN_ELEMENT_NODE = 1;\n\ninterface MarkdownDomNode {\n nodeType: number;\n textContent?: string | null;\n childNodes?: ArrayLike<MarkdownDomNode>;\n tagName?: string;\n getAttribute?: (name: string) => string | null;\n}\n\nfunction nodeToMarkdown(node: MarkdownDomNode): string {\n if (node.nodeType === MARKDOWN_TEXT_NODE) {\n return node.textContent || '';\n }\n\n if (node.nodeType !== MARKDOWN_ELEMENT_NODE) {\n return '';\n }\n\n const tag = node.tagName?.toLowerCase() || '';\n const children = Array.from(node.childNodes || [])\n .map(nodeToMarkdown)\n .join('');\n const trimmedChildren = children.trim();\n\n switch (tag) {\n case 'br':\n return '\\n';\n case 'h1':\n return `\\n\\n# ${trimmedChildren}\\n\\n`;\n case 'h2':\n return `\\n\\n## ${trimmedChildren}\\n\\n`;\n case 'h3':\n return `\\n\\n### ${trimmedChildren}\\n\\n`;\n case 'p':\n return `\\n\\n${trimmedChildren}\\n\\n`;\n case 'strong':\n case 'b':\n return `**${trimmedChildren}**`;\n case 'em':\n case 'i':\n return `*${trimmedChildren}*`;\n case 'code':\n return `\\`${trimmedChildren}\\``;\n case 'a': {\n const href = sanitizeUrl(node.getAttribute?.('href') || '');\n return href ? `[${trimmedChildren || href}](${href})` : trimmedChildren;\n }\n case 'img': {\n const src = sanitizeUrl(node.getAttribute?.('src') || '');\n if (!src) {\n return '';\n }\n const alt = node.getAttribute?.('alt') || '';\n return `\\n\\n![${alt}](${src})\\n\\n`;\n }\n case 'li':\n return `- ${trimmedChildren}\\n`;\n case 'ul':\n case 'ol':\n return `\\n${children}\\n`;\n default:\n return BLOCK_TAGS.includes(tag) ? `\\n\\n${trimmedChildren}\\n\\n` : children;\n }\n}\n\nexport function htmlToMarkdown(html: string): string {\n const sanitized = sanitizeHtml(html);\n if (!sanitized) {\n return '';\n }\n\n const Parser = (globalThis as Record<string, unknown>).DOMParser;\n if (typeof Parser !== 'function') {\n return fallbackHtmlToMarkdown(sanitized);\n }\n\n // Structural view of the DOMParser API we rely on; avoids depending on the\n // DOM lib in this environment-agnostic module.\n const parser = new (\n Parser as new () => {\n parseFromString: (\n source: string,\n mimeType: string,\n ) => { body?: { childNodes?: ArrayLike<MarkdownDomNode> } | null };\n }\n )();\n const document = parser.parseFromString(\n `<body>${sanitized}</body>`,\n 'text/html',\n );\n const markdown = Array.from(\n (document.body?.childNodes || []) as ArrayLike<MarkdownDomNode>,\n )\n .map(nodeToMarkdown)\n .join('');\n\n return normalizeMarkdownWhitespace(markdown);\n}\n\nexport function normalizeEditorHtml(html: string): string {\n const sanitized = sanitizeHtml(html);\n if (!sanitized) {\n return '';\n }\n\n return sanitized.replace(\n /<p>\\s*((?:<br\\s*\\/?>\\s*)?<img\\b[^>]*>(?:\\s*<br\\s*\\/?>)?)\\s*<\\/p>/gi,\n (_match, imageHtml: string) =>\n imageHtml.replace(/^\\s*<br\\s*\\/?>\\s*|\\s*<br\\s*\\/?>\\s*$/gi, ''),\n );\n}\n\nexport function bodyToEditorHtml(\n body: string,\n format: ContentBodyFormat,\n): string {\n return format === 'markdown'\n ? normalizeEditorHtml(renderMarkdownToHtml(body || ''))\n : normalizeEditorHtml(body || '');\n}\n\nexport function editorHtmlToBody(\n html: string,\n format: ContentBodyFormat,\n): string {\n return format === 'markdown'\n ? htmlToMarkdown(html || '')\n : normalizeEditorHtml(html || '');\n}\n\nexport function extractBodyImages(\n body: string,\n format: ContentBodyFormat = resolveBodyFormat(undefined, body),\n): ContentBodyImage[] {\n if (!body || typeof body !== 'string') {\n return [];\n }\n\n if (format === 'markdown') {\n const images: ContentBodyImage[] = [];\n body.replace(\n /!\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+\"([^\"]*)\")?\\)/g,\n (_match, alt: string, src: string, title = '') => {\n const safeSrc = sanitizeUrl(src);\n if (safeSrc) {\n images.push({\n src: safeSrc,\n alt: decodeBasicEntities(alt),\n ...(title ? { title: decodeBasicEntities(title) } : {}),\n index: images.length,\n });\n }\n return '';\n },\n );\n return images;\n }\n\n const images: ContentBodyImage[] = [];\n const bodyWithoutFigures = body.replace(\n /<figure\\b([^>]*)>([\\s\\S]*?)<\\/figure>/gi,\n (_match, figureAttrs: string, figureContent: string) => {\n const imageMatch = /<img\\b([^>]*)>/i.exec(figureContent);\n if (!imageMatch) {\n return '';\n }\n\n const parsedFigure = parseHtmlAttributes(figureAttrs);\n const parsedImage = parseHtmlAttributes(imageMatch[1] || '');\n const src = sanitizeUrl(parsedImage.src || '');\n if (src) {\n const placement = normalizeImagePlacement(\n parsedFigure['data-smrt-placement'] ||\n parsedImage['data-smrt-placement'],\n );\n const width =\n parseImageWidth(\n parsedFigure['data-smrt-width'] || parsedImage['data-smrt-width'],\n ) ||\n parseStyleWidth(parsedFigure.style) ||\n parseStyleWidth(parsedImage.style);\n images.push({\n src,\n alt: parsedImage.alt || '',\n ...(parsedImage.title ? { title: parsedImage.title } : {}),\n ...(parsedImage['data-smrt-asset-id']\n ? { assetId: parsedImage['data-smrt-asset-id'] }\n : {}),\n ...(placement ? { placement } : {}),\n ...(width ? { width } : {}),\n index: images.length,\n });\n }\n\n return '';\n },\n );\n\n bodyWithoutFigures.replace(/<img\\b([^>]*)>/gi, (_match, attrs: string) => {\n const parsed = parseHtmlAttributes(attrs);\n const src = sanitizeUrl(parsed.src || '');\n if (src) {\n const placement = normalizeImagePlacement(parsed['data-smrt-placement']);\n const width =\n parseImageWidth(parsed['data-smrt-width']) ||\n parseStyleWidth(parsed.style);\n images.push({\n src,\n alt: parsed.alt || '',\n ...(parsed.title ? { title: parsed.title } : {}),\n ...(parsed['data-smrt-asset-id']\n ? { assetId: parsed['data-smrt-asset-id'] }\n : {}),\n ...(placement ? { placement } : {}),\n ...(width ? { width } : {}),\n index: images.length,\n });\n }\n return '';\n });\n\n return images;\n}\n\n/**\n * Structural view of the asset-like inputs accepted by the image helpers.\n * Callers pass assorted asset shapes (Asset models, plain DTOs, etc.); only\n * these optional fields are read.\n */\nexport interface ImageAssetLike {\n id?: unknown;\n sourceUri?: unknown;\n url?: unknown;\n src?: unknown;\n alt?: unknown;\n name?: unknown;\n title?: unknown;\n width?: unknown;\n}\n\nexport function getImageSource(\n asset: ImageAssetLike | null | undefined,\n): string {\n return String(asset?.sourceUri || asset?.url || asset?.src || '');\n}\n\nexport function getImageAlt(asset: ImageAssetLike | null | undefined): string {\n return String(asset?.alt || asset?.name || asset?.title || 'Image');\n}\n\nexport function imageAssetToHtml(\n asset: ImageAssetLike | null | undefined,\n): string {\n const src = sanitizeUrl(getImageSource(asset));\n if (!src) {\n return '';\n }\n\n const assetId = asset?.id\n ? ` data-smrt-asset-id=\"${escapeAttribute(String(asset.id))}\"`\n : '';\n const width = Math.max(\n 160,\n Math.min(520, Math.round(Number(asset?.width) || 520)),\n );\n\n return `<img src=\"${escapeAttribute(src)}\" alt=\"${escapeAttribute(getImageAlt(asset))}\"${assetId} data-smrt-inline-image=\"true\" data-smrt-placement=\"block\" data-smrt-width=\"${width}\" style=\"width: ${width}px; max-width: 100%; height: auto\">`;\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { getCurrentTenant, isSuperAdminBypass, isSystemContext, isTenancyEnabled } from "@happyvertical/smrt-tenancy";
1
2
  //#region src/content-governance.ts
2
3
  var DEFAULT_FACT_RELATIONSHIP = "supports";
3
4
  var DEFAULT_CONTENT_GOVERNANCE_CONFIG = {
@@ -180,6 +181,13 @@ function safeParseJSONArray(value, mapEntry) {
180
181
  return [];
181
182
  }
182
183
  }
184
+ function resolveGovernanceTenantFilter(tenantId) {
185
+ if (tenantId !== void 0) return tenantId;
186
+ if (isSystemContext() || isSuperAdminBypass()) return;
187
+ const currentTenant = getCurrentTenant();
188
+ if (currentTenant?.tenantId) return currentTenant.tenantId;
189
+ return isTenancyEnabled() ? null : void 0;
190
+ }
183
191
  function mapPersistedPolicyRow(row) {
184
192
  return {
185
193
  id: typeof row.id === "string" ? row.id : void 0,
@@ -242,15 +250,20 @@ async function loadPersistedContentGovernanceDefinitions(options = {}) {
242
250
  assignments: []
243
251
  };
244
252
  try {
253
+ const tenantId = resolveGovernanceTenantFilter(options.tenantId);
254
+ const listGovernanceRows = async (tableName) => {
255
+ const byCreatedAt = (a, b) => String(a.created_at || a.createdAt || "").localeCompare(String(b.created_at || b.createdAt || ""));
256
+ const sortRows = (rows) => rows.sort(byCreatedAt);
257
+ if (tenantId === void 0) return sortRows(await db.list(tableName, {}));
258
+ if (tenantId === null) return sortRows(await db.list(tableName, { tenant_id: null }));
259
+ const [globalRows, tenantRows] = await Promise.all([db.list(tableName, { tenant_id: null }), db.list(tableName, { tenant_id: tenantId })]);
260
+ return [...sortRows(globalRows), ...sortRows(tenantRows)];
261
+ };
245
262
  const [policyRows, profileRows, assignmentRows] = await Promise.all([
246
- db.list("content_governance_policies", {}),
247
- db.list("content_governance_profiles", {}),
248
- db.list("content_governance_assignments", {})
263
+ listGovernanceRows("content_governance_policies"),
264
+ listGovernanceRows("content_governance_profiles"),
265
+ listGovernanceRows("content_governance_assignments")
249
266
  ]);
250
- const byCreatedAt = (a, b) => String(a.created_at || a.createdAt || "").localeCompare(String(b.created_at || b.createdAt || ""));
251
- policyRows.sort(byCreatedAt);
252
- profileRows.sort(byCreatedAt);
253
- assignmentRows.sort(byCreatedAt);
254
267
  return {
255
268
  policies: policyRows.map((row) => mapPersistedPolicyRow(row)),
256
269
  profiles: profileRows.map((row) => mapPersistedProfileRow(row)),
@@ -274,7 +287,7 @@ function resolveAssignmentDefinition(assignments, options) {
274
287
  }
275
288
  function buildResolvedGovernance(config, assignment) {
276
289
  const normalizedAssignment = assignment ? normalizeAssignmentDefinition(assignment) : null;
277
- if (!normalizedAssignment || normalizedAssignment.enabled !== true) return {
290
+ if (normalizedAssignment?.enabled !== true) return {
278
291
  isGoverned: false,
279
292
  factLinkingEnabled: false,
280
293
  transparencyEnabled: false,
@@ -339,7 +352,10 @@ function resetContentGovernanceConfig() {
339
352
  return getContentGovernanceConfig();
340
353
  }
341
354
  async function getEffectiveContentGovernanceConfig(options = {}) {
342
- const persisted = await loadPersistedContentGovernanceDefinitions({ db: options.db });
355
+ const persisted = await loadPersistedContentGovernanceDefinitions({
356
+ db: options.db,
357
+ tenantId: options.tenantId
358
+ });
343
359
  return {
344
360
  policies: mergeByKey(governanceConfig.policies, persisted.policies, normalizePolicyDefinition),
345
361
  profiles: mergeByKey(governanceConfig.profiles, persisted.profiles, normalizeProfileDefinition),
@@ -381,7 +397,10 @@ function resolveConfiguredContentGovernance(options) {
381
397
  return buildResolvedGovernance(governanceConfig, assignment);
382
398
  }
383
399
  async function resolveEffectiveContentGovernance(options) {
384
- const effectiveConfig = await getEffectiveContentGovernanceConfig({ db: options.db });
400
+ const effectiveConfig = await getEffectiveContentGovernanceConfig({
401
+ db: options.db,
402
+ tenantId: options.tenantId
403
+ });
385
404
  return buildResolvedGovernance(effectiveConfig, resolveAssignmentDefinition(effectiveConfig.assignments, {
386
405
  contentType: options.contentType,
387
406
  contentVariant: options.contentVariant
@@ -584,4 +603,4 @@ function normalizeContentTransparency(value, defaults = {}) {
584
603
  //#endregion
585
604
  export { loadPersistedContentGovernanceDefinitions as _, getAcceptedContentReviewStatuses as a, resolveConfiguredContentGovernance as b, getContentReviewPolicies as c, getContentReviewProfileKeys as d, getContentReviewRequirements as f, hasStaticContentGovernanceProfile as g, hasStaticContentGovernancePolicy as h, configureContentGovernance as i, getContentReviewPolicy as l, getFallbackPolicyKind as m, buildContentGovernanceAssignmentKey as n, getContentGovernanceConfig as o, getEffectiveContentGovernanceConfig as p, buildContentReviewPrompt as r, getContentReviewKind as s, normalizeContentTransparency as t, getContentReviewProfile as u, parseContentReviewResponse as v, resolveEffectiveContentGovernance as x, resetContentGovernanceConfig as y };
586
605
 
587
- //# sourceMappingURL=content-transparency-OvUNs-bU.js.map
606
+ //# sourceMappingURL=content-transparency-Bh6axaZj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-transparency-Bh6axaZj.js","names":[],"sources":["../../src/content-governance.ts","../../src/content-transparency.ts"],"sourcesContent":["import type { Fact, FactContentRelationship } from '@happyvertical/smrt-facts';\nimport {\n getCurrentTenant,\n isSuperAdminBypass,\n isSystemContext,\n isTenancyEnabled,\n} from '@happyvertical/smrt-tenancy';\nimport type { DatabaseInterface } from '@happyvertical/sql';\nimport type { Content } from './content';\n\nexport type ContentReviewKind = 'facts' | 'safety' | 'custom';\n\nexport type ContentReviewStatus =\n | 'pending'\n | 'passed'\n | 'flagged'\n | 'failed'\n | 'waived';\n\nexport type ContentReviewSeverity = 'info' | 'warning' | 'error';\n\nexport type ContentVersionKind =\n | 'manual'\n | 'draft'\n | 'review'\n | 'publication'\n | 'correction';\n\nexport type ContentCorrectionType = 'fact' | 'safety' | 'copy' | 'custom';\n\nexport type ContentCorrectionStatus = 'draft' | 'published' | 'retracted';\n\nexport interface ContentReviewFinding {\n severity: ContentReviewSeverity;\n title: string;\n detail: string;\n factId?: string;\n quote?: string;\n suggestedChange?: string;\n ruleId?: string;\n}\n\nexport interface ContentReviewResult {\n status: ContentReviewStatus;\n summary: string;\n findings: ContentReviewFinding[];\n}\n\nexport interface ContentReviewRequirement {\n policyKey: string;\n label?: string;\n blocking?: boolean;\n acceptedStatuses?: ContentReviewStatus[];\n}\n\nexport interface ContentReviewProfileEvaluationItem {\n kind: ContentReviewKind;\n policyKey: string;\n label: string;\n blocking: boolean;\n acceptedStatuses: ContentReviewStatus[];\n missing: boolean;\n stale: boolean;\n executed: boolean;\n satisfied: boolean;\n latestReviewId: string | null;\n latestStatus: ContentReviewStatus | null;\n latestSummary: string | null;\n}\n\nexport interface ContentReviewProfileEvaluation {\n profileKey: string;\n ready: boolean;\n complete: boolean;\n requirements: ContentReviewProfileEvaluationItem[];\n}\n\nexport interface ContentReviewPolicyDefinition {\n key: string;\n label: string;\n kind: ContentReviewKind;\n instructions: string;\n enabled?: boolean;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ContentGovernanceProfileDefinition {\n key: string;\n label: string;\n description?: string;\n enabled?: boolean;\n requirements: ContentReviewRequirement[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ContentGovernanceAssignmentDefinition {\n key?: string;\n label?: string;\n contentType: string;\n contentVariant?: string | null;\n enabled?: boolean;\n factLinkingEnabled?: boolean;\n transparencyEnabled?: boolean;\n publicationProfileKey?: string | null;\n correctionProfileKey?: string | null;\n enforcePublishReadiness?: boolean;\n defaultFactRelationship?: FactContentRelationship;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ContentGovernanceConfig {\n policies: ContentReviewPolicyDefinition[];\n profiles: ContentGovernanceProfileDefinition[];\n assignments: ContentGovernanceAssignmentDefinition[];\n}\n\nexport interface PersistedContentGovernancePolicyRecord\n extends ContentReviewPolicyDefinition {\n id?: string;\n tenantId?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n}\n\nexport interface PersistedContentGovernanceProfileRecord\n extends ContentGovernanceProfileDefinition {\n id?: string;\n tenantId?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n}\n\nexport interface PersistedContentGovernanceAssignmentRecord\n extends ContentGovernanceAssignmentDefinition {\n id?: string;\n tenantId?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n}\n\nexport interface PersistedContentGovernanceDefinitions {\n policies: PersistedContentGovernancePolicyRecord[];\n profiles: PersistedContentGovernanceProfileRecord[];\n assignments: PersistedContentGovernanceAssignmentRecord[];\n}\n\nexport interface ResolvedContentGovernance {\n isGoverned: boolean;\n factLinkingEnabled: boolean;\n transparencyEnabled: boolean;\n publicationProfileKey: string | null;\n correctionProfileKey: string | null;\n enforcePublishReadiness: boolean;\n defaultFactRelationship: FactContentRelationship;\n reviewPolicies: ContentReviewPolicyDefinition[];\n availableProfiles: ContentGovernanceProfileDefinition[];\n assignment: ContentGovernanceAssignmentDefinition | null;\n}\n\nexport interface ContentGovernanceState extends ResolvedContentGovernance {\n reviewProfiles: ContentReviewProfileEvaluation[];\n}\n\nexport interface CreateContentVersionOptions {\n kind?: ContentVersionKind;\n summary?: string;\n metadata?: Record<string, unknown>;\n snapshot?: Record<string, unknown>;\n}\n\nexport interface RunContentReviewOptions {\n kind?: ContentReviewKind;\n policyKey?: string;\n reviewer?: string;\n instructions?: string;\n facts?: Fact[];\n factIds?: string[];\n metadata?: Record<string, unknown>;\n createVersion?: boolean;\n}\n\nexport interface IssueContentCorrectionOptions {\n correctionType?: ContentCorrectionType;\n factId?: string;\n correctedFactText?: string;\n summary: string;\n incorrectText?: string;\n correctedText?: string;\n publicNote?: string;\n metadata?: Record<string, unknown>;\n createVersion?: boolean;\n publish?: boolean;\n}\n\nexport interface BuildContentReviewPromptOptions {\n kind: ContentReviewKind;\n content: Pick<\n Content,\n | 'id'\n | 'type'\n | 'status'\n | 'state'\n | 'title'\n | 'description'\n | 'body'\n | 'author'\n | 'publish_date'\n >;\n facts?: Fact[];\n policy?: ContentReviewPolicyDefinition | null;\n customInstructions?: string;\n}\n\nexport interface ResolveContentGovernanceOptions {\n contentType?: string | null;\n contentVariant?: string | null;\n db?: DatabaseInterface | null;\n tenantId?: string | null;\n}\n\nconst DEFAULT_FACT_RELATIONSHIP: FactContentRelationship = 'supports';\n\nconst DEFAULT_REVIEW_POLICIES: ContentReviewPolicyDefinition[] = [\n {\n key: 'facts',\n label: 'Facts Review',\n kind: 'facts',\n instructions: [\n 'Compare the draft copy against the supplied facts only.',\n 'Flag contradictions, unsupported claims, stale claims, and places where the copy should cite or qualify a statement.',\n 'Do not invent missing facts. If the draft makes a claim that is not supported by the provided facts, flag it clearly.',\n ].join(' '),\n enabled: true,\n },\n {\n key: 'safety',\n label: 'Safety Review',\n kind: 'safety',\n instructions: [\n 'Review the content for legal, reputational, and user-safety risks.',\n 'At minimum, check for defamation risk, privacy leaks, unverified allegations, unsafe instructions, and medical, legal, or financial claims that need qualification.',\n 'Flag content that should be softened, attributed, removed, or escalated for human review.',\n ].join(' '),\n enabled: true,\n },\n];\n\nconst DEFAULT_REVIEW_PROFILES: ContentGovernanceProfileDefinition[] = [\n {\n key: 'publication',\n label: 'Publication',\n description: 'Default publication-time editorial checks.',\n enabled: true,\n requirements: [\n {\n policyKey: 'safety',\n label: 'Safety Review',\n blocking: false,\n },\n {\n policyKey: 'facts',\n label: 'Facts Review',\n blocking: false,\n },\n ],\n },\n {\n key: 'correction',\n label: 'Correction',\n description: 'Default correction-time editorial checks.',\n enabled: true,\n requirements: [\n {\n policyKey: 'safety',\n label: 'Safety Review',\n blocking: false,\n },\n ],\n },\n];\n\nconst DEFAULT_CONTENT_GOVERNANCE_CONFIG: ContentGovernanceConfig = {\n policies: DEFAULT_REVIEW_POLICIES.map(clonePolicyDefinition),\n profiles: DEFAULT_REVIEW_PROFILES.map(cloneProfileDefinition),\n assignments: [],\n};\n\nlet governanceConfig: ContentGovernanceConfig = cloneGovernanceConfig(\n DEFAULT_CONTENT_GOVERNANCE_CONFIG,\n);\n// Process-global by design: apps are expected to configure governance once at\n// startup and use persisted records for runtime admin overrides.\n\nfunction cloneReviewRequirement(\n requirement: ContentReviewRequirement,\n): ContentReviewRequirement {\n return {\n ...requirement,\n acceptedStatuses: requirement.acceptedStatuses\n ? [...requirement.acceptedStatuses]\n : undefined,\n };\n}\n\nfunction normalizePolicyDefinition(\n policy: ContentReviewPolicyDefinition,\n): ContentReviewPolicyDefinition {\n return {\n key: policy.key,\n label: policy.label || policy.key,\n kind: policy.kind || getFallbackPolicyKind(policy.key),\n instructions: policy.instructions || '',\n enabled: policy.enabled !== false,\n metadata: policy.metadata ? { ...policy.metadata } : undefined,\n };\n}\n\nfunction clonePolicyDefinition(\n policy: ContentReviewPolicyDefinition,\n): ContentReviewPolicyDefinition {\n return normalizePolicyDefinition(policy);\n}\n\nfunction normalizeProfileDefinition(\n profile: ContentGovernanceProfileDefinition,\n): ContentGovernanceProfileDefinition {\n return {\n key: profile.key,\n label: profile.label || profile.key,\n description: profile.description || '',\n enabled: profile.enabled !== false,\n requirements: Array.isArray(profile.requirements)\n ? profile.requirements.map(cloneReviewRequirement)\n : [],\n metadata: profile.metadata ? { ...profile.metadata } : undefined,\n };\n}\n\nfunction cloneProfileDefinition(\n profile: ContentGovernanceProfileDefinition,\n): ContentGovernanceProfileDefinition {\n return normalizeProfileDefinition(profile);\n}\n\nexport function buildContentGovernanceAssignmentKey(\n contentType: string,\n contentVariant?: string | null,\n): string {\n return `${contentType || ''}::${contentVariant || ''}`;\n}\n\nfunction normalizeAssignmentDefinition(\n assignment: ContentGovernanceAssignmentDefinition,\n): ContentGovernanceAssignmentDefinition {\n return {\n key:\n assignment.key ||\n buildContentGovernanceAssignmentKey(\n assignment.contentType,\n assignment.contentVariant,\n ),\n label: assignment.label || '',\n contentType: assignment.contentType,\n contentVariant: assignment.contentVariant || '',\n enabled: assignment.enabled !== false,\n factLinkingEnabled: assignment.factLinkingEnabled === true,\n transparencyEnabled: assignment.transparencyEnabled === true,\n publicationProfileKey: assignment.publicationProfileKey || null,\n correctionProfileKey: assignment.correctionProfileKey || null,\n enforcePublishReadiness: assignment.enforcePublishReadiness === true,\n defaultFactRelationship:\n assignment.defaultFactRelationship || DEFAULT_FACT_RELATIONSHIP,\n metadata: assignment.metadata ? { ...assignment.metadata } : undefined,\n };\n}\n\nfunction cloneAssignmentDefinition(\n assignment: ContentGovernanceAssignmentDefinition,\n): ContentGovernanceAssignmentDefinition {\n return normalizeAssignmentDefinition(assignment);\n}\n\nfunction cloneGovernanceConfig(\n config: ContentGovernanceConfig,\n): ContentGovernanceConfig {\n return {\n policies: config.policies.map(clonePolicyDefinition),\n profiles: config.profiles.map(cloneProfileDefinition),\n assignments: config.assignments.map(cloneAssignmentDefinition),\n };\n}\n\nfunction mergeByKey<T extends { key?: string }>(\n previous: T[],\n next: T[],\n normalize: (value: T) => T,\n): T[] {\n const merged = new Map<string, T>();\n\n for (const value of previous) {\n const normalized = normalize(value);\n if (normalized.key) {\n merged.set(normalized.key, normalized);\n }\n }\n\n for (const value of next) {\n const normalized = normalize(value);\n if (normalized.key) {\n merged.set(normalized.key, normalized);\n }\n }\n\n return [...merged.values()];\n}\n\nexport function getFallbackPolicyKind(key: string): ContentReviewKind {\n if (key === 'facts') {\n return 'facts';\n }\n\n if (key === 'safety') {\n return 'safety';\n }\n\n return 'custom';\n}\n\nfunction getPolicyMap(\n policies: ContentReviewPolicyDefinition[],\n): Map<string, ContentReviewPolicyDefinition> {\n return new Map(\n policies.map((policy) => {\n const normalized = normalizePolicyDefinition(policy);\n return [normalized.key, normalized];\n }),\n );\n}\n\nfunction getProfileMap(\n profiles: ContentGovernanceProfileDefinition[],\n): Map<string, ContentGovernanceProfileDefinition> {\n return new Map(\n profiles.map((profile) => {\n const normalized = normalizeProfileDefinition(profile);\n return [normalized.key, normalized];\n }),\n );\n}\n\nfunction isMissingGovernanceTableError(error: unknown): boolean {\n const message =\n error instanceof Error ? error.message : String(error || 'Unknown error');\n\n return (\n message.includes(\"Run 'smrt db:migrate'\") ||\n /no such table/i.test(message) ||\n /does not exist/i.test(message)\n );\n}\n\nfunction getRowTimestamp(\n row: Record<string, unknown>,\n primaryKey: 'createdAt' | 'updatedAt',\n): string | null {\n const snakeCaseKey = primaryKey === 'createdAt' ? 'created_at' : 'updated_at';\n const value = row[primaryKey] ?? row[snakeCaseKey];\n return typeof value === 'string' && value.length > 0 ? value : null;\n}\n\nfunction getRowTenantId(row: Record<string, unknown>): string | null {\n const value = row.tenantId ?? row.tenant_id ?? null;\n return typeof value === 'string' && value.length > 0 ? value : null;\n}\n\nfunction getRowString(\n row: Record<string, unknown>,\n ...keys: string[]\n): string | null {\n for (const key of keys) {\n const value = row[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n return null;\n}\n\nfunction safeParseJSONObject(value: unknown): Record<string, unknown> {\n if (!value) {\n return {};\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n return { ...(value as Record<string, unknown>) };\n }\n\n try {\n const parsed = JSON.parse(String(value));\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? { ...(parsed as Record<string, unknown>) }\n : {};\n } catch {\n return {};\n }\n}\n\nfunction safeParseJSONArray<T>(value: unknown, mapEntry: (entry: T) => T): T[] {\n if (!value) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => mapEntry(entry as T));\n }\n\n try {\n const parsed = JSON.parse(String(value));\n return Array.isArray(parsed)\n ? parsed.map((entry) => mapEntry(entry as T))\n : [];\n } catch {\n return [];\n }\n}\n\nfunction resolveGovernanceTenantFilter(\n tenantId: string | null | undefined,\n): string | null | undefined {\n if (tenantId !== undefined) {\n return tenantId;\n }\n\n if (isSystemContext() || isSuperAdminBypass()) {\n return undefined;\n }\n\n const currentTenant = getCurrentTenant();\n if (currentTenant?.tenantId) {\n return currentTenant.tenantId;\n }\n\n return isTenancyEnabled() ? null : undefined;\n}\n\nfunction mapPersistedPolicyRow(\n row: Record<string, unknown>,\n): PersistedContentGovernancePolicyRecord {\n return {\n id: typeof row.id === 'string' ? row.id : undefined,\n tenantId: getRowTenantId(row),\n createdAt: getRowTimestamp(row, 'createdAt'),\n updatedAt: getRowTimestamp(row, 'updatedAt'),\n ...normalizePolicyDefinition({\n key: String(row.key || ''),\n label: String(row.label || row.key || ''),\n kind: (row.kind ||\n getFallbackPolicyKind(String(row.key || ''))) as ContentReviewKind,\n instructions: String(row.instructions || ''),\n enabled: row.enabled !== false && row.enabled !== 0,\n metadata: safeParseJSONObject(row.metadata),\n }),\n };\n}\n\nfunction mapPersistedProfileRow(\n row: Record<string, unknown>,\n): PersistedContentGovernanceProfileRecord {\n return {\n id: typeof row.id === 'string' ? row.id : undefined,\n tenantId: getRowTenantId(row),\n createdAt: getRowTimestamp(row, 'createdAt'),\n updatedAt: getRowTimestamp(row, 'updatedAt'),\n ...normalizeProfileDefinition({\n key: String(row.key || ''),\n label: String(row.label || row.key || ''),\n description: String(row.description || ''),\n enabled: row.enabled !== false && row.enabled !== 0,\n requirements: safeParseJSONArray<ContentReviewRequirement>(\n row.requirements,\n cloneReviewRequirement,\n ),\n metadata: safeParseJSONObject(row.metadata),\n }),\n };\n}\n\nfunction mapPersistedAssignmentRow(\n row: Record<string, unknown>,\n): PersistedContentGovernanceAssignmentRecord {\n return {\n id: typeof row.id === 'string' ? row.id : undefined,\n tenantId: getRowTenantId(row),\n createdAt: getRowTimestamp(row, 'createdAt'),\n updatedAt: getRowTimestamp(row, 'updatedAt'),\n ...normalizeAssignmentDefinition({\n key: String(row.key || ''),\n label: String(row.label || ''),\n contentType: String(row.contentType || row.content_type || ''),\n contentVariant: String(row.contentVariant || row.content_variant || ''),\n enabled: row.enabled !== false && row.enabled !== 0,\n factLinkingEnabled:\n row.factLinkingEnabled === true ||\n row.fact_linking_enabled === true ||\n row.fact_linking_enabled === 1,\n transparencyEnabled:\n row.transparencyEnabled === true ||\n row.transparency_enabled === true ||\n row.transparency_enabled === 1,\n publicationProfileKey: getRowString(\n row,\n 'publicationProfileKey',\n 'publication_profile_key',\n ),\n correctionProfileKey: getRowString(\n row,\n 'correctionProfileKey',\n 'correction_profile_key',\n ),\n enforcePublishReadiness:\n row.enforcePublishReadiness === true ||\n row.enforce_publish_readiness === true ||\n row.enforce_publish_readiness === 1,\n // The relationship is stored as a string; trust the persisted value and\n // fall back to the default when absent.\n defaultFactRelationship:\n (getRowString(\n row,\n 'defaultFactRelationship',\n 'default_fact_relationship',\n ) as FactContentRelationship | null) || DEFAULT_FACT_RELATIONSHIP,\n metadata: safeParseJSONObject(row.metadata),\n }),\n };\n}\n\nexport async function loadPersistedContentGovernanceDefinitions(\n options: { db?: DatabaseInterface | null; tenantId?: string | null } = {},\n): Promise<PersistedContentGovernanceDefinitions> {\n const { db } = options;\n if (!db) {\n return {\n policies: [],\n profiles: [],\n assignments: [],\n };\n }\n\n try {\n const tenantId = resolveGovernanceTenantFilter(options.tenantId);\n const listGovernanceRows = async (tableName: string) => {\n const byCreatedAt = (\n a: Record<string, unknown>,\n b: Record<string, unknown>,\n ): number =>\n String(a.created_at || a.createdAt || '').localeCompare(\n String(b.created_at || b.createdAt || ''),\n );\n const sortRows = (rows: Record<string, unknown>[]) =>\n rows.sort(byCreatedAt);\n\n if (tenantId === undefined) {\n return sortRows(\n (await db.list(tableName, {})) as Record<string, unknown>[],\n );\n }\n\n if (tenantId === null) {\n return sortRows(\n (await db.list(tableName, {\n tenant_id: null,\n })) as Record<string, unknown>[],\n );\n }\n\n const [globalRows, tenantRows] = await Promise.all([\n db.list(tableName, { tenant_id: null }) as Promise<\n Record<string, unknown>[]\n >,\n db.list(tableName, { tenant_id: tenantId }) as Promise<\n Record<string, unknown>[]\n >,\n ]);\n\n return [...sortRows(globalRows), ...sortRows(tenantRows)];\n };\n const [policyRows, profileRows, assignmentRows] = await Promise.all([\n listGovernanceRows('content_governance_policies'),\n listGovernanceRows('content_governance_profiles'),\n listGovernanceRows('content_governance_assignments'),\n ]);\n\n return {\n policies: policyRows.map((row: Record<string, unknown>) =>\n mapPersistedPolicyRow(row),\n ),\n profiles: profileRows.map((row: Record<string, unknown>) =>\n mapPersistedProfileRow(row),\n ),\n assignments: assignmentRows.map((row: Record<string, unknown>) =>\n mapPersistedAssignmentRow(row),\n ),\n };\n } catch (error) {\n if (isMissingGovernanceTableError(error)) {\n return {\n policies: [],\n profiles: [],\n assignments: [],\n };\n }\n throw error;\n }\n}\n\nfunction resolveAssignmentDefinition(\n assignments: ContentGovernanceAssignmentDefinition[],\n options: Pick<\n ResolveContentGovernanceOptions,\n 'contentType' | 'contentVariant'\n >,\n): ContentGovernanceAssignmentDefinition | null {\n if (!options.contentType) {\n return null;\n }\n\n const exactMatch =\n assignments.find(\n (assignment) =>\n assignment.contentType === options.contentType &&\n (assignment.contentVariant || '') === (options.contentVariant || ''),\n ) || null;\n\n if (exactMatch) {\n return cloneAssignmentDefinition(exactMatch);\n }\n\n const typeOnlyMatch =\n assignments.find(\n (assignment) =>\n assignment.contentType === options.contentType &&\n !assignment.contentVariant,\n ) || null;\n\n return typeOnlyMatch ? cloneAssignmentDefinition(typeOnlyMatch) : null;\n}\n\nfunction buildResolvedGovernance(\n config: ContentGovernanceConfig,\n assignment: ContentGovernanceAssignmentDefinition | null,\n): ResolvedContentGovernance {\n const normalizedAssignment = assignment\n ? normalizeAssignmentDefinition(assignment)\n : null;\n if (normalizedAssignment?.enabled !== true) {\n return {\n isGoverned: false,\n factLinkingEnabled: false,\n transparencyEnabled: false,\n publicationProfileKey: null,\n correctionProfileKey: null,\n enforcePublishReadiness: false,\n defaultFactRelationship: DEFAULT_FACT_RELATIONSHIP,\n reviewPolicies: config.policies\n .map(clonePolicyDefinition)\n .filter((policy) => policy.enabled !== false),\n availableProfiles: config.profiles\n .map(cloneProfileDefinition)\n .filter((profile) => profile.enabled !== false),\n assignment: normalizedAssignment,\n };\n }\n\n return {\n isGoverned: true,\n factLinkingEnabled: normalizedAssignment.factLinkingEnabled === true,\n transparencyEnabled: normalizedAssignment.transparencyEnabled === true,\n publicationProfileKey: normalizedAssignment.publicationProfileKey || null,\n correctionProfileKey: normalizedAssignment.correctionProfileKey || null,\n enforcePublishReadiness:\n normalizedAssignment.enforcePublishReadiness === true,\n defaultFactRelationship:\n normalizedAssignment.defaultFactRelationship || DEFAULT_FACT_RELATIONSHIP,\n reviewPolicies: config.policies\n .map(clonePolicyDefinition)\n .filter((policy) => policy.enabled !== false),\n availableProfiles: config.profiles\n .map(cloneProfileDefinition)\n .filter((profile) => profile.enabled !== false),\n assignment: normalizedAssignment,\n };\n}\n\nfunction normalizeStatus(status: unknown): ContentReviewStatus {\n switch (status) {\n case 'pending':\n case 'passed':\n case 'flagged':\n case 'failed':\n case 'waived':\n return status;\n default:\n return 'flagged';\n }\n}\n\nfunction normalizeSeverity(severity: unknown): ContentReviewSeverity {\n switch (severity) {\n case 'info':\n case 'warning':\n case 'error':\n return severity;\n default:\n return 'warning';\n }\n}\n\nfunction extractJSONObject(raw: string): string | null {\n const start = raw.indexOf('{');\n const end = raw.lastIndexOf('}');\n if (start === -1 || end === -1 || end <= start) {\n return null;\n }\n return raw.slice(start, end + 1);\n}\n\nexport function getContentGovernanceConfig(): ContentGovernanceConfig {\n return cloneGovernanceConfig(governanceConfig);\n}\n\nexport function getStaticContentGovernanceConfig(): ContentGovernanceConfig {\n return cloneGovernanceConfig(governanceConfig);\n}\n\nexport function configureContentGovernance(\n config: Partial<ContentGovernanceConfig>,\n): ContentGovernanceConfig {\n governanceConfig = {\n policies: config.policies\n ? mergeByKey(\n governanceConfig.policies,\n config.policies,\n normalizePolicyDefinition,\n )\n : governanceConfig.policies.map(clonePolicyDefinition),\n profiles: config.profiles\n ? mergeByKey(\n governanceConfig.profiles,\n config.profiles,\n normalizeProfileDefinition,\n )\n : governanceConfig.profiles.map(cloneProfileDefinition),\n assignments: config.assignments\n ? mergeByKey(\n governanceConfig.assignments,\n config.assignments,\n normalizeAssignmentDefinition,\n )\n : governanceConfig.assignments.map(cloneAssignmentDefinition),\n };\n\n return getContentGovernanceConfig();\n}\n\nexport function resetContentGovernanceConfig(): ContentGovernanceConfig {\n governanceConfig = cloneGovernanceConfig(DEFAULT_CONTENT_GOVERNANCE_CONFIG);\n return getContentGovernanceConfig();\n}\n\nexport async function getEffectiveContentGovernanceConfig(\n options: { db?: DatabaseInterface | null; tenantId?: string | null } = {},\n): Promise<ContentGovernanceConfig> {\n const persisted = await loadPersistedContentGovernanceDefinitions({\n db: options.db,\n tenantId: options.tenantId,\n });\n\n return {\n policies: mergeByKey(\n governanceConfig.policies,\n persisted.policies,\n normalizePolicyDefinition,\n ),\n profiles: mergeByKey(\n governanceConfig.profiles,\n persisted.profiles,\n normalizeProfileDefinition,\n ),\n assignments: mergeByKey(\n governanceConfig.assignments,\n persisted.assignments,\n normalizeAssignmentDefinition,\n ),\n };\n}\n\nexport function hasStaticContentGovernancePolicy(key: string): boolean {\n return getPolicyMap(governanceConfig.policies).has(key);\n}\n\nexport function hasStaticContentGovernanceProfile(key: string): boolean {\n return getProfileMap(governanceConfig.profiles).has(key);\n}\n\nexport function getContentReviewPolicy(\n policyKey: string,\n policies: ContentReviewPolicyDefinition[] = governanceConfig.policies,\n): ContentReviewPolicyDefinition | null {\n return getPolicyMap(policies).get(policyKey) || null;\n}\n\nexport function getContentReviewKind(\n policyKey: string,\n policies: ContentReviewPolicyDefinition[] = governanceConfig.policies,\n): ContentReviewKind {\n const configuredKind = getPolicyMap(policies).get(policyKey)?.kind;\n return configuredKind || getFallbackPolicyKind(policyKey);\n}\n\nexport function getContentReviewProfile(\n profileKey: string,\n profiles: ContentGovernanceProfileDefinition[] = governanceConfig.profiles,\n): ContentGovernanceProfileDefinition | null {\n return getProfileMap(profiles).get(profileKey) || null;\n}\n\nexport function getContentReviewProfileKeys(\n profiles: ContentGovernanceProfileDefinition[] = governanceConfig.profiles,\n): string[] {\n return profiles\n .map(cloneProfileDefinition)\n .filter((profile) => profile.enabled !== false)\n .map((profile) => profile.key);\n}\n\nexport function getContentReviewPolicies(\n policies: ContentReviewPolicyDefinition[] = governanceConfig.policies,\n): ContentReviewPolicyDefinition[] {\n return policies\n .map(clonePolicyDefinition)\n .filter((policy) => policy.enabled !== false);\n}\n\nexport function getContentReviewRequirements(\n profileKey: string,\n profiles: ContentGovernanceProfileDefinition[] = governanceConfig.profiles,\n): ContentReviewRequirement[] {\n const profile = getContentReviewProfile(profileKey, profiles);\n return profile?.requirements.map(cloneReviewRequirement) || [];\n}\n\nexport function getAcceptedContentReviewStatuses(\n requirement: Pick<ContentReviewRequirement, 'acceptedStatuses'>,\n): ContentReviewStatus[] {\n return requirement.acceptedStatuses && requirement.acceptedStatuses.length > 0\n ? [...requirement.acceptedStatuses]\n : ['passed', 'waived'];\n}\n\nexport function resolveConfiguredContentGovernance(\n options: Pick<\n ResolveContentGovernanceOptions,\n 'contentType' | 'contentVariant'\n >,\n): ResolvedContentGovernance {\n const assignment = resolveAssignmentDefinition(governanceConfig.assignments, {\n contentType: options.contentType,\n contentVariant: options.contentVariant,\n });\n\n return buildResolvedGovernance(governanceConfig, assignment);\n}\n\nexport async function resolveEffectiveContentGovernance(\n options: ResolveContentGovernanceOptions,\n): Promise<ResolvedContentGovernance> {\n const effectiveConfig = await getEffectiveContentGovernanceConfig({\n db: options.db,\n tenantId: options.tenantId,\n });\n const assignment = resolveAssignmentDefinition(effectiveConfig.assignments, {\n contentType: options.contentType,\n contentVariant: options.contentVariant,\n });\n\n return buildResolvedGovernance(effectiveConfig, assignment);\n}\n\nexport function buildContentReviewPrompt(\n options: BuildContentReviewPromptOptions,\n): string {\n const { kind, content, facts = [], policy, customInstructions } = options;\n\n const factLines =\n facts.length > 0\n ? facts\n .map(\n (fact) =>\n `- [${fact.id}] status=${fact.status}; confidence=${fact.confidence}; sources=${fact.sourceCount}; text=${fact.textRefined}`,\n )\n .join('\\n')\n : 'No facts were supplied for this review.';\n\n const policyText =\n customInstructions?.trim() ||\n policy?.instructions ||\n getContentReviewPolicy(kind)?.instructions ||\n '';\n\n return `You are a structured editorial reviewer.\n\nReturn ONLY valid JSON with this shape:\n{\n \"status\": \"passed\" | \"flagged\" | \"failed\" | \"waived\",\n \"summary\": \"short summary\",\n \"findings\": [\n {\n \"severity\": \"info\" | \"warning\" | \"error\",\n \"title\": \"short title\",\n \"detail\": \"what is wrong and why\",\n \"factId\": \"optional fact id\",\n \"quote\": \"optional quoted text from the draft\",\n \"suggestedChange\": \"optional suggested fix\",\n \"ruleId\": \"optional policy or rule id\"\n }\n ]\n}\n\nReview kind: ${kind}\nPolicy key: ${policy?.key || kind}\nReview instructions:\n${policyText}\n\nDraft content:\n- id: ${content.id ?? ''}\n- type: ${content.type ?? ''}\n- status: ${content.status}\n- state: ${content.state}\n- author: ${content.author ?? ''}\n- publish_date: ${content.publish_date?.toISOString?.() ?? ''}\n\nTitle:\n${content.title}\n\nDescription:\n${content.description ?? ''}\n\nBody:\n${content.body}\n\nRelevant facts:\n${factLines}`;\n}\n\nexport function parseContentReviewResponse(raw: string): ContentReviewResult {\n const normalizedRaw = raw.trim();\n const jsonCandidate = extractJSONObject(normalizedRaw);\n\n if (jsonCandidate) {\n try {\n const parsed = JSON.parse(jsonCandidate) as {\n status?: unknown;\n summary?: unknown;\n findings?: unknown;\n };\n const findings = Array.isArray(parsed.findings)\n ? parsed.findings.map((rawFinding): ContentReviewFinding => {\n const finding =\n rawFinding && typeof rawFinding === 'object'\n ? (rawFinding as Record<string, unknown>)\n : {};\n return {\n severity: normalizeSeverity(finding.severity),\n title: String(finding.title || 'Review finding'),\n detail: String(finding.detail || ''),\n factId:\n typeof finding.factId === 'string' ? finding.factId : undefined,\n quote:\n typeof finding.quote === 'string' ? finding.quote : undefined,\n suggestedChange:\n typeof finding.suggestedChange === 'string'\n ? finding.suggestedChange\n : undefined,\n ruleId:\n typeof finding.ruleId === 'string' ? finding.ruleId : undefined,\n };\n })\n : [];\n\n return {\n status: normalizeStatus(parsed.status),\n summary: String(parsed.summary || normalizedRaw || 'Review completed'),\n findings,\n };\n } catch {\n // Fall through to a normalized fallback result.\n }\n }\n\n return {\n status: 'flagged',\n summary: normalizedRaw || 'Review completed without structured output.',\n findings: normalizedRaw\n ? [\n {\n severity: 'warning',\n title: 'Unstructured review output',\n detail: normalizedRaw,\n },\n ]\n : [],\n };\n}\n","export interface ContentTransparencyGeneration {\n aiAssisted: boolean;\n publicPrompt: string | null;\n model: string | null;\n}\n\nexport interface ContentTransparencySource {\n id: string | null;\n sourceType: string | null;\n sourceUrl: string | null;\n sourceTitle: string | null;\n credibility: number | null;\n extractedAt: string | null;\n metadata: Record<string, unknown>;\n}\n\nexport interface ContentTransparencyFact {\n id: string | null;\n textRaw?: string | null;\n textRefined?: string | null;\n status?: string | null;\n domain?: string | null;\n confidence?: number | null;\n sourceCount?: number | null;\n metadata?: Record<string, unknown>;\n relationship?: string | null;\n linkMetadata?: Record<string, unknown>;\n usedInArticle?: boolean;\n sources?: ContentTransparencySource[];\n}\n\nexport interface ContentTransparencyReference {\n id: string | null;\n title: string | null;\n url: string | null;\n originalUrl: string | null;\n type: string | null;\n source: string | null;\n usedFactIds: string[];\n extractedFacts: ContentTransparencyFact[];\n}\n\nexport interface ContentTransparencyPublicationVersion {\n id: string | null;\n version: number | null;\n kind: string | null;\n summary: string;\n createdAt: string | null;\n}\n\nexport interface ContentTransparencyVersionHistoryItem {\n id: string | null;\n version: number | null;\n kind: string | null;\n summary: string;\n createdAt: string | null;\n provenance: Record<string, unknown>;\n}\n\n/**\n * Serialized review record carried in a transparency snapshot. Only the fields\n * consumers read are named; the index signature preserves the remaining\n * serialized properties.\n */\nexport interface ContentTransparencyReview {\n id?: string | null;\n kind?: string | null;\n policyKey?: string | null;\n status?: string | null;\n summary?: string | null;\n createdAt?: string | null;\n [key: string]: unknown;\n}\n\n/**\n * Serialized review-profile evaluation carried in a transparency snapshot.\n */\nexport interface ContentTransparencyReviewProfile {\n profileKey?: string | null;\n [key: string]: unknown;\n}\n\n/**\n * Serialized correction record carried in a transparency snapshot.\n */\nexport interface ContentTransparencyCorrection {\n id?: string | null;\n summary?: string | null;\n publicNote?: string | null;\n publishedAt?: string | null;\n [key: string]: unknown;\n}\n\nexport interface ContentTransparencyData {\n generatedAt: string | null;\n snapshotKind: 'preview' | 'published';\n contentId: string | null;\n currentContentStatus: string | null;\n publicationProfileKey: string;\n publicationVersion: ContentTransparencyPublicationVersion | null;\n generation: ContentTransparencyGeneration;\n factsUsed: ContentTransparencyFact[];\n linkedFacts: ContentTransparencyFact[];\n otherExtractedFacts: ContentTransparencyFact[];\n references: ContentTransparencyReference[];\n reviews: ContentTransparencyReview[];\n reviewProfiles: ContentTransparencyReviewProfile[];\n corrections: ContentTransparencyCorrection[];\n versionHistory: ContentTransparencyVersionHistoryItem[];\n}\n\nfunction asObject(\n value: unknown,\n fallback: Record<string, unknown> = {},\n): Record<string, unknown> {\n return value && typeof value === 'object'\n ? { ...(value as Record<string, unknown>) }\n : fallback;\n}\n\nfunction asString(value: unknown): string | null {\n return typeof value === 'string' && value.length > 0 ? value : null;\n}\n\nfunction asNumber(value: unknown): number | null {\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n}\n\nfunction asArray<T>(value: unknown): T[] {\n return Array.isArray(value) ? (value as T[]) : [];\n}\n\nfunction normalizeGeneration(value: unknown): ContentTransparencyGeneration {\n const generation = asObject(value);\n return {\n aiAssisted: Boolean(generation.aiAssisted),\n publicPrompt: asString(generation.publicPrompt),\n model: asString(generation.model),\n };\n}\n\nfunction normalizeFact(value: unknown): ContentTransparencyFact {\n const fact = asObject(value);\n return {\n ...fact,\n id: asString(fact.id),\n relationship: asString(fact.relationship),\n linkMetadata: asObject(fact.linkMetadata),\n usedInArticle: Boolean(fact.usedInArticle),\n sources: asArray<unknown>(fact.sources).map(normalizeSource),\n };\n}\n\nfunction normalizeSource(value: unknown): ContentTransparencySource {\n const source = asObject(value);\n return {\n id: asString(source.id),\n sourceType: asString(source.sourceType),\n sourceUrl: asString(source.sourceUrl),\n sourceTitle: asString(source.sourceTitle),\n credibility: asNumber(source.credibility),\n extractedAt: asString(source.extractedAt),\n metadata: asObject(source.metadata),\n };\n}\n\nfunction normalizeReference(value: unknown): ContentTransparencyReference {\n const reference = asObject(value);\n return {\n id: asString(reference.id),\n title: asString(reference.title),\n url: asString(reference.url),\n originalUrl: asString(reference.originalUrl),\n type: asString(reference.type),\n source: asString(reference.source),\n usedFactIds: asArray<string>(reference.usedFactIds).filter(Boolean),\n extractedFacts: asArray<unknown>(reference.extractedFacts).map(\n normalizeFact,\n ),\n };\n}\n\nfunction normalizePublicationVersion(\n value: unknown,\n): ContentTransparencyPublicationVersion | null {\n const publicationVersion = asObject(value);\n if (!publicationVersion.id && publicationVersion.version === undefined) {\n return null;\n }\n\n return {\n id: asString(publicationVersion.id),\n version: asNumber(publicationVersion.version),\n kind: asString(publicationVersion.kind),\n summary:\n typeof publicationVersion.summary === 'string'\n ? publicationVersion.summary\n : '',\n createdAt: asString(publicationVersion.createdAt),\n };\n}\n\nfunction normalizeVersionHistoryItem(\n value: unknown,\n): ContentTransparencyVersionHistoryItem {\n const version = asObject(value);\n return {\n id: asString(version.id),\n version: asNumber(version.version),\n kind: asString(version.kind),\n summary: typeof version.summary === 'string' ? version.summary : '',\n createdAt: asString(version.createdAt),\n provenance: asObject(version.provenance),\n };\n}\n\nfunction dedupeFacts(facts: ContentTransparencyFact[]) {\n const byKey = new Map<string, ContentTransparencyFact>();\n\n for (const fact of facts) {\n // Collapse effectively empty facts into a single placeholder bucket rather\n // than rendering duplicate blank entries in the public transparency view.\n const key =\n fact.id ||\n fact.textRefined ||\n fact.textRaw ||\n JSON.stringify(fact.metadata || {});\n if (!key) {\n continue;\n }\n\n byKey.set(key, fact);\n }\n\n return [...byKey.values()];\n}\n\nexport function normalizeContentTransparency(\n value: unknown,\n defaults: Partial<ContentTransparencyData> = {},\n): ContentTransparencyData {\n const snapshot = asObject(value);\n const references = asArray<unknown>(snapshot.references).map(\n normalizeReference,\n );\n const linkedFacts = asArray<unknown>(snapshot.linkedFacts).map(normalizeFact);\n const factsUsed =\n asArray<unknown>(snapshot.factsUsed).length > 0\n ? asArray<unknown>(snapshot.factsUsed).map(normalizeFact)\n : linkedFacts.filter((fact) => fact.usedInArticle);\n const otherExtractedFacts =\n asArray<unknown>(snapshot.otherExtractedFacts).length > 0\n ? asArray<unknown>(snapshot.otherExtractedFacts).map(normalizeFact)\n : dedupeFacts(\n references.flatMap((reference) =>\n reference.extractedFacts.filter((fact) => !fact.usedInArticle),\n ),\n );\n\n return {\n generatedAt: asString(snapshot.generatedAt) ?? defaults.generatedAt ?? null,\n snapshotKind:\n snapshot.snapshotKind === 'published'\n ? 'published'\n : defaults.snapshotKind || 'preview',\n contentId: asString(snapshot.contentId) ?? defaults.contentId ?? null,\n currentContentStatus:\n asString(snapshot.currentContentStatus) ??\n defaults.currentContentStatus ??\n null,\n publicationProfileKey:\n asString(snapshot.publicationProfileKey) ??\n asString(snapshot.publicationReviewProfileKey) ??\n defaults.publicationProfileKey ??\n 'publication',\n publicationVersion:\n normalizePublicationVersion(snapshot.publicationVersion) ??\n defaults.publicationVersion ??\n null,\n generation: normalizeGeneration(\n snapshot.generation ?? defaults.generation ?? {},\n ),\n factsUsed,\n linkedFacts,\n otherExtractedFacts,\n references,\n reviews: asArray<ContentTransparencyReview>(snapshot.reviews),\n reviewProfiles: asArray<ContentTransparencyReviewProfile>(\n snapshot.reviewProfiles,\n ),\n corrections: asArray<ContentTransparencyCorrection>(snapshot.corrections),\n versionHistory: asArray<unknown>(snapshot.versionHistory).map(\n normalizeVersionHistoryItem,\n ),\n };\n}\n"],"mappings":"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"}
@@ -48,6 +48,10 @@ export interface ContentContributionTypeConfigState {
48
48
  effective: ContentContributionTypeDefinition[];
49
49
  persisted: PersistedContentContributionTypeRecord[];
50
50
  }
51
+ export interface ContentContributionConfigReadOptions {
52
+ db?: DatabaseInterface | null;
53
+ tenantId?: string | null;
54
+ }
51
55
  export interface EvaluateContributionIntakeOptions {
52
56
  contributionType: ContentContributionTypeDefinition;
53
57
  trustLevel?: ContentContributorTrustLevel;
@@ -68,17 +72,9 @@ export declare function getContentContributionConfig(): ContentContributionConfi
68
72
  export declare function configureContentContributions(config: Partial<ContentContributionConfig>): ContentContributionConfig;
69
73
  export declare function resetContentContributionConfig(): ContentContributionConfig;
70
74
  export declare function hasStaticContentContributionType(key: string): boolean;
71
- export declare function loadPersistedContentContributionTypes(options?: {
72
- db?: DatabaseInterface | null;
73
- }): Promise<PersistedContentContributionTypeRecord[]>;
74
- export declare function getEffectiveContentContributionConfig(options?: {
75
- db?: DatabaseInterface | null;
76
- }): Promise<ContentContributionConfig>;
77
- export declare function getContentContributionTypeConfigState(options?: {
78
- db?: DatabaseInterface | null;
79
- }): Promise<ContentContributionTypeConfigState>;
80
- export declare function resolveEffectiveContentContributionType(key: string, options?: {
81
- db?: DatabaseInterface | null;
82
- }): Promise<ResolvedContentContributionType | null>;
75
+ export declare function loadPersistedContentContributionTypes(options?: ContentContributionConfigReadOptions): Promise<PersistedContentContributionTypeRecord[]>;
76
+ export declare function getEffectiveContentContributionConfig(options?: ContentContributionConfigReadOptions): Promise<ContentContributionConfig>;
77
+ export declare function getContentContributionTypeConfigState(options?: ContentContributionConfigReadOptions): Promise<ContentContributionTypeConfigState>;
78
+ export declare function resolveEffectiveContentContributionType(key: string, options?: ContentContributionConfigReadOptions): Promise<ResolvedContentContributionType | null>;
83
79
  export declare function evaluateContributionIntake(options: EvaluateContributionIntakeOptions): EvaluateContributionIntakeResult;
84
80
  //# sourceMappingURL=content-contribution-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-contribution-config.d.ts","sourceRoot":"","sources":["../src/content-contribution-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-contribution-config.d.ts","sourceRoot":"","sources":["../src/content-contribution-config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"content-contribution.d.ts","sourceRoot":"","sources":["../src/content-contribution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-contribution.d.ts","sourceRoot":"","sources":["../src/content-contribution.ts"],"names":[],"mappings":"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"}
@@ -22,13 +22,17 @@ export declare class ContentContributions extends SmrtCollection<ContentContribu
22
22
  private getEmailCollection;
23
23
  private getAttachmentCollection;
24
24
  private resolveSubmissionType;
25
- getContributionTypesAction(): Promise<import('./content-contribution-config').ContentContributionTypeConfigState>;
25
+ getContributionTypesAction(options?: {
26
+ tenantId?: string | null;
27
+ }): Promise<import('./content-contribution-config').ContentContributionTypeConfigState>;
26
28
  listForContributor(options?: {
27
29
  contributorId?: string;
28
30
  contributorEmail?: string;
31
+ tenantId?: string | null;
29
32
  }): Promise<ContentContribution[]>;
30
33
  listInboxAction(options?: {
31
34
  statuses?: string | string[];
35
+ tenantId?: string | null;
32
36
  }): Promise<ContentContribution[]>;
33
37
  submitWebContribution(options: SubmitWebContentContributionOptions): Promise<{
34
38
  contribution: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"content-contributions.d.ts","sourceRoot":"","sources":["../src/content-contributions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAQ,MAAM,0BAA0B,CAAC;AAMhE,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAS7D,MAAM,WAAW,mCAAmC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,kCAAkC,EAAE,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,qCAAqC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AA2BD,qBAwCa,oBAAqB,SAAQ,cAAc,CAAC,mBAAmB,CAAC;IAC3E,MAAM,CAAC,QAAQ,CAAC,UAAU,6BAAuB;YAEnC,wBAAwB;YAIxB,kBAAkB;YAIlB,uBAAuB;YAIvB,qBAAqB;IAyB7B,0BAA0B;IAI1B,kBAAkB,CACtB,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAO;IAsB/D,eAAe,CACnB,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAO,GAC7C,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAgB3B,qBAAqB,CAAC,OAAO,EAAE,mCAAmC;;;;;;;;;;;;;;;;;;IAwElE,uBAAuB,CAC3B,OAAO,EAAE,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuKjD"}
1
+ {"version":3,"file":"content-contributions.d.ts","sourceRoot":"","sources":["../src/content-contributions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAQ,MAAM,0BAA0B,CAAC;AAMhE,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAS7D,MAAM,WAAW,mCAAmC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,kCAAkC,EAAE,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,qCAAqC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AA2BD,qBAwCa,oBAAqB,SAAQ,cAAc,CAAC,mBAAmB,CAAC;IAC3E,MAAM,CAAC,QAAQ,CAAC,UAAU,6BAAuB;YAEnC,wBAAwB;YAIxB,kBAAkB;YAIlB,uBAAuB;YAIvB,qBAAqB;IA2B7B,0BAA0B,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAO;IAOrE,kBAAkB,CACtB,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACrB;IA6BF,eAAe,CACnB,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAO,GACvE,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoB3B,qBAAqB,CAAC,OAAO,EAAE,mCAAmC;;;;;;;;;;;;;;;;;;IA2ElE,uBAAuB,CAC3B,OAAO,EAAE,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0KjD"}
@@ -159,11 +159,13 @@ export interface ResolveContentGovernanceOptions {
159
159
  contentType?: string | null;
160
160
  contentVariant?: string | null;
161
161
  db?: DatabaseInterface | null;
162
+ tenantId?: string | null;
162
163
  }
163
164
  export declare function buildContentGovernanceAssignmentKey(contentType: string, contentVariant?: string | null): string;
164
165
  export declare function getFallbackPolicyKind(key: string): ContentReviewKind;
165
166
  export declare function loadPersistedContentGovernanceDefinitions(options?: {
166
167
  db?: DatabaseInterface | null;
168
+ tenantId?: string | null;
167
169
  }): Promise<PersistedContentGovernanceDefinitions>;
168
170
  export declare function getContentGovernanceConfig(): ContentGovernanceConfig;
169
171
  export declare function getStaticContentGovernanceConfig(): ContentGovernanceConfig;
@@ -171,6 +173,7 @@ export declare function configureContentGovernance(config: Partial<ContentGovern
171
173
  export declare function resetContentGovernanceConfig(): ContentGovernanceConfig;
172
174
  export declare function getEffectiveContentGovernanceConfig(options?: {
173
175
  db?: DatabaseInterface | null;
176
+ tenantId?: string | null;
174
177
  }): Promise<ContentGovernanceConfig>;
175
178
  export declare function hasStaticContentGovernancePolicy(key: string): boolean;
176
179
  export declare function hasStaticContentGovernanceProfile(key: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"content-governance.d.ts","sourceRoot":"","sources":["../src/content-governance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-governance.d.ts","sourceRoot":"","sources":["../src/content-governance.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"content-versions.d.ts","sourceRoot":"","sources":["../src/content-versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBAAa,wBAAyB,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC1E,MAAM,CAAC,QAAQ,CAAC,UAAU,wBAAkB;IAE5C,OAAO,CAAC,8BAA8B;IAkDhC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAO5D,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKtE,4BAA4B,CAChC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAY3B,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAO3B,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxD,cAAc,CAClB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,cAAc,CAAC;IA8FpB,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC;CAwKpB"}
1
+ {"version":3,"file":"content-versions.d.ts","sourceRoot":"","sources":["../src/content-versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBAAa,wBAAyB,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC1E,MAAM,CAAC,QAAQ,CAAC,UAAU,wBAAkB;IAE5C,OAAO,CAAC,8BAA8B;IAkDhC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAO5D,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKtE,4BAA4B,CAChC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAY3B,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAO3B,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxD,cAAc,CAClB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,cAAc,CAAC;IA+FpB,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC;CAyKpB"}