@happyvertical/smrt-content 0.53.5 → 0.53.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { t as __exportAll } from "./chunks/rolldown-runtime-D7D4PA-g.js";
2
- import { $ as parseContentReviewResponse, A as normalizeContentTransparency, B as getAcceptedContentReviewStatuses, C as resolveContentTenantReadScope, F as smrtContentReviewPrompt, G as getContentReviewProfile, H as getContentReviewKind, I as smrtContentThumbnailAIGeneratePrompt, J as getEffectiveContentGovernanceConfig, K as getContentReviewProfileKeys, L as buildContentGovernanceAssignmentKey, M as ContentReference, N as promptMessageOptions, O as getQueryRows, P as smrtContentApplyCorrectionPrompt, R as buildContentReviewPrompt, S as mergeContentQueryScope, T as ThumbnailGenerator, U as getContentReviewPolicies, V as getContentGovernanceConfig, W as getContentReviewPolicy, X as hasStaticContentGovernancePolicy, Y as getFallbackPolicyKind, Z as hasStaticContentGovernanceProfile, _ as assertContentQuerySchema, a as CONTENT_QUERY_IDENTITY_FIELD, at as isAssetAssociable, b as clearContentQuerySchemaCache, c as CONTENT_QUERY_MIN_RESULT_BYTES, d as DATA_QUERY_MAX_JSON_DEPTH, et as resetContentGovernanceConfig, f as DATA_QUERY_MAX_JSON_STRING_LENGTH, g as MAX_CONTENT_QUERY_OR_BRANCHES, h as DATA_QUERY_MAX_WARNING_LENGTH, i as CONTENT_QUERY_EXCLUDED_FIELD_IDS, it as ContentAsset, j as ContentReferences, k as isMissingTableError, l as DATA_QUERY_FORBIDDEN_JSON_KEYS, m as DATA_QUERY_MAX_WARNINGS, n as CONTENT_QUERY_DEFAULT_PAGE_LIMIT, nt as resolveEffectiveContentGovernance, o as CONTENT_QUERY_MAX_PAGE_LIMIT, ot as isMetadataAccessor, p as DATA_QUERY_MAX_STRING_LENGTH, q as getContentReviewRequirements, r as CONTENT_QUERY_DEFAULT_SORT, rt as ContentAssetCollection, s as CONTENT_QUERY_MAX_RESULT_BYTES, t as CONTENT_QUERY_CLASS_NAME, tt as resolveConfiguredContentGovernance, u as DATA_QUERY_MAX_JSON_CONTAINER_ITEMS, v as buildContentQuerySchema, w as Content, x as executeContentQuery, y as buildDataQuerySchemaForClass, z as configureContentGovernance } from "./chunks/content-query-CNAloqNn.js";
2
+ import { $ as parseContentReviewResponse, A as normalizeContentTransparency, B as getAcceptedContentReviewStatuses, C as resolveContentTenantReadScope, F as smrtContentReviewPrompt, G as getContentReviewProfile, H as getContentReviewKind, I as smrtContentThumbnailAIGeneratePrompt, J as getEffectiveContentGovernanceConfig, K as getContentReviewProfileKeys, L as buildContentGovernanceAssignmentKey, M as ContentReference, N as promptMessageOptions, O as getQueryRows, P as smrtContentApplyCorrectionPrompt, R as buildContentReviewPrompt, S as mergeContentQueryScope, T as ThumbnailGenerator, U as getContentReviewPolicies, V as getContentGovernanceConfig, W as getContentReviewPolicy, X as hasStaticContentGovernancePolicy, Y as getFallbackPolicyKind, Z as hasStaticContentGovernanceProfile, _ as assertContentQuerySchema, a as CONTENT_QUERY_IDENTITY_FIELD, at as isAssetAssociable, b as clearContentQuerySchemaCache, c as CONTENT_QUERY_MIN_RESULT_BYTES, d as DATA_QUERY_MAX_JSON_DEPTH, et as resetContentGovernanceConfig, f as DATA_QUERY_MAX_JSON_STRING_LENGTH, g as MAX_CONTENT_QUERY_OR_BRANCHES, h as DATA_QUERY_MAX_WARNING_LENGTH, i as CONTENT_QUERY_EXCLUDED_FIELD_IDS, it as ContentAsset, j as ContentReferences, k as isMissingTableError, l as DATA_QUERY_FORBIDDEN_JSON_KEYS, m as DATA_QUERY_MAX_WARNINGS, n as CONTENT_QUERY_DEFAULT_PAGE_LIMIT, nt as resolveEffectiveContentGovernance, o as CONTENT_QUERY_MAX_PAGE_LIMIT, ot as isMetadataAccessor, p as DATA_QUERY_MAX_STRING_LENGTH, q as getContentReviewRequirements, r as CONTENT_QUERY_DEFAULT_SORT, rt as ContentAssetCollection, s as CONTENT_QUERY_MAX_RESULT_BYTES, t as CONTENT_QUERY_CLASS_NAME, tt as resolveConfiguredContentGovernance, u as DATA_QUERY_MAX_JSON_CONTAINER_ITEMS, v as buildContentQuerySchema, w as Content, x as executeContentQuery, y as buildDataQuerySchemaForClass, z as configureContentGovernance } from "./chunks/content-query-DGT7-jP5.js";
3
3
  import { BODY_MAIN_IMAGE_ATTRIBUTE, BODY_THUMBNAIL_ATTRIBUTE, DEFAULT_CONTENT_BODY_FORMAT, THUMBNAIL_WIDE_ASPECT_RATIO, bodyHasImage, bodyHasThumbnail, bodyToEditorHtml, editorHtmlToBody, extractBodyImages, htmlToMarkdown, placeThumbnailInBody, removeThumbnailFromBody, renderContentBodyHtml, renderMarkdownToHtml, resolveBodyFormat, resolveBodyMainPicture, sanitizeHtml, setBodyMainImage, stripHtml, thumbnailPlacementForSize } from "./body-format.js";
4
4
  import { r as ContentCorrection, t as ContentCorrectionCollection } from "./chunks/content-corrections-CKuY-MSv.js";
5
5
  import { contentEditorAssistantContextToChatProps, createContentEditorAssistantContext, sanitizeContentEditorAssistantFieldUpdates } from "./content-editor-assistant.js";
6
- import { r as validateSafeRemoteUrl, t as Contents } from "./chunks/contents-DOaJGY-W.js";
6
+ import { i as fetchSafeRemoteUrlInternal, r as fetchSafeRemoteUrl, t as Contents } from "./chunks/contents-B34f4y28.js";
7
7
  import { r as ContentReview, t as ContentReviewCollection } from "./chunks/content-reviews-D6o0zK8s.js";
8
- import { r as ContentVersion, t as ContentVersionCollection } from "./chunks/content-versions-B4oZ2a7b.js";
8
+ import { r as ContentVersion, t as ContentVersionCollection } from "./chunks/content-versions-BLFMU03_.js";
9
9
  import { evaluateContentPublishReadiness } from "./publish-readiness.js";
10
10
  import { ObjectRegistry, SmrtCollection, SmrtObject, crossPackageRef, field, foreignKey, smrt } from "@happyvertical/smrt-core";
11
11
  import { AssetCollection, AssetStatusCollection, AssetTypeCollection } from "@happyvertical/smrt-assets";
@@ -17,8 +17,6 @@ import { sendAgentReply } from "@happyvertical/smrt-chat/internal/agent-runtime"
17
17
  import { AttachmentCollection, EmailCollection } from "@happyvertical/smrt-messages";
18
18
  import { ProfileCollection, ProfileTypeCollection } from "@happyvertical/smrt-profiles";
19
19
  import { randomUUID } from "node:crypto";
20
- import { isIP } from "node:net";
21
- import { Agent, fetch } from "undici";
22
20
  import YAML from "yaml";
23
21
  //#region src/content-chat-prompts.ts
24
22
  var contentEditorSessionPrompt = definePrompt({
@@ -890,7 +888,7 @@ var ContentContribution = class extends SmrtObject {
890
888
  return ContentContributorCollection.create(this.options);
891
889
  }
892
890
  async getContentsCollection() {
893
- const { Contents } = await import("./chunks/contents-DOaJGY-W.js").then((n) => n.n);
891
+ const { Contents } = await import("./chunks/contents-B34f4y28.js").then((n) => n.n);
894
892
  return Contents.create({ db: this.db });
895
893
  }
896
894
  async getAssetCollection() {
@@ -6347,16 +6345,6 @@ Mirror = __decorateClass$3([smrt({
6347
6345
  })], Mirror);
6348
6346
  //#endregion
6349
6347
  //#region src/content-feed-sync.ts
6350
- var DEFAULT_MAX_RESPONSE_BYTES = 2e6;
6351
- var DEFAULT_FETCH_TIMEOUT_MS = 1e4;
6352
- var MAX_FEED_REDIRECTS = 5;
6353
- var REDIRECT_STATUSES = /* @__PURE__ */ new Set([
6354
- 301,
6355
- 302,
6356
- 303,
6357
- 307,
6358
- 308
6359
- ]);
6360
6348
  var FALLBACK_MIRROR_META_TYPE = "@happyvertical/smrt-content:Mirror";
6361
6349
  function getMirrorMetaType() {
6362
6350
  return ObjectRegistry.getClassByConstructor(Mirror)?.qualifiedName ?? FALLBACK_MIRROR_META_TYPE;
@@ -6382,128 +6370,6 @@ function hashString(value) {
6382
6370
  function createDedupeKey(source, item) {
6383
6371
  return `feed:${source.id ?? source.feedUrl}:${item.guid || normalizeUrlIdentity(item.url)}`;
6384
6372
  }
6385
- async function validateFeedFetchUrl(feedUrl, options) {
6386
- return validateSafeRemoteUrl(feedUrl, {
6387
- allowPrivateNetworkHosts: options.allowPrivateNetworkHosts,
6388
- resolveHostnameWhenPrivateAllowed: true,
6389
- resolveHostname: options.resolveHostname
6390
- });
6391
- }
6392
- function createTimeoutSignal(timeoutMs) {
6393
- if (timeoutMs <= 0) return void 0;
6394
- return AbortSignal.timeout(timeoutMs);
6395
- }
6396
- function createPinnedDispatcher(addresses) {
6397
- const pinnedAddresses = addresses.map(({ address, family }) => {
6398
- const resolvedFamily = family ?? isIP(address);
6399
- if (resolvedFamily !== 4 && resolvedFamily !== 6) throw new Error("Remote URL resolved to an unrecognised network address");
6400
- return {
6401
- address,
6402
- family: resolvedFamily
6403
- };
6404
- });
6405
- return new Agent({ connect: { lookup: (_hostname, lookupOptions, callback) => {
6406
- if (lookupOptions.all) {
6407
- callback(null, pinnedAddresses);
6408
- return;
6409
- }
6410
- const selected = pinnedAddresses.find(({ family }) => !lookupOptions.family || family === lookupOptions.family) ?? pinnedAddresses[0];
6411
- callback(null, selected.address, selected.family);
6412
- } } });
6413
- }
6414
- async function fetchValidatedFeedUrl(url, headers, options) {
6415
- const init = {
6416
- headers,
6417
- redirect: "manual",
6418
- signal: createTimeoutSignal(options.fetchTimeoutMs ?? DEFAULT_FETCH_TIMEOUT_MS)
6419
- };
6420
- if (options.fetch) return {
6421
- response: await options.fetch(url.url, init),
6422
- close: async () => {}
6423
- };
6424
- const dispatcher = createPinnedDispatcher(url.addresses);
6425
- try {
6426
- return {
6427
- response: await fetch(url.url, {
6428
- ...init,
6429
- dispatcher
6430
- }),
6431
- close: () => dispatcher.close()
6432
- };
6433
- } catch (error) {
6434
- await dispatcher.close();
6435
- throw error;
6436
- }
6437
- }
6438
- async function closeFeedResponse({ response, close }) {
6439
- try {
6440
- if (response.body && !response.body.locked) await response.body.cancel();
6441
- } catch {} finally {
6442
- await close();
6443
- }
6444
- }
6445
- async function fetchFeedWithRedirectGuard(startUrl, headers, options) {
6446
- let current = startUrl;
6447
- for (let hop = 0; hop <= MAX_FEED_REDIRECTS; hop += 1) {
6448
- const result = await fetchValidatedFeedUrl(current, headers, options);
6449
- const { response } = result;
6450
- if (REDIRECT_STATUSES.has(response.status)) {
6451
- const location = response.headers.get("location");
6452
- if (!location) {
6453
- await closeFeedResponse(result);
6454
- throw new Error("Feed redirect response missing Location header");
6455
- }
6456
- try {
6457
- current = await validateFeedFetchUrl(new URL(location, current.url).toString(), options);
6458
- } finally {
6459
- await closeFeedResponse(result);
6460
- }
6461
- continue;
6462
- }
6463
- return {
6464
- ...result,
6465
- finalUrl: current.url
6466
- };
6467
- }
6468
- throw new Error("Feed URL exceeded the maximum number of redirects");
6469
- }
6470
- async function readResponseText(response, maxBytes) {
6471
- const contentLength = response.headers.get("content-length");
6472
- if (contentLength && Number(contentLength) > maxBytes) throw new Error(`Feed response exceeds ${maxBytes} bytes`);
6473
- if (!response.body) {
6474
- const text = await response.text();
6475
- if (new TextEncoder().encode(text).byteLength > maxBytes) throw new Error(`Feed response exceeds ${maxBytes} bytes`);
6476
- return text;
6477
- }
6478
- const reader = response.body.getReader();
6479
- const chunks = [];
6480
- let totalBytes = 0;
6481
- try {
6482
- while (true) {
6483
- const { done, value } = await reader.read();
6484
- if (done) break;
6485
- if (!value) continue;
6486
- totalBytes += value.byteLength;
6487
- if (totalBytes > maxBytes) {
6488
- await reader.cancel();
6489
- throw new Error(`Feed response exceeds ${maxBytes} bytes`);
6490
- }
6491
- chunks.push(value);
6492
- }
6493
- } catch (error) {
6494
- await reader.cancel(error);
6495
- throw error;
6496
- } finally {
6497
- reader.releaseLock();
6498
- }
6499
- const buffer = new Uint8Array(totalBytes);
6500
- let offset = 0;
6501
- for (const chunk of chunks) {
6502
- buffer.set(chunk, offset);
6503
- offset += chunk.byteLength;
6504
- }
6505
- return new TextDecoder().decode(buffer);
6506
- }
6507
6373
  async function findExistingMirror(contents, source, item, dedupeKey) {
6508
6374
  const tenantWhere = source.tenantId ? "tenant_id = ?" : "tenant_id IS NULL";
6509
6375
  const params = [getMirrorMetaType()];
@@ -6644,10 +6510,16 @@ async function syncContentFeedSource(source, options = {}) {
6644
6510
  source.markFetchStarted(now);
6645
6511
  await source.save();
6646
6512
  try {
6647
- const fetchResult = await fetchFeedWithRedirectGuard(await validateFeedFetchUrl(source.feedUrl, options), headers, options);
6648
- const { response, finalUrl } = fetchResult;
6513
+ const response = await fetchSafeRemoteUrlInternal(source.feedUrl, {
6514
+ allowHttp: true,
6515
+ allowPrivateNetworkHosts: options.allowPrivateNetworkHosts,
6516
+ fetchImpl: options.fetch,
6517
+ headers,
6518
+ maxBytes: options.maxResponseBytes,
6519
+ resolveHostname: options.resolveHostname,
6520
+ timeoutMs: options.fetchTimeoutMs
6521
+ });
6649
6522
  if (response.status === 304) {
6650
- await closeFeedResponse(fetchResult);
6651
6523
  source.markFetchSucceeded(now);
6652
6524
  await source.save();
6653
6525
  return {
@@ -6659,17 +6531,8 @@ async function syncContentFeedSource(source, options = {}) {
6659
6531
  skipped: 0
6660
6532
  };
6661
6533
  }
6662
- if (!response.ok) {
6663
- await closeFeedResponse(fetchResult);
6664
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
6665
- }
6666
- const parsed = parseContentFeed(await (async () => {
6667
- try {
6668
- return await readResponseText(response, options.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES);
6669
- } finally {
6670
- await closeFeedResponse(fetchResult);
6671
- }
6672
- })(), finalUrl.toString());
6534
+ if (!response.ok) throw new Error(`HTTP ${response.status}: ${response.statusText}`);
6535
+ const parsed = parseContentFeed(new TextDecoder().decode(response.body), response.url.toString());
6673
6536
  source.format = parsed.format;
6674
6537
  source.homepageUrl = source.homepageUrl || parsed.homepageUrl;
6675
6538
  if (!source.name && parsed.title) source.name = parsed.title;
@@ -6684,8 +6547,8 @@ async function syncContentFeedSource(source, options = {}) {
6684
6547
  skipped += 1;
6685
6548
  }
6686
6549
  source.markFetchSucceeded(now, {
6687
- etag: response.headers.get("etag"),
6688
- lastModified: response.headers.get("last-modified")
6550
+ etag: response.headers.etag ?? null,
6551
+ lastModified: response.headers["last-modified"] ?? null
6689
6552
  });
6690
6553
  await source.save();
6691
6554
  return {
@@ -7036,6 +6899,6 @@ function stringToContent(data) {
7036
6899
  };
7037
6900
  }
7038
6901
  //#endregion
7039
- export { Article, BODY_MAIN_IMAGE_ATTRIBUTE, BODY_THUMBNAIL_ATTRIBUTE, CONTENT_QUERY_CLASS_NAME, CONTENT_QUERY_DEFAULT_PAGE_LIMIT, CONTENT_QUERY_DEFAULT_SORT, CONTENT_QUERY_EXCLUDED_FIELD_IDS, CONTENT_QUERY_IDENTITY_FIELD, CONTENT_QUERY_MAX_PAGE_LIMIT, CONTENT_QUERY_MAX_RESULT_BYTES, CONTENT_QUERY_MIN_RESULT_BYTES, Content, ContentAsset, ContentAssetCollection, ContentContribution, ContentContributionAttachment, ContentContributionAttachmentCollection, ContentContributionRevision, ContentContributionRevisionCollection, ContentContributionType, ContentContributionTypeCollection, ContentContributions, ContentContributor, ContentContributorCollection, ContentCorrection, ContentCorrectionCollection, ContentDocument, ContentFeedSource, ContentFeedSourceCollection, ContentGovernanceAssignment, ContentGovernanceAssignmentCollection, ContentGovernancePolicy, ContentGovernancePolicyCollection, ContentGovernanceProfile, ContentGovernanceProfileCollection, ContentReference, ContentReferences, ContentReview, ContentReviewCollection, ContentVersion, ContentVersionCollection, Contents, DATA_QUERY_FORBIDDEN_JSON_KEYS, DATA_QUERY_MAX_JSON_CONTAINER_ITEMS, DATA_QUERY_MAX_JSON_DEPTH, DATA_QUERY_MAX_JSON_STRING_LENGTH, DATA_QUERY_MAX_STRING_LENGTH, DATA_QUERY_MAX_WARNINGS, DATA_QUERY_MAX_WARNING_LENGTH, DEFAULT_CONTENT_BODY_FORMAT, MAX_CONTENT_QUERY_OR_BRANCHES, Mirror, THUMBNAIL_WIDE_ASPECT_RATIO, ThumbnailGenerator, assertContentQuerySchema, bodyHasImage, bodyHasThumbnail, bodyToEditorHtml, buildContentChatModelUpdates, buildContentEditorInteractionVariables, buildContentEditorSessionContext, buildContentGovernanceAssignmentKey, buildContentQuerySchema, buildContentReviewPrompt, buildDataQuerySchemaForClass, clearContentQuerySchemaCache, configureContentContributions, configureContentGovernance, contentChatMessageToJSON, contentChatSessionIsAuthorized, contentChatSessionKey, contentChatSessionMatchesContent, contentEditorAssistantContextToChatProps, contentEditorInteractionPrompt, contentEditorSessionPrompt, contentToString, createContentEditorAssistantContext, createContentEditorChatThread, editorHtmlToBody, evaluateContentPublishReadiness, evaluateContributionIntake, executeContentQuery, extractBodyImages, getAcceptedContentReviewStatuses, getContentChatAISelection, getContentContributionConfig, getContentContributionTypeConfigState, getContentGovernanceConfig, getContentReviewKind, getContentReviewPolicies, getContentReviewPolicy, getContentReviewProfile, getContentReviewProfileKeys, getContentReviewRequirements, getEffectiveContentContributionConfig, getEffectiveContentGovernanceConfig, getOrCreateContentEditorChatSession, hasStaticContentContributionType, hasStaticContentGovernancePolicy, hasStaticContentGovernanceProfile, htmlToMarkdown, inferProviderFromModel, isAssetAssociable, isMetadataAccessor, listContentEditorChatThreadMessages, loadPersistedContentContributionTypes, mergeContentQueryScope, normalizeContentTransparency, parseContentFeed, parseContentReviewResponse, placeThumbnailInBody, promptMessageOptions, removeThumbnailFromBody, renderContentBodyHtml, renderMarkdownToHtml, resetContentContributionConfig, resetContentGovernanceConfig, resolveBodyFormat, resolveBodyMainPicture, resolveConfiguredContentGovernance, resolveContentChatModelSelection, resolveContentTenantReadScope, resolveDefaultContentChatAI, resolveEffectiveContentContributionType, resolveEffectiveContentGovernance, sanitizeContentEditorAssistantFieldUpdates, sanitizeHtml, sendContentEditorChatThreadMessage, serializeContentChatMessageForUI, setBodyMainImage, smrtContentApplyCorrectionPrompt, smrtContentReviewPrompt, smrtContentThumbnailAIGeneratePrompt, stringToContent, stripHtml, syncContentFeedSource, thumbnailPlacementForSize };
6902
+ export { Article, BODY_MAIN_IMAGE_ATTRIBUTE, BODY_THUMBNAIL_ATTRIBUTE, CONTENT_QUERY_CLASS_NAME, CONTENT_QUERY_DEFAULT_PAGE_LIMIT, CONTENT_QUERY_DEFAULT_SORT, CONTENT_QUERY_EXCLUDED_FIELD_IDS, CONTENT_QUERY_IDENTITY_FIELD, CONTENT_QUERY_MAX_PAGE_LIMIT, CONTENT_QUERY_MAX_RESULT_BYTES, CONTENT_QUERY_MIN_RESULT_BYTES, Content, ContentAsset, ContentAssetCollection, ContentContribution, ContentContributionAttachment, ContentContributionAttachmentCollection, ContentContributionRevision, ContentContributionRevisionCollection, ContentContributionType, ContentContributionTypeCollection, ContentContributions, ContentContributor, ContentContributorCollection, ContentCorrection, ContentCorrectionCollection, ContentDocument, ContentFeedSource, ContentFeedSourceCollection, ContentGovernanceAssignment, ContentGovernanceAssignmentCollection, ContentGovernancePolicy, ContentGovernancePolicyCollection, ContentGovernanceProfile, ContentGovernanceProfileCollection, ContentReference, ContentReferences, ContentReview, ContentReviewCollection, ContentVersion, ContentVersionCollection, Contents, DATA_QUERY_FORBIDDEN_JSON_KEYS, DATA_QUERY_MAX_JSON_CONTAINER_ITEMS, DATA_QUERY_MAX_JSON_DEPTH, DATA_QUERY_MAX_JSON_STRING_LENGTH, DATA_QUERY_MAX_STRING_LENGTH, DATA_QUERY_MAX_WARNINGS, DATA_QUERY_MAX_WARNING_LENGTH, DEFAULT_CONTENT_BODY_FORMAT, MAX_CONTENT_QUERY_OR_BRANCHES, Mirror, THUMBNAIL_WIDE_ASPECT_RATIO, ThumbnailGenerator, assertContentQuerySchema, bodyHasImage, bodyHasThumbnail, bodyToEditorHtml, buildContentChatModelUpdates, buildContentEditorInteractionVariables, buildContentEditorSessionContext, buildContentGovernanceAssignmentKey, buildContentQuerySchema, buildContentReviewPrompt, buildDataQuerySchemaForClass, clearContentQuerySchemaCache, configureContentContributions, configureContentGovernance, contentChatMessageToJSON, contentChatSessionIsAuthorized, contentChatSessionKey, contentChatSessionMatchesContent, contentEditorAssistantContextToChatProps, contentEditorInteractionPrompt, contentEditorSessionPrompt, contentToString, createContentEditorAssistantContext, createContentEditorChatThread, editorHtmlToBody, evaluateContentPublishReadiness, evaluateContributionIntake, executeContentQuery, extractBodyImages, fetchSafeRemoteUrl, getAcceptedContentReviewStatuses, getContentChatAISelection, getContentContributionConfig, getContentContributionTypeConfigState, getContentGovernanceConfig, getContentReviewKind, getContentReviewPolicies, getContentReviewPolicy, getContentReviewProfile, getContentReviewProfileKeys, getContentReviewRequirements, getEffectiveContentContributionConfig, getEffectiveContentGovernanceConfig, getOrCreateContentEditorChatSession, hasStaticContentContributionType, hasStaticContentGovernancePolicy, hasStaticContentGovernanceProfile, htmlToMarkdown, inferProviderFromModel, isAssetAssociable, isMetadataAccessor, listContentEditorChatThreadMessages, loadPersistedContentContributionTypes, mergeContentQueryScope, normalizeContentTransparency, parseContentFeed, parseContentReviewResponse, placeThumbnailInBody, promptMessageOptions, removeThumbnailFromBody, renderContentBodyHtml, renderMarkdownToHtml, resetContentContributionConfig, resetContentGovernanceConfig, resolveBodyFormat, resolveBodyMainPicture, resolveConfiguredContentGovernance, resolveContentChatModelSelection, resolveContentTenantReadScope, resolveDefaultContentChatAI, resolveEffectiveContentContributionType, resolveEffectiveContentGovernance, sanitizeContentEditorAssistantFieldUpdates, sanitizeHtml, sendContentEditorChatThreadMessage, serializeContentChatMessageForUI, setBodyMainImage, smrtContentApplyCorrectionPrompt, smrtContentReviewPrompt, smrtContentThumbnailAIGeneratePrompt, stringToContent, stripHtml, syncContentFeedSource, thumbnailPlacementForSize };
7040
6903
 
7041
6904
  //# sourceMappingURL=index.js.map