@palantir/pack.state.foundry 0.10.0 → 0.12.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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @palantir/pack.state.foundry@0.10.0 lint /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.12.0 lint /home/runner/work/pack/pack/packages/state/foundry
3
3
  > eslint ./src && dprint check --config $(find-up dprint.json) --allow-no-files
4
4
 
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.state.foundry@0.10.0 transpileBrowser /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.12.0 transpileBrowser /home/runner/work/pack/pack/packages/state/foundry
3
3
  > monorepo-transpile -f esm -m bundle -t browser
4
4
 
5
5
  [baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.state.foundry@0.10.0 transpileCjs /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.12.0 transpileCjs /home/runner/work/pack/pack/packages/state/foundry
3
3
  > monorepo-transpile -f cjs -m bundle -t node
4
4
 
5
5
  [baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.state.foundry@0.10.0 transpileEsm /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.12.0 transpileEsm /home/runner/work/pack/pack/packages/state/foundry
3
3
  > monorepo-transpile -f esm -m bundle -t node
4
4
 
5
5
  [baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.state.foundry@0.10.0 transpileTypes /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.12.0 transpileTypes /home/runner/work/pack/pack/packages/state/foundry
3
3
  > monorepo-transpile -f esm -m types -t node
4
4
 
5
5
  👍
@@ -1,4 +1,4 @@
1
1
 
2
- > @palantir/pack.state.foundry@0.10.0 typecheck /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.12.0 typecheck /home/runner/work/pack/pack/packages/state/foundry
3
3
  > tsc --noEmit --emitDeclarationOnly false
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # @palantir/pack.state.foundry
2
2
 
3
+ ## 0.12.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 646de2f: Bundle cometd directly into pack.state.foundry-event to avoid issues with different loaders needing to understand its module packaging
8
+ - 45f9caf: add client version to subscriptions
9
+ - 2a2b839: fix cometd dev mode resolution
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [646de2f]
14
+ - Updated dependencies [45f9caf]
15
+ - Updated dependencies [2a2b839]
16
+ - @palantir/pack.state.foundry-event@0.11.0
17
+
18
+ ## 0.11.0
19
+
20
+ ### Minor Changes
21
+
22
+ - cd09e6f: Add metadata update channel
23
+
24
+ ### Patch Changes
25
+
26
+ - Updated dependencies [cd09e6f]
27
+ - @palantir/pack.state.foundry-event@0.10.0
28
+
3
29
  ## 0.10.0
4
30
 
5
31
  ### Minor Changes
@@ -1,7 +1,7 @@
1
1
  import { Documents } from '@osdk/foundry.pack';
2
2
  import { getOntologyRid, assertNever } from '@palantir/pack.core';
3
- import { PresenceEventDataType, ActivityEventDataType, getMetadata } from '@palantir/pack.document-schema.model-types';
4
- import { BaseYjsDocumentService, DocumentLoadStatus, createDocumentServiceConfig } from '@palantir/pack.state.core';
3
+ import { PresenceEventDataType, getMetadata, ActivityEventDataType } from '@palantir/pack.document-schema.model-types';
4
+ import { createDocumentServiceConfig, BaseYjsDocumentService, DocumentLoadStatus } from '@palantir/pack.state.core';
5
5
  import { createFoundryEventService } from '@palantir/pack.state.foundry-event';
6
6
  import { invalidUserRef } from '@palantir/pack.auth';
7
7
 
@@ -164,7 +164,7 @@ function createFoundryDocumentServiceConfig(config = {}) {
164
164
  function internalCreateFoundryDocumentService(app, config, eventService) {
165
165
  return new FoundryDocumentService(app, config, createFoundryEventService(app));
166
166
  }
167
- var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocumentService {
167
+ var FoundryDocumentService = class extends BaseYjsDocumentService {
168
168
  constructor(app, config, eventService) {
169
169
  super(app, app.config.logger.child({}, {
170
170
  level: "debug",
@@ -298,6 +298,15 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
298
298
  this.updateMetadataStatus(internalDoc, docRef, {
299
299
  load: DocumentLoadStatus.LOADED
300
300
  });
301
+ this.eventService.subscribeToMetadataUpdates(docRef.id, (_event) => {
302
+ if (!internalDoc.metadataUpdateUnsubscribed) {
303
+ this.refetchMetadata(docRef);
304
+ }
305
+ }).catch((e) => {
306
+ this.logger.error("Failed to subscribe to metadata updates", e, {
307
+ docId: docRef.id
308
+ });
309
+ });
301
310
  }).catch((e) => {
302
311
  if (!this.documents.has(docRef.id)) {
303
312
  return;
@@ -315,11 +324,12 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
315
324
  if (internalDoc.syncSession != null) {
316
325
  throw new Error("Document data subscription already opened");
317
326
  }
318
- internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, (status) => {
327
+ internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, getMetadata(docRef.schema).version, (status) => {
319
328
  this.updateDataStatus(internalDoc, docRef, status);
320
329
  });
321
330
  }
322
- onMetadataSubscriptionClosed(_internalDoc, _docRef) {
331
+ onMetadataSubscriptionClosed(internalDoc, _docRef) {
332
+ internalDoc.metadataUpdateUnsubscribed = true;
323
333
  }
324
334
  onDataSubscriptionClosed(internalDoc, _docRef) {
325
335
  if (internalDoc.syncSession) {
@@ -332,11 +342,10 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
332
342
  const unsubscribeFn = () => {
333
343
  unsubscribed = true;
334
344
  };
335
- this.eventService.subscribeToActivityUpdates(docRef.id, (foundryEvent) => {
345
+ this.eventService.subscribeToActivityUpdates(docRef.id, getMetadata(docRef.schema).version, (foundryEvent) => {
336
346
  if (!unsubscribed) {
337
347
  const localEvent = getActivityEvent(docRef.schema, foundryEvent);
338
348
  if (localEvent != null) {
339
- this.updateMetadataFromActivityEvent(docRef, localEvent);
340
349
  callback(docRef, localEvent);
341
350
  }
342
351
  }
@@ -347,12 +356,6 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
347
356
  });
348
357
  return unsubscribeFn;
349
358
  }
350
- static METADATA_ACTIVITY_EVENT_TYPES = /* @__PURE__ */ new Set([ActivityEventDataType.DOCUMENT_RENAME, ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE, ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE, ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE]);
351
- updateMetadataFromActivityEvent(docRef, event) {
352
- if (_FoundryDocumentService.METADATA_ACTIVITY_EVENT_TYPES.has(event.eventData.type)) {
353
- this.refetchMetadata(docRef);
354
- }
355
- }
356
359
  refetchMetadata(docRef) {
357
360
  if (!this.documents.has(docRef.id)) {
358
361
  return;
@@ -386,7 +389,7 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
386
389
  const unsubscribeFn = () => {
387
390
  unsubscribed = true;
388
391
  };
389
- this.eventService.subscribeToPresenceUpdates(docRef.id, (foundryUpdate) => {
392
+ this.eventService.subscribeToPresenceUpdates(docRef.id, getMetadata(docRef.schema).version, (foundryUpdate) => {
390
393
  if (!unsubscribed) {
391
394
  const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);
392
395
  callback(docRef, localEvent);
@@ -400,7 +403,7 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
400
403
  }
401
404
  updateCustomPresence(docRef, model, eventData, options) {
402
405
  const eventType = getMetadata(model).name;
403
- void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, options).catch((e) => {
406
+ void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, getMetadata(docRef.schema).version, options).catch((e) => {
404
407
  this.logger.error("Failed to publish custom presence", e, {
405
408
  docId: docRef.id
406
409
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/eventMappers.ts","../../src/FoundryDocumentService.ts"],"names":["config","ActivityEventDataType"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { invalidUserRef } from \"@palantir/pack.auth\";\nimport { ActivityEventDataType, PresenceEventDataType } from \"@palantir/pack.document-schema.model-types\";\nexport function getActivityEvent(documentSchema, foundryEvent) {\n // TODO: need to handle deletes and ensure exhaustive handling\n if (foundryEvent.type !== \"activityCreated\") {\n return undefined;\n }\n const {\n activityEvent\n } = foundryEvent;\n const eventData = getActivityEventData(documentSchema, activityEvent);\n return {\n aggregationKey: activityEvent.aggregationKey,\n createdBy: activityEvent.createdBy,\n createdInstant: new Date(activityEvent.createdTime).getTime(),\n eventData,\n eventId: activityEvent.eventId,\n isRead: activityEvent.isRead\n };\n}\nfunction getActivityEventData(docSchema, {\n eventData\n}) {\n switch (eventData.type) {\n case \"documentCreate\":\n return {\n initialMandatorySecurity: {\n classification: eventData.initialMandatorySecurity?.classification,\n markings: eventData.initialMandatorySecurity?.markings\n },\n name: eventData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n case \"documentRename\":\n return {\n newName: eventData.newName ?? \"\",\n previousName: eventData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n case \"documentDescriptionUpdate\":\n return {\n isInitial: eventData.isInitial ?? false,\n newDescription: eventData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n case \"documentMandatorySecurityUpdate\":\n return {\n newClassification: eventData.newClassification ?? [],\n newMarkings: eventData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE\n };\n case \"documentDiscretionarySecurityUpdate\":\n return {\n principalType: eventData.principalType ?? \"\",\n previousDiscretionarySecurity: eventData.previousDiscretionarySecurity,\n newDiscretionarySecurity: eventData.newDiscretionarySecurity ?? [],\n type: ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE\n };\n case \"documentCustomEvent\":\n {\n const {\n eventType,\n data\n } = eventData;\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n return {\n data: data,\n eventType,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n }\n default:\n {\n const unknownEventData = eventData;\n return {\n rawData: eventData,\n rawType: typeof unknownEventData.type === \"string\" ? unknownEventData.type : \"unknown\",\n type: ActivityEventDataType.UNKNOWN\n };\n }\n }\n}\nconst ARRIVED_DATA = {\n type: PresenceEventDataType.ARRIVED\n};\nconst DEPARTED_DATA = {\n type: PresenceEventDataType.DEPARTED\n};\nexport function getPresenceEvent(documentSchema, foundryUpdate) {\n switch (foundryUpdate.type) {\n case \"presenceChangeEvent\":\n {\n const {\n userId,\n status\n } = foundryUpdate;\n const eventData = status === \"PRESENT\" ? ARRIVED_DATA : DEPARTED_DATA;\n return {\n eventData,\n userId: userId\n };\n }\n case \"customPresenceEvent\":\n {\n const {\n userId,\n eventData,\n eventType\n } = foundryUpdate;\n const presenceEventData = getPresenceEventData(documentSchema, eventType, eventData);\n return {\n eventData: presenceEventData,\n userId: userId\n };\n }\n default:\n {\n foundryUpdate;\n const unknownUpdate = foundryUpdate;\n return {\n eventData: {\n rawData: foundryUpdate,\n rawType: typeof unknownUpdate.type === \"string\" ? unknownUpdate.type : \"unknown\",\n type: PresenceEventDataType.UNKNOWN\n },\n // FIXME: try and pull userId from message? Or just fix the platform types to have useful wrappers.\n userId: invalidUserRef().userId\n };\n }\n }\n}\nfunction getPresenceEventData(docSchema, eventType, eventData) {\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData,\n rawType: eventType,\n type: PresenceEventDataType.UNKNOWN\n };\n }\n return {\n eventData,\n model,\n type: PresenceEventDataType.CUSTOM_EVENT\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Documents } from \"@osdk/foundry.pack\";\nimport { assertNever, getOntologyRid } from \"@palantir/pack.core\";\nimport { ActivityEventDataType, getMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocumentServiceConfig, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { createFoundryEventService } from \"@palantir/pack.state.foundry-event\";\nimport { getActivityEvent, getPresenceEvent } from \"./eventMappers.js\";\nconst DEFAULT_USE_PREVIEW_API = true;\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nexport function createFoundryDocumentServiceConfig(config = {}) {\n return createDocumentServiceConfig((app, config) => internalCreateFoundryDocumentService(app, config), config);\n}\nexport function internalCreateFoundryDocumentService(app, config, eventService) {\n return new FoundryDocumentService(app, config, eventService ?? createFoundryEventService(app));\n}\nexport class FoundryDocumentService extends BaseYjsDocumentService {\n constructor(app, config, eventService) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"FoundryDocumentService\"\n }));\n this.config = config;\n this.eventService = eventService;\n }\n createInternalDoc(ref, metadata) {\n return {\n ...this.createBaseInternalDoc(ref, metadata),\n syncSession: undefined\n };\n }\n get hasMetadataSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.metadataSubscribers.size > 0);\n }\n get hasStateSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.docStateSubscribers.size > 0);\n }\n createDocument = async (metadata, schema) => {\n const {\n documentTypeName,\n name,\n parentFolderRid,\n security\n } = metadata;\n const ontologyRid = await getOntologyRid(this.app);\n const request = {\n documentTypeName: documentTypeName,\n name: name,\n ontologyRid: ontologyRid,\n security: getWireSecurity(security)\n };\n if (parentFolderRid != null) {\n request.parentFolderRid = parentFolderRid;\n }\n const createResponse = await Documents.create(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const documentId = createResponse.id;\n const docRef = this.createDocRef(documentId, schema);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n const request = {\n documentTypeName,\n requestBody: {\n query: options?.documentName != null ? {\n documentName: options.documentName\n } : undefined,\n pageSize: options?.pageSize,\n pageToken: options?.pageToken\n }\n };\n const searchResponse = await Documents.search(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n return {\n data: searchResponse.data.map(doc => ({\n createdBy: doc.createdBy,\n createdTime: doc.createdTime,\n documentTypeName: doc.documentTypeName,\n id: doc.id,\n name: doc.name,\n operations: doc.operations,\n ontologyRid: doc.ontologyRid,\n security: getLocalSecurity(doc.security),\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\n };\n updateDocument = async (docRef, update) => {\n const document = await Documents.update(this.app.config.osdkClient, docRef.id, {\n requestBody: {\n ...(update.name != null ? {\n name: update.name\n } : {}),\n ...(update.description != null ? {\n description: update.description\n } : {}),\n ...(update.security != null ? {\n security: getWireSecurity(update.security)\n } : {})\n }\n }, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n return metadata;\n };\n deleteDocument = async docRef => {\n await Documents.deleteDocument(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n this.documents.delete(docRef.id);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.metadataStatus.load !== DocumentLoadStatus.UNLOADED) {\n throw new Error(`Cannot subscribe to document metadata when status is ${internalDoc.metadataStatus.load}`);\n }\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n internalDoc.metadata = metadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, metadata);\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const error = new Error(\"Failed to load document metadata\", {\n cause: e\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.syncSession != null) {\n throw new Error(\"Document data subscription already opened\");\n }\n internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, status => {\n this.updateDataStatus(internalDoc, docRef, status);\n });\n }\n onMetadataSubscriptionClosed(_internalDoc, _docRef) {}\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.syncSession) {\n this.eventService.stopDocumentSync(internalDoc.syncSession);\n internalDoc.syncSession = undefined;\n }\n }\n onActivity(docRef, callback) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToActivityUpdates(docRef.id, foundryEvent => {\n if (!unsubscribed) {\n const localEvent = getActivityEvent(docRef.schema, foundryEvent);\n if (localEvent != null) {\n this.updateMetadataFromActivityEvent(docRef, localEvent);\n callback(docRef, localEvent);\n }\n }\n }).catch(e => {\n this.logger.error(\"Failed to subscribe to activity updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n static METADATA_ACTIVITY_EVENT_TYPES = new Set([ActivityEventDataType.DOCUMENT_RENAME, ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE, ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE, ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE]);\n updateMetadataFromActivityEvent(docRef, event) {\n if (FoundryDocumentService.METADATA_ACTIVITY_EVENT_TYPES.has(event.eventData.type)) {\n this.refetchMetadata(docRef);\n }\n }\n refetchMetadata(docRef) {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n this.logger.error(\"Failed to refetch document metadata\", e, {\n docId: docRef.id\n });\n });\n }\n onPresence(docRef, callback, options) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToPresenceUpdates(docRef.id, foundryUpdate => {\n if (!unsubscribed) {\n const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);\n callback(docRef, localEvent);\n }\n }, options).catch(e => {\n this.logger.error(\"Failed to subscribe to presence updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n updateCustomPresence(docRef, model, eventData, options) {\n const eventType = getMetadata(model).name;\n void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, options).catch(e => {\n this.logger.error(\"Failed to publish custom presence\", e, {\n docId: docRef.id\n });\n });\n }\n}\nfunction getWireSecurity({\n discretionary,\n mandatory\n} = EMPTY_DOCUMENT_SECURITY) {\n const {\n editors = [],\n owners = [],\n viewers = []\n } = discretionary;\n return {\n discretionary: {\n editors: editors.map(getWirePrincipal),\n owners: owners.map(getWirePrincipal),\n viewers: viewers.map(getWirePrincipal)\n },\n mandatory: {\n classification: mandatory.classification != null ? [...mandatory.classification] : [],\n markings: mandatory.markings != null ? [...mandatory.markings] : []\n }\n };\n}\nfunction getWirePrincipal(principal) {\n switch (principal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: principal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: principal.userId\n };\n default:\n assertNever(principal);\n }\n}\nfunction getLocalSecurity(wireSecurity) {\n return {\n discretionary: {\n editors: wireSecurity.discretionary.editors.map(getLocalPrincipal),\n owners: wireSecurity.discretionary.owners.map(getLocalPrincipal),\n viewers: wireSecurity.discretionary.viewers.map(getLocalPrincipal)\n },\n mandatory: {\n classification: [...wireSecurity.mandatory.classification],\n markings: [...wireSecurity.mandatory.markings]\n }\n };\n}\nfunction getLocalPrincipal(wirePrincipal) {\n switch (wirePrincipal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: wirePrincipal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: wirePrincipal.userId\n };\n default:\n assertNever(wirePrincipal);\n }\n}"]}
1
+ {"version":3,"sources":["../../src/eventMappers.ts","../../src/FoundryDocumentService.ts"],"names":["config"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { invalidUserRef } from \"@palantir/pack.auth\";\nimport { ActivityEventDataType, PresenceEventDataType } from \"@palantir/pack.document-schema.model-types\";\nexport function getActivityEvent(documentSchema, foundryEvent) {\n // TODO: need to handle deletes and ensure exhaustive handling\n if (foundryEvent.type !== \"activityCreated\") {\n return undefined;\n }\n const {\n activityEvent\n } = foundryEvent;\n const eventData = getActivityEventData(documentSchema, activityEvent);\n return {\n aggregationKey: activityEvent.aggregationKey,\n createdBy: activityEvent.createdBy,\n createdInstant: new Date(activityEvent.createdTime).getTime(),\n eventData,\n eventId: activityEvent.eventId,\n isRead: activityEvent.isRead\n };\n}\nfunction getActivityEventData(docSchema, {\n eventData\n}) {\n switch (eventData.type) {\n case \"documentCreate\":\n return {\n initialMandatorySecurity: {\n classification: eventData.initialMandatorySecurity?.classification,\n markings: eventData.initialMandatorySecurity?.markings\n },\n name: eventData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n case \"documentRename\":\n return {\n newName: eventData.newName ?? \"\",\n previousName: eventData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n case \"documentDescriptionUpdate\":\n return {\n isInitial: eventData.isInitial ?? false,\n newDescription: eventData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n case \"documentMandatorySecurityUpdate\":\n return {\n newClassification: eventData.newClassification ?? [],\n newMarkings: eventData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE\n };\n case \"documentDiscretionarySecurityUpdate\":\n return {\n principalType: eventData.principalType ?? \"\",\n previousDiscretionarySecurity: eventData.previousDiscretionarySecurity,\n newDiscretionarySecurity: eventData.newDiscretionarySecurity ?? [],\n type: ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE\n };\n case \"documentCustomEvent\":\n {\n const {\n eventType,\n data\n } = eventData;\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n return {\n data: data,\n eventType,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n }\n default:\n {\n const unknownEventData = eventData;\n return {\n rawData: eventData,\n rawType: typeof unknownEventData.type === \"string\" ? unknownEventData.type : \"unknown\",\n type: ActivityEventDataType.UNKNOWN\n };\n }\n }\n}\nconst ARRIVED_DATA = {\n type: PresenceEventDataType.ARRIVED\n};\nconst DEPARTED_DATA = {\n type: PresenceEventDataType.DEPARTED\n};\nexport function getPresenceEvent(documentSchema, foundryUpdate) {\n switch (foundryUpdate.type) {\n case \"presenceChangeEvent\":\n {\n const {\n userId,\n status\n } = foundryUpdate;\n const eventData = status === \"PRESENT\" ? ARRIVED_DATA : DEPARTED_DATA;\n return {\n eventData,\n userId: userId\n };\n }\n case \"customPresenceEvent\":\n {\n const {\n userId,\n eventData,\n eventType\n } = foundryUpdate;\n const presenceEventData = getPresenceEventData(documentSchema, eventType, eventData);\n return {\n eventData: presenceEventData,\n userId: userId\n };\n }\n default:\n {\n foundryUpdate;\n const unknownUpdate = foundryUpdate;\n return {\n eventData: {\n rawData: foundryUpdate,\n rawType: typeof unknownUpdate.type === \"string\" ? unknownUpdate.type : \"unknown\",\n type: PresenceEventDataType.UNKNOWN\n },\n // FIXME: try and pull userId from message? Or just fix the platform types to have useful wrappers.\n userId: invalidUserRef().userId\n };\n }\n }\n}\nfunction getPresenceEventData(docSchema, eventType, eventData) {\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData,\n rawType: eventType,\n type: PresenceEventDataType.UNKNOWN\n };\n }\n return {\n eventData,\n model,\n type: PresenceEventDataType.CUSTOM_EVENT\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Documents } from \"@osdk/foundry.pack\";\nimport { assertNever, getOntologyRid } from \"@palantir/pack.core\";\nimport { getMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocumentServiceConfig, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { createFoundryEventService } from \"@palantir/pack.state.foundry-event\";\nimport { getActivityEvent, getPresenceEvent } from \"./eventMappers.js\";\nconst DEFAULT_USE_PREVIEW_API = true;\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nexport function createFoundryDocumentServiceConfig(config = {}) {\n return createDocumentServiceConfig((app, config) => internalCreateFoundryDocumentService(app, config), config);\n}\nexport function internalCreateFoundryDocumentService(app, config, eventService) {\n return new FoundryDocumentService(app, config, eventService ?? createFoundryEventService(app));\n}\nexport class FoundryDocumentService extends BaseYjsDocumentService {\n constructor(app, config, eventService) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"FoundryDocumentService\"\n }));\n this.config = config;\n this.eventService = eventService;\n }\n createInternalDoc(ref, metadata) {\n return {\n ...this.createBaseInternalDoc(ref, metadata),\n syncSession: undefined\n };\n }\n get hasMetadataSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.metadataSubscribers.size > 0);\n }\n get hasStateSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.docStateSubscribers.size > 0);\n }\n createDocument = async (metadata, schema) => {\n const {\n documentTypeName,\n name,\n parentFolderRid,\n security\n } = metadata;\n const ontologyRid = await getOntologyRid(this.app);\n const request = {\n documentTypeName: documentTypeName,\n name: name,\n ontologyRid: ontologyRid,\n security: getWireSecurity(security)\n };\n if (parentFolderRid != null) {\n request.parentFolderRid = parentFolderRid;\n }\n const createResponse = await Documents.create(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const documentId = createResponse.id;\n const docRef = this.createDocRef(documentId, schema);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n const request = {\n documentTypeName,\n requestBody: {\n query: options?.documentName != null ? {\n documentName: options.documentName\n } : undefined,\n pageSize: options?.pageSize,\n pageToken: options?.pageToken\n }\n };\n const searchResponse = await Documents.search(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n return {\n data: searchResponse.data.map(doc => ({\n createdBy: doc.createdBy,\n createdTime: doc.createdTime,\n documentTypeName: doc.documentTypeName,\n id: doc.id,\n name: doc.name,\n operations: doc.operations,\n ontologyRid: doc.ontologyRid,\n security: getLocalSecurity(doc.security),\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\n };\n updateDocument = async (docRef, update) => {\n const document = await Documents.update(this.app.config.osdkClient, docRef.id, {\n requestBody: {\n ...(update.name != null ? {\n name: update.name\n } : {}),\n ...(update.description != null ? {\n description: update.description\n } : {}),\n ...(update.security != null ? {\n security: getWireSecurity(update.security)\n } : {})\n }\n }, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n return metadata;\n };\n deleteDocument = async docRef => {\n await Documents.deleteDocument(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n this.documents.delete(docRef.id);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.metadataStatus.load !== DocumentLoadStatus.UNLOADED) {\n throw new Error(`Cannot subscribe to document metadata when status is ${internalDoc.metadataStatus.load}`);\n }\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n internalDoc.metadata = metadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, metadata);\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n this.eventService.subscribeToMetadataUpdates(docRef.id, _event => {\n if (!internalDoc.metadataUpdateUnsubscribed) {\n this.refetchMetadata(docRef);\n }\n }).catch(e => {\n this.logger.error(\"Failed to subscribe to metadata updates\", e, {\n docId: docRef.id\n });\n });\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const error = new Error(\"Failed to load document metadata\", {\n cause: e\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.syncSession != null) {\n throw new Error(\"Document data subscription already opened\");\n }\n internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, getMetadata(docRef.schema).version, status => {\n this.updateDataStatus(internalDoc, docRef, status);\n });\n }\n onMetadataSubscriptionClosed(internalDoc, _docRef) {\n internalDoc.metadataUpdateUnsubscribed = true;\n }\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.syncSession) {\n this.eventService.stopDocumentSync(internalDoc.syncSession);\n internalDoc.syncSession = undefined;\n }\n }\n onActivity(docRef, callback) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToActivityUpdates(docRef.id, getMetadata(docRef.schema).version, foundryEvent => {\n if (!unsubscribed) {\n const localEvent = getActivityEvent(docRef.schema, foundryEvent);\n if (localEvent != null) {\n callback(docRef, localEvent);\n }\n }\n }).catch(e => {\n this.logger.error(\"Failed to subscribe to activity updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n refetchMetadata(docRef) {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n this.logger.error(\"Failed to refetch document metadata\", e, {\n docId: docRef.id\n });\n });\n }\n onPresence(docRef, callback, options) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToPresenceUpdates(docRef.id, getMetadata(docRef.schema).version, foundryUpdate => {\n if (!unsubscribed) {\n const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);\n callback(docRef, localEvent);\n }\n }, options).catch(e => {\n this.logger.error(\"Failed to subscribe to presence updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n updateCustomPresence(docRef, model, eventData, options) {\n const eventType = getMetadata(model).name;\n void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, getMetadata(docRef.schema).version, options).catch(e => {\n this.logger.error(\"Failed to publish custom presence\", e, {\n docId: docRef.id\n });\n });\n }\n}\nfunction getWireSecurity({\n discretionary,\n mandatory\n} = EMPTY_DOCUMENT_SECURITY) {\n const {\n editors = [],\n owners = [],\n viewers = []\n } = discretionary;\n return {\n discretionary: {\n editors: editors.map(getWirePrincipal),\n owners: owners.map(getWirePrincipal),\n viewers: viewers.map(getWirePrincipal)\n },\n mandatory: {\n classification: mandatory.classification != null ? [...mandatory.classification] : [],\n markings: mandatory.markings != null ? [...mandatory.markings] : []\n }\n };\n}\nfunction getWirePrincipal(principal) {\n switch (principal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: principal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: principal.userId\n };\n default:\n assertNever(principal);\n }\n}\nfunction getLocalSecurity(wireSecurity) {\n return {\n discretionary: {\n editors: wireSecurity.discretionary.editors.map(getLocalPrincipal),\n owners: wireSecurity.discretionary.owners.map(getLocalPrincipal),\n viewers: wireSecurity.discretionary.viewers.map(getLocalPrincipal)\n },\n mandatory: {\n classification: [...wireSecurity.mandatory.classification],\n markings: [...wireSecurity.mandatory.markings]\n }\n };\n}\nfunction getLocalPrincipal(wirePrincipal) {\n switch (wirePrincipal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: wirePrincipal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: wirePrincipal.userId\n };\n default:\n assertNever(wirePrincipal);\n }\n}"]}
@@ -166,7 +166,7 @@ function createFoundryDocumentServiceConfig(config = {}) {
166
166
  function internalCreateFoundryDocumentService(app, config, eventService) {
167
167
  return new FoundryDocumentService(app, config, pack_state_foundryEvent.createFoundryEventService(app));
168
168
  }
169
- var FoundryDocumentService = class _FoundryDocumentService extends pack_state_core.BaseYjsDocumentService {
169
+ var FoundryDocumentService = class extends pack_state_core.BaseYjsDocumentService {
170
170
  constructor(app, config, eventService) {
171
171
  super(app, app.config.logger.child({}, {
172
172
  level: "debug",
@@ -300,6 +300,15 @@ var FoundryDocumentService = class _FoundryDocumentService extends pack_state_co
300
300
  this.updateMetadataStatus(internalDoc, docRef, {
301
301
  load: pack_state_core.DocumentLoadStatus.LOADED
302
302
  });
303
+ this.eventService.subscribeToMetadataUpdates(docRef.id, (_event) => {
304
+ if (!internalDoc.metadataUpdateUnsubscribed) {
305
+ this.refetchMetadata(docRef);
306
+ }
307
+ }).catch((e) => {
308
+ this.logger.error("Failed to subscribe to metadata updates", e, {
309
+ docId: docRef.id
310
+ });
311
+ });
303
312
  }).catch((e) => {
304
313
  if (!this.documents.has(docRef.id)) {
305
314
  return;
@@ -317,11 +326,12 @@ var FoundryDocumentService = class _FoundryDocumentService extends pack_state_co
317
326
  if (internalDoc.syncSession != null) {
318
327
  throw new Error("Document data subscription already opened");
319
328
  }
320
- internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, (status) => {
329
+ internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, pack_documentSchema_modelTypes.getMetadata(docRef.schema).version, (status) => {
321
330
  this.updateDataStatus(internalDoc, docRef, status);
322
331
  });
323
332
  }
324
- onMetadataSubscriptionClosed(_internalDoc, _docRef) {
333
+ onMetadataSubscriptionClosed(internalDoc, _docRef) {
334
+ internalDoc.metadataUpdateUnsubscribed = true;
325
335
  }
326
336
  onDataSubscriptionClosed(internalDoc, _docRef) {
327
337
  if (internalDoc.syncSession) {
@@ -334,11 +344,10 @@ var FoundryDocumentService = class _FoundryDocumentService extends pack_state_co
334
344
  const unsubscribeFn = () => {
335
345
  unsubscribed = true;
336
346
  };
337
- this.eventService.subscribeToActivityUpdates(docRef.id, (foundryEvent) => {
347
+ this.eventService.subscribeToActivityUpdates(docRef.id, pack_documentSchema_modelTypes.getMetadata(docRef.schema).version, (foundryEvent) => {
338
348
  if (!unsubscribed) {
339
349
  const localEvent = getActivityEvent(docRef.schema, foundryEvent);
340
350
  if (localEvent != null) {
341
- this.updateMetadataFromActivityEvent(docRef, localEvent);
342
351
  callback(docRef, localEvent);
343
352
  }
344
353
  }
@@ -349,12 +358,6 @@ var FoundryDocumentService = class _FoundryDocumentService extends pack_state_co
349
358
  });
350
359
  return unsubscribeFn;
351
360
  }
352
- static METADATA_ACTIVITY_EVENT_TYPES = /* @__PURE__ */ new Set([pack_documentSchema_modelTypes.ActivityEventDataType.DOCUMENT_RENAME, pack_documentSchema_modelTypes.ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE, pack_documentSchema_modelTypes.ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE, pack_documentSchema_modelTypes.ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE]);
353
- updateMetadataFromActivityEvent(docRef, event) {
354
- if (_FoundryDocumentService.METADATA_ACTIVITY_EVENT_TYPES.has(event.eventData.type)) {
355
- this.refetchMetadata(docRef);
356
- }
357
- }
358
361
  refetchMetadata(docRef) {
359
362
  if (!this.documents.has(docRef.id)) {
360
363
  return;
@@ -388,7 +391,7 @@ var FoundryDocumentService = class _FoundryDocumentService extends pack_state_co
388
391
  const unsubscribeFn = () => {
389
392
  unsubscribed = true;
390
393
  };
391
- this.eventService.subscribeToPresenceUpdates(docRef.id, (foundryUpdate) => {
394
+ this.eventService.subscribeToPresenceUpdates(docRef.id, pack_documentSchema_modelTypes.getMetadata(docRef.schema).version, (foundryUpdate) => {
392
395
  if (!unsubscribed) {
393
396
  const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);
394
397
  callback(docRef, localEvent);
@@ -402,7 +405,7 @@ var FoundryDocumentService = class _FoundryDocumentService extends pack_state_co
402
405
  }
403
406
  updateCustomPresence(docRef, model, eventData, options) {
404
407
  const eventType = pack_documentSchema_modelTypes.getMetadata(model).name;
405
- void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, options).catch((e) => {
408
+ void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, pack_documentSchema_modelTypes.getMetadata(docRef.schema).version, options).catch((e) => {
406
409
  this.logger.error("Failed to publish custom presence", e, {
407
410
  docId: docRef.id
408
411
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/eventMappers.ts","../../src/FoundryDocumentService.ts"],"names":["ActivityEventDataType","PresenceEventDataType","invalidUserRef","createDocumentServiceConfig","config","createFoundryEventService","BaseYjsDocumentService","getOntologyRid","Documents","DocumentLoadStatus","getMetadata","assertNever"],"mappings":"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","file":"index.cjs","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { invalidUserRef } from \"@palantir/pack.auth\";\nimport { ActivityEventDataType, PresenceEventDataType } from \"@palantir/pack.document-schema.model-types\";\nexport function getActivityEvent(documentSchema, foundryEvent) {\n // TODO: need to handle deletes and ensure exhaustive handling\n if (foundryEvent.type !== \"activityCreated\") {\n return undefined;\n }\n const {\n activityEvent\n } = foundryEvent;\n const eventData = getActivityEventData(documentSchema, activityEvent);\n return {\n aggregationKey: activityEvent.aggregationKey,\n createdBy: activityEvent.createdBy,\n createdInstant: new Date(activityEvent.createdTime).getTime(),\n eventData,\n eventId: activityEvent.eventId,\n isRead: activityEvent.isRead\n };\n}\nfunction getActivityEventData(docSchema, {\n eventData\n}) {\n switch (eventData.type) {\n case \"documentCreate\":\n return {\n initialMandatorySecurity: {\n classification: eventData.initialMandatorySecurity?.classification,\n markings: eventData.initialMandatorySecurity?.markings\n },\n name: eventData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n case \"documentRename\":\n return {\n newName: eventData.newName ?? \"\",\n previousName: eventData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n case \"documentDescriptionUpdate\":\n return {\n isInitial: eventData.isInitial ?? false,\n newDescription: eventData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n case \"documentMandatorySecurityUpdate\":\n return {\n newClassification: eventData.newClassification ?? [],\n newMarkings: eventData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE\n };\n case \"documentDiscretionarySecurityUpdate\":\n return {\n principalType: eventData.principalType ?? \"\",\n previousDiscretionarySecurity: eventData.previousDiscretionarySecurity,\n newDiscretionarySecurity: eventData.newDiscretionarySecurity ?? [],\n type: ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE\n };\n case \"documentCustomEvent\":\n {\n const {\n eventType,\n data\n } = eventData;\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n return {\n data: data,\n eventType,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n }\n default:\n {\n const unknownEventData = eventData;\n return {\n rawData: eventData,\n rawType: typeof unknownEventData.type === \"string\" ? unknownEventData.type : \"unknown\",\n type: ActivityEventDataType.UNKNOWN\n };\n }\n }\n}\nconst ARRIVED_DATA = {\n type: PresenceEventDataType.ARRIVED\n};\nconst DEPARTED_DATA = {\n type: PresenceEventDataType.DEPARTED\n};\nexport function getPresenceEvent(documentSchema, foundryUpdate) {\n switch (foundryUpdate.type) {\n case \"presenceChangeEvent\":\n {\n const {\n userId,\n status\n } = foundryUpdate;\n const eventData = status === \"PRESENT\" ? ARRIVED_DATA : DEPARTED_DATA;\n return {\n eventData,\n userId: userId\n };\n }\n case \"customPresenceEvent\":\n {\n const {\n userId,\n eventData,\n eventType\n } = foundryUpdate;\n const presenceEventData = getPresenceEventData(documentSchema, eventType, eventData);\n return {\n eventData: presenceEventData,\n userId: userId\n };\n }\n default:\n {\n foundryUpdate;\n const unknownUpdate = foundryUpdate;\n return {\n eventData: {\n rawData: foundryUpdate,\n rawType: typeof unknownUpdate.type === \"string\" ? unknownUpdate.type : \"unknown\",\n type: PresenceEventDataType.UNKNOWN\n },\n // FIXME: try and pull userId from message? Or just fix the platform types to have useful wrappers.\n userId: invalidUserRef().userId\n };\n }\n }\n}\nfunction getPresenceEventData(docSchema, eventType, eventData) {\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData,\n rawType: eventType,\n type: PresenceEventDataType.UNKNOWN\n };\n }\n return {\n eventData,\n model,\n type: PresenceEventDataType.CUSTOM_EVENT\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Documents } from \"@osdk/foundry.pack\";\nimport { assertNever, getOntologyRid } from \"@palantir/pack.core\";\nimport { ActivityEventDataType, getMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocumentServiceConfig, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { createFoundryEventService } from \"@palantir/pack.state.foundry-event\";\nimport { getActivityEvent, getPresenceEvent } from \"./eventMappers.js\";\nconst DEFAULT_USE_PREVIEW_API = true;\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nexport function createFoundryDocumentServiceConfig(config = {}) {\n return createDocumentServiceConfig((app, config) => internalCreateFoundryDocumentService(app, config), config);\n}\nexport function internalCreateFoundryDocumentService(app, config, eventService) {\n return new FoundryDocumentService(app, config, eventService ?? createFoundryEventService(app));\n}\nexport class FoundryDocumentService extends BaseYjsDocumentService {\n constructor(app, config, eventService) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"FoundryDocumentService\"\n }));\n this.config = config;\n this.eventService = eventService;\n }\n createInternalDoc(ref, metadata) {\n return {\n ...this.createBaseInternalDoc(ref, metadata),\n syncSession: undefined\n };\n }\n get hasMetadataSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.metadataSubscribers.size > 0);\n }\n get hasStateSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.docStateSubscribers.size > 0);\n }\n createDocument = async (metadata, schema) => {\n const {\n documentTypeName,\n name,\n parentFolderRid,\n security\n } = metadata;\n const ontologyRid = await getOntologyRid(this.app);\n const request = {\n documentTypeName: documentTypeName,\n name: name,\n ontologyRid: ontologyRid,\n security: getWireSecurity(security)\n };\n if (parentFolderRid != null) {\n request.parentFolderRid = parentFolderRid;\n }\n const createResponse = await Documents.create(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const documentId = createResponse.id;\n const docRef = this.createDocRef(documentId, schema);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n const request = {\n documentTypeName,\n requestBody: {\n query: options?.documentName != null ? {\n documentName: options.documentName\n } : undefined,\n pageSize: options?.pageSize,\n pageToken: options?.pageToken\n }\n };\n const searchResponse = await Documents.search(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n return {\n data: searchResponse.data.map(doc => ({\n createdBy: doc.createdBy,\n createdTime: doc.createdTime,\n documentTypeName: doc.documentTypeName,\n id: doc.id,\n name: doc.name,\n operations: doc.operations,\n ontologyRid: doc.ontologyRid,\n security: getLocalSecurity(doc.security),\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\n };\n updateDocument = async (docRef, update) => {\n const document = await Documents.update(this.app.config.osdkClient, docRef.id, {\n requestBody: {\n ...(update.name != null ? {\n name: update.name\n } : {}),\n ...(update.description != null ? {\n description: update.description\n } : {}),\n ...(update.security != null ? {\n security: getWireSecurity(update.security)\n } : {})\n }\n }, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n return metadata;\n };\n deleteDocument = async docRef => {\n await Documents.deleteDocument(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n this.documents.delete(docRef.id);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.metadataStatus.load !== DocumentLoadStatus.UNLOADED) {\n throw new Error(`Cannot subscribe to document metadata when status is ${internalDoc.metadataStatus.load}`);\n }\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n internalDoc.metadata = metadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, metadata);\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const error = new Error(\"Failed to load document metadata\", {\n cause: e\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.syncSession != null) {\n throw new Error(\"Document data subscription already opened\");\n }\n internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, status => {\n this.updateDataStatus(internalDoc, docRef, status);\n });\n }\n onMetadataSubscriptionClosed(_internalDoc, _docRef) {}\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.syncSession) {\n this.eventService.stopDocumentSync(internalDoc.syncSession);\n internalDoc.syncSession = undefined;\n }\n }\n onActivity(docRef, callback) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToActivityUpdates(docRef.id, foundryEvent => {\n if (!unsubscribed) {\n const localEvent = getActivityEvent(docRef.schema, foundryEvent);\n if (localEvent != null) {\n this.updateMetadataFromActivityEvent(docRef, localEvent);\n callback(docRef, localEvent);\n }\n }\n }).catch(e => {\n this.logger.error(\"Failed to subscribe to activity updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n static METADATA_ACTIVITY_EVENT_TYPES = new Set([ActivityEventDataType.DOCUMENT_RENAME, ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE, ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE, ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE]);\n updateMetadataFromActivityEvent(docRef, event) {\n if (FoundryDocumentService.METADATA_ACTIVITY_EVENT_TYPES.has(event.eventData.type)) {\n this.refetchMetadata(docRef);\n }\n }\n refetchMetadata(docRef) {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n this.logger.error(\"Failed to refetch document metadata\", e, {\n docId: docRef.id\n });\n });\n }\n onPresence(docRef, callback, options) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToPresenceUpdates(docRef.id, foundryUpdate => {\n if (!unsubscribed) {\n const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);\n callback(docRef, localEvent);\n }\n }, options).catch(e => {\n this.logger.error(\"Failed to subscribe to presence updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n updateCustomPresence(docRef, model, eventData, options) {\n const eventType = getMetadata(model).name;\n void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, options).catch(e => {\n this.logger.error(\"Failed to publish custom presence\", e, {\n docId: docRef.id\n });\n });\n }\n}\nfunction getWireSecurity({\n discretionary,\n mandatory\n} = EMPTY_DOCUMENT_SECURITY) {\n const {\n editors = [],\n owners = [],\n viewers = []\n } = discretionary;\n return {\n discretionary: {\n editors: editors.map(getWirePrincipal),\n owners: owners.map(getWirePrincipal),\n viewers: viewers.map(getWirePrincipal)\n },\n mandatory: {\n classification: mandatory.classification != null ? [...mandatory.classification] : [],\n markings: mandatory.markings != null ? [...mandatory.markings] : []\n }\n };\n}\nfunction getWirePrincipal(principal) {\n switch (principal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: principal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: principal.userId\n };\n default:\n assertNever(principal);\n }\n}\nfunction getLocalSecurity(wireSecurity) {\n return {\n discretionary: {\n editors: wireSecurity.discretionary.editors.map(getLocalPrincipal),\n owners: wireSecurity.discretionary.owners.map(getLocalPrincipal),\n viewers: wireSecurity.discretionary.viewers.map(getLocalPrincipal)\n },\n mandatory: {\n classification: [...wireSecurity.mandatory.classification],\n markings: [...wireSecurity.mandatory.markings]\n }\n };\n}\nfunction getLocalPrincipal(wirePrincipal) {\n switch (wirePrincipal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: wirePrincipal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: wirePrincipal.userId\n };\n default:\n assertNever(wirePrincipal);\n }\n}"]}
1
+ {"version":3,"sources":["../../src/eventMappers.ts","../../src/FoundryDocumentService.ts"],"names":["ActivityEventDataType","PresenceEventDataType","invalidUserRef","createDocumentServiceConfig","config","createFoundryEventService","BaseYjsDocumentService","getOntologyRid","Documents","DocumentLoadStatus","getMetadata","assertNever"],"mappings":";;;;;;;;;;AAkBO,SAAS,gBAAA,CAAiB,gBAAgB,YAAA,EAAc;AAE7D,EAAA,IAAI,YAAA,CAAa,SAAS,iBAAA,EAAmB;AAC3C,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM;AAAA,IACJ;AAAA,GACF,GAAI,YAAA;AACJ,EAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,cAAA,EAAgB,aAAa,CAAA;AACpE,EAAA,OAAO;AAAA,IACL,gBAAgB,aAAA,CAAc,cAAA;AAAA,IAC9B,WAAW,aAAA,CAAc,SAAA;AAAA,IACzB,gBAAgB,IAAI,IAAA,CAAK,aAAA,CAAc,WAAW,EAAE,OAAA,EAAQ;AAAA,IAC5D,SAAA;AAAA,IACA,SAAS,aAAA,CAAc,OAAA;AAAA,IACvB,QAAQ,aAAA,CAAc;AAAA,GACxB;AACF;AACA,SAAS,qBAAqB,SAAA,EAAW;AAAA,EACvC;AACF,CAAA,EAAG;AACD,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,gBAAA;AACH,MAAA,OAAO;AAAA,QACL,wBAAA,EAA0B;AAAA,UACxB,cAAA,EAAgB,UAAU,wBAAA,EAA0B,cAAA;AAAA,UACpD,QAAA,EAAU,UAAU,wBAAA,EAA0B;AAAA,SAChD;AAAA,QACA,IAAA,EAAM,UAAU,IAAA,IAAQ,EAAA;AAAA,QACxB,MAAMA,oDAAA,CAAsB;AAAA,OAC9B;AAAA,IACF,KAAK,gBAAA;AACH,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,UAAU,OAAA,IAAW,EAAA;AAAA,QAC9B,YAAA,EAAc,UAAU,YAAA,IAAgB,EAAA;AAAA,QACxC,MAAMA,oDAAA,CAAsB;AAAA,OAC9B;AAAA,IACF,KAAK,2BAAA;AACH,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,UAAU,SAAA,IAAa,KAAA;AAAA,QAClC,cAAA,EAAgB,UAAU,cAAA,IAAkB,EAAA;AAAA,QAC5C,MAAMA,oDAAA,CAAsB;AAAA,OAC9B;AAAA,IACF,KAAK,iCAAA;AACH,MAAA,OAAO;AAAA,QACL,iBAAA,EAAmB,SAAA,CAAU,iBAAA,IAAqB,EAAC;AAAA,QACnD,WAAA,EAAa,SAAA,CAAU,WAAA,IAAe,EAAC;AAAA,QACvC,MAAMA,oDAAA,CAAsB;AAAA,OAC9B;AAAA,IACF,KAAK,qCAAA;AACH,MAAA,OAAO;AAAA,QACL,aAAA,EAAe,UAAU,aAAA,IAAiB,EAAA;AAAA,QAC1C,+BAA+B,SAAA,CAAU,6BAAA;AAAA,QACzC,wBAAA,EAA0B,SAAA,CAAU,wBAAA,IAA4B,EAAC;AAAA,QACjE,MAAMA,oDAAA,CAAsB;AAAA,OAC9B;AAAA,IACF,KAAK,qBAAA,EACH;AACE,MAAA,MAAM;AAAA,QACJ,SAAA;AAAA,QACA;AAAA,OACF,GAAI,SAAA;AAEJ,MAAA,MAAM,KAAA,GAAQ,UAAU,SAAS,CAAA;AACjC,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,SAAA;AAAA,UACT,MAAMA,oDAAA,CAAsB;AAAA,SAC9B;AAAA,MACF;AAGA,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAMA,oDAAA,CAAsB;AAAA,OAC9B;AAAA,IACF;AAAA,IACF,SACE;AACE,MAAA,MAAM,gBAAA,GAAmB,SAAA;AACzB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,SAAA;AAAA,QACT,SAAS,OAAO,gBAAA,CAAiB,IAAA,KAAS,QAAA,GAAW,iBAAiB,IAAA,GAAO,SAAA;AAAA,QAC7E,MAAMA,oDAAA,CAAsB;AAAA,OAC9B;AAAA,IACF;AAAA;AAEN;AACA,IAAM,YAAA,GAAe;AAAA,EACnB,MAAMC,oDAAA,CAAsB;AAC9B,CAAA;AACA,IAAM,aAAA,GAAgB;AAAA,EACpB,MAAMA,oDAAA,CAAsB;AAC9B,CAAA;AACO,SAAS,gBAAA,CAAiB,gBAAgB,aAAA,EAAe;AAC9D,EAAA,QAAQ,cAAc,IAAA;AAAM,IAC1B,KAAK,qBAAA,EACH;AACE,MAAA,MAAM;AAAA,QACJ,MAAA;AAAA,QACA;AAAA,OACF,GAAI,aAAA;AACJ,MAAA,MAAM,SAAA,GAAY,MAAA,KAAW,SAAA,GAAY,YAAA,GAAe,aAAA;AACxD,MAAA,OAAO;AAAA,QACL,SAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,IACF,KAAK,qBAAA,EACH;AACE,MAAA,MAAM;AAAA,QACJ,MAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF,GAAI,aAAA;AACJ,MAAA,MAAM,iBAAA,GAAoB,oBAAA,CAAqB,cAAA,EAAgB,SAAA,EAAW,SAAS,CAAA;AACnF,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,iBAAA;AAAA,QACX;AAAA,OACF;AAAA,IACF;AAAA,IACF,SACE;AAEE,MAAA,MAAM,aAAA,GAAgB,aAAA;AACtB,MAAA,OAAO;AAAA,QACL,SAAA,EAAW;AAAA,UACT,OAAA,EAAS,aAAA;AAAA,UACT,SAAS,OAAO,aAAA,CAAc,IAAA,KAAS,QAAA,GAAW,cAAc,IAAA,GAAO,SAAA;AAAA,UACvE,MAAMA,oDAAA,CAAsB;AAAA,SAC9B;AAAA;AAAA,QAEA,MAAA,EAAQC,0BAAe,CAAE;AAAA,OAC3B;AAAA,IACF;AAAA;AAEN;AACA,SAAS,oBAAA,CAAqB,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW;AAC7D,EAAA,MAAM,KAAA,GAAQ,UAAU,SAAS,CAAA;AACjC,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,SAAA;AAAA,MACT,OAAA,EAAS,SAAA;AAAA,MACT,MAAMD,oDAAA,CAAsB;AAAA,KAC9B;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAMA,oDAAA,CAAsB;AAAA,GAC9B;AACF;;;ACtJA,IAAM,uBAAA,GAA0B,IAAA;AAChC,IAAM,uBAAA,GAA0B,OAAO,MAAA,CAAO;AAAA,EAC5C,eAAe,EAAC;AAAA,EAChB,WAAW;AACb,CAAC,CAAA;AACM,SAAS,kCAAA,CAAmC,MAAA,GAAS,EAAC,EAAG;AAC9D,EAAA,OAAOE,2CAAA,CAA4B,CAAC,GAAA,EAAKC,OAAAA,KAAW,qCAAqC,GAAA,EAAKA,OAAM,GAAG,MAAM,CAAA;AAC/G;AACO,SAAS,oCAAA,CAAqC,GAAA,EAAK,MAAA,EAAQ,YAAA,EAAc;AAC9E,EAAA,OAAO,IAAI,sBAAA,CAAuB,GAAA,EAAK,QAAwBC,iDAAA,CAA0B,GAAG,CAAC,CAAA;AAC/F;AACO,IAAM,sBAAA,GAAN,cAAqCC,sCAAA,CAAuB;AAAA,EACjE,WAAA,CAAY,GAAA,EAAK,MAAA,EAAQ,YAAA,EAAc;AACrC,IAAA,KAAA,CAAM,KAAK,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,EAAC,EAAG;AAAA,MACrC,KAAA,EAAO,OAAA;AAAA,MACP,SAAA,EAAW;AAAA,KACZ,CAAC,CAAA;AACF,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,EACtB;AAAA,EACA,iBAAA,CAAkB,KAAK,QAAA,EAAU;AAC/B,IAAA,OAAO;AAAA,MACL,GAAG,IAAA,CAAK,qBAAA,CAAsB,GAAA,EAAK,QAAQ,CAAA;AAAA,MAC3C,WAAA,EAAa;AAAA,KACf;AAAA,EACF;AAAA,EACA,IAAI,wBAAA,GAA2B;AAC7B,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,KAAO,IAAA,CAAK,iBAAiB,GAAG,CAAA,IAAK,GAAA,CAAI,mBAAA,CAAoB,OAAO,CAAC,CAAA;AAAA,EACvH;AAAA,EACA,IAAI,qBAAA,GAAwB;AAC1B,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,KAAO,IAAA,CAAK,iBAAiB,GAAG,CAAA,IAAK,GAAA,CAAI,mBAAA,CAAoB,OAAO,CAAC,CAAA;AAAA,EACvH;AAAA,EACA,cAAA,GAAiB,OAAO,QAAA,EAAU,MAAA,KAAW;AAC3C,IAAA,MAAM;AAAA,MACJ,gBAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF,GAAI,QAAA;AACJ,IAAA,MAAM,WAAA,GAAc,MAAMC,wBAAA,CAAe,IAAA,CAAK,GAAG,CAAA;AACjD,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,gBAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA,EAAU,gBAAgB,QAAQ;AAAA,KACpC;AACA,IAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,MAAA,OAAA,CAAQ,eAAA,GAAkB,eAAA;AAAA,IAC5B;AACA,IAAA,MAAM,cAAA,GAAiB,MAAMC,sBAAA,CAAU,MAAA,CAAO,KAAK,GAAA,CAAI,MAAA,CAAO,YAAY,OAAA,EAAS;AAAA,MACjF,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB;AAAA,KACvC,CAAA;AACD,IAAA,MAAM,aAAa,cAAA,CAAe,EAAA;AAClC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,UAAA,EAAY,MAAM,CAAA;AACnD,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAAA,EACA,eAAA,GAAkB,OAAO,gBAAA,EAAkB,MAAA,EAAQ,OAAA,KAAY;AAC7D,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,gBAAA;AAAA,MACA,WAAA,EAAa;AAAA,QACX,KAAA,EAAO,OAAA,EAAS,YAAA,IAAgB,IAAA,GAAO;AAAA,UACrC,cAAc,OAAA,CAAQ;AAAA,SACxB,GAAI,MAAA;AAAA,QACJ,UAAU,OAAA,EAAS,QAAA;AAAA,QACnB,WAAW,OAAA,EAAS;AAAA;AACtB,KACF;AACA,IAAA,MAAM,cAAA,GAAiB,MAAMA,sBAAA,CAAU,MAAA,CAAO,KAAK,GAAA,CAAI,MAAA,CAAO,YAAY,OAAA,EAAS;AAAA,MACjF,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB;AAAA,KACvC,CAAA;AACD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,cAAA,CAAe,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,MAAQ;AAAA,QACpC,WAAW,GAAA,CAAI,SAAA;AAAA,QACf,aAAa,GAAA,CAAI,WAAA;AAAA,QACjB,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,IAAI,GAAA,CAAI,EAAA;AAAA,QACR,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,YAAY,GAAA,CAAI,UAAA;AAAA,QAChB,aAAa,GAAA,CAAI,WAAA;AAAA,QACjB,QAAA,EAAU,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA;AAAA,QACvC,WAAW,GAAA,CAAI,SAAA;AAAA,QACf,aAAa,GAAA,CAAI;AAAA,OACnB,CAAE,CAAA;AAAA,MACF,eAAe,cAAA,CAAe;AAAA,KAChC;AAAA,EACF,CAAA;AAAA,EACA,cAAA,GAAiB,OAAO,MAAA,EAAQ,MAAA,KAAW;AACzC,IAAA,MAAM,QAAA,GAAW,MAAMA,sBAAA,CAAU,MAAA,CAAO,KAAK,GAAA,CAAI,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,EAAA,EAAI;AAAA,MAC7E,WAAA,EAAa;AAAA,QACX,GAAI,MAAA,CAAO,IAAA,IAAQ,IAAA,GAAO;AAAA,UACxB,MAAM,MAAA,CAAO;AAAA,YACX,EAAC;AAAA,QACL,GAAI,MAAA,CAAO,WAAA,IAAe,IAAA,GAAO;AAAA,UAC/B,aAAa,MAAA,CAAO;AAAA,YAClB,EAAC;AAAA,QACL,GAAI,MAAA,CAAO,QAAA,IAAY,IAAA,GAAO;AAAA,UAC5B,QAAA,EAAU,eAAA,CAAgB,MAAA,CAAO,QAAQ;AAAA,YACvC;AAAC;AACP,KACF,EAAG;AAAA,MACD,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB;AAAA,KACvC,CAAA;AACD,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,aAAa,QAAA,CAAS,WAAA;AAAA,MACtB,kBAAkB,QAAA,CAAS,gBAAA;AAAA,MAC3B,MAAM,QAAA,CAAS,IAAA;AAAA,MACf,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,aAAa,QAAA,CAAS,WAAA;AAAA,MACtB,QAAA,EAAU,gBAAA,CAAiB,QAAA,CAAS,QAAQ;AAAA,KAC9C;AACA,IAAA,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,QAAQ,CAAA;AACvC,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AAAA,EACA,cAAA,GAAiB,OAAM,MAAA,KAAU;AAC/B,IAAA,MAAMA,uBAAU,cAAA,CAAe,IAAA,CAAK,IAAI,MAAA,CAAO,UAAA,EAAY,OAAO,EAAA,EAAI;AAAA,MACpE,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB;AAAA,KACvC,CAAA;AACD,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,EACjC,CAAA;AAAA,EACA,4BAAA,CAA6B,aAAa,MAAA,EAAQ;AAChD,IAAA,IAAI,WAAA,CAAY,cAAA,CAAe,IAAA,KAASC,kCAAA,CAAmB,QAAA,EAAU;AACnE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qDAAA,EAAwD,WAAA,CAAY,cAAA,CAAe,IAAI,CAAA,CAAE,CAAA;AAAA,IAC3G;AACA,IAAA,IAAA,CAAK,oBAAA,CAAqB,aAAa,MAAA,EAAQ;AAAA,MAC7C,MAAMA,kCAAA,CAAmB;AAAA,KAC1B,CAAA;AACD,IAAAD,sBAAA,CAAU,IAAI,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,UAAA,EAAY,OAAO,EAAA,EAAI;AAAA,MACnD,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB;AAAA,KACvC,CAAA,CAAE,IAAA,CAAK,CAAA,QAAA,KAAY;AAClB,MAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAG;AAClC,QAAA;AAAA,MACF;AACA,MAAA,MAAM,QAAA,GAAW;AAAA,QACf,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,kBAAkB,QAAA,CAAS,gBAAA;AAAA,QAC3B,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,QAAA,EAAU,gBAAA,CAAiB,QAAA,CAAS,QAAQ;AAAA,OAC9C;AACA,MAAA,WAAA,CAAY,QAAA,GAAW,QAAA;AACvB,MAAA,IAAA,CAAK,yBAAA,CAA0B,WAAA,EAAa,MAAA,EAAQ,QAAQ,CAAA;AAC5D,MAAA,IAAA,CAAK,oBAAA,CAAqB,aAAa,MAAA,EAAQ;AAAA,QAC7C,MAAMC,kCAAA,CAAmB;AAAA,OAC1B,CAAA;AACD,MAAA,IAAA,CAAK,YAAA,CAAa,0BAAA,CAA2B,MAAA,CAAO,EAAA,EAAI,CAAA,MAAA,KAAU;AAChE,QAAA,IAAI,CAAC,YAAY,0BAAA,EAA4B;AAC3C,UAAA,IAAA,CAAK,gBAAgB,MAAM,CAAA;AAAA,QAC7B;AAAA,MACF,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,CAAA,KAAK;AACZ,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,yCAAA,EAA2C,CAAA,EAAG;AAAA,UAC9D,OAAO,MAAA,CAAO;AAAA,SACf,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,CAAA,KAAK;AACZ,MAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAG;AAClC,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,kCAAA,EAAoC;AAAA,QAC1D,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,IAAA,CAAK,oBAAA,CAAqB,aAAa,MAAA,EAAQ;AAAA,QAC7C,KAAA;AAAA,QACA,MAAMA,kCAAA,CAAmB;AAAA,OAC1B,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA,EACA,wBAAA,CAAyB,aAAa,MAAA,EAAQ;AAC5C,IAAA,IAAI,WAAA,CAAY,eAAe,IAAA,EAAM;AACnC,MAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,IAC7D;AACA,IAAA,WAAA,CAAY,WAAA,GAAc,IAAA,CAAK,YAAA,CAAa,iBAAA,CAAkB,MAAA,CAAO,EAAA,EAAI,WAAA,CAAY,IAAA,EAAMC,0CAAA,CAAY,MAAA,CAAO,MAAM,CAAA,CAAE,SAAS,CAAA,MAAA,KAAU;AACvI,MAAA,IAAA,CAAK,gBAAA,CAAiB,WAAA,EAAa,MAAA,EAAQ,MAAM,CAAA;AAAA,IACnD,CAAC,CAAA;AAAA,EACH;AAAA,EACA,4BAAA,CAA6B,aAAa,OAAA,EAAS;AACjD,IAAA,WAAA,CAAY,0BAAA,GAA6B,IAAA;AAAA,EAC3C;AAAA,EACA,wBAAA,CAAyB,aAAa,OAAA,EAAS;AAC7C,IAAA,IAAI,YAAY,WAAA,EAAa;AAC3B,MAAA,IAAA,CAAK,YAAA,CAAa,gBAAA,CAAiB,WAAA,CAAY,WAAW,CAAA;AAC1D,MAAA,WAAA,CAAY,WAAA,GAAc,MAAA;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,UAAA,CAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,YAAA,GAAe,KAAA;AACnB,IAAA,MAAM,gBAAgB,MAAM;AAC1B,MAAA,YAAA,GAAe,IAAA;AAAA,IACjB,CAAA;AACA,IAAA,IAAA,CAAK,YAAA,CAAa,2BAA2B,MAAA,CAAO,EAAA,EAAIA,2CAAY,MAAA,CAAO,MAAM,CAAA,CAAE,OAAA,EAAS,CAAA,YAAA,KAAgB;AAC1G,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,MAAA,CAAO,MAAA,EAAQ,YAAY,CAAA;AAC/D,QAAA,IAAI,cAAc,IAAA,EAAM;AACtB,UAAA,QAAA,CAAS,QAAQ,UAAU,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,CAAA,KAAK;AACZ,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,yCAAA,EAA2C,CAAA,EAAG;AAAA,QAC9D,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAO,aAAA;AAAA,EACT;AAAA,EACA,gBAAgB,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAG;AAClC,MAAA;AAAA,IACF;AACA,IAAAF,sBAAA,CAAU,IAAI,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,UAAA,EAAY,OAAO,EAAA,EAAI;AAAA,MACnD,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB;AAAA,KACvC,CAAA,CAAE,IAAA,CAAK,CAAA,QAAA,KAAY;AAClB,MAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAG;AAClC,QAAA;AAAA,MACF;AACA,MAAA,MAAM,QAAA,GAAW;AAAA,QACf,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,kBAAkB,QAAA,CAAS,gBAAA;AAAA,QAC3B,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,QAAA,EAAU,gBAAA,CAAiB,QAAA,CAAS,QAAQ;AAAA,OAC9C;AACA,MAAA,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,QAAQ,CAAA;AAAA,IACzC,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,CAAA,KAAK;AACZ,MAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAG;AAClC,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,qCAAA,EAAuC,CAAA,EAAG;AAAA,QAC1D,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA,EACA,UAAA,CAAW,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS;AACpC,IAAA,IAAI,YAAA,GAAe,KAAA;AACnB,IAAA,MAAM,gBAAgB,MAAM;AAC1B,MAAA,YAAA,GAAe,IAAA;AAAA,IACjB,CAAA;AACA,IAAA,IAAA,CAAK,YAAA,CAAa,2BAA2B,MAAA,CAAO,EAAA,EAAIE,2CAAY,MAAA,CAAO,MAAM,CAAA,CAAE,OAAA,EAAS,CAAA,aAAA,KAAiB;AAC3G,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,MAAA,CAAO,MAAA,EAAQ,aAAa,CAAA;AAChE,QAAA,QAAA,CAAS,QAAQ,UAAU,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA,CAAM,CAAA,CAAA,KAAK;AACrB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,yCAAA,EAA2C,CAAA,EAAG;AAAA,QAC9D,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAO,aAAA;AAAA,EACT;AAAA,EACA,oBAAA,CAAqB,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS;AACtD,IAAA,MAAM,SAAA,GAAYA,0CAAA,CAAY,KAAK,CAAA,CAAE,IAAA;AACrC,IAAA,KAAK,IAAA,CAAK,YAAA,CAAa,qBAAA,CAAsB,MAAA,CAAO,IAAI,SAAA,EAAW,SAAA,EAAWA,0CAAA,CAAY,MAAA,CAAO,MAAM,CAAA,CAAE,OAAA,EAAS,OAAO,CAAA,CAAE,MAAM,CAAA,CAAA,KAAK;AACpI,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,mCAAA,EAAqC,CAAA,EAAG;AAAA,QACxD,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AACA,SAAS,eAAA,CAAgB;AAAA,EACvB,aAAA;AAAA,EACA;AACF,CAAA,GAAI,uBAAA,EAAyB;AAC3B,EAAA,MAAM;AAAA,IACJ,UAAU,EAAC;AAAA,IACX,SAAS,EAAC;AAAA,IACV,UAAU;AAAC,GACb,GAAI,aAAA;AACJ,EAAA,OAAO;AAAA,IACL,aAAA,EAAe;AAAA,MACb,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA;AAAA,MACrC,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,gBAAgB,CAAA;AAAA,MACnC,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,gBAAgB;AAAA,KACvC;AAAA,IACA,SAAA,EAAW;AAAA,MACT,cAAA,EAAgB,UAAU,cAAA,IAAkB,IAAA,GAAO,CAAC,GAAG,SAAA,CAAU,cAAc,CAAA,GAAI,EAAC;AAAA,MACpF,QAAA,EAAU,UAAU,QAAA,IAAY,IAAA,GAAO,CAAC,GAAG,SAAA,CAAU,QAAQ,CAAA,GAAI;AAAC;AACpE,GACF;AACF;AACA,SAAS,iBAAiB,SAAA,EAAW;AACnC,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,KAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM;AAAA,OACR;AAAA,IACF,KAAK,SAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,SAAA;AAAA,QACN,SAAS,SAAA,CAAU;AAAA,OACrB;AAAA,IACF,KAAK,QAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,QAAQ,SAAA,CAAU;AAAA,OACpB;AAAA,IACF;AACE,MAAAC,qBAAA,CAAY,SAAS,CAAA;AAAA;AAE3B;AACA,SAAS,iBAAiB,YAAA,EAAc;AACtC,EAAA,OAAO;AAAA,IACL,aAAA,EAAe;AAAA,MACb,OAAA,EAAS,YAAA,CAAa,aAAA,CAAc,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAAA,MACjE,MAAA,EAAQ,YAAA,CAAa,aAAA,CAAc,MAAA,CAAO,IAAI,iBAAiB,CAAA;AAAA,MAC/D,OAAA,EAAS,YAAA,CAAa,aAAA,CAAc,OAAA,CAAQ,IAAI,iBAAiB;AAAA,KACnE;AAAA,IACA,SAAA,EAAW;AAAA,MACT,cAAA,EAAgB,CAAC,GAAG,YAAA,CAAa,UAAU,cAAc,CAAA;AAAA,MACzD,QAAA,EAAU,CAAC,GAAG,YAAA,CAAa,UAAU,QAAQ;AAAA;AAC/C,GACF;AACF;AACA,SAAS,kBAAkB,aAAA,EAAe;AACxC,EAAA,QAAQ,cAAc,IAAA;AAAM,IAC1B,KAAK,KAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM;AAAA,OACR;AAAA,IACF,KAAK,SAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,SAAA;AAAA,QACN,SAAS,aAAA,CAAc;AAAA,OACzB;AAAA,IACF,KAAK,QAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,QAAQ,aAAA,CAAc;AAAA,OACxB;AAAA,IACF;AACE,MAAAA,qBAAA,CAAY,aAAa,CAAA;AAAA;AAE/B","file":"index.cjs","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { invalidUserRef } from \"@palantir/pack.auth\";\nimport { ActivityEventDataType, PresenceEventDataType } from \"@palantir/pack.document-schema.model-types\";\nexport function getActivityEvent(documentSchema, foundryEvent) {\n // TODO: need to handle deletes and ensure exhaustive handling\n if (foundryEvent.type !== \"activityCreated\") {\n return undefined;\n }\n const {\n activityEvent\n } = foundryEvent;\n const eventData = getActivityEventData(documentSchema, activityEvent);\n return {\n aggregationKey: activityEvent.aggregationKey,\n createdBy: activityEvent.createdBy,\n createdInstant: new Date(activityEvent.createdTime).getTime(),\n eventData,\n eventId: activityEvent.eventId,\n isRead: activityEvent.isRead\n };\n}\nfunction getActivityEventData(docSchema, {\n eventData\n}) {\n switch (eventData.type) {\n case \"documentCreate\":\n return {\n initialMandatorySecurity: {\n classification: eventData.initialMandatorySecurity?.classification,\n markings: eventData.initialMandatorySecurity?.markings\n },\n name: eventData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n case \"documentRename\":\n return {\n newName: eventData.newName ?? \"\",\n previousName: eventData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n case \"documentDescriptionUpdate\":\n return {\n isInitial: eventData.isInitial ?? false,\n newDescription: eventData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n case \"documentMandatorySecurityUpdate\":\n return {\n newClassification: eventData.newClassification ?? [],\n newMarkings: eventData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE\n };\n case \"documentDiscretionarySecurityUpdate\":\n return {\n principalType: eventData.principalType ?? \"\",\n previousDiscretionarySecurity: eventData.previousDiscretionarySecurity,\n newDiscretionarySecurity: eventData.newDiscretionarySecurity ?? [],\n type: ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE\n };\n case \"documentCustomEvent\":\n {\n const {\n eventType,\n data\n } = eventData;\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n return {\n data: data,\n eventType,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n }\n default:\n {\n const unknownEventData = eventData;\n return {\n rawData: eventData,\n rawType: typeof unknownEventData.type === \"string\" ? unknownEventData.type : \"unknown\",\n type: ActivityEventDataType.UNKNOWN\n };\n }\n }\n}\nconst ARRIVED_DATA = {\n type: PresenceEventDataType.ARRIVED\n};\nconst DEPARTED_DATA = {\n type: PresenceEventDataType.DEPARTED\n};\nexport function getPresenceEvent(documentSchema, foundryUpdate) {\n switch (foundryUpdate.type) {\n case \"presenceChangeEvent\":\n {\n const {\n userId,\n status\n } = foundryUpdate;\n const eventData = status === \"PRESENT\" ? ARRIVED_DATA : DEPARTED_DATA;\n return {\n eventData,\n userId: userId\n };\n }\n case \"customPresenceEvent\":\n {\n const {\n userId,\n eventData,\n eventType\n } = foundryUpdate;\n const presenceEventData = getPresenceEventData(documentSchema, eventType, eventData);\n return {\n eventData: presenceEventData,\n userId: userId\n };\n }\n default:\n {\n foundryUpdate;\n const unknownUpdate = foundryUpdate;\n return {\n eventData: {\n rawData: foundryUpdate,\n rawType: typeof unknownUpdate.type === \"string\" ? unknownUpdate.type : \"unknown\",\n type: PresenceEventDataType.UNKNOWN\n },\n // FIXME: try and pull userId from message? Or just fix the platform types to have useful wrappers.\n userId: invalidUserRef().userId\n };\n }\n }\n}\nfunction getPresenceEventData(docSchema, eventType, eventData) {\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData,\n rawType: eventType,\n type: PresenceEventDataType.UNKNOWN\n };\n }\n return {\n eventData,\n model,\n type: PresenceEventDataType.CUSTOM_EVENT\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Documents } from \"@osdk/foundry.pack\";\nimport { assertNever, getOntologyRid } from \"@palantir/pack.core\";\nimport { getMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocumentServiceConfig, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { createFoundryEventService } from \"@palantir/pack.state.foundry-event\";\nimport { getActivityEvent, getPresenceEvent } from \"./eventMappers.js\";\nconst DEFAULT_USE_PREVIEW_API = true;\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nexport function createFoundryDocumentServiceConfig(config = {}) {\n return createDocumentServiceConfig((app, config) => internalCreateFoundryDocumentService(app, config), config);\n}\nexport function internalCreateFoundryDocumentService(app, config, eventService) {\n return new FoundryDocumentService(app, config, eventService ?? createFoundryEventService(app));\n}\nexport class FoundryDocumentService extends BaseYjsDocumentService {\n constructor(app, config, eventService) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"FoundryDocumentService\"\n }));\n this.config = config;\n this.eventService = eventService;\n }\n createInternalDoc(ref, metadata) {\n return {\n ...this.createBaseInternalDoc(ref, metadata),\n syncSession: undefined\n };\n }\n get hasMetadataSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.metadataSubscribers.size > 0);\n }\n get hasStateSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.docStateSubscribers.size > 0);\n }\n createDocument = async (metadata, schema) => {\n const {\n documentTypeName,\n name,\n parentFolderRid,\n security\n } = metadata;\n const ontologyRid = await getOntologyRid(this.app);\n const request = {\n documentTypeName: documentTypeName,\n name: name,\n ontologyRid: ontologyRid,\n security: getWireSecurity(security)\n };\n if (parentFolderRid != null) {\n request.parentFolderRid = parentFolderRid;\n }\n const createResponse = await Documents.create(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const documentId = createResponse.id;\n const docRef = this.createDocRef(documentId, schema);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n const request = {\n documentTypeName,\n requestBody: {\n query: options?.documentName != null ? {\n documentName: options.documentName\n } : undefined,\n pageSize: options?.pageSize,\n pageToken: options?.pageToken\n }\n };\n const searchResponse = await Documents.search(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n return {\n data: searchResponse.data.map(doc => ({\n createdBy: doc.createdBy,\n createdTime: doc.createdTime,\n documentTypeName: doc.documentTypeName,\n id: doc.id,\n name: doc.name,\n operations: doc.operations,\n ontologyRid: doc.ontologyRid,\n security: getLocalSecurity(doc.security),\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\n };\n updateDocument = async (docRef, update) => {\n const document = await Documents.update(this.app.config.osdkClient, docRef.id, {\n requestBody: {\n ...(update.name != null ? {\n name: update.name\n } : {}),\n ...(update.description != null ? {\n description: update.description\n } : {}),\n ...(update.security != null ? {\n security: getWireSecurity(update.security)\n } : {})\n }\n }, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n return metadata;\n };\n deleteDocument = async docRef => {\n await Documents.deleteDocument(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n this.documents.delete(docRef.id);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.metadataStatus.load !== DocumentLoadStatus.UNLOADED) {\n throw new Error(`Cannot subscribe to document metadata when status is ${internalDoc.metadataStatus.load}`);\n }\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n internalDoc.metadata = metadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, metadata);\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n this.eventService.subscribeToMetadataUpdates(docRef.id, _event => {\n if (!internalDoc.metadataUpdateUnsubscribed) {\n this.refetchMetadata(docRef);\n }\n }).catch(e => {\n this.logger.error(\"Failed to subscribe to metadata updates\", e, {\n docId: docRef.id\n });\n });\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const error = new Error(\"Failed to load document metadata\", {\n cause: e\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.syncSession != null) {\n throw new Error(\"Document data subscription already opened\");\n }\n internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, getMetadata(docRef.schema).version, status => {\n this.updateDataStatus(internalDoc, docRef, status);\n });\n }\n onMetadataSubscriptionClosed(internalDoc, _docRef) {\n internalDoc.metadataUpdateUnsubscribed = true;\n }\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.syncSession) {\n this.eventService.stopDocumentSync(internalDoc.syncSession);\n internalDoc.syncSession = undefined;\n }\n }\n onActivity(docRef, callback) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToActivityUpdates(docRef.id, getMetadata(docRef.schema).version, foundryEvent => {\n if (!unsubscribed) {\n const localEvent = getActivityEvent(docRef.schema, foundryEvent);\n if (localEvent != null) {\n callback(docRef, localEvent);\n }\n }\n }).catch(e => {\n this.logger.error(\"Failed to subscribe to activity updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n refetchMetadata(docRef) {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n this.logger.error(\"Failed to refetch document metadata\", e, {\n docId: docRef.id\n });\n });\n }\n onPresence(docRef, callback, options) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToPresenceUpdates(docRef.id, getMetadata(docRef.schema).version, foundryUpdate => {\n if (!unsubscribed) {\n const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);\n callback(docRef, localEvent);\n }\n }, options).catch(e => {\n this.logger.error(\"Failed to subscribe to presence updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n updateCustomPresence(docRef, model, eventData, options) {\n const eventType = getMetadata(model).name;\n void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, getMetadata(docRef.schema).version, options).catch(e => {\n this.logger.error(\"Failed to publish custom presence\", e, {\n docId: docRef.id\n });\n });\n }\n}\nfunction getWireSecurity({\n discretionary,\n mandatory\n} = EMPTY_DOCUMENT_SECURITY) {\n const {\n editors = [],\n owners = [],\n viewers = []\n } = discretionary;\n return {\n discretionary: {\n editors: editors.map(getWirePrincipal),\n owners: owners.map(getWirePrincipal),\n viewers: viewers.map(getWirePrincipal)\n },\n mandatory: {\n classification: mandatory.classification != null ? [...mandatory.classification] : [],\n markings: mandatory.markings != null ? [...mandatory.markings] : []\n }\n };\n}\nfunction getWirePrincipal(principal) {\n switch (principal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: principal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: principal.userId\n };\n default:\n assertNever(principal);\n }\n}\nfunction getLocalSecurity(wireSecurity) {\n return {\n discretionary: {\n editors: wireSecurity.discretionary.editors.map(getLocalPrincipal),\n owners: wireSecurity.discretionary.owners.map(getLocalPrincipal),\n viewers: wireSecurity.discretionary.viewers.map(getLocalPrincipal)\n },\n mandatory: {\n classification: [...wireSecurity.mandatory.classification],\n markings: [...wireSecurity.mandatory.markings]\n }\n };\n}\nfunction getLocalPrincipal(wirePrincipal) {\n switch (wirePrincipal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: wirePrincipal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: wirePrincipal.userId\n };\n default:\n assertNever(wirePrincipal);\n }\n}"]}
@@ -1,7 +1,7 @@
1
1
  import { Documents } from '@osdk/foundry.pack';
2
2
  import { getOntologyRid, assertNever } from '@palantir/pack.core';
3
- import { PresenceEventDataType, ActivityEventDataType, getMetadata } from '@palantir/pack.document-schema.model-types';
4
- import { BaseYjsDocumentService, DocumentLoadStatus, createDocumentServiceConfig } from '@palantir/pack.state.core';
3
+ import { PresenceEventDataType, getMetadata, ActivityEventDataType } from '@palantir/pack.document-schema.model-types';
4
+ import { createDocumentServiceConfig, BaseYjsDocumentService, DocumentLoadStatus } from '@palantir/pack.state.core';
5
5
  import { createFoundryEventService } from '@palantir/pack.state.foundry-event';
6
6
  import { invalidUserRef } from '@palantir/pack.auth';
7
7
 
@@ -164,7 +164,7 @@ function createFoundryDocumentServiceConfig(config = {}) {
164
164
  function internalCreateFoundryDocumentService(app, config, eventService) {
165
165
  return new FoundryDocumentService(app, config, createFoundryEventService(app));
166
166
  }
167
- var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocumentService {
167
+ var FoundryDocumentService = class extends BaseYjsDocumentService {
168
168
  constructor(app, config, eventService) {
169
169
  super(app, app.config.logger.child({}, {
170
170
  level: "debug",
@@ -298,6 +298,15 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
298
298
  this.updateMetadataStatus(internalDoc, docRef, {
299
299
  load: DocumentLoadStatus.LOADED
300
300
  });
301
+ this.eventService.subscribeToMetadataUpdates(docRef.id, (_event) => {
302
+ if (!internalDoc.metadataUpdateUnsubscribed) {
303
+ this.refetchMetadata(docRef);
304
+ }
305
+ }).catch((e) => {
306
+ this.logger.error("Failed to subscribe to metadata updates", e, {
307
+ docId: docRef.id
308
+ });
309
+ });
301
310
  }).catch((e) => {
302
311
  if (!this.documents.has(docRef.id)) {
303
312
  return;
@@ -315,11 +324,12 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
315
324
  if (internalDoc.syncSession != null) {
316
325
  throw new Error("Document data subscription already opened");
317
326
  }
318
- internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, (status) => {
327
+ internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, getMetadata(docRef.schema).version, (status) => {
319
328
  this.updateDataStatus(internalDoc, docRef, status);
320
329
  });
321
330
  }
322
- onMetadataSubscriptionClosed(_internalDoc, _docRef) {
331
+ onMetadataSubscriptionClosed(internalDoc, _docRef) {
332
+ internalDoc.metadataUpdateUnsubscribed = true;
323
333
  }
324
334
  onDataSubscriptionClosed(internalDoc, _docRef) {
325
335
  if (internalDoc.syncSession) {
@@ -332,11 +342,10 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
332
342
  const unsubscribeFn = () => {
333
343
  unsubscribed = true;
334
344
  };
335
- this.eventService.subscribeToActivityUpdates(docRef.id, (foundryEvent) => {
345
+ this.eventService.subscribeToActivityUpdates(docRef.id, getMetadata(docRef.schema).version, (foundryEvent) => {
336
346
  if (!unsubscribed) {
337
347
  const localEvent = getActivityEvent(docRef.schema, foundryEvent);
338
348
  if (localEvent != null) {
339
- this.updateMetadataFromActivityEvent(docRef, localEvent);
340
349
  callback(docRef, localEvent);
341
350
  }
342
351
  }
@@ -347,12 +356,6 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
347
356
  });
348
357
  return unsubscribeFn;
349
358
  }
350
- static METADATA_ACTIVITY_EVENT_TYPES = /* @__PURE__ */ new Set([ActivityEventDataType.DOCUMENT_RENAME, ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE, ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE, ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE]);
351
- updateMetadataFromActivityEvent(docRef, event) {
352
- if (_FoundryDocumentService.METADATA_ACTIVITY_EVENT_TYPES.has(event.eventData.type)) {
353
- this.refetchMetadata(docRef);
354
- }
355
- }
356
359
  refetchMetadata(docRef) {
357
360
  if (!this.documents.has(docRef.id)) {
358
361
  return;
@@ -386,7 +389,7 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
386
389
  const unsubscribeFn = () => {
387
390
  unsubscribed = true;
388
391
  };
389
- this.eventService.subscribeToPresenceUpdates(docRef.id, (foundryUpdate) => {
392
+ this.eventService.subscribeToPresenceUpdates(docRef.id, getMetadata(docRef.schema).version, (foundryUpdate) => {
390
393
  if (!unsubscribed) {
391
394
  const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);
392
395
  callback(docRef, localEvent);
@@ -400,7 +403,7 @@ var FoundryDocumentService = class _FoundryDocumentService extends BaseYjsDocume
400
403
  }
401
404
  updateCustomPresence(docRef, model, eventData, options) {
402
405
  const eventType = getMetadata(model).name;
403
- void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, options).catch((e) => {
406
+ void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, getMetadata(docRef.schema).version, options).catch((e) => {
404
407
  this.logger.error("Failed to publish custom presence", e, {
405
408
  docId: docRef.id
406
409
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/eventMappers.ts","../../src/FoundryDocumentService.ts"],"names":["config","ActivityEventDataType"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { invalidUserRef } from \"@palantir/pack.auth\";\nimport { ActivityEventDataType, PresenceEventDataType } from \"@palantir/pack.document-schema.model-types\";\nexport function getActivityEvent(documentSchema, foundryEvent) {\n // TODO: need to handle deletes and ensure exhaustive handling\n if (foundryEvent.type !== \"activityCreated\") {\n return undefined;\n }\n const {\n activityEvent\n } = foundryEvent;\n const eventData = getActivityEventData(documentSchema, activityEvent);\n return {\n aggregationKey: activityEvent.aggregationKey,\n createdBy: activityEvent.createdBy,\n createdInstant: new Date(activityEvent.createdTime).getTime(),\n eventData,\n eventId: activityEvent.eventId,\n isRead: activityEvent.isRead\n };\n}\nfunction getActivityEventData(docSchema, {\n eventData\n}) {\n switch (eventData.type) {\n case \"documentCreate\":\n return {\n initialMandatorySecurity: {\n classification: eventData.initialMandatorySecurity?.classification,\n markings: eventData.initialMandatorySecurity?.markings\n },\n name: eventData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n case \"documentRename\":\n return {\n newName: eventData.newName ?? \"\",\n previousName: eventData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n case \"documentDescriptionUpdate\":\n return {\n isInitial: eventData.isInitial ?? false,\n newDescription: eventData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n case \"documentMandatorySecurityUpdate\":\n return {\n newClassification: eventData.newClassification ?? [],\n newMarkings: eventData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE\n };\n case \"documentDiscretionarySecurityUpdate\":\n return {\n principalType: eventData.principalType ?? \"\",\n previousDiscretionarySecurity: eventData.previousDiscretionarySecurity,\n newDiscretionarySecurity: eventData.newDiscretionarySecurity ?? [],\n type: ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE\n };\n case \"documentCustomEvent\":\n {\n const {\n eventType,\n data\n } = eventData;\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n return {\n data: data,\n eventType,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n }\n default:\n {\n const unknownEventData = eventData;\n return {\n rawData: eventData,\n rawType: typeof unknownEventData.type === \"string\" ? unknownEventData.type : \"unknown\",\n type: ActivityEventDataType.UNKNOWN\n };\n }\n }\n}\nconst ARRIVED_DATA = {\n type: PresenceEventDataType.ARRIVED\n};\nconst DEPARTED_DATA = {\n type: PresenceEventDataType.DEPARTED\n};\nexport function getPresenceEvent(documentSchema, foundryUpdate) {\n switch (foundryUpdate.type) {\n case \"presenceChangeEvent\":\n {\n const {\n userId,\n status\n } = foundryUpdate;\n const eventData = status === \"PRESENT\" ? ARRIVED_DATA : DEPARTED_DATA;\n return {\n eventData,\n userId: userId\n };\n }\n case \"customPresenceEvent\":\n {\n const {\n userId,\n eventData,\n eventType\n } = foundryUpdate;\n const presenceEventData = getPresenceEventData(documentSchema, eventType, eventData);\n return {\n eventData: presenceEventData,\n userId: userId\n };\n }\n default:\n {\n foundryUpdate;\n const unknownUpdate = foundryUpdate;\n return {\n eventData: {\n rawData: foundryUpdate,\n rawType: typeof unknownUpdate.type === \"string\" ? unknownUpdate.type : \"unknown\",\n type: PresenceEventDataType.UNKNOWN\n },\n // FIXME: try and pull userId from message? Or just fix the platform types to have useful wrappers.\n userId: invalidUserRef().userId\n };\n }\n }\n}\nfunction getPresenceEventData(docSchema, eventType, eventData) {\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData,\n rawType: eventType,\n type: PresenceEventDataType.UNKNOWN\n };\n }\n return {\n eventData,\n model,\n type: PresenceEventDataType.CUSTOM_EVENT\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Documents } from \"@osdk/foundry.pack\";\nimport { assertNever, getOntologyRid } from \"@palantir/pack.core\";\nimport { ActivityEventDataType, getMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocumentServiceConfig, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { createFoundryEventService } from \"@palantir/pack.state.foundry-event\";\nimport { getActivityEvent, getPresenceEvent } from \"./eventMappers.js\";\nconst DEFAULT_USE_PREVIEW_API = true;\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nexport function createFoundryDocumentServiceConfig(config = {}) {\n return createDocumentServiceConfig((app, config) => internalCreateFoundryDocumentService(app, config), config);\n}\nexport function internalCreateFoundryDocumentService(app, config, eventService) {\n return new FoundryDocumentService(app, config, eventService ?? createFoundryEventService(app));\n}\nexport class FoundryDocumentService extends BaseYjsDocumentService {\n constructor(app, config, eventService) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"FoundryDocumentService\"\n }));\n this.config = config;\n this.eventService = eventService;\n }\n createInternalDoc(ref, metadata) {\n return {\n ...this.createBaseInternalDoc(ref, metadata),\n syncSession: undefined\n };\n }\n get hasMetadataSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.metadataSubscribers.size > 0);\n }\n get hasStateSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.docStateSubscribers.size > 0);\n }\n createDocument = async (metadata, schema) => {\n const {\n documentTypeName,\n name,\n parentFolderRid,\n security\n } = metadata;\n const ontologyRid = await getOntologyRid(this.app);\n const request = {\n documentTypeName: documentTypeName,\n name: name,\n ontologyRid: ontologyRid,\n security: getWireSecurity(security)\n };\n if (parentFolderRid != null) {\n request.parentFolderRid = parentFolderRid;\n }\n const createResponse = await Documents.create(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const documentId = createResponse.id;\n const docRef = this.createDocRef(documentId, schema);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n const request = {\n documentTypeName,\n requestBody: {\n query: options?.documentName != null ? {\n documentName: options.documentName\n } : undefined,\n pageSize: options?.pageSize,\n pageToken: options?.pageToken\n }\n };\n const searchResponse = await Documents.search(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n return {\n data: searchResponse.data.map(doc => ({\n createdBy: doc.createdBy,\n createdTime: doc.createdTime,\n documentTypeName: doc.documentTypeName,\n id: doc.id,\n name: doc.name,\n operations: doc.operations,\n ontologyRid: doc.ontologyRid,\n security: getLocalSecurity(doc.security),\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\n };\n updateDocument = async (docRef, update) => {\n const document = await Documents.update(this.app.config.osdkClient, docRef.id, {\n requestBody: {\n ...(update.name != null ? {\n name: update.name\n } : {}),\n ...(update.description != null ? {\n description: update.description\n } : {}),\n ...(update.security != null ? {\n security: getWireSecurity(update.security)\n } : {})\n }\n }, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n return metadata;\n };\n deleteDocument = async docRef => {\n await Documents.deleteDocument(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n this.documents.delete(docRef.id);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.metadataStatus.load !== DocumentLoadStatus.UNLOADED) {\n throw new Error(`Cannot subscribe to document metadata when status is ${internalDoc.metadataStatus.load}`);\n }\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n internalDoc.metadata = metadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, metadata);\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const error = new Error(\"Failed to load document metadata\", {\n cause: e\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.syncSession != null) {\n throw new Error(\"Document data subscription already opened\");\n }\n internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, status => {\n this.updateDataStatus(internalDoc, docRef, status);\n });\n }\n onMetadataSubscriptionClosed(_internalDoc, _docRef) {}\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.syncSession) {\n this.eventService.stopDocumentSync(internalDoc.syncSession);\n internalDoc.syncSession = undefined;\n }\n }\n onActivity(docRef, callback) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToActivityUpdates(docRef.id, foundryEvent => {\n if (!unsubscribed) {\n const localEvent = getActivityEvent(docRef.schema, foundryEvent);\n if (localEvent != null) {\n this.updateMetadataFromActivityEvent(docRef, localEvent);\n callback(docRef, localEvent);\n }\n }\n }).catch(e => {\n this.logger.error(\"Failed to subscribe to activity updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n static METADATA_ACTIVITY_EVENT_TYPES = new Set([ActivityEventDataType.DOCUMENT_RENAME, ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE, ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE, ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE]);\n updateMetadataFromActivityEvent(docRef, event) {\n if (FoundryDocumentService.METADATA_ACTIVITY_EVENT_TYPES.has(event.eventData.type)) {\n this.refetchMetadata(docRef);\n }\n }\n refetchMetadata(docRef) {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n this.logger.error(\"Failed to refetch document metadata\", e, {\n docId: docRef.id\n });\n });\n }\n onPresence(docRef, callback, options) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToPresenceUpdates(docRef.id, foundryUpdate => {\n if (!unsubscribed) {\n const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);\n callback(docRef, localEvent);\n }\n }, options).catch(e => {\n this.logger.error(\"Failed to subscribe to presence updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n updateCustomPresence(docRef, model, eventData, options) {\n const eventType = getMetadata(model).name;\n void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, options).catch(e => {\n this.logger.error(\"Failed to publish custom presence\", e, {\n docId: docRef.id\n });\n });\n }\n}\nfunction getWireSecurity({\n discretionary,\n mandatory\n} = EMPTY_DOCUMENT_SECURITY) {\n const {\n editors = [],\n owners = [],\n viewers = []\n } = discretionary;\n return {\n discretionary: {\n editors: editors.map(getWirePrincipal),\n owners: owners.map(getWirePrincipal),\n viewers: viewers.map(getWirePrincipal)\n },\n mandatory: {\n classification: mandatory.classification != null ? [...mandatory.classification] : [],\n markings: mandatory.markings != null ? [...mandatory.markings] : []\n }\n };\n}\nfunction getWirePrincipal(principal) {\n switch (principal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: principal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: principal.userId\n };\n default:\n assertNever(principal);\n }\n}\nfunction getLocalSecurity(wireSecurity) {\n return {\n discretionary: {\n editors: wireSecurity.discretionary.editors.map(getLocalPrincipal),\n owners: wireSecurity.discretionary.owners.map(getLocalPrincipal),\n viewers: wireSecurity.discretionary.viewers.map(getLocalPrincipal)\n },\n mandatory: {\n classification: [...wireSecurity.mandatory.classification],\n markings: [...wireSecurity.mandatory.markings]\n }\n };\n}\nfunction getLocalPrincipal(wirePrincipal) {\n switch (wirePrincipal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: wirePrincipal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: wirePrincipal.userId\n };\n default:\n assertNever(wirePrincipal);\n }\n}"]}
1
+ {"version":3,"sources":["../../src/eventMappers.ts","../../src/FoundryDocumentService.ts"],"names":["config"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { invalidUserRef } from \"@palantir/pack.auth\";\nimport { ActivityEventDataType, PresenceEventDataType } from \"@palantir/pack.document-schema.model-types\";\nexport function getActivityEvent(documentSchema, foundryEvent) {\n // TODO: need to handle deletes and ensure exhaustive handling\n if (foundryEvent.type !== \"activityCreated\") {\n return undefined;\n }\n const {\n activityEvent\n } = foundryEvent;\n const eventData = getActivityEventData(documentSchema, activityEvent);\n return {\n aggregationKey: activityEvent.aggregationKey,\n createdBy: activityEvent.createdBy,\n createdInstant: new Date(activityEvent.createdTime).getTime(),\n eventData,\n eventId: activityEvent.eventId,\n isRead: activityEvent.isRead\n };\n}\nfunction getActivityEventData(docSchema, {\n eventData\n}) {\n switch (eventData.type) {\n case \"documentCreate\":\n return {\n initialMandatorySecurity: {\n classification: eventData.initialMandatorySecurity?.classification,\n markings: eventData.initialMandatorySecurity?.markings\n },\n name: eventData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n case \"documentRename\":\n return {\n newName: eventData.newName ?? \"\",\n previousName: eventData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n case \"documentDescriptionUpdate\":\n return {\n isInitial: eventData.isInitial ?? false,\n newDescription: eventData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n case \"documentMandatorySecurityUpdate\":\n return {\n newClassification: eventData.newClassification ?? [],\n newMarkings: eventData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE\n };\n case \"documentDiscretionarySecurityUpdate\":\n return {\n principalType: eventData.principalType ?? \"\",\n previousDiscretionarySecurity: eventData.previousDiscretionarySecurity,\n newDiscretionarySecurity: eventData.newDiscretionarySecurity ?? [],\n type: ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE\n };\n case \"documentCustomEvent\":\n {\n const {\n eventType,\n data\n } = eventData;\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n return {\n data: data,\n eventType,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n }\n default:\n {\n const unknownEventData = eventData;\n return {\n rawData: eventData,\n rawType: typeof unknownEventData.type === \"string\" ? unknownEventData.type : \"unknown\",\n type: ActivityEventDataType.UNKNOWN\n };\n }\n }\n}\nconst ARRIVED_DATA = {\n type: PresenceEventDataType.ARRIVED\n};\nconst DEPARTED_DATA = {\n type: PresenceEventDataType.DEPARTED\n};\nexport function getPresenceEvent(documentSchema, foundryUpdate) {\n switch (foundryUpdate.type) {\n case \"presenceChangeEvent\":\n {\n const {\n userId,\n status\n } = foundryUpdate;\n const eventData = status === \"PRESENT\" ? ARRIVED_DATA : DEPARTED_DATA;\n return {\n eventData,\n userId: userId\n };\n }\n case \"customPresenceEvent\":\n {\n const {\n userId,\n eventData,\n eventType\n } = foundryUpdate;\n const presenceEventData = getPresenceEventData(documentSchema, eventType, eventData);\n return {\n eventData: presenceEventData,\n userId: userId\n };\n }\n default:\n {\n foundryUpdate;\n const unknownUpdate = foundryUpdate;\n return {\n eventData: {\n rawData: foundryUpdate,\n rawType: typeof unknownUpdate.type === \"string\" ? unknownUpdate.type : \"unknown\",\n type: PresenceEventDataType.UNKNOWN\n },\n // FIXME: try and pull userId from message? Or just fix the platform types to have useful wrappers.\n userId: invalidUserRef().userId\n };\n }\n }\n}\nfunction getPresenceEventData(docSchema, eventType, eventData) {\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData,\n rawType: eventType,\n type: PresenceEventDataType.UNKNOWN\n };\n }\n return {\n eventData,\n model,\n type: PresenceEventDataType.CUSTOM_EVENT\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Documents } from \"@osdk/foundry.pack\";\nimport { assertNever, getOntologyRid } from \"@palantir/pack.core\";\nimport { getMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocumentServiceConfig, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { createFoundryEventService } from \"@palantir/pack.state.foundry-event\";\nimport { getActivityEvent, getPresenceEvent } from \"./eventMappers.js\";\nconst DEFAULT_USE_PREVIEW_API = true;\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nexport function createFoundryDocumentServiceConfig(config = {}) {\n return createDocumentServiceConfig((app, config) => internalCreateFoundryDocumentService(app, config), config);\n}\nexport function internalCreateFoundryDocumentService(app, config, eventService) {\n return new FoundryDocumentService(app, config, eventService ?? createFoundryEventService(app));\n}\nexport class FoundryDocumentService extends BaseYjsDocumentService {\n constructor(app, config, eventService) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"FoundryDocumentService\"\n }));\n this.config = config;\n this.eventService = eventService;\n }\n createInternalDoc(ref, metadata) {\n return {\n ...this.createBaseInternalDoc(ref, metadata),\n syncSession: undefined\n };\n }\n get hasMetadataSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.metadataSubscribers.size > 0);\n }\n get hasStateSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.docStateSubscribers.size > 0);\n }\n createDocument = async (metadata, schema) => {\n const {\n documentTypeName,\n name,\n parentFolderRid,\n security\n } = metadata;\n const ontologyRid = await getOntologyRid(this.app);\n const request = {\n documentTypeName: documentTypeName,\n name: name,\n ontologyRid: ontologyRid,\n security: getWireSecurity(security)\n };\n if (parentFolderRid != null) {\n request.parentFolderRid = parentFolderRid;\n }\n const createResponse = await Documents.create(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const documentId = createResponse.id;\n const docRef = this.createDocRef(documentId, schema);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n const request = {\n documentTypeName,\n requestBody: {\n query: options?.documentName != null ? {\n documentName: options.documentName\n } : undefined,\n pageSize: options?.pageSize,\n pageToken: options?.pageToken\n }\n };\n const searchResponse = await Documents.search(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n return {\n data: searchResponse.data.map(doc => ({\n createdBy: doc.createdBy,\n createdTime: doc.createdTime,\n documentTypeName: doc.documentTypeName,\n id: doc.id,\n name: doc.name,\n operations: doc.operations,\n ontologyRid: doc.ontologyRid,\n security: getLocalSecurity(doc.security),\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\n };\n updateDocument = async (docRef, update) => {\n const document = await Documents.update(this.app.config.osdkClient, docRef.id, {\n requestBody: {\n ...(update.name != null ? {\n name: update.name\n } : {}),\n ...(update.description != null ? {\n description: update.description\n } : {}),\n ...(update.security != null ? {\n security: getWireSecurity(update.security)\n } : {})\n }\n }, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n return metadata;\n };\n deleteDocument = async docRef => {\n await Documents.deleteDocument(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n this.documents.delete(docRef.id);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.metadataStatus.load !== DocumentLoadStatus.UNLOADED) {\n throw new Error(`Cannot subscribe to document metadata when status is ${internalDoc.metadataStatus.load}`);\n }\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n internalDoc.metadata = metadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, metadata);\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n this.eventService.subscribeToMetadataUpdates(docRef.id, _event => {\n if (!internalDoc.metadataUpdateUnsubscribed) {\n this.refetchMetadata(docRef);\n }\n }).catch(e => {\n this.logger.error(\"Failed to subscribe to metadata updates\", e, {\n docId: docRef.id\n });\n });\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const error = new Error(\"Failed to load document metadata\", {\n cause: e\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n if (internalDoc.syncSession != null) {\n throw new Error(\"Document data subscription already opened\");\n }\n internalDoc.syncSession = this.eventService.startDocumentSync(docRef.id, internalDoc.yDoc, getMetadata(docRef.schema).version, status => {\n this.updateDataStatus(internalDoc, docRef, status);\n });\n }\n onMetadataSubscriptionClosed(internalDoc, _docRef) {\n internalDoc.metadataUpdateUnsubscribed = true;\n }\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.syncSession) {\n this.eventService.stopDocumentSync(internalDoc.syncSession);\n internalDoc.syncSession = undefined;\n }\n }\n onActivity(docRef, callback) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToActivityUpdates(docRef.id, getMetadata(docRef.schema).version, foundryEvent => {\n if (!unsubscribed) {\n const localEvent = getActivityEvent(docRef.schema, foundryEvent);\n if (localEvent != null) {\n callback(docRef, localEvent);\n }\n }\n }).catch(e => {\n this.logger.error(\"Failed to subscribe to activity updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n refetchMetadata(docRef) {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n Documents.get(this.app.config.osdkClient, docRef.id, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n }).then(document => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n const metadata = {\n description: document.description,\n documentTypeName: document.documentTypeName,\n name: document.name,\n operations: document.operations,\n ontologyRid: document.ontologyRid,\n security: getLocalSecurity(document.security)\n };\n this.updateMetadata(docRef.id, metadata);\n }).catch(e => {\n if (!this.documents.has(docRef.id)) {\n return;\n }\n this.logger.error(\"Failed to refetch document metadata\", e, {\n docId: docRef.id\n });\n });\n }\n onPresence(docRef, callback, options) {\n let unsubscribed = false;\n const unsubscribeFn = () => {\n unsubscribed = true;\n };\n this.eventService.subscribeToPresenceUpdates(docRef.id, getMetadata(docRef.schema).version, foundryUpdate => {\n if (!unsubscribed) {\n const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);\n callback(docRef, localEvent);\n }\n }, options).catch(e => {\n this.logger.error(\"Failed to subscribe to presence updates\", e, {\n docId: docRef.id\n });\n });\n return unsubscribeFn;\n }\n updateCustomPresence(docRef, model, eventData, options) {\n const eventType = getMetadata(model).name;\n void this.eventService.publishCustomPresence(docRef.id, eventType, eventData, getMetadata(docRef.schema).version, options).catch(e => {\n this.logger.error(\"Failed to publish custom presence\", e, {\n docId: docRef.id\n });\n });\n }\n}\nfunction getWireSecurity({\n discretionary,\n mandatory\n} = EMPTY_DOCUMENT_SECURITY) {\n const {\n editors = [],\n owners = [],\n viewers = []\n } = discretionary;\n return {\n discretionary: {\n editors: editors.map(getWirePrincipal),\n owners: owners.map(getWirePrincipal),\n viewers: viewers.map(getWirePrincipal)\n },\n mandatory: {\n classification: mandatory.classification != null ? [...mandatory.classification] : [],\n markings: mandatory.markings != null ? [...mandatory.markings] : []\n }\n };\n}\nfunction getWirePrincipal(principal) {\n switch (principal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: principal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: principal.userId\n };\n default:\n assertNever(principal);\n }\n}\nfunction getLocalSecurity(wireSecurity) {\n return {\n discretionary: {\n editors: wireSecurity.discretionary.editors.map(getLocalPrincipal),\n owners: wireSecurity.discretionary.owners.map(getLocalPrincipal),\n viewers: wireSecurity.discretionary.viewers.map(getLocalPrincipal)\n },\n mandatory: {\n classification: [...wireSecurity.mandatory.classification],\n markings: [...wireSecurity.mandatory.markings]\n }\n };\n}\nfunction getLocalPrincipal(wirePrincipal) {\n switch (wirePrincipal.type) {\n case \"all\":\n return {\n type: \"all\"\n };\n case \"groupId\":\n return {\n type: \"groupId\",\n groupId: wirePrincipal.groupId\n };\n case \"userId\":\n return {\n type: \"userId\",\n userId: wirePrincipal.userId\n };\n default:\n assertNever(wirePrincipal);\n }\n}"]}
@@ -9,6 +9,7 @@ interface FoundryDocumentServiceConfig {
9
9
  export declare function createFoundryDocumentServiceConfig(config?: FoundryDocumentServiceConfig): ModuleConfigTuple<DocumentService>;
10
10
  export declare function internalCreateFoundryDocumentService(app: PackAppInternal, config: FoundryDocumentServiceConfig, eventService?: FoundryEventService): FoundryDocumentService;
11
11
  interface FoundryInternalDoc extends InternalYjsDoc {
12
+ metadataUpdateUnsubscribed?: boolean;
12
13
  syncSession?: SyncSession;
13
14
  }
14
15
  export declare class FoundryDocumentService extends BaseYjsDocumentService<FoundryInternalDoc> {
@@ -28,11 +29,9 @@ export declare class FoundryDocumentService extends BaseYjsDocumentService<Found
28
29
  readonly deleteDocument: (docRef: DocumentRef) => Promise<void>;
29
30
  protected onMetadataSubscriptionOpened(internalDoc: FoundryInternalDoc, docRef: DocumentRef): void;
30
31
  protected onDataSubscriptionOpened(internalDoc: FoundryInternalDoc, docRef: DocumentRef): void;
31
- protected onMetadataSubscriptionClosed(_internalDoc: FoundryInternalDoc, _docRef: DocumentRef): void;
32
+ protected onMetadataSubscriptionClosed(internalDoc: FoundryInternalDoc, _docRef: DocumentRef): void;
32
33
  protected onDataSubscriptionClosed(internalDoc: FoundryInternalDoc, _docRef: DocumentRef): void;
33
34
  onActivity<T extends DocumentSchema>(docRef: DocumentRef<T>, callback: (docRef: DocumentRef<T>, event: ActivityEvent) => void): Unsubscribe;
34
- private static readonly METADATA_ACTIVITY_EVENT_TYPES;
35
- private updateMetadataFromActivityEvent;
36
35
  private refetchMetadata;
37
36
  onPresence<T extends DocumentSchema>(docRef: DocumentRef<T>, callback: (docRef: DocumentRef<T>, event: PresenceEvent) => void, options?: PresenceSubscriptionOptions): Unsubscribe;
38
37
  updateCustomPresence<M extends Model>(docRef: DocumentRef, model: M, eventData: ModelData<M>, options?: PresencePublishOptions): void;
@@ -1 +1 @@
1
- {"mappings":"AAwBA,cAGO,wBACA,sBACA,mBACA;AACP,cACE,eAEA,kBACA,aACA,gBAEA,OACA,WACA,eACA,wBACA,mCACK;AAEP,cACE,wBACA,iBACA,gBACA,uBACA,8BACK;AACP,SACE,8BAGK;AACP,cAAc,qBAAqB,mBAAmB;UAU5C,6BAA6B;UAC5B;;AAGX,OAAO,iBAAS,mCACd,SAAQ,+BACP,kBAAkB;AAQrB,OAAO,iBAAS,qCACd,KAAK,iBACL,QAAQ,8BACR,eAAe,sBACd;UAQO,2BAA2B,eAAe;CAClD,cAAc;;AAGhB,OAAO,cAAM,+BAA+B,uBAAuB,oBAAoB;CAGnF,iBAAiB;CACjB,uBAAuB;CAHzB,YACE,KAAK,iBACL,AAASA,QAAQ,8BACjB,AAASC,cAAc;CAWzB,UAAU,kBACR,KAAK,aACL,UAAU,+BACT;CAOH,IAAI;CAMJ,IAAI;CAMJ,SAAS,iBAAwB,UAAU,gBACzC,UAAU,wBACV,QAAQ,MACP,QAAQ,YAAY;CA4BvB,SAAS,kBAAyB,UAAU,gBAC1C,0BACA,QAAQ,GACR,UAAU;EACR;EACA;EACA;OAED,QAAQ;CAmCX,SAAS,iBACP,QAAQ,aACR,QAAQ,2BACP,QAAQ;CA8BX,SAAS,iBACP,QAAQ,gBACP;CAWH,UAAU,6BACR,aAAa,oBACb,QAAQ;CAgDV,UAAU,yBACR,aAAa,oBACb,QAAQ;CAeV,UAAU,6BACR,cAAc,oBACd,SAAS;CAGX,UAAU,yBACR,aAAa,oBACb,SAAS;CAQX,WAAW,UAAU,gBACnB,QAAQ,YAAY,IACpB,WAAW,QAAQ,YAAY,IAAI,OAAO,yBACzC;CAyBH,wBAAwB;CAOxB,QAAQ;CASR,QAAQ;CAgCR,WAAW,UAAU,gBACnB,QAAQ,YAAY,IACpB,WAAW,QAAQ,YAAY,IAAI,OAAO,wBAC1C,UAAU,8BACT;CA0BH,qBAAqB,UAAU,OAC7B,QAAQ,aACR,OAAO,GACP,WAAW,UAAU,IACrB,UAAU","names":["config: FoundryDocumentServiceConfig","eventService: FoundryEventService"],"sources":["../../src/FoundryDocumentService.ts"],"version":3,"file":"FoundryDocumentService.d.ts"}
1
+ {"mappings":"AAwBA,cAGO,wBACA,sBACA,mBACA;AACP,cACE,eAEA,kBACA,aACA,gBAEA,OACA,WACA,eACA,wBACA,mCACK;AAEP,cACE,wBACA,iBACA,gBACA,uBACA,8BACK;AACP,SACE,8BAGK;AACP,cAAc,qBAAqB,mBAAmB;UAU5C,6BAA6B;UAC5B;;AAGX,OAAO,iBAAS,mCACd,SAAQ,+BACP,kBAAkB;AAQrB,OAAO,iBAAS,qCACd,KAAK,iBACL,QAAQ,8BACR,eAAe,sBACd;UAQO,2BAA2B,eAAe;CAClD;CACA,cAAc;;AAGhB,OAAO,cAAM,+BAA+B,uBAAuB,oBAAoB;CAGnF,iBAAiB;CACjB,uBAAuB;CAHzB,YACE,KAAK,iBACL,AAASA,QAAQ,8BACjB,AAASC,cAAc;CAWzB,UAAU,kBACR,KAAK,aACL,UAAU,+BACT;CAOH,IAAI;CAMJ,IAAI;CAMJ,SAAS,iBAAwB,UAAU,gBACzC,UAAU,wBACV,QAAQ,MACP,QAAQ,YAAY;CA4BvB,SAAS,kBAAyB,UAAU,gBAC1C,0BACA,QAAQ,GACR,UAAU;EACR;EACA;EACA;OAED,QAAQ;CAmCX,SAAS,iBACP,QAAQ,aACR,QAAQ,2BACP,QAAQ;CA8BX,SAAS,iBACP,QAAQ,gBACP;CAWH,UAAU,6BACR,aAAa,oBACb,QAAQ;CA4DV,UAAU,yBACR,aAAa,oBACb,QAAQ;CAgBV,UAAU,6BACR,aAAa,oBACb,SAAS;CAKX,UAAU,yBACR,aAAa,oBACb,SAAS;CAQX,WAAW,UAAU,gBACnB,QAAQ,YAAY,IACpB,WAAW,QAAQ,YAAY,IAAI,OAAO,yBACzC;CAwBH,QAAQ;CAgCR,WAAW,UAAU,gBACnB,QAAQ,YAAY,IACpB,WAAW,QAAQ,YAAY,IAAI,OAAO,wBAC1C,UAAU,8BACT;CA2BH,qBAAqB,UAAU,OAC7B,QAAQ,aACR,OAAO,GACP,WAAW,UAAU,IACrB,UAAU","names":["config: FoundryDocumentServiceConfig","eventService: FoundryEventService"],"sources":["../../src/FoundryDocumentService.ts"],"version":3,"file":"FoundryDocumentService.d.ts"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@palantir/pack.state.foundry",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "PACK State service that integrates with Palantir Foundry platform APIs.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@osdk/api": "^2.5.2",
32
- "@osdk/foundry.pack": "^2.55.0",
32
+ "@osdk/foundry.pack": "^2.58.0",
33
33
  "conjure-client": "^2.15.0",
34
34
  "remeda": "^2.32.0",
35
35
  "yjs": "^13.6.27",
@@ -37,7 +37,7 @@
37
37
  "@palantir/pack.core": "0.2.2",
38
38
  "@palantir/pack.document-schema.model-types": "0.7.0",
39
39
  "@palantir/pack.state.core": "0.10.0",
40
- "@palantir/pack.state.foundry-event": "0.9.0"
40
+ "@palantir/pack.state.foundry-event": "0.11.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/node": "^20.19.17",
@@ -42,7 +42,7 @@ import type {
42
42
  PresencePublishOptions,
43
43
  PresenceSubscriptionOptions,
44
44
  } from "@palantir/pack.document-schema.model-types";
45
- import { ActivityEventDataType, getMetadata } from "@palantir/pack.document-schema.model-types";
45
+ import { getMetadata } from "@palantir/pack.document-schema.model-types";
46
46
  import type {
47
47
  CreateDocumentMetadata,
48
48
  DocumentService,
@@ -92,6 +92,7 @@ export function internalCreateFoundryDocumentService(
92
92
  }
93
93
 
94
94
  interface FoundryInternalDoc extends InternalYjsDoc {
95
+ metadataUpdateUnsubscribed?: boolean;
95
96
  syncSession?: SyncSession;
96
97
  }
97
98
 
@@ -287,6 +288,18 @@ export class FoundryDocumentService extends BaseYjsDocumentService<FoundryIntern
287
288
  this.updateMetadataStatus(internalDoc, docRef, {
288
289
  load: DocumentLoadStatus.LOADED,
289
290
  });
291
+
292
+ this.eventService
293
+ .subscribeToMetadataUpdates(docRef.id, _event => {
294
+ if (!internalDoc.metadataUpdateUnsubscribed) {
295
+ this.refetchMetadata(docRef);
296
+ }
297
+ })
298
+ .catch((e: unknown) => {
299
+ this.logger.error("Failed to subscribe to metadata updates", e, {
300
+ docId: docRef.id,
301
+ });
302
+ });
290
303
  })
291
304
  .catch((e: unknown) => {
292
305
  if (!this.documents.has(docRef.id)) {
@@ -313,6 +326,7 @@ export class FoundryDocumentService extends BaseYjsDocumentService<FoundryIntern
313
326
  internalDoc.syncSession = this.eventService.startDocumentSync(
314
327
  docRef.id,
315
328
  internalDoc.yDoc,
329
+ getMetadata(docRef.schema).version,
316
330
  status => {
317
331
  this.updateDataStatus(internalDoc, docRef, status);
318
332
  },
@@ -320,9 +334,11 @@ export class FoundryDocumentService extends BaseYjsDocumentService<FoundryIntern
320
334
  }
321
335
 
322
336
  protected onMetadataSubscriptionClosed(
323
- _internalDoc: FoundryInternalDoc,
337
+ internalDoc: FoundryInternalDoc,
324
338
  _docRef: DocumentRef,
325
- ): void {}
339
+ ): void {
340
+ internalDoc.metadataUpdateUnsubscribed = true;
341
+ }
326
342
 
327
343
  protected onDataSubscriptionClosed(
328
344
  internalDoc: FoundryInternalDoc,
@@ -344,11 +360,10 @@ export class FoundryDocumentService extends BaseYjsDocumentService<FoundryIntern
344
360
  };
345
361
 
346
362
  this.eventService
347
- .subscribeToActivityUpdates(docRef.id, foundryEvent => {
363
+ .subscribeToActivityUpdates(docRef.id, getMetadata(docRef.schema).version, foundryEvent => {
348
364
  if (!unsubscribed) {
349
365
  const localEvent = getActivityEvent(docRef.schema, foundryEvent);
350
366
  if (localEvent != null) {
351
- this.updateMetadataFromActivityEvent(docRef, localEvent);
352
367
  callback(docRef, localEvent);
353
368
  }
354
369
  }
@@ -362,22 +377,6 @@ export class FoundryDocumentService extends BaseYjsDocumentService<FoundryIntern
362
377
  return unsubscribeFn;
363
378
  }
364
379
 
365
- private static readonly METADATA_ACTIVITY_EVENT_TYPES: ReadonlySet<string> = new Set([
366
- ActivityEventDataType.DOCUMENT_RENAME,
367
- ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE,
368
- ActivityEventDataType.DOCUMENT_MANDATORY_SECURITY_UPDATE,
369
- ActivityEventDataType.DOCUMENT_DISCRETIONARY_SECURITY_UPDATE,
370
- ]);
371
-
372
- private updateMetadataFromActivityEvent(
373
- docRef: DocumentRef,
374
- event: ActivityEvent,
375
- ): void {
376
- if (FoundryDocumentService.METADATA_ACTIVITY_EVENT_TYPES.has(event.eventData.type)) {
377
- this.refetchMetadata(docRef);
378
- }
379
- }
380
-
381
380
  private refetchMetadata(docRef: DocumentRef): void {
382
381
  if (!this.documents.has(docRef.id)) {
383
382
  return;
@@ -423,6 +422,7 @@ export class FoundryDocumentService extends BaseYjsDocumentService<FoundryIntern
423
422
  this.eventService
424
423
  .subscribeToPresenceUpdates(
425
424
  docRef.id,
425
+ getMetadata(docRef.schema).version,
426
426
  foundryUpdate => {
427
427
  if (!unsubscribed) {
428
428
  const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);
@@ -449,7 +449,13 @@ export class FoundryDocumentService extends BaseYjsDocumentService<FoundryIntern
449
449
  const eventType = getMetadata(model).name;
450
450
 
451
451
  void this.eventService
452
- .publishCustomPresence(docRef.id, eventType, eventData, options)
452
+ .publishCustomPresence(
453
+ docRef.id,
454
+ eventType,
455
+ eventData,
456
+ getMetadata(docRef.schema).version,
457
+ options,
458
+ )
453
459
  .catch((e: unknown) => {
454
460
  this.logger.error("Failed to publish custom presence", e, {
455
461
  docId: docRef.id,
@@ -108,20 +108,22 @@ describe("Foundry Security Conversion", () => {
108
108
 
109
109
  vi.mocked(Documents.get).mockResolvedValue(WIRE_DOCUMENT_WITH_SECURITY);
110
110
 
111
- mockEventService.startDocumentSync.mockImplementation((documentId, _yDoc, onStatusChange) => {
112
- const session: SyncSession = {
113
- clientId: `test-client-${++sessionCounter}`,
114
- documentId,
115
- };
116
-
117
- void Promise.resolve().then(() => {
118
- onStatusChange({
119
- load: DocumentLoadStatus.LOADED,
111
+ mockEventService.startDocumentSync.mockImplementation(
112
+ (documentId, _yDoc, _clientVersion, onStatusChange) => {
113
+ const session: SyncSession = {
114
+ clientId: `test-client-${++sessionCounter}`,
115
+ documentId,
116
+ };
117
+
118
+ void Promise.resolve().then(() => {
119
+ onStatusChange({
120
+ load: DocumentLoadStatus.LOADED,
121
+ });
120
122
  });
121
- });
122
123
 
123
- return session;
124
- });
124
+ return session;
125
+ },
126
+ );
125
127
 
126
128
  mockEventService.stopDocumentSync.mockImplementation(() => {});
127
129
 
@@ -20,7 +20,11 @@ import type { PackAppInternal } from "@palantir/pack.core";
20
20
  import type { DocumentId, DocumentSchema } from "@palantir/pack.document-schema.model-types";
21
21
  import { Metadata } from "@palantir/pack.document-schema.model-types";
22
22
  import { createDocRef, DocumentLoadStatus, type DocumentStatus } from "@palantir/pack.state.core";
23
- import type { FoundryEventService, SyncSession } from "@palantir/pack.state.foundry-event";
23
+ import type {
24
+ FoundryEventService,
25
+ SubscriptionId,
26
+ SyncSession,
27
+ } from "@palantir/pack.state.foundry-event";
24
28
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
25
29
  import type { MockProxy } from "vitest-mock-extended";
26
30
  import { mock } from "vitest-mock-extended";
@@ -113,22 +117,25 @@ describe("Foundry Document Status Tracking", () => {
113
117
 
114
118
  vi.mocked(Documents.get).mockResolvedValue(mockDocument);
115
119
 
116
- mockEventService.startDocumentSync.mockImplementation((documentId, _yDoc, onStatusChange) => {
117
- const session: SyncSession = {
118
- clientId: `test-client-${++sessionCounter}`,
119
- documentId,
120
- };
120
+ mockEventService.startDocumentSync.mockImplementation(
121
+ (documentId, _yDoc, _clientVersion, onStatusChange) => {
122
+ const session: SyncSession = {
123
+ clientId: `test-client-${++sessionCounter}`,
124
+ documentId,
125
+ };
121
126
 
122
- void Promise.resolve().then(() => {
123
- onStatusChange({
124
- load: DocumentLoadStatus.LOADED,
127
+ void Promise.resolve().then(() => {
128
+ onStatusChange({
129
+ load: DocumentLoadStatus.LOADED,
130
+ });
125
131
  });
126
- });
127
132
 
128
- return session;
129
- });
133
+ return session;
134
+ },
135
+ );
130
136
 
131
137
  mockEventService.stopDocumentSync.mockImplementation(() => {});
138
+ mockEventService.subscribeToMetadataUpdates.mockResolvedValue("mock-sub-id" as SubscriptionId);
132
139
 
133
140
  service = internalCreateFoundryDocumentService(mockApp, {}, mockEventService);
134
141
  });
@@ -296,7 +303,7 @@ describe("Foundry Document Status Tracking", () => {
296
303
 
297
304
  it("should handle websocket subscription errors and update data status to ERROR", async () => {
298
305
  mockEventService.startDocumentSync.mockImplementationOnce(
299
- (documentId, _yDoc, onStatusChange) => {
306
+ (documentId, _yDoc, _clientVersion, onStatusChange) => {
300
307
  const session: SyncSession = {
301
308
  clientId: `test-client-${++sessionCounter}`,
302
309
  documentId,
@@ -332,7 +339,7 @@ describe("Foundry Document Status Tracking", () => {
332
339
 
333
340
  it("should handle error messages from websocket and update data status", async () => {
334
341
  mockEventService.startDocumentSync.mockImplementationOnce(
335
- (documentId, _yDoc, onStatusChange) => {
342
+ (documentId, _yDoc, _clientVersion, onStatusChange) => {
336
343
  const session: SyncSession = {
337
344
  clientId: `test-client-${++sessionCounter}`,
338
345
  documentId,