@okf/ootils 1.44.2 → 1.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/node.js CHANGED
@@ -442,6 +442,43 @@ var init_GLOBAL_BULLMQ_CONFIG = __esm({
442
442
  maxStalledCount: 3
443
443
  }
444
444
  },
445
+ /**
446
+ * Collab-editing session-boundary side effects for CONTENT docs.
447
+ * Enqueued by okf-sub's collab service when a field lock releases / the
448
+ * last editor leaves a live doc; the worker calls okf-be's internal
449
+ * contentDocCollabSessionSideEffects endpoint (tag-rename sync, chunks/annos
450
+ * producers, Elastic sync, cache invalidations, analytics).
451
+ * Queued (rather than fire-and-forget HTTP from the boundary) for retry
452
+ * ability + Bullboard trackability — a failed boundary would otherwise be
453
+ * silently lost when the doc unloads. Steps are idempotent except
454
+ * analytics, which runs LAST so retries only duplicate it on a
455
+ * lost-response network edge.
456
+ */
457
+ CONTENT_DOC_COLAB_SESH_SIDE_EFFECTS_QUEUE: {
458
+ id: "content-doc-colab-sesh-side-effects-queue",
459
+ queueConfig: {
460
+ defaultJobOptions: {
461
+ attempts: 3,
462
+ backoff: {
463
+ type: "exponential",
464
+ delay: 5e3
465
+ },
466
+ removeOnComplete: 50,
467
+ removeOnFail: 200
468
+ },
469
+ streams: {
470
+ events: {
471
+ maxLen: 1e3
472
+ // SockerIOService QueueEvents tails this stream for progress tracking; trimming at 10 dropped completion events mid-burst (stuck FE tracker). Entries are small now that job returnvalues are trimmed, so 1000 is cheap.
473
+ }
474
+ }
475
+ },
476
+ workerConfig: {
477
+ concurrency: 10,
478
+ lockDuration: 9e4,
479
+ maxStalledCount: 3
480
+ }
481
+ },
445
482
  SARVAM_TRANSCRIPTION_QUEUE: {
446
483
  id: "sarvam-transcription-queue",
447
484
  queueConfig: {
@@ -2386,15 +2423,19 @@ __export(node_exports, {
2386
2423
  BaseWorker: () => import_BaseWorker.BaseWorker,
2387
2424
  BlockRegistry: () => BlockRegistry,
2388
2425
  CHUNKING_PRESETS: () => CHUNKING_PRESETS,
2426
+ COLLAB_SYSTEM_PATH_REGEX: () => COLLAB_SYSTEM_PATH_REGEX,
2389
2427
  ChunksElasticSyncProducer: () => import_ChunksElasticSyncProducer.ChunksElasticSyncProducer,
2390
2428
  ContentElasticSyncProducer: () => import_ContentElasticSyncProducer.ContentElasticSyncProducer,
2429
+ DOC_IN_LIVE_COLLAB_SESSION_ERROR: () => DOC_IN_LIVE_COLLAB_SESSION_ERROR,
2391
2430
  ELASTIC_MAPPING_PRESETS: () => ELASTIC_MAPPING_PRESETS,
2392
2431
  ElasticSearchConnector: () => import_ElasticSearchConnector.ElasticSearchConnector,
2393
2432
  FILTER_IDS: () => FILTER_IDS,
2394
2433
  GET_GLOBAL_BULLMQ_CONFIG: () => import_GET_GLOBAL_BULLMQ_CONFIG.GET_GLOBAL_BULLMQ_CONFIG,
2395
2434
  GeneratedEntitiesSchema: () => GeneratedEntities_default,
2396
2435
  GeneratedTopicsSchema: () => GeneratedTopics_default,
2436
+ LIVE_COLLAB_DEFER_MS: () => LIVE_COLLAB_DEFER_MS,
2397
2437
  LIVE_COLLAB_DOC_REFRESH_MS: () => LIVE_COLLAB_DOC_REFRESH_MS,
2438
+ LIVE_COLLAB_MAX_DEFERRALS: () => LIVE_COLLAB_MAX_DEFERRALS,
2398
2439
  MONGO_SCHEMA_PRESETS: () => MONGO_SCHEMA_PRESETS,
2399
2440
  MongoConnector: () => import_MongoConnector3.MongoConnector,
2400
2441
  PlatformConfigsSchema: () => PlatformConfigs_default,
@@ -2452,6 +2493,7 @@ __export(node_exports, {
2452
2493
  getTplModelByTenant: () => import_getModelByTenant4.getTplModelByTenant,
2453
2494
  getTypesForSchemaFromTpl: () => getTypesForSchemaFromTpl,
2454
2495
  getVal: () => getVal,
2496
+ isCollabEditableBlock: () => isCollabEditableBlock,
2455
2497
  isLiveCollabDoc: () => isLiveCollabDoc,
2456
2498
  isTplAnnotationEnabled: () => isTplAnnotationEnabled,
2457
2499
  markLiveCollabDoc: () => markLiveCollabDoc,
@@ -3331,6 +3373,10 @@ var mergeAnnoDataIntoAnnotationsTags = ({
3331
3373
  return newConsolidated;
3332
3374
  };
3333
3375
 
3376
+ // src/collab/isCollabEditableBlock.js
3377
+ var COLLAB_SYSTEM_PATH_REGEX = /(^|\.)kp_/;
3378
+ var isCollabEditableBlock = (block) => !!block?.valuePath && block.valuePath !== "." && !COLLAB_SYSTEM_PATH_REGEX.test(block.valuePath);
3379
+
3334
3380
  // src/utils/parseSpecialConfigSyntax.ts
3335
3381
  var parseSpecialConfigSyntax = ({
3336
3382
  config,
@@ -4121,6 +4167,24 @@ var processAuthorAndCommonFilters = (allTpls, filterScopes, annoEnabledBlocks =
4121
4167
  filterType: "dateRangeType",
4122
4168
  valuePath: "kp_date_published"
4123
4169
  }
4170
+ },
4171
+ // "Documents" filter — narrows results to specific chosen documents of the
4172
+ // datasets in view, matched on their own _id. Options list those datasets'
4173
+ // documents by title (documentsType fetch, which uses the ambient contentTypes);
4174
+ // the backend matches { _id: { $in: [ids] } } via target valuePath "_id"
4175
+ // (getValuePathQuery ObjectId-casts any `_id`-ending path).
4176
+ {
4177
+ filterId: "documentsFilter",
4178
+ blockId: "documentsFilter",
4179
+ display: "Documents",
4180
+ value: "documents",
4181
+ filterKey: generateFilterKey({
4182
+ filterType: "valuePathType",
4183
+ valuePath: "_id",
4184
+ scope: "doc"
4185
+ }),
4186
+ source: { filterType: "documentsType", scope: "tags" },
4187
+ target: { filterType: "valuePathType", valuePath: "_id" }
4124
4188
  }
4125
4189
  ]
4126
4190
  }] : [];
@@ -4481,12 +4545,19 @@ var _self_managed_buildDocHierarchyConfig = ({
4481
4545
  const t = allTpls.find((tp) => tp.kp_content_type === ct);
4482
4546
  if (t?.general?.content?.title) rollupDisplayMap[ct] = t.general.content.title;
4483
4547
  }
4548
+ const childByParentId = {};
4549
+ for (const r of rollupsWithParents) {
4550
+ if (r.parentFilterId && r.isTagRollup && r.source?.filterType === "tagType") {
4551
+ childByParentId[r.parentFilterId] = r;
4552
+ }
4553
+ }
4484
4554
  return {
4485
4555
  contentType: tpl.kp_content_type,
4486
4556
  display: tplData?.general?.content?.title || tpl.kp_content_type,
4487
4557
  filters: filtersWithParents,
4488
4558
  rollups: rollupsWithParents,
4489
- rollupDisplayMap
4559
+ rollupDisplayMap,
4560
+ childByParentId
4490
4561
  };
4491
4562
  });
4492
4563
  const filteredPerDataset = perDataset.filter(
@@ -5876,6 +5947,9 @@ init_models();
5876
5947
  // src/collab/liveCollabDocMarker.js
5877
5948
  var TTL_SECONDS = 300;
5878
5949
  var LIVE_COLLAB_DOC_REFRESH_MS = 12e4;
5950
+ var LIVE_COLLAB_DEFER_MS = 12e4;
5951
+ var LIVE_COLLAB_MAX_DEFERRALS = 30;
5952
+ var DOC_IN_LIVE_COLLAB_SESSION_ERROR = "aiApply_docInLiveCollabSession";
5879
5953
  var buildKey = ({ env, tenant, contentType, docId }) => `${env || RedisCacheConnector.getEnv()}:liveCollabDoc:${tenant}:${contentType}:${docId}`;
5880
5954
  var markLiveCollabDoc = async ({ tenant, contentType, docId, env }) => {
5881
5955
  const client = RedisCacheConnector.getClient(env || RedisCacheConnector.getEnv());
@@ -5911,15 +5985,19 @@ var import_GET_GLOBAL_BULLMQ_CONFIG = __toESM(require_GET_GLOBAL_BULLMQ_CONFIG()
5911
5985
  BaseWorker,
5912
5986
  BlockRegistry,
5913
5987
  CHUNKING_PRESETS,
5988
+ COLLAB_SYSTEM_PATH_REGEX,
5914
5989
  ChunksElasticSyncProducer,
5915
5990
  ContentElasticSyncProducer,
5991
+ DOC_IN_LIVE_COLLAB_SESSION_ERROR,
5916
5992
  ELASTIC_MAPPING_PRESETS,
5917
5993
  ElasticSearchConnector,
5918
5994
  FILTER_IDS,
5919
5995
  GET_GLOBAL_BULLMQ_CONFIG,
5920
5996
  GeneratedEntitiesSchema,
5921
5997
  GeneratedTopicsSchema,
5998
+ LIVE_COLLAB_DEFER_MS,
5922
5999
  LIVE_COLLAB_DOC_REFRESH_MS,
6000
+ LIVE_COLLAB_MAX_DEFERRALS,
5923
6001
  MONGO_SCHEMA_PRESETS,
5924
6002
  MongoConnector,
5925
6003
  PlatformConfigsSchema,
@@ -5977,6 +6055,7 @@ var import_GET_GLOBAL_BULLMQ_CONFIG = __toESM(require_GET_GLOBAL_BULLMQ_CONFIG()
5977
6055
  getTplModelByTenant,
5978
6056
  getTypesForSchemaFromTpl,
5979
6057
  getVal,
6058
+ isCollabEditableBlock,
5980
6059
  isLiveCollabDoc,
5981
6060
  isTplAnnotationEnabled,
5982
6061
  markLiveCollabDoc,
package/dist/node.mjs CHANGED
@@ -447,6 +447,43 @@ var init_GLOBAL_BULLMQ_CONFIG = __esm({
447
447
  maxStalledCount: 3
448
448
  }
449
449
  },
450
+ /**
451
+ * Collab-editing session-boundary side effects for CONTENT docs.
452
+ * Enqueued by okf-sub's collab service when a field lock releases / the
453
+ * last editor leaves a live doc; the worker calls okf-be's internal
454
+ * contentDocCollabSessionSideEffects endpoint (tag-rename sync, chunks/annos
455
+ * producers, Elastic sync, cache invalidations, analytics).
456
+ * Queued (rather than fire-and-forget HTTP from the boundary) for retry
457
+ * ability + Bullboard trackability — a failed boundary would otherwise be
458
+ * silently lost when the doc unloads. Steps are idempotent except
459
+ * analytics, which runs LAST so retries only duplicate it on a
460
+ * lost-response network edge.
461
+ */
462
+ CONTENT_DOC_COLAB_SESH_SIDE_EFFECTS_QUEUE: {
463
+ id: "content-doc-colab-sesh-side-effects-queue",
464
+ queueConfig: {
465
+ defaultJobOptions: {
466
+ attempts: 3,
467
+ backoff: {
468
+ type: "exponential",
469
+ delay: 5e3
470
+ },
471
+ removeOnComplete: 50,
472
+ removeOnFail: 200
473
+ },
474
+ streams: {
475
+ events: {
476
+ maxLen: 1e3
477
+ // SockerIOService QueueEvents tails this stream for progress tracking; trimming at 10 dropped completion events mid-burst (stuck FE tracker). Entries are small now that job returnvalues are trimmed, so 1000 is cheap.
478
+ }
479
+ }
480
+ },
481
+ workerConfig: {
482
+ concurrency: 10,
483
+ lockDuration: 9e4,
484
+ maxStalledCount: 3
485
+ }
486
+ },
450
487
  SARVAM_TRANSCRIPTION_QUEUE: {
451
488
  id: "sarvam-transcription-queue",
452
489
  queueConfig: {
@@ -3244,6 +3281,10 @@ var mergeAnnoDataIntoAnnotationsTags = ({
3244
3281
  return newConsolidated;
3245
3282
  };
3246
3283
 
3284
+ // src/collab/isCollabEditableBlock.js
3285
+ var COLLAB_SYSTEM_PATH_REGEX = /(^|\.)kp_/;
3286
+ var isCollabEditableBlock = (block) => !!block?.valuePath && block.valuePath !== "." && !COLLAB_SYSTEM_PATH_REGEX.test(block.valuePath);
3287
+
3247
3288
  // src/utils/parseSpecialConfigSyntax.ts
3248
3289
  var parseSpecialConfigSyntax = ({
3249
3290
  config,
@@ -4034,6 +4075,24 @@ var processAuthorAndCommonFilters = (allTpls, filterScopes, annoEnabledBlocks =
4034
4075
  filterType: "dateRangeType",
4035
4076
  valuePath: "kp_date_published"
4036
4077
  }
4078
+ },
4079
+ // "Documents" filter — narrows results to specific chosen documents of the
4080
+ // datasets in view, matched on their own _id. Options list those datasets'
4081
+ // documents by title (documentsType fetch, which uses the ambient contentTypes);
4082
+ // the backend matches { _id: { $in: [ids] } } via target valuePath "_id"
4083
+ // (getValuePathQuery ObjectId-casts any `_id`-ending path).
4084
+ {
4085
+ filterId: "documentsFilter",
4086
+ blockId: "documentsFilter",
4087
+ display: "Documents",
4088
+ value: "documents",
4089
+ filterKey: generateFilterKey({
4090
+ filterType: "valuePathType",
4091
+ valuePath: "_id",
4092
+ scope: "doc"
4093
+ }),
4094
+ source: { filterType: "documentsType", scope: "tags" },
4095
+ target: { filterType: "valuePathType", valuePath: "_id" }
4037
4096
  }
4038
4097
  ]
4039
4098
  }] : [];
@@ -4394,12 +4453,19 @@ var _self_managed_buildDocHierarchyConfig = ({
4394
4453
  const t = allTpls.find((tp) => tp.kp_content_type === ct);
4395
4454
  if (t?.general?.content?.title) rollupDisplayMap[ct] = t.general.content.title;
4396
4455
  }
4456
+ const childByParentId = {};
4457
+ for (const r of rollupsWithParents) {
4458
+ if (r.parentFilterId && r.isTagRollup && r.source?.filterType === "tagType") {
4459
+ childByParentId[r.parentFilterId] = r;
4460
+ }
4461
+ }
4397
4462
  return {
4398
4463
  contentType: tpl.kp_content_type,
4399
4464
  display: tplData?.general?.content?.title || tpl.kp_content_type,
4400
4465
  filters: filtersWithParents,
4401
4466
  rollups: rollupsWithParents,
4402
- rollupDisplayMap
4467
+ rollupDisplayMap,
4468
+ childByParentId
4403
4469
  };
4404
4470
  });
4405
4471
  const filteredPerDataset = perDataset.filter(
@@ -5789,6 +5855,9 @@ init_models();
5789
5855
  // src/collab/liveCollabDocMarker.js
5790
5856
  var TTL_SECONDS = 300;
5791
5857
  var LIVE_COLLAB_DOC_REFRESH_MS = 12e4;
5858
+ var LIVE_COLLAB_DEFER_MS = 12e4;
5859
+ var LIVE_COLLAB_MAX_DEFERRALS = 30;
5860
+ var DOC_IN_LIVE_COLLAB_SESSION_ERROR = "aiApply_docInLiveCollabSession";
5792
5861
  var buildKey = ({ env, tenant, contentType, docId }) => `${env || RedisCacheConnector.getEnv()}:liveCollabDoc:${tenant}:${contentType}:${docId}`;
5793
5862
  var markLiveCollabDoc = async ({ tenant, contentType, docId, env }) => {
5794
5863
  const client = RedisCacheConnector.getClient(env || RedisCacheConnector.getEnv());
@@ -5841,15 +5910,19 @@ export {
5841
5910
  export_BaseWorker as BaseWorker,
5842
5911
  BlockRegistry,
5843
5912
  CHUNKING_PRESETS,
5913
+ COLLAB_SYSTEM_PATH_REGEX,
5844
5914
  export_ChunksElasticSyncProducer as ChunksElasticSyncProducer,
5845
5915
  export_ContentElasticSyncProducer as ContentElasticSyncProducer,
5916
+ DOC_IN_LIVE_COLLAB_SESSION_ERROR,
5846
5917
  ELASTIC_MAPPING_PRESETS,
5847
5918
  export_ElasticSearchConnector as ElasticSearchConnector,
5848
5919
  FILTER_IDS,
5849
5920
  export_GET_GLOBAL_BULLMQ_CONFIG as GET_GLOBAL_BULLMQ_CONFIG,
5850
5921
  GeneratedEntities_default as GeneratedEntitiesSchema,
5851
5922
  GeneratedTopics_default as GeneratedTopicsSchema,
5923
+ LIVE_COLLAB_DEFER_MS,
5852
5924
  LIVE_COLLAB_DOC_REFRESH_MS,
5925
+ LIVE_COLLAB_MAX_DEFERRALS,
5853
5926
  MONGO_SCHEMA_PRESETS,
5854
5927
  export_MongoConnector as MongoConnector,
5855
5928
  PlatformConfigs_default as PlatformConfigsSchema,
@@ -5907,6 +5980,7 @@ export {
5907
5980
  export_getTplModelByTenant as getTplModelByTenant,
5908
5981
  getTypesForSchemaFromTpl,
5909
5982
  getVal,
5983
+ isCollabEditableBlock,
5910
5984
  isLiveCollabDoc,
5911
5985
  isTplAnnotationEnabled,
5912
5986
  markLiveCollabDoc,
@@ -767,7 +767,7 @@ declare namespace BASE_BULLMQ_CONFIG {
767
767
  }
768
768
  export { workerConfig_11 as workerConfig };
769
769
  }
770
- namespace SARVAM_TRANSCRIPTION_QUEUE {
770
+ namespace CONTENT_DOC_COLAB_SESH_SIDE_EFFECTS_QUEUE {
771
771
  let id_12: string;
772
772
  export { id_12 as id };
773
773
  export namespace queueConfig_12 {
@@ -807,7 +807,7 @@ declare namespace BASE_BULLMQ_CONFIG {
807
807
  }
808
808
  export { workerConfig_12 as workerConfig };
809
809
  }
810
- namespace INTERCOM_CONVERSATIONS_QUEUE {
810
+ namespace SARVAM_TRANSCRIPTION_QUEUE {
811
811
  let id_13: string;
812
812
  export { id_13 as id };
813
813
  export namespace queueConfig_13 {
@@ -847,7 +847,7 @@ declare namespace BASE_BULLMQ_CONFIG {
847
847
  }
848
848
  export { workerConfig_13 as workerConfig };
849
849
  }
850
- namespace TAG_SYNC_PLAN_QUEUE {
850
+ namespace INTERCOM_CONVERSATIONS_QUEUE {
851
851
  let id_14: string;
852
852
  export { id_14 as id };
853
853
  export namespace queueConfig_14 {
@@ -887,7 +887,7 @@ declare namespace BASE_BULLMQ_CONFIG {
887
887
  }
888
888
  export { workerConfig_14 as workerConfig };
889
889
  }
890
- namespace TAG_SYNC_BATCH_QUEUE {
890
+ namespace TAG_SYNC_PLAN_QUEUE {
891
891
  let id_15: string;
892
892
  export { id_15 as id };
893
893
  export namespace queueConfig_15 {
@@ -927,11 +927,13 @@ declare namespace BASE_BULLMQ_CONFIG {
927
927
  }
928
928
  export { workerConfig_15 as workerConfig };
929
929
  }
930
- namespace SCHEDULED_EXTERNAL_SYNC_QUEUE {
930
+ namespace TAG_SYNC_BATCH_QUEUE {
931
931
  let id_16: string;
932
932
  export { id_16 as id };
933
933
  export namespace queueConfig_16 {
934
934
  export namespace defaultJobOptions_16 {
935
+ let attempts_16: number;
936
+ export { attempts_16 as attempts };
935
937
  export namespace backoff_16 {
936
938
  let type_16: string;
937
939
  export { type_16 as type };
@@ -939,8 +941,6 @@ declare namespace BASE_BULLMQ_CONFIG {
939
941
  export { delay_16 as delay };
940
942
  }
941
943
  export { backoff_16 as backoff };
942
- let attempts_16: number;
943
- export { attempts_16 as attempts };
944
944
  let removeOnComplete_16: number;
945
945
  export { removeOnComplete_16 as removeOnComplete };
946
946
  let removeOnFail_16: number;
@@ -967,13 +967,11 @@ declare namespace BASE_BULLMQ_CONFIG {
967
967
  }
968
968
  export { workerConfig_16 as workerConfig };
969
969
  }
970
- namespace REINDEX_QUEUE {
970
+ namespace SCHEDULED_EXTERNAL_SYNC_QUEUE {
971
971
  let id_17: string;
972
972
  export { id_17 as id };
973
973
  export namespace queueConfig_17 {
974
974
  export namespace defaultJobOptions_17 {
975
- let attempts_17: number;
976
- export { attempts_17 as attempts };
977
975
  export namespace backoff_17 {
978
976
  let type_17: string;
979
977
  export { type_17 as type };
@@ -981,8 +979,8 @@ declare namespace BASE_BULLMQ_CONFIG {
981
979
  export { delay_17 as delay };
982
980
  }
983
981
  export { backoff_17 as backoff };
984
- let delay_18: number;
985
- export { delay_18 as delay };
982
+ let attempts_17: number;
983
+ export { attempts_17 as attempts };
986
984
  let removeOnComplete_17: number;
987
985
  export { removeOnComplete_17 as removeOnComplete };
988
986
  let removeOnFail_17: number;
@@ -1009,6 +1007,48 @@ declare namespace BASE_BULLMQ_CONFIG {
1009
1007
  }
1010
1008
  export { workerConfig_17 as workerConfig };
1011
1009
  }
1010
+ namespace REINDEX_QUEUE {
1011
+ let id_18: string;
1012
+ export { id_18 as id };
1013
+ export namespace queueConfig_18 {
1014
+ export namespace defaultJobOptions_18 {
1015
+ let attempts_18: number;
1016
+ export { attempts_18 as attempts };
1017
+ export namespace backoff_18 {
1018
+ let type_18: string;
1019
+ export { type_18 as type };
1020
+ let delay_18: number;
1021
+ export { delay_18 as delay };
1022
+ }
1023
+ export { backoff_18 as backoff };
1024
+ let delay_19: number;
1025
+ export { delay_19 as delay };
1026
+ let removeOnComplete_18: number;
1027
+ export { removeOnComplete_18 as removeOnComplete };
1028
+ let removeOnFail_18: number;
1029
+ export { removeOnFail_18 as removeOnFail };
1030
+ }
1031
+ export { defaultJobOptions_18 as defaultJobOptions };
1032
+ export namespace streams_18 {
1033
+ export namespace events_18 {
1034
+ let maxLen_18: number;
1035
+ export { maxLen_18 as maxLen };
1036
+ }
1037
+ export { events_18 as events };
1038
+ }
1039
+ export { streams_18 as streams };
1040
+ }
1041
+ export { queueConfig_18 as queueConfig };
1042
+ export namespace workerConfig_18 {
1043
+ let concurrency_18: number;
1044
+ export { concurrency_18 as concurrency };
1045
+ let lockDuration_18: number;
1046
+ export { lockDuration_18 as lockDuration };
1047
+ let maxStalledCount_18: number;
1048
+ export { maxStalledCount_18 as maxStalledCount };
1049
+ }
1050
+ export { workerConfig_18 as workerConfig };
1051
+ }
1012
1052
  }
1013
1053
 
1014
1054
  interface PlatformContextContentItem {
@@ -1054,6 +1094,24 @@ interface MergeParams {
1054
1094
  */
1055
1095
  declare const mergeAnnoDataIntoAnnotationsTags: ({ prevObj, newLexValue, thisBlockValuePath, author, }: MergeParams) => any;
1056
1096
 
1097
+ /**
1098
+ * Is this tpl block a collab-editable field? ONE definition, used by BOTH
1099
+ * sides so they can never disagree:
1100
+ * - okf-sub loadContentDocument builds the server-side editable allowlist
1101
+ * from it (the flush drops writes outside that list)
1102
+ * - okf-fe ViewBlockGenerator derives per-block editability from it
1103
+ *
1104
+ * Editable = binds to a real content path. Exclusions:
1105
+ * - no valuePath (display-only blocks) / the odd "." valuePath some legacy
1106
+ * tpls carry (see getTypesForSchemaFromTpl, which skips it too)
1107
+ * - kp_-prefixed segments (publish status, lifecycle dates, author refs —
1108
+ * machinery, not content). NOTE: non-block system fields (lastActivity,
1109
+ * tagId...) are excluded by construction anyway — they're never tpl
1110
+ * blocks; this regex only guards block-defined kp_ paths.
1111
+ */
1112
+ declare const COLLAB_SYSTEM_PATH_REGEX: RegExp;
1113
+ declare function isCollabEditableBlock(block: any): boolean;
1114
+
1057
1115
  declare const parseSpecialConfigSyntax: ({ config, content, returnUndefinedIfReplacementWordNotFound }: {
1058
1116
  config: string | object;
1059
1117
  content: Record<string, any>;
@@ -1276,6 +1334,21 @@ declare const processAuthorAndCommonFilters: (allTpls: any[], filterScopes: stri
1276
1334
  filterType: string;
1277
1335
  valuePath: string;
1278
1336
  };
1337
+ } | {
1338
+ filterId: string;
1339
+ blockId: string;
1340
+ display: string;
1341
+ value: string;
1342
+ filterKey: string | undefined;
1343
+ source: {
1344
+ filterType: string;
1345
+ scope: string;
1346
+ profileTypes?: undefined;
1347
+ };
1348
+ target: {
1349
+ filterType: string;
1350
+ valuePath: string;
1351
+ };
1279
1352
  })[];
1280
1353
  }[];
1281
1354
  };
@@ -1405,6 +1478,7 @@ declare const _self_managed_buildDocHierarchyConfig: ({ combinedDocumentBlocks,
1405
1478
  filters: any[];
1406
1479
  rollups: any[];
1407
1480
  rollupDisplayMap: Record<string, string>;
1481
+ childByParentId: Record<string, any>;
1408
1482
  }[];
1409
1483
  };
1410
1484
  target: {
@@ -1565,6 +1639,7 @@ declare const autoGenFilterConfigsFromTpl: ({ selectedTpls, allTpls, filterScope
1565
1639
  filters: any[];
1566
1640
  rollups: any[];
1567
1641
  rollupDisplayMap: Record<string, string>;
1642
+ childByParentId: Record<string, any>;
1568
1643
  }[];
1569
1644
  };
1570
1645
  target: {
@@ -1631,6 +1706,21 @@ declare const autoGenFilterConfigsFromTpl: ({ selectedTpls, allTpls, filterScope
1631
1706
  filterType: string;
1632
1707
  valuePath: string;
1633
1708
  };
1709
+ } | {
1710
+ filterId: string;
1711
+ blockId: string;
1712
+ display: string;
1713
+ value: string;
1714
+ filterKey: string | undefined;
1715
+ source: {
1716
+ filterType: string;
1717
+ scope: string;
1718
+ profileTypes?: undefined;
1719
+ };
1720
+ target: {
1721
+ filterType: string;
1722
+ valuePath: string;
1723
+ };
1634
1724
  })[];
1635
1725
  })[];
1636
1726
  } | null)[];
@@ -1970,4 +2060,4 @@ declare class BlockRegistry {
1970
2060
  /** Singleton instance — the one registry shared across the app. */
1971
2061
  declare const blockRegistry: BlockRegistry;
1972
2062
 
1973
- export { BASE_BULLMQ_CONFIG, type BlockCapabilities, type BlockDef, BlockRegistry, CHUNKING_PRESETS, ELASTIC_MAPPING_PRESETS, FILTER_IDS, MONGO_SCHEMA_PRESETS, TEMP_removeDuplicateFilters, UI_CONTENT, _self_managed_buildAnnoHierarchyConfig, _self_managed_buildDocHierarchyConfig, _self_managed_getFixedAnnoRollupBlocks, _self_managed_getFixedAnnoTagBlock, autoGenFilterConfigsFromTpl, blockRegistry, buildFilterConfigurations, collectMarkIdsInOrder, compareAndGroupBlocks, deleteVal, extractAllBlocksFromTpl, extractAndOrganizeBlocks, genCleanCamelCaseId, genTagId, generateFilterKey, getAnnoFilterBucketKey, getFilterKeyForBlock, getPlatformContextContent, getRollupPossibilities, getRoutePathToContentTypeLanding, getRoutePathToEditContent, getRoutePathToModerateContent, getRoutePathToMyContent, getRoutePathToPublishedContent, getRoutePathToReviewDashboard, getRoutePathToTCI, getRoutePathToTagCategoryLanding, getVal, isTplAnnotationEnabled, mergeAnnoDataIntoAnnotationsTags, parseSpecialConfigSyntax, plainTextToLexical, processAuthorAndCommonFilters, _recursExtractBlocks as recursivelyExtractBlocks, segrigateDocs, setVal, toArray };
2063
+ export { BASE_BULLMQ_CONFIG, type BlockCapabilities, type BlockDef, BlockRegistry, CHUNKING_PRESETS, COLLAB_SYSTEM_PATH_REGEX, ELASTIC_MAPPING_PRESETS, FILTER_IDS, MONGO_SCHEMA_PRESETS, TEMP_removeDuplicateFilters, UI_CONTENT, _self_managed_buildAnnoHierarchyConfig, _self_managed_buildDocHierarchyConfig, _self_managed_getFixedAnnoRollupBlocks, _self_managed_getFixedAnnoTagBlock, autoGenFilterConfigsFromTpl, blockRegistry, buildFilterConfigurations, collectMarkIdsInOrder, compareAndGroupBlocks, deleteVal, extractAllBlocksFromTpl, extractAndOrganizeBlocks, genCleanCamelCaseId, genTagId, generateFilterKey, getAnnoFilterBucketKey, getFilterKeyForBlock, getPlatformContextContent, getRollupPossibilities, getRoutePathToContentTypeLanding, getRoutePathToEditContent, getRoutePathToModerateContent, getRoutePathToMyContent, getRoutePathToPublishedContent, getRoutePathToReviewDashboard, getRoutePathToTCI, getRoutePathToTagCategoryLanding, getVal, isCollabEditableBlock, isTplAnnotationEnabled, mergeAnnoDataIntoAnnotationsTags, parseSpecialConfigSyntax, plainTextToLexical, processAuthorAndCommonFilters, _recursExtractBlocks as recursivelyExtractBlocks, segrigateDocs, setVal, toArray };