@palantir/pack.state.foundry 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-lint.log +1 -1
- package/.turbo/turbo-transpileBrowser.log +2 -1
- package/.turbo/turbo-transpileCjs.log +2 -1
- package/.turbo/turbo-transpileEsm.log +2 -1
- package/.turbo/turbo-transpileTypes.log +1 -1
- package/.turbo/turbo-typecheck.log +1 -1
- package/CHANGELOG.md +33 -0
- package/build/browser/index.js +115 -26
- package/build/browser/index.js.map +1 -1
- package/build/cjs/index.cjs +115 -26
- package/build/cjs/index.cjs.map +1 -1
- package/build/esm/index.js +115 -26
- package/build/esm/index.js.map +1 -1
- package/build/types/FoundryDocumentService.d.ts +7 -8
- package/build/types/FoundryDocumentService.d.ts.map +1 -1
- package/build/types/eventMappers.d.ts +1 -2
- package/build/types/eventMappers.d.ts.map +1 -1
- package/package.json +10 -10
- package/src/FoundryDocumentService.ts +127 -70
- package/src/eventMappers.ts +100 -4
package/.turbo/turbo-lint.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @palantir/pack.state.foundry@0.
|
|
2
|
+
> @palantir/pack.state.foundry@0.2.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,6 @@
|
|
|
1
1
|
|
|
2
|
-
> @palantir/pack.state.foundry@0.
|
|
2
|
+
> @palantir/pack.state.foundry@0.2.0 transpileBrowser /home/runner/work/pack/pack/packages/state/foundry
|
|
3
3
|
> monorepo-transpile -f esm -m bundle -t browser
|
|
4
4
|
|
|
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`
|
|
5
6
|
👍
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
> @palantir/pack.state.foundry@0.
|
|
2
|
+
> @palantir/pack.state.foundry@0.2.0 transpileCjs /home/runner/work/pack/pack/packages/state/foundry
|
|
3
3
|
> monorepo-transpile -f cjs -m bundle -t node
|
|
4
4
|
|
|
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`
|
|
5
6
|
👍
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
> @palantir/pack.state.foundry@0.
|
|
2
|
+
> @palantir/pack.state.foundry@0.2.0 transpileEsm /home/runner/work/pack/pack/packages/state/foundry
|
|
3
3
|
> monorepo-transpile -f esm -m bundle -t node
|
|
4
4
|
|
|
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`
|
|
5
6
|
👍
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# @palantir/pack.state.foundry
|
|
2
2
|
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 15f7f90: fix search api to match required types and add search pagination
|
|
8
|
+
- 83e4a85: Replace local presence types with @osdk/foundry.pack types. Update presence events to use new type format.
|
|
9
|
+
- 8057223: Add metadata event types (platform events) and refactor demo app.
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 9f45b8e: Improve document creation API to separate create request from raw API types
|
|
14
|
+
- 571578c: Add Booleans to pack.schema
|
|
15
|
+
- 7ee55de: Bump dependencies
|
|
16
|
+
- 4a44875: Remove bun-specific scripts and dependency
|
|
17
|
+
- Updated dependencies [b02d9b7]
|
|
18
|
+
- Updated dependencies [9f45b8e]
|
|
19
|
+
- Updated dependencies [571578c]
|
|
20
|
+
- Updated dependencies [862daf6]
|
|
21
|
+
- Updated dependencies [87f1e63]
|
|
22
|
+
- Updated dependencies [fcf8655]
|
|
23
|
+
- Updated dependencies [e6e40f7]
|
|
24
|
+
- Updated dependencies [15f7f90]
|
|
25
|
+
- Updated dependencies [7ee55de]
|
|
26
|
+
- Updated dependencies [83e4a85]
|
|
27
|
+
- Updated dependencies [4a44875]
|
|
28
|
+
- Updated dependencies [8057223]
|
|
29
|
+
- Updated dependencies [19b8f5b]
|
|
30
|
+
- @palantir/pack.state.foundry-event@0.2.0
|
|
31
|
+
- @palantir/pack.document-schema.model-types@0.3.0
|
|
32
|
+
- @palantir/pack.state.core@0.3.0
|
|
33
|
+
- @palantir/pack.core@0.2.1
|
|
34
|
+
- @palantir/pack.auth@0.1.1
|
|
35
|
+
|
|
3
36
|
## 0.1.2
|
|
4
37
|
|
|
5
38
|
### Patch Changes
|
package/build/browser/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Documents } from '@osdk/foundry.pack';
|
|
2
|
+
import { getOntologyRid, assertNever } from '@palantir/pack.core';
|
|
2
3
|
import { PresenceEventDataType, getMetadata, ActivityEventDataType } from '@palantir/pack.document-schema.model-types';
|
|
3
4
|
import { createDocumentServiceConfig, BaseYjsDocumentService, DocumentLoadStatus } from '@palantir/pack.state.core';
|
|
4
5
|
import { createFoundryEventService } from '@palantir/pack.state.foundry-event';
|
|
@@ -22,10 +23,20 @@ function getActivityEvent(documentSchema, foundryEvent) {
|
|
|
22
23
|
isRead: activityEvent.isRead
|
|
23
24
|
};
|
|
24
25
|
}
|
|
26
|
+
var PlatformEventType = {
|
|
27
|
+
DOCUMENT_CREATE: "DocumentCreateEvent",
|
|
28
|
+
DOCUMENT_DESCRIPTION_UPDATE: "DocumentDescriptionUpdateEvent",
|
|
29
|
+
DOCUMENT_RENAME: "DocumentRenameEvent",
|
|
30
|
+
DOCUMENT_SECURITY_UPDATE: "DocumentMandatorySecurityUpdateEvent"
|
|
31
|
+
};
|
|
25
32
|
function getActivityEventData(docSchema, {
|
|
26
33
|
eventData,
|
|
27
34
|
eventType
|
|
28
35
|
}) {
|
|
36
|
+
const platformEventData = getPlatformActivityEventData(eventType, eventData.data);
|
|
37
|
+
if (platformEventData != null) {
|
|
38
|
+
return platformEventData;
|
|
39
|
+
}
|
|
29
40
|
const model = docSchema[eventType];
|
|
30
41
|
if (model == null) {
|
|
31
42
|
return {
|
|
@@ -40,6 +51,47 @@ function getActivityEventData(docSchema, {
|
|
|
40
51
|
type: ActivityEventDataType.CUSTOM_EVENT
|
|
41
52
|
};
|
|
42
53
|
}
|
|
54
|
+
function getPlatformActivityEventData(eventType, data) {
|
|
55
|
+
switch (eventType) {
|
|
56
|
+
case PlatformEventType.DOCUMENT_CREATE: {
|
|
57
|
+
const wireData = data;
|
|
58
|
+
return {
|
|
59
|
+
initialMandatorySecurity: {
|
|
60
|
+
classification: wireData.initialMandatorySecurity?.classification,
|
|
61
|
+
markings: wireData.initialMandatorySecurity?.markings
|
|
62
|
+
},
|
|
63
|
+
name: wireData.name ?? "",
|
|
64
|
+
type: ActivityEventDataType.DOCUMENT_CREATE
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
case PlatformEventType.DOCUMENT_RENAME: {
|
|
68
|
+
const wireData = data;
|
|
69
|
+
return {
|
|
70
|
+
newName: wireData.newName ?? "",
|
|
71
|
+
previousName: wireData.previousName ?? "",
|
|
72
|
+
type: ActivityEventDataType.DOCUMENT_RENAME
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
case PlatformEventType.DOCUMENT_DESCRIPTION_UPDATE: {
|
|
76
|
+
const wireData = data;
|
|
77
|
+
return {
|
|
78
|
+
isInitial: wireData.isInitial ?? false,
|
|
79
|
+
newDescription: wireData.newDescription ?? "",
|
|
80
|
+
type: ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
case PlatformEventType.DOCUMENT_SECURITY_UPDATE: {
|
|
84
|
+
const wireData = data;
|
|
85
|
+
return {
|
|
86
|
+
newClassification: wireData.newClassification ?? [],
|
|
87
|
+
newMarkings: wireData.newMarkings ?? [],
|
|
88
|
+
type: ActivityEventDataType.DOCUMENT_SECURITY_UPDATE
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
default:
|
|
92
|
+
return void 0;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
43
95
|
var ARRIVED_DATA = {
|
|
44
96
|
type: PresenceEventDataType.ARRIVED
|
|
45
97
|
};
|
|
@@ -52,7 +104,7 @@ function getPresenceEvent(documentSchema, foundryUpdate) {
|
|
|
52
104
|
const {
|
|
53
105
|
userId,
|
|
54
106
|
status
|
|
55
|
-
} = foundryUpdate
|
|
107
|
+
} = foundryUpdate;
|
|
56
108
|
const eventData = status === "PRESENT" ? ARRIVED_DATA : DEPARTED_DATA;
|
|
57
109
|
return {
|
|
58
110
|
eventData,
|
|
@@ -63,7 +115,7 @@ function getPresenceEvent(documentSchema, foundryUpdate) {
|
|
|
63
115
|
const {
|
|
64
116
|
userId,
|
|
65
117
|
eventData
|
|
66
|
-
} = foundryUpdate
|
|
118
|
+
} = foundryUpdate;
|
|
67
119
|
const presenceEventData = getPresenceEventData(documentSchema, eventData);
|
|
68
120
|
return {
|
|
69
121
|
eventData: presenceEventData,
|
|
@@ -121,6 +173,10 @@ function getPresenceEventData(docSchema, eventData) {
|
|
|
121
173
|
|
|
122
174
|
// src/FoundryDocumentService.ts
|
|
123
175
|
var DEFAULT_USE_PREVIEW_API = true;
|
|
176
|
+
var EMPTY_DOCUMENT_SECURITY = Object.freeze({
|
|
177
|
+
discretionary: {},
|
|
178
|
+
mandatory: {}
|
|
179
|
+
});
|
|
124
180
|
function createFoundryDocumentServiceConfig(config = {}) {
|
|
125
181
|
return createDocumentServiceConfig((app, config2) => internalCreateFoundryDocumentService(app, config2), config);
|
|
126
182
|
}
|
|
@@ -152,9 +208,9 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
|
|
|
152
208
|
const {
|
|
153
209
|
documentTypeName,
|
|
154
210
|
name,
|
|
155
|
-
ontologyRid,
|
|
156
211
|
security
|
|
157
212
|
} = metadata;
|
|
213
|
+
const ontologyRid = await getOntologyRid(this.app);
|
|
158
214
|
const request = {
|
|
159
215
|
documentTypeName,
|
|
160
216
|
name,
|
|
@@ -171,26 +227,34 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
|
|
|
171
227
|
searchDocuments = async (documentTypeName, schema, options) => {
|
|
172
228
|
const request = {
|
|
173
229
|
documentTypeName,
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
230
|
+
searchQuery: options != null ? {
|
|
231
|
+
documentName: options.documentName,
|
|
232
|
+
pageSize: options.pageSize,
|
|
233
|
+
pageToken: options.pageToken
|
|
177
234
|
} : void 0
|
|
178
235
|
};
|
|
179
236
|
const searchResponse = await Documents.search(this.app.config.osdkClient, request, {
|
|
180
237
|
preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API
|
|
181
238
|
});
|
|
182
|
-
return
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
239
|
+
return {
|
|
240
|
+
data: searchResponse.data.map((doc) => ({
|
|
241
|
+
createdBy: doc.createdBy,
|
|
242
|
+
createdTime: doc.createdTime,
|
|
243
|
+
documentTypeName: doc.documentTypeName,
|
|
244
|
+
id: doc.id,
|
|
245
|
+
name: doc.name,
|
|
246
|
+
ontologyRid: "unknown",
|
|
247
|
+
security: {
|
|
248
|
+
discretionary: {
|
|
249
|
+
owners: []
|
|
250
|
+
},
|
|
251
|
+
mandatory: {}
|
|
190
252
|
},
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
253
|
+
updatedBy: doc.updatedBy,
|
|
254
|
+
updatedTime: doc.updatedTime
|
|
255
|
+
})),
|
|
256
|
+
nextPageToken: searchResponse.nextPageToken
|
|
257
|
+
};
|
|
194
258
|
};
|
|
195
259
|
onMetadataSubscriptionOpened(internalDoc, docRef) {
|
|
196
260
|
if (internalDoc.metadataStatus.load !== DocumentLoadStatus.UNLOADED) {
|
|
@@ -289,22 +353,47 @@ var FoundryDocumentService = class extends BaseYjsDocumentService {
|
|
|
289
353
|
});
|
|
290
354
|
}
|
|
291
355
|
};
|
|
292
|
-
function
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
356
|
+
function getWireSecurity({
|
|
357
|
+
discretionary,
|
|
358
|
+
mandatory
|
|
359
|
+
} = EMPTY_DOCUMENT_SECURITY) {
|
|
360
|
+
const {
|
|
361
|
+
editors = [],
|
|
362
|
+
owners = [],
|
|
363
|
+
viewers = []
|
|
364
|
+
} = discretionary;
|
|
296
365
|
return {
|
|
297
366
|
discretionary: {
|
|
298
|
-
editors:
|
|
299
|
-
owners:
|
|
300
|
-
viewers:
|
|
367
|
+
editors: editors.map(getWirePrincipal),
|
|
368
|
+
owners: owners.map(getWirePrincipal),
|
|
369
|
+
viewers: viewers.map(getWirePrincipal)
|
|
301
370
|
},
|
|
302
371
|
mandatory: {
|
|
303
|
-
classification:
|
|
304
|
-
markings:
|
|
372
|
+
classification: mandatory.classification != null ? [...mandatory.classification] : [],
|
|
373
|
+
markings: mandatory.markings != null ? [...mandatory.markings] : []
|
|
305
374
|
}
|
|
306
375
|
};
|
|
307
376
|
}
|
|
377
|
+
function getWirePrincipal(principal) {
|
|
378
|
+
switch (principal.type) {
|
|
379
|
+
case "all":
|
|
380
|
+
return {
|
|
381
|
+
type: "all"
|
|
382
|
+
};
|
|
383
|
+
case "groupId":
|
|
384
|
+
return {
|
|
385
|
+
type: "groupId",
|
|
386
|
+
groupId: principal.groupId
|
|
387
|
+
};
|
|
388
|
+
case "userId":
|
|
389
|
+
return {
|
|
390
|
+
type: "userId",
|
|
391
|
+
userId: principal.userId
|
|
392
|
+
};
|
|
393
|
+
default:
|
|
394
|
+
assertNever(principal);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
308
397
|
|
|
309
398
|
export { createFoundryDocumentServiceConfig };
|
|
310
399
|
//# 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}\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) {\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 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}"]}
|
|
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 } = foundryUpdate;\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 { 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 searchQuery: options != null ? {\n documentName: options.documentName,\n pageSize: options.pageSize,\n pageToken: options.pageToken\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 {\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) {\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 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}"]}
|
package/build/cjs/index.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var foundry_pack = require('@osdk/foundry.pack');
|
|
4
|
+
var pack_core = require('@palantir/pack.core');
|
|
4
5
|
var pack_documentSchema_modelTypes = require('@palantir/pack.document-schema.model-types');
|
|
5
6
|
var pack_state_core = require('@palantir/pack.state.core');
|
|
6
7
|
var pack_state_foundryEvent = require('@palantir/pack.state.foundry-event');
|
|
@@ -24,10 +25,20 @@ function getActivityEvent(documentSchema, foundryEvent) {
|
|
|
24
25
|
isRead: activityEvent.isRead
|
|
25
26
|
};
|
|
26
27
|
}
|
|
28
|
+
var PlatformEventType = {
|
|
29
|
+
DOCUMENT_CREATE: "DocumentCreateEvent",
|
|
30
|
+
DOCUMENT_DESCRIPTION_UPDATE: "DocumentDescriptionUpdateEvent",
|
|
31
|
+
DOCUMENT_RENAME: "DocumentRenameEvent",
|
|
32
|
+
DOCUMENT_SECURITY_UPDATE: "DocumentMandatorySecurityUpdateEvent"
|
|
33
|
+
};
|
|
27
34
|
function getActivityEventData(docSchema, {
|
|
28
35
|
eventData,
|
|
29
36
|
eventType
|
|
30
37
|
}) {
|
|
38
|
+
const platformEventData = getPlatformActivityEventData(eventType, eventData.data);
|
|
39
|
+
if (platformEventData != null) {
|
|
40
|
+
return platformEventData;
|
|
41
|
+
}
|
|
31
42
|
const model = docSchema[eventType];
|
|
32
43
|
if (model == null) {
|
|
33
44
|
return {
|
|
@@ -42,6 +53,47 @@ function getActivityEventData(docSchema, {
|
|
|
42
53
|
type: pack_documentSchema_modelTypes.ActivityEventDataType.CUSTOM_EVENT
|
|
43
54
|
};
|
|
44
55
|
}
|
|
56
|
+
function getPlatformActivityEventData(eventType, data) {
|
|
57
|
+
switch (eventType) {
|
|
58
|
+
case PlatformEventType.DOCUMENT_CREATE: {
|
|
59
|
+
const wireData = data;
|
|
60
|
+
return {
|
|
61
|
+
initialMandatorySecurity: {
|
|
62
|
+
classification: wireData.initialMandatorySecurity?.classification,
|
|
63
|
+
markings: wireData.initialMandatorySecurity?.markings
|
|
64
|
+
},
|
|
65
|
+
name: wireData.name ?? "",
|
|
66
|
+
type: pack_documentSchema_modelTypes.ActivityEventDataType.DOCUMENT_CREATE
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
case PlatformEventType.DOCUMENT_RENAME: {
|
|
70
|
+
const wireData = data;
|
|
71
|
+
return {
|
|
72
|
+
newName: wireData.newName ?? "",
|
|
73
|
+
previousName: wireData.previousName ?? "",
|
|
74
|
+
type: pack_documentSchema_modelTypes.ActivityEventDataType.DOCUMENT_RENAME
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
case PlatformEventType.DOCUMENT_DESCRIPTION_UPDATE: {
|
|
78
|
+
const wireData = data;
|
|
79
|
+
return {
|
|
80
|
+
isInitial: wireData.isInitial ?? false,
|
|
81
|
+
newDescription: wireData.newDescription ?? "",
|
|
82
|
+
type: pack_documentSchema_modelTypes.ActivityEventDataType.DOCUMENT_DESCRIPTION_UPDATE
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
case PlatformEventType.DOCUMENT_SECURITY_UPDATE: {
|
|
86
|
+
const wireData = data;
|
|
87
|
+
return {
|
|
88
|
+
newClassification: wireData.newClassification ?? [],
|
|
89
|
+
newMarkings: wireData.newMarkings ?? [],
|
|
90
|
+
type: pack_documentSchema_modelTypes.ActivityEventDataType.DOCUMENT_SECURITY_UPDATE
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
default:
|
|
94
|
+
return void 0;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
45
97
|
var ARRIVED_DATA = {
|
|
46
98
|
type: pack_documentSchema_modelTypes.PresenceEventDataType.ARRIVED
|
|
47
99
|
};
|
|
@@ -54,7 +106,7 @@ function getPresenceEvent(documentSchema, foundryUpdate) {
|
|
|
54
106
|
const {
|
|
55
107
|
userId,
|
|
56
108
|
status
|
|
57
|
-
} = foundryUpdate
|
|
109
|
+
} = foundryUpdate;
|
|
58
110
|
const eventData = status === "PRESENT" ? ARRIVED_DATA : DEPARTED_DATA;
|
|
59
111
|
return {
|
|
60
112
|
eventData,
|
|
@@ -65,7 +117,7 @@ function getPresenceEvent(documentSchema, foundryUpdate) {
|
|
|
65
117
|
const {
|
|
66
118
|
userId,
|
|
67
119
|
eventData
|
|
68
|
-
} = foundryUpdate
|
|
120
|
+
} = foundryUpdate;
|
|
69
121
|
const presenceEventData = getPresenceEventData(documentSchema, eventData);
|
|
70
122
|
return {
|
|
71
123
|
eventData: presenceEventData,
|
|
@@ -123,6 +175,10 @@ function getPresenceEventData(docSchema, eventData) {
|
|
|
123
175
|
|
|
124
176
|
// src/FoundryDocumentService.ts
|
|
125
177
|
var DEFAULT_USE_PREVIEW_API = true;
|
|
178
|
+
var EMPTY_DOCUMENT_SECURITY = Object.freeze({
|
|
179
|
+
discretionary: {},
|
|
180
|
+
mandatory: {}
|
|
181
|
+
});
|
|
126
182
|
function createFoundryDocumentServiceConfig(config = {}) {
|
|
127
183
|
return pack_state_core.createDocumentServiceConfig((app, config2) => internalCreateFoundryDocumentService(app, config2), config);
|
|
128
184
|
}
|
|
@@ -154,9 +210,9 @@ var FoundryDocumentService = class extends pack_state_core.BaseYjsDocumentServic
|
|
|
154
210
|
const {
|
|
155
211
|
documentTypeName,
|
|
156
212
|
name,
|
|
157
|
-
ontologyRid,
|
|
158
213
|
security
|
|
159
214
|
} = metadata;
|
|
215
|
+
const ontologyRid = await pack_core.getOntologyRid(this.app);
|
|
160
216
|
const request = {
|
|
161
217
|
documentTypeName,
|
|
162
218
|
name,
|
|
@@ -173,26 +229,34 @@ var FoundryDocumentService = class extends pack_state_core.BaseYjsDocumentServic
|
|
|
173
229
|
searchDocuments = async (documentTypeName, schema, options) => {
|
|
174
230
|
const request = {
|
|
175
231
|
documentTypeName,
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
232
|
+
searchQuery: options != null ? {
|
|
233
|
+
documentName: options.documentName,
|
|
234
|
+
pageSize: options.pageSize,
|
|
235
|
+
pageToken: options.pageToken
|
|
179
236
|
} : void 0
|
|
180
237
|
};
|
|
181
238
|
const searchResponse = await foundry_pack.Documents.search(this.app.config.osdkClient, request, {
|
|
182
239
|
preview: this.config.usePreviewApi ?? DEFAULT_USE_PREVIEW_API
|
|
183
240
|
});
|
|
184
|
-
return
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
241
|
+
return {
|
|
242
|
+
data: searchResponse.data.map((doc) => ({
|
|
243
|
+
createdBy: doc.createdBy,
|
|
244
|
+
createdTime: doc.createdTime,
|
|
245
|
+
documentTypeName: doc.documentTypeName,
|
|
246
|
+
id: doc.id,
|
|
247
|
+
name: doc.name,
|
|
248
|
+
ontologyRid: "unknown",
|
|
249
|
+
security: {
|
|
250
|
+
discretionary: {
|
|
251
|
+
owners: []
|
|
252
|
+
},
|
|
253
|
+
mandatory: {}
|
|
192
254
|
},
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
255
|
+
updatedBy: doc.updatedBy,
|
|
256
|
+
updatedTime: doc.updatedTime
|
|
257
|
+
})),
|
|
258
|
+
nextPageToken: searchResponse.nextPageToken
|
|
259
|
+
};
|
|
196
260
|
};
|
|
197
261
|
onMetadataSubscriptionOpened(internalDoc, docRef) {
|
|
198
262
|
if (internalDoc.metadataStatus.load !== pack_state_core.DocumentLoadStatus.UNLOADED) {
|
|
@@ -291,22 +355,47 @@ var FoundryDocumentService = class extends pack_state_core.BaseYjsDocumentServic
|
|
|
291
355
|
});
|
|
292
356
|
}
|
|
293
357
|
};
|
|
294
|
-
function
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
358
|
+
function getWireSecurity({
|
|
359
|
+
discretionary,
|
|
360
|
+
mandatory
|
|
361
|
+
} = EMPTY_DOCUMENT_SECURITY) {
|
|
362
|
+
const {
|
|
363
|
+
editors = [],
|
|
364
|
+
owners = [],
|
|
365
|
+
viewers = []
|
|
366
|
+
} = discretionary;
|
|
298
367
|
return {
|
|
299
368
|
discretionary: {
|
|
300
|
-
editors:
|
|
301
|
-
owners:
|
|
302
|
-
viewers:
|
|
369
|
+
editors: editors.map(getWirePrincipal),
|
|
370
|
+
owners: owners.map(getWirePrincipal),
|
|
371
|
+
viewers: viewers.map(getWirePrincipal)
|
|
303
372
|
},
|
|
304
373
|
mandatory: {
|
|
305
|
-
classification:
|
|
306
|
-
markings:
|
|
374
|
+
classification: mandatory.classification != null ? [...mandatory.classification] : [],
|
|
375
|
+
markings: mandatory.markings != null ? [...mandatory.markings] : []
|
|
307
376
|
}
|
|
308
377
|
};
|
|
309
378
|
}
|
|
379
|
+
function getWirePrincipal(principal) {
|
|
380
|
+
switch (principal.type) {
|
|
381
|
+
case "all":
|
|
382
|
+
return {
|
|
383
|
+
type: "all"
|
|
384
|
+
};
|
|
385
|
+
case "groupId":
|
|
386
|
+
return {
|
|
387
|
+
type: "groupId",
|
|
388
|
+
groupId: principal.groupId
|
|
389
|
+
};
|
|
390
|
+
case "userId":
|
|
391
|
+
return {
|
|
392
|
+
type: "userId",
|
|
393
|
+
userId: principal.userId
|
|
394
|
+
};
|
|
395
|
+
default:
|
|
396
|
+
pack_core.assertNever(principal);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
310
399
|
|
|
311
400
|
exports.createFoundryDocumentServiceConfig = createFoundryDocumentServiceConfig;
|
|
312
401
|
//# sourceMappingURL=index.cjs.map
|