@palantir/pack.state.demo 0.1.1 → 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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @palantir/pack.state.demo@0.1.1 lint /home/runner/work/pack/pack/packages/state/demo
2
+ > @palantir/pack.state.demo@0.2.0 lint /home/runner/work/pack/pack/packages/state/demo
3
3
  > eslint ./src && dprint check --config $(find-up dprint.json) --allow-no-files
4
4
 
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.state.demo@0.1.1 transpileBrowser /home/runner/work/pack/pack/packages/state/demo
2
+ > @palantir/pack.state.demo@0.2.0 transpileBrowser /home/runner/work/pack/pack/packages/state/demo
3
3
  > monorepo-transpile -f esm -m bundle -t browser
4
4
 
5
5
  [baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.state.demo@0.1.1 transpileCjs /home/runner/work/pack/pack/packages/state/demo
2
+ > @palantir/pack.state.demo@0.2.0 transpileCjs /home/runner/work/pack/pack/packages/state/demo
3
3
  > monorepo-transpile -f cjs -m bundle -t node
4
4
 
5
5
  [baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.state.demo@0.1.1 transpileEsm /home/runner/work/pack/pack/packages/state/demo
2
+ > @palantir/pack.state.demo@0.2.0 transpileEsm /home/runner/work/pack/pack/packages/state/demo
3
3
  > monorepo-transpile -f esm -m bundle -t node
4
4
 
5
5
  [baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.state.demo@0.1.1 transpileTypes /home/runner/work/pack/pack/packages/state/demo
2
+ > @palantir/pack.state.demo@0.2.0 transpileTypes /home/runner/work/pack/pack/packages/state/demo
3
3
  > monorepo-transpile -f esm -m types -t node
4
4
 
5
5
  👍
@@ -1,4 +1,4 @@
1
1
 
2
- > @palantir/pack.state.demo@0.1.1 typecheck /home/runner/work/pack/pack/packages/state/demo
2
+ > @palantir/pack.state.demo@0.2.0 typecheck /home/runner/work/pack/pack/packages/state/demo
3
3
  > tsc --noEmit --emitDeclarationOnly false
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @palantir/pack.state.demo
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - bb1ba4e: update ephemeral events and custom presence event types and search request query
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [bb1ba4e]
12
+ - @palantir/pack.document-schema.model-types@0.4.0
13
+ - @palantir/pack.state.core@0.4.0
14
+
3
15
  ## 0.1.1
4
16
 
5
17
  ### Patch Changes
@@ -510,7 +510,7 @@ var DemoDocumentService = class extends BaseYjsDocumentService {
510
510
  unsubscribe();
511
511
  };
512
512
  }
513
- updateCustomPresence(docRef, model, eventData) {
513
+ updateCustomPresence(docRef, model, eventData, _options) {
514
514
  const {
515
515
  internalDoc
516
516
  } = this.getCreateInternalDoc(docRef);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MetadataStore.ts","../../src/PresenceManager.ts","../../src/DemoDocumentService.ts","../../src/index.ts"],"names":["getMetadata","Y2","IndexeddbPersistence","hasMetadata"],"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 { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nconst METADATA_DB_NAME = \"pack-demo-metadata\";\nconst METADATA_MAP_KEY = \"documents\";\nexport class MetadataStore {\n yDoc;\n persistence;\n metadataMap;\n isReady = false;\n readyPromise;\n constructor(dbPrefix = \"pack-demo\") {\n this.yDoc = new Y.Doc();\n this.metadataMap = this.yDoc.getMap(METADATA_MAP_KEY);\n this.persistence = new IndexeddbPersistence(`${dbPrefix}-${METADATA_DB_NAME}`, this.yDoc);\n this.readyPromise = this.persistence.whenSynced.then(() => {\n this.isReady = true;\n });\n }\n async whenReady() {\n return this.readyPromise;\n }\n addDocument(id, metadata) {\n this.metadataMap.set(id, metadata);\n }\n getDocument(id) {\n return this.metadataMap.get(id);\n }\n searchDocuments(typeName, options) {\n const allResults = [];\n for (const [id, metadata] of this.metadataMap.entries()) {\n if (metadata.documentTypeName !== typeName) {\n continue;\n }\n if (options?.documentName && metadata.name !== options.documentName) {\n continue;\n }\n allResults.push({\n ...metadata,\n id: id\n });\n }\n const pageSize = options?.pageSize ?? allResults.length;\n const offset = options?.pageToken != null ? parseInt(options.pageToken, 10) : 0;\n const paginatedResults = allResults.slice(offset, offset + pageSize);\n const hasMore = offset + pageSize < allResults.length;\n const nextPageToken = hasMore ? String(offset + pageSize) : undefined;\n return {\n data: paginatedResults,\n nextPageToken\n };\n }\n observeDocument(id, callback) {\n const handler = () => {\n callback(this.metadataMap.get(id));\n };\n this.metadataMap.observe(handler);\n return () => {\n this.metadataMap.unobserve(handler);\n };\n }\n dispose() {\n void this.persistence.destroy();\n this.yDoc.destroy();\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 { getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nconst HEARTBEAT_INTERVAL_MS = 5000;\nconst STALE_CLIENT_TIMEOUT_MS = 15000;\nexport class PresenceManager {\n activityChannel;\n presenceChannel;\n schema;\n userId;\n activeClients = new Map();\n heartbeatInterval;\n staleCheckInterval;\n presenceCallbacks = new Set();\n activityCallbacks = new Set();\n constructor(documentId, userId, schema) {\n this.userId = userId;\n this.schema = schema;\n this.activityChannel = new BroadcastChannel(`pack-demo-activity-${documentId}`);\n this.presenceChannel = new BroadcastChannel(`pack-demo-presence-${documentId}`);\n this.activityChannel.onmessage = event => {\n this.handleActivityMessage(event.data);\n };\n this.presenceChannel.onmessage = event => {\n this.handlePresenceMessage(event.data);\n };\n this.startHeartbeat();\n this.startStaleCheck();\n }\n onPresence(callback) {\n this.presenceCallbacks.add(callback);\n return () => {\n this.presenceCallbacks.delete(callback);\n };\n }\n onActivity(callback) {\n this.activityCallbacks.add(callback);\n return () => {\n this.activityCallbacks.delete(callback);\n };\n }\n broadcastActivity(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"activity\",\n userId: this.userId\n };\n this.activityChannel.postMessage(message);\n }\n broadcastPresence(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"presence\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n }\n dispose() {\n if (this.heartbeatInterval != null) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = undefined;\n }\n if (this.staleCheckInterval != null) {\n clearInterval(this.staleCheckInterval);\n this.staleCheckInterval = undefined;\n }\n this.activityChannel.close();\n this.presenceChannel.close();\n this.presenceCallbacks.clear();\n this.activityCallbacks.clear();\n this.activeClients.clear();\n }\n startHeartbeat() {\n const sendHeartbeat = () => {\n const message = {\n timestamp: Date.now(),\n type: \"heartbeat\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n };\n sendHeartbeat();\n this.heartbeatInterval = setInterval(sendHeartbeat, HEARTBEAT_INTERVAL_MS);\n }\n startStaleCheck() {\n this.staleCheckInterval = setInterval(() => {\n this.checkStaleClients();\n }, HEARTBEAT_INTERVAL_MS);\n }\n handleActivityMessage(message) {\n if (message.type === \"activity\") {\n this.handleActivity(message.event);\n }\n }\n handlePresenceMessage(message) {\n switch (message.type) {\n case \"heartbeat\":\n this.handleHeartbeat(message.userId, message.timestamp);\n break;\n case \"presence\":\n this.handlePresence(message.event);\n break;\n }\n }\n handleHeartbeat(userId, timestamp) {\n const wasActive = this.activeClients.has(userId);\n this.activeClients.set(userId, timestamp);\n if (!wasActive) {\n const event = {\n eventData: {\n type: \"presenceArrived\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n handleActivity(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.activityCallbacks) {\n callback(reconstructedEvent);\n }\n }\n handlePresence(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.presenceCallbacks) {\n callback(reconstructedEvent);\n }\n }\n checkStaleClients() {\n const now = Date.now();\n const staleClients = [];\n for (const [userId, lastSeen] of this.activeClients.entries()) {\n if (now - lastSeen > STALE_CLIENT_TIMEOUT_MS) {\n staleClients.push(userId);\n }\n }\n for (const userId of staleClients) {\n this.activeClients.delete(userId);\n const event = {\n eventData: {\n type: \"presenceDeparted\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n emitPresenceEvent(event) {\n for (const callback of this.presenceCallbacks) {\n callback(event);\n }\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 { generateId, getOntologyRid } from \"@palantir/pack.core\";\nimport { ActivityEventDataType, getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocRef, DocumentLiveStatus, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { Base64 } from \"js-base64\";\nimport { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nimport { MetadataStore } from \"./MetadataStore.js\";\nimport { PresenceManager } from \"./PresenceManager.js\";\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nconst CLIENT_ID_STORAGE_KEY = \"pack-demo-client-id\";\nfunction getOrCreateClientId() {\n try {\n const storedId = sessionStorage.getItem(CLIENT_ID_STORAGE_KEY);\n if (storedId != null) {\n return storedId;\n }\n const newId = crypto.randomUUID();\n sessionStorage.setItem(CLIENT_ID_STORAGE_KEY, newId);\n return newId;\n } catch {\n return crypto.randomUUID();\n }\n}\nexport class DemoDocumentService extends BaseYjsDocumentService {\n clientId;\n dbPrefix;\n metadataStore;\n constructor(app, options = {}) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"DemoDocumentService\"\n }), {\n isDemo: true\n });\n this.clientId = getOrCreateClientId();\n this.dbPrefix = options.dbPrefix ?? \"pack-demo\";\n this.metadataStore = new MetadataStore(this.dbPrefix);\n }\n createInternalDoc(ref, metadata) {\n const internalDoc = this.createBaseInternalDoc(ref, metadata);\n this.ensureUpdateHandler(internalDoc, ref);\n return internalDoc;\n }\n ensureUpdateHandler(internalDoc, docRef) {\n if (internalDoc.updateHandler) {\n return;\n }\n const channel = new BroadcastChannel(`pack-demo-doc-${docRef.id}`);\n internalDoc.channel = channel;\n const updateHandler = (update, origin) => {\n if (origin === \"remote\") return;\n if (isEditDescription(origin)) {\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const modelName = getMetadata(origin.model).name;\n const event = {\n aggregationKey: `${docRef.id}-${modelName}`,\n createdBy: this.clientId,\n createdInstant: Date.now(),\n eventData: {\n eventData: origin.data,\n model: origin.model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n eventId: generateId(),\n isRead: false\n };\n internalDoc.presenceManager.broadcastActivity(event);\n }\n channel.postMessage({\n type: \"update\",\n data: Base64.fromUint8Array(update)\n });\n };\n internalDoc.yDoc.on(\"update\", updateHandler);\n internalDoc.updateHandler = updateHandler;\n channel.onmessage = event => {\n if (event.data.type === \"update\") {\n const update = Base64.toUint8Array(event.data.data);\n Y.applyUpdate(internalDoc.yDoc, update, \"remote\");\n }\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 ({\n documentTypeName,\n name,\n security = EMPTY_DOCUMENT_SECURITY\n }, schema) => {\n await this.metadataStore.whenReady();\n const ontologyRid = await getOntologyRid(this.app);\n const id = generateDocumentId();\n const docRef = createDocRef(this.app, id, schema);\n const metadata = {\n documentTypeName,\n name,\n ontologyRid,\n security // TODO: may want to add in auth.getUserId() as owner here\n };\n this.metadataStore.addDocument(id, metadata);\n const yDoc = this.initializeYDoc(schema);\n this.getCreateInternalDoc(docRef, metadata, yDoc);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n await this.metadataStore.whenReady();\n return this.metadataStore.searchDocuments(documentTypeName, options);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n this.metadataStore.whenReady().then(() => {\n const metadata = this.metadataStore.getDocument(docRef.id);\n if (metadata == null) {\n this.updateMetadataStatus(internalDoc, docRef, {\n error: new Error(\"Document not found\"),\n load: DocumentLoadStatus.ERROR\n });\n return;\n }\n internalDoc.metadata = metadata;\n const unobserve = this.metadataStore.observeDocument(docRef.id, updatedMetadata => {\n if (updatedMetadata != null) {\n internalDoc.metadata = updatedMetadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, updatedMetadata);\n }\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }).catch(error => {\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING,\n live: DocumentLiveStatus.CONNECTING\n });\n try {\n // Ensure update handler is set up (may already be done in createInternalDoc)\n this.ensureUpdateHandler(internalDoc, docRef);\n\n // Set up persistence\n if (!internalDoc.provider) {\n const provider = new IndexeddbPersistence(`${this.dbPrefix}-doc-${docRef.id}`, internalDoc.yDoc);\n internalDoc.provider = provider;\n provider.whenSynced.then(() => {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }).catch(error => {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n });\n } else {\n // Provider already exists, just update status\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }\n } catch (error) {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n }\n }\n onMetadataSubscriptionClosed(_internalDoc, _docRef) {}\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.updateHandler) {\n internalDoc.yDoc.off(\"update\", internalDoc.updateHandler);\n internalDoc.updateHandler = undefined;\n }\n if (internalDoc.channel) {\n internalDoc.channel.close();\n internalDoc.channel = undefined;\n }\n if (internalDoc.provider) {\n void internalDoc.provider.destroy();\n internalDoc.provider = undefined;\n }\n if (internalDoc.presenceManager) {\n internalDoc.presenceManager.dispose();\n internalDoc.presenceManager = undefined;\n }\n }\n onActivity(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onActivity(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n onPresence(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onPresence(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n updateCustomPresence(docRef, model, eventData) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const event = {\n eventData: {\n eventData,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n userId: this.clientId\n };\n internalDoc.presenceManager.broadcastPresence(event);\n }\n}\nfunction generateDocumentId() {\n return generateId();\n}\nfunction isEditDescription(obj) {\n return obj != null && typeof obj === \"object\" && \"data\" in obj && \"model\" in obj && typeof obj.model === \"object\" && obj.model != null && hasMetadata(obj.model);\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 { createDocumentServiceConfig } from \"@palantir/pack.state.core\";\nimport { DemoDocumentService } from \"./DemoDocumentService.js\";\nexport { MetadataStore } from \"./MetadataStore.js\";\nexport { PresenceManager } from \"./PresenceManager.js\";\nexport { DemoDocumentService };\nexport function createDemoDocumentServiceConfig(options = {}) {\n return createDocumentServiceConfig((app, config) => new DemoDocumentService(app, config), options);\n}"]}
1
+ {"version":3,"sources":["../../src/MetadataStore.ts","../../src/PresenceManager.ts","../../src/DemoDocumentService.ts","../../src/index.ts"],"names":["getMetadata","Y2","IndexeddbPersistence","hasMetadata"],"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 { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nconst METADATA_DB_NAME = \"pack-demo-metadata\";\nconst METADATA_MAP_KEY = \"documents\";\nexport class MetadataStore {\n yDoc;\n persistence;\n metadataMap;\n isReady = false;\n readyPromise;\n constructor(dbPrefix = \"pack-demo\") {\n this.yDoc = new Y.Doc();\n this.metadataMap = this.yDoc.getMap(METADATA_MAP_KEY);\n this.persistence = new IndexeddbPersistence(`${dbPrefix}-${METADATA_DB_NAME}`, this.yDoc);\n this.readyPromise = this.persistence.whenSynced.then(() => {\n this.isReady = true;\n });\n }\n async whenReady() {\n return this.readyPromise;\n }\n addDocument(id, metadata) {\n this.metadataMap.set(id, metadata);\n }\n getDocument(id) {\n return this.metadataMap.get(id);\n }\n searchDocuments(typeName, options) {\n const allResults = [];\n for (const [id, metadata] of this.metadataMap.entries()) {\n if (metadata.documentTypeName !== typeName) {\n continue;\n }\n if (options?.documentName && metadata.name !== options.documentName) {\n continue;\n }\n allResults.push({\n ...metadata,\n id: id\n });\n }\n const pageSize = options?.pageSize ?? allResults.length;\n const offset = options?.pageToken != null ? parseInt(options.pageToken, 10) : 0;\n const paginatedResults = allResults.slice(offset, offset + pageSize);\n const hasMore = offset + pageSize < allResults.length;\n const nextPageToken = hasMore ? String(offset + pageSize) : undefined;\n return {\n data: paginatedResults,\n nextPageToken\n };\n }\n observeDocument(id, callback) {\n const handler = () => {\n callback(this.metadataMap.get(id));\n };\n this.metadataMap.observe(handler);\n return () => {\n this.metadataMap.unobserve(handler);\n };\n }\n dispose() {\n void this.persistence.destroy();\n this.yDoc.destroy();\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 { getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nconst HEARTBEAT_INTERVAL_MS = 5000;\nconst STALE_CLIENT_TIMEOUT_MS = 15000;\nexport class PresenceManager {\n activityChannel;\n presenceChannel;\n schema;\n userId;\n activeClients = new Map();\n heartbeatInterval;\n staleCheckInterval;\n presenceCallbacks = new Set();\n activityCallbacks = new Set();\n constructor(documentId, userId, schema) {\n this.userId = userId;\n this.schema = schema;\n this.activityChannel = new BroadcastChannel(`pack-demo-activity-${documentId}`);\n this.presenceChannel = new BroadcastChannel(`pack-demo-presence-${documentId}`);\n this.activityChannel.onmessage = event => {\n this.handleActivityMessage(event.data);\n };\n this.presenceChannel.onmessage = event => {\n this.handlePresenceMessage(event.data);\n };\n this.startHeartbeat();\n this.startStaleCheck();\n }\n onPresence(callback) {\n this.presenceCallbacks.add(callback);\n return () => {\n this.presenceCallbacks.delete(callback);\n };\n }\n onActivity(callback) {\n this.activityCallbacks.add(callback);\n return () => {\n this.activityCallbacks.delete(callback);\n };\n }\n broadcastActivity(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"activity\",\n userId: this.userId\n };\n this.activityChannel.postMessage(message);\n }\n broadcastPresence(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"presence\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n }\n dispose() {\n if (this.heartbeatInterval != null) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = undefined;\n }\n if (this.staleCheckInterval != null) {\n clearInterval(this.staleCheckInterval);\n this.staleCheckInterval = undefined;\n }\n this.activityChannel.close();\n this.presenceChannel.close();\n this.presenceCallbacks.clear();\n this.activityCallbacks.clear();\n this.activeClients.clear();\n }\n startHeartbeat() {\n const sendHeartbeat = () => {\n const message = {\n timestamp: Date.now(),\n type: \"heartbeat\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n };\n sendHeartbeat();\n this.heartbeatInterval = setInterval(sendHeartbeat, HEARTBEAT_INTERVAL_MS);\n }\n startStaleCheck() {\n this.staleCheckInterval = setInterval(() => {\n this.checkStaleClients();\n }, HEARTBEAT_INTERVAL_MS);\n }\n handleActivityMessage(message) {\n if (message.type === \"activity\") {\n this.handleActivity(message.event);\n }\n }\n handlePresenceMessage(message) {\n switch (message.type) {\n case \"heartbeat\":\n this.handleHeartbeat(message.userId, message.timestamp);\n break;\n case \"presence\":\n this.handlePresence(message.event);\n break;\n }\n }\n handleHeartbeat(userId, timestamp) {\n const wasActive = this.activeClients.has(userId);\n this.activeClients.set(userId, timestamp);\n if (!wasActive) {\n const event = {\n eventData: {\n type: \"presenceArrived\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n handleActivity(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.activityCallbacks) {\n callback(reconstructedEvent);\n }\n }\n handlePresence(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.presenceCallbacks) {\n callback(reconstructedEvent);\n }\n }\n checkStaleClients() {\n const now = Date.now();\n const staleClients = [];\n for (const [userId, lastSeen] of this.activeClients.entries()) {\n if (now - lastSeen > STALE_CLIENT_TIMEOUT_MS) {\n staleClients.push(userId);\n }\n }\n for (const userId of staleClients) {\n this.activeClients.delete(userId);\n const event = {\n eventData: {\n type: \"presenceDeparted\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n emitPresenceEvent(event) {\n for (const callback of this.presenceCallbacks) {\n callback(event);\n }\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 { generateId, getOntologyRid } from \"@palantir/pack.core\";\nimport { ActivityEventDataType, getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocRef, DocumentLiveStatus, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { Base64 } from \"js-base64\";\nimport { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nimport { MetadataStore } from \"./MetadataStore.js\";\nimport { PresenceManager } from \"./PresenceManager.js\";\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nconst CLIENT_ID_STORAGE_KEY = \"pack-demo-client-id\";\nfunction getOrCreateClientId() {\n try {\n const storedId = sessionStorage.getItem(CLIENT_ID_STORAGE_KEY);\n if (storedId != null) {\n return storedId;\n }\n const newId = crypto.randomUUID();\n sessionStorage.setItem(CLIENT_ID_STORAGE_KEY, newId);\n return newId;\n } catch {\n return crypto.randomUUID();\n }\n}\nexport class DemoDocumentService extends BaseYjsDocumentService {\n clientId;\n dbPrefix;\n metadataStore;\n constructor(app, options = {}) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"DemoDocumentService\"\n }), {\n isDemo: true\n });\n this.clientId = getOrCreateClientId();\n this.dbPrefix = options.dbPrefix ?? \"pack-demo\";\n this.metadataStore = new MetadataStore(this.dbPrefix);\n }\n createInternalDoc(ref, metadata) {\n const internalDoc = this.createBaseInternalDoc(ref, metadata);\n this.ensureUpdateHandler(internalDoc, ref);\n return internalDoc;\n }\n ensureUpdateHandler(internalDoc, docRef) {\n if (internalDoc.updateHandler) {\n return;\n }\n const channel = new BroadcastChannel(`pack-demo-doc-${docRef.id}`);\n internalDoc.channel = channel;\n const updateHandler = (update, origin) => {\n if (origin === \"remote\") return;\n if (isEditDescription(origin)) {\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const modelName = getMetadata(origin.model).name;\n const event = {\n aggregationKey: `${docRef.id}-${modelName}`,\n createdBy: this.clientId,\n createdInstant: Date.now(),\n eventData: {\n eventData: origin.data,\n model: origin.model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n eventId: generateId(),\n isRead: false\n };\n internalDoc.presenceManager.broadcastActivity(event);\n }\n channel.postMessage({\n type: \"update\",\n data: Base64.fromUint8Array(update)\n });\n };\n internalDoc.yDoc.on(\"update\", updateHandler);\n internalDoc.updateHandler = updateHandler;\n channel.onmessage = event => {\n if (event.data.type === \"update\") {\n const update = Base64.toUint8Array(event.data.data);\n Y.applyUpdate(internalDoc.yDoc, update, \"remote\");\n }\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 ({\n documentTypeName,\n name,\n security = EMPTY_DOCUMENT_SECURITY\n }, schema) => {\n await this.metadataStore.whenReady();\n const ontologyRid = await getOntologyRid(this.app);\n const id = generateDocumentId();\n const docRef = createDocRef(this.app, id, schema);\n const metadata = {\n documentTypeName,\n name,\n ontologyRid,\n security // TODO: may want to add in auth.getUserId() as owner here\n };\n this.metadataStore.addDocument(id, metadata);\n const yDoc = this.initializeYDoc(schema);\n this.getCreateInternalDoc(docRef, metadata, yDoc);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n await this.metadataStore.whenReady();\n return this.metadataStore.searchDocuments(documentTypeName, options);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n this.metadataStore.whenReady().then(() => {\n const metadata = this.metadataStore.getDocument(docRef.id);\n if (metadata == null) {\n this.updateMetadataStatus(internalDoc, docRef, {\n error: new Error(\"Document not found\"),\n load: DocumentLoadStatus.ERROR\n });\n return;\n }\n internalDoc.metadata = metadata;\n const unobserve = this.metadataStore.observeDocument(docRef.id, updatedMetadata => {\n if (updatedMetadata != null) {\n internalDoc.metadata = updatedMetadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, updatedMetadata);\n }\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }).catch(error => {\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING,\n live: DocumentLiveStatus.CONNECTING\n });\n try {\n // Ensure update handler is set up (may already be done in createInternalDoc)\n this.ensureUpdateHandler(internalDoc, docRef);\n\n // Set up persistence\n if (!internalDoc.provider) {\n const provider = new IndexeddbPersistence(`${this.dbPrefix}-doc-${docRef.id}`, internalDoc.yDoc);\n internalDoc.provider = provider;\n provider.whenSynced.then(() => {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }).catch(error => {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n });\n } else {\n // Provider already exists, just update status\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }\n } catch (error) {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n }\n }\n onMetadataSubscriptionClosed(_internalDoc, _docRef) {}\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.updateHandler) {\n internalDoc.yDoc.off(\"update\", internalDoc.updateHandler);\n internalDoc.updateHandler = undefined;\n }\n if (internalDoc.channel) {\n internalDoc.channel.close();\n internalDoc.channel = undefined;\n }\n if (internalDoc.provider) {\n void internalDoc.provider.destroy();\n internalDoc.provider = undefined;\n }\n if (internalDoc.presenceManager) {\n internalDoc.presenceManager.dispose();\n internalDoc.presenceManager = undefined;\n }\n }\n onActivity(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onActivity(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n onPresence(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onPresence(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n updateCustomPresence(docRef, model, eventData, _options) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const event = {\n eventData: {\n eventData,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n userId: this.clientId\n };\n internalDoc.presenceManager.broadcastPresence(event);\n }\n}\nfunction generateDocumentId() {\n return generateId();\n}\nfunction isEditDescription(obj) {\n return obj != null && typeof obj === \"object\" && \"data\" in obj && \"model\" in obj && typeof obj.model === \"object\" && obj.model != null && hasMetadata(obj.model);\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 { createDocumentServiceConfig } from \"@palantir/pack.state.core\";\nimport { DemoDocumentService } from \"./DemoDocumentService.js\";\nexport { MetadataStore } from \"./MetadataStore.js\";\nexport { PresenceManager } from \"./PresenceManager.js\";\nexport { DemoDocumentService };\nexport function createDemoDocumentServiceConfig(options = {}) {\n return createDocumentServiceConfig((app, config) => new DemoDocumentService(app, config), options);\n}"]}
@@ -532,7 +532,7 @@ var DemoDocumentService = class extends pack_state_core.BaseYjsDocumentService {
532
532
  unsubscribe();
533
533
  };
534
534
  }
535
- updateCustomPresence(docRef, model, eventData) {
535
+ updateCustomPresence(docRef, model, eventData, _options) {
536
536
  const {
537
537
  internalDoc
538
538
  } = this.getCreateInternalDoc(docRef);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MetadataStore.ts","../../src/PresenceManager.ts","../../src/DemoDocumentService.ts","../../src/index.ts"],"names":["Y","IndexeddbPersistence","getMetadata","hasMetadata","BaseYjsDocumentService","ActivityEventDataType","generateId","Base64","Y2","getOntologyRid","createDocRef","DocumentLoadStatus","DocumentLiveStatus","createDocumentServiceConfig"],"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 { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nconst METADATA_DB_NAME = \"pack-demo-metadata\";\nconst METADATA_MAP_KEY = \"documents\";\nexport class MetadataStore {\n yDoc;\n persistence;\n metadataMap;\n isReady = false;\n readyPromise;\n constructor(dbPrefix = \"pack-demo\") {\n this.yDoc = new Y.Doc();\n this.metadataMap = this.yDoc.getMap(METADATA_MAP_KEY);\n this.persistence = new IndexeddbPersistence(`${dbPrefix}-${METADATA_DB_NAME}`, this.yDoc);\n this.readyPromise = this.persistence.whenSynced.then(() => {\n this.isReady = true;\n });\n }\n async whenReady() {\n return this.readyPromise;\n }\n addDocument(id, metadata) {\n this.metadataMap.set(id, metadata);\n }\n getDocument(id) {\n return this.metadataMap.get(id);\n }\n searchDocuments(typeName, options) {\n const allResults = [];\n for (const [id, metadata] of this.metadataMap.entries()) {\n if (metadata.documentTypeName !== typeName) {\n continue;\n }\n if (options?.documentName && metadata.name !== options.documentName) {\n continue;\n }\n allResults.push({\n ...metadata,\n id: id\n });\n }\n const pageSize = options?.pageSize ?? allResults.length;\n const offset = options?.pageToken != null ? parseInt(options.pageToken, 10) : 0;\n const paginatedResults = allResults.slice(offset, offset + pageSize);\n const hasMore = offset + pageSize < allResults.length;\n const nextPageToken = hasMore ? String(offset + pageSize) : undefined;\n return {\n data: paginatedResults,\n nextPageToken\n };\n }\n observeDocument(id, callback) {\n const handler = () => {\n callback(this.metadataMap.get(id));\n };\n this.metadataMap.observe(handler);\n return () => {\n this.metadataMap.unobserve(handler);\n };\n }\n dispose() {\n void this.persistence.destroy();\n this.yDoc.destroy();\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 { getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nconst HEARTBEAT_INTERVAL_MS = 5000;\nconst STALE_CLIENT_TIMEOUT_MS = 15000;\nexport class PresenceManager {\n activityChannel;\n presenceChannel;\n schema;\n userId;\n activeClients = new Map();\n heartbeatInterval;\n staleCheckInterval;\n presenceCallbacks = new Set();\n activityCallbacks = new Set();\n constructor(documentId, userId, schema) {\n this.userId = userId;\n this.schema = schema;\n this.activityChannel = new BroadcastChannel(`pack-demo-activity-${documentId}`);\n this.presenceChannel = new BroadcastChannel(`pack-demo-presence-${documentId}`);\n this.activityChannel.onmessage = event => {\n this.handleActivityMessage(event.data);\n };\n this.presenceChannel.onmessage = event => {\n this.handlePresenceMessage(event.data);\n };\n this.startHeartbeat();\n this.startStaleCheck();\n }\n onPresence(callback) {\n this.presenceCallbacks.add(callback);\n return () => {\n this.presenceCallbacks.delete(callback);\n };\n }\n onActivity(callback) {\n this.activityCallbacks.add(callback);\n return () => {\n this.activityCallbacks.delete(callback);\n };\n }\n broadcastActivity(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"activity\",\n userId: this.userId\n };\n this.activityChannel.postMessage(message);\n }\n broadcastPresence(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"presence\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n }\n dispose() {\n if (this.heartbeatInterval != null) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = undefined;\n }\n if (this.staleCheckInterval != null) {\n clearInterval(this.staleCheckInterval);\n this.staleCheckInterval = undefined;\n }\n this.activityChannel.close();\n this.presenceChannel.close();\n this.presenceCallbacks.clear();\n this.activityCallbacks.clear();\n this.activeClients.clear();\n }\n startHeartbeat() {\n const sendHeartbeat = () => {\n const message = {\n timestamp: Date.now(),\n type: \"heartbeat\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n };\n sendHeartbeat();\n this.heartbeatInterval = setInterval(sendHeartbeat, HEARTBEAT_INTERVAL_MS);\n }\n startStaleCheck() {\n this.staleCheckInterval = setInterval(() => {\n this.checkStaleClients();\n }, HEARTBEAT_INTERVAL_MS);\n }\n handleActivityMessage(message) {\n if (message.type === \"activity\") {\n this.handleActivity(message.event);\n }\n }\n handlePresenceMessage(message) {\n switch (message.type) {\n case \"heartbeat\":\n this.handleHeartbeat(message.userId, message.timestamp);\n break;\n case \"presence\":\n this.handlePresence(message.event);\n break;\n }\n }\n handleHeartbeat(userId, timestamp) {\n const wasActive = this.activeClients.has(userId);\n this.activeClients.set(userId, timestamp);\n if (!wasActive) {\n const event = {\n eventData: {\n type: \"presenceArrived\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n handleActivity(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.activityCallbacks) {\n callback(reconstructedEvent);\n }\n }\n handlePresence(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.presenceCallbacks) {\n callback(reconstructedEvent);\n }\n }\n checkStaleClients() {\n const now = Date.now();\n const staleClients = [];\n for (const [userId, lastSeen] of this.activeClients.entries()) {\n if (now - lastSeen > STALE_CLIENT_TIMEOUT_MS) {\n staleClients.push(userId);\n }\n }\n for (const userId of staleClients) {\n this.activeClients.delete(userId);\n const event = {\n eventData: {\n type: \"presenceDeparted\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n emitPresenceEvent(event) {\n for (const callback of this.presenceCallbacks) {\n callback(event);\n }\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 { generateId, getOntologyRid } from \"@palantir/pack.core\";\nimport { ActivityEventDataType, getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocRef, DocumentLiveStatus, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { Base64 } from \"js-base64\";\nimport { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nimport { MetadataStore } from \"./MetadataStore.js\";\nimport { PresenceManager } from \"./PresenceManager.js\";\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nconst CLIENT_ID_STORAGE_KEY = \"pack-demo-client-id\";\nfunction getOrCreateClientId() {\n try {\n const storedId = sessionStorage.getItem(CLIENT_ID_STORAGE_KEY);\n if (storedId != null) {\n return storedId;\n }\n const newId = crypto.randomUUID();\n sessionStorage.setItem(CLIENT_ID_STORAGE_KEY, newId);\n return newId;\n } catch {\n return crypto.randomUUID();\n }\n}\nexport class DemoDocumentService extends BaseYjsDocumentService {\n clientId;\n dbPrefix;\n metadataStore;\n constructor(app, options = {}) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"DemoDocumentService\"\n }), {\n isDemo: true\n });\n this.clientId = getOrCreateClientId();\n this.dbPrefix = options.dbPrefix ?? \"pack-demo\";\n this.metadataStore = new MetadataStore(this.dbPrefix);\n }\n createInternalDoc(ref, metadata) {\n const internalDoc = this.createBaseInternalDoc(ref, metadata);\n this.ensureUpdateHandler(internalDoc, ref);\n return internalDoc;\n }\n ensureUpdateHandler(internalDoc, docRef) {\n if (internalDoc.updateHandler) {\n return;\n }\n const channel = new BroadcastChannel(`pack-demo-doc-${docRef.id}`);\n internalDoc.channel = channel;\n const updateHandler = (update, origin) => {\n if (origin === \"remote\") return;\n if (isEditDescription(origin)) {\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const modelName = getMetadata(origin.model).name;\n const event = {\n aggregationKey: `${docRef.id}-${modelName}`,\n createdBy: this.clientId,\n createdInstant: Date.now(),\n eventData: {\n eventData: origin.data,\n model: origin.model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n eventId: generateId(),\n isRead: false\n };\n internalDoc.presenceManager.broadcastActivity(event);\n }\n channel.postMessage({\n type: \"update\",\n data: Base64.fromUint8Array(update)\n });\n };\n internalDoc.yDoc.on(\"update\", updateHandler);\n internalDoc.updateHandler = updateHandler;\n channel.onmessage = event => {\n if (event.data.type === \"update\") {\n const update = Base64.toUint8Array(event.data.data);\n Y.applyUpdate(internalDoc.yDoc, update, \"remote\");\n }\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 ({\n documentTypeName,\n name,\n security = EMPTY_DOCUMENT_SECURITY\n }, schema) => {\n await this.metadataStore.whenReady();\n const ontologyRid = await getOntologyRid(this.app);\n const id = generateDocumentId();\n const docRef = createDocRef(this.app, id, schema);\n const metadata = {\n documentTypeName,\n name,\n ontologyRid,\n security // TODO: may want to add in auth.getUserId() as owner here\n };\n this.metadataStore.addDocument(id, metadata);\n const yDoc = this.initializeYDoc(schema);\n this.getCreateInternalDoc(docRef, metadata, yDoc);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n await this.metadataStore.whenReady();\n return this.metadataStore.searchDocuments(documentTypeName, options);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n this.metadataStore.whenReady().then(() => {\n const metadata = this.metadataStore.getDocument(docRef.id);\n if (metadata == null) {\n this.updateMetadataStatus(internalDoc, docRef, {\n error: new Error(\"Document not found\"),\n load: DocumentLoadStatus.ERROR\n });\n return;\n }\n internalDoc.metadata = metadata;\n const unobserve = this.metadataStore.observeDocument(docRef.id, updatedMetadata => {\n if (updatedMetadata != null) {\n internalDoc.metadata = updatedMetadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, updatedMetadata);\n }\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }).catch(error => {\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING,\n live: DocumentLiveStatus.CONNECTING\n });\n try {\n // Ensure update handler is set up (may already be done in createInternalDoc)\n this.ensureUpdateHandler(internalDoc, docRef);\n\n // Set up persistence\n if (!internalDoc.provider) {\n const provider = new IndexeddbPersistence(`${this.dbPrefix}-doc-${docRef.id}`, internalDoc.yDoc);\n internalDoc.provider = provider;\n provider.whenSynced.then(() => {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }).catch(error => {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n });\n } else {\n // Provider already exists, just update status\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }\n } catch (error) {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n }\n }\n onMetadataSubscriptionClosed(_internalDoc, _docRef) {}\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.updateHandler) {\n internalDoc.yDoc.off(\"update\", internalDoc.updateHandler);\n internalDoc.updateHandler = undefined;\n }\n if (internalDoc.channel) {\n internalDoc.channel.close();\n internalDoc.channel = undefined;\n }\n if (internalDoc.provider) {\n void internalDoc.provider.destroy();\n internalDoc.provider = undefined;\n }\n if (internalDoc.presenceManager) {\n internalDoc.presenceManager.dispose();\n internalDoc.presenceManager = undefined;\n }\n }\n onActivity(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onActivity(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n onPresence(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onPresence(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n updateCustomPresence(docRef, model, eventData) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const event = {\n eventData: {\n eventData,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n userId: this.clientId\n };\n internalDoc.presenceManager.broadcastPresence(event);\n }\n}\nfunction generateDocumentId() {\n return generateId();\n}\nfunction isEditDescription(obj) {\n return obj != null && typeof obj === \"object\" && \"data\" in obj && \"model\" in obj && typeof obj.model === \"object\" && obj.model != null && hasMetadata(obj.model);\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 { createDocumentServiceConfig } from \"@palantir/pack.state.core\";\nimport { DemoDocumentService } from \"./DemoDocumentService.js\";\nexport { MetadataStore } from \"./MetadataStore.js\";\nexport { PresenceManager } from \"./PresenceManager.js\";\nexport { DemoDocumentService };\nexport function createDemoDocumentServiceConfig(options = {}) {\n return createDocumentServiceConfig((app, config) => new DemoDocumentService(app, config), options);\n}"]}
1
+ {"version":3,"sources":["../../src/MetadataStore.ts","../../src/PresenceManager.ts","../../src/DemoDocumentService.ts","../../src/index.ts"],"names":["Y","IndexeddbPersistence","getMetadata","hasMetadata","BaseYjsDocumentService","ActivityEventDataType","generateId","Base64","Y2","getOntologyRid","createDocRef","DocumentLoadStatus","DocumentLiveStatus","createDocumentServiceConfig"],"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 { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nconst METADATA_DB_NAME = \"pack-demo-metadata\";\nconst METADATA_MAP_KEY = \"documents\";\nexport class MetadataStore {\n yDoc;\n persistence;\n metadataMap;\n isReady = false;\n readyPromise;\n constructor(dbPrefix = \"pack-demo\") {\n this.yDoc = new Y.Doc();\n this.metadataMap = this.yDoc.getMap(METADATA_MAP_KEY);\n this.persistence = new IndexeddbPersistence(`${dbPrefix}-${METADATA_DB_NAME}`, this.yDoc);\n this.readyPromise = this.persistence.whenSynced.then(() => {\n this.isReady = true;\n });\n }\n async whenReady() {\n return this.readyPromise;\n }\n addDocument(id, metadata) {\n this.metadataMap.set(id, metadata);\n }\n getDocument(id) {\n return this.metadataMap.get(id);\n }\n searchDocuments(typeName, options) {\n const allResults = [];\n for (const [id, metadata] of this.metadataMap.entries()) {\n if (metadata.documentTypeName !== typeName) {\n continue;\n }\n if (options?.documentName && metadata.name !== options.documentName) {\n continue;\n }\n allResults.push({\n ...metadata,\n id: id\n });\n }\n const pageSize = options?.pageSize ?? allResults.length;\n const offset = options?.pageToken != null ? parseInt(options.pageToken, 10) : 0;\n const paginatedResults = allResults.slice(offset, offset + pageSize);\n const hasMore = offset + pageSize < allResults.length;\n const nextPageToken = hasMore ? String(offset + pageSize) : undefined;\n return {\n data: paginatedResults,\n nextPageToken\n };\n }\n observeDocument(id, callback) {\n const handler = () => {\n callback(this.metadataMap.get(id));\n };\n this.metadataMap.observe(handler);\n return () => {\n this.metadataMap.unobserve(handler);\n };\n }\n dispose() {\n void this.persistence.destroy();\n this.yDoc.destroy();\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 { getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nconst HEARTBEAT_INTERVAL_MS = 5000;\nconst STALE_CLIENT_TIMEOUT_MS = 15000;\nexport class PresenceManager {\n activityChannel;\n presenceChannel;\n schema;\n userId;\n activeClients = new Map();\n heartbeatInterval;\n staleCheckInterval;\n presenceCallbacks = new Set();\n activityCallbacks = new Set();\n constructor(documentId, userId, schema) {\n this.userId = userId;\n this.schema = schema;\n this.activityChannel = new BroadcastChannel(`pack-demo-activity-${documentId}`);\n this.presenceChannel = new BroadcastChannel(`pack-demo-presence-${documentId}`);\n this.activityChannel.onmessage = event => {\n this.handleActivityMessage(event.data);\n };\n this.presenceChannel.onmessage = event => {\n this.handlePresenceMessage(event.data);\n };\n this.startHeartbeat();\n this.startStaleCheck();\n }\n onPresence(callback) {\n this.presenceCallbacks.add(callback);\n return () => {\n this.presenceCallbacks.delete(callback);\n };\n }\n onActivity(callback) {\n this.activityCallbacks.add(callback);\n return () => {\n this.activityCallbacks.delete(callback);\n };\n }\n broadcastActivity(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"activity\",\n userId: this.userId\n };\n this.activityChannel.postMessage(message);\n }\n broadcastPresence(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"presence\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n }\n dispose() {\n if (this.heartbeatInterval != null) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = undefined;\n }\n if (this.staleCheckInterval != null) {\n clearInterval(this.staleCheckInterval);\n this.staleCheckInterval = undefined;\n }\n this.activityChannel.close();\n this.presenceChannel.close();\n this.presenceCallbacks.clear();\n this.activityCallbacks.clear();\n this.activeClients.clear();\n }\n startHeartbeat() {\n const sendHeartbeat = () => {\n const message = {\n timestamp: Date.now(),\n type: \"heartbeat\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n };\n sendHeartbeat();\n this.heartbeatInterval = setInterval(sendHeartbeat, HEARTBEAT_INTERVAL_MS);\n }\n startStaleCheck() {\n this.staleCheckInterval = setInterval(() => {\n this.checkStaleClients();\n }, HEARTBEAT_INTERVAL_MS);\n }\n handleActivityMessage(message) {\n if (message.type === \"activity\") {\n this.handleActivity(message.event);\n }\n }\n handlePresenceMessage(message) {\n switch (message.type) {\n case \"heartbeat\":\n this.handleHeartbeat(message.userId, message.timestamp);\n break;\n case \"presence\":\n this.handlePresence(message.event);\n break;\n }\n }\n handleHeartbeat(userId, timestamp) {\n const wasActive = this.activeClients.has(userId);\n this.activeClients.set(userId, timestamp);\n if (!wasActive) {\n const event = {\n eventData: {\n type: \"presenceArrived\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n handleActivity(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.activityCallbacks) {\n callback(reconstructedEvent);\n }\n }\n handlePresence(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.presenceCallbacks) {\n callback(reconstructedEvent);\n }\n }\n checkStaleClients() {\n const now = Date.now();\n const staleClients = [];\n for (const [userId, lastSeen] of this.activeClients.entries()) {\n if (now - lastSeen > STALE_CLIENT_TIMEOUT_MS) {\n staleClients.push(userId);\n }\n }\n for (const userId of staleClients) {\n this.activeClients.delete(userId);\n const event = {\n eventData: {\n type: \"presenceDeparted\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n emitPresenceEvent(event) {\n for (const callback of this.presenceCallbacks) {\n callback(event);\n }\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 { generateId, getOntologyRid } from \"@palantir/pack.core\";\nimport { ActivityEventDataType, getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocRef, DocumentLiveStatus, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { Base64 } from \"js-base64\";\nimport { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nimport { MetadataStore } from \"./MetadataStore.js\";\nimport { PresenceManager } from \"./PresenceManager.js\";\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nconst CLIENT_ID_STORAGE_KEY = \"pack-demo-client-id\";\nfunction getOrCreateClientId() {\n try {\n const storedId = sessionStorage.getItem(CLIENT_ID_STORAGE_KEY);\n if (storedId != null) {\n return storedId;\n }\n const newId = crypto.randomUUID();\n sessionStorage.setItem(CLIENT_ID_STORAGE_KEY, newId);\n return newId;\n } catch {\n return crypto.randomUUID();\n }\n}\nexport class DemoDocumentService extends BaseYjsDocumentService {\n clientId;\n dbPrefix;\n metadataStore;\n constructor(app, options = {}) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"DemoDocumentService\"\n }), {\n isDemo: true\n });\n this.clientId = getOrCreateClientId();\n this.dbPrefix = options.dbPrefix ?? \"pack-demo\";\n this.metadataStore = new MetadataStore(this.dbPrefix);\n }\n createInternalDoc(ref, metadata) {\n const internalDoc = this.createBaseInternalDoc(ref, metadata);\n this.ensureUpdateHandler(internalDoc, ref);\n return internalDoc;\n }\n ensureUpdateHandler(internalDoc, docRef) {\n if (internalDoc.updateHandler) {\n return;\n }\n const channel = new BroadcastChannel(`pack-demo-doc-${docRef.id}`);\n internalDoc.channel = channel;\n const updateHandler = (update, origin) => {\n if (origin === \"remote\") return;\n if (isEditDescription(origin)) {\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const modelName = getMetadata(origin.model).name;\n const event = {\n aggregationKey: `${docRef.id}-${modelName}`,\n createdBy: this.clientId,\n createdInstant: Date.now(),\n eventData: {\n eventData: origin.data,\n model: origin.model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n eventId: generateId(),\n isRead: false\n };\n internalDoc.presenceManager.broadcastActivity(event);\n }\n channel.postMessage({\n type: \"update\",\n data: Base64.fromUint8Array(update)\n });\n };\n internalDoc.yDoc.on(\"update\", updateHandler);\n internalDoc.updateHandler = updateHandler;\n channel.onmessage = event => {\n if (event.data.type === \"update\") {\n const update = Base64.toUint8Array(event.data.data);\n Y.applyUpdate(internalDoc.yDoc, update, \"remote\");\n }\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 ({\n documentTypeName,\n name,\n security = EMPTY_DOCUMENT_SECURITY\n }, schema) => {\n await this.metadataStore.whenReady();\n const ontologyRid = await getOntologyRid(this.app);\n const id = generateDocumentId();\n const docRef = createDocRef(this.app, id, schema);\n const metadata = {\n documentTypeName,\n name,\n ontologyRid,\n security // TODO: may want to add in auth.getUserId() as owner here\n };\n this.metadataStore.addDocument(id, metadata);\n const yDoc = this.initializeYDoc(schema);\n this.getCreateInternalDoc(docRef, metadata, yDoc);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n await this.metadataStore.whenReady();\n return this.metadataStore.searchDocuments(documentTypeName, options);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n this.metadataStore.whenReady().then(() => {\n const metadata = this.metadataStore.getDocument(docRef.id);\n if (metadata == null) {\n this.updateMetadataStatus(internalDoc, docRef, {\n error: new Error(\"Document not found\"),\n load: DocumentLoadStatus.ERROR\n });\n return;\n }\n internalDoc.metadata = metadata;\n const unobserve = this.metadataStore.observeDocument(docRef.id, updatedMetadata => {\n if (updatedMetadata != null) {\n internalDoc.metadata = updatedMetadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, updatedMetadata);\n }\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }).catch(error => {\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING,\n live: DocumentLiveStatus.CONNECTING\n });\n try {\n // Ensure update handler is set up (may already be done in createInternalDoc)\n this.ensureUpdateHandler(internalDoc, docRef);\n\n // Set up persistence\n if (!internalDoc.provider) {\n const provider = new IndexeddbPersistence(`${this.dbPrefix}-doc-${docRef.id}`, internalDoc.yDoc);\n internalDoc.provider = provider;\n provider.whenSynced.then(() => {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }).catch(error => {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n });\n } else {\n // Provider already exists, just update status\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }\n } catch (error) {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n }\n }\n onMetadataSubscriptionClosed(_internalDoc, _docRef) {}\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.updateHandler) {\n internalDoc.yDoc.off(\"update\", internalDoc.updateHandler);\n internalDoc.updateHandler = undefined;\n }\n if (internalDoc.channel) {\n internalDoc.channel.close();\n internalDoc.channel = undefined;\n }\n if (internalDoc.provider) {\n void internalDoc.provider.destroy();\n internalDoc.provider = undefined;\n }\n if (internalDoc.presenceManager) {\n internalDoc.presenceManager.dispose();\n internalDoc.presenceManager = undefined;\n }\n }\n onActivity(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onActivity(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n onPresence(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onPresence(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n updateCustomPresence(docRef, model, eventData, _options) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const event = {\n eventData: {\n eventData,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n userId: this.clientId\n };\n internalDoc.presenceManager.broadcastPresence(event);\n }\n}\nfunction generateDocumentId() {\n return generateId();\n}\nfunction isEditDescription(obj) {\n return obj != null && typeof obj === \"object\" && \"data\" in obj && \"model\" in obj && typeof obj.model === \"object\" && obj.model != null && hasMetadata(obj.model);\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 { createDocumentServiceConfig } from \"@palantir/pack.state.core\";\nimport { DemoDocumentService } from \"./DemoDocumentService.js\";\nexport { MetadataStore } from \"./MetadataStore.js\";\nexport { PresenceManager } from \"./PresenceManager.js\";\nexport { DemoDocumentService };\nexport function createDemoDocumentServiceConfig(options = {}) {\n return createDocumentServiceConfig((app, config) => new DemoDocumentService(app, config), options);\n}"]}
@@ -1,6 +1,6 @@
1
1
  import { PackAppInternal, Unsubscribe, ModuleConfigTuple } from '@palantir/pack.core';
2
2
  import { BaseYjsDocumentService, InternalYjsDoc, CreateDocumentMetadata, SearchDocumentsResult, DocumentService } from '@palantir/pack.state.core';
3
- import { DocumentId, DocumentSchema, PresenceEvent, ActivityEvent, DocumentRef, DocumentMetadata, Model, ModelData } from '@palantir/pack.document-schema.model-types';
3
+ import { DocumentId, DocumentSchema, PresenceEvent, ActivityEvent, DocumentRef, DocumentMetadata, Model, ModelData, PresencePublishOptions } from '@palantir/pack.document-schema.model-types';
4
4
  import { IndexeddbPersistence } from 'y-indexeddb';
5
5
 
6
6
  declare class PresenceManager {
@@ -61,7 +61,7 @@ declare class DemoDocumentService extends BaseYjsDocumentService<DemoInternalDoc
61
61
  protected onDataSubscriptionClosed(internalDoc: DemoInternalDoc, _docRef: DocumentRef): void;
62
62
  onActivity<T extends DocumentSchema>(docRef: DocumentRef<T>, callback: (docRef: DocumentRef<T>, event: ActivityEvent) => void): Unsubscribe;
63
63
  onPresence<T extends DocumentSchema>(docRef: DocumentRef<T>, callback: (docRef: DocumentRef<T>, event: PresenceEvent) => void): Unsubscribe;
64
- updateCustomPresence<M extends Model>(docRef: DocumentRef, model: M, eventData: ModelData<M>): void;
64
+ updateCustomPresence<M extends Model>(docRef: DocumentRef, model: M, eventData: ModelData<M>, _options?: PresencePublishOptions): void;
65
65
  }
66
66
 
67
67
  declare class MetadataStore {
@@ -510,7 +510,7 @@ var DemoDocumentService = class extends BaseYjsDocumentService {
510
510
  unsubscribe();
511
511
  };
512
512
  }
513
- updateCustomPresence(docRef, model, eventData) {
513
+ updateCustomPresence(docRef, model, eventData, _options) {
514
514
  const {
515
515
  internalDoc
516
516
  } = this.getCreateInternalDoc(docRef);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MetadataStore.ts","../../src/PresenceManager.ts","../../src/DemoDocumentService.ts","../../src/index.ts"],"names":["getMetadata","Y2","IndexeddbPersistence","hasMetadata"],"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 { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nconst METADATA_DB_NAME = \"pack-demo-metadata\";\nconst METADATA_MAP_KEY = \"documents\";\nexport class MetadataStore {\n yDoc;\n persistence;\n metadataMap;\n isReady = false;\n readyPromise;\n constructor(dbPrefix = \"pack-demo\") {\n this.yDoc = new Y.Doc();\n this.metadataMap = this.yDoc.getMap(METADATA_MAP_KEY);\n this.persistence = new IndexeddbPersistence(`${dbPrefix}-${METADATA_DB_NAME}`, this.yDoc);\n this.readyPromise = this.persistence.whenSynced.then(() => {\n this.isReady = true;\n });\n }\n async whenReady() {\n return this.readyPromise;\n }\n addDocument(id, metadata) {\n this.metadataMap.set(id, metadata);\n }\n getDocument(id) {\n return this.metadataMap.get(id);\n }\n searchDocuments(typeName, options) {\n const allResults = [];\n for (const [id, metadata] of this.metadataMap.entries()) {\n if (metadata.documentTypeName !== typeName) {\n continue;\n }\n if (options?.documentName && metadata.name !== options.documentName) {\n continue;\n }\n allResults.push({\n ...metadata,\n id: id\n });\n }\n const pageSize = options?.pageSize ?? allResults.length;\n const offset = options?.pageToken != null ? parseInt(options.pageToken, 10) : 0;\n const paginatedResults = allResults.slice(offset, offset + pageSize);\n const hasMore = offset + pageSize < allResults.length;\n const nextPageToken = hasMore ? String(offset + pageSize) : undefined;\n return {\n data: paginatedResults,\n nextPageToken\n };\n }\n observeDocument(id, callback) {\n const handler = () => {\n callback(this.metadataMap.get(id));\n };\n this.metadataMap.observe(handler);\n return () => {\n this.metadataMap.unobserve(handler);\n };\n }\n dispose() {\n void this.persistence.destroy();\n this.yDoc.destroy();\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 { getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nconst HEARTBEAT_INTERVAL_MS = 5000;\nconst STALE_CLIENT_TIMEOUT_MS = 15000;\nexport class PresenceManager {\n activityChannel;\n presenceChannel;\n schema;\n userId;\n activeClients = new Map();\n heartbeatInterval;\n staleCheckInterval;\n presenceCallbacks = new Set();\n activityCallbacks = new Set();\n constructor(documentId, userId, schema) {\n this.userId = userId;\n this.schema = schema;\n this.activityChannel = new BroadcastChannel(`pack-demo-activity-${documentId}`);\n this.presenceChannel = new BroadcastChannel(`pack-demo-presence-${documentId}`);\n this.activityChannel.onmessage = event => {\n this.handleActivityMessage(event.data);\n };\n this.presenceChannel.onmessage = event => {\n this.handlePresenceMessage(event.data);\n };\n this.startHeartbeat();\n this.startStaleCheck();\n }\n onPresence(callback) {\n this.presenceCallbacks.add(callback);\n return () => {\n this.presenceCallbacks.delete(callback);\n };\n }\n onActivity(callback) {\n this.activityCallbacks.add(callback);\n return () => {\n this.activityCallbacks.delete(callback);\n };\n }\n broadcastActivity(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"activity\",\n userId: this.userId\n };\n this.activityChannel.postMessage(message);\n }\n broadcastPresence(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"presence\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n }\n dispose() {\n if (this.heartbeatInterval != null) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = undefined;\n }\n if (this.staleCheckInterval != null) {\n clearInterval(this.staleCheckInterval);\n this.staleCheckInterval = undefined;\n }\n this.activityChannel.close();\n this.presenceChannel.close();\n this.presenceCallbacks.clear();\n this.activityCallbacks.clear();\n this.activeClients.clear();\n }\n startHeartbeat() {\n const sendHeartbeat = () => {\n const message = {\n timestamp: Date.now(),\n type: \"heartbeat\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n };\n sendHeartbeat();\n this.heartbeatInterval = setInterval(sendHeartbeat, HEARTBEAT_INTERVAL_MS);\n }\n startStaleCheck() {\n this.staleCheckInterval = setInterval(() => {\n this.checkStaleClients();\n }, HEARTBEAT_INTERVAL_MS);\n }\n handleActivityMessage(message) {\n if (message.type === \"activity\") {\n this.handleActivity(message.event);\n }\n }\n handlePresenceMessage(message) {\n switch (message.type) {\n case \"heartbeat\":\n this.handleHeartbeat(message.userId, message.timestamp);\n break;\n case \"presence\":\n this.handlePresence(message.event);\n break;\n }\n }\n handleHeartbeat(userId, timestamp) {\n const wasActive = this.activeClients.has(userId);\n this.activeClients.set(userId, timestamp);\n if (!wasActive) {\n const event = {\n eventData: {\n type: \"presenceArrived\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n handleActivity(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.activityCallbacks) {\n callback(reconstructedEvent);\n }\n }\n handlePresence(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.presenceCallbacks) {\n callback(reconstructedEvent);\n }\n }\n checkStaleClients() {\n const now = Date.now();\n const staleClients = [];\n for (const [userId, lastSeen] of this.activeClients.entries()) {\n if (now - lastSeen > STALE_CLIENT_TIMEOUT_MS) {\n staleClients.push(userId);\n }\n }\n for (const userId of staleClients) {\n this.activeClients.delete(userId);\n const event = {\n eventData: {\n type: \"presenceDeparted\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n emitPresenceEvent(event) {\n for (const callback of this.presenceCallbacks) {\n callback(event);\n }\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 { generateId, getOntologyRid } from \"@palantir/pack.core\";\nimport { ActivityEventDataType, getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocRef, DocumentLiveStatus, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { Base64 } from \"js-base64\";\nimport { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nimport { MetadataStore } from \"./MetadataStore.js\";\nimport { PresenceManager } from \"./PresenceManager.js\";\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nconst CLIENT_ID_STORAGE_KEY = \"pack-demo-client-id\";\nfunction getOrCreateClientId() {\n try {\n const storedId = sessionStorage.getItem(CLIENT_ID_STORAGE_KEY);\n if (storedId != null) {\n return storedId;\n }\n const newId = crypto.randomUUID();\n sessionStorage.setItem(CLIENT_ID_STORAGE_KEY, newId);\n return newId;\n } catch {\n return crypto.randomUUID();\n }\n}\nexport class DemoDocumentService extends BaseYjsDocumentService {\n clientId;\n dbPrefix;\n metadataStore;\n constructor(app, options = {}) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"DemoDocumentService\"\n }), {\n isDemo: true\n });\n this.clientId = getOrCreateClientId();\n this.dbPrefix = options.dbPrefix ?? \"pack-demo\";\n this.metadataStore = new MetadataStore(this.dbPrefix);\n }\n createInternalDoc(ref, metadata) {\n const internalDoc = this.createBaseInternalDoc(ref, metadata);\n this.ensureUpdateHandler(internalDoc, ref);\n return internalDoc;\n }\n ensureUpdateHandler(internalDoc, docRef) {\n if (internalDoc.updateHandler) {\n return;\n }\n const channel = new BroadcastChannel(`pack-demo-doc-${docRef.id}`);\n internalDoc.channel = channel;\n const updateHandler = (update, origin) => {\n if (origin === \"remote\") return;\n if (isEditDescription(origin)) {\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const modelName = getMetadata(origin.model).name;\n const event = {\n aggregationKey: `${docRef.id}-${modelName}`,\n createdBy: this.clientId,\n createdInstant: Date.now(),\n eventData: {\n eventData: origin.data,\n model: origin.model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n eventId: generateId(),\n isRead: false\n };\n internalDoc.presenceManager.broadcastActivity(event);\n }\n channel.postMessage({\n type: \"update\",\n data: Base64.fromUint8Array(update)\n });\n };\n internalDoc.yDoc.on(\"update\", updateHandler);\n internalDoc.updateHandler = updateHandler;\n channel.onmessage = event => {\n if (event.data.type === \"update\") {\n const update = Base64.toUint8Array(event.data.data);\n Y.applyUpdate(internalDoc.yDoc, update, \"remote\");\n }\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 ({\n documentTypeName,\n name,\n security = EMPTY_DOCUMENT_SECURITY\n }, schema) => {\n await this.metadataStore.whenReady();\n const ontologyRid = await getOntologyRid(this.app);\n const id = generateDocumentId();\n const docRef = createDocRef(this.app, id, schema);\n const metadata = {\n documentTypeName,\n name,\n ontologyRid,\n security // TODO: may want to add in auth.getUserId() as owner here\n };\n this.metadataStore.addDocument(id, metadata);\n const yDoc = this.initializeYDoc(schema);\n this.getCreateInternalDoc(docRef, metadata, yDoc);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n await this.metadataStore.whenReady();\n return this.metadataStore.searchDocuments(documentTypeName, options);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n this.metadataStore.whenReady().then(() => {\n const metadata = this.metadataStore.getDocument(docRef.id);\n if (metadata == null) {\n this.updateMetadataStatus(internalDoc, docRef, {\n error: new Error(\"Document not found\"),\n load: DocumentLoadStatus.ERROR\n });\n return;\n }\n internalDoc.metadata = metadata;\n const unobserve = this.metadataStore.observeDocument(docRef.id, updatedMetadata => {\n if (updatedMetadata != null) {\n internalDoc.metadata = updatedMetadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, updatedMetadata);\n }\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }).catch(error => {\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING,\n live: DocumentLiveStatus.CONNECTING\n });\n try {\n // Ensure update handler is set up (may already be done in createInternalDoc)\n this.ensureUpdateHandler(internalDoc, docRef);\n\n // Set up persistence\n if (!internalDoc.provider) {\n const provider = new IndexeddbPersistence(`${this.dbPrefix}-doc-${docRef.id}`, internalDoc.yDoc);\n internalDoc.provider = provider;\n provider.whenSynced.then(() => {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }).catch(error => {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n });\n } else {\n // Provider already exists, just update status\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }\n } catch (error) {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n }\n }\n onMetadataSubscriptionClosed(_internalDoc, _docRef) {}\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.updateHandler) {\n internalDoc.yDoc.off(\"update\", internalDoc.updateHandler);\n internalDoc.updateHandler = undefined;\n }\n if (internalDoc.channel) {\n internalDoc.channel.close();\n internalDoc.channel = undefined;\n }\n if (internalDoc.provider) {\n void internalDoc.provider.destroy();\n internalDoc.provider = undefined;\n }\n if (internalDoc.presenceManager) {\n internalDoc.presenceManager.dispose();\n internalDoc.presenceManager = undefined;\n }\n }\n onActivity(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onActivity(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n onPresence(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onPresence(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n updateCustomPresence(docRef, model, eventData) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const event = {\n eventData: {\n eventData,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n userId: this.clientId\n };\n internalDoc.presenceManager.broadcastPresence(event);\n }\n}\nfunction generateDocumentId() {\n return generateId();\n}\nfunction isEditDescription(obj) {\n return obj != null && typeof obj === \"object\" && \"data\" in obj && \"model\" in obj && typeof obj.model === \"object\" && obj.model != null && hasMetadata(obj.model);\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 { createDocumentServiceConfig } from \"@palantir/pack.state.core\";\nimport { DemoDocumentService } from \"./DemoDocumentService.js\";\nexport { MetadataStore } from \"./MetadataStore.js\";\nexport { PresenceManager } from \"./PresenceManager.js\";\nexport { DemoDocumentService };\nexport function createDemoDocumentServiceConfig(options = {}) {\n return createDocumentServiceConfig((app, config) => new DemoDocumentService(app, config), options);\n}"]}
1
+ {"version":3,"sources":["../../src/MetadataStore.ts","../../src/PresenceManager.ts","../../src/DemoDocumentService.ts","../../src/index.ts"],"names":["getMetadata","Y2","IndexeddbPersistence","hasMetadata"],"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 { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nconst METADATA_DB_NAME = \"pack-demo-metadata\";\nconst METADATA_MAP_KEY = \"documents\";\nexport class MetadataStore {\n yDoc;\n persistence;\n metadataMap;\n isReady = false;\n readyPromise;\n constructor(dbPrefix = \"pack-demo\") {\n this.yDoc = new Y.Doc();\n this.metadataMap = this.yDoc.getMap(METADATA_MAP_KEY);\n this.persistence = new IndexeddbPersistence(`${dbPrefix}-${METADATA_DB_NAME}`, this.yDoc);\n this.readyPromise = this.persistence.whenSynced.then(() => {\n this.isReady = true;\n });\n }\n async whenReady() {\n return this.readyPromise;\n }\n addDocument(id, metadata) {\n this.metadataMap.set(id, metadata);\n }\n getDocument(id) {\n return this.metadataMap.get(id);\n }\n searchDocuments(typeName, options) {\n const allResults = [];\n for (const [id, metadata] of this.metadataMap.entries()) {\n if (metadata.documentTypeName !== typeName) {\n continue;\n }\n if (options?.documentName && metadata.name !== options.documentName) {\n continue;\n }\n allResults.push({\n ...metadata,\n id: id\n });\n }\n const pageSize = options?.pageSize ?? allResults.length;\n const offset = options?.pageToken != null ? parseInt(options.pageToken, 10) : 0;\n const paginatedResults = allResults.slice(offset, offset + pageSize);\n const hasMore = offset + pageSize < allResults.length;\n const nextPageToken = hasMore ? String(offset + pageSize) : undefined;\n return {\n data: paginatedResults,\n nextPageToken\n };\n }\n observeDocument(id, callback) {\n const handler = () => {\n callback(this.metadataMap.get(id));\n };\n this.metadataMap.observe(handler);\n return () => {\n this.metadataMap.unobserve(handler);\n };\n }\n dispose() {\n void this.persistence.destroy();\n this.yDoc.destroy();\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 { getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nconst HEARTBEAT_INTERVAL_MS = 5000;\nconst STALE_CLIENT_TIMEOUT_MS = 15000;\nexport class PresenceManager {\n activityChannel;\n presenceChannel;\n schema;\n userId;\n activeClients = new Map();\n heartbeatInterval;\n staleCheckInterval;\n presenceCallbacks = new Set();\n activityCallbacks = new Set();\n constructor(documentId, userId, schema) {\n this.userId = userId;\n this.schema = schema;\n this.activityChannel = new BroadcastChannel(`pack-demo-activity-${documentId}`);\n this.presenceChannel = new BroadcastChannel(`pack-demo-presence-${documentId}`);\n this.activityChannel.onmessage = event => {\n this.handleActivityMessage(event.data);\n };\n this.presenceChannel.onmessage = event => {\n this.handlePresenceMessage(event.data);\n };\n this.startHeartbeat();\n this.startStaleCheck();\n }\n onPresence(callback) {\n this.presenceCallbacks.add(callback);\n return () => {\n this.presenceCallbacks.delete(callback);\n };\n }\n onActivity(callback) {\n this.activityCallbacks.add(callback);\n return () => {\n this.activityCallbacks.delete(callback);\n };\n }\n broadcastActivity(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"activity\",\n userId: this.userId\n };\n this.activityChannel.postMessage(message);\n }\n broadcastPresence(event) {\n const serializableEvent = {\n ...event,\n eventData: event.eventData.type === \"customEvent\" ? {\n eventData: event.eventData.eventData,\n modelName: getMetadata(event.eventData.model).name,\n type: \"customEvent\"\n } : event.eventData\n };\n const message = {\n event: serializableEvent,\n type: \"presence\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n }\n dispose() {\n if (this.heartbeatInterval != null) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = undefined;\n }\n if (this.staleCheckInterval != null) {\n clearInterval(this.staleCheckInterval);\n this.staleCheckInterval = undefined;\n }\n this.activityChannel.close();\n this.presenceChannel.close();\n this.presenceCallbacks.clear();\n this.activityCallbacks.clear();\n this.activeClients.clear();\n }\n startHeartbeat() {\n const sendHeartbeat = () => {\n const message = {\n timestamp: Date.now(),\n type: \"heartbeat\",\n userId: this.userId\n };\n this.presenceChannel.postMessage(message);\n };\n sendHeartbeat();\n this.heartbeatInterval = setInterval(sendHeartbeat, HEARTBEAT_INTERVAL_MS);\n }\n startStaleCheck() {\n this.staleCheckInterval = setInterval(() => {\n this.checkStaleClients();\n }, HEARTBEAT_INTERVAL_MS);\n }\n handleActivityMessage(message) {\n if (message.type === \"activity\") {\n this.handleActivity(message.event);\n }\n }\n handlePresenceMessage(message) {\n switch (message.type) {\n case \"heartbeat\":\n this.handleHeartbeat(message.userId, message.timestamp);\n break;\n case \"presence\":\n this.handlePresence(message.event);\n break;\n }\n }\n handleHeartbeat(userId, timestamp) {\n const wasActive = this.activeClients.has(userId);\n this.activeClients.set(userId, timestamp);\n if (!wasActive) {\n const event = {\n eventData: {\n type: \"presenceArrived\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n handleActivity(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.activityCallbacks) {\n callback(reconstructedEvent);\n }\n }\n handlePresence(event) {\n let reconstructedEvent = event;\n if (event.eventData.type === \"customEvent\" && \"modelName\" in event.eventData && this.schema != null) {\n const modelName = event.eventData.modelName;\n let model;\n for (const key of Object.keys(this.schema)) {\n const candidate = this.schema[key];\n if (candidate != null && typeof candidate === \"object\" && hasMetadata(candidate)) {\n const metadata = getMetadata(candidate);\n if (\"name\" in metadata && metadata.name === modelName) {\n model = candidate;\n break;\n }\n }\n }\n if (model != null) {\n reconstructedEvent = {\n ...event,\n eventData: {\n eventData: event.eventData.eventData,\n model,\n type: \"customEvent\"\n }\n };\n }\n }\n for (const callback of this.presenceCallbacks) {\n callback(reconstructedEvent);\n }\n }\n checkStaleClients() {\n const now = Date.now();\n const staleClients = [];\n for (const [userId, lastSeen] of this.activeClients.entries()) {\n if (now - lastSeen > STALE_CLIENT_TIMEOUT_MS) {\n staleClients.push(userId);\n }\n }\n for (const userId of staleClients) {\n this.activeClients.delete(userId);\n const event = {\n eventData: {\n type: \"presenceDeparted\"\n },\n userId\n };\n this.emitPresenceEvent(event);\n }\n }\n emitPresenceEvent(event) {\n for (const callback of this.presenceCallbacks) {\n callback(event);\n }\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 { generateId, getOntologyRid } from \"@palantir/pack.core\";\nimport { ActivityEventDataType, getMetadata, hasMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { BaseYjsDocumentService, createDocRef, DocumentLiveStatus, DocumentLoadStatus } from \"@palantir/pack.state.core\";\nimport { Base64 } from \"js-base64\";\nimport { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\nimport { MetadataStore } from \"./MetadataStore.js\";\nimport { PresenceManager } from \"./PresenceManager.js\";\nconst EMPTY_DOCUMENT_SECURITY = Object.freeze({\n discretionary: {},\n mandatory: {}\n});\nconst CLIENT_ID_STORAGE_KEY = \"pack-demo-client-id\";\nfunction getOrCreateClientId() {\n try {\n const storedId = sessionStorage.getItem(CLIENT_ID_STORAGE_KEY);\n if (storedId != null) {\n return storedId;\n }\n const newId = crypto.randomUUID();\n sessionStorage.setItem(CLIENT_ID_STORAGE_KEY, newId);\n return newId;\n } catch {\n return crypto.randomUUID();\n }\n}\nexport class DemoDocumentService extends BaseYjsDocumentService {\n clientId;\n dbPrefix;\n metadataStore;\n constructor(app, options = {}) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"DemoDocumentService\"\n }), {\n isDemo: true\n });\n this.clientId = getOrCreateClientId();\n this.dbPrefix = options.dbPrefix ?? \"pack-demo\";\n this.metadataStore = new MetadataStore(this.dbPrefix);\n }\n createInternalDoc(ref, metadata) {\n const internalDoc = this.createBaseInternalDoc(ref, metadata);\n this.ensureUpdateHandler(internalDoc, ref);\n return internalDoc;\n }\n ensureUpdateHandler(internalDoc, docRef) {\n if (internalDoc.updateHandler) {\n return;\n }\n const channel = new BroadcastChannel(`pack-demo-doc-${docRef.id}`);\n internalDoc.channel = channel;\n const updateHandler = (update, origin) => {\n if (origin === \"remote\") return;\n if (isEditDescription(origin)) {\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const modelName = getMetadata(origin.model).name;\n const event = {\n aggregationKey: `${docRef.id}-${modelName}`,\n createdBy: this.clientId,\n createdInstant: Date.now(),\n eventData: {\n eventData: origin.data,\n model: origin.model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n eventId: generateId(),\n isRead: false\n };\n internalDoc.presenceManager.broadcastActivity(event);\n }\n channel.postMessage({\n type: \"update\",\n data: Base64.fromUint8Array(update)\n });\n };\n internalDoc.yDoc.on(\"update\", updateHandler);\n internalDoc.updateHandler = updateHandler;\n channel.onmessage = event => {\n if (event.data.type === \"update\") {\n const update = Base64.toUint8Array(event.data.data);\n Y.applyUpdate(internalDoc.yDoc, update, \"remote\");\n }\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 ({\n documentTypeName,\n name,\n security = EMPTY_DOCUMENT_SECURITY\n }, schema) => {\n await this.metadataStore.whenReady();\n const ontologyRid = await getOntologyRid(this.app);\n const id = generateDocumentId();\n const docRef = createDocRef(this.app, id, schema);\n const metadata = {\n documentTypeName,\n name,\n ontologyRid,\n security // TODO: may want to add in auth.getUserId() as owner here\n };\n this.metadataStore.addDocument(id, metadata);\n const yDoc = this.initializeYDoc(schema);\n this.getCreateInternalDoc(docRef, metadata, yDoc);\n return docRef;\n };\n searchDocuments = async (documentTypeName, schema, options) => {\n await this.metadataStore.whenReady();\n return this.metadataStore.searchDocuments(documentTypeName, options);\n };\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n this.metadataStore.whenReady().then(() => {\n const metadata = this.metadataStore.getDocument(docRef.id);\n if (metadata == null) {\n this.updateMetadataStatus(internalDoc, docRef, {\n error: new Error(\"Document not found\"),\n load: DocumentLoadStatus.ERROR\n });\n return;\n }\n internalDoc.metadata = metadata;\n const unobserve = this.metadataStore.observeDocument(docRef.id, updatedMetadata => {\n if (updatedMetadata != null) {\n internalDoc.metadata = updatedMetadata;\n this.notifyMetadataSubscribers(internalDoc, docRef, updatedMetadata);\n }\n });\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }).catch(error => {\n this.updateMetadataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR\n });\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING,\n live: DocumentLiveStatus.CONNECTING\n });\n try {\n // Ensure update handler is set up (may already be done in createInternalDoc)\n this.ensureUpdateHandler(internalDoc, docRef);\n\n // Set up persistence\n if (!internalDoc.provider) {\n const provider = new IndexeddbPersistence(`${this.dbPrefix}-doc-${docRef.id}`, internalDoc.yDoc);\n internalDoc.provider = provider;\n provider.whenSynced.then(() => {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }).catch(error => {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n });\n } else {\n // Provider already exists, just update status\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED,\n live: DocumentLiveStatus.CONNECTED\n });\n }\n } catch (error) {\n this.updateDataStatus(internalDoc, docRef, {\n error,\n load: DocumentLoadStatus.ERROR,\n live: DocumentLiveStatus.ERROR\n });\n }\n }\n onMetadataSubscriptionClosed(_internalDoc, _docRef) {}\n onDataSubscriptionClosed(internalDoc, _docRef) {\n if (internalDoc.updateHandler) {\n internalDoc.yDoc.off(\"update\", internalDoc.updateHandler);\n internalDoc.updateHandler = undefined;\n }\n if (internalDoc.channel) {\n internalDoc.channel.close();\n internalDoc.channel = undefined;\n }\n if (internalDoc.provider) {\n void internalDoc.provider.destroy();\n internalDoc.provider = undefined;\n }\n if (internalDoc.presenceManager) {\n internalDoc.presenceManager.dispose();\n internalDoc.presenceManager = undefined;\n }\n }\n onActivity(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onActivity(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n onPresence(docRef, callback) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const unsubscribe = internalDoc.presenceManager.onPresence(event => {\n callback(docRef, event);\n });\n return () => {\n unsubscribe();\n };\n }\n updateCustomPresence(docRef, model, eventData, _options) {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (!internalDoc.presenceManager) {\n internalDoc.presenceManager = new PresenceManager(docRef.id, this.clientId, docRef.schema);\n }\n const event = {\n eventData: {\n eventData,\n model,\n type: ActivityEventDataType.CUSTOM_EVENT\n },\n userId: this.clientId\n };\n internalDoc.presenceManager.broadcastPresence(event);\n }\n}\nfunction generateDocumentId() {\n return generateId();\n}\nfunction isEditDescription(obj) {\n return obj != null && typeof obj === \"object\" && \"data\" in obj && \"model\" in obj && typeof obj.model === \"object\" && obj.model != null && hasMetadata(obj.model);\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 { createDocumentServiceConfig } from \"@palantir/pack.state.core\";\nimport { DemoDocumentService } from \"./DemoDocumentService.js\";\nexport { MetadataStore } from \"./MetadataStore.js\";\nexport { PresenceManager } from \"./PresenceManager.js\";\nexport { DemoDocumentService };\nexport function createDemoDocumentServiceConfig(options = {}) {\n return createDocumentServiceConfig((app, config) => new DemoDocumentService(app, config), options);\n}"]}
@@ -1,5 +1,5 @@
1
1
  import type { PackAppInternal, Unsubscribe } from "@palantir/pack.core";
2
- import type { ActivityEvent, DocumentMetadata, DocumentRef, DocumentSchema, Model, ModelData, PresenceEvent } from "@palantir/pack.document-schema.model-types";
2
+ import type { ActivityEvent, DocumentMetadata, DocumentRef, DocumentSchema, Model, ModelData, PresenceEvent, PresencePublishOptions } from "@palantir/pack.document-schema.model-types";
3
3
  import type { CreateDocumentMetadata, InternalYjsDoc, SearchDocumentsResult } from "@palantir/pack.state.core";
4
4
  import { BaseYjsDocumentService } from "@palantir/pack.state.core";
5
5
  import { IndexeddbPersistence } from "y-indexeddb";
@@ -35,6 +35,6 @@ export declare class DemoDocumentService extends BaseYjsDocumentService<DemoInte
35
35
  protected onDataSubscriptionClosed(internalDoc: DemoInternalDoc, _docRef: DocumentRef): void;
36
36
  onActivity<T extends DocumentSchema>(docRef: DocumentRef<T>, callback: (docRef: DocumentRef<T>, event: ActivityEvent) => void): Unsubscribe;
37
37
  onPresence<T extends DocumentSchema>(docRef: DocumentRef<T>, callback: (docRef: DocumentRef<T>, event: PresenceEvent) => void): Unsubscribe;
38
- updateCustomPresence<M extends Model>(docRef: DocumentRef, model: M, eventData: ModelData<M>): void;
38
+ updateCustomPresence<M extends Model>(docRef: DocumentRef, model: M, eventData: ModelData<M>, _options?: PresencePublishOptions): void;
39
39
  }
40
40
  export {};
@@ -1 +1 @@
1
- {"mappings":"AAgBA,cAAc,iBAAiB,mBAAmB;AAElD,cACE,eAGA,kBACA,aACA,gBAEA,OACA,WACA,qBAEK;AAMP,cACE,wBACA,gBACA,6BACK;AACP,SACE,8BAIK;AAEP,SAAS,4BAA4B;AAGrC,SAAS,uBAAuB;AA2BhC,iBAAiB,2BAA2B;UACjC;UACA;;UAGD,wBAAwB,eAAe;CAC/C,UAAU;CACV,kBAAkB;CAClB,WAAW;CACX,iBAAiB,QAAQ,YAAY;;AAGvC,OAAO,cAAM,4BAA4B,uBAAuB,iBAAiB;CAC/E,iBAAiB;CACjB,iBAAiB;CACjB,iBAAiB;CAEjB,YAAY,KAAK,iBAAiB,UAAS;CAU3C,AAAS,kBACP,KAAK,aACL,WAAW,mBACV;CAMH,QAAQ;CAsDR,IAAI;CAMJ,IAAI;CAMJ,SAAS,iBAAwB,UAAU,gBACzC,EAAE,kBAAkB,MAAM,YAAsC,wBAChE,QAAQ,MACP,QAAQ,YAAY;CAsBvB,SAAS,kBAAyB,UAAU,gBAC1C,0BACA,QAAQ,GACR,UAAU;EACR;EACA;EACA;OAED,QAAQ;CAKX,UAAU,6BACR,aAAa,iBACb,QAAQ;CAqCV,UAAU,yBACR,aAAa,iBACb,QAAQ;CA+CV,UAAU,6BACR,cAAc,iBACd,SAAS;CAIX,UAAU,yBACR,aAAa,iBACb,SAAS;CAuBX,WAAW,UAAU,gBACnB,QAAQ,YAAY,IACpB,WAAW,QAAQ,YAAY,IAAI,OAAO,yBACzC;CAgBH,WAAW,UAAU,gBACnB,QAAQ,YAAY,IACpB,WAAW,QAAQ,YAAY,IAAI,OAAO,yBACzC;CAgBH,qBAAqB,UAAU,OAC7B,QAAQ,aACR,OAAO,GACP,WAAW,UAAU","names":[],"sources":["../../src/DemoDocumentService.ts"],"version":3,"file":"DemoDocumentService.d.ts"}
1
+ {"mappings":"AAgBA,cAAc,iBAAiB,mBAAmB;AAElD,cACE,eAGA,kBACA,aACA,gBAEA,OACA,WACA,eACA,8BAEK;AAMP,cACE,wBACA,gBACA,6BACK;AACP,SACE,8BAIK;AAEP,SAAS,4BAA4B;AAGrC,SAAS,uBAAuB;AA2BhC,iBAAiB,2BAA2B;UACjC;UACA;;UAGD,wBAAwB,eAAe;CAC/C,UAAU;CACV,kBAAkB;CAClB,WAAW;CACX,iBAAiB,QAAQ,YAAY;;AAGvC,OAAO,cAAM,4BAA4B,uBAAuB,iBAAiB;CAC/E,iBAAiB;CACjB,iBAAiB;CACjB,iBAAiB;CAEjB,YAAY,KAAK,iBAAiB,UAAS;CAU3C,AAAS,kBACP,KAAK,aACL,WAAW,mBACV;CAMH,QAAQ;CAsDR,IAAI;CAMJ,IAAI;CAMJ,SAAS,iBAAwB,UAAU,gBACzC,EAAE,kBAAkB,MAAM,YAAsC,wBAChE,QAAQ,MACP,QAAQ,YAAY;CAsBvB,SAAS,kBAAyB,UAAU,gBAC1C,0BACA,QAAQ,GACR,UAAU;EACR;EACA;EACA;OAED,QAAQ;CAKX,UAAU,6BACR,aAAa,iBACb,QAAQ;CAqCV,UAAU,yBACR,aAAa,iBACb,QAAQ;CA+CV,UAAU,6BACR,cAAc,iBACd,SAAS;CAIX,UAAU,yBACR,aAAa,iBACb,SAAS;CAuBX,WAAW,UAAU,gBACnB,QAAQ,YAAY,IACpB,WAAW,QAAQ,YAAY,IAAI,OAAO,yBACzC;CAgBH,WAAW,UAAU,gBACnB,QAAQ,YAAY,IACpB,WAAW,QAAQ,YAAY,IAAI,OAAO,yBACzC;CAgBH,qBAAqB,UAAU,OAC7B,QAAQ,aACR,OAAO,GACP,WAAW,UAAU,IACrB,WAAW","names":[],"sources":["../../src/DemoDocumentService.ts"],"version":3,"file":"DemoDocumentService.d.ts"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@palantir/pack.state.demo",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,9 +33,9 @@
33
33
  "tiny-invariant": "^1.3.3",
34
34
  "y-indexeddb": "^9.0.12",
35
35
  "yjs": "^13.6.27",
36
+ "@palantir/pack.document-schema.model-types": "0.4.0",
36
37
  "@palantir/pack.core": "0.2.2",
37
- "@palantir/pack.document-schema.model-types": "0.3.1",
38
- "@palantir/pack.state.core": "0.3.1"
38
+ "@palantir/pack.state.core": "0.4.0"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "zod": "^4.1.0"
@@ -27,6 +27,7 @@ import type {
27
27
  Model,
28
28
  ModelData,
29
29
  PresenceEvent,
30
+ PresencePublishOptions,
30
31
  UserId,
31
32
  } from "@palantir/pack.document-schema.model-types";
32
33
  import {
@@ -377,6 +378,7 @@ export class DemoDocumentService extends BaseYjsDocumentService<DemoInternalDoc>
377
378
  docRef: DocumentRef,
378
379
  model: M,
379
380
  eventData: ModelData<M>,
381
+ _options?: PresencePublishOptions,
380
382
  ): void {
381
383
  const { internalDoc } = this.getCreateInternalDoc(docRef);
382
384