@palantir/pack.state.foundry 0.0.1-beta.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-lint.log +2 -2
- package/.turbo/turbo-transpileBrowser.log +1 -1
- package/.turbo/turbo-transpileCjs.log +1 -1
- package/.turbo/turbo-transpileEsm.log +1 -1
- package/.turbo/turbo-transpileTypes.log +1 -1
- package/.turbo/turbo-typecheck.log +1 -1
- package/CHANGELOG.md +37 -0
- package/build/browser/index.js +185 -0
- package/build/browser/index.js.map +1 -1
- package/build/cjs/index.cjs +185 -0
- package/build/cjs/index.cjs.map +1 -1
- package/build/esm/index.js +185 -0
- package/build/esm/index.js.map +1 -1
- package/build/types/FoundryDocumentService.d.ts +11 -2
- package/build/types/FoundryDocumentService.d.ts.map +1 -1
- package/build/types/eventMappers.d.ts +5 -0
- package/build/types/eventMappers.d.ts.map +1 -0
- package/package.json +10 -10
- package/src/FoundryDocumentService.ts +114 -2
- package/src/eventMappers.ts +168 -0
package/.turbo/turbo-lint.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @palantir/pack.state.foundry@0.0.
|
|
3
|
-
> eslint ./src
|
|
2
|
+
> @palantir/pack.state.foundry@0.0.2 lint /home/runner/work/pack/pack/packages/state/foundry
|
|
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.0.
|
|
2
|
+
> @palantir/pack.state.foundry@0.0.2 transpileBrowser /home/runner/work/pack/pack/packages/state/foundry
|
|
3
3
|
> monorepo-transpile -f esm -m bundle -t browser
|
|
4
4
|
|
|
5
5
|
👍
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# @palantir/pack.state.foundry
|
|
2
|
+
|
|
3
|
+
## 0.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 4ab9c98: Update @osdk/foundry.pack dependency, add searchDocuments to FoundryEventService
|
|
8
|
+
- eba27ae: Fix issues locating model metadata when multiple copies of the schema package are present
|
|
9
|
+
- Updated dependencies [4ab9c98]
|
|
10
|
+
- Updated dependencies [eba27ae]
|
|
11
|
+
- Updated dependencies [67df6e4]
|
|
12
|
+
- @palantir/pack.state.foundry-event@0.0.2
|
|
13
|
+
- @palantir/pack.document-schema.model-types@0.1.1
|
|
14
|
+
- @palantir/pack.core@0.1.1
|
|
15
|
+
- @palantir/pack.state.core@0.1.1
|
|
16
|
+
- @palantir/pack.auth@0.0.2
|
|
17
|
+
|
|
18
|
+
## 0.0.1
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- 09f7acd: Add activity & presence custom event subscriptions
|
|
23
|
+
- fe9891e: Add new state packages
|
|
24
|
+
- Updated dependencies [8ed48e6]
|
|
25
|
+
- Updated dependencies [8698373]
|
|
26
|
+
- Updated dependencies [09f7acd]
|
|
27
|
+
- Updated dependencies [99d9186]
|
|
28
|
+
- Updated dependencies [77c07c4]
|
|
29
|
+
- Updated dependencies [27a3b33]
|
|
30
|
+
- Updated dependencies [511ee0c]
|
|
31
|
+
- Updated dependencies [3ebc927]
|
|
32
|
+
- Updated dependencies [fe9891e]
|
|
33
|
+
- @palantir/pack.auth@0.0.1
|
|
34
|
+
- @palantir/pack.core@0.1.0
|
|
35
|
+
- @palantir/pack.document-schema.model-types@0.1.0
|
|
36
|
+
- @palantir/pack.state.foundry-event@0.0.1
|
|
37
|
+
- @palantir/pack.state.core@0.1.0
|
package/build/browser/index.js
CHANGED
|
@@ -1,6 +1,123 @@
|
|
|
1
1
|
import { Documents } from '@osdk/foundry.pack';
|
|
2
|
+
import { PresenceEventDataType, getMetadata, ActivityEventDataType } from '@palantir/pack.document-schema.model-types';
|
|
2
3
|
import { createDocumentServiceConfig, BaseYjsDocumentService, DocumentLoadStatus } from '@palantir/pack.state.core';
|
|
3
4
|
import { createFoundryEventService } from '@palantir/pack.state.foundry-event';
|
|
5
|
+
import { invalidUserRef } from '@palantir/pack.auth';
|
|
6
|
+
|
|
7
|
+
// src/FoundryDocumentService.ts
|
|
8
|
+
function getActivityEvent(documentSchema, foundryEvent) {
|
|
9
|
+
if (foundryEvent.type !== "activityCreated") {
|
|
10
|
+
return void 0;
|
|
11
|
+
}
|
|
12
|
+
const {
|
|
13
|
+
activityEvent
|
|
14
|
+
} = foundryEvent;
|
|
15
|
+
const eventData = getActivityEventData(documentSchema, activityEvent);
|
|
16
|
+
return {
|
|
17
|
+
aggregationKey: activityEvent.aggregationKey,
|
|
18
|
+
createdBy: activityEvent.createdBy,
|
|
19
|
+
createdInstant: new Date(activityEvent.createdTime).getTime(),
|
|
20
|
+
eventData,
|
|
21
|
+
eventId: activityEvent.eventId,
|
|
22
|
+
isRead: activityEvent.isRead
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function getActivityEventData(docSchema, {
|
|
26
|
+
eventData,
|
|
27
|
+
eventType
|
|
28
|
+
}) {
|
|
29
|
+
const model = docSchema[eventType];
|
|
30
|
+
if (model == null) {
|
|
31
|
+
return {
|
|
32
|
+
rawData: eventData.data,
|
|
33
|
+
rawType: eventType,
|
|
34
|
+
type: ActivityEventDataType.UNKNOWN
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
eventData: eventData.data,
|
|
39
|
+
model,
|
|
40
|
+
type: ActivityEventDataType.CUSTOM_EVENT
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
var ARRIVED_DATA = {
|
|
44
|
+
type: PresenceEventDataType.ARRIVED
|
|
45
|
+
};
|
|
46
|
+
var DEPARTED_DATA = {
|
|
47
|
+
type: PresenceEventDataType.DEPARTED
|
|
48
|
+
};
|
|
49
|
+
function getPresenceEvent(documentSchema, foundryUpdate) {
|
|
50
|
+
switch (foundryUpdate.type) {
|
|
51
|
+
case "presenceChangeEvent": {
|
|
52
|
+
const {
|
|
53
|
+
userId,
|
|
54
|
+
status
|
|
55
|
+
} = foundryUpdate.presenceChangeEvent;
|
|
56
|
+
const eventData = status === "PRESENT" ? ARRIVED_DATA : DEPARTED_DATA;
|
|
57
|
+
return {
|
|
58
|
+
eventData,
|
|
59
|
+
userId
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
case "customPresenceEvent": {
|
|
63
|
+
const {
|
|
64
|
+
userId,
|
|
65
|
+
eventData
|
|
66
|
+
} = foundryUpdate.customPresenceEvent;
|
|
67
|
+
const presenceEventData = getPresenceEventData(documentSchema, eventData);
|
|
68
|
+
return {
|
|
69
|
+
eventData: presenceEventData,
|
|
70
|
+
userId
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
default: {
|
|
74
|
+
const unknownUpdate = foundryUpdate;
|
|
75
|
+
return {
|
|
76
|
+
eventData: {
|
|
77
|
+
rawData: foundryUpdate,
|
|
78
|
+
rawType: typeof unknownUpdate.type === "string" ? unknownUpdate.type : "unknown",
|
|
79
|
+
type: PresenceEventDataType.UNKNOWN
|
|
80
|
+
},
|
|
81
|
+
// FIXME: try and pull userId from message? Or just fix the platform types to have useful wrappers.
|
|
82
|
+
userId: invalidUserRef().userId
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function getPresenceEventData(docSchema, eventData) {
|
|
88
|
+
if (typeof eventData !== "object" || eventData == null) {
|
|
89
|
+
return {
|
|
90
|
+
rawData: eventData,
|
|
91
|
+
rawType: "unknown",
|
|
92
|
+
type: PresenceEventDataType.UNKNOWN
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const typedEventData = eventData;
|
|
96
|
+
const {
|
|
97
|
+
eventType,
|
|
98
|
+
eventData: data
|
|
99
|
+
} = typedEventData;
|
|
100
|
+
if (typeof eventType !== "string") {
|
|
101
|
+
return {
|
|
102
|
+
rawData: eventData,
|
|
103
|
+
rawType: "unknown",
|
|
104
|
+
type: PresenceEventDataType.UNKNOWN
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const model = docSchema[eventType];
|
|
108
|
+
if (model == null) {
|
|
109
|
+
return {
|
|
110
|
+
rawData: data,
|
|
111
|
+
rawType: eventType,
|
|
112
|
+
type: PresenceEventDataType.UNKNOWN
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
eventData: data,
|
|
117
|
+
model,
|
|
118
|
+
type: PresenceEventDataType.CUSTOM_EVENT
|
|
119
|
+
};
|
|
120
|
+
}
|
|
4
121
|
|
|
5
122
|
// src/FoundryDocumentService.ts
|
|
6
123
|
var DEFAULT_USE_PREVIEW_API = true;
|
|
@@ -51,6 +168,30 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
|
|
|
51
168
|
const docRef = this.createDocRef(documentId, schema);
|
|
52
169
|
return docRef;
|
|
53
170
|
};
|
|
171
|
+
searchDocuments = async (documentTypeName, schema, options) => {
|
|
172
|
+
const request = {
|
|
173
|
+
documentTypeName,
|
|
174
|
+
limit: options?.limit,
|
|
175
|
+
searchQuery: options?.documentName ? {
|
|
176
|
+
documentName: options.documentName
|
|
177
|
+
} : void 0
|
|
178
|
+
};
|
|
179
|
+
const searchResponse = await Documents.search(this.app.config.osdkClient, request, {
|
|
180
|
+
preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API
|
|
181
|
+
});
|
|
182
|
+
return searchResponse.map((doc) => ({
|
|
183
|
+
documentTypeName: doc.documentTypeName,
|
|
184
|
+
id: doc.id,
|
|
185
|
+
name: doc.name,
|
|
186
|
+
ontologyRid: "unknown",
|
|
187
|
+
security: {
|
|
188
|
+
discretionary: {
|
|
189
|
+
owners: []
|
|
190
|
+
},
|
|
191
|
+
mandatory: {}
|
|
192
|
+
}
|
|
193
|
+
}));
|
|
194
|
+
};
|
|
54
195
|
onMetadataSubscriptionOpened(internalDoc, docRef) {
|
|
55
196
|
if (internalDoc.metadataStatus.load !== DocumentLoadStatus.UNLOADED) {
|
|
56
197
|
throw new Error(`Cannot subscribe to document metadata when status is ${internalDoc.metadataStatus.load}`);
|
|
@@ -103,6 +244,50 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
|
|
|
103
244
|
internalDoc.syncSession = void 0;
|
|
104
245
|
}
|
|
105
246
|
}
|
|
247
|
+
onActivity(docRef, callback) {
|
|
248
|
+
let unsubscribed = false;
|
|
249
|
+
const unsubscribeFn = () => {
|
|
250
|
+
unsubscribed = true;
|
|
251
|
+
};
|
|
252
|
+
this.eventService.subscribeToActivityUpdates(docRef.id, (foundryEvent) => {
|
|
253
|
+
if (!unsubscribed) {
|
|
254
|
+
const localEvent = getActivityEvent(docRef.schema, foundryEvent);
|
|
255
|
+
if (localEvent != null) {
|
|
256
|
+
callback(docRef, localEvent);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}).catch((e) => {
|
|
260
|
+
this.logger.error("Failed to subscribe to activity updates", e, {
|
|
261
|
+
docId: docRef.id
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
return unsubscribeFn;
|
|
265
|
+
}
|
|
266
|
+
onPresence(docRef, callback, options) {
|
|
267
|
+
let unsubscribed = false;
|
|
268
|
+
const unsubscribeFn = () => {
|
|
269
|
+
unsubscribed = true;
|
|
270
|
+
};
|
|
271
|
+
this.eventService.subscribeToPresenceUpdates(docRef.id, (foundryUpdate) => {
|
|
272
|
+
if (!unsubscribed) {
|
|
273
|
+
const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);
|
|
274
|
+
callback(docRef, localEvent);
|
|
275
|
+
}
|
|
276
|
+
}, options).catch((e) => {
|
|
277
|
+
this.logger.error("Failed to subscribe to presence updates", e, {
|
|
278
|
+
docId: docRef.id
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
return unsubscribeFn;
|
|
282
|
+
}
|
|
283
|
+
updateCustomPresence(docRef, model, eventData) {
|
|
284
|
+
const eventType = getMetadata(model).name;
|
|
285
|
+
void this.eventService.publishCustomPresence(docRef.id, eventType, eventData).catch((e) => {
|
|
286
|
+
this.logger.error("Failed to publish custom presence", e, {
|
|
287
|
+
docId: docRef.id
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
}
|
|
106
291
|
};
|
|
107
292
|
function mutableArray(array) {
|
|
108
293
|
return array == null ? [] : array;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../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 { Documents } from \"@osdk/foundry.pack\";\nimport { BaseYjsDocumentService, createDocumentServiceConfig, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { createFoundryEventService } from \"@palantir/pack.state.foundry-event\";\nconst DEFAULT_USE_PREVIEW_API = true;\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, initialYDoc) {\n return {\n ...this.createBaseInternalDoc(ref, metadata, initialYDoc),\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 ontologyRid,\n security\n } = metadata;\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 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}\nfunction mutableArray(array) {\n return array == null ? [] : array;\n}\nfunction getWireSecurity(security) {\n return {\n discretionary: {\n editors: [...(security.discretionary.editors ?? [])],\n owners: [...security.discretionary.owners],\n viewers: [...(security.discretionary.viewers ?? [])]\n },\n mandatory: {\n classification: mutableArray(security.mandatory.classification),\n markings: mutableArray(security.mandatory.markings)\n }\n };\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/eventMappers.ts","../../src/FoundryDocumentService.ts"],"names":["config"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { invalidUserRef } from \"@palantir/pack.auth\";\nimport { ActivityEventDataType, PresenceEventDataType } from \"@palantir/pack.document-schema.model-types\";\nexport function getActivityEvent(documentSchema, foundryEvent) {\n // TODO: need to handle deletes and ensure exhaustive handling\n if (foundryEvent.type !== \"activityCreated\") {\n return undefined;\n }\n const {\n activityEvent\n } = foundryEvent;\n const eventData = getActivityEventData(documentSchema, activityEvent);\n return {\n aggregationKey: activityEvent.aggregationKey,\n createdBy: activityEvent.createdBy,\n createdInstant: new Date(activityEvent.createdTime).getTime(),\n eventData,\n eventId: activityEvent.eventId,\n isRead: activityEvent.isRead\n };\n}\nfunction getActivityEventData(docSchema, {\n eventData,\n eventType\n}) {\n // TODO: handle standard 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}\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.presenceChangeEvent;\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 } = foundryUpdate.customPresenceEvent;\n const presenceEventData = getPresenceEventData(documentSchema, 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, eventData) {\n if (typeof eventData !== \"object\" || eventData == null) {\n return {\n rawData: eventData,\n rawType: \"unknown\",\n type: PresenceEventDataType.UNKNOWN\n };\n }\n const typedEventData = eventData;\n const {\n eventType,\n eventData: data\n } = typedEventData;\n if (typeof eventType !== \"string\") {\n return {\n rawData: eventData,\n rawType: \"unknown\",\n type: PresenceEventDataType.UNKNOWN\n };\n }\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: data,\n rawType: eventType,\n type: PresenceEventDataType.UNKNOWN\n };\n }\n return {\n eventData: data,\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 { 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;\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, initialYDoc) {\n return {\n ...this.createBaseInternalDoc(ref, metadata, initialYDoc),\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 ontologyRid,\n security\n } = metadata;\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 limit: options?.limit,\n searchQuery: options?.documentName ? {\n documentName: options.documentName\n } : undefined\n };\n const searchResponse = await Documents.search(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n return searchResponse.map(doc => ({\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 }));\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) {\n const eventType = getMetadata(model).name;\n void this.eventService.publishCustomPresence(docRef.id, eventType, eventData).catch(e => {\n this.logger.error(\"Failed to publish custom presence\", e, {\n docId: docRef.id\n });\n });\n }\n}\nfunction mutableArray(array) {\n return array == null ? [] : array;\n}\nfunction getWireSecurity(security) {\n return {\n discretionary: {\n editors: [...(security.discretionary.editors ?? [])],\n owners: [...security.discretionary.owners],\n viewers: [...(security.discretionary.viewers ?? [])]\n },\n mandatory: {\n classification: mutableArray(security.mandatory.classification),\n markings: mutableArray(security.mandatory.markings)\n }\n };\n}"]}
|
package/build/cjs/index.cjs
CHANGED
|
@@ -1,8 +1,125 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var foundry_pack = require('@osdk/foundry.pack');
|
|
4
|
+
var pack_documentSchema_modelTypes = require('@palantir/pack.document-schema.model-types');
|
|
4
5
|
var pack_state_core = require('@palantir/pack.state.core');
|
|
5
6
|
var pack_state_foundryEvent = require('@palantir/pack.state.foundry-event');
|
|
7
|
+
var pack_auth = require('@palantir/pack.auth');
|
|
8
|
+
|
|
9
|
+
// src/FoundryDocumentService.ts
|
|
10
|
+
function getActivityEvent(documentSchema, foundryEvent) {
|
|
11
|
+
if (foundryEvent.type !== "activityCreated") {
|
|
12
|
+
return void 0;
|
|
13
|
+
}
|
|
14
|
+
const {
|
|
15
|
+
activityEvent
|
|
16
|
+
} = foundryEvent;
|
|
17
|
+
const eventData = getActivityEventData(documentSchema, activityEvent);
|
|
18
|
+
return {
|
|
19
|
+
aggregationKey: activityEvent.aggregationKey,
|
|
20
|
+
createdBy: activityEvent.createdBy,
|
|
21
|
+
createdInstant: new Date(activityEvent.createdTime).getTime(),
|
|
22
|
+
eventData,
|
|
23
|
+
eventId: activityEvent.eventId,
|
|
24
|
+
isRead: activityEvent.isRead
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function getActivityEventData(docSchema, {
|
|
28
|
+
eventData,
|
|
29
|
+
eventType
|
|
30
|
+
}) {
|
|
31
|
+
const model = docSchema[eventType];
|
|
32
|
+
if (model == null) {
|
|
33
|
+
return {
|
|
34
|
+
rawData: eventData.data,
|
|
35
|
+
rawType: eventType,
|
|
36
|
+
type: pack_documentSchema_modelTypes.ActivityEventDataType.UNKNOWN
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
eventData: eventData.data,
|
|
41
|
+
model,
|
|
42
|
+
type: pack_documentSchema_modelTypes.ActivityEventDataType.CUSTOM_EVENT
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
var ARRIVED_DATA = {
|
|
46
|
+
type: pack_documentSchema_modelTypes.PresenceEventDataType.ARRIVED
|
|
47
|
+
};
|
|
48
|
+
var DEPARTED_DATA = {
|
|
49
|
+
type: pack_documentSchema_modelTypes.PresenceEventDataType.DEPARTED
|
|
50
|
+
};
|
|
51
|
+
function getPresenceEvent(documentSchema, foundryUpdate) {
|
|
52
|
+
switch (foundryUpdate.type) {
|
|
53
|
+
case "presenceChangeEvent": {
|
|
54
|
+
const {
|
|
55
|
+
userId,
|
|
56
|
+
status
|
|
57
|
+
} = foundryUpdate.presenceChangeEvent;
|
|
58
|
+
const eventData = status === "PRESENT" ? ARRIVED_DATA : DEPARTED_DATA;
|
|
59
|
+
return {
|
|
60
|
+
eventData,
|
|
61
|
+
userId
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
case "customPresenceEvent": {
|
|
65
|
+
const {
|
|
66
|
+
userId,
|
|
67
|
+
eventData
|
|
68
|
+
} = foundryUpdate.customPresenceEvent;
|
|
69
|
+
const presenceEventData = getPresenceEventData(documentSchema, eventData);
|
|
70
|
+
return {
|
|
71
|
+
eventData: presenceEventData,
|
|
72
|
+
userId
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
default: {
|
|
76
|
+
const unknownUpdate = foundryUpdate;
|
|
77
|
+
return {
|
|
78
|
+
eventData: {
|
|
79
|
+
rawData: foundryUpdate,
|
|
80
|
+
rawType: typeof unknownUpdate.type === "string" ? unknownUpdate.type : "unknown",
|
|
81
|
+
type: pack_documentSchema_modelTypes.PresenceEventDataType.UNKNOWN
|
|
82
|
+
},
|
|
83
|
+
// FIXME: try and pull userId from message? Or just fix the platform types to have useful wrappers.
|
|
84
|
+
userId: pack_auth.invalidUserRef().userId
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function getPresenceEventData(docSchema, eventData) {
|
|
90
|
+
if (typeof eventData !== "object" || eventData == null) {
|
|
91
|
+
return {
|
|
92
|
+
rawData: eventData,
|
|
93
|
+
rawType: "unknown",
|
|
94
|
+
type: pack_documentSchema_modelTypes.PresenceEventDataType.UNKNOWN
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const typedEventData = eventData;
|
|
98
|
+
const {
|
|
99
|
+
eventType,
|
|
100
|
+
eventData: data
|
|
101
|
+
} = typedEventData;
|
|
102
|
+
if (typeof eventType !== "string") {
|
|
103
|
+
return {
|
|
104
|
+
rawData: eventData,
|
|
105
|
+
rawType: "unknown",
|
|
106
|
+
type: pack_documentSchema_modelTypes.PresenceEventDataType.UNKNOWN
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const model = docSchema[eventType];
|
|
110
|
+
if (model == null) {
|
|
111
|
+
return {
|
|
112
|
+
rawData: data,
|
|
113
|
+
rawType: eventType,
|
|
114
|
+
type: pack_documentSchema_modelTypes.PresenceEventDataType.UNKNOWN
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
eventData: data,
|
|
119
|
+
model,
|
|
120
|
+
type: pack_documentSchema_modelTypes.PresenceEventDataType.CUSTOM_EVENT
|
|
121
|
+
};
|
|
122
|
+
}
|
|
6
123
|
|
|
7
124
|
// src/FoundryDocumentService.ts
|
|
8
125
|
var DEFAULT_USE_PREVIEW_API = true;
|
|
@@ -53,6 +170,30 @@ var FoundryDocumentService = class extends pack_state_core.BaseYjsDocumentServic
|
|
|
53
170
|
const docRef = this.createDocRef(documentId, schema);
|
|
54
171
|
return docRef;
|
|
55
172
|
};
|
|
173
|
+
searchDocuments = async (documentTypeName, schema, options) => {
|
|
174
|
+
const request = {
|
|
175
|
+
documentTypeName,
|
|
176
|
+
limit: options?.limit,
|
|
177
|
+
searchQuery: options?.documentName ? {
|
|
178
|
+
documentName: options.documentName
|
|
179
|
+
} : void 0
|
|
180
|
+
};
|
|
181
|
+
const searchResponse = await foundry_pack.Documents.search(this.app.config.osdkClient, request, {
|
|
182
|
+
preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API
|
|
183
|
+
});
|
|
184
|
+
return searchResponse.map((doc) => ({
|
|
185
|
+
documentTypeName: doc.documentTypeName,
|
|
186
|
+
id: doc.id,
|
|
187
|
+
name: doc.name,
|
|
188
|
+
ontologyRid: "unknown",
|
|
189
|
+
security: {
|
|
190
|
+
discretionary: {
|
|
191
|
+
owners: []
|
|
192
|
+
},
|
|
193
|
+
mandatory: {}
|
|
194
|
+
}
|
|
195
|
+
}));
|
|
196
|
+
};
|
|
56
197
|
onMetadataSubscriptionOpened(internalDoc, docRef) {
|
|
57
198
|
if (internalDoc.metadataStatus.load !== pack_state_core.DocumentLoadStatus.UNLOADED) {
|
|
58
199
|
throw new Error(`Cannot subscribe to document metadata when status is ${internalDoc.metadataStatus.load}`);
|
|
@@ -105,6 +246,50 @@ var FoundryDocumentService = class extends pack_state_core.BaseYjsDocumentServic
|
|
|
105
246
|
internalDoc.syncSession = void 0;
|
|
106
247
|
}
|
|
107
248
|
}
|
|
249
|
+
onActivity(docRef, callback) {
|
|
250
|
+
let unsubscribed = false;
|
|
251
|
+
const unsubscribeFn = () => {
|
|
252
|
+
unsubscribed = true;
|
|
253
|
+
};
|
|
254
|
+
this.eventService.subscribeToActivityUpdates(docRef.id, (foundryEvent) => {
|
|
255
|
+
if (!unsubscribed) {
|
|
256
|
+
const localEvent = getActivityEvent(docRef.schema, foundryEvent);
|
|
257
|
+
if (localEvent != null) {
|
|
258
|
+
callback(docRef, localEvent);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}).catch((e) => {
|
|
262
|
+
this.logger.error("Failed to subscribe to activity updates", e, {
|
|
263
|
+
docId: docRef.id
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
return unsubscribeFn;
|
|
267
|
+
}
|
|
268
|
+
onPresence(docRef, callback, options) {
|
|
269
|
+
let unsubscribed = false;
|
|
270
|
+
const unsubscribeFn = () => {
|
|
271
|
+
unsubscribed = true;
|
|
272
|
+
};
|
|
273
|
+
this.eventService.subscribeToPresenceUpdates(docRef.id, (foundryUpdate) => {
|
|
274
|
+
if (!unsubscribed) {
|
|
275
|
+
const localEvent = getPresenceEvent(docRef.schema, foundryUpdate);
|
|
276
|
+
callback(docRef, localEvent);
|
|
277
|
+
}
|
|
278
|
+
}, options).catch((e) => {
|
|
279
|
+
this.logger.error("Failed to subscribe to presence updates", e, {
|
|
280
|
+
docId: docRef.id
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
return unsubscribeFn;
|
|
284
|
+
}
|
|
285
|
+
updateCustomPresence(docRef, model, eventData) {
|
|
286
|
+
const eventType = pack_documentSchema_modelTypes.getMetadata(model).name;
|
|
287
|
+
void this.eventService.publishCustomPresence(docRef.id, eventType, eventData).catch((e) => {
|
|
288
|
+
this.logger.error("Failed to publish custom presence", e, {
|
|
289
|
+
docId: docRef.id
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
}
|
|
108
293
|
};
|
|
109
294
|
function mutableArray(array) {
|
|
110
295
|
return array == null ? [] : array;
|
package/build/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/FoundryDocumentService.ts"],"names":["createDocumentServiceConfig","config","createFoundryEventService","BaseYjsDocumentService","Documents","DocumentLoadStatus"],"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 { Documents } from \"@osdk/foundry.pack\";\nimport { BaseYjsDocumentService, createDocumentServiceConfig, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { createFoundryEventService } from \"@palantir/pack.state.foundry-event\";\nconst DEFAULT_USE_PREVIEW_API = true;\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, initialYDoc) {\n return {\n ...this.createBaseInternalDoc(ref, metadata, initialYDoc),\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 ontologyRid,\n security\n } = metadata;\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 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}\nfunction mutableArray(array) {\n return array == null ? [] : array;\n}\nfunction getWireSecurity(security) {\n return {\n discretionary: {\n editors: [...(security.discretionary.editors ?? [])],\n owners: [...security.discretionary.owners],\n viewers: [...(security.discretionary.viewers ?? [])]\n },\n mandatory: {\n classification: mutableArray(security.mandatory.classification),\n markings: mutableArray(security.mandatory.markings)\n }\n };\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/eventMappers.ts","../../src/FoundryDocumentService.ts"],"names":["ActivityEventDataType","PresenceEventDataType","invalidUserRef","createDocumentServiceConfig","config","createFoundryEventService","BaseYjsDocumentService","Documents","DocumentLoadStatus","getMetadata"],"mappings":"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","file":"index.cjs","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { invalidUserRef } from \"@palantir/pack.auth\";\nimport { ActivityEventDataType, PresenceEventDataType } from \"@palantir/pack.document-schema.model-types\";\nexport function getActivityEvent(documentSchema, foundryEvent) {\n // TODO: need to handle deletes and ensure exhaustive handling\n if (foundryEvent.type !== \"activityCreated\") {\n return undefined;\n }\n const {\n activityEvent\n } = foundryEvent;\n const eventData = getActivityEventData(documentSchema, activityEvent);\n return {\n aggregationKey: activityEvent.aggregationKey,\n createdBy: activityEvent.createdBy,\n createdInstant: new Date(activityEvent.createdTime).getTime(),\n eventData,\n eventId: activityEvent.eventId,\n isRead: activityEvent.isRead\n };\n}\nfunction getActivityEventData(docSchema, {\n eventData,\n eventType\n}) {\n // TODO: handle standard 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}\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.presenceChangeEvent;\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 } = foundryUpdate.customPresenceEvent;\n const presenceEventData = getPresenceEventData(documentSchema, 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, eventData) {\n if (typeof eventData !== \"object\" || eventData == null) {\n return {\n rawData: eventData,\n rawType: \"unknown\",\n type: PresenceEventDataType.UNKNOWN\n };\n }\n const typedEventData = eventData;\n const {\n eventType,\n eventData: data\n } = typedEventData;\n if (typeof eventType !== \"string\") {\n return {\n rawData: eventData,\n rawType: \"unknown\",\n type: PresenceEventDataType.UNKNOWN\n };\n }\n const model = docSchema[eventType];\n if (model == null) {\n return {\n rawData: data,\n rawType: eventType,\n type: PresenceEventDataType.UNKNOWN\n };\n }\n return {\n eventData: data,\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 { 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;\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, initialYDoc) {\n return {\n ...this.createBaseInternalDoc(ref, metadata, initialYDoc),\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 ontologyRid,\n security\n } = metadata;\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 limit: options?.limit,\n searchQuery: options?.documentName ? {\n documentName: options.documentName\n } : undefined\n };\n const searchResponse = await Documents.search(this.app.config.osdkClient, request, {\n preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API\n });\n return searchResponse.map(doc => ({\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 }));\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) {\n const eventType = getMetadata(model).name;\n void this.eventService.publishCustomPresence(docRef.id, eventType, eventData).catch(e => {\n this.logger.error(\"Failed to publish custom presence\", e, {\n docId: docRef.id\n });\n });\n }\n}\nfunction mutableArray(array) {\n return array == null ? [] : array;\n}\nfunction getWireSecurity(security) {\n return {\n discretionary: {\n editors: [...(security.discretionary.editors ?? [])],\n owners: [...security.discretionary.owners],\n viewers: [...(security.discretionary.viewers ?? [])]\n },\n mandatory: {\n classification: mutableArray(security.mandatory.classification),\n markings: mutableArray(security.mandatory.markings)\n }\n };\n}"]}
|