@palantir/pack.state.foundry 0.3.0 → 0.5.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.3.0 lint /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.5.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.3.0 transpileBrowser /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.5.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.3.0 transpileCjs /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.5.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.3.0 transpileEsm /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.5.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.3.0 transpileTypes /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.5.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.3.0 typecheck /home/runner/work/pack/pack/packages/state/foundry
2
+ > @palantir/pack.state.foundry@0.5.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,32 @@
1
1
  # @palantir/pack.state.foundry
2
2
 
3
+ ## 0.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 5fa10ca: Convert wire security types for foundry backed documents
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [5c7e2a2]
12
+ - @palantir/pack.state.core@0.6.0
13
+ - @palantir/pack.state.foundry-event@0.5.0
14
+
15
+ ## 0.4.0
16
+
17
+ ### Minor Changes
18
+
19
+ - 72c058b: remove hardcoded metadata response values
20
+ - 8109bd7: add compass filesystem option for document type and doc creation
21
+
22
+ ### Patch Changes
23
+
24
+ - Updated dependencies [72c058b]
25
+ - Updated dependencies [ceb06a9]
26
+ - Updated dependencies [8109bd7]
27
+ - @palantir/pack.state.foundry-event@0.4.0
28
+ - @palantir/pack.state.core@0.5.0
29
+
3
30
  ## 0.3.0
4
31
 
5
32
  ### Minor Changes
@@ -190,6 +190,7 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
190
190
  const {
191
191
  documentTypeName,
192
192
  name,
193
+ parentFolderRid,
193
194
  security
194
195
  } = metadata;
195
196
  const ontologyRid = await getOntologyRid(this.app);
@@ -199,6 +200,9 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
199
200
  ontologyRid,
200
201
  security: getWireSecurity(security)
201
202
  };
203
+ if (parentFolderRid != null) {
204
+ request.parentFolderRid = parentFolderRid;
205
+ }
202
206
  const createResponse = await Documents.create(this.app.config.osdkClient, request, {
203
207
  preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API
204
208
  });
@@ -227,13 +231,8 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
227
231
  documentTypeName: doc.documentTypeName,
228
232
  id: doc.id,
229
233
  name: doc.name,
230
- ontologyRid: "unknown",
231
- security: {
232
- discretionary: {
233
- owners: []
234
- },
235
- mandatory: {}
236
- },
234
+ ontologyRid: doc.ontologyRid,
235
+ security: getLocalSecurity(doc.security),
237
236
  updatedBy: doc.updatedBy,
238
237
  updatedTime: doc.updatedTime
239
238
  })),
@@ -253,13 +252,8 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
253
252
  const metadata = {
254
253
  documentTypeName: document.documentTypeName,
255
254
  name: document.name,
256
- ontologyRid: "unknown",
257
- security: {
258
- discretionary: {
259
- owners: []
260
- },
261
- mandatory: {}
262
- }
255
+ ontologyRid: document.ontologyRid,
256
+ security: getLocalSecurity(document.security)
263
257
  };
264
258
  internalDoc.metadata = metadata;
265
259
  this.notifyMetadataSubscribers(internalDoc, docRef, metadata);
@@ -378,6 +372,39 @@ function getWirePrincipal(principal) {
378
372
  assertNever(principal);
379
373
  }
380
374
  }
375
+ function getLocalSecurity(wireSecurity) {
376
+ return {
377
+ discretionary: {
378
+ editors: wireSecurity.discretionary.editors.map(getLocalPrincipal),
379
+ owners: wireSecurity.discretionary.owners.map(getLocalPrincipal),
380
+ viewers: wireSecurity.discretionary.viewers.map(getLocalPrincipal)
381
+ },
382
+ mandatory: {
383
+ classification: [...wireSecurity.mandatory.classification],
384
+ markings: [...wireSecurity.mandatory.markings]
385
+ }
386
+ };
387
+ }
388
+ function getLocalPrincipal(wirePrincipal) {
389
+ switch (wirePrincipal.type) {
390
+ case "all":
391
+ return {
392
+ type: "all"
393
+ };
394
+ case "groupId":
395
+ return {
396
+ type: "groupId",
397
+ groupId: wirePrincipal.groupId
398
+ };
399
+ case "userId":
400
+ return {
401
+ type: "userId",
402
+ userId: wirePrincipal.userId
403
+ };
404
+ default:
405
+ assertNever(wirePrincipal);
406
+ }
407
+ }
381
408
 
382
409
  export { createFoundryDocumentServiceConfig };
383
410
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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}\n\n/**\n * Platform event type names as sent by backpack.\n * Note: Only DOCUMENT_CREATE is currently emitted by the backend.\n * Remaining types are included for future use.\n */\nconst PlatformEventType = {\n DOCUMENT_CREATE: \"DocumentCreateEvent\",\n DOCUMENT_DESCRIPTION_UPDATE: \"DocumentDescriptionUpdateEvent\",\n DOCUMENT_RENAME: \"DocumentRenameEvent\",\n DOCUMENT_SECURITY_UPDATE: \"DocumentMandatorySecurityUpdateEvent\"\n};\nfunction getActivityEventData(docSchema, {\n eventData,\n eventType\n}) {\n const platformEventData = getPlatformActivityEventData(eventType, eventData.data);\n if (platformEventData != null) {\n return platformEventData;\n }\n\n // Handle custom application-defined activity events\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData.data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n\n return {\n eventData: eventData.data,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n}\nfunction getPlatformActivityEventData(eventType, data) {\n switch (eventType) {\n case PlatformEventType.DOCUMENT_CREATE:\n {\n const wireData = data;\n return {\n initialMandatorySecurity: {\n classification: wireData.initialMandatorySecurity?.classification,\n markings: wireData.initialMandatorySecurity?.markings\n },\n name: wireData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n }\n case PlatformEventType.DOCUMENT_RENAME:\n {\n const wireData = data;\n return {\n newName: wireData.newName ?? \"\",\n previousName: wireData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n }\n case PlatformEventType.DOCUMENT_DESCRIPTION_UPDATE:\n {\n const wireData = data;\n return {\n isInitial: wireData.isInitial ?? false,\n newDescription: wireData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n }\n case PlatformEventType.DOCUMENT_SECURITY_UPDATE:\n {\n const wireData = data;\n return {\n newClassification: wireData.newClassification ?? [],\n newMarkings: wireData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_SECURITY_UPDATE\n };\n }\n default:\n return undefined;\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 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 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 ontologyRid: \"unknown\",\n security: {\n discretionary: {\n owners: []\n },\n mandatory: {}\n },\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\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 const metadata = {\n documentTypeName: document.documentTypeName,\n name: document.name,\n ontologyRid: \"unknown\",\n security: {\n discretionary: {\n owners: []\n },\n mandatory: {}\n }\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 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 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 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}"]}
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}\n\n/**\n * Platform event type names as sent by backpack.\n * Note: Only DOCUMENT_CREATE is currently emitted by the backend.\n * Remaining types are included for future use.\n */\nconst PlatformEventType = {\n DOCUMENT_CREATE: \"DocumentCreateEvent\",\n DOCUMENT_DESCRIPTION_UPDATE: \"DocumentDescriptionUpdateEvent\",\n DOCUMENT_RENAME: \"DocumentRenameEvent\",\n DOCUMENT_SECURITY_UPDATE: \"DocumentMandatorySecurityUpdateEvent\"\n};\nfunction getActivityEventData(docSchema, {\n eventData,\n eventType\n}) {\n const platformEventData = getPlatformActivityEventData(eventType, eventData.data);\n if (platformEventData != null) {\n return platformEventData;\n }\n\n // Handle custom application-defined activity events\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData.data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n\n return {\n eventData: eventData.data,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n}\nfunction getPlatformActivityEventData(eventType, data) {\n switch (eventType) {\n case PlatformEventType.DOCUMENT_CREATE:\n {\n const wireData = data;\n return {\n initialMandatorySecurity: {\n classification: wireData.initialMandatorySecurity?.classification,\n markings: wireData.initialMandatorySecurity?.markings\n },\n name: wireData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n }\n case PlatformEventType.DOCUMENT_RENAME:\n {\n const wireData = data;\n return {\n newName: wireData.newName ?? \"\",\n previousName: wireData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n }\n case PlatformEventType.DOCUMENT_DESCRIPTION_UPDATE:\n {\n const wireData = data;\n return {\n isInitial: wireData.isInitial ?? false,\n newDescription: wireData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n }\n case PlatformEventType.DOCUMENT_SECURITY_UPDATE:\n {\n const wireData = data;\n return {\n newClassification: wireData.newClassification ?? [],\n newMarkings: wireData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_SECURITY_UPDATE\n };\n }\n default:\n return undefined;\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 ontologyRid: doc.ontologyRid,\n security: getLocalSecurity(doc.security),\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\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 const metadata = {\n documentTypeName: document.documentTypeName,\n name: document.name,\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 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 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 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}"]}
@@ -192,6 +192,7 @@ var FoundryDocumentService = class extends pack_state_core.BaseYjsDocumentServic
192
192
  const {
193
193
  documentTypeName,
194
194
  name,
195
+ parentFolderRid,
195
196
  security
196
197
  } = metadata;
197
198
  const ontologyRid = await pack_core.getOntologyRid(this.app);
@@ -201,6 +202,9 @@ var FoundryDocumentService = class extends pack_state_core.BaseYjsDocumentServic
201
202
  ontologyRid,
202
203
  security: getWireSecurity(security)
203
204
  };
205
+ if (parentFolderRid != null) {
206
+ request.parentFolderRid = parentFolderRid;
207
+ }
204
208
  const createResponse = await foundry_pack.Documents.create(this.app.config.osdkClient, request, {
205
209
  preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API
206
210
  });
@@ -229,13 +233,8 @@ var FoundryDocumentService = class extends pack_state_core.BaseYjsDocumentServic
229
233
  documentTypeName: doc.documentTypeName,
230
234
  id: doc.id,
231
235
  name: doc.name,
232
- ontologyRid: "unknown",
233
- security: {
234
- discretionary: {
235
- owners: []
236
- },
237
- mandatory: {}
238
- },
236
+ ontologyRid: doc.ontologyRid,
237
+ security: getLocalSecurity(doc.security),
239
238
  updatedBy: doc.updatedBy,
240
239
  updatedTime: doc.updatedTime
241
240
  })),
@@ -255,13 +254,8 @@ var FoundryDocumentService = class extends pack_state_core.BaseYjsDocumentServic
255
254
  const metadata = {
256
255
  documentTypeName: document.documentTypeName,
257
256
  name: document.name,
258
- ontologyRid: "unknown",
259
- security: {
260
- discretionary: {
261
- owners: []
262
- },
263
- mandatory: {}
264
- }
257
+ ontologyRid: document.ontologyRid,
258
+ security: getLocalSecurity(document.security)
265
259
  };
266
260
  internalDoc.metadata = metadata;
267
261
  this.notifyMetadataSubscribers(internalDoc, docRef, metadata);
@@ -380,6 +374,39 @@ function getWirePrincipal(principal) {
380
374
  pack_core.assertNever(principal);
381
375
  }
382
376
  }
377
+ function getLocalSecurity(wireSecurity) {
378
+ return {
379
+ discretionary: {
380
+ editors: wireSecurity.discretionary.editors.map(getLocalPrincipal),
381
+ owners: wireSecurity.discretionary.owners.map(getLocalPrincipal),
382
+ viewers: wireSecurity.discretionary.viewers.map(getLocalPrincipal)
383
+ },
384
+ mandatory: {
385
+ classification: [...wireSecurity.mandatory.classification],
386
+ markings: [...wireSecurity.mandatory.markings]
387
+ }
388
+ };
389
+ }
390
+ function getLocalPrincipal(wirePrincipal) {
391
+ switch (wirePrincipal.type) {
392
+ case "all":
393
+ return {
394
+ type: "all"
395
+ };
396
+ case "groupId":
397
+ return {
398
+ type: "groupId",
399
+ groupId: wirePrincipal.groupId
400
+ };
401
+ case "userId":
402
+ return {
403
+ type: "userId",
404
+ userId: wirePrincipal.userId
405
+ };
406
+ default:
407
+ pack_core.assertNever(wirePrincipal);
408
+ }
409
+ }
383
410
 
384
411
  exports.createFoundryDocumentServiceConfig = createFoundryDocumentServiceConfig;
385
412
  //# sourceMappingURL=index.cjs.map
@@ -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}\n\n/**\n * Platform event type names as sent by backpack.\n * Note: Only DOCUMENT_CREATE is currently emitted by the backend.\n * Remaining types are included for future use.\n */\nconst PlatformEventType = {\n DOCUMENT_CREATE: \"DocumentCreateEvent\",\n DOCUMENT_DESCRIPTION_UPDATE: \"DocumentDescriptionUpdateEvent\",\n DOCUMENT_RENAME: \"DocumentRenameEvent\",\n DOCUMENT_SECURITY_UPDATE: \"DocumentMandatorySecurityUpdateEvent\"\n};\nfunction getActivityEventData(docSchema, {\n eventData,\n eventType\n}) {\n const platformEventData = getPlatformActivityEventData(eventType, eventData.data);\n if (platformEventData != null) {\n return platformEventData;\n }\n\n // Handle custom application-defined activity events\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData.data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n\n return {\n eventData: eventData.data,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n}\nfunction getPlatformActivityEventData(eventType, data) {\n switch (eventType) {\n case PlatformEventType.DOCUMENT_CREATE:\n {\n const wireData = data;\n return {\n initialMandatorySecurity: {\n classification: wireData.initialMandatorySecurity?.classification,\n markings: wireData.initialMandatorySecurity?.markings\n },\n name: wireData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n }\n case PlatformEventType.DOCUMENT_RENAME:\n {\n const wireData = data;\n return {\n newName: wireData.newName ?? \"\",\n previousName: wireData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n }\n case PlatformEventType.DOCUMENT_DESCRIPTION_UPDATE:\n {\n const wireData = data;\n return {\n isInitial: wireData.isInitial ?? false,\n newDescription: wireData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n }\n case PlatformEventType.DOCUMENT_SECURITY_UPDATE:\n {\n const wireData = data;\n return {\n newClassification: wireData.newClassification ?? [],\n newMarkings: wireData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_SECURITY_UPDATE\n };\n }\n default:\n return undefined;\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 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 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 ontologyRid: \"unknown\",\n security: {\n discretionary: {\n owners: []\n },\n mandatory: {}\n },\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\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 const metadata = {\n documentTypeName: document.documentTypeName,\n name: document.name,\n ontologyRid: \"unknown\",\n security: {\n discretionary: {\n owners: []\n },\n mandatory: {}\n }\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 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 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 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}"]}
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}\n\n/**\n * Platform event type names as sent by backpack.\n * Note: Only DOCUMENT_CREATE is currently emitted by the backend.\n * Remaining types are included for future use.\n */\nconst PlatformEventType = {\n DOCUMENT_CREATE: \"DocumentCreateEvent\",\n DOCUMENT_DESCRIPTION_UPDATE: \"DocumentDescriptionUpdateEvent\",\n DOCUMENT_RENAME: \"DocumentRenameEvent\",\n DOCUMENT_SECURITY_UPDATE: \"DocumentMandatorySecurityUpdateEvent\"\n};\nfunction getActivityEventData(docSchema, {\n eventData,\n eventType\n}) {\n const platformEventData = getPlatformActivityEventData(eventType, eventData.data);\n if (platformEventData != null) {\n return platformEventData;\n }\n\n // Handle custom application-defined activity events\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData.data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n\n return {\n eventData: eventData.data,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n}\nfunction getPlatformActivityEventData(eventType, data) {\n switch (eventType) {\n case PlatformEventType.DOCUMENT_CREATE:\n {\n const wireData = data;\n return {\n initialMandatorySecurity: {\n classification: wireData.initialMandatorySecurity?.classification,\n markings: wireData.initialMandatorySecurity?.markings\n },\n name: wireData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n }\n case PlatformEventType.DOCUMENT_RENAME:\n {\n const wireData = data;\n return {\n newName: wireData.newName ?? \"\",\n previousName: wireData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n }\n case PlatformEventType.DOCUMENT_DESCRIPTION_UPDATE:\n {\n const wireData = data;\n return {\n isInitial: wireData.isInitial ?? false,\n newDescription: wireData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n }\n case PlatformEventType.DOCUMENT_SECURITY_UPDATE:\n {\n const wireData = data;\n return {\n newClassification: wireData.newClassification ?? [],\n newMarkings: wireData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_SECURITY_UPDATE\n };\n }\n default:\n return undefined;\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 ontologyRid: doc.ontologyRid,\n security: getLocalSecurity(doc.security),\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\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 const metadata = {\n documentTypeName: document.documentTypeName,\n name: document.name,\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 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 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 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}"]}
@@ -190,6 +190,7 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
190
190
  const {
191
191
  documentTypeName,
192
192
  name,
193
+ parentFolderRid,
193
194
  security
194
195
  } = metadata;
195
196
  const ontologyRid = await getOntologyRid(this.app);
@@ -199,6 +200,9 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
199
200
  ontologyRid,
200
201
  security: getWireSecurity(security)
201
202
  };
203
+ if (parentFolderRid != null) {
204
+ request.parentFolderRid = parentFolderRid;
205
+ }
202
206
  const createResponse = await Documents.create(this.app.config.osdkClient, request, {
203
207
  preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API
204
208
  });
@@ -227,13 +231,8 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
227
231
  documentTypeName: doc.documentTypeName,
228
232
  id: doc.id,
229
233
  name: doc.name,
230
- ontologyRid: "unknown",
231
- security: {
232
- discretionary: {
233
- owners: []
234
- },
235
- mandatory: {}
236
- },
234
+ ontologyRid: doc.ontologyRid,
235
+ security: getLocalSecurity(doc.security),
237
236
  updatedBy: doc.updatedBy,
238
237
  updatedTime: doc.updatedTime
239
238
  })),
@@ -253,13 +252,8 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
253
252
  const metadata = {
254
253
  documentTypeName: document.documentTypeName,
255
254
  name: document.name,
256
- ontologyRid: "unknown",
257
- security: {
258
- discretionary: {
259
- owners: []
260
- },
261
- mandatory: {}
262
- }
255
+ ontologyRid: document.ontologyRid,
256
+ security: getLocalSecurity(document.security)
263
257
  };
264
258
  internalDoc.metadata = metadata;
265
259
  this.notifyMetadataSubscribers(internalDoc, docRef, metadata);
@@ -378,6 +372,39 @@ function getWirePrincipal(principal) {
378
372
  assertNever(principal);
379
373
  }
380
374
  }
375
+ function getLocalSecurity(wireSecurity) {
376
+ return {
377
+ discretionary: {
378
+ editors: wireSecurity.discretionary.editors.map(getLocalPrincipal),
379
+ owners: wireSecurity.discretionary.owners.map(getLocalPrincipal),
380
+ viewers: wireSecurity.discretionary.viewers.map(getLocalPrincipal)
381
+ },
382
+ mandatory: {
383
+ classification: [...wireSecurity.mandatory.classification],
384
+ markings: [...wireSecurity.mandatory.markings]
385
+ }
386
+ };
387
+ }
388
+ function getLocalPrincipal(wirePrincipal) {
389
+ switch (wirePrincipal.type) {
390
+ case "all":
391
+ return {
392
+ type: "all"
393
+ };
394
+ case "groupId":
395
+ return {
396
+ type: "groupId",
397
+ groupId: wirePrincipal.groupId
398
+ };
399
+ case "userId":
400
+ return {
401
+ type: "userId",
402
+ userId: wirePrincipal.userId
403
+ };
404
+ default:
405
+ assertNever(wirePrincipal);
406
+ }
407
+ }
381
408
 
382
409
  export { createFoundryDocumentServiceConfig };
383
410
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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}\n\n/**\n * Platform event type names as sent by backpack.\n * Note: Only DOCUMENT_CREATE is currently emitted by the backend.\n * Remaining types are included for future use.\n */\nconst PlatformEventType = {\n DOCUMENT_CREATE: \"DocumentCreateEvent\",\n DOCUMENT_DESCRIPTION_UPDATE: \"DocumentDescriptionUpdateEvent\",\n DOCUMENT_RENAME: \"DocumentRenameEvent\",\n DOCUMENT_SECURITY_UPDATE: \"DocumentMandatorySecurityUpdateEvent\"\n};\nfunction getActivityEventData(docSchema, {\n eventData,\n eventType\n}) {\n const platformEventData = getPlatformActivityEventData(eventType, eventData.data);\n if (platformEventData != null) {\n return platformEventData;\n }\n\n // Handle custom application-defined activity events\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData.data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n\n return {\n eventData: eventData.data,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n}\nfunction getPlatformActivityEventData(eventType, data) {\n switch (eventType) {\n case PlatformEventType.DOCUMENT_CREATE:\n {\n const wireData = data;\n return {\n initialMandatorySecurity: {\n classification: wireData.initialMandatorySecurity?.classification,\n markings: wireData.initialMandatorySecurity?.markings\n },\n name: wireData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n }\n case PlatformEventType.DOCUMENT_RENAME:\n {\n const wireData = data;\n return {\n newName: wireData.newName ?? \"\",\n previousName: wireData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n }\n case PlatformEventType.DOCUMENT_DESCRIPTION_UPDATE:\n {\n const wireData = data;\n return {\n isInitial: wireData.isInitial ?? false,\n newDescription: wireData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n }\n case PlatformEventType.DOCUMENT_SECURITY_UPDATE:\n {\n const wireData = data;\n return {\n newClassification: wireData.newClassification ?? [],\n newMarkings: wireData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_SECURITY_UPDATE\n };\n }\n default:\n return undefined;\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 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 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 ontologyRid: \"unknown\",\n security: {\n discretionary: {\n owners: []\n },\n mandatory: {}\n },\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\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 const metadata = {\n documentTypeName: document.documentTypeName,\n name: document.name,\n ontologyRid: \"unknown\",\n security: {\n discretionary: {\n owners: []\n },\n mandatory: {}\n }\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 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 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 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}"]}
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}\n\n/**\n * Platform event type names as sent by backpack.\n * Note: Only DOCUMENT_CREATE is currently emitted by the backend.\n * Remaining types are included for future use.\n */\nconst PlatformEventType = {\n DOCUMENT_CREATE: \"DocumentCreateEvent\",\n DOCUMENT_DESCRIPTION_UPDATE: \"DocumentDescriptionUpdateEvent\",\n DOCUMENT_RENAME: \"DocumentRenameEvent\",\n DOCUMENT_SECURITY_UPDATE: \"DocumentMandatorySecurityUpdateEvent\"\n};\nfunction getActivityEventData(docSchema, {\n eventData,\n eventType\n}) {\n const platformEventData = getPlatformActivityEventData(eventType, eventData.data);\n if (platformEventData != null) {\n return platformEventData;\n }\n\n // Handle custom application-defined activity events\n // TODO: validate model is valid for activity events\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: eventData.data,\n rawType: eventType,\n type: ActivityEventDataType.UNKNOWN\n };\n }\n\n // TODO: validate data against model schema\n\n return {\n eventData: eventData.data,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n };\n}\nfunction getPlatformActivityEventData(eventType, data) {\n switch (eventType) {\n case PlatformEventType.DOCUMENT_CREATE:\n {\n const wireData = data;\n return {\n initialMandatorySecurity: {\n classification: wireData.initialMandatorySecurity?.classification,\n markings: wireData.initialMandatorySecurity?.markings\n },\n name: wireData.name ?? \"\",\n type: ActivityEventDataType.DOCUMENT_CREATE\n };\n }\n case PlatformEventType.DOCUMENT_RENAME:\n {\n const wireData = data;\n return {\n newName: wireData.newName ?? \"\",\n previousName: wireData.previousName ?? \"\",\n type: ActivityEventDataType.DOCUMENT_RENAME\n };\n }\n case PlatformEventType.DOCUMENT_DESCRIPTION_UPDATE:\n {\n const wireData = data;\n return {\n isInitial: wireData.isInitial ?? false,\n newDescription: wireData.newDescription ?? \"\",\n type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE\n };\n }\n case PlatformEventType.DOCUMENT_SECURITY_UPDATE:\n {\n const wireData = data;\n return {\n newClassification: wireData.newClassification ?? [],\n newMarkings: wireData.newMarkings ?? [],\n type: ActivityEventDataType.DOCUMENT_SECURITY_UPDATE\n };\n }\n default:\n return undefined;\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 ontologyRid: doc.ontologyRid,\n security: getLocalSecurity(doc.security),\n updatedBy: doc.updatedBy,\n updatedTime: doc.updatedTime\n })),\n nextPageToken: searchResponse.nextPageToken\n };\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 const metadata = {\n documentTypeName: document.documentTypeName,\n name: document.name,\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 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 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 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 +1 @@
1
- {"mappings":"AAwBA,cAGO,wBACA,sBACA,mBACA;AACP,cACE,eAEA,kBACA,aACA,gBAEA,OACA,WACA,eACA,wBACA,mCACK;AAEP,cACE,wBACA,iBACA,gBACA,6BACK;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;CAuBvB,SAAS,kBAAyB,UAAU,gBAC1C,0BACA,QAAQ,GACR,UAAU;EACR;EACA;EACA;OAED,QAAQ;CAkCX,UAAU,6BACR,aAAa,oBACb,QAAQ;CAwCV,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;CAwBH,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,6BACK;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;CAkCX,UAAU,6BACR,aAAa,oBACb,QAAQ;CAwCV,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;CAwBH,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"}
@@ -0,0 +1 @@
1
+ {"mappings":"","names":[],"sources":["../../../src/__tests__/FoundrySecurityConversion.test.ts"],"version":3,"file":"FoundrySecurityConversion.test.d.ts"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@palantir/pack.state.foundry",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "PACK State service that integrates with Palantir Foundry platform APIs.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -33,11 +33,11 @@
33
33
  "conjure-client": "^2.15.0",
34
34
  "remeda": "^2.32.0",
35
35
  "yjs": "^13.6.27",
36
- "@palantir/pack.auth": "0.1.2",
37
36
  "@palantir/pack.core": "0.2.2",
38
37
  "@palantir/pack.document-schema.model-types": "0.4.0",
39
- "@palantir/pack.state.core": "0.4.0",
40
- "@palantir/pack.state.foundry-event": "0.3.0"
38
+ "@palantir/pack.auth": "0.1.2",
39
+ "@palantir/pack.state.foundry-event": "0.5.0",
40
+ "@palantir/pack.state.core": "0.6.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/node": "^20.19.17",
@@ -135,7 +135,7 @@ export class FoundryDocumentService extends BaseYjsDocumentService<FoundryIntern
135
135
  metadata: CreateDocumentMetadata,
136
136
  schema: T,
137
137
  ): Promise<DocumentRef<T>> => {
138
- const { documentTypeName, name, security } = metadata;
138
+ const { documentTypeName, name, parentFolderRid, security } = metadata;
139
139
  const ontologyRid = await getOntologyRid(this.app);
140
140
 
141
141
  const request: CreateDocumentRequest = {
@@ -144,6 +144,11 @@ export class FoundryDocumentService extends BaseYjsDocumentService<FoundryIntern
144
144
  ontologyRid: ontologyRid,
145
145
  security: getWireSecurity(security),
146
146
  };
147
+
148
+ if (parentFolderRid != null) {
149
+ request.parentFolderRid = parentFolderRid;
150
+ }
151
+
147
152
  const createResponse = await Documents.create(
148
153
  this.app.config.osdkClient,
149
154
  request,
@@ -190,8 +195,8 @@ export class FoundryDocumentService extends BaseYjsDocumentService<FoundryIntern
190
195
  documentTypeName: doc.documentTypeName,
191
196
  id: doc.id as DocumentId,
192
197
  name: doc.name,
193
- ontologyRid: "unknown",
194
- security: { discretionary: { owners: [] }, mandatory: {} },
198
+ ontologyRid: doc.ontologyRid,
199
+ security: getLocalSecurity(doc.security),
195
200
  updatedBy: doc.updatedBy,
196
201
  updatedTime: doc.updatedTime,
197
202
  })),
@@ -220,8 +225,8 @@ export class FoundryDocumentService extends BaseYjsDocumentService<FoundryIntern
220
225
  const metadata: DocumentMetadata = {
221
226
  documentTypeName: document.documentTypeName,
222
227
  name: document.name,
223
- ontologyRid: "unknown",
224
- security: { discretionary: { owners: [] }, mandatory: {} },
228
+ ontologyRid: document.ontologyRid,
229
+ security: getLocalSecurity(document.security),
225
230
  };
226
231
 
227
232
  internalDoc.metadata = metadata;
@@ -381,3 +386,32 @@ function getWirePrincipal(
381
386
  assertNever(principal);
382
387
  }
383
388
  }
389
+
390
+ function getLocalSecurity(wireSecurity: WireDocumentSecurity): DocumentSecurity {
391
+ return {
392
+ discretionary: {
393
+ editors: wireSecurity.discretionary.editors.map(getLocalPrincipal),
394
+ owners: wireSecurity.discretionary.owners.map(getLocalPrincipal),
395
+ viewers: wireSecurity.discretionary.viewers.map(getLocalPrincipal),
396
+ },
397
+ mandatory: {
398
+ classification: [...wireSecurity.mandatory.classification],
399
+ markings: [...wireSecurity.mandatory.markings],
400
+ },
401
+ };
402
+ }
403
+
404
+ function getLocalPrincipal(
405
+ wirePrincipal: WireDiscretionaryPrincipal,
406
+ ): DiscretionaryPrincipal {
407
+ switch (wirePrincipal.type) {
408
+ case "all":
409
+ return { type: "all" };
410
+ case "groupId":
411
+ return { type: "groupId", groupId: wirePrincipal.groupId };
412
+ case "userId":
413
+ return { type: "userId", userId: wirePrincipal.userId };
414
+ default:
415
+ assertNever(wirePrincipal);
416
+ }
417
+ }
@@ -0,0 +1,229 @@
1
+ /*
2
+ * Copyright 2026 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import type { Document, DocumentSearchResponse } from "@osdk/foundry.pack";
18
+ import { Documents } from "@osdk/foundry.pack";
19
+ import type { PackAppInternal } from "@palantir/pack.core";
20
+ import type {
21
+ DocumentId,
22
+ DocumentMetadata,
23
+ DocumentSchema,
24
+ } from "@palantir/pack.document-schema.model-types";
25
+ import { Metadata } from "@palantir/pack.document-schema.model-types";
26
+ import { createDocRef, DocumentLoadStatus } from "@palantir/pack.state.core";
27
+ import type { FoundryEventService, SyncSession } from "@palantir/pack.state.foundry-event";
28
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
29
+ import type { MockProxy } from "vitest-mock-extended";
30
+ import { mock } from "vitest-mock-extended";
31
+ import type { FoundryDocumentService } from "../FoundryDocumentService.js";
32
+ import { internalCreateFoundryDocumentService } from "../FoundryDocumentService.js";
33
+
34
+ vi.mock("@osdk/foundry.pack", () => ({
35
+ Documents: {
36
+ get: vi.fn(),
37
+ search: vi.fn(),
38
+ },
39
+ }));
40
+
41
+ const mockAuthModule = {
42
+ onTokenChange: vi.fn(),
43
+ getToken: vi.fn().mockReturnValue("mock-token"),
44
+ };
45
+
46
+ const mockLogger = {
47
+ child: vi.fn(),
48
+ debug: vi.fn((..._args: unknown[]) => {}),
49
+ error: vi.fn((..._args: unknown[]) => {}),
50
+ info: vi.fn((..._args: unknown[]) => {}),
51
+ warn: vi.fn((..._args: unknown[]) => {}),
52
+ };
53
+
54
+ mockLogger.child.mockReturnValue(mockLogger);
55
+
56
+ const mockOsdkClient = {};
57
+
58
+ const mockApp = {
59
+ getModule: vi.fn().mockReturnValue(mockAuthModule),
60
+ config: {
61
+ logger: mockLogger,
62
+ osdkClient: mockOsdkClient,
63
+ remote: {
64
+ packWsPath: "/ws",
65
+ baseUrl: "https://test.example.com",
66
+ },
67
+ },
68
+ } as unknown as PackAppInternal;
69
+
70
+ const testSchema = {
71
+ [Metadata]: {
72
+ version: 1,
73
+ },
74
+ } as const satisfies DocumentSchema;
75
+
76
+ const WIRE_DOCUMENT_WITH_SECURITY: Document = {
77
+ id: "test-doc-security",
78
+ name: "Secure Document",
79
+ documentTypeName: "SecureType",
80
+ ontologyRid: "ri.ontology..test-ontology-rid",
81
+ createdBy: "user-1",
82
+ createdTime: "2025-01-01T00:00:00Z",
83
+ updatedBy: "user-2",
84
+ updatedTime: "2025-01-02T00:00:00Z",
85
+ security: {
86
+ mandatory: {
87
+ classification: ["SECRET"],
88
+ markings: ["MARKING-1", "MARKING-2"],
89
+ },
90
+ discretionary: {
91
+ owners: [{ type: "userId", userId: "owner-user-1" }],
92
+ editors: [{ type: "groupId", groupId: "editors-group-1" }],
93
+ viewers: [{ type: "all" }],
94
+ },
95
+ },
96
+ };
97
+
98
+ describe("Foundry Security Conversion", () => {
99
+ let mockEventService: MockProxy<FoundryEventService>;
100
+ let service: FoundryDocumentService;
101
+ let sessionCounter: number;
102
+
103
+ beforeEach(() => {
104
+ vi.useFakeTimers();
105
+ mockEventService = mock();
106
+ sessionCounter = 0;
107
+
108
+ vi.mocked(Documents.get).mockResolvedValue(WIRE_DOCUMENT_WITH_SECURITY);
109
+
110
+ mockEventService.startDocumentSync.mockImplementation((documentId, _yDoc, onStatusChange) => {
111
+ const session: SyncSession = {
112
+ clientId: `test-client-${++sessionCounter}`,
113
+ documentId,
114
+ };
115
+
116
+ void Promise.resolve().then(() => {
117
+ onStatusChange({
118
+ load: DocumentLoadStatus.LOADED,
119
+ });
120
+ });
121
+
122
+ return session;
123
+ });
124
+
125
+ mockEventService.stopDocumentSync.mockImplementation(() => {});
126
+
127
+ service = internalCreateFoundryDocumentService(mockApp, {}, mockEventService);
128
+ });
129
+
130
+ afterEach(() => {
131
+ vi.useRealTimers();
132
+ vi.mocked(Documents.get).mockClear();
133
+ vi.mocked(Documents.search).mockClear();
134
+ });
135
+
136
+ describe("searchDocuments", () => {
137
+ it("should convert wire security to local security", async () => {
138
+ const searchResponse: DocumentSearchResponse = {
139
+ data: [WIRE_DOCUMENT_WITH_SECURITY],
140
+ };
141
+ vi.mocked(Documents.search).mockResolvedValue(searchResponse);
142
+
143
+ const result = await service.searchDocuments("SecureType", testSchema);
144
+
145
+ expect(result.data).toHaveLength(1);
146
+ const doc = result.data[0];
147
+
148
+ expect(doc?.security).toEqual({
149
+ mandatory: {
150
+ classification: ["SECRET"],
151
+ markings: ["MARKING-1", "MARKING-2"],
152
+ },
153
+ discretionary: {
154
+ owners: [{ type: "userId", userId: "owner-user-1" }],
155
+ editors: [{ type: "groupId", groupId: "editors-group-1" }],
156
+ viewers: [{ type: "all" }],
157
+ },
158
+ });
159
+ });
160
+
161
+ it("should preserve ontologyRid from response", async () => {
162
+ const searchResponse: DocumentSearchResponse = {
163
+ data: [WIRE_DOCUMENT_WITH_SECURITY],
164
+ };
165
+ vi.mocked(Documents.search).mockResolvedValue(searchResponse);
166
+
167
+ const result = await service.searchDocuments("SecureType", testSchema);
168
+
169
+ expect(result.data[0]?.ontologyRid).toBe("ri.ontology..test-ontology-rid");
170
+ });
171
+ });
172
+
173
+ describe("onMetadataSubscriptionOpened", () => {
174
+ const unsubscribes: Array<() => void> = [];
175
+
176
+ afterEach(() => {
177
+ unsubscribes.forEach(fn => {
178
+ fn();
179
+ });
180
+ unsubscribes.length = 0;
181
+ });
182
+
183
+ it("should convert wire security to local security in metadata", async () => {
184
+ const docRef = createDocRef(mockApp, "test-doc-security" as DocumentId, testSchema);
185
+
186
+ const metadataUpdates: DocumentMetadata[] = [];
187
+
188
+ unsubscribes.push(
189
+ service.onMetadataChange(docRef, (_, metadata) => {
190
+ metadataUpdates.push(metadata);
191
+ }),
192
+ );
193
+
194
+ await vi.runAllTimersAsync();
195
+
196
+ expect(metadataUpdates).toHaveLength(1);
197
+ const metadata = metadataUpdates[0];
198
+
199
+ expect(metadata?.security).toEqual({
200
+ mandatory: {
201
+ classification: ["SECRET"],
202
+ markings: ["MARKING-1", "MARKING-2"],
203
+ },
204
+ discretionary: {
205
+ owners: [{ type: "userId", userId: "owner-user-1" }],
206
+ editors: [{ type: "groupId", groupId: "editors-group-1" }],
207
+ viewers: [{ type: "all" }],
208
+ },
209
+ });
210
+ });
211
+
212
+ it("should preserve ontologyRid in metadata", async () => {
213
+ const docRef = createDocRef(mockApp, "test-doc-security" as DocumentId, testSchema);
214
+
215
+ const metadataUpdates: DocumentMetadata[] = [];
216
+
217
+ unsubscribes.push(
218
+ service.onMetadataChange(docRef, (_, metadata) => {
219
+ metadataUpdates.push(metadata);
220
+ }),
221
+ );
222
+
223
+ await vi.runAllTimersAsync();
224
+
225
+ expect(metadataUpdates).toHaveLength(1);
226
+ expect(metadataUpdates[0]?.ontologyRid).toBe("ri.ontology..test-ontology-rid");
227
+ });
228
+ });
229
+ });
@@ -82,7 +82,23 @@ const mockDocument: Document = {
82
82
  id: "test-doc",
83
83
  name: "Test Document",
84
84
  documentTypeName: "TestType",
85
- } as Document;
85
+ ontologyRid: "ri.ontology..test-rid",
86
+ createdBy: "user-1",
87
+ createdTime: "2025-01-01T00:00:00Z",
88
+ updatedBy: "user-1",
89
+ updatedTime: "2025-01-01T00:00:00Z",
90
+ security: {
91
+ mandatory: {
92
+ classification: [],
93
+ markings: [],
94
+ },
95
+ discretionary: {
96
+ owners: [],
97
+ editors: [],
98
+ viewers: [],
99
+ },
100
+ },
101
+ };
86
102
 
87
103
  describe("Foundry Document Status Tracking", () => {
88
104
  let mockEventService: MockProxy<FoundryEventService>;